summaryrefslogtreecommitdiffstats
path: root/perl-install/standalone/drakautoinst
diff options
context:
space:
mode:
authorMystery Man <unknown@mandriva.org>2003-05-19 14:55:45 +0000
committerMystery Man <unknown@mandriva.org>2003-05-19 14:55:45 +0000
commit7994644e1353db36673c5125ca86b3a6683110f5 (patch)
treeeb390d9388c306c4a05d2d62b9715aca30563628 /perl-install/standalone/drakautoinst
parentbfb5c11017c5a7a76c860d3e01c70ce562231b3f (diff)
downloaddrakx-9_1_38mdk.tar
drakx-9_1_38mdk.tar.gz
drakx-9_1_38mdk.tar.bz2
drakx-9_1_38mdk.tar.xz
drakx-9_1_38mdk.zip
This commit was manufactured by cvs2svn to create tag 'V9_1_38mdk'.V9_1_38mdk
Diffstat (limited to 'perl-install/standalone/drakautoinst')
-rwxr-xr-xperl-install/standalone/drakautoinst354
1 files changed, 0 insertions, 354 deletions
diff --git a/perl-install/standalone/drakautoinst b/perl-install/standalone/drakautoinst
deleted file mode 100755
index 789f57d3c..000000000
--- a/perl-install/standalone/drakautoinst
+++ /dev/null
@@ -1,354 +0,0 @@
-#!/usr/bin/perl
-
-#
-# Guillaume Cottenceau (gc@mandrakesoft.com)
-#
-# Copyright 2001-2002 MandrakeSoft
-#
-# This software may be freely redistributed under the terms of the GNU
-# public license.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-#
-
-use lib qw(/usr/lib/libDrakX);
-
-use standalone; #- warning, standalone must be loaded very first, for 'explanations'
-
-use common;
-use interactive;
-use devices;
-use detect_devices;
-use steps;
-use commands;
-use fs;
-use Data::Dumper;
-
-
-local $_ = join '', @ARGV;
-
-$::direct = /-direct/;
-
-my $in = 'interactive'->vnew('su', 'default');
-
-my $imagefile = "/root/drakx/replay_install.img";
--f $imagefile or $in->ask_warn(N("Error!"),
- N("I can't find needed image file `%s'.", $imagefile), 1), quit_global($in, 0);
-
-$::direct or $in->ask_okcancel(N("Auto Install Configurator"),
-N("You are about to configure an Auto Install floppy. This feature is somewhat dangerous and must be used circumspectly.
-
-With that feature, you will be able to replay the installation you've performed on this computer, being interactively prompted for some steps, in order to change their values.
-
-For maximum safety, the partitioning and formatting will never be performed automatically, whatever you chose during the install of this computer.
-
-Do you want to continue?"), 1) or quit_global($in, 0);
-
-
-my @manual_steps = qw(doPartitionDisks formatPartitions);
-my @all_steps;
-my @choices;
-
-my $st = \%steps::installSteps;
-
-for (my $f = $st->{first}; $f; $f = $st->{$f}{next}) {
- next if member($f, @manual_steps);
- my $def_choice = 'replay';
- push @choices, { label => translate($st->{$f}{text}), val => \$def_choice, list => [ N("replay"), N("manual") ] };
- push @all_steps, [ $f, \$def_choice ];
-}
-
-$in->ask_from(N("Automatic Steps Configuration"),
- N("Please choose for each step whether it will replay like your install, or it will be manual"),
- \@choices
- ) or quit_global($in, 0);
-
-${$_->[1]} eq N("manual") and push @manual_steps, $_->[0] foreach @all_steps;
-
-my $mountdir = "/root/tmp/drakautoinst-mountdir"; -d $mountdir or mkdir $mountdir, 0755;
-my $floppy = detect_devices::floppy();
-my $dev = devices::make($floppy);
-$in->ask_okcancel('', N("Insert a blank floppy in drive %s", $floppy), 1) or quit_global($in, 0);
-{
- log::explanations(N("Creating auto install floppy"));
- my $w = $in->wait_message('', N("Creating auto install floppy"));
- commands::dd("if=$imagefile", "of=$dev", "bs=1440", "count=1024");
- common::sync();
-}
-fs::mount($dev, $mountdir, 'vfat', 0);
-my $cfgfile = "$mountdir/auto_inst.cfg";
-eval(cat_($cfgfile));
-my $o_old = $o;
-my %struct_gui;
-
-if (!$::isEmbedded && $in->isa('interactive::gtk')) {
- require ugtk2;
- ugtk2->import(qw(:helpers :wrappers));
-
- my %tree;
- $struct_gui{$_} = 'General' foreach qw(lang isUpgrade autoExitInstall timezone default_packages mkbootdisk);
- $struct_gui{$_} = 'Security' foreach qw(crypto security);
- $struct_gui{$_} = 'Harddrive' foreach qw(partitions manualFstab useSupermount partitioning);
- $struct_gui{$_} = 'Network' foreach qw(intf netc netcnx);
- $struct_gui{$_} = 'Users' foreach qw(superuser users authentication);
- $struct_gui{$_} = 'Hardware' foreach qw(keyboard mouse X printer wacom nomouseprobe);
-
- %pixmap = ( lang => 'language',
- isUpgrade => '',
- security => 'security',
- autoExitInstall => '',
- timezone => '',
- default_packages => '',
- partitions => 'harddrive',
- manualFstab => 'partition',
- useSupermount => '',
- partitioning => 'partition',
- intf => 'network',
- netc => 'network',
- netcnx => 'network',
- superuser => 'user',
- users => 'user',
- authentication => '',
- keyboard => 'keyboard',
- mouse => 'mouse',
- X => 'X',
- printer => 'printer',
- wacom => '',
- );
-
- member($_, keys %struct_gui) and push @{$tree{$struct_gui{$_}}}, [ $_ , $pixmap{$_}, h2widget($o->{$_}, "\$o->\{$_\}") ] foreach keys %$o;
-
- my $W = ugtk2->new('$o edition');
- my @box_to_hide;
- my $nb_pages=0;
- my $notebook = new Gtk2::Notebook;
- $notebook->set_show_border(0);
- $notebook->set_show_tabs(0);
- $notebook->append_page(gtkpack_(gtkset_border_width(new Gtk2::VBox(0,0), 10),
- 1, new Gtk2::VBox(0,0),
- 0, gtkpack_(new Gtk2::HBox(0,0),
- 1, new Gtk2::VBox(0,0),
- 0, gtkadd(gtkset_shadow_type(new Gtk2::Frame, 'etched-in'),
- gtkcreate_img('mdk_logo')),
- 1, new Gtk2::VBox(0,0),
- ),
- 0, N("\nWelcome.\n\nThe parameters of the auto-install are available in the sections on the left"),
- 1, new Gtk2::VBox(0,0),
- ), undef);
- $notebook->show_all;
- $notebook->set_page(0);
-
- gtkadd($W->{window},
- gtkpack_(new Gtk2::VBox(0,5),
- 1, gtkpack_(new Gtk2::HBox(0,0),
- 0, gtkadd(gtkset_size_request(gtkset_shadow_type(new Gtk2::Frame, 'in'), 130, 470),
- gtkpack_(new Gtk2::VBox(0,0),
- map {
- my $box = new Gtk2::VBox(0,0);
- push @box_to_hide, $box;
- $box->{vis} = 0;
- my @button_to_hide;
- 0, gtksignal_connect(new Gtk2::Button($_), clicked => sub {
- if ($box->{vis}) { $box->hide(); $box->{vis} = 0; $notebook->set_page(0) }
- else {
- $_->hide, $_->{vis}=0 foreach @box_to_hide;
- $box->show; $box->{vis} = 1;
- $box->{active_function} and $box->{active_function}->();
- }
- }), 1, gtkpack__($box,
- map {
- my $button = gtkset_relief(new Gtk2::ToggleButton(), 'none');
- push @button_to_hide, $button;
- my $gru = $_->[0];
- $notebook->append_page(gtkshow($_->[2]), undef);
- $nb_pages++;
- my $local_page = $nb_pages;
- my $function = sub { $notebook->set_page($local_page) };
- gtksignal_connect($button, toggled => sub {
- $button->get_active() and $function->()
- });
- my $b;
- if ($_->[1] ne "") { $b = gtkcreate_img($_->[1]) } else { $b = () };
- gtksignal_connect(gtkadd($button,
- gtkpack__(new Gtk2::VBox(0,3),
- $b,
- translate($_->[0]),
- )
- ), released => sub {
- $button->get_active() or $button->set_active(1),return;
- $_->set_active(0) foreach @button_to_hide;
- $button->set_active(1);
- $box->{active_function} = $function;
- $function->();
- })
- } @{$tree{$_}}
- )
- } keys(%tree)
- )
- ),
- 1, $notebook,
- ),
- 0, new Gtk2::HSeparator,
- 0, gtkadd(gtkset_border_width(gtkset_layout(new Gtk2::HButtonBox, 'end'), 5),
- gtksignal_connect(new Gtk2::Button(N("Accept")), clicked => sub { Gtk2->main_quit }),
- gtksignal_connect(new Gtk2::Button(N("Cancel")), clicked => sub { $o = $o_old; Gtk2->main_quit; quit_global($in, 0) }),
- )
- )
- );
- $_->hide foreach @box_to_hide;
-# $W->{window}->show_all;
-# gtkadd($W->{window},
-# gtkpack_($W->create_box_with_title(N("Edit variables")),
-# 1, my $notebook = create_notebook( map { $_, h2widget($o->{$_}, "\$o->\{$_\}") } keys %$o ),
-# 0, gtkpack(gtkset_border_width(new Gtk2::HBox(0,0),5), $W->create_okcancel),
-# ),
-# );
-# $notebook->set_tab_pos('left');
-# $::isEmbedded and gtkflush();
- $W->main;
-# $W->destroy();
-}
-
-$o->{interactiveSteps} = \@manual_steps;
-
-my $str = join('',
-"#!/usr/bin/perl -cw
-#
-# Special file generated by ``drakautoinst''.
-#
-# You should check the syntax of this file before using it in an auto-install.
-# You can do this with 'perl -cw auto_inst.cfg.pl' or by executing this file
-# (note the '#!/usr/bin/perl -cw' on the first line).
-",
- Data::Dumper->Dump([$o], ['$o']), "\0");
-$str =~ s/ {8}/\t/g; #- replace all 8 space char by only one tabulation, this reduces file size so much :-)
-output($cfgfile, $str);
-
-fs::umount($mountdir);
-
-$in->ask_okcancel(N("Congratulations!"),
-N("The floppy has been successfully generated.
-You may now replay your installation."));
-
-quit_global($in, 0);
-
-
-sub quit_global {
- my ($in, $exitcode) = @_;
- $in->exit($exitcode);
-}
-
-
-
-sub h2widget {
- my ($k, $label) = @_;
- my $w;
- if (ref($k) =~ /HASH/) {
- my $vb;
- my @widget_list;
- my $i = -1;
- my @list_keys = keys(%{$k});
- if (ref(${$k}{$list_keys[0]}) =~ /HASH/) {
- $i++;
- my ($button_add, $button_remove);
- $w = gtkpack_(new Gtk2::VBox(0,0),
- 1, create_scrolled_window(gtkpack__($vb = new Gtk2::VBox(0,10),
- $widget_list[$i] = create_packtable({ col_spacings => 10, row_spacings => 3 },
- map {
- my $e;
- $e = h2widget(${$k}{$_}, "$label\{$_\}");
- [ "$_ : ", $e ] } @list_keys
- ),
- )
- ),
- control_buttons(${$k}{$list_keys[0]},
- sub { my ($vb, $widget_list2, $ref_local_k, $i) = @_;
- my @widget_list = @{$widget_list2};
- my $field = $in->ask_from_entry(N("Auto Install"), ("Enter the name of the new field you want to add")) or return undef;
- $field eq '' and return undef;
- gtkpack__($vb,
- $widget_list[$i] = create_packtable({ col_spacings => 10, row_spacings => 3 },
- [ "$field : ", h2widget($ref_local_k, "$label\{$field\}") ])
- );
- @{$widget_list2} = @widget_list;
- },
- $vb, \$i, \@widget_list)
- );
- } else {
- $w = create_packtable({ col_spacings => 10, row_spacings => 3 },
- map { create_entry_element(${$k}{$_}, "$label\{$_\}", $_) } @list_keys
- )
- }
- } elsif (ref($k) =~ /ARRAY/) {
- my $vb;
- my @widget_list;
- my $i = -1;
- $w = gtkpack_(new Gtk2::VBox(0,0),
- 1, create_scrolled_window(
- gtkpack__($vb = new Gtk2::VBox(0,5),
- map { $i++; $widget_list[$i] = h2widget($_, "$label\[$i\]") } @{$k},
- )
- ),
- control_buttons(@{$k}[0],
- sub { my ($vb, $widget_list2, $ref_local_k, $i) = @_;
- my @widget_list = @{$widget_list2};
- gtkpack__($vb, $widget_list[$i] = h2widget($ref_local_k, "$label\[$i\]"));
- @{$widget_list2} = @widget_list;
- },
- $vb, \$i, \@widget_list)
- );
- } else {
- $label =~ /\$o->\{(.+)\}/;
- $w = create_packtable({ col_spacings => 10, row_spacings => 3 },
- create_entry_element($k, $label, $1))
- }
- return $w;
-}
-
-
-sub create_entry_element {
- my ($text, $value, $label) = @_;
- my $e;
- if (ref $text =~ /HASH/) {
- return ([ "$label : ", h2widget($text, $label) ]);
- } elsif (ref $text =~ /ARRAY/) {
- return ([ "$label : ", h2widget($text, $label) ]);
- } else {
- $e = new Gtk2::Entry;
- $e->{value} = $value;
- my $tag = Gtk2->timeout_add(1000, sub { $e->set_text($text); 0 });
- gtksignal_connect($e, changed => sub {
- my $exe = $e->{value} . "='" . $e->get_text() . "'";
- print "EXEC : $exe\n ";
- eval $exe;
- });
- }
- [ $label ? "$label : " : "" , $e ]
-}
-
-sub control_buttons {
- my ($ref_local_k, $local_gui, $vb, $j, $widget_list2) = @_;
- my @widget_list = @{$widget_list2};
- my $i = ${$j};
- ref($ref_local_k) =~ /HASH/ or return();
- my (%local_k) = %{$ref_local_k};
- my ($button_add, $button_remove);
- 0, gtkadd(gtkset_border_width(gtkset_layout(new Gtk2::HButtonBox, 'spread'), 5),
- gtksignal_connect($button_add = new Gtk2::Button(N("Add an item")), clicked => sub {
- $local_k{$_} = undef foreach keys %local_k;
- $i++;
- $local_gui->($vb, \@widget_list, \%local_k, $i) or $i--, return;
- $i >= 0 and $button_remove->set_sensitive(1);
- }
- ),
- gtksignal_connect($button_remove = new Gtk2::Button(N("Remove the last item")), clicked => sub {
- $i >= 0 or return;
- $widget_list[$i]->destroy();
- $i--;
- $i >= 0 or $button_remove->set_sensitive(0);
- }
- )
- )
-}