91 lines
3.2 KiB
Bash
Executable File

#!/bin/bash
if [ "${DIB_DEBUG_TRACE:-0}" -gt 0 ]; then
set -x
fi
set -eu
set -o pipefail
DIB_IPA_ENABLE_RESCUE=${DIB_IPA_ENABLE_RESCUE:-true}
DIB_IPA_ENABLE_SYSTEMD_NETWORKD=${DIB_IPA_ENABLE_SYSTEMD_NETWORKD:-true}
if $DIB_IPA_ENABLE_RESCUE; then
# Make sure rescue works
mkdir -p /etc/ipa-rescue-config
fi
case "$DIB_INIT_SYSTEM" in
upstart)
if [ -f /etc/init/ufw.conf ]; then
mv /etc/init/ufw.conf /etc/init/ufw.conf.disabled
fi
if [ -f /etc/init/tgt.conf ]; then
mv /etc/init/tgt.conf /etc/init/tgt.conf.disabled
fi
;;
systemd)
if [[ $(systemctl --no-pager list-unit-files iptables) =~ 'enabled' ]]; then
systemctl disable iptables.service
fi
systemctl enable $(svc-map ironic-python-agent).service
if $DIB_IPA_ENABLE_RESCUE; then
systemctl enable ironic-agent-create-rescue-user.path
fi
systemctl enable ironic-agent-resolve-config-drive.service
# NOTE(rpittau) disable caching remote package index to prevent
# delays due to failures.
# This is a new service for dnf-based systems (e.g. Centos8) to speed
# up subsequent dnf commands, for example automated updates, and
# it's not really needed in the ipa-ramdisk as we shouldn't install
# anything during runtime.
if [[ ${IPA_DISTRO_FAMILY} == 'rh' ]]; then
if [[ ${YUM} == 'dnf' ]]; then
systemctl disable dnf-makecache.service
systemctl disable dnf-makecache.timer
fi
fi
# NOTE(drannou) debian by default is using networking instead of
# systemd-networkd. In some usecase like rescue, we need IPA to
# re-launch dhclient when modifications are made on the interface.
# The easiest way to manage that is to activate systemd-networkd.
if $DIB_IPA_ENABLE_SYSTEMD_NETWORKD; then
if [[ $DISTRO_NAME =~ debian ]] ; then
rm /etc/network/interfaces
rm -rf /etc/network/interfaces.d
echo "[Match]
Name=en*
[Network]
DHCP=yes" > /etc/systemd/network/99-dhcp.network
systemctl enable systemd-networkd
fi
fi
if [ -e /usr/lib/systemd/system/glean-early.service ]; then
# Disable Glean-early start
# Under normal cirumstances, glean-early attempts to mount a config
# drive, configure ssh and a hostname. We only need the mount, and we
# trigger that in ironic-agent-resolve-config-drive.service.
# This is largely because glean uses /mnt/config by default,
# where as cloud-init uses a random folder name.
systemctl disable glean-early.service || true
rm /usr/lib/systemd/system/glean-early.service
fi
;;
sysv)
update-rc.d iptables disable
;;
*)
echo "Unsupported init system"
exit 1
;;
esac
# Blocks out userdata from being acted upon by cloud-init if present.
if [[ -x /etc/cloud/cloud.cfg.d ]]; then
cat > /etc/cloud/cloud.cfg.d/94-ironic-python-agent-disable-userdata.cfg <<EOF
allow_userdata: false
EOF
fi