114 lines
2.7 KiB
Bash
114 lines
2.7 KiB
Bash
#!/bin/bash
|
|
|
|
set -e
|
|
# set -x
|
|
|
|
HOST=${HOST:-/host}
|
|
|
|
REALM=false
|
|
if [ -n "$1" ] ; then
|
|
if [ "$#" -eq "1" ] && [ "$1" == "--uninstall" ] ; then
|
|
exec /bin/uninstall.sh
|
|
exit 99
|
|
fi
|
|
if [ "$1" == 'realm' -o "$1" == "/sbin/realm" -o "$1" == "/usr/sbin/realm" ] ; then
|
|
if [ "$#" -eq "2" ] && [ "$2" == "--help" -o "$2" == "help" ] ; then
|
|
$1 $2
|
|
exit $?
|
|
fi
|
|
COMMAND="$1 $2"
|
|
shift ; shift
|
|
params=("--install=/")
|
|
REALM=true
|
|
elif [ "${1#-}" == "$1" ] ; then
|
|
COMMAND="$1"
|
|
shift
|
|
elif [ "$#" -eq "1" ] && [ "$1" == "--help" ] ; then
|
|
ipa-client-install --help
|
|
exit 0
|
|
fi
|
|
fi
|
|
|
|
function setup_service () {
|
|
if chroot $HOST systemctl -q is-active "$NAME" ; then
|
|
chroot $HOST systemctl stop "$NAME"
|
|
fi
|
|
sed "s%\${IMAGE}%${IMAGE:-sssd}%g; s%\${NAME}%${NAME:-sssd}%g;" /etc/sssd.service.template > $HOST/etc/systemd/system/$NAME.service
|
|
chroot $HOST systemctl daemon-reload
|
|
echo "Service $NAME.service configured to run SSSD container."
|
|
}
|
|
|
|
if [ -e "$HOST/etc/ipa/default.conf" ] ; then
|
|
echo 'IPA client is already configured on this system.' >&2
|
|
if [ "$#" -eq "1" ] && [ "$1" == "--migrate" ] ; then
|
|
setup_service
|
|
exit 0
|
|
fi
|
|
echo 'Run atomic uninstall $IMAGE first.' >&2
|
|
exit 1
|
|
fi
|
|
|
|
mkdir -p "$HOST/var/log/sssd/install/sssd"
|
|
mv /var/log /var/log-aside && ln -s "$HOST/var/log/sssd/install" /var/log
|
|
|
|
export _SYSTEMCTL_LITE_LOGFILE="$HOST/var/log/sssd/install/systemctl.log"
|
|
touch $_SYSTEMCTL_LITE_LOGFILE
|
|
|
|
params=()
|
|
function slurp_params () {
|
|
if [ -f "$1" ] ; then
|
|
readarray -t params < <( xargs -n 1 echo < "$1" )
|
|
fi
|
|
}
|
|
|
|
echo "Initializing configuration context from host ..."
|
|
( cd "$HOST" && while read f ; do
|
|
if [ -e "$f" ] ; then
|
|
cp --parents -rp -t / "$f"
|
|
fi
|
|
done ) < /etc/host-data-list
|
|
mkdir -p /etc/sssd/systemctl-lite-enabled
|
|
rm -rf /etc/systemctl-lite-enabled
|
|
ln -s /etc/sssd/systemctl-lite-enabled /etc/systemctl-lite-enabled
|
|
|
|
if [ -z "$COMMAND" ] ; then
|
|
if [ -f "$HOST/etc/$NAME/realm-join-options" ] ; then
|
|
COMMAND='realm join -v'
|
|
slurp_params "$HOST/etc/$NAME/realm-join-options"
|
|
REALM=true
|
|
else
|
|
COMMAND='ipa-client-install -U --no-ntp'
|
|
slurp_params "$HOST/etc/$NAME/ipa-client-install-options"
|
|
fi
|
|
fi
|
|
|
|
if $REALM ; then
|
|
for f in "$HOST/etc/$NAME/realm-join-password" ; do
|
|
if [ -f "$f" ] ; then
|
|
PASSWORD_FILE="$f"
|
|
break
|
|
fi
|
|
done
|
|
systemctl start dbus.service
|
|
fi
|
|
|
|
params+=("$@")
|
|
if [ -n "$PASSWORD_FILE" ] ; then
|
|
$COMMAND "${params[@]}" < "$PASSWORD_FILE"
|
|
else
|
|
$COMMAND "${params[@]}"
|
|
fi
|
|
|
|
if $REALM ; then
|
|
( echo ; echo includedir /var/lib/sss/pubconf/krb5.include.d/ ) >> /etc/krb5.conf
|
|
fi
|
|
|
|
echo "Copying new configuration to host ..."
|
|
while read f ; do
|
|
if [ -e "$f" ] ; then
|
|
cp --parents -rp -t "$HOST" "$f"
|
|
fi
|
|
done < /etc/host-data-list
|
|
chroot "$HOST" restorecon -ri -f - < /etc/host-data-list
|
|
|
|
setup_service
|