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;
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;
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) {
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";
}
}
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;
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
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};