diff --git a/buildrpms.pl b/buildrpms.pl index f33b2faa7..0039c5f19 100755 --- a/buildrpms.pl +++ b/buildrpms.pl @@ -156,6 +156,22 @@ sub is_in { 0; } +sub genesis_tarch_from_targetarch { + my ($targetarch) = @_; + return 'ppc64' if $targetarch eq 'ppc64le'; + return 'x86' if $targetarch =~ /^i[3-6]86$/; + return $targetarch; +} + +sub targetarch_from_target { + my ($target) = @_; + return $ARCH unless defined $target && length $target; + my @parts = split /-/, $target; + my $arch = $parts[-1]; + $arch =~ s/^\s+|\s+$//g; + return lc $arch; +} + # product(\@A, \@B) returns the catersian product of \@A and \@B sub product { my ($a, $b) = @_; @@ -202,7 +218,9 @@ sub createmockconfig { write_text($cfgfile, $contents); } -sub buildsources_genesis_base() { +sub buildsources_genesis_base($) { + my ($target) = @_; + die "Assertion failed! No directory xCAT-genesis-builder in the current directory" unless -d "./xCAT-genesis-builder"; @@ -233,7 +251,8 @@ sub buildsources_genesis_base() { my $dracutmoddir = "/usr/lib/dracut/modules.d/97xcat/"; - my $buildarch = $ARCH; + my $targetarch = targetarch_from_target($target); + my $buildarch = genesis_tarch_from_targetarch($targetarch); my $kernelversion = `uname -r`; chomp $kernelversion; @@ -353,7 +372,18 @@ EOF } elsif ($pkg eq "xCAT-genesis-scripts") { sh qq(tar -cjf "$SOURCES/$pkg.tar.bz2" $pkg); } elsif ($pkg eq "xCAT-genesis-base") { - buildsources_genesis_base(); + buildsources_genesis_base($target); + } elsif ($pkg eq "xCATsn") { + sh(<<"EOF"); + tar -czf "$SOURCES/$pkg-$VERSION.tar.gz" $pkg + tar -czf "$SOURCES/license.tar.gz" -C $pkg LICENSE.html + tar -czf "$SOURCES/etc.tar.gz" -C xCAT etc + cp $pkg/xcat.conf $SOURCES + cp $pkg/xcat.conf.apach24 $SOURCES + cp $pkg/xCATSN $SOURCES +EOF + # xCATsn.spec consumes templates from xCAT shared templates payload. + sh qq(tar -czf "$SOURCES/templates.tar.gz" xCAT/templates) unless -f "$SOURCES/templates.tar.gz"; } else { sh qq(tar -czf "$SOURCES/$pkg-$VERSION.tar.gz" $pkg); } @@ -363,8 +393,13 @@ sub buildspkgs { my ($pkg, $target) = @_; my $chroot = "$pkg-$target"; + my $targetarch = targetarch_from_target($target); + my $genesis_tarch = genesis_tarch_from_targetarch($targetarch); - my $diskcache = "dist/$target/srpms/$pkg-$VERSION-$RELEASE.src.rpm"; + my $diskcache = ( + $pkg eq 'xCAT-genesis-scripts' || $pkg eq 'xCAT-genesis-base' + ) ? "dist/$target/srpms/$pkg-$genesis_tarch-$VERSION-$RELEASE.src.rpm" + : "dist/$target/srpms/$pkg-$VERSION-$RELEASE.src.rpm"; return if -f $diskcache and not $opts{force}; my $dir = sub { @@ -403,22 +438,25 @@ sub buildpkgs { ); # get x86_64 from rhel+epel-9-x86_64 - my $targetarch = (split /-/, $target, 3)[2]; + my $targetarch = targetarch_from_target($target); - # get the builder arch, xCAT-genesis-base include it in its package name - my $nativearch = $ARCH; + # xCAT genesis packages include the translated target arch in their file names. my $arch = is_in($pkg, @native_pkgs) ? $targetarch : "noarch"; - my $diskcache = "dist/$target/rpms/$pkg-$VERSION-$RELEASE.$arch.rpm"; + my $genesis_tarch = genesis_tarch_from_targetarch($targetarch); + my $diskcache = ( + $pkg eq 'xCAT-genesis-scripts' || $pkg eq 'xCAT-genesis-base' + ) ? "dist/$target/rpms/$pkg-$genesis_tarch-$VERSION-$RELEASE.noarch.rpm" + : "dist/$target/rpms/$pkg-$VERSION-$RELEASE.$arch.rpm"; return if -f $diskcache and not $opts{force}; my @opts; push @opts, "--quiet" unless $opts{verbose}; my $spkgname = sub { - return "${pkg}-${arch}-${VERSION}-${RELEASE}.src.rpm" + return "${pkg}-${genesis_tarch}-${VERSION}-${RELEASE}.src.rpm" if $pkg eq 'xCAT-genesis-scripts'; - return "xCAT-genesis-base-${nativearch}-${VERSION}-${RELEASE}.src.rpm" + return "xCAT-genesis-base-${genesis_tarch}-${VERSION}-${RELEASE}.src.rpm" if $pkg eq 'xCAT-genesis-base'; return "$pkg-${VERSION}-${RELEASE}.src.rpm"; diff --git a/xCAT-genesis-builder/buildrpmel10 b/xCAT-genesis-builder/buildrpmel10 deleted file mode 100755 index ec06183e8..000000000 --- a/xCAT-genesis-builder/buildrpmel10 +++ /dev/null @@ -1,88 +0,0 @@ -#!/bin/bash -# Build the xCAT-genesis-base rpm on a host system. -# Option 1: install the xCAT-genesis-builder rpm (that includes this file) on a system installed with -# the distro you want to use to build xCAT-genesis-base. -# Option 2: untar the root file system of the distro you want to use and then chroot into it and copy -# this whole dir into it somewhere (like /tmp). -# Then run this script. The optional 1st arg should be mcp if you are building against mcp. - -# Currently, *Fedora 28* and *RedHat 8* are the only OSes supported to build genesis-base for ppc64, and Centos 6.5 for x86_64 - -DIR=`dirname $0` -#DIR=`realpath $DIR` -DIR=`readlink -f $DIR` -BUILDARCH=`uname -m` -REQUIRED_PACKAGES="rpmdevtools rpm-build screen lldpad mstflint ipmitool pciutils mdadm dosfstools usbutils bind-utils psmisc nmap-ncat ethtool kexec-tools" -DISTRO=$(perl -lane 'print $1 if /^ID="?([^\"\$]+)/' < /etc/os-release) - -# Install required packages -dnf install -y epel-release -dnf -y install $REQUIRED_PACKAGES || { - echo "ERROR: Can not install required package" - exit 1 -} - -rpmdev-setuptree - -DRACUTMODDIR=/usr/lib/dracut/modules.d/97xcat -mkdir -p $DRACUTMODDIR -case "$DISTRO" in - ubuntu) - cp -a "$DIR/dracut_105/ubuntu/module-setup.sh" $DRACUTMODDIR/ - ;; - rhel) - cp -a "$DIR/dracut_105/el/module-setup.sh" $DRACUTMODDIR/ - ;; - *) - echo "Warning: Unknown distro $DISTRO, assuming RHEL clone" - cp -a "$DIR/dracut_105/el/module-setup.sh" $DRACUTMODDIR/ - ;; -esac -dracut -m "xcat base" --no-early-microcode -N -f /tmp/xcatgenesis.$$.rfs $KERNELVERSION - -echo Expanding the initramfs into /tmp/xcatgenesis.$$/opt/xcat/share/xcat/netboot/genesis/$BUILDARCH/fs ... - -mkdir -p /tmp/xcatgenesis.$$/opt/xcat/share/xcat/netboot/genesis/$BUILDARCH/fs -cd /tmp/xcatgenesis.$$/opt/xcat/share/xcat/netboot/genesis/$BUILDARCH/fs -zcat /tmp/xcatgenesis.$$.rfs | cpio -dumi - -# add the perl library -# add /usr/share/ntp/lib for Fedora26 ppc64, the ntp-perl will installed libraries under it -PERL_LIB_DIR="/usr/share/perl5 /usr/lib64/perl5 /usr/local/lib64/perl5 /usr/local/share/perl5 /usr/share/ntp/lib" -for d in `echo $PERL_LIB_DIR`; do - if [ -e $d ]; then - echo Adding perl libary "$d" - TEMP_DIR=/tmp/xcatgenesis.$$/opt/xcat/share/xcat/netboot/genesis/$BUILDARCH/fs/"$d" - mkdir -p $TEMP_DIR - cp -a -t $TEMP_DIR $d/. - fi -done - -# create directory for ssh-keygen -mkdir -p /tmp/xcatgenesis.$$/opt/xcat/share/xcat/netboot/genesis/$BUILDARCH/fs/etc/ssh -mkdir -p /tmp/xcatgenesis.$$/opt/xcat/share/xcat/netboot/genesis/$BUILDARCH/fs/lib/udev/rules.d/ - -# create the predictable naming for nics -LIB_UDEV_RULES="/lib/udev/rules.d/" -if [ ! -e "$LIB_UDEV_RULES/80-net-name-slot.rules" ]; then - cp $DRACUTMODDIR/80-net-name-slot.rules /tmp/xcatgenesis.$$/opt/xcat/share/xcat/netboot/genesis/$BUILDARCH/fs/lib/udev/rules.d/ - if [ $? -ne 0 ]; then - echo "ERROR - expanding the initramfs, please correct the issues and try again" - exit 1 - fi -fi - -# add the kernel -echo Adding kernel /boot/vmlinuz-$BUILDARCH ... -cp /boot/vmlinuz-`uname -r` /tmp/xcatgenesis.$$/opt/xcat/share/xcat/netboot/genesis/$BUILDARCH/kernel -cd - - -# create tar file -echo Tarring /tmp/xcatgenesis.$$/opt into ~/rpmbuild/SOURCES/xCAT-genesis-base-$BUILDARCH.tar.bz2 ... -cd /tmp/xcatgenesis.$$ -tar jcf ~/rpmbuild/SOURCES/xCAT-genesis-base-$BUILDARCH.tar.bz2 opt - -# build the rpm -echo Building xCAT-genesis-base rpm from ~/rpmbuild/SOURCES/xCAT-genesis-base-$BUILDARCH.tar.bz2 and $DIR/xCAT-genesis-base.spec ... -rpmbuild -ba $DIR/xCAT-genesis-base.spec -rm -rf $DRACUTMODDIR diff --git a/xCAT-genesis-builder/dracut_105/el/module-setup.sh b/xCAT-genesis-builder/dracut_105/el/module-setup.sh index 805d70fe2..572e237ea 100755 --- a/xCAT-genesis-builder/dracut_105/el/module-setup.sh +++ b/xCAT-genesis-builder/dracut_105/el/module-setup.sh @@ -45,15 +45,18 @@ install() { dracut_install uniq # mellanox update requires dracut_install grep ip hostname /usr/bin/awk egrep grep dirname expr dracut_install mount.nfs sshd vi reboot lspci parted screen mkfs mkfs.ext4 mkfs.xfs xfs_db + _dracut_install_opt /usr/libexec/openssh/sshd-session + _dracut_install_opt /usr/libexec/openssh/sftp-server #dracut_install libvirtd /usr/share/libvirt/cpu_map.xml /usr/bin/qemu-img /usr/libexec/qemu-kvm dracut_install mkswap df ifenslave ssh-keygen scp clear - dracut_install dhclient lldpad + dracut_install /usr/sbin/dhclient lldpad dracut_install /lib64/libnss_dns.so.2 dracut_install poweroff hwclock date /usr/share/terminfo/x/xterm /usr/share/terminfo/s/screen /etc/nsswitch.conf /etc/services dracut_install /sbin/rsyslogd /etc/protocols umount /bin/rpm /usr/lib/rpm/rpmrc #dracut_install chmod /sbin/route /sbin/ifconfig /usr/bin/whoami /usr/bin/head /usr/bin/tail basename /etc/redhat-release ping tr lsusb /usr/share/hwdata/usb.ids #ibm fw wrapper requirements dracut_install chmod ip /usr/bin/whoami /usr/bin/head /usr/bin/tail basename /etc/redhat-release ping tr lsusb /usr/share/hwdata/usb.ids #ibm fw wrapper requirements - dracut_install efibootmgr dmidecode #uxspi prereqs, but will use dmidecode to improve decision on loading ipmi_si + _dracut_install_opt efibootmgr + _dracut_install_opt dmidecode # uxspi prereqs, but optional on minimal EL10 hosts dracut_install lldptool dracut_install /usr/share/zoneinfo/posix/Zulu dracut_install /usr/share/zoneinfo/posix/GMT-0 diff --git a/xCAT-genesis-builder/dracut_105/el/xcat-cmdline.sh b/xCAT-genesis-builder/dracut_105/el/xcat-cmdline.sh index c479f9e91..61147cd03 100755 --- a/xCAT-genesis-builder/dracut_105/el/xcat-cmdline.sh +++ b/xCAT-genesis-builder/dracut_105/el/xcat-cmdline.sh @@ -64,7 +64,7 @@ if [[ ${ARCH} =~ ppc64 ]]; then modprobe virtio_pci fi waittime=2 - ALL_NICS=$(ip link show | grep -v "^ " | awk '{print $2}' | sed -e 's/:$//' | grep -v lo) + ALL_NICS=$(ip -o link show | awk -F': ' '{print $2}' | sed -e 's/@.*$//' -e 's/:$//' | grep -v '^lo$' | sort -u) for tmp in $ALL_NICS; do tmp_data="$(ip link show "$tmp" | grep -v "^ " | grep "UP")" if [ "$tmp_data" == "" ]; then diff --git a/xCAT-genesis-builder/install b/xCAT-genesis-builder/install index 9d5674c6d..8239043aa 100755 --- a/xCAT-genesis-builder/install +++ b/xCAT-genesis-builder/install @@ -5,6 +5,9 @@ dracut_install netstat # broadcom update requires dracut_install uniq # mellanox update requires dracut_install grep ip hostname /usr/bin/awk egrep grep dirname expr dracut_install mount.nfs sshd vi reboot lspci parted screen mkfs mkfs.ext4 mkfs.xfs xfs_db +for ssh_helper in /usr/libexec/openssh/sshd-session /usr/libexec/openssh/sftp-server; do + [ -e "$ssh_helper" ] && dracut_install "$ssh_helper" +done #dracut_install libvirtd /usr/share/libvirt/cpu_map.xml /usr/bin/qemu-img /usr/libexec/qemu-kvm dracut_install mkswap df vconfig ifenslave ssh-keygen scp clear dhclient lldpad dracut_install /lib64/libnss_dns-2.12.so /lib64/libnss_dns.so.2 diff --git a/xCAT-genesis-builder/install.ubuntu b/xCAT-genesis-builder/install.ubuntu index f7363212e..e7803ba40 100755 --- a/xCAT-genesis-builder/install.ubuntu +++ b/xCAT-genesis-builder/install.ubuntu @@ -6,6 +6,9 @@ dracut_install netstat # broadcom update requires dracut_install uniq # mellanox update requires dracut_install grep ip hostname awk egrep grep dirname expr dracut_install mount.nfs sshd vi reboot lspci parted screen mkfs mkfs.ext4 mkfs.btrfs +for ssh_helper in /usr/libexec/openssh/sshd-session /usr/libexec/openssh/sftp-server; do + [ -e "$ssh_helper" ] && dracut_install "$ssh_helper" +done dracut_install efibootmgr #dracut_install libvirtd /usr/share/libvirt/cpu_map.xml /usr/bin/qemu-img /usr/libexec/qemu-kvm dracut_install mkswap df brctl vconfig ifenslave ssh-keygen scp clear dhclient lldpad diff --git a/xCAT-genesis-builder/xCAT-genesis-base.spec b/xCAT-genesis-builder/xCAT-genesis-base.spec index b92568a5b..f08d38b05 100644 --- a/xCAT-genesis-builder/xCAT-genesis-base.spec +++ b/xCAT-genesis-builder/xCAT-genesis-base.spec @@ -137,7 +137,7 @@ remove_directory_deep("/opt/xcat/share/xcat/netboot/genesis/%{tarch}/fs/var/run" if [ "$1" == "2" ]; then #only on upgrade, as on install it's probably not going to work... if [ -f "/proc/cmdline" ]; then # prevent running it during install into chroot image . /etc/profile.d/xcat.sh - #mknb %{tarch} + mknb %{tarch} echo "If you are installing/updating xCAT-genesis-base separately, not as part of installing/updating all of xCAT, run 'mknb ' manually" mkdir -p /etc/xcat touch /etc/xcat/genesis-base-updated diff --git a/xCAT-genesis-builder/xcat-cmdline.sh b/xCAT-genesis-builder/xcat-cmdline.sh index 15ead2175..24ba807f4 100755 --- a/xCAT-genesis-builder/xcat-cmdline.sh +++ b/xCAT-genesis-builder/xcat-cmdline.sh @@ -64,7 +64,7 @@ if [[ ${ARCH} =~ ppc64 ]]; then modprobe virtio_pci fi waittime=2 - ALL_NICS=$(ip link show | grep -v "^ " | awk '{print $2}' | sed -e 's/:$//' | grep -v lo) + ALL_NICS=$(ip -o link show | awk -F': ' '{print $2}' | sed -e 's/@.*$//' -e 's/:$//' | grep -v '^lo$' | sort -u) for tmp in $ALL_NICS; do tmp_data="$(ip link show "$tmp" | grep -v "^ " | grep "UP")" if [ "$tmp_data" == "" ]; then diff --git a/xCAT-genesis-scripts/usr/bin/doxcat b/xCAT-genesis-scripts/usr/bin/doxcat index 0bf5e360a..e07a6265a 100755 --- a/xCAT-genesis-scripts/usr/bin/doxcat +++ b/xCAT-genesis-scripts/usr/bin/doxcat @@ -6,6 +6,46 @@ # log_label="xcat.genesis.doxcat" +# Normalize interface names from "ip link" output by removing decorations +# like "@if3", trailing ":" and surrounding whitespace. +normalize_ifname() { + echo "$1" | sed -e 's/@.*$//' -e 's/:$//' -e 's/^[[:space:]]*//' -e 's/[[:space:]]*$//' +} + +# Only consider real ethernet NICs for link probing and DHCP. +# This skips virtual/tunnel interfaces that can spam netlink errors. +is_candidate_nic() { + local nic="$1" + + [ -n "$nic" ] || return 1 + [ "$nic" = "lo" ] && return 1 + case "$nic" in + usb*) return 1 ;; + esac + [ -d "/sys/class/net/$nic" ] || return 1 + [ -e "/sys/class/net/$nic/device" ] || return 1 + [ "$(cat "/sys/class/net/$nic/type" 2>/dev/null)" = "1" ] || return 1 + + return 0 +} + +list_candidate_nics() { + local only_up="$1" + local rawnic + local nic + + ip -o link show | awk -F': ' '{print $2}' | while read -r rawnic; do + nic=$(normalize_ifname "$rawnic") + if ! is_candidate_nic "$nic"; then + continue + fi + if [ "$only_up" = "up" ]; then + ip -o link show dev "$nic" 2>/dev/null | grep -q "UP" || continue + fi + echo "$nic" + done +} + # Start rsyslogd and log into a local file specified in /etc/rsyslog.conf # Later, once xCAT MN is known, dhclient-script will change # rsyslog.conf file to send log entries to xCAT MN @@ -40,11 +80,16 @@ if ls /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor &>/dev/null; then fi fi if [ ! -z "$BOOTIF" ]; then - BOOTIF=`echo $BOOTIF|sed -e s/01-// -e s/-/:/g` + BOOTIF=`echo "$BOOTIF"|sed -e s/01-// -e s/-/:/g` logger -s -t $log_label -p local4.info "Waiting for device with address $BOOTIF to appear.." gripeiter=6000 while [ -z "$bootnic" ]; do - bootnic=`ip link show|grep -B1 $BOOTIF|grep mtu|awk '{print $2}'|sed -e 's/:$//'` + bootnic=`ip -o link show | awk -v mac="$BOOTIF" 'tolower($0) ~ tolower(mac) {print $2; exit}'` + bootnic=`normalize_ifname "$bootnic"` + if [ ! -z "$bootnic" ] && ! ip link show dev "$bootnic" >/dev/null 2>&1; then + logger -s -t $log_label -p local4.info "Detected boot nic '$bootnic' from BOOTIF=$BOOTIF, but the interface does not exist yet. Retrying..." + bootnic="" + fi sleep 0.1 if [ $gripeiter = 0 ]; then logger -s -t $log_label -p local4.err "Unable to find boot device (Maybe the xCAT genesis kernel is missing the driver for your NIC?)" @@ -108,7 +153,7 @@ logger -s -t $log_label -p local4.info "Creating /var/lib/lldpad file..." mkdir -p /var/lib/lldpad echo 'lldp :' >> /var/lib/lldpad/lldpad.conf echo '{' >> /var/lib/lldpad/lldpad.conf -for iface in `ip link |grep -v '^ '|awk '{print $2}'|sed -e 's/:$//'|grep -v lo`; do +for iface in `ip -o link show | awk -F': ' '{print $2}' | sed -e 's/@.*$//' -e 's/:$//' | grep -v '^lo$'`; do echo "$iface :" >> /var/lib/lldpad/lldpad.conf echo "{" >> /var/lib/lldpad/lldpad.conf echo "tlvid00000006 :" >> /var/lib/lldpad/lldpad.conf @@ -205,14 +250,14 @@ if [[ -n $hostip && -n $netmask && -n $gateway && -n $bootnic ]]; then else logger -s -t $log_label -p local4.info "Setting IP via DHCP..." # This section is for System P hardware discovery, which won't have a BOOTIF value set - if [ -z "$bootnic" ]; then - tries=0 - while [ $tries -lt 100 ]; do - ALLUP_NICS=`ip link show | grep -v "^ " | grep "state UP" | awk '{print $2}' | sed -e 's/:$//'|grep -v lo | sort -n -r` - for tmp1 in $ALLUP_NICS; do - dhclient -cf /etc/dhclient.conf -pf /var/run/dhclient.$tmp1.pid $tmp1 & - dhclient -6 -pf /var/run/dhclient6.$tmp1.pid $tmp1 -lf /var/lib/dhclient/dhclient6.leases & - #bootnic=$tmp1 + if [ -z "$bootnic" ]; then + tries=0 + while [ $tries -lt 100 ]; do + ALLUP_NICS=`list_candidate_nics up | sort -r` + for tmp1 in $ALLUP_NICS; do + dhclient -cf /etc/dhclient.conf -pf /var/run/dhclient.$tmp1.pid $tmp1 & + dhclient -6 -pf /var/run/dhclient6.$tmp1.pid $tmp1 -lf /var/lib/dhclient/dhclient6.leases & + #bootnic=$tmp1 #break done if [ ! -z "$ALLUP_NICS" ]; then @@ -247,25 +292,25 @@ else /bin/bash fi else - dhclient -cf /etc/dhclient.conf -pf /var/run/dhclient.$bootnic.pid $bootnic & - #we'll kick of IPv6 and IPv4 on all nics, but not wait for them to come up unless doing discovery, to reduce - #chances that we'll perform a partial discovery - #in other scenarios where downed non-bootnics cause issues, will rely on retries to fix things up - dhclient -6 -pf /var/run/dhclient6.$bootnic.pid $bootnic -lf /var/lib/dhclient/dhclient6.leases & - NICSTOBRINGUP=`ip link|grep mtu|grep -v LOOPBACK|grep -v $bootnic|grep -v usb|grep -v ,UP|awk -F: '{print $2}'` - export NICSTOBRINGUP - for nic in $NICSTOBRINGUP; do - (while ! ethtool $nic | grep Link\ detected|grep yes > /dev/null; do sleep 5; done; dhclient -cf /etc/dhclient.conf -pf /var/run/dhclient.$nic.pid $nic ) & - (while ! ethtool $nic | grep Link\ detected|grep yes > /dev/null; do sleep 5; done; dhclient -cf /etc/dhclient.conf -6 -pf /var/run/dhclient6.$nic.pid -lf /var/lib/dhclient/dhclient6.leases $nic ) & - done + dhclient -cf /etc/dhclient.conf -pf /var/run/dhclient.$bootnic.pid "$bootnic" & + #we'll kick of IPv6 and IPv4 on all nics, but not wait for them to come up unless doing discovery, to reduce + #chances that we'll perform a partial discovery + #in other scenarios where downed non-bootnics cause issues, will rely on retries to fix things up + dhclient -6 -pf /var/run/dhclient6.$bootnic.pid "$bootnic" -lf /var/lib/dhclient/dhclient6.leases & + NICSTOBRINGUP=`list_candidate_nics | awk -v bootnic="$bootnic" '$0 != bootnic'` + export NICSTOBRINGUP + for nic in $NICSTOBRINGUP; do + (while ! ethtool "$nic" | grep Link\ detected|grep yes > /dev/null; do sleep 5; done; dhclient -cf /etc/dhclient.conf -pf /var/run/dhclient.$nic.pid "$nic" ) & + (while ! ethtool "$nic" | grep Link\ detected|grep yes > /dev/null; do sleep 5; done; dhclient -cf /etc/dhclient.conf -6 -pf /var/run/dhclient6.$nic.pid -lf /var/lib/dhclient/dhclient6.leases "$nic" ) & + done gripeiter=101 logger -s -t $log_label -p local4.info "Acquiring network addresses.." - while ! ip -4 -o a show dev $bootnic|grep -v 'scope link'|grep -q inet; do - sleep 0.1 - if [ $gripeiter = 1 ]; then - logger -s -t $log_label -p local4.info "It seems to be taking a while to acquire an IPv4 address, you may want to check spanning tree..." - fi + while ! ip -4 -o a show dev "$bootnic"|grep -v 'scope link'|grep -q inet; do + sleep 0.1 + if [ $gripeiter = 1 ]; then + logger -s -t $log_label -p local4.info "It seems to be taking a while to acquire an IPv4 address, you may want to check spanning tree..." + fi gripeiter=$((gripeiter-1)) done fi @@ -275,7 +320,7 @@ openssl genrsa -out /etc/xcat/certkey.pem 4096 > /dev/null 2>&1 & logger -s -t $log_label -p local4.info "Acquired IPv4 address on $bootnic" -ip -4 -o a show dev $bootnic|grep -v 'scope link'|grep -v 'dynamic'|awk '{print $4}' +ip -4 -o a show dev "$bootnic"|grep -v 'scope link'|grep -v 'dynamic'|awk '{print $4}' if [ -e /usr/sbin/ntpd ]; then logger -s -t $log_label -p local4.info "Starting ntpd..." diff --git a/xCAT-genesis-scripts/xCAT-genesis-scripts.spec b/xCAT-genesis-scripts/xCAT-genesis-scripts.spec index a0384f6f2..ce89077a5 100644 --- a/xCAT-genesis-scripts/xCAT-genesis-scripts.spec +++ b/xCAT-genesis-scripts/xCAT-genesis-scripts.spec @@ -4,7 +4,7 @@ %ifarch x86_64 %define tarch x86_64 %endif -%ifarch ppc ppc64 +%ifarch ppc ppc64 ppc64le %define tarch ppc64 %endif %ifarch aarch64 diff --git a/xCAT/xCAT.spec b/xCAT/xCAT.spec index c0ac906e6..148300a77 100644 --- a/xCAT/xCAT.spec +++ b/xCAT/xCAT.spec @@ -74,7 +74,7 @@ Requires: elilo-xcat xnba-undi %endif %ifarch i386 i586 i686 x86 x86_64 -Requires: syslinux +Requires: syslinux-xcat Requires: ipmitool-xcat >= 1.8.17-1 %endif @@ -84,13 +84,6 @@ Requires: ipmitool-xcat >= 1.8.17-1 %endif %endif -%if %notpcm -# PCM does not need or ship syslinux-xcat -%if %nots390x -Requires: syslinux-xcat -%endif -%endif - %description xCAT is a server management package intended for at-scale management, including hardware management and software management. diff --git a/xCATsn/xCATsn.spec b/xCATsn/xCATsn.spec index a99a0fd13..997e92fed 100644 --- a/xCATsn/xCATsn.spec +++ b/xCATsn/xCATsn.spec @@ -14,6 +14,7 @@ BuildRoot: /var/tmp/%{name}-%{version}-%{release}-root Source1: xcat.conf Source2: license.tar.gz Source3: xCATSN +Source4: etc.tar.gz Source5: templates.tar.gz Source6: xcat.conf.apach24 Requires: perl-DBD-SQLite @@ -56,7 +57,7 @@ Requires: elilo-xcat xnba-undi %endif %ifarch i386 i586 i686 x86 x86_64 -Requires: syslinux +Requires: syslinux-xcat Requires: ipmitool-xcat >= 1.8.17-1 %endif %ifos linux @@ -65,11 +66,6 @@ Requires: ipmitool-xcat >= 1.8.17-1 %endif %endif -%if %notpcm -# PCM does not need or ship syslinux-xcat -Requires: syslinux-xcat -%endif - %description xCAT supports management of very large sized cluster by creating a Hierarchical Cluster and the concept of xCAT Service Nodes. The xCAT Management Node can @@ -79,6 +75,7 @@ set of compute node. xCATsn package provides xCAT service node support. %prep %ifos linux tar zxf %{SOURCE2} +tar zxf %{SOURCE4} %else cp %{SOURCE2} /opt/freeware/src/packages/BUILD gunzip -f license.tar.gz