diff options
author | Antoine Ginies <aginies@mandriva.com> | 2004-08-12 14:27:22 +0000 |
---|---|---|
committer | Antoine Ginies <aginies@mandriva.com> | 2004-08-12 14:27:22 +0000 |
commit | 511b682133ca9b9ca9d103e12bde5ab845e4fab1 (patch) | |
tree | 9f60dc1ce4190454e443537067332c8c1e8dd2c1 | |
parent | cb5fa5c9792b42eb5fc1b3a7836454bec10322cd (diff) | |
download | drakpxelinux-511b682133ca9b9ca9d103e12bde5ab845e4fab1.tar drakpxelinux-511b682133ca9b9ca9d103e12bde5ab845e4fab1.tar.gz drakpxelinux-511b682133ca9b9ca9d103e12bde5ab845e4fab1.tar.bz2 drakpxelinux-511b682133ca9b9ca9d103e12bde5ab845e4fab1.tar.xz drakpxelinux-511b682133ca9b9ca9d103e12bde5ab845e4fab1.zip |
many fix
-rw-r--r-- | drakpxelinux.pl | 158 |
1 files changed, 91 insertions, 67 deletions
diff --git a/drakpxelinux.pl b/drakpxelinux.pl index bf26980..64d4e07 100644 --- a/drakpxelinux.pl +++ b/drakpxelinux.pl @@ -1,4 +1,4 @@ -#!/usr/bin/perl +#!/usr/bin/perl -w # # Copyright (C) 2004 by Mandrakesoft aginies _ateuh_ mandrakesoft.com # @@ -20,14 +20,15 @@ # Quick configuration of PXE menu parameters # use with care developement release.... # thx R1 for test and some debug +# cvs.mandrakesoft.com module: /soft/drakpxelinux -my $version = "0.9"; +my $version = "0.9.1"; use lib qw(/usr/lib/libDrakX); use standalone; use strict; use common; -use MDK::Common; +#use MDK::Common; use ugtk2 qw(:ask :helpers :wrappers :create :dialogs); use interactive; @@ -44,7 +45,6 @@ use constant TRUE => 1; # default VAR my $conf = "/var/lib/tftpboot/X86PC/linux/pxelinux.cfg/default"; -#my $conf = "/tmp/tr"; my $HOSTNAME = chomp_(`hostname`); my $TFTPDIR = "/var/lib/tftpboot"; my $CLIENTPATH = '/X86PC/linux'; @@ -63,16 +63,16 @@ my $DOMAINNAME = chomp_(`dnsdomainname`); my $help = "" . N("PXE Label: the name displayed in PXE menu (a word/number)") . "\n" . -N("Server: IP address of server, which contains installation directory") . "\n" . -N("Kernel: memdisk or vmlinuz") . "\n" . -N("Initrd: network boot image (network.img ) or all.rdz") . "\n" . -N("Interface: network interface used for the installation process") . "\n" . -N("Network: DHCP or an IP address") . "\n" . -N("Directory: full path to MDK install server directory") . "\n" . -N("Method: installation method: choose NFS or HTTP") . "\n" . -N("Ramsize: ramsize parameter on boot disk") . "\n" . -N("Display: export display to another computer (ie: 10.0.1.33:0)") . "\n" . -N("VGA: if you encounter any problem with VGA, please adjust") . "\n" . +N("Server: IP address of server, which contains installation directory") . "\n" . +N("Kernel: memdisk or vmlinuz") . "\n" . +N("Initrd: network boot image (network.img ) or all.rdz") . "\n" . +N("Interface: network interface used for the installation process") . "\n" . +N("Network: DHCP or an IP address") . "\n" . +N("Directory: full path to MDK install server directory") . "\n" . +N("Method: installation method: choose NFS or HTTP") . "\n" . +N("Ramsize: ramsize parameter on boot disk") . "\n" . +N("Display: export display to another computer (ie: 10.0.1.33:0)") . "\n" . +N("VGA: if you encounter any problem with VGA, please adjust") . "\n" . ""; @@ -111,7 +111,26 @@ if (!-f $conf) { my @listpxe; my @list_method = qw(nfs http); push @list_method, ""; my @list_ram = qw(32000 48000 64000 96000 128000); -my @list_vga = qw(automatic normal 785 788 791 794 text); +my @list_vga_resolution = qw(vga text automatic 640x480 800x600 1024x768 1280x1024); +my %list_vga_code = ( + 'vga' => "normal", + 'text' => "text", + '640x480' => "785", + '800x600' => "788", + '1024x768' => "791", + '1280x1024' => "794", + 'automatic' => "", + ); + +my %list_vga_res = ( + 'normal' => "vga", + 'text' => "text", + '785' => "640x480", + '788' => "800x600", + '791' => "1024x768", + '794' => "1280x1024", + ); + my @list_eth = qw(eth0 eth1 eth2); push @list_eth, ""; use constant COLUMN_LABEL => 0; @@ -159,10 +178,11 @@ sub get_items() { if ($directory) { $directoryall = $directory } else { $directoryall = $director } my ($allopt) = m!\s*APPEND\s(.*)!; my ($autocomp) = m!\bautomatic\b=(.*?)\s!; - my ($devram) = m!root=/dev/ram3\srw!; - my $optionsall = join(' ', grep { ! /$devram/ && ! /initrd=$initall/ && !/display=$displayall/ && ! /ramdisk_size=$ramdiskall/ && ! /automatic=$autocomp/ && !/vga=$vgaall/ } split(' ', $allopt)); + my ($devram) = m!root=(/dev/ram3\srw)!; + $allopt and my $optionsall = join(' ', grep { ! /root=$devram/ && ! /initrd=$initall/ && !/display=$displayall/ && ! /ramdisk_size=$ramdiskall/ && ! /automatic=$autocomp/ && !/vga=$vgaall/ } split(' ', $allopt)); if ($label && $kernel && $initall) { my $information = get_information($label); +# my $vgares = $list_vga_res{$vgaall}; # now push data in @ push @listpxe, { label => $label, @@ -269,7 +289,8 @@ label $a->{label} sub create_model { get_items(); - my $model = Gtk2::ListStore->new(("Glib::String") x13); +# my $model = Gtk2::ListStore->new(("Glib::String") x13); + my $model = Gtk2::ListStore->new("Glib::String", "Glib::String", "Glib::String", "Glib::String", "Glib::String", "Glib::String", "Glib::String", "Glib::String", "Glib::String", "Glib::String", "Glib::String", "Glib::String", "Glib::String"); foreach my $a (@listpxe) { my $iter = $model->append; $model->set($iter, @@ -467,6 +488,7 @@ sub edit_box_item { $fd->signal_connect("destroy", sub { $fd->hide }); $fd->ok_button->signal_connect(clicked => sub { my $file = $fd->get_filename; + my $filesel = basename($file); if ($test eq "dir") { -d $file or err_dialog(N("Error!"), N("Should be a directory.")) and return; } else { @@ -478,8 +500,7 @@ sub edit_box_item { run_program::get_stdout("file $file") =~ /initrd/ or err_dialog(N("Error!"), N("Should be an initrd file")) and return; } my $d = dirname($file); - my $filesel = basename($file); - if ($d =~ /images/) { print "here"; $filesel = "images/" . $filesel; } + if ($d =~ /images/) { print "here"; $filesel = "images/" . $filesel } print "$filesel\n"; $data->set_text($filesel); $fd->hide; @@ -518,9 +539,9 @@ sub edit_box_item { $interface->entry->set_text($listpxe[$i]{interface}); set_help_tip($interface, 'interface'); - my $network = Gtk2::Entry->new; - $network->set_text($listpxe[$i]{network}); - set_help_tip($network, 'network'); +# my $network = Gtk2::Entry->new; +# $network->set_text($listpxe[$i]{network}); +# set_help_tip($network, 'network'); my $server = Gtk2::Entry->new; $server->set_text($listpxe[$i]{server}); @@ -534,7 +555,6 @@ sub edit_box_item { my $buttondir = Gtk2::Button->new(N("Select directory")); $buttondir->signal_connect(clicked => sub { $file_dialogd->show }); - my $ramdisk = new Gtk2::OptionMenu(); $ramdisk->set_popdown_strings(@list_ram); if ($listpxe[$i]{ramdisk} eq "") { $listpxe[$i]{ramdisk} = "128000" } @@ -542,9 +562,9 @@ sub edit_box_item { set_help_tip($ramdisk, 'ramsize'); my $vga = new Gtk2::OptionMenu(); - $vga->set_popdown_strings(@list_vga); + $vga->set_popdown_strings(@list_vga_resolution); if ($listpxe[$i]{vga} eq "automatic") { $listpxe[$i]{vga} = "" } - $vga->entry->set_text($listpxe[$i]{vga}); + $vga->entry->set_text($list_vga_res{$listpxe[$i]{vga}}); set_help_tip($vga, 'vga'); my $display = Gtk2::Entry->new; @@ -566,10 +586,12 @@ sub edit_box_item { ); }; + # display IPADDRESS only if dhcp is not selected my $ipaddr = Gtk2::Entry->new; - $ipaddr->set_sensitive(0); - my $toggledhcp = Gtk2::CheckButton->new(N("DHCP")); - $toggledhcp->set_active(1); + my $toggledhcp = Gtk2::CheckButton->new(N("DHCP or IP addresss")); + if ($listpxe[$i]{network} eq "dhcp") { $toggledhcp->set_active(1) and $ipaddr->set_sensitive(0) + } else { $toggledhcp->set_active(0) and $ipaddr->set_sensitive(1) } + $toggledhcp->signal_connect(clicked => sub { my $s = $toggledhcp->get_active; if ($s eq "1") { @@ -582,35 +604,43 @@ sub edit_box_item { # ok, lets create the dialog box :-) gtkpack_($dialog->vbox, 0, gtkadd(Gtk2::Frame->new(N("PXE entry")), - gtkpack_(gtkset_border_width(Gtk2::VBox->new, 3), + gtkpack_(gtkset_border_width(Gtk2::VBox->new, 5), 0, $label_and_widgets->(N("Label"), $label, ""), 0, $label_and_widgets->(N("Entry description"), $info, ""), - 0, Gtk2::VSeparator->new(), + 0, Gtk2::VSeparator->new, 0, $label_and_widgets->(N("Kernel image"), $kernel, $buttonkernel), 0, $label_and_widgets->(N("Initrd image"), $initrd, $buttoninitrd), ), ), + 0, gtkadd(Gtk2::Frame->new(N("Mandrakelinux installer options")), - gtkpack_(gtkset_border_width(Gtk2::VBox->new, 3), + gtkpack_(gtkset_border_width(Gtk2::VBox->new, 5), 0, $label_and_widgets->(N("Ramdisk size"), $ramdisk, ""), 0, $label_and_widgets->(N("Custom Option"), $option, ""), 0, $label_and_widgets->(N("Frame Buffer resolution"), $vga, ""), 0, $label_and_widgets->(N("Remote IP of X server"), $display, ""), - ), - ), - 0, gtkadd(Gtk2::Frame->new(N("Automatic Options")), - gtkpack_(gtkset_border_width(Gtk2::VBox->new, 3), - 0, $label_and_widgets->(N("Installation method"), $automatic, ""), - 0, $label_and_widgets->(N("Network Interface"), $interface, ""), - 0, $toggledhcp, - 0, $ipaddr, - 0, $label_and_widgets->(N("Remote Server name"), $server, ""), - 0, $label_and_widgets->(N("Remote installation Directory"), $directory, ""), + 0, gtkadd(Gtk2::Frame->new(N("Automatic Options")), + gtkpack_(gtkset_border_width(Gtk2::VBox->new, 5), + 0, $label_and_widgets->(N("Installation method"), $automatic, ""), + 0, $label_and_widgets->(N("Network Interface"), $interface, ""), + 0, gtkpack_(Gtk2::HBox->new(0,5), + 0, gtkadd_widget($size_groups{label}, $toggledhcp), + 1, gtkadd_widget($size_groups{widget}, $ipaddr), + 2, gtkadd_widget($size_groups{button}, ""), + ), + 0, $label_and_widgets->(N("Remote Server name"), $server, ""), + 0, $label_and_widgets->(N("Remote installation Directory"), $directory, ""), + ), + ), ), ), 0, create_okcancel({ cancel_clicked => sub { $dialog->destroy }, ok_clicked => sub { + my $vgacode = $list_vga_code{$vga->entry->get_text}; + my $test = $ipaddr->get_text; + my $net; + if ($test) { my $net = $ipaddr->get_text } else { my $net = "dhcp" } #ask_okcancel("are you sure you want to update all those values ?"); $listpxe[$i]{label} = $label->get_text; $listpxe[$i]{info} = $info->get_text; @@ -618,11 +648,11 @@ sub edit_box_item { $listpxe[$i]{initrd} = $initrd->get_text; $listpxe[$i]{automatic} = $automatic->entry->get_text; $listpxe[$i]{interface} = $interface->entry->get_text; - $listpxe[$i]{network} = $network->get_text; + $listpxe[$i]{network} = $net; $listpxe[$i]{server} = $server->get_text; $listpxe[$i]{directory} = $directory->get_text; $listpxe[$i]{ramdisk} = $ramdisk->entry->get_text; - $listpxe[$i]{vga} = $vga->entry->get_text; + $listpxe[$i]{vga} = $vgacode; $listpxe[$i]{display} = $display->get_text; $listpxe[$i]{option} = $option->get_text; @@ -719,7 +749,7 @@ sub cell_edited { } } elsif ($column == COLUMN_AUTOMATIC) { my $i = ($path->get_indices)[0]; - if (!member($new_text, @list_method) || ($listpxe[$i]{kernel} =~ /memdisk/)) { + if (!member($new_text, @list_method) || $listpxe[$i]{kernel} =~ /memdisk/) { return; } else { $listpxe[$i]{automatic} = $new_text; @@ -727,43 +757,43 @@ sub cell_edited { } } elsif ($column == COLUMN_INTERFACE) { my $i = ($path->get_indices)[0]; - if (member($new_text, @list_eth) || ($listpxe[$i]{kernel} != /memdisk/)) { + if (member($new_text, @list_eth) || $listpxe[$i]{kernel} !~ /memdisk/) { $listpxe[$i]{interface} = $new_text; $model->set($iter, $column, $listpxe[$i]{interface}); } } elsif ($column == COLUMN_NETWORK) { my $i = ($path->get_indices)[0]; - if ($listpxe[$i]{kernel} != /memdisk/) { + if ($listpxe[$i]{kernel} !~ /memdisk/) { $listpxe[$i]{network} = $new_text; $model->set($iter, $column, $listpxe[$i]{network}); } } elsif ($column == COLUMN_SERVER) { my $i = ($path->get_indices)[0]; - if ($listpxe[$i]{kernel} != /memdisk/) { + if ($listpxe[$i]{kernel} !~ /memdisk/) { $listpxe[$i]{server} = $new_text; $model->set($iter, $column, $listpxe[$i]{server}); } } elsif ($column == COLUMN_DIRECTORY) { my $i = ($path->get_indices)[0]; - if (-d $new_text || ($listpxe[$i]{kernel} != /memdisk/)) { + if (-d $new_text || $listpxe[$i]{kernel} !~ /memdisk/) { $listpxe[$i]{directory} = $new_text; $model->set($iter, $column, $listpxe[$i]{directory}); } } elsif ($column == COLUMN_RAMDISK) { my $i = ($path->get_indices)[0]; - if (member($new_text, @list_ram) || ($listpxe[$i]{kernel} != /memdisk/)) { + if (member($new_text, @list_ram) || $listpxe[$i]{kernel} !~ /memdisk/) { $listpxe[$i]{ramdisk} = $new_text; $model->set($iter, $column, $listpxe[$i]{ramdisk}); } } elsif ($column == COLUMN_VGA) { my $i = ($path->get_indices)[0]; - if (member($new_text, @list_vga) || ($listpxe[$i]{kernel} != /memdisk/)) { + if (member($new_text, @list_vga_resolution) || $listpxe[$i]{kernel} !~ /memdisk/) { $listpxe[$i]{vga} = $new_text; $model->set($iter, $column, $listpxe[$i]{vga}); } } elsif ($column == COLUMN_DISPLAY) { my $i = ($path->get_indices)[0]; - if ($listpxe[$i]{kernel} != /memdisk/) { + if ($listpxe[$i]{kernel} !~ /memdisk/) { $listpxe[$i]{display} = $new_text; $model->set($iter, $column, $listpxe[$i]{display}); } @@ -779,8 +809,7 @@ sub show_help { info_dialog("help", gtkpack_(gtkset_border_width(Gtk2::VBox->new, 3), 0, $help, 0, gtksignal_connect(set_help_tip(Gtk2::Button->new(N("online PXE documentation")), 'helponline'), - # FIXME: we lacks a web programe here: - clicked => sub { open(F, "mozilla http://clic.mandrakesoft.com/documentation/pxe/ |") } + clicked => sub { local *F; open(F, "mozilla http://clic.mandrakesoft.com/documentation/pxe/ |") } ), ), ) @@ -862,7 +891,6 @@ sub save_config { print " - Backup of $old configuration\n"; cp_af($old, $old . '.' . $DATE); } - return($old . '.' . $DATE); } # set default PXE message @@ -950,30 +978,27 @@ EOF } # add colum to model +# fixed :-) sub add_columns { my $treeview = shift; my $model = $treeview->get_model; - # horrible hack to avoid: GLib-GObject-CRITICAL **: file gobject.c: line 1019 (g_object_set_property): assertion `G_IS_VALUE (value)' failed at drakpxe2.pl line 640. - my $t = "0"; - my @j = qw(Label Info Kernel Initrd Method Interface Network Server Directory Ramdisk vga Display Extra Options); each_index { my $renderer = Gtk2::CellRendererText->new; $renderer->set(editable => 0); $renderer->signal_connect(edited => \&cell_edited, $model); $renderer->set_data(column => $::i); - $treeview->insert_column_with_attributes(-1, $j[$t], $renderer, 'text' => $::i); - $t++; - } (qw(x x x x x x x x x x x x x)); -#(("Label"), ("Info"), ("Kernel"), ("Initrd"), ("Method"), ("Interface"), ("Network"), ("Server"), ("Directory"), ("Ramdisk"), ("vga"), ("Display"), ("Extra"), ("Options")); + $treeview->insert_column_with_attributes(-1, $_, $renderer, 'text' => $::i); + } N("Label"), N("Entry Description"), N("Kernel image"), N("Initrd image"), N("Installation method"), N("Network interface"), N("DHCP or IP address"), N("Remote server name"), N("Remote installation Directory"), N("Ramdisk size"), N("Frame buffer resolution"), N("Remote IP of X server"), N("Custom options"); } + ############### # Main Program ############### # check if first launch if (! -f "$X86/drakwizard_pxe") { - info_dialog(N("Please configure a PXE server"), N("Its seems this is the first time you run this tool.\n") . ("A wizard will apppear to configure your pxe server.")); + info_dialog(N("Please configure a PXE server"), N("Its seems this is the first time you run this tool.\nA wizard will apppear to configure your pxe server.")); launch_pxe_server(); } check_pxe_conf(); @@ -1023,7 +1048,6 @@ my $okcancel = create_okcancel({ ok_clicked => &write_conf_pxe, }, ); -; # main interface $W->add(gtkpack_(Gtk2::VBox->new(0,0), @@ -1040,14 +1064,14 @@ $W->add(gtkpack_(Gtk2::VBox->new(0,0), } }), 0, gtksignal_connect(set_help_tip(Gtk2::Button->new(N("Remove PXE entry")), 'removepxe'), clicked => sub { - remove_item($model, $treeview); } + remove_item($model, $treeview) } ), 0, gtksignal_connect(set_help_tip(Gtk2::Button->new(N("Edit PXE entry")), 'editb'), clicked => sub { - edit_box_item($model, $treeview); } + edit_box_item($model, $treeview) } ), 0, Gtk2::Label->new(N("boot:")), 0, $labelscombo, - 0, Gtk2::VSeparator->new(), + 0, Gtk2::VSeparator->new, 0, gtksignal_connect(new Gtk2::Button(N("Help")), clicked => sub { show_help } ), |