mirror of
https://pagure.io/fedora-qa/os-autoinst-distri-fedora.git
synced 2025-02-14 19:44:32 +00:00
Split PXE server out from support_server
Similar to how we split out iSCSI server, and for the same purpose. This drops two tests from the cluster on x86_64, the BIOS and UEFI tests. Signed-off-by: Adam Williamson <awilliam@redhat.com>
This commit is contained in:
parent
950bbfbd95
commit
79518c5d33
@ -1278,7 +1278,7 @@
|
|||||||
"DELAYED_START": "1",
|
"DELAYED_START": "1",
|
||||||
"KICKSTART": "1",
|
"KICKSTART": "1",
|
||||||
"NICTYPE": "tap",
|
"NICTYPE": "tap",
|
||||||
"PARALLEL_WITH": "support_server@%ARCH_BASE_MACHINE%",
|
"PARALLEL_WITH": "pxe_server@%ARCH_BASE_MACHINE%",
|
||||||
"PXEBOOT": "once",
|
"PXEBOOT": "once",
|
||||||
"ROOT_PASSWORD": "111111",
|
"ROOT_PASSWORD": "111111",
|
||||||
"TEST_TARGET": "COMPOSE",
|
"TEST_TARGET": "COMPOSE",
|
||||||
@ -1781,6 +1781,26 @@
|
|||||||
"WORKER_CLASS": "tap"
|
"WORKER_CLASS": "tap"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"pxe_server": {
|
||||||
|
"profiles": {
|
||||||
|
"fedora-Server-dvd-iso-aarch64-*-aarch64": 10,
|
||||||
|
"fedora-Server-dvd-iso-ppc64le-*-ppc64le": 10,
|
||||||
|
"fedora-Server-dvd-iso-x86_64-*-64bit": 10
|
||||||
|
},
|
||||||
|
"settings": {
|
||||||
|
"BOOTFROM": "c",
|
||||||
|
"HDD_1": "disk_f%CURRREL%_support_5_%ARCH%.img",
|
||||||
|
"NICTYPE": "tap",
|
||||||
|
"NUMDISKS": "2",
|
||||||
|
"PARALLEL_CANCEL_WHOLE_CLUSTER": "0",
|
||||||
|
"POSTINSTALL": "_pxe_server",
|
||||||
|
"POST_STATIC": "172.16.2.121 pxe.domain.local",
|
||||||
|
"ROOT_PASSWORD": "weakpassword",
|
||||||
|
"TEST_TARGET": "NONE",
|
||||||
|
"USER_LOGIN": "false",
|
||||||
|
"WORKER_CLASS": "tap"
|
||||||
|
}
|
||||||
|
},
|
||||||
"realmd_join_cockpit": {
|
"realmd_join_cockpit": {
|
||||||
"profiles": {
|
"profiles": {
|
||||||
"fedora-Server-dvd-iso-aarch64-*-aarch64": 30,
|
"fedora-Server-dvd-iso-aarch64-*-aarch64": 30,
|
||||||
|
@ -13,8 +13,8 @@ sub run {
|
|||||||
# because if we boot immediately PXE will time out waiting for
|
# because if we boot immediately PXE will time out waiting for
|
||||||
# DHCP before the support server is ready. So we wait here for
|
# DHCP before the support server is ready. So we wait here for
|
||||||
# support server to be ready, then go ahead and start the VM
|
# support server to be ready, then go ahead and start the VM
|
||||||
mutex_lock "support_ready";
|
mutex_lock "pxe_server_ready";
|
||||||
mutex_unlock "support_ready";
|
mutex_unlock "pxe_server_ready";
|
||||||
resume_vm;
|
resume_vm;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
106
tests/_pxe_server.pm
Normal file
106
tests/_pxe_server.pm
Normal file
@ -0,0 +1,106 @@
|
|||||||
|
use base "installedtest";
|
||||||
|
use strict;
|
||||||
|
use testapi;
|
||||||
|
use lockapi;
|
||||||
|
use mmapi;
|
||||||
|
use utils;
|
||||||
|
|
||||||
|
sub run {
|
||||||
|
my $self = shift;
|
||||||
|
# set up PXE server (via dnsmasq)
|
||||||
|
# don't get hung up on slow mirrors when DNFing...
|
||||||
|
repos_mirrorlist;
|
||||||
|
# create necessary dirs
|
||||||
|
assert_script_run "mkdir -p /var/lib/tftpboot/fedora";
|
||||||
|
# basic tftp config
|
||||||
|
assert_script_run "printf 'enable-tftp\ntftp-root=/var/lib/tftpboot\ntftp-secure\n' >> /etc/dnsmasq.conf";
|
||||||
|
# pxe boot config
|
||||||
|
# we boot grub directly not shim on aarch64 as shim fails to boot
|
||||||
|
# with 'Synchronous Exception'
|
||||||
|
# https://bugzilla.redhat.com/show_bug.cgi?id=1592148
|
||||||
|
assert_script_run "printf 'dhcp-match=set:efi-x86_64,option:client-arch,7\ndhcp-match=set:efi-x86_64,option:client-arch,9\ndhcp-match=set:bios,option:client-arch,0\ndhcp-match=set:efi-aarch64,option:client-arch,11\ndhcp-match=set:ppc64,option:client-arch,12\ndhcp-match=set:ppc64,option:client-arch,13\ndhcp-boot=tag:efi-x86_64,\"shim.efi\"\ndhcp-boot=tag:bios,\"pxelinux.0\"\ndhcp-boot=tag:efi-aarch64,\"grubaa64.efi\"\ndhcp-boot=tag:ppc64,\"boot/grub2/powerpc-ieee1275/core.elf\"\n' >> /etc/dnsmasq.conf";
|
||||||
|
# install and configure bootloaders
|
||||||
|
my $ourversion = get_var("CURRREL");
|
||||||
|
my $testversion = get_var("RELEASE");
|
||||||
|
assert_script_run "mkdir -p /var/tmp/fedora";
|
||||||
|
my $arch = get_var("ARCH");
|
||||||
|
|
||||||
|
if ($arch eq 'x86_64') {
|
||||||
|
# x86_64: use syslinux for BIOS, grub2 with 'linuxefi' for UEFI
|
||||||
|
assert_script_run "mkdir -p /var/lib/tftpboot/pxelinux.cfg";
|
||||||
|
# install bootloader packages
|
||||||
|
assert_script_run "dnf -y install syslinux", 120;
|
||||||
|
assert_script_run "dnf -y --releasever=$ourversion --installroot=/var/tmp/fedora install shim-x64 grub2-efi-x64", 300;
|
||||||
|
# copy bootloader files to tftp root
|
||||||
|
assert_script_run "cp /usr/share/syslinux/{pxelinux.0,vesamenu.c32,ldlinux.c32,libcom32.c32,libutil.c32} /var/lib/tftpboot";
|
||||||
|
assert_script_run "cp /var/tmp/fedora/boot/efi/EFI/fedora/{shim.efi,grubx64.efi} /var/lib/tftpboot";
|
||||||
|
# bootloader configs
|
||||||
|
# BIOS
|
||||||
|
assert_script_run "printf 'default vesamenu.c32\nprompt 1\ntimeout 600\n\nlabel linux\n menu label ^Install Fedora 64-bit\n menu default\n kernel fedora/vmlinuz\n append initrd=fedora/initrd.img inst.ks=file:///ks.cfg ip=dhcp\nlabel local\n menu label Boot from ^local drive\n localboot 0xffff\n' >> /var/lib/tftpboot/pxelinux.cfg/default";
|
||||||
|
# UEFI
|
||||||
|
assert_script_run "printf 'function load_video {\n insmod efi_gop\n insmod efi_uga\n insmod ieee1275_fb\n insmod vbe\n insmod vga\n insmod video_bochs\n insmod video_cirrus\n}\n\nload_video\nset gfxpayload=keep\ninsmod gzio\n\nmenuentry \"Install Fedora 64-bit\" --class fedora --class gnu-linux --class gnu --class os {\n linuxefi fedora/vmlinuz ip=dhcp inst.ks=file:///ks.cfg\n initrdefi fedora/initrd.img\n}' >> /var/lib/tftpboot/grub.cfg";
|
||||||
|
# DEBUG DEBUG
|
||||||
|
upload_logs "/etc/dnsmasq.conf";
|
||||||
|
upload_logs "/var/lib/tftpboot/grub.cfg";
|
||||||
|
upload_logs "/var/lib/tftpboot/pxelinux.cfg/default";
|
||||||
|
}
|
||||||
|
|
||||||
|
elsif ($arch eq 'ppc64le') {
|
||||||
|
# ppc64le: use grub2 for OFW
|
||||||
|
# install bootloader tools package
|
||||||
|
assert_script_run "dnf -y install grub2-tools-extra", 180;
|
||||||
|
# install a network bootloader to tftp root
|
||||||
|
assert_script_run "grub2-mknetdir --net-directory=/var/lib/tftpboot";
|
||||||
|
# bootloader config
|
||||||
|
assert_script_run "printf 'set default=0\nset timeout=5\n\nmenuentry \"Install Fedora 64-bit\" --class fedora --class gnu-linux --class gnu --class os {\n linux fedora/vmlinuz ip=dhcp inst.ks=file:///ks.cfg\n initrd fedora/initrd.img\n}' >> /var/lib/tftpboot/boot/grub2/grub.cfg";
|
||||||
|
# DEBUG DEBUG
|
||||||
|
upload_logs "/etc/dnsmasq.conf";
|
||||||
|
upload_logs "/var/lib/tftpboot/boot/grub2/grub.cfg";
|
||||||
|
}
|
||||||
|
|
||||||
|
elsif ($arch eq 'aarch64') {
|
||||||
|
# aarch64: use grub2 with 'linux' for UEFI
|
||||||
|
# copy bootloader files to tftp root (we just use the system
|
||||||
|
# bootloader, no need to install packages)
|
||||||
|
assert_script_run "cp /boot/efi/EFI/fedora/{shim.efi,grubaa64.efi} /var/lib/tftpboot";
|
||||||
|
# bootloader config
|
||||||
|
assert_script_run "printf 'function load_video {\n insmod efi_gop\n insmod efi_uga\n insmod ieee1275_fb\n insmod vbe\n insmod vga\n insmod video_bochs\n insmod video_cirrus\n}\n\nload_video\nset gfxpayload=keep\ninsmod gzio\n\nmenuentry \"Install Fedora 64-bit\" --class fedora --class gnu-linux --class gnu --class os {\n linux fedora/vmlinuz ip=dhcp inst.ks=file:///ks.cfg\n initrd fedora/initrd.img\n}' >> /var/lib/tftpboot/grub.cfg";
|
||||||
|
# DEBUG DEBUG
|
||||||
|
upload_logs "/etc/dnsmasq.conf";
|
||||||
|
upload_logs "/var/lib/tftpboot/grub.cfg";
|
||||||
|
}
|
||||||
|
|
||||||
|
# download kernel and initramfs
|
||||||
|
my $location = get_var("LOCATION");
|
||||||
|
my $kernpath = "images/pxeboot";
|
||||||
|
# for some crazy reason these are in a different place for ppc64
|
||||||
|
$kernpath = "ppc/ppc64" if ($arch eq 'ppc64le');
|
||||||
|
assert_script_run "curl -o /var/lib/tftpboot/fedora/vmlinuz $location/Everything/${arch}/os/${kernpath}/vmlinuz";
|
||||||
|
assert_script_run "curl -o /var/lib/tftpboot/fedora/initrd.img $location/Everything/${arch}/os/${kernpath}/initrd.img";
|
||||||
|
# get a kickstart to embed in the initramfs, for testing:
|
||||||
|
# https://fedoraproject.org/wiki/QA:Testcase_Kickstart_File_Path_Ks_Cfg
|
||||||
|
assert_script_run "curl -o ks.cfg https://jskladan.fedorapeople.org/kickstarts/root-user-crypted-net.ks";
|
||||||
|
# tweak the repo config in it
|
||||||
|
assert_script_run "sed -i -e 's,^url.*,nfs --server 172.16.2.110 --dir /repo --opts nfsvers=4,g' ks.cfg";
|
||||||
|
# embed it
|
||||||
|
assert_script_run "echo ks.cfg | cpio -c -o >> /var/lib/tftpboot/fedora/initrd.img";
|
||||||
|
# chown root
|
||||||
|
assert_script_run "chown -R dnsmasq /var/lib/tftpboot";
|
||||||
|
assert_script_run "restorecon -vr /var/lib/tftpboot";
|
||||||
|
# open firewall ports
|
||||||
|
assert_script_run "firewall-cmd --add-service=tftp";
|
||||||
|
|
||||||
|
# report ready, wait for children
|
||||||
|
mutex_create('pxe_server_ready');
|
||||||
|
wait_for_children;
|
||||||
|
# upload logs in case of child failures
|
||||||
|
$self->post_fail_hook();
|
||||||
|
}
|
||||||
|
|
||||||
|
sub test_flags {
|
||||||
|
return { fatal => 1 };
|
||||||
|
}
|
||||||
|
|
||||||
|
1;
|
||||||
|
|
||||||
|
# vim: set sw=4 et:
|
@ -1,97 +1,10 @@
|
|||||||
use base "installedtest";
|
use base "installedtest";
|
||||||
use strict;
|
use strict;
|
||||||
use anaconda;
|
|
||||||
use testapi;
|
use testapi;
|
||||||
use lockapi;
|
use lockapi;
|
||||||
use mmapi;
|
use mmapi;
|
||||||
use tapnet;
|
|
||||||
use utils;
|
use utils;
|
||||||
|
|
||||||
sub _pxe_setup {
|
|
||||||
# set up PXE server (via dnsmasq). Not used for update tests.
|
|
||||||
# don't get hung up on slow mirrors when DNFing...
|
|
||||||
repos_mirrorlist;
|
|
||||||
# create necessary dirs
|
|
||||||
assert_script_run "mkdir -p /var/lib/tftpboot/fedora";
|
|
||||||
# basic tftp config
|
|
||||||
assert_script_run "printf 'enable-tftp\ntftp-root=/var/lib/tftpboot\ntftp-secure\n' >> /etc/dnsmasq.conf";
|
|
||||||
# pxe boot config
|
|
||||||
# we boot grub directly not shim on aarch64 as shim fails to boot
|
|
||||||
# with 'Synchronous Exception'
|
|
||||||
# https://bugzilla.redhat.com/show_bug.cgi?id=1592148
|
|
||||||
assert_script_run "printf 'dhcp-match=set:efi-x86_64,option:client-arch,7\ndhcp-match=set:efi-x86_64,option:client-arch,9\ndhcp-match=set:bios,option:client-arch,0\ndhcp-match=set:efi-aarch64,option:client-arch,11\ndhcp-match=set:ppc64,option:client-arch,12\ndhcp-match=set:ppc64,option:client-arch,13\ndhcp-boot=tag:efi-x86_64,\"shim.efi\"\ndhcp-boot=tag:bios,\"pxelinux.0\"\ndhcp-boot=tag:efi-aarch64,\"grubaa64.efi\"\ndhcp-boot=tag:ppc64,\"boot/grub2/powerpc-ieee1275/core.elf\"\n' >> /etc/dnsmasq.conf";
|
|
||||||
# install and configure bootloaders
|
|
||||||
my $ourversion = get_var("CURRREL");
|
|
||||||
my $testversion = get_var("RELEASE");
|
|
||||||
assert_script_run "mkdir -p /var/tmp/fedora";
|
|
||||||
my $arch = get_var("ARCH");
|
|
||||||
|
|
||||||
if ($arch eq 'x86_64') {
|
|
||||||
# x86_64: use syslinux for BIOS, grub2 with 'linuxefi' for UEFI
|
|
||||||
assert_script_run "mkdir -p /var/lib/tftpboot/pxelinux.cfg";
|
|
||||||
# install bootloader packages
|
|
||||||
assert_script_run "dnf -y install syslinux", 120;
|
|
||||||
assert_script_run "dnf -y --releasever=$ourversion --installroot=/var/tmp/fedora install shim-x64 grub2-efi-x64", 300;
|
|
||||||
# copy bootloader files to tftp root
|
|
||||||
assert_script_run "cp /usr/share/syslinux/{pxelinux.0,vesamenu.c32,ldlinux.c32,libcom32.c32,libutil.c32} /var/lib/tftpboot";
|
|
||||||
assert_script_run "cp /var/tmp/fedora/boot/efi/EFI/fedora/{shim.efi,grubx64.efi} /var/lib/tftpboot";
|
|
||||||
# bootloader configs
|
|
||||||
# BIOS
|
|
||||||
assert_script_run "printf 'default vesamenu.c32\nprompt 1\ntimeout 600\n\nlabel linux\n menu label ^Install Fedora 64-bit\n menu default\n kernel fedora/vmlinuz\n append initrd=fedora/initrd.img inst.ks=file:///ks.cfg ip=dhcp\nlabel local\n menu label Boot from ^local drive\n localboot 0xffff\n' >> /var/lib/tftpboot/pxelinux.cfg/default";
|
|
||||||
# UEFI
|
|
||||||
assert_script_run "printf 'function load_video {\n insmod efi_gop\n insmod efi_uga\n insmod ieee1275_fb\n insmod vbe\n insmod vga\n insmod video_bochs\n insmod video_cirrus\n}\n\nload_video\nset gfxpayload=keep\ninsmod gzio\n\nmenuentry \"Install Fedora 64-bit\" --class fedora --class gnu-linux --class gnu --class os {\n linuxefi fedora/vmlinuz ip=dhcp inst.ks=file:///ks.cfg\n initrdefi fedora/initrd.img\n}' >> /var/lib/tftpboot/grub.cfg";
|
|
||||||
# DEBUG DEBUG
|
|
||||||
upload_logs "/etc/dnsmasq.conf";
|
|
||||||
upload_logs "/var/lib/tftpboot/grub.cfg";
|
|
||||||
upload_logs "/var/lib/tftpboot/pxelinux.cfg/default";
|
|
||||||
}
|
|
||||||
|
|
||||||
elsif ($arch eq 'ppc64le') {
|
|
||||||
# ppc64le: use grub2 for OFW
|
|
||||||
# install bootloader tools package
|
|
||||||
assert_script_run "dnf -y install grub2-tools-extra", 180;
|
|
||||||
# install a network bootloader to tftp root
|
|
||||||
assert_script_run "grub2-mknetdir --net-directory=/var/lib/tftpboot";
|
|
||||||
# bootloader config
|
|
||||||
assert_script_run "printf 'set default=0\nset timeout=5\n\nmenuentry \"Install Fedora 64-bit\" --class fedora --class gnu-linux --class gnu --class os {\n linux fedora/vmlinuz ip=dhcp inst.ks=file:///ks.cfg\n initrd fedora/initrd.img\n}' >> /var/lib/tftpboot/boot/grub2/grub.cfg";
|
|
||||||
# DEBUG DEBUG
|
|
||||||
upload_logs "/etc/dnsmasq.conf";
|
|
||||||
upload_logs "/var/lib/tftpboot/boot/grub2/grub.cfg";
|
|
||||||
}
|
|
||||||
|
|
||||||
elsif ($arch eq 'aarch64') {
|
|
||||||
# aarch64: use grub2 with 'linux' for UEFI
|
|
||||||
# copy bootloader files to tftp root (we just use the system
|
|
||||||
# bootloader, no need to install packages)
|
|
||||||
assert_script_run "cp /boot/efi/EFI/fedora/{shim.efi,grubaa64.efi} /var/lib/tftpboot";
|
|
||||||
# bootloader config
|
|
||||||
assert_script_run "printf 'function load_video {\n insmod efi_gop\n insmod efi_uga\n insmod ieee1275_fb\n insmod vbe\n insmod vga\n insmod video_bochs\n insmod video_cirrus\n}\n\nload_video\nset gfxpayload=keep\ninsmod gzio\n\nmenuentry \"Install Fedora 64-bit\" --class fedora --class gnu-linux --class gnu --class os {\n linux fedora/vmlinuz ip=dhcp inst.ks=file:///ks.cfg\n initrd fedora/initrd.img\n}' >> /var/lib/tftpboot/grub.cfg";
|
|
||||||
# DEBUG DEBUG
|
|
||||||
upload_logs "/etc/dnsmasq.conf";
|
|
||||||
upload_logs "/var/lib/tftpboot/grub.cfg";
|
|
||||||
}
|
|
||||||
|
|
||||||
# download kernel and initramfs
|
|
||||||
my $location = get_var("LOCATION");
|
|
||||||
my $kernpath = "images/pxeboot";
|
|
||||||
# for some crazy reason these are in a different place for ppc64
|
|
||||||
$kernpath = "ppc/ppc64" if ($arch eq 'ppc64le');
|
|
||||||
assert_script_run "curl -o /var/lib/tftpboot/fedora/vmlinuz $location/Everything/${arch}/os/${kernpath}/vmlinuz";
|
|
||||||
assert_script_run "curl -o /var/lib/tftpboot/fedora/initrd.img $location/Everything/${arch}/os/${kernpath}/initrd.img";
|
|
||||||
# get a kickstart to embed in the initramfs, for testing:
|
|
||||||
# https://fedoraproject.org/wiki/QA:Testcase_Kickstart_File_Path_Ks_Cfg
|
|
||||||
assert_script_run "curl -o ks.cfg https://jskladan.fedorapeople.org/kickstarts/root-user-crypted-net.ks";
|
|
||||||
# tweak the repo config in it
|
|
||||||
assert_script_run "sed -i -e 's,^url.*,nfs --server 172.16.2.110 --dir /repo --opts nfsvers=4,g' ks.cfg";
|
|
||||||
# embed it
|
|
||||||
assert_script_run "echo ks.cfg | cpio -c -o >> /var/lib/tftpboot/fedora/initrd.img";
|
|
||||||
# chown root
|
|
||||||
assert_script_run "chown -R dnsmasq /var/lib/tftpboot";
|
|
||||||
assert_script_run "restorecon -vr /var/lib/tftpboot";
|
|
||||||
# open firewall ports
|
|
||||||
assert_script_run "firewall-cmd --add-service=tftp";
|
|
||||||
}
|
|
||||||
|
|
||||||
sub run {
|
sub run {
|
||||||
my $self=shift;
|
my $self=shift;
|
||||||
# disable systemd-resolved, it conflicts with dnsmasq
|
# disable systemd-resolved, it conflicts with dnsmasq
|
||||||
@ -104,8 +17,6 @@ sub run {
|
|||||||
## DNS / DHCP (dnsmasq)
|
## DNS / DHCP (dnsmasq)
|
||||||
# create config
|
# create config
|
||||||
assert_script_run "printf 'domain=domain.local\ndhcp-range=172.16.2.150,172.16.2.199\ndhcp-option=option:router,172.16.2.2\n' > /etc/dnsmasq.conf";
|
assert_script_run "printf 'domain=domain.local\ndhcp-range=172.16.2.150,172.16.2.199\ndhcp-option=option:router,172.16.2.2\n' > /etc/dnsmasq.conf";
|
||||||
# do PXE setup if this is not an update test
|
|
||||||
_pxe_setup() unless (get_var("ADVISORY_OR_TASK"));
|
|
||||||
# open firewall ports
|
# open firewall ports
|
||||||
assert_script_run "firewall-cmd --add-service=dhcp";
|
assert_script_run "firewall-cmd --add-service=dhcp";
|
||||||
assert_script_run "firewall-cmd --add-service=dns";
|
assert_script_run "firewall-cmd --add-service=dns";
|
||||||
|
Loading…
Reference in New Issue
Block a user