X-Git-Url: http://rtime.felk.cvut.cz/gitweb/novaboot.git/blobdiff_plain/f6e1da60eded4fed75fbfba56f87cf2b3e8d1dc3..HEAD:/novaboot diff --git a/novaboot b/novaboot index 8c0b41a..cd59748 100755 --- a/novaboot +++ b/novaboot @@ -17,7 +17,9 @@ use strict; use warnings; -use warnings (exists $ENV{NOVABOOT_TEST} ? (FATAL => 'all') : ()); +use warnings (exists $ENV{NOVABOOT_TEST} ? + (FATAL => 'all') : + (FATAL => qw(inplace))); # Open warnings in <<>> are fatal use Getopt::Long qw(GetOptionsFromString GetOptionsFromArray); use Pod::Usage; use File::Basename; @@ -357,7 +359,7 @@ my $EOF; my $last_fn = ''; my ($modules, $variables, $generated, $copy, $chainload, $continuation) = ([], {}, [], []); my $skip_reading = defined($on_opt) || defined($off_opt); -while (!$skip_reading && ($_ = <>)) { +while (!$skip_reading && ($_ = <<>>)) { if ($ARGV ne $last_fn) { # New script die "Missing EOF in $last_fn" if $file; die "Unfinished line in $last_fn" if $continuation; @@ -584,6 +586,7 @@ sub generate_grub2_config($$$$;$$) my $module_load_method = "module"; if ($boot_method eq "linux") { $module_load_method = "initrd"; + die('Too many "load" lines for Linux kernel') if (scalar(@$modules_ref) > 2); } foreach (@$modules_ref) { if ($first) { @@ -593,9 +596,11 @@ sub generate_grub2_config($$$$;$$) print $fg " $boot_method ${base}$kbin $kcmd\n"; } else { my @args = split; - # GRUB2 doesn't pass filename in multiboot info so we have to duplicate it here - $_ = join(' ', ($args[0], @args)); - s|\brom://|$rom_prefix|g; # We do not need to translate path for GRUB2 + if ($boot_method eq "multiboot") { + # GRUB2 doesn't pass filename in multiboot info so we have to duplicate it here + $_ = join(' ', ($args[0], @args)); + s|\brom://|$rom_prefix|g; # We do not need to translate path for GRUB2 + } print $fg " $module_load_method $base$_\n"; } } @@ -1138,10 +1143,19 @@ if (defined $dhcp_tftp) open(my $fh, '>', 'dhcpd.conf'); my $mac = `cat /sys/class/net/$netif/address`; chomp $mac; - print $fh "subnet 10.23.23.0 netmask 255.255.255.0 { - range 10.23.23.10 10.23.23.100; - filename \"bin/boot/grub/pxegrub.pxe\"; - next-server 10.23.23.1; + print $fh " +subnet 10.23.23.0 netmask 255.255.255.0 { + range 10.23.23.10 10.23.23.100; + next-server 10.23.23.1; +} +class \"pxe-clients\" { + match option vendor-class-identifier; +} +subclass \"pxe-clients\" \"PXEClient:Arch:00000:UNDI:002001\" { + option bootfile-name \"boot/grub/i386-pc/core.0\"; +} +subclass \"pxe-clients\" \"PXEClient:Arch:00007:UNDI:003016\" { + option bootfile-name \"boot/grub/x86_64-efi/core.efi\"; } host server { hardware ethernet $mac; @@ -1175,14 +1189,14 @@ r \\.efi.* \\.efi"; close($fh); # Unfortunately, tftpd requires root privileges even with # non-privileged (>1023) port due to initgroups(). - system_verbose("sudo in.tftpd --listen --secure -v -v -v --pidfile $builddir/tftpd.pid -m mapfile --address :$tftp_port $tftp_root"); + system_verbose("sudo in.tftpd --listen --secure -v -v -v --pidfile tftpd.pid -m mapfile --address :$tftp_port $tftp_root"); # Kill server when we die $SIG{__DIE__} = sub { system_verbose('sudo pkill --pidfile=dhcpd.pid') if (defined $dhcp_tftp); - system_verbose('sudo pkill --pidfile=tftpd.pid'); }; + system_verbose("sudo pkill --pidfile=$tftp_root/tftpd.pid"); }; # We have to kill tftpd explicitely, because it is not in our process group - $SIG{INT} = sub { system_verbose('sudo pkill --pidfile=tftpd.pid'); exit(0); }; + $SIG{INT} = sub { system_verbose("sudo pkill --pidfile=$tftp_root/tftpd.pid"); exit(0); }; } ### AMT IDE-R @@ -1281,8 +1295,9 @@ if (defined $uboot) { die "No '--uboot-addr kernel' given" unless $uboot_addr{kernel}; $exp->send("tftpboot $uboot_addr{kernel} $prefix$kbin\n"); $exp->expect(15, - [qr/##/, sub { exp_continue; }], - $uboot_prompt) || die "Kernel load: " . ($! || "timeout"); + $uboot_prompt, + [qr/#/, sub { exp_continue; }] + ) || die "Kernel load: " . ($! || "timeout"); } if (defined $dtb) { die "No '--uboot-addr fdt' given" unless $uboot_addr{fdt};