hassio-supervised-installer/homeassistant-supervised/DEBIAN/postinst
Marco Trevisan fe8cb1896a
postinst: Do not override hassio.json data if already set
On upgrades, if $DATA_SHARE Is not provided we may end up overwriting
the user configuration, especially in case the postinst script is triggered as
part of dpkg configure because of previous failures (as it may happen in 
recent systemd-journal-remote failures).

To prevent this, read the user value if set and re-use it unless a new one is
provided.
2023-06-11 21:34:55 +02:00

183 lines
6 KiB
Bash
Executable file

#!/usr/bin/env bash
set -e
function info { echo -e "\e[32m[info] $*\e[39m"; }
function warn { echo -e "\e[33m[warn] $*\e[39m"; }
function error { echo -e "\e[31m[error] $*\e[39m"; exit 1; }
. /usr/share/debconf/confmodule
ARCH=$(uname -m)
BINARY_DOCKER=/usr/bin/docker
DOCKER_REPO="ghcr.io/home-assistant"
SERVICE_DOCKER="docker.service"
SERVICE_NM="NetworkManager.service"
# Read infos from web
URL_CHECK_ONLINE="checkonline.home-assistant.io"
URL_VERSION="https://version.home-assistant.io/stable.json"
HASSIO_VERSION=$(curl -s ${URL_VERSION} | jq -e -r '.supervisor')
URL_APPARMOR_PROFILE="https://version.home-assistant.io/apparmor.txt"
# Restart NetworkManager
info "Restarting NetworkManager"
systemctl restart "${SERVICE_NM}"
# Enable and start systemd-resolved
if [ "$(systemctl is-active systemd-resolved)" = 'inactive' ]; then
info "Enable systemd-resolved"
systemctl enable systemd-resolved.service> /dev/null 2>&1;
systemctl start systemd-resolved.service> /dev/null 2>&1;
fi
# Check and fix systemd-journal-gatewayd socket location
if [ ! -S "/run/systemd-journal-gatewayd.sock" ]; then
info "Set up systemd-journal-gatewayd socket file"
if [ "$(systemctl is-active systemd-journal-gatewayd.socket)" = 'active' ]; then
systemctl stop systemd-journal-gatewayd.socket> /dev/null 2>&1;
fi
rm -rf "/run/systemd-journal-gatewayd.sock";
fi
# Enable and start systemd-journal-gatewayd
if [ "$(systemctl is-active systemd-journal-gatewayd.socket)" = 'inactive' ]; then
info "Enable systemd-journal-gatewayd"
systemctl enable systemd-journal-gatewayd.socket> /dev/null 2>&1;
systemctl start systemd-journal-gatewayd.socket> /dev/null 2>&1;
fi
# Restart Docker service
info "Restarting docker service"
systemctl restart "${SERVICE_DOCKER}"
# Check network connection
while ! ping -c 1 -W 1 ${URL_CHECK_ONLINE}; do
info "Waiting for ${URL_CHECK_ONLINE} - network interface might be down..."
sleep 2
done
# Get primary network interface
PRIMARY_INTERFACE=$(ip route | awk '/^default/ { print $5; exit }')
IP_ADDRESS=$(ip -4 addr show dev "${PRIMARY_INTERFACE}" | awk '/inet / { sub("/.*", "", $2); print $2 }')
case ${ARCH} in
"i386" | "i686")
MACHINE=${MACHINE:=qemux86}
HASSIO_DOCKER="${DOCKER_REPO}/i386-hassio-supervisor"
;;
"x86_64")
MACHINE=${MACHINE:=qemux86-64}
HASSIO_DOCKER="${DOCKER_REPO}/amd64-hassio-supervisor"
;;
"arm" |"armv6l")
if [ -z "${MACHINE}" ]; then
db_input critical ha/machine-type || true
db_go || true
db_get ha/machine-type || true
MACHINE="${RET}"
db_stop
fi
HASSIO_DOCKER="${DOCKER_REPO}/armhf-hassio-supervisor"
;;
"armv7l")
if [ -z "${MACHINE}" ]; then
db_input critical ha/machine-type || true
db_go || true
db_get ha/machine-type || true
MACHINE="${RET}"
db_stop
fi
HASSIO_DOCKER="${DOCKER_REPO}/armv7-hassio-supervisor"
;;
"aarch64")
if [ -z "${MACHINE}" ]; then
db_input critical ha/machine-type || true
db_go || true
db_get ha/machine-type || true
MACHINE="${RET}"
db_stop
fi
HASSIO_DOCKER="${DOCKER_REPO}/aarch64-hassio-supervisor"
;;
*)
error "${ARCH} unknown!"
;;
esac
PREFIX=${PREFIX:-/usr}
SYSCONFDIR=${SYSCONFDIR:-/etc}
CONFIG="${SYSCONFDIR}/hassio.json"
if [ -z "$DATA_SHARE" ] && [ -e "$CONFIG" ]; then
DATA_SHARE=$(jq -e -r '.data' "${CONFIG}" || true)
fi
DATA_SHARE=${DATA_SHARE:-$PREFIX/share/hassio}
cat > "${CONFIG}" <<- EOF
{
"supervisor": "${HASSIO_DOCKER}",
"machine": "${MACHINE}",
"data": "${DATA_SHARE}"
}
EOF
# Install Supervisor
info "Install supervisor startup scripts"
sed -i "s,%%HASSIO_CONFIG%%,${CONFIG},g" "${PREFIX}"/sbin/hassio-supervisor
sed -i -e "s,%%BINARY_DOCKER%%,${BINARY_DOCKER},g" \
-e "s,%%SERVICE_DOCKER%%,${SERVICE_DOCKER},g" \
-e "s,%%BINARY_HASSIO%%,${PREFIX}/sbin/hassio-supervisor,g" \
"${SYSCONFDIR}/systemd/system/hassio-supervisor.service"
chmod a+x "${PREFIX}/sbin/hassio-supervisor"
systemctl enable hassio-supervisor.service > /dev/null 2>&1;
# Install AppArmor
info "Install AppArmor scripts"
mkdir -p "${DATA_SHARE}/apparmor"
curl -sL ${URL_APPARMOR_PROFILE} > "${DATA_SHARE}/apparmor/hassio-supervisor"
sed -i "s,%%HASSIO_CONFIG%%,${CONFIG},g" "${PREFIX}/sbin/hassio-apparmor"
sed -i -e "s,%%SERVICE_DOCKER%%,${SERVICE_DOCKER},g" \
-e "s,%%HASSIO_APPARMOR_BINARY%%,${PREFIX}/sbin/hassio-apparmor,g" \
"${SYSCONFDIR}/systemd/system/hassio-apparmor.service"
chmod a+x "${PREFIX}/sbin/hassio-apparmor"
systemctl enable hassio-apparmor.service > /dev/null 2>&1;
systemctl start hassio-apparmor.service
# Start Supervisor
info "Start Home Assistant Supervised"
systemctl start hassio-supervisor.service
# Install HA CLI
info "Installing the 'ha' cli"
chmod a+x "${PREFIX}/bin/ha"
# Switch to cgroup v1
if [ -f /etc/default/grub ]
then
if ! grep -q "systemd.unified_cgroup_hierarchy=false" /etc/default/grub; then
info "Switching to cgroup v1"
cp /etc/default/grub /etc/default/grub.bak
sed -i 's/^GRUB_CMDLINE_LINUX_DEFAULT="/&systemd.unified_cgroup_hierarchy=false /' /etc/default/grub
update-grub
touch /var/run/reboot-required
fi
elif [ -f /boot/firmware/cmdline.txt ]
then
if ! grep -q "systemd.unified_cgroup_hierarchy=false" /boot/firmware/cmdline.txt; then
info "Switching to cgroup v1"
sed -i.bak 's/$/ systemd.unified_cgroup_hierarchy=false/' /boot/firmware/cmdline.txt
touch /var/run/reboot-required
fi
else
warn "Could not find /etc/default/grub or /boot/firmware/cmdline.txt failed to switch to cgroup v1"
fi
info "Within a few minutes you will be able to reach Home Assistant at:"
info "http://homeassistant.local:8123 or using the IP address of your"
info "machine: http://${IP_ADDRESS}:8123"
if [ -f /var/run/reboot-required ]
then
warn "A reboot is required to apply changes to grub."
fi