summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSteffen Winterfeldt <wfeldt@opensuse.org>2009-10-14 15:32:14 +0200
committerSteffen Winterfeldt <wfeldt@opensuse.org>2009-10-14 15:32:14 +0200
commit6216a706618672ac9881430b8301251a16ccaf5c (patch)
treed459ec5fbd928140ea3ba4e7e1d27f9865f5e9c0
parent7ec675aaa7e13172f5f633697b39773dd0fd8976 (diff)
- support pxe setup in test script
-rw-r--r--Changelog3
-rw-r--r--VERSION2
-rw-r--r--doc/gfxboot.812
-rwxr-xr-xgfxboot157
-rwxr-xr-xgfxtest12
-rw-r--r--test/pxe/gfxtest.config15
6 files changed, 186 insertions, 15 deletions
diff --git a/Changelog b/Changelog
index 281d1ab..008bf31 100644
--- a/Changelog
+++ b/Changelog
@@ -1,3 +1,6 @@
+14/10/2009: v4.1.34
+ - support pxe setup in test script
+
12/10/2009: v4.1.33
- updated speech samples
diff --git a/VERSION b/VERSION
index f8c734e..4aa7d66 100644
--- a/VERSION
+++ b/VERSION
@@ -1 +1 @@
-4.1.33
+4.1.34
diff --git a/doc/gfxboot.8 b/doc/gfxboot.8
index d4dba07..45d9064 100644
--- a/doc/gfxboot.8
+++ b/doc/gfxboot.8
@@ -72,10 +72,10 @@ Try current config (needs some virtual machine).
Test only (don't actually change any files).
.TP
\fB-b\fR, \fB--bootloader\fR \fIBOOTLOADER\fR
-Use BOOTLOADER (grub, lilo, isolinux, syslinux) for preview.
+Use BOOTLOADER (grub, lilo, isolinux, syslinux, pxelinux) for preview.
.TP
\fB-m\fR, \fB--vm\fR \fIVM\fR
-Use virtual machine VM (bochs, qemu, qemu-i386, qemu-x86_64, vbox, vboxsdl, vmplayer, vmware) for preview.
+Use virtual machine VM (bochs, qemu, qemu32, qemu64, vbox, vbox64, vmplayer, vmware) for preview.
.TP
\fB--grub\fR \fIDIRECTORY|RPM\fR
Use grub from DIRECTORY or RPM (default is /).
@@ -89,6 +89,9 @@ Use syslinux from DIRECTORY or RPM (default is /).
\fB--isolinux\fR \fIDIRECTORY|RPM\fR
Use isolinux from DIRECTORY or RPM (default is /).
.TP
+\fB--pxelinux\fR \fIDIRECTORY|RPM\fR
+Use pxelinux from DIRECTORY or RPM (default is /).
+.TP
\fB--password\fR \fIPASSWORD\fR
Create test config with PASSWORD for preview.
.TP
@@ -110,6 +113,9 @@ Create harddisk image for preview.
\fB--floppy\fR
Create floppy image for preview.
.TP
+\fB--net\fR
+Create tftp directory for preview.
+.TP
\fB--save-image\fR \fIFILE\fR
Copy preview image to FILE.
.TP
@@ -138,7 +144,7 @@ Print FILE.
\fB--expand-archive\fR \fIDIRECTORY\fR
Create expanded gfxboot archive version in DIRECTORY. That is, only files that
cannot be read directly from file system are kept in a cpio archive. All
-others are unpacked. Use only for isolinux and syslinux.
+others are unpacked. Use only for isolinux, syslinux, or pxelinux.
.TP
\fB--pack-archive\fR \fIFILE\fR
Pack all gfxboot files into cpio archive FILE.
diff --git a/gfxboot b/gfxboot
index ab7cd8a..537cb98 100755
--- a/gfxboot
+++ b/gfxboot
@@ -873,6 +873,7 @@ sub prepare_grub;
sub prepare_lilo;
sub prepare_isolinux;
sub prepare_syslinux;
+sub prepare_pxelinux;
sub prepare_qemu;
sub run_qemu;
sub prepare_vbox;
@@ -912,7 +913,7 @@ my $opt_verbose = 0;
my $opt_preview = 0;
my $opt_gfxarchive = "/boot/message";
my $opt_bootloader;
-my $opt_vm = "qemu-kvm";
+my $opt_vm = "qemu64";
my $opt_savetemp = 0;
my $opt_grub = "/";
my $opt_lilo = "/";
@@ -964,7 +965,10 @@ my %vm_list = (
'qemu-kvm' => { cmd => 'qemu-kvm', package => 'qemu' },
'qemu-i386' => { cmd => 'qemu-system-i386', package => 'qemu' },
'qemu-x86_64' => { cmd => 'qemu-system-x86_64', package => 'qemu' },
+ 'qemu32' => { cmd => 'qemu-system-i386', package => 'qemu' },
+ 'qemu64' => { cmd => 'qemu-system-x86_64', package => 'qemu' },
'vbox' => { cmd => 'VBoxManage', package => 'virtualbox' },
+ 'vbox64' => { cmd => 'VBoxManage', package => 'virtualbox' },
'vboxsdl' => { cmd => 'VBoxSDL', package => 'virtualbox' },
'vmplayer' => { cmd => 'vmplayer', package => 'vmware-player' },
'vmware' => { cmd => 'vmware', package => 'VMwareWorkstation' },
@@ -972,13 +976,14 @@ my %vm_list = (
'bochs' => { cmd => 'bochs', package => 'bochs' },
);
-my @vm_order = qw ( qemu-kvm qemu vbox vboxsdl vmplayer vmware qemu-i386 qemu-x86_64 bochs );
+my @vm_order = qw ( qemu64 qemu32 qemu vbox vbox64 vboxsdl vmplayer vmware bochs );
my %bl_list = (
grub => '/usr/sbin/grub',
lilo => '/sbin/lilo',
isolinux => '/usr/share/syslinux/isolinux.bin',
syslinux => '/usr/bin/syslinux',
+ pxelinux => '/usr/share/syslinux/pxelinux.0',
bd => '/usr/bin/bd',
bochs => '/usr/bin/bochs',
);
@@ -1000,6 +1005,7 @@ GetOptions(
'lilo=s' => \$opt_lilo,
'isolinux=s' => \$opt_syslinux,
'syslinux=s' => \$opt_syslinux,
+ 'pxelinux=s' => \$opt_syslinux,
'password=s' => \$opt_password,
'show-config' => \$opt_showconfig,
'change-config=s{1,}' => \@opt_changeconfig,
@@ -1022,6 +1028,7 @@ GetOptions(
'cdrom|dvd' => sub { $opt_media = 'cdrom' },
'disk' => sub { $opt_media = 'disk' },
'floppy' => sub { $opt_media = 'floppy' },
+ 'net' => sub { $opt_media = 'net' },
'biarch' => sub { $opt_32 = $opt_64 = 1 },
'32' => \$opt_32,
'64' => \$opt_64,
@@ -1217,7 +1224,12 @@ if($new_archive && !$opt_test) {
}
if($opt_save_image && $preview_image) {
- system "cp $preview_image $opt_save_image";
+ if(-f $preview_image) {
+ system "cp $preview_image $opt_save_image";
+ }
+ else {
+ system "cp -a $preview_image $opt_save_image";
+ }
}
@@ -1276,14 +1288,15 @@ Preview/test gfxboot setup:
-p, --preview Try current config (needs some virtual machine).
-t, --test Test only (don't actually change any files).
- -b, --bootloader BOOTLOADER Use BOOTLOADER (grub, lilo, isolinux, syslinux) for
+ -b, --bootloader BOOTLOADER Use BOOTLOADER (grub, lilo, isolinux, syslinux, pxelinux) for
preview.
- -m, --vm VM Use virtual machine VM (bochs, qemu, qemu-kvm, qemu-i386, qemu-x86_64,
- vbox, vboxsdl, vmplayer, vmware) for preview.
+ -m, --vm VM Use virtual machine VM (bochs, qemu, qemu32, qemu64,
+ vbox, vbox64, vmplayer, vmware) for preview.
--grub DIRECTORY|RPM Use grub from DIRECTORY or RPM (default is /).
--lilo DIRECTORY|RPM Use lilo from DIRECTORY or RPM (default is /).
--syslinux DIRECTORY|RPM Use syslinux from DIRECTORY or RPM (default is /).
--isolinux DIRECTORY|RPM Use isolinux from DIRECTORY or RPM (default is /).
+ --pxelinux DIRECTORY|RPM Use pxelinux from DIRECTORY or RPM (default is /).
--password PASSWORD Create test config with PASSWORD for preview.
--32 Create 32 bit test image.
--64 Create 64 bit test image.
@@ -1291,6 +1304,7 @@ Preview/test gfxboot setup:
--cdrom, --dvd Create iso image for preview.
--disk Create harddisk image for preview.
--floppy Create floppy image for preview.
+ --net Create tftp directory for preview.
--save-image FILE Copy preview image to FILE.
--test-add-files FILE1 FILE2 ...
Add files to test directory.
@@ -1312,7 +1326,7 @@ Adding/removing files from gfxboot archive:
Create expanded gfxboot archive version in DIRECTORY.
That is, only files that cannot be read directly from
file system are kept in a cpio archive. All others are
- unpacked. Use only for isolinux and syslinux.
+ unpacked. Use only for isolinux, syslinux, or pxelinux.
--pack-archive FILE Pack all gfxboot files into cpio archive FILE.
Modifying help files:
@@ -1394,11 +1408,16 @@ sub preview
$vm_env->{boot} = 'hd';
$preview_image = $vm_env->{hd0}{image_name};
}
+ elsif($bootloader eq 'pxelinux') {
+ $vm_env->{tftp} = prepare_pxelinux $file;
+ $vm_env->{boot} = 'net';
+ $preview_image = $vm_env->{tftp}{image_name};
+ }
else {
return;
}
- if($opt_vm =~ /^qemu(|-kvm|-i386|-x86_64)$/) {
+ if($opt_vm =~ /^qemu(|32|64|-kvm|-i386|-x86_64)$/) {
prepare_qemu $vm_env;
run_qemu $vm_env;
}
@@ -1406,6 +1425,10 @@ sub preview
prepare_vbox $vm_env;
run_vbox $vm_env;
}
+ elsif($opt_vm eq 'vbox64') {
+ prepare_vbox $vm_env, 1;
+ run_vbox $vm_env;
+ }
elsif($opt_vm eq 'vboxsdl') {
prepare_vbox $vm_env;
run_vboxsdl $vm_env;
@@ -1948,6 +1971,111 @@ sub prepare_syslinux
}
+sub prepare_pxelinux
+{
+ local $_;
+ my $file = shift;
+ my $pxeimage;
+ my $arch_dir;
+ my $comboot;
+
+ die "Can't setup pxelinux on $opt_media.\n" if $opt_media && $opt_media ne 'net';
+
+ $opt_syslinux = unpack_rpm $opt_syslinux if -f $opt_syslinux;
+
+ die "error: pxelinux not found\n" unless -f "$opt_syslinux/$bl_list{pxelinux}";
+
+ $arch_dir = 'i386';
+ $arch_dir = 'x86_64' if $opt_64 && !$opt_32;
+
+ $comboot = 1 if -f "$opt_syslinux/usr/share/syslinux/gfxboot.com";
+
+ my $menu = fake_menu 'install';
+
+ if($opt_verbose) {
+ print "menu items (default $menu->{default}):\n";
+ print " $_\n" for (@{$menu->{list}});
+ }
+
+ my $dst = $gfxboot_tmp->dir('pxelinux');
+
+ my $loader = "";
+ if(-x "$opt_syslinux/usr/bin/isolinux-config") {
+ $loader = "boot/$arch_dir/loader/";
+
+ mkdir "$dst/boot", 0755;
+ mkdir "$dst/boot/$arch_dir", 0755;
+ mkdir "$dst/boot/$arch_dir/loader", 0755;
+ }
+
+ my $bl_unpacked;
+ ( $bl_unpacked ) = unpack_archive $file;
+ my $bl_packed = pack_archive $bl_unpacked, 'bootlogo';
+
+ system "cp -a $bl_packed/* $dst/${loader}";
+
+ system "cp /boot/vmlinuz $dst/${loader}linux" if -f "/boot/vmlinuz";
+ system "cp /boot/initrd $dst/${loader}initrd" if -f "/boot/initrd";
+
+ if(! -f "$dst/${loader}message") {
+ open F, ">$dst/${loader}message";
+ print F "\x0cgfxboot didn't work? Try one of those:\n";
+ print F " $_\n" for (@{$menu->{list}});
+ print F "\n";
+ close F;
+ }
+
+ if(! -f "$dst/${loader}pxelinux.cfg/default") {
+ mkdir "$dst/${loader}pxelinux.cfg", 0755;
+ open F, ">$dst/${loader}pxelinux.cfg/default";
+ print F "default $menu->{list}[$menu->{default}]\n\n";
+
+ for (@{$menu->{list}}) {
+ print F "label $_\n";
+ if($_ eq 'harddisk') {
+ print F " localboot 0x80\n\n";
+ }
+ elsif($_ eq 'memtest' && -f("$dst/${loader}memtest")) {
+ print F " kernel memtest\n\n";
+ }
+ else {
+ print F " kernel linux\n append initrd=initrd splash=silent showopts\n\n";
+ }
+ }
+
+ print F $comboot ? "ui gfxboot bootlogo message\n" : "gfxboot bootlogo\ndisplay message\n";
+
+ print F
+ "implicit 1\n" .
+ "prompt 1\n" .
+ "timeout 600\n";
+
+ close F;
+ }
+
+ system "cp $opt_syslinux/usr/share/syslinux/pxelinux.0 $dst/$loader" and die "error: no pxelinux\n";
+ system "cp $opt_syslinux/usr/share/syslinux/gfxboot.com $dst/$loader" if $comboot;
+
+ for (@opt_test_addfiles) {
+ system "cp -r $_ $dst/${loader}" and die "error copying file: $_\n";
+ }
+
+ for (@opt_test_rmfiles) {
+ s#^/+##;
+ system "cd $dst/${loader} ; rm -f $_" and die "error deleting file: $_\n";
+ }
+
+ if($opt_32 && $opt_64) {
+ symlink "i386", "$dst/boot/x86_64" if -d "$dst/boot/i386";
+ }
+
+ $pxeimage->{image_name} = $dst;
+ $pxeimage->{loader} = "/${loader}pxelinux.0";
+
+ return $pxeimage;
+}
+
+
sub prepare_qemu
{
}
@@ -1958,17 +2086,24 @@ sub run_qemu
my $vm_env = shift;
my $q = $vm_list{$opt_vm}{cmd};
+ $q = "MALLOC_CHECK_=0 $q -enable-kvm" if -d "/sys/devices/system/kvm";
+
$q .= " -m 512";
$q .= " -boot c" if $vm_env->{boot} eq 'hd';
$q .= " -boot d" if $vm_env->{boot} eq 'cd';
$q .= " -boot a" if $vm_env->{boot} eq 'fd';
+ $q .= " -boot n" if $vm_env->{boot} eq 'net';
$q .= " -hda $vm_env->{hd0}{image_name}" if $vm_env->{hd0};
$q .= " -hdb $vm_env->{hd1}{image_name}" if $vm_env->{hd1};
$q .= " -fda $vm_env->{fd0}{image_name}" if $vm_env->{fd0};
$q .= " -cdrom $vm_env->{cd0}{image_name}" if $vm_env->{cd0};
+ if($vm_env->{tftp}) {
+ $q .= " -net user,hostname=vm,tftp=$vm_env->{tftp}{image_name},bootfile=$vm_env->{tftp}{loader} -net nic,model=pcnet";
+ }
+
my $log = $gfxboot_tmp->file('qemu.log');
system "$q >$log 2>&1";
@@ -1980,6 +2115,7 @@ sub run_qemu
sub prepare_vbox
{
my $vm_env = shift;
+ my $vm_64 = shift;
$vm_env->{vmname} = sprintf "gfxboot.%04u", int(rand 10000);
@@ -1994,8 +2130,9 @@ sub prepare_vbox
system "VBoxManage createvm -name $vm_env->{vmname} -register >$log 2>&1";
system "VBoxManage setextradata global 'GUI/RegistrationData' 'triesLeft=0' >$log 2>&1";
- system "VBoxManage setextradata global 'GUI/SuppressMessages' 'remindAboutAutoCapture,remindAboutInputCapture' >$log 2>&1";
- system "VBoxManage modifyvm $vm_env->{vmname} -biosbootmenu disabled -bioslogofadein off -bioslogofadeout off >$log 2>&1";
+ system "VBoxManage setextradata global 'GUI/SuppressMessages' 'remindAboutAutoCapture,remindAboutInputCapture,remindAboutMouseIntegrationOn,remindAboutMouseIntegrationOff,remindAboutWrongColorDepth' >$log 2>&1";
+ system "VBoxManage modifyvm $vm_env->{vmname} -memory 512 -biosbootmenu disabled -bioslogofadein off -bioslogofadeout off >$log 2>&1";
+ system "VBoxManage modifyvm $vm_env->{vmname} -hwvirtex on >$log 2>&1" if $vm_64;
if($vm_env->{hd0}) {
system "VBoxManage convertdd $vm_env->{hd0}{image_name} $vm_env->{base}/VDI/hd0.vdi >$log 2>&1";
diff --git a/gfxtest b/gfxtest
index c27ab5d..8bf0bf6 100755
--- a/gfxtest
+++ b/gfxtest
@@ -35,6 +35,16 @@ function gfxtest_syslinux {
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+function gfxtest_pxelinux {
+ set -f
+ ./gfxboot -b pxelinux --net \
+ --test --preview --archive $opt_archive $gfxboot_args \
+ --test-add-files $add_files --test-rm-files gfxtest.config $rm_files $gfxboot_x_args
+ set +f
+}
+
+
+# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
function gfxtest_grub {
set -f
./gfxboot -b grub \
@@ -83,7 +93,7 @@ EOF
test_dir=test
-OPTS=`getopt -n gfxtest -o mhl:t: --long make,help,disk:,lang:,vm:,type:,32,64,theme:,lilo:,grub:,syslinux:,isolinux: -- "$@"`
+OPTS=`getopt -n gfxtest -o mhl:t: --long make,help,disk:,lang:,vm:,type:,32,64,theme:,lilo:,grub:,syslinux:,isolinux:,pxelinux: -- "$@"`
if [ $? != 0 ] ; then
echo "See 'gfxtest --help' for usage instructions."
exit 1
diff --git a/test/pxe/gfxtest.config b/test/pxe/gfxtest.config
new file mode 100644
index 0000000..f9e6cf4
--- /dev/null
+++ b/test/pxe/gfxtest.config
@@ -0,0 +1,15 @@
+# all files in this directory ex this config file are added
+# to the bootloader directory
+
+# archive file name in theme directory
+archive=bootlogo
+
+# setup function name in 'gfxtest' script
+setup=pxelinux
+
+# list of files to remove in bootloader directory
+rm_files=""
+
+# additional 'gfxboot' args
+args=""
+