From 6216a706618672ac9881430b8301251a16ccaf5c Mon Sep 17 00:00:00 2001 From: Steffen Winterfeldt Date: Wed, 14 Oct 2009 15:32:14 +0200 Subject: - support pxe setup in test script --- Changelog | 3 + VERSION | 2 +- doc/gfxboot.8 | 12 +++- gfxboot | 157 +++++++++++++++++++++++++++++++++++++++++++++--- gfxtest | 12 +++- test/pxe/gfxtest.config | 15 +++++ 6 files changed, 186 insertions(+), 15 deletions(-) create mode 100644 test/pxe/gfxtest.config 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 @@ -34,6 +34,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 @@ -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="" + -- cgit v1.2.3