iaas-setup.sh: support default user not existing

For CNaaS machines we supply cloud-init user-data that does not create a
default user, in this case the script would exit half-way through. Now
it only tries to remove a user if it exists in the first place.
This commit is contained in:
Patrik Lundin 2023-01-25 21:52:20 +01:00
parent 714506da1e
commit f1ab4506f1
Signed by: patlu
GPG key ID: A0A812BA2249F294

View file

@ -26,39 +26,45 @@ fi
# === # ===
export LC_CTYPE=C.UTF-8 export LC_CTYPE=C.UTF-8
# Make sure there is no systemd process running as the initial cloud image user # Remove default user if present
# # after the "enable root" step in prepare-iaas-$os. If there are any # if id "$os"; then
# proceses still running as the specified user the "userdel" command # below # Make sure there is no systemd process running as the initial cloud image user
# will fail. # after the "enable root" step in prepare-iaas-$os. If there are any
# # proceses still running as the specified user the "userdel" command
# Depending on how long we have waited between running the "enable root" # below will fail.
# script and this one it is possible the process has timed out on its own, #
# so run this command before doing "set -e" in case there is no process # Depending on how long we have waited between running the "enable root"
# to match. # script and this one it is possible the process has timed out on its own,
pkill -u "$os" -xf "/lib/systemd/systemd --user" # so run this command before doing "set -e" in case there is no process
# to match.
pkill -u "$os" -xf "/lib/systemd/systemd --user"
# Make sure the process has gone away before continuing # Make sure the process has gone away before continuing
sleep_seconds=1 sleep_seconds=1
attempt=1 attempt=1
max_attempts=10 max_attempts=10
while pgrep -u "$os" -xf "/lib/systemd/systemd --user"; do while pgrep -u "$os" -xf "/lib/systemd/systemd --user"; do
if [ $attempt -gt $max_attempts ]; then if [ $attempt -gt $max_attempts ]; then
echo "failed waiting for systemd process to exit, please investigate" echo "failed waiting for systemd process to exit, please investigate"
exit 1
fi
echo "systemd process still running as '$os' user, this is attempt $attempt out of $max_attempts, sleeping for $sleep_seconds seconds..."
sleep $sleep_seconds
attempt=$((attempt + 1))
done
# While the man page for "userdel" recommends using "deluser" we can not
# run "deluser" with "--remove-home" without installing more than the
# already included `perl-base` package on debian, so stick with the low
# level utility.
if ! userdel --remove "$os"; then
exit 1 exit 1
fi fi
echo "systemd process still running as '$os' user, this is attempt $attempt out of $max_attempts, sleeping for $sleep_seconds seconds..." fi
sleep $sleep_seconds
attempt=$((attempt + 1))
done
# From this point we expect all commands to succeed # From this point we expect all commands to succeed
set -e set -e
# While the man page for "userdel" recommends using "deluser" we can not
# run "deluser" with "--remove-home" without installing more than the
# already included `perl-base` package on debian, so stick with the low
# level utility.
userdel --remove "$os"
rm /etc/sudoers.d/* rm /etc/sudoers.d/*
# Make sure en_US.UTF-8 is present in the system, expected by at least # Make sure en_US.UTF-8 is present in the system, expected by at least