Converting the supervised installer to a deb file (#154)
* laying the groundwork * moving more stuff * move files into place * add control * postinst script * preinst * added more to postinst and preinst * I think this works * fix gitignore and control * fixes * Delete homeassistant-supervised.deb * Check network connection * first test of build deb * test 2 * create changelog * switch to lowercase for github action * test without args * fix typo in example changelog * Resolve errors * Space out control * added files to gitignore * update gitignore * putting everything in place * revert actions changes * Test action * test workflow * new action * get rid of push * set version number to match os agent format * added machine type select * move bin * postrm undo dpkg-divert
This commit is contained in:
parent
3717667ff1
commit
6003c366f9
17 changed files with 224 additions and 0 deletions
21
.github/workflows/build-deb.yml
vendored
Normal file
21
.github/workflows/build-deb.yml
vendored
Normal file
|
@ -0,0 +1,21 @@
|
||||||
|
|
||||||
|
name: Build Deb Package
|
||||||
|
|
||||||
|
# yamllint disable-line rule:truthy
|
||||||
|
on:
|
||||||
|
workflow_dispatch:
|
||||||
|
release:
|
||||||
|
types: ["published"]
|
||||||
|
jobs:
|
||||||
|
build-deb-package:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- name: Checkout
|
||||||
|
uses: actions/checkout@v2
|
||||||
|
- run: chmod 755 homeassistant-supervised/DEBIAN/p*
|
||||||
|
- run: dpkg-deb --build --root-owner-group homeassistant-supervised
|
||||||
|
- name: Release
|
||||||
|
uses: softprops/action-gh-release@v1
|
||||||
|
if: startsWith(github.ref, 'refs/tags/')
|
||||||
|
with:
|
||||||
|
files: homeassistant-supervised.deb
|
2
.gitignore
vendored
Normal file
2
.gitignore
vendored
Normal file
|
@ -0,0 +1,2 @@
|
||||||
|
homeassistant-supervised.deb
|
||||||
|
|
14
homeassistant-supervised/DEBIAN/control
Executable file
14
homeassistant-supervised/DEBIAN/control
Executable file
|
@ -0,0 +1,14 @@
|
||||||
|
Package: homeassistant-supervised
|
||||||
|
Section: base
|
||||||
|
Version: 1.0.0
|
||||||
|
Priority: optional
|
||||||
|
Architecture: all
|
||||||
|
Depends: curl, bash, docker-ce, dbus, network-manager, apparmor, jq, systemd, os-agent
|
||||||
|
Maintainer: Matheson Steplock <https://mathesonsteplock.ca/>
|
||||||
|
Homepage: https://www.home-assistant.io/
|
||||||
|
Description: Home Assistant Supervised
|
||||||
|
This installation method provides the full Home Assistant experience on a regular operating system.
|
||||||
|
This means, all components from the Home Assistant method are used, except for the Home Assistant Operating System.
|
||||||
|
This system will run the Home Assistant Supervisor. The Supervisor is not just an application, it is a full appliance that manages the whole system.
|
||||||
|
It will clean up, repair or reset settings to default if they no longer match expected values.
|
||||||
|
|
129
homeassistant-supervised/DEBIAN/postinst
Executable file
129
homeassistant-supervised/DEBIAN/postinst
Executable file
|
@ -0,0 +1,129 @@
|
||||||
|
#!/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=homeassistant
|
||||||
|
|
||||||
|
SERVICE_DOCKER="docker.service"
|
||||||
|
SERVICE_NM="NetworkManager.service"
|
||||||
|
|
||||||
|
# Read infos from web
|
||||||
|
URL_VERSION_HOST="version.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}"
|
||||||
|
|
||||||
|
# Restart Docker service
|
||||||
|
info "Restarting docker service"
|
||||||
|
systemctl restart "$SERVICE_DOCKER"
|
||||||
|
|
||||||
|
# Check network connection
|
||||||
|
while ! ping -c 1 -W 1 ${URL_VERSION_HOST}; do
|
||||||
|
info "Waiting for ${URL_VERSION_HOST} - network interface might be down..."
|
||||||
|
sleep 2
|
||||||
|
done
|
||||||
|
|
||||||
|
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}
|
||||||
|
DATA_SHARE=${DATA_SHARE:-$PREFIX/share/hassio}
|
||||||
|
CONFIG=$SYSCONFDIR/hassio.json
|
||||||
|
cat > "$CONFIG" <<- EOF
|
||||||
|
{
|
||||||
|
"supervisor": "${HASSIO_DOCKER}",
|
||||||
|
"machine": "${MACHINE}",
|
||||||
|
"data": "${DATA_SHARE}"
|
||||||
|
}
|
||||||
|
EOF
|
||||||
|
|
||||||
|
# Pull Supervisor image
|
||||||
|
info "Install supervisor Docker container"
|
||||||
|
docker pull "$HASSIO_DOCKER:$HASSIO_VERSION" > /dev/null
|
||||||
|
docker tag "$HASSIO_DOCKER:$HASSIO_VERSION" "$HASSIO_DOCKER:latest" > /dev/null
|
||||||
|
|
||||||
|
# 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"
|
||||||
|
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"
|
||||||
|
|
18
homeassistant-supervised/DEBIAN/postrm
Normal file
18
homeassistant-supervised/DEBIAN/postrm
Normal file
|
@ -0,0 +1,18 @@
|
||||||
|
#!/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; }
|
||||||
|
|
||||||
|
# Undo diversions
|
||||||
|
dpkg-divert --package homeassistant-supervised --remove --rename \
|
||||||
|
--divert /etc/NetworkManager/NetworkManager.conf.real /etc/NetworkManager/NetworkManager.conf
|
||||||
|
|
||||||
|
dpkg-divert --package homeassistant-supervised --remove --rename \
|
||||||
|
--divert /etc/NetworkManager/system-connections/default.real /etc/NetworkManager/system-connections/default
|
||||||
|
|
||||||
|
dpkg-divert --package homeassistant-supervised --remove --rename \
|
||||||
|
--divert /etc/docker/daemon.json.real /etc/docker/daemon.json
|
||||||
|
|
||||||
|
dpkg-divert --package homeassistant-supervised --remove --rename \
|
||||||
|
--divert /etc/network/interfaces.real /etc/network/interfaces
|
36
homeassistant-supervised/DEBIAN/preinst
Executable file
36
homeassistant-supervised/DEBIAN/preinst
Executable file
|
@ -0,0 +1,36 @@
|
||||||
|
#!/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; }
|
||||||
|
|
||||||
|
warn ""
|
||||||
|
warn "If you want more control over your own system, run"
|
||||||
|
warn "Home Assistant as a VM or run Home Assistant Core"
|
||||||
|
warn "via a Docker container."
|
||||||
|
warn ""
|
||||||
|
|
||||||
|
# Check if Modem Manager is enabled
|
||||||
|
if systemctl is-enabled ModemManager.service &> /dev/null; then
|
||||||
|
warn "ModemManager service is enabled. This might cause issue when using serial devices."
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Check dmesg access
|
||||||
|
if [[ "$(sysctl --values kernel.dmesg_restrict)" != "0" ]]; then
|
||||||
|
info "Fix kernel dmesg restriction"
|
||||||
|
echo 0 > /proc/sys/kernel/dmesg_restrict
|
||||||
|
echo "kernel.dmesg_restrict=0" >> /etc/sysctl.conf
|
||||||
|
fi
|
||||||
|
|
||||||
|
|
||||||
|
dpkg-divert --package homeassistant-supervised --add --rename \
|
||||||
|
--divert /etc/NetworkManager/NetworkManager.conf.real /etc/NetworkManager/NetworkManager.conf
|
||||||
|
|
||||||
|
dpkg-divert --package homeassistant-supervised --add --rename \
|
||||||
|
--divert /etc/NetworkManager/system-connections/default.real /etc/NetworkManager/system-connections/default
|
||||||
|
|
||||||
|
dpkg-divert --package homeassistant-supervised --add --rename \
|
||||||
|
--divert /etc/docker/daemon.json.real /etc/docker/daemon.json
|
||||||
|
|
||||||
|
dpkg-divert --package homeassistant-supervised --add --rename \
|
||||||
|
--divert /etc/network/interfaces.real /etc/network/interfaces
|
4
homeassistant-supervised/DEBIAN/templates
Executable file
4
homeassistant-supervised/DEBIAN/templates
Executable file
|
@ -0,0 +1,4 @@
|
||||||
|
Template: ha/machine-type
|
||||||
|
Type: Select
|
||||||
|
Choices: generic-x86-64, odroid-c2, odroid-n2, odroid-xu, qemuarm, qemuarm-64, qemux86, qemux86-64, raspberrypi, raspberrypi2, raspberrypi3, raspberrypi4, raspberrypi3-64, raspberrypi4-64, tinker, khadas-vim3
|
||||||
|
Description: Select machine type
|
Loading…
Reference in a new issue