Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
19 changes: 9 additions & 10 deletions dracut-saltboot/saltboot/module-setup.sh
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ depends() {
}

get_python_pkg_deps() {
rpm -q --requires "$@" |grep ^python3 | while read req ver; do
rpm -q --requires "$@" | grep ^python3 | while read -r req _; do
rpm -q --whatprovides "$req"
done | sort -u
}
Expand All @@ -24,18 +24,18 @@ get_python_pkg_deps_recursive() {
deps=$(get_python_pkg_deps $deps)
res=$(echo -e "$res\n$deps" |sort -u)
done
echo $res
echo "$res"
}

# fix for bsc#1188846 - solve dependencies of nonexecutable python libs
fix_python_deps() {
while read file ; do
echo "$file"
if [[ $file = *.so && ! -x $file ]] ; then
for lib in $(ldd "$file" 2>/dev/null ); do
[[ $lib != /* ]] && continue
[[ -f $lib ]] || continue
echo $lib
while read -r f ; do
echo "$f"
if [[ $f = *.so && ! -x $f ]] ; then
for lib in $(ldd "$f" 2>/dev/null ); do
[[ "$lib" != /* ]] && continue
[[ -f "$lib" ]] || continue
echo "$lib"
done
fi
done
Expand Down Expand Up @@ -88,4 +88,3 @@ install() {

inst -o /etc/salt/minion.d/autosign-grains.conf
}

44 changes: 32 additions & 12 deletions dracut-saltboot/saltboot/saltboot-root.sh
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
#!/bin/sh

command -v getarg > /dev/null || . /lib/dracut-lib.sh

if [ -z "$root" ] ; then
root=saltboot
fi
Expand All @@ -8,22 +10,40 @@ rootok=1

# If we don't have a server, we need dhcp
if [ -z "$server" ] ; then
DHCPORSERVER="1"
DHCPORSERVER="1"
fi;

# Saltboot prefix
_prefix="rd.saltboot"

# Salt minion modifiers
export MASTER=$(getarg MASTER=)
export MINION_ID_PREFIX=$(getarg MINION_ID_PREFIX=)
export SALT_TIMEOUT=$(getarg SALT_TIMEOUT=)
export SALT_STOP_TIMEOUT=$(getarg SALT_STOP_TIMEOUT=)
export salt_device=$(getarg salt_device=)
MASTER=$(getarg "${_prefix}.master=" -d -y "MASTER=")
export MASTER

MINION_ID_PREFIX=$(getarg "${_prefix}.id_prefix=" -d -y "MINION_ID_PREFIX=")
export MINION_ID_PREFIX

SALT_TIMEOUT=$(getargnum 60 10 3600 "${_prefix}.timeout=" -d -y "SALT_TIMEOUT=")
export SALT_TIMEOUT

SALT_STOP_TIMEOUT=$(getargnum 15 1 60 "${_prefix}.stop_timeout=" -d -y "SALT_STOP_TIMEOUT=")
export SALT_STOP_TIMEOUT

salt_device=$(getarg "${_prefix}.device=" -d -y "salt_device")
export salt_device

# Terminal naming modifiers
export DISABLE_UNIQUE_SUFFIX=$(getarg DISABLE_UNIQUE_SUFFIX=)
export DISABLE_HOSTNAME_ID=$(getarg DISABLE_HOSTNAME_ID=)
export DISABLE_ID_PREFIX=$(getarg DISABLE_ID_PREFIX=)
export USE_FQDN_MINION_ID=$(getarg USE_FQDN_MINION_ID=)
export USE_MAC_MINION_ID=$(getarg USE_MAC_MINION_ID=)
getargbool 0 "${_prefix}.nosuffix" -d -y "DISABLE_UNIQUE_SUFFIX=" && DISABLE_UNIQUE_SUFFIX=1
export DISABLE_UNIQUE_SUFFIX
getargbool 0 "${_prefix}.nohostname" -d -y "DISABLE_HOSTNAME_ID=" && DISABLE_HOSTNAME_ID=1
export DISABLE_HOSTNAME_ID
getargbool 0 "${_prefix}.noprefix" -d -y "DISABLE_ID_PREFIX=" && DISABLE_ID_PREFIX=1
export DISABLE_ID_PREFIX
getargbool 0 "${_prefix}.usefqdn" -d -y "USE_FQDN_MINION_ID=" && USE_FQDN_MINION_ID=1
export USE_FQDN_MINION_ID
getargbool 0 "${_prefix}.usemac" -d -y "USE_MAC_MINION_ID=" && USE_MAC_MINION_ID=1
export USE_MAC_MINION_ID

# Debugging
export kiwidebug=$(getarg kiwidebug=)
getargbool 0 "${_prefix}.debug=" -d -y "kiwidebug=" && kiwidebug=1
export kiwidebug
4 changes: 3 additions & 1 deletion dracut-saltboot/saltboot/saltboot-timeout.sh
Original file line number Diff line number Diff line change
Expand Up @@ -6,12 +6,14 @@ type getarg >/dev/null 2>&1 || . /lib/dracut-lib.sh
# if $root is specified, usually means terminal is already deployed and thus network is optional
# wait for either network or device to boot from to be ready

if [ -z "$root" ] || [ "$root"x == "saltbootx" ]; then
if [ -z "$root" ] || [ "$root"x = "saltbootx" ]; then
exit 0
fi

_name="$(str_replace "${root#block:}" '/' '\x2f')"
# shellcheck disable=SC2034
for f in wait-network.sh "devexists-$_name.sh"; do
# shellcheck disable=SC2154
if [ ! -e "$hookdir/initqueue/finished/\$f" ] || ( . "$hookdir/initqueue/finished/\$f" ); then
rm -f -- "$hookdir/initqueue/finished/wait-network.sh"
rm -f -- "$hookdir/initqueue/finished/devexists-$_name.sh"
Expand Down
117 changes: 61 additions & 56 deletions dracut-saltboot/saltboot/saltboot.sh
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
#!/bin/bash

command -v getarg > /dev/null || . /lib/dracut-lib.sh

NEWROOT=${NEWROOT:-/mnt}
export NEWROOT

Expand Down Expand Up @@ -85,55 +87,55 @@ else
INITRD_SALT_CACHE=/var/cache/salt
fi

mkdir -p $NEWROOT
if [ -n "$salt_device" ] && mount "$salt_device" $NEWROOT ; then
for sd in $NEWROOT/etc/venv-salt-minion $NEWROOT/venv-salt-minion $NEWROOT/etc/salt $NEWROOT/salt $NEWROOT ; do
if [ -f $sd/minion_id ] ; then # find valid salt configuration
mkdir -p $INITRD_SALT_ETC
cp -pr $sd/* $INITRD_SALT_ETC
mkdir -p "$NEWROOT"
if [ -n "$salt_device" ] && mount "$salt_device" "$NEWROOT" ; then
for sd in "$NEWROOT/etc/venv-salt-minion" "$NEWROOT/venv-salt-minion" "$NEWROOT/etc/salt" "$NEWROOT/salt" "$NEWROOT" ; do
if [ -f "${sd}/minion_id" ] ; then # find valid salt configuration
mkdir -p "$INITRD_SALT_ETC"
cp -pr "$sd"/* "$INITRD_SALT_ETC"
# remove activation key grain copied from the disk with the rest of configuration
rm -f $INITRD_SALT_ETC/minion.d/kiwi_activation_key.conf
rm -f "$INITRD_SALT_ETC/minion.d/kiwi_activation_key.conf"
#make sure we are not using venv config on normal minion
rm -f /etc/salt/minion.d/00-venv.conf
HAVE_MINION_ID=y
break
fi
done
umount $NEWROOT
umount "$NEWROOT"
fi

mkdir -p $INITRD_SALT_ETC/minion.d
cat > $INITRD_SALT_ETC/minion.d/grains-initrd.conf <<EOT
mkdir -p "$INITRD_SALT_ETC/minion.d"
cat > "$INITRD_SALT_ETC/minion.d/grains-initrd.conf" <<EOT
grains:
saltboot_initrd: True
EOT

MACHINE_ID=`$INITRD_SALT_CALL --local --out newline_values_only grains.get machine_id`
MACHINE_ID=$("$INITRD_SALT_CALL" --local --out newline_values_only grains.get machine_id)

# store machine id in grains permanently so it does not change when we switch to
# initrd and back
# this is not needed for SALT but SUSE Manager seems to rely on it
cat > $INITRD_SALT_ETC/minion.d/grains-machine_id.conf <<EOT
cat > "$INITRD_SALT_ETC/minion.d/grains-machine_id.conf" <<EOT
grains:
machine_id: $MACHINE_ID
EOT

echo $MACHINE_ID > /etc/machine-id
echo "$MACHINE_ID" > /etc/machine-id

curl -s "http://${MASTER:-$BOOTSERVERADDR}/saltboot/defaults" > /tmp/defaults
curl -s "http://${MASTER:-$BOOTSERVERADDR}/saltboot/defaults" -o /tmp/defaults
if [ ! -s /tmp/defaults ] ; then
busybox tftp -g -l /tmp/defaults -r defaults "${MASTER:-$BOOTSERVERADDR}"
curl -s "tftp://${MASTER:-$BOOTSERVERADDR}/defaults" -o /tmp/defaults
fi

if [ -s /tmp/defaults ] ; then
[ -z "$MINION_ID_PREFIX" ] && eval `grep ^MINION_ID_PREFIX= /tmp/defaults`
[ -z "$DISABLE_ID_PREFIX" ] && eval `grep ^DISABLE_ID_PREFIX= /tmp/defaults`
[ -z "$DISABLE_UNIQUE_SUFFIX" ] && eval `grep ^DISABLE_UNIQUE_SUFFIX= /tmp/defaults`
if [ -z "$USE_FQDN_MINION_ID" -a -z "$DISABLE_HOSTNAME_ID" ] ; then
eval `grep ^USE_FQDN_MINION_ID= /tmp/defaults`
eval `grep ^DISABLE_HOSTNAME_ID= /tmp/defaults`
[ -z "$MINION_ID_PREFIX" ] && eval "$(grep ^MINION_ID_PREFIX= /tmp/defaults)"
[ -z "$DISABLE_ID_PREFIX" ] && eval "$(grep ^DISABLE_ID_PREFIX= /tmp/defaults)"
[ -z "$DISABLE_UNIQUE_SUFFIX" ] && eval "$(grep ^DISABLE_UNIQUE_SUFFIX= /tmp/defaults)"
if [ -z "$USE_FQDN_MINION_ID" ] && [ -z "$DISABLE_HOSTNAME_ID" ] ; then
eval "$(grep ^USE_FQDN_MINION_ID= /tmp/defaults)"
eval "$(grep ^DISABLE_HOSTNAME_ID= /tmp/defaults)"
fi
[ -z "$DEFAULT_KERNEL_PARAMETERS" ] && eval `grep ^DEFAULT_KERNEL_PARAMETERS= /tmp/defaults`
[ -z "$DEFAULT_KERNEL_PARAMETERS" ] && eval "$(grep ^DEFAULT_KERNEL_PARAMETERS= /tmp/defaults)"
export DEFAULT_KERNEL_PARAMETERS
fi

Expand Down Expand Up @@ -179,7 +181,7 @@ if [ -z "$HAVE_MINION_ID" ] ; then
fi

if [ -z "$MINION_ID" ] && [ -z "$DISABLE_HOSTNAME_ID" ]; then
FQDN=$(dig $DIG_OPTIONS -x "${IPADDR%/*}" | sed -e 's|;;.*||' -e 's|\.$||')
FQDN=$(dig "$DIG_OPTIONS" -x "${IPADDR%/*}" | sed -e 's|;;.*||' -e 's|\.$||')
if [ -n "$USE_FQDN_MINION_ID" ]; then
MINION_ID="$FQDN"
else
Expand All @@ -188,10 +190,11 @@ if [ -z "$HAVE_MINION_ID" ] ; then
fi

if [ -z "$MINION_ID" ]; then
SMBIOS_MANUFACTURER=`$INITRD_SALT_CALL --local --out newline_values_only smbios.get system-manufacturer | tr -d -c 'A-Za-z0-9_-'`
SMBIOS_PRODUCT=`$INITRD_SALT_CALL --local --out newline_values_only smbios.get system-product-name | tr -d -c 'A-Za-z0-9_-'`
SMBIOS_SERIAL=-`$INITRD_SALT_CALL --local --out newline_values_only smbios.get system-serial-number | tr -d -c 'A-Za-z0-9_-'`
SMBIOS_MANUFACTURER=$("$INITRD_SALT_CALL" --local --out newline_values_only smbios.get system-manufacturer | tr -d -c 'A-Za-z0-9_-')
SMBIOS_PRODUCT=$("$INITRD_SALT_CALL" --local --out newline_values_only smbios.get system-product-name | tr -d -c 'A-Za-z0-9_-')
SMBIOS_SERIAL=-$("$INITRD_SALT_CALL" --local --out newline_values_only smbios.get system-serial-number | tr -d -c 'A-Za-z0-9_-')

# shellcheck disable=SC2268
if [ "x$SMBIOS_SERIAL" == "x-None" ] ; then
SMBIOS_SERIAL=
fi
Expand Down Expand Up @@ -225,13 +228,13 @@ grains:
EOT
fi

CUR_MASTER=`$INITRD_SALT_CALL --local --out newline_values_only grains.get master`
CUR_MASTER=$("$INITRD_SALT_CALL" --local --out newline_values_only grains.get master)
# do we have master explicitly configured?
if [ -z "$CUR_MASTER" -o "salt" == "$CUR_MASTER" ] ; then
if [ -z "$CUR_MASTER" ] || [ "salt" == "$CUR_MASTER" ] ; then
# either we have MASTER set on commandline
# or we try to resolve the 'salt' alias
if [ -z "$MASTER" ] ; then
MASTER=`dig $DIG_OPTIONS -t CNAME salt.$DNSDOMAIN | sed -e 's|;;.*||' -e 's|\.$||' `
MASTER=$(dig "$DIG_OPTIONS" -t CNAME "salt.$DNSDOMAIN" | sed -e 's|;;.*||' -e 's|\.$||')
fi
fi

Expand Down Expand Up @@ -270,20 +273,20 @@ fi

sleep 1

SALT_PID=`cat /var/run/$INITRD_SALT_MINION.pid`
SALT_PID=$(cat /var/run/$INITRD_SALT_MINION.pid)

if [ -z "$SALT_PID" ] ; then
Echo "Salt Minion did not start, rebooting in 10s"
sleep 10
reboot -f
fi

MINION_ID="`$INITRD_SALT_CALL --local --out newline_values_only grains.get id`"
MINION_FINGERPRINT="`$INITRD_SALT_CALL --local --out newline_values_only key.finger`"
MINION_ID=$("$INITRD_SALT_CALL" --local --out newline_values_only grains.get id)
MINION_FINGERPRINT=$("$INITRD_SALT_CALL" --local --out newline_values_only key.finger)
while [ -z "$MINION_FINGERPRINT" ] ; do
Echo "Waiting for salt key..."
sleep 1
MINION_FINGERPRINT="`$INITRD_SALT_CALL --local --out newline_values_only key.finger`"
MINION_FINGERPRINT=$("$INITRD_SALT_CALL" --local --out newline_values_only key.finger)
done

echo
Expand All @@ -305,68 +308,70 @@ snum=0
while kill -0 "$SALT_PID" >/dev/null 2>&1; do
sleep 1
num=$(( num + 1 ))
if [ "$num" == "$SALT_TIMEOUT" -a -n "$root" -a ! -f "$INITRD_SALT_CACHE/minion/extmods/states/saltboot.py" ] && \
! grep 'The Salt Master has cached the public key for this node' $INITRD_SALT_LOG && \
mount ${root#block:} $NEWROOT && [ -f $NEWROOT/etc/ImageVersion ]; then
export systemIntegrity=fine
export imageName=`cat $NEWROOT/etc/ImageVersion`
if [ "$num" == "$SALT_TIMEOUT" ] && [ -n "$root" ] && [ ! -f "$INITRD_SALT_CACHE/minion/extmods/states/saltboot.py" ] && \
! grep 'The Salt Master has cached the public key for this node' "$INITRD_SALT_LOG" && \
mount "${root#block:}" "$NEWROOT" && [ -f "$NEWROOT/etc/ImageVersion" ]; then
systemIntegrity=fine
export systemIntegrity
imageName=$(cat "$NEWROOT/etc/ImageVersion")
export imageName
Echo "SUSE Manager server did not respond, trying local boot to\\\n$imageName"
sleep 5
kill "$SALT_PID"
sleep 1
fi
#detect salt kill message
if [ -f "$SALT_STOP" ];then
if [ -f "$SALT_STOP" ]; then
snum=$(( snum + 1 ))
if [ "$snum" -gt "$SALT_STOP_TIMEOUT" ];then
if [ "$snum" -gt "$SALT_STOP_TIMEOUT" ]; then
kill -9 "$SALT_PID"
rm "$SALT_STOP"
sleep 1
fi
fi
done

if [ -f /salt_config ] ; then
if [ -f /salt_config ]; then
. /salt_config
fi

if [ "$systemIntegrity" = "unknown" ] ; then
if [ "$systemIntegrity" = "unknown" ]; then
Echo "SALT Minion did not create valid configuration, rebooting in 10s"
sleep 10
reboot -f
fi

cat > $INITRD_SALT_ETC/minion.d/grains-initrd.conf <<EOT
cat > "$INITRD_SALT_ETC/minion.d/grains-initrd.conf" <<EOT
grains:
saltboot_initrd: False
EOT

rm -f $INITRD_SALT_ETC/minion.d/autosign-grains-onetime.conf
rm -f "$INITRD_SALT_ETC/minion.d/autosign-grains-onetime.conf"

if [ -e $NEWROOT/etc/venv-salt-minion ] ; then
if [ -e "$NEWROOT/etc/venv-salt-minion" ] ; then
IMAGE_SALT_ETC=/etc/venv-salt-minion
else
IMAGE_SALT_ETC=/etc/salt
fi

# copy salt, wicked and system configurations to deployed system
mkdir -p $NEWROOT/$IMAGE_SALT_ETC
cp -pr $INITRD_SALT_ETC/* $NEWROOT/$IMAGE_SALT_ETC
mkdir -p "$NEWROOT/$IMAGE_SALT_ETC"
cp -pr "$INITRD_SALT_ETC"/* "$NEWROOT/$IMAGE_SALT_ETC"
#make sure we are not using venv config on normal minion
rm -f $NEWROOT/etc/salt/minion.d/00-venv.conf
rm -f "$NEWROOT/etc/salt/minion.d/00-venv.conf"

echo $MACHINE_ID > $NEWROOT/etc/machine-id
echo "$MACHINE_ID" > "$NEWROOT/etc/machine-id"

mkdir -p $NEWROOT/var/lib/wicked
cp /var/lib/wicked/lease* $NEWROOT/var/lib/wicked/
mkdir -p "$NEWROOT/var/lib/wicked"
cp /var/lib/wicked/lease* "$NEWROOT/var/lib/wicked/"

# copy salt log files
mkdir -p $NEWROOT/var/log/saltboot
mkdir -p "$NEWROOT/var/log/saltboot"
num=1
while [ -e $NEWROOT/var/log/saltboot/saltboot_$num ] ; do
while [ -e "$NEWROOT/var/log/saltboot/saltboot_$num" ] ; do
num=$(( num + 1 ))
done
cp -pr $INITRD_SALT_LOG $NEWROOT/var/log/saltboot/saltboot_$num
cp -pr "$INITRD_SALT_LOG" "$NEWROOT/var/log/saltboot/saltboot_$num"

if [ -n "$kernelAction" ] ; then
umount -a
Expand All @@ -383,5 +388,5 @@ if [ -n "$kernelAction" ] ; then
fi
fi

[ -n "$PROGRESS_PID" ] && kill $PROGRESS_PID
[ -n "$DC_PROGRESS_PID" ] && kill $DC_PROGRESS_PID
[ -n "$PROGRESS_PID" ] && kill "$PROGRESS_PID"
[ -n "$DC_PROGRESS_PID" ] && kill "$DC_PROGRESS_PID"