ceph-mirror/debian/cephadm.postinst
Elliot Courant 65e2a33ee7
deb/cephadm: Don't assume a home directory is configured
cephadm.postinst can fail if cephadm was originally installed using a
version that didn't configure a home directory for the user at all.
Newer versions do configure a home directory (as either `/home/cephadm`
or `/var/lib/cephadm`) so if that is configured then nothing needs to be
done. But if the user was created with no home directory then one needs
to be added for the configure step to succeed.

Fixes: https://tracker.ceph.com/issues/72083

commit 90bc036924 added home directories
for new cephadm users created, but didn't add home directories to
cephadm users that already existed.

Signed-off-by: Elliot Courant <me@elliotcourant.dev>
2025-12-10 14:35:29 -06:00

79 lines
2.2 KiB
Bash

#!/bin/sh
# vim: set noet ts=8:
# postinst script for cephadm
#
# see: dh_installdeb(1)
set -e
# summary of how this script can be called:
#
# postinst configure <most-recently-configured-version>
# old-postinst abort-upgrade <new-version>
# conflictor's-postinst abort-remove in-favour <package> <new-version>
# postinst abort-remove
# deconfigured's-postinst abort-deconfigure in-favour <failed-install-package> <version> [<removing conflicting-package> <version>]
#
# for details, see http://www.debian.org/doc/debian-policy/ or
# the debian-policy package
case "$1" in
configure)
# create cephadm user
# 1. create user if not existing
if ! getent passwd | grep -q "^cephadm:"; then
echo -n "Adding system user cephadm.."
adduser --quiet \
--system \
--disabled-password \
--home /var/lib/cephadm \
--shell /bin/bash cephadm 2>/dev/null || true
usermod --comment "cephadm user for mgr/cephadm" cephadm
echo "..done"
fi
# 2. make sure user is unlocked
if [ -f /etc/shadow ]; then
usermod -U -e '' cephadm
else
usermod -U cephadm
fi
# Older versions may not have configured a home directory.
# If they don't have one configured then add it.
if ! test ~cephadm = "/nonexistent"; then
usermod --home /var/lib/cephadm -m cephadm
fi
# set up (initially empty) .ssh/authorized_keys file
if ! test -d ~cephadm/.ssh; then
mkdir ~cephadm/.ssh
chown --reference ~cephadm ~cephadm/.ssh
chmod 0700 ~cephadm/.ssh
fi
if ! test -e ~cephadm/.ssh/authorized_keys; then
touch ~cephadm/.ssh/authorized_keys
chown --reference ~cephadm ~cephadm/.ssh/authorized_keys
chmod 0600 ~cephadm/.ssh/authorized_keys
fi
;;
abort-upgrade|abort-remove|abort-deconfigure)
:
;;
*)
echo "postinst called with unknown argument \`$1'" >&2
exit 1
;;
esac
# dh_installdeb will replace this with shell code automatically
# generated by other debhelper scripts.
#DEBHELPER#
exit 0