summaryrefslogtreecommitdiffstats
path: root/drakpxelinux.pl
diff options
context:
space:
mode:
authorAntoine Ginies <aginies@mandriva.com>2004-08-12 14:27:22 +0000
committerAntoine Ginies <aginies@mandriva.com>2004-08-12 14:27:22 +0000
commit511b682133ca9b9ca9d103e12bde5ab845e4fab1 (patch)
tree9f60dc1ce4190454e443537067332c8c1e8dd2c1 /drakpxelinux.pl
parentcb5fa5c9792b42eb5fc1b3a7836454bec10322cd (diff)
downloaddrakpxelinux-511b682133ca9b9ca9d103e12bde5ab845e4fab1.tar
drakpxelinux-511b682133ca9b9ca9d103e12bde5ab845e4fab1.tar.gz
drakpxelinux-511b682133ca9b9ca9d103e12bde5ab845e4fab1.tar.bz2
drakpxelinux-511b682133ca9b9ca9d103e12bde5ab845e4fab1.tar.xz
drakpxelinux-511b682133ca9b9ca9d103e12bde5ab845e4fab1.zip
many fix
Diffstat (limited to 'drakpxelinux.pl')
-rw-r--r--drakpxelinux.pl158
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 }
),