From 9ebdcafa63a324763f597f8cac557349cede0286 Mon Sep 17 00:00:00 2001 From: Markus Hilger Date: Fri, 17 Jan 2020 10:25:36 +0100 Subject: [PATCH 01/10] SLE15: genimage fix $osver_host detection --- xCAT-server/share/xcat/netboot/sles/genimage | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/xCAT-server/share/xcat/netboot/sles/genimage b/xCAT-server/share/xcat/netboot/sles/genimage index 5792b3c6c..9d4f0d706 100755 --- a/xCAT-server/share/xcat/netboot/sles/genimage +++ b/xCAT-server/share/xcat/netboot/sles/genimage @@ -203,7 +203,7 @@ unless (grep /af_packet/, @ndrivers) { } my $osver_host; -if (`grep VERSION /etc/os-release` =~ /VERSION = (\d+)/) { +if (`grep VERSION /etc/os-release` =~ /VERSION="(\d+)/) { $osver_host = $1; } else { $osver_host = 11; From 8e9428986da0e01d7b41293e94ecf493f35cb616 Mon Sep 17 00:00:00 2001 From: Markus Hilger Date: Fri, 17 Jan 2020 18:02:50 +0100 Subject: [PATCH 02/10] SLE15: genimage fixes - Mount /sys and /proc - needed for newer versions of the SLE permissions RPM. See: https://github.com/openSUSE/permissions/commit/2d0ef5d55b30f72322d18951214353ecfd9c4245 - Create /sys to have /sys/kernel/fscaps. Fixes: "Warning: running kernel does not support fscaps" - Fix permissions of /dev devices - Make sure /sys and /proc are unmounted everytime --- xCAT-server/share/xcat/netboot/sles/genimage | 60 +++++++++++++------- 1 file changed, 40 insertions(+), 20 deletions(-) diff --git a/xCAT-server/share/xcat/netboot/sles/genimage b/xCAT-server/share/xcat/netboot/sles/genimage index 9d4f0d706..ab1d79707 100755 --- a/xCAT-server/share/xcat/netboot/sles/genimage +++ b/xCAT-server/share/xcat/netboot/sles/genimage @@ -72,6 +72,31 @@ sub xdie { die @_; } +sub umount { + # some rpms mounts the imageroot/proc on the /proc, need to release it, + # otherwise got kernal panic when installing + # sometimes, the proc fs is not mounted, so one warning/error message will display, + # and I add one check point here. + my $MFD; + open MFD, "/proc/mounts"; + my @lines = ; + close MFD; + + my $ret = grep m{$rootimg_dir/proc}, @lines; + if ($ret > 0) { + system("umount -l $rootimg_dir/proc"); + } + $ret = grep m{$rootimg_dir/sys}, @lines; + if ($ret > 0) { + system("umount -l $rootimg_dir/sys"); + } +} + +# Make sure we clean up all mounts everytime +END { + umount(); +} + #-- fetch current version form CVS (overwrite locally changed versions) # if (opendir(CVS,"$pathtofiles/CVS")){ # close CVS; @@ -225,26 +250,32 @@ unless ($onlyinitrd) { mkpath "$rootimg_dir/etc"; mkpath "$rootimg_dir/dev"; + mkpath "$rootimg_dir/proc"; + mkpath "$rootimg_dir/sys"; + + #needed for newer versions of the SLE permissions RPM. See: https://github.com/openSUSE/permissions/commit/2d0ef5d55b30f72322d18951214353ecfd9c4245 + system "mount -t proc none $rootimg_dir/proc"; + #Create /sys to have /sys/kernel/fscaps. Fixes: "Warning: running kernel does not support fscaps" + system "mount -o bind /sys $rootimg_dir/sys"; #system "mount -o bind /dev $rootimg_dir/dev"; unless (-e "$rootimg_dir/dev/zero") { - system "mknod $rootimg_dir/dev/zero c 1 5"; + system "mknod -m 0666 $rootimg_dir/dev/zero c 1 5"; } unless (-e "$rootimg_dir/dev/null") { - system "mknod $rootimg_dir/dev/null c 1 3"; #that's neccessary for SLES11 + system "mknod -m 0666 $rootimg_dir/dev/null c 1 3"; #that's neccessary for SLES11+ } - unless (-e "$rootimg_dir/dev/random") { - system "mknod $rootimg_dir/dev/random c 1 8"; #that's neccessary for SLES11 + system "mknod -m 0666 $rootimg_dir/dev/random c 1 8"; #that's neccessary for SLES11+ } unless (-e "$rootimg_dir/dev/urandom") { - system "mknod $rootimg_dir/dev/urandom c 1 9"; #that's neccessary for SLES11 + system "mknod -m 0666 $rootimg_dir/dev/urandom c 1 9"; #that's neccessary for SLES11+ } for (my $i = 0 ; $i <= 12 ; $i++) { unless (-e "$rootimg_dir/dev/tty$i") { - system "mknod $rootimg_dir/dev/tty$i c 4 $i"; #that's neccessary for SLES11 + system "mknod -m 0620 $rootimg_dir/dev/tty$i c 4 $i"; #that's neccessary for SLES11+ } } @@ -872,19 +903,8 @@ system("cd $rootimg_dir/usr/bin/; ln -s ../../bin/keyctl $rootimg_dir/usr/bin/ke # which is different from the Redhat family -# some rpms mounts the imageroot/proc on the /proc, need to release it, -# otherwise got kernal panic when installing -# sometimes, the proc fs is not mounted, so one warning/error message will display, -# and I add one check point here. -my $MFD; -open MFD, "/proc/mounts"; -my @lines = ; -close MFD; - -my $ret = grep m{$rootimg_dir/proc}, @lines; -if ($ret > 0) { - system("umount -l $rootimg_dir/proc"); -} +# umount /proc and /sys from rootimg +umount(); # Load driver update disk, and copy them to the root image my @dd_drivers = &load_dd(); @@ -1953,7 +1973,7 @@ sub generic_post { # This function is meant to leave the image in a state approx } unlink("$rootimg_dir/dev/null"); - system("mknod $rootimg_dir/dev/null c 1 3"); + system("mknod -m 0666 $rootimg_dir/dev/null c 1 3"); open($cfgfile, ">", "$rootimg_dir/etc/fstab"); print $cfgfile "devpts /dev/pts devpts gid=5,mode=620 0 0\n"; print $cfgfile "tmpfs /dev/shm tmpfs defaults 0 0\n"; From d127ba06cdf20d5563c90a8024a7f3f6a645d83e Mon Sep 17 00:00:00 2001 From: Markus Hilger Date: Fri, 17 Jan 2020 18:21:46 +0100 Subject: [PATCH 03/10] SLE15: Correct proc mount --- xCAT-server/share/xcat/netboot/sles/genimage | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/xCAT-server/share/xcat/netboot/sles/genimage b/xCAT-server/share/xcat/netboot/sles/genimage index ab1d79707..2dc96f403 100755 --- a/xCAT-server/share/xcat/netboot/sles/genimage +++ b/xCAT-server/share/xcat/netboot/sles/genimage @@ -254,7 +254,7 @@ unless ($onlyinitrd) { mkpath "$rootimg_dir/sys"; #needed for newer versions of the SLE permissions RPM. See: https://github.com/openSUSE/permissions/commit/2d0ef5d55b30f72322d18951214353ecfd9c4245 - system "mount -t proc none $rootimg_dir/proc"; + system "mount -t proc proc $rootimg_dir/proc"; #Create /sys to have /sys/kernel/fscaps. Fixes: "Warning: running kernel does not support fscaps" system "mount -o bind /sys $rootimg_dir/sys"; From a5b206086690f24297c50e582411cff65515a138 Mon Sep 17 00:00:00 2001 From: Markus Hilger Date: Fri, 17 Jan 2020 20:54:52 +0100 Subject: [PATCH 04/10] Fix SLE15 genimage with existing passwd from https://github.com/jjohnson42/xcat-core/commit/3110dc8fd781c704c53052c4d5ff1f426fdb22c4 --- xCAT-server/share/xcat/netboot/sles/genimage | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/xCAT-server/share/xcat/netboot/sles/genimage b/xCAT-server/share/xcat/netboot/sles/genimage index 2dc96f403..37e0b5781 100755 --- a/xCAT-server/share/xcat/netboot/sles/genimage +++ b/xCAT-server/share/xcat/netboot/sles/genimage @@ -428,11 +428,13 @@ unless ($onlyinitrd) { #my $yumcmd = "yum -y -c /tmp/genimage.$$.yum.conf --installroot=$rootimg_dir --disablerepo=* "; #$yumcmd .= "install "; #mkpath("$rootimg_dir/var/lib/yum"); - mkpath("$rootimg_dir/etc/"); - my $passwdfile; - open($passwdfile, ">", "$rootimg_dir/etc/passwd"); - print $passwdfile "root:x:0:0:root:/root:/bin/bash\n"; - my $yumcmd; + if (! -f "$rootimg_dir/etc/passwd") { + mkpath("$rootimg_dir/etc/"); + my $passwdfile; + open($passwdfile, ">", "$rootimg_dir/etc/passwd"); + print $passwdfile "root:x:0:0:root:/root:/bin/bash\n"; + } + my $yumcmd; if ($osver_host < 11) { $yumcmd = "zypper -R $rootimg_dir $non_interactive install "; } else { @@ -987,6 +989,7 @@ if ($dracutmode) { push @ndrivers, @drivers; mkinitrd("stateless"); } +print "It is safe to ignore message 'Failed to connect to bus: No such file or directory' that may have appeared above one or more times.\n"; sub getlibs { my $file = shift; From 8671114cc670eb6b2ad4d2953a3e4d4a09a92c1a Mon Sep 17 00:00:00 2001 From: Markus Hilger Date: Fri, 17 Jan 2020 21:21:42 +0100 Subject: [PATCH 05/10] Combine redundant pkglists --- .../netboot/sles/compute.sle15.x86_64.pkglist | 51 +------------------ 1 file changed, 1 insertion(+), 50 deletions(-) mode change 100644 => 120000 xCAT-server/share/xcat/netboot/sles/compute.sle15.x86_64.pkglist diff --git a/xCAT-server/share/xcat/netboot/sles/compute.sle15.x86_64.pkglist b/xCAT-server/share/xcat/netboot/sles/compute.sle15.x86_64.pkglist deleted file mode 100644 index 02d11dd47..000000000 --- a/xCAT-server/share/xcat/netboot/sles/compute.sle15.x86_64.pkglist +++ /dev/null @@ -1,50 +0,0 @@ -aaa_base -coreutils -bash -dbus-1 -wicked -device-mapper -dracut -nfs-kernel-server -keyutils -lvm2 -openssl -dhcp-client -openssh -procps -psmisc -wget -sysconfig -rsyslog -vim -rsync -timezone -bc -ntp -gzip -e2fsprogs -parted -binutils -tar -open-iscsi -curl -btrfsprogs -cryptsetup -dmraid -mdadm -multipath-tools -gpg2 -which -cifs-utils -open-lldp -fcoe-utils -util-linux-systemd -udev -kernel-default -kernel-firmware -adaptec-firmware -xz -SLE_HPC-release -insserv-compat -net-tools-deprecated -rsyslog diff --git a/xCAT-server/share/xcat/netboot/sles/compute.sle15.x86_64.pkglist b/xCAT-server/share/xcat/netboot/sles/compute.sle15.x86_64.pkglist new file mode 120000 index 000000000..0e114f64f --- /dev/null +++ b/xCAT-server/share/xcat/netboot/sles/compute.sle15.x86_64.pkglist @@ -0,0 +1 @@ +compute.sle15.pkglist \ No newline at end of file From c5f4918c0cba36f02c503e132aa3c6f08f2d59cd Mon Sep 17 00:00:00 2001 From: Markus Hilger Date: Fri, 17 Jan 2020 21:28:59 +0100 Subject: [PATCH 06/10] Fix syntax --- xCAT-server/share/xcat/netboot/sles/genimage | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/xCAT-server/share/xcat/netboot/sles/genimage b/xCAT-server/share/xcat/netboot/sles/genimage index 37e0b5781..303cd0a0a 100755 --- a/xCAT-server/share/xcat/netboot/sles/genimage +++ b/xCAT-server/share/xcat/netboot/sles/genimage @@ -433,8 +433,8 @@ unless ($onlyinitrd) { my $passwdfile; open($passwdfile, ">", "$rootimg_dir/etc/passwd"); print $passwdfile "root:x:0:0:root:/root:/bin/bash\n"; - } - my $yumcmd; + } + my $yumcmd; if ($osver_host < 11) { $yumcmd = "zypper -R $rootimg_dir $non_interactive install "; } else { From 74daba97eefe4bc8602e364c07aa90c88cc02b02 Mon Sep 17 00:00:00 2001 From: Jarrod Johnson Date: Sat, 11 Aug 2018 20:51:30 -0400 Subject: [PATCH 07/10] Actually set up ifcfg correctly in SLE15 xcatroot is actually responsible, not prepivot.sh --- .../xcat/netboot/sles/dracut_033/xcat-prepivot.sh | 10 +++++----- .../share/xcat/netboot/sles/dracut_033/xcatroot | 12 ++++++------ 2 files changed, 11 insertions(+), 11 deletions(-) diff --git a/xCAT-server/share/xcat/netboot/sles/dracut_033/xcat-prepivot.sh b/xCAT-server/share/xcat/netboot/sles/dracut_033/xcat-prepivot.sh index 9471787b7..f52312e38 100755 --- a/xCAT-server/share/xcat/netboot/sles/dracut_033/xcat-prepivot.sh +++ b/xCAT-server/share/xcat/netboot/sles/dracut_033/xcat-prepivot.sh @@ -153,11 +153,11 @@ function getdevfrommac() { done } -for lf in /tmp/dhclient.*.lease; do - netif=${lf#*.} - netif=${netif%.*} - cp $lf "$NEWROOT/var/lib/dhclient/dhclient-$netif.leases" -done +bootif=$(ls /tmp/net.*.conf|sed -e s/.*net\.// -e s/\.conf//) +cat < $NEWROOT/etc/sysconfig/network/ifcfg-$bootif +BOOTPROTO='dhcp' +STARTMODE='auto' +EOF if [ -f $NEWROOT/etc/hostname ]; then echo `hostname -s` > $NEWROOT/etc/hostname diff --git a/xCAT-server/share/xcat/netboot/sles/dracut_033/xcatroot b/xCAT-server/share/xcat/netboot/sles/dracut_033/xcatroot index a1f39ac71..4b6c9aeaf 100755 --- a/xCAT-server/share/xcat/netboot/sles/dracut_033/xcatroot +++ b/xCAT-server/share/xcat/netboot/sles/dracut_033/xcatroot @@ -295,12 +295,12 @@ function getdevfrommac() { if [ -z $STATEMNT ]; then - for lf in /tmp/dhclient.*.lease; do - netif=${lf#*.} - netif=${netif%.*} - cp $lf "$NEWROOT/var/lib/dhclient/dhclient-$netif.leases" - [ "$xcatdebugmode" > "0" ] && logger -t $log_label -p debug "saving $NEWROOT/var/lib/dhclient/dhclient-$netif.leases" - done + bootif=$(ls /tmp/net.*.conf|sed -e s/.*net\.// -e s/\.conf//) + cat < $NEWROOT/etc/sysconfig/network/ifcfg-$bootif +BOOTPROTO='dhcp' +STARTMODE='auto' +EOF + [ "$xcatdebugmode" > "0" ] && logger -t $log_label -p debug "saving $NEWROOT/etc/sysconfig/network/ifcfg-$bootif" if [ ! -z "$ifname" ]; then MACX=${ifname#*:} From b26e6bcb7bb3111ff3648545ccc8002071ec077d Mon Sep 17 00:00:00 2001 From: Markus Hilger Date: Mon, 20 Jan 2020 00:48:21 +0100 Subject: [PATCH 08/10] SLE15: Fix /etc/resolv.conf overwrite In SLE15 /etc/resolv.conf is a symlink to /run/netconfig/resolv.conf. The package sysconfig-netconfig creates the symlink to /run/netconfig/resolv.conf on the host OS. It does not stay in the chroot environment. Therefore, genimage overwrites /etc/resolv.conf of the host. Let's not create a dummy file if /etc/resolv.conf is a symlink. --- xCAT-server/share/xcat/netboot/sles/genimage | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/xCAT-server/share/xcat/netboot/sles/genimage b/xCAT-server/share/xcat/netboot/sles/genimage index 303cd0a0a..f345dbd42 100755 --- a/xCAT-server/share/xcat/netboot/sles/genimage +++ b/xCAT-server/share/xcat/netboot/sles/genimage @@ -1999,9 +1999,12 @@ sub generic_post { # This function is meant to leave the image in a state approx print $cfgfile "NETWORKING=yes\n"; close($cfgfile); - open($cfgfile, ">", "$rootimg_dir/etc/resolv.conf"); - print $cfgfile "#Dummy resolv.conf to make boot cleaner"; - close($cfgfile); + # SLE15 has a symlink to /run/netconfig/resolv.conf and does not need a dummy file + if (! -l "$rootimg_dir/etc/resolv.conf") { + open($cfgfile, ">", "$rootimg_dir/etc/resolv.conf"); + print $cfgfile "#Dummy resolv.conf to make boot cleaner"; + close($cfgfile); + } # Create the ifcfg-x file for diskless node. But keep the ONBOOT=no # to skip the break of nfs-based boot From bc18c25cd2f848a71b4b414c5600ff4e2ee32b55 Mon Sep 17 00:00:00 2001 From: Markus Hilger Date: Mon, 20 Jan 2020 00:54:30 +0100 Subject: [PATCH 09/10] Fix rcons boot output Boot process was not shown via rcons with strict permissions --- xCAT-server/share/xcat/netboot/sles/genimage | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/xCAT-server/share/xcat/netboot/sles/genimage b/xCAT-server/share/xcat/netboot/sles/genimage index f345dbd42..c406cdc9c 100755 --- a/xCAT-server/share/xcat/netboot/sles/genimage +++ b/xCAT-server/share/xcat/netboot/sles/genimage @@ -275,7 +275,7 @@ unless ($onlyinitrd) { for (my $i = 0 ; $i <= 12 ; $i++) { unless (-e "$rootimg_dir/dev/tty$i") { - system "mknod -m 0620 $rootimg_dir/dev/tty$i c 4 $i"; #that's neccessary for SLES11+ + system "mknod $rootimg_dir/dev/tty$i c 4 $i"; #that's neccessary for SLES11+ } } From 4bc8659be689fed240745de0fd02d7cf8c4a173e Mon Sep 17 00:00:00 2001 From: Markus Hilger Date: Mon, 20 Jan 2020 01:02:02 +0100 Subject: [PATCH 10/10] Remove "Failed to connect to bus" note This does not happen anymore with fixed mounts of 8e9428986da0e01d7b41293e94ecf493f35cb616 --- xCAT-server/share/xcat/netboot/sles/genimage | 1 - 1 file changed, 1 deletion(-) diff --git a/xCAT-server/share/xcat/netboot/sles/genimage b/xCAT-server/share/xcat/netboot/sles/genimage index c406cdc9c..049c1b681 100755 --- a/xCAT-server/share/xcat/netboot/sles/genimage +++ b/xCAT-server/share/xcat/netboot/sles/genimage @@ -989,7 +989,6 @@ if ($dracutmode) { push @ndrivers, @drivers; mkinitrd("stateless"); } -print "It is safe to ignore message 'Failed to connect to bus: No such file or directory' that may have appeared above one or more times.\n"; sub getlibs { my $file = shift;