diff --git a/.github/release-drafter.yml b/.github/release-drafter.yml new file mode 100644 index 000000000..beaa89a7a --- /dev/null +++ b/.github/release-drafter.yml @@ -0,0 +1,15 @@ +categories: + - title: 'HassOS Core' + label: 'os' + - title: 'Build' + label: 'build' + - title: 'Raspberry Pi' + label: 'board/raspberry' + - title: 'Open Virtual Appliance' + label: 'board/ova' + - title: 'Intel-Nuc' + label: 'board/intel-nuc' +template: | + ## Changes + + $CHANGES diff --git a/.github/stale.yml b/.github/stale.yml new file mode 100644 index 000000000..dc90e5a1c --- /dev/null +++ b/.github/stale.yml @@ -0,0 +1,17 @@ +# Number of days of inactivity before an issue becomes stale +daysUntilStale: 60 +# Number of days of inactivity before a stale issue is closed +daysUntilClose: 7 +# Issues with these labels will never be considered stale +exemptLabels: + - pinned + - security +# Label to use when marking an issue as stale +staleLabel: wontfix +# Comment to post when marking an issue as stale. Set to `false` to disable +markComment: > + This issue has been automatically marked as stale because it has not had + recent activity. It will be closed if no further activity occurs. Thank you + for your contributions. +# Comment to post when closing a stale issue. Set to `false` to disable +closeComment: false diff --git a/.hadolint.yaml b/.hadolint.yaml new file mode 100644 index 000000000..8f7e23e45 --- /dev/null +++ b/.hadolint.yaml @@ -0,0 +1,2 @@ +ignored: + - DL3008 diff --git a/.travis.yml b/.travis.yml deleted file mode 100644 index 920bf0e97..000000000 --- a/.travis.yml +++ /dev/null @@ -1,25 +0,0 @@ -language: bash - -sudo: required -service: docker - -addons: - apt: - packages: - - docker-ce - -before_install: - - shopt -s globstar - - docker pull koalaman/shellcheck - -script: - - docker run -v $(pwd):/mnt koalaman/shellcheck scripts/*.sh - - docker run -v $(pwd):/mnt koalaman/shellcheck buildroot-external/scripts/*.sh - - docker run -v $(pwd):/mnt koalaman/shellcheck buildroot-external/scripts/*.sh - - docker run -v $(pwd):/mnt koalaman/shellcheck buildroot-external/board/**/*.sh - - docker run -v $(pwd):/mnt koalaman/shellcheck buildroot-external/rootfs-overlay/usr/sbin/* - - docker run -v $(pwd):/mnt koalaman/shellcheck buildroot-external/rootfs-overlay/usr/libexec/* - - docker run -v $(pwd):/mnt koalaman/shellcheck buildroot-external/rootfs-overlay/usr/lib/rauc/* - -matrix: - fast_finish: true diff --git a/Dockerfile b/Dockerfile index 83c7db240..f4639cfec 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,19 +1,24 @@ FROM ubuntu:18.04 +# Set shell +SHELL ["/bin/bash", "-o", "pipefail", "-c"] + # Docker -RUN apt-get update && apt-get install -y \ +RUN apt-get update && apt-get install -y --no-install-recommends \ apt-transport-https \ ca-certificates \ curl \ + gpg-agent \ software-properties-common \ && rm -rf /var/lib/apt/lists/* \ && curl -fsSL https://download.docker.com/linux/ubuntu/gpg | apt-key add - \ && add-apt-repository "deb https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" \ - && apt-get update && apt-get install -y docker-ce \ + && apt-get update && apt-get install -y --no-install-recommends \ + docker-ce \ && rm -rf /var/lib/apt/lists/* # Build Tools -RUN apt-get update && apt-get install -y \ +RUN apt-get update && apt-get install -y --no-install-recommends \ wget patch vim cpio python unzip rsync bc bzip2 ncurses-dev \ git make g++ file perl bash binutils locales qemu-utils bison flex \ && rm -rf /var/lib/apt/lists/* diff --git a/Documentation/boards/odroid-xu4.md b/Documentation/boards/odroid-xu4.md index c7c9d9914..d590d0cf6 100644 --- a/Documentation/boards/odroid-xu4.md +++ b/Documentation/boards/odroid-xu4.md @@ -13,6 +13,10 @@ The Odroid XU4 has a hidden boot sector that is only visible on the Odroid itsel * You'll need to follow [Hardkernel's instructions](https://forum.odroid.com/viewtopic.php?f=53&t=6173) to get a working boot sector. Then flash HassOS and follow instructions above. * Alternatively, you can try flash HassOS to both an SD and eMMC, then boot off the SD with the eMMC also plugged in, then run `dd if=/dev/mmcblk1 of=/dev/mmcblk0boot0 bs=512 skip=1 seek=0 count=16381` at the Linux prompt. Note that this is untested, but in theory should work.. +If you are getting permissions issues when using the dd command, try disabling RO: +`echo 0 > /sys/block/mmcblk0boot0/force_ro` +to re-enable after running dd: +`echo 1 > /sys/block/mmcblk0boot0/force_ro` ## Console By default, console access is granted over the serial header and over HDMI. Certain startup messages will only appear on the serial console by default. To show the messages on the HDMI console instead, swap the order of the two consoles in the `cmdline.txt` file on the boot partition. You can also delete the SAC2 console if you don't plan on using the serial adapter. diff --git a/Documentation/configuration.md b/Documentation/configuration.md index bf20966c7..84880db69 100644 --- a/Documentation/configuration.md +++ b/Documentation/configuration.md @@ -8,18 +8,20 @@ Format a USB stick with FAT32/EXT4/NTFS and name it `CONFIG`. Alternative you ca ```text network/ modules/ +modprobe/ udev/ authorized_keys timesyncd.conf hassos-xy.raucb ``` -- The `network` folder can contain any kind of NetworkManager connection files. For more information see [Network][network.md]. +- The `network` folder can contain any kind of NetworkManager connection files. For more information see [Network][network.md]. - The `modules` folder is for modules-load configuration files. +- The `modprobe` folder is for modules configuration files (/etc/modprobe.d) - The `udev` folder is for udev rules files. - The `authorized_keys` file activates debug SSH access on port `22222`. See [Debugging Hassio][debug-hassio]. - The `timesyncd.conf` file allow you to set different NTP servers. HassOS won't boot without correct working time servers! -- The `hassos-*.raucb` file is a firmware OTA update which will be installed. These can be found on on the [release][hassos-release] page. +- The `hassos-*.raucb` file is a firmware OTA update which will be installed. These can be found on on the [release][hassos-release] page. You can put this USB stick into the device and it will be read on startup. You can also trigger this process later over the API/UI or by calling `systemctl restart hassos-config` on the host. @@ -32,7 +34,7 @@ You can edit or create a `cmdline.txt` in your boot partition. That will be read ### Kernel-Module -The kernel module folder `/etc/modules-load.d` is persistent and you can add your configuration files there. See [Systemd modules load][systemd-modules]. +The kernel module folder `/etc/modules-load.d` is persistent and you can add your configuration files there. See [Systemd modules load][systemd-modules]. You can add the modules configuration files in `/etc/modprobe.d` that is also persistent. ### Udev rules diff --git a/azure-pipelines.yml b/azure-pipelines.yml new file mode 100644 index 000000000..073cb008f --- /dev/null +++ b/azure-pipelines.yml @@ -0,0 +1,52 @@ +# https://dev.azure.com/home-assistant + +trigger: + batch: true + branches: + include: + - dev + tags: + include: + - '*' + exclude: + - untagged* +pr: +- dev + +variables: + - name: versionHadolint + value: 'v1.16.3' + - name: versionShellCheck + value: 'v0.6.0' + +jobs: + +- job: 'Hadolint' + pool: + vmImage: 'ubuntu-16.04' + steps: + - script: sudo docker pull hadolint/hadolint:$(versionHadolint) + displayName: 'Install Hadolint' + - script: | + sudo docker run --rm -i \ + -v $(pwd)/.hadolint.yaml:/.hadolint.yaml:ro \ + hadolint/hadolint:$(versionHadolint) < Dockerfile + displayName: 'Run Hadolint' + + +- job: 'ShellCheck' + pool: + vmImage: 'ubuntu-16.04' + steps: + - script: sudo docker pull koalaman/shellcheck:$(versionShellCheck) + displayName: 'Install ShellCheck' + - script: | + sudo docker run --rm -i \ + -v $(pwd):/mnt:ro koalaman/shellcheck:$(versionShellCheck) \ + scripts/*.sh \ + buildroot-external/scripts/*.sh \ + buildroot-external/board/**/*.sh \ + buildroot-external/rootfs-overlay/usr/sbin/* \ + buildroot-external/rootfs-overlay/usr/libexec/* \ + buildroot-external/rootfs-overlay/usr/lib/rauc/* + displayName: 'Run ShellCheck' diff --git a/buildroot-external/board/intel/ova/kernel.config b/buildroot-external/board/intel/ova/kernel.config index c8e118917..72e2e1300 100644 --- a/buildroot-external/board/intel/ova/kernel.config +++ b/buildroot-external/board/intel/ova/kernel.config @@ -1,5 +1,11 @@ CONFIG_EFI_STUB=y +CONFIG_VMXNET3=y +CONFIG_VMWARE_PVSCSI=y +CONFIG_VMWARE_VMCI_VSOCKETS=y +CONFIG_VMWARE_VMCI=y +CONFIG_VMWARE_BALLOON=y + CONFIG_VIRTIO=y CONFIG_VIRTIO_PCI=y CONFIG_VIRTIO_NET=y diff --git a/buildroot-external/configs/intel_nuc_defconfig b/buildroot-external/configs/intel_nuc_defconfig index b117a8826..cc9b0fb64 100644 --- a/buildroot-external/configs/intel_nuc_defconfig +++ b/buildroot-external/configs/intel_nuc_defconfig @@ -28,6 +28,7 @@ BR2_LINUX_KERNEL_NEEDS_HOST_OPENSSL=y BR2_LINUX_KERNEL_NEEDS_HOST_LIBELF=y BR2_PACKAGE_BUSYBOX_CONFIG="$(BR2_EXTERNAL_HASSOS_PATH)/busybox.config" BR2_PACKAGE_BUSYBOX_INDIVIDUAL_BINARIES=y +BR2_PACKAGE_PROCPS_NG=y BR2_PACKAGE_JQ=y BR2_PACKAGE_E2FSPROGS=y BR2_PACKAGE_E2FSPROGS_RESIZE2FS=y @@ -74,6 +75,7 @@ BR2_PACKAGE_RNG_TOOLS=y # BR2_PACKAGE_SYSTEMD_NETWORKD is not set BR2_PACKAGE_SYSTEMD_RANDOMSEED=y # BR2_PACKAGE_SYSTEMD_RESOLVED is not set +BR2_PACKAGE_SYSTEMD_COREDUMP=y BR2_PACKAGE_UTIL_LINUX_PARTX=y BR2_PACKAGE_UTIL_LINUX_ZRAMCTL=y BR2_TARGET_ROOTFS_SQUASHFS=y @@ -93,12 +95,12 @@ BR2_PACKAGE_HOST_MTOOLS=y BR2_PACKAGE_HOST_RAUC=y BR2_PACKAGE_HASSOS=y BR2_PACKAGE_HASSOS_SUPERVISOR="homeassistant/amd64-hassio-supervisor" -BR2_PACKAGE_HASSOS_SUPERVISOR_VERSION="144" +BR2_PACKAGE_HASSOS_SUPERVISOR_VERSION="163" BR2_PACKAGE_HASSOS_SUPERVISOR_ARGS="-e HOMEASSISTANT_REPOSITORY=homeassistant/intel-nuc-homeassistant" BR2_PACKAGE_HASSOS_SUPERVISOR_PROFILE="hassio-supervisor" BR2_PACKAGE_HASSOS_SUPERVISOR_PROFILE_URL="http://s3.amazonaws.com/hassio-version/apparmor.txt" BR2_PACKAGE_HASSOS_CLI="homeassistant/amd64-hassio-cli" -BR2_PACKAGE_HASSOS_CLI_VERSION="8" +BR2_PACKAGE_HASSOS_CLI_VERSION="11" BR2_PACKAGE_HASSOS_CLI_ARGS="--network=hassio --add-host hassio:172.30.32.2" BR2_PACKAGE_HASSOS_CLI_PROFILE="docker-default" BR2_PACKAGE_HASSOS_APPARMOR_DIR="supervisor/apparmor" diff --git a/buildroot-external/configs/odroid_c2_defconfig b/buildroot-external/configs/odroid_c2_defconfig index 3205f6c8f..9696335be 100644 --- a/buildroot-external/configs/odroid_c2_defconfig +++ b/buildroot-external/configs/odroid_c2_defconfig @@ -30,6 +30,7 @@ BR2_LINUX_KERNEL_NEEDS_HOST_OPENSSL=y BR2_LINUX_KERNEL_NEEDS_HOST_LIBELF=y BR2_PACKAGE_BUSYBOX_CONFIG="$(BR2_EXTERNAL_HASSOS_PATH)/busybox.config" BR2_PACKAGE_BUSYBOX_INDIVIDUAL_BINARIES=y +BR2_PACKAGE_PROCPS_NG=y BR2_PACKAGE_JQ=y BR2_PACKAGE_E2FSPROGS=y BR2_PACKAGE_E2FSPROGS_RESIZE2FS=y @@ -66,6 +67,7 @@ BR2_PACKAGE_RNG_TOOLS=y # BR2_PACKAGE_SYSTEMD_NETWORKD is not set BR2_PACKAGE_SYSTEMD_RANDOMSEED=y # BR2_PACKAGE_SYSTEMD_RESOLVED is not set +BR2_PACKAGE_SYSTEMD_COREDUMP=y BR2_PACKAGE_UTIL_LINUX_PARTX=y BR2_PACKAGE_UTIL_LINUX_ZRAMCTL=y BR2_TARGET_ROOTFS_SQUASHFS=y @@ -86,12 +88,12 @@ BR2_PACKAGE_HOST_MTOOLS=y BR2_PACKAGE_HOST_RAUC=y BR2_PACKAGE_HASSOS=y BR2_PACKAGE_HASSOS_SUPERVISOR="homeassistant/aarch64-hassio-supervisor" -BR2_PACKAGE_HASSOS_SUPERVISOR_VERSION="144" +BR2_PACKAGE_HASSOS_SUPERVISOR_VERSION="163" BR2_PACKAGE_HASSOS_SUPERVISOR_ARGS="-e HOMEASSISTANT_REPOSITORY=homeassistant/odroid-c2-homeassistant" BR2_PACKAGE_HASSOS_SUPERVISOR_PROFILE="hassio-supervisor" BR2_PACKAGE_HASSOS_SUPERVISOR_PROFILE_URL="http://s3.amazonaws.com/hassio-version/apparmor.txt" BR2_PACKAGE_HASSOS_CLI="homeassistant/aarch64-hassio-cli" -BR2_PACKAGE_HASSOS_CLI_VERSION="8" +BR2_PACKAGE_HASSOS_CLI_VERSION="11" BR2_PACKAGE_HASSOS_CLI_ARGS="--network=hassio --add-host hassio:172.30.32.2" BR2_PACKAGE_HASSOS_CLI_PROFILE="docker-default" BR2_PACKAGE_HASSOS_APPARMOR_DIR="supervisor/apparmor" diff --git a/buildroot-external/configs/odroid_xu4_defconfig b/buildroot-external/configs/odroid_xu4_defconfig index 8789cf682..19a10cd15 100644 --- a/buildroot-external/configs/odroid_xu4_defconfig +++ b/buildroot-external/configs/odroid_xu4_defconfig @@ -36,6 +36,7 @@ BR2_LINUX_KERNEL_NEEDS_HOST_OPENSSL=y BR2_LINUX_KERNEL_NEEDS_HOST_LIBELF=y BR2_PACKAGE_BUSYBOX_CONFIG="$(BR2_EXTERNAL_HASSOS_PATH)/busybox.config" BR2_PACKAGE_BUSYBOX_INDIVIDUAL_BINARIES=y +BR2_PACKAGE_PROCPS_NG=y BR2_PACKAGE_JQ=y BR2_PACKAGE_E2FSPROGS=y BR2_PACKAGE_E2FSPROGS_RESIZE2FS=y @@ -72,6 +73,7 @@ BR2_PACKAGE_RNG_TOOLS=y # BR2_PACKAGE_SYSTEMD_NETWORKD is not set BR2_PACKAGE_SYSTEMD_RANDOMSEED=y # BR2_PACKAGE_SYSTEMD_RESOLVED is not set +BR2_PACKAGE_SYSTEMD_COREDUMP=y BR2_PACKAGE_UTIL_LINUX_PARTX=y BR2_PACKAGE_UTIL_LINUX_ZRAMCTL=y BR2_TARGET_ROOTFS_SQUASHFS=y @@ -93,13 +95,13 @@ BR2_PACKAGE_HOST_GPTFDISK=y BR2_PACKAGE_HOST_MTOOLS=y BR2_PACKAGE_HOST_RAUC=y BR2_PACKAGE_HASSOS=y -BR2_PACKAGE_HASSOS_SUPERVISOR="homeassistant/armhf-hassio-supervisor" -BR2_PACKAGE_HASSOS_SUPERVISOR_VERSION="144" +BR2_PACKAGE_HASSOS_SUPERVISOR="homeassistant/armv7-hassio-supervisor" +BR2_PACKAGE_HASSOS_SUPERVISOR_VERSION="163" BR2_PACKAGE_HASSOS_SUPERVISOR_ARGS="-e HOMEASSISTANT_REPOSITORY=homeassistant/odroid-xu-homeassistant" BR2_PACKAGE_HASSOS_SUPERVISOR_PROFILE="hassio-supervisor" BR2_PACKAGE_HASSOS_SUPERVISOR_PROFILE_URL="http://s3.amazonaws.com/hassio-version/apparmor.txt" -BR2_PACKAGE_HASSOS_CLI="homeassistant/armhf-hassio-cli" -BR2_PACKAGE_HASSOS_CLI_VERSION="8" +BR2_PACKAGE_HASSOS_CLI="homeassistant/armv7-hassio-cli" +BR2_PACKAGE_HASSOS_CLI_VERSION="11" BR2_PACKAGE_HASSOS_CLI_ARGS="--network=hassio --add-host hassio:172.30.32.2" BR2_PACKAGE_HASSOS_CLI_PROFILE="docker-default" BR2_PACKAGE_HASSOS_APPARMOR_DIR="supervisor/apparmor" diff --git a/buildroot-external/configs/opi_prime_defconfig b/buildroot-external/configs/opi_prime_defconfig index d4aee6f49..163d5f240 100644 --- a/buildroot-external/configs/opi_prime_defconfig +++ b/buildroot-external/configs/opi_prime_defconfig @@ -52,6 +52,7 @@ BR2_ROOTFS_POST_IMAGE_SCRIPT="$(BR2_EXTERNAL_HASSOS_PATH)/scripts/post-image.sh" BR2_ROOTFS_POST_SCRIPT_ARGS="$(BR2_EXTERNAL_HASSOS_PATH)/board/orangepi/prime $(BR2_EXTERNAL_HASSOS_PATH)/board/orangepi/hassos-hook.sh" BR2_PACKAGE_BUSYBOX_CONFIG="$(BR2_EXTERNAL_HASSOS_PATH)/busybox.config" BR2_PACKAGE_BUSYBOX_INDIVIDUAL_BINARIES=y +BR2_PACKAGE_PROCPS_NG=y BR2_PACKAGE_JQ=y BR2_PACKAGE_E2FSPROGS=y BR2_PACKAGE_E2FSPROGS_RESIZE2FS=y @@ -88,6 +89,7 @@ BR2_PACKAGE_RAUC_NETWORK=y # BR2_PACKAGE_SYSTEMD_NETWORKD is not set BR2_PACKAGE_SYSTEMD_RANDOMSEED=y # BR2_PACKAGE_SYSTEMD_RESOLVED is not set +BR2_PACKAGE_SYSTEMD_COREDUMP=y BR2_PACKAGE_UTIL_LINUX_PARTX=y BR2_PACKAGE_UTIL_LINUX_ZRAMCTL=y BR2_TARGET_ROOTFS_SQUASHFS=y @@ -101,12 +103,12 @@ BR2_PACKAGE_HOST_RAUC=y BR2_PACKAGE_HOST_SWIG=y BR2_PACKAGE_HASSOS=y BR2_PACKAGE_HASSOS_SUPERVISOR="homeassistant/aarch64-hassio-supervisor" -BR2_PACKAGE_HASSOS_SUPERVISOR_VERSION="144" +BR2_PACKAGE_HASSOS_SUPERVISOR_VERSION="163" BR2_PACKAGE_HASSOS_SUPERVISOR_ARGS="-e HOMEASSISTANT_REPOSITORY=homeassistant/orangepi-prime-homeassistant" BR2_PACKAGE_HASSOS_SUPERVISOR_PROFILE="hassio-supervisor" BR2_PACKAGE_HASSOS_SUPERVISOR_PROFILE_URL="http://s3.amazonaws.com/hassio-version/apparmor.txt" BR2_PACKAGE_HASSOS_CLI="homeassistant/aarch64-hassio-cli" -BR2_PACKAGE_HASSOS_CLI_VERSION="8" +BR2_PACKAGE_HASSOS_CLI_VERSION="11" BR2_PACKAGE_HASSOS_CLI_ARGS="--network=hassio --add-host hassio:172.30.32.2" BR2_PACKAGE_HASSOS_CLI_PROFILE="docker-default" BR2_PACKAGE_HASSOS_APPARMOR_DIR="supervisor/apparmor" diff --git a/buildroot-external/configs/ova_defconfig b/buildroot-external/configs/ova_defconfig index cf2356f78..8a4f133b0 100644 --- a/buildroot-external/configs/ova_defconfig +++ b/buildroot-external/configs/ova_defconfig @@ -27,6 +27,7 @@ BR2_LINUX_KERNEL_NEEDS_HOST_OPENSSL=y BR2_LINUX_KERNEL_NEEDS_HOST_LIBELF=y BR2_PACKAGE_BUSYBOX_CONFIG="$(BR2_EXTERNAL_HASSOS_PATH)/busybox.config" BR2_PACKAGE_BUSYBOX_INDIVIDUAL_BINARIES=y +BR2_PACKAGE_PROCPS_NG=y BR2_PACKAGE_JQ=y BR2_PACKAGE_E2FSPROGS=y BR2_PACKAGE_E2FSPROGS_RESIZE2FS=y @@ -62,6 +63,7 @@ BR2_PACKAGE_RNG_TOOLS=y # BR2_PACKAGE_SYSTEMD_NETWORKD is not set BR2_PACKAGE_SYSTEMD_RANDOMSEED=y # BR2_PACKAGE_SYSTEMD_RESOLVED is not set +BR2_PACKAGE_SYSTEMD_COREDUMP=y BR2_PACKAGE_UTIL_LINUX_PARTX=y BR2_PACKAGE_UTIL_LINUX_ZRAMCTL=y BR2_TARGET_ROOTFS_SQUASHFS=y @@ -81,12 +83,12 @@ BR2_PACKAGE_HOST_MTOOLS=y BR2_PACKAGE_HOST_RAUC=y BR2_PACKAGE_HASSOS=y BR2_PACKAGE_HASSOS_SUPERVISOR="homeassistant/amd64-hassio-supervisor" -BR2_PACKAGE_HASSOS_SUPERVISOR_VERSION="144" +BR2_PACKAGE_HASSOS_SUPERVISOR_VERSION="163" BR2_PACKAGE_HASSOS_SUPERVISOR_ARGS="-e HOMEASSISTANT_REPOSITORY=homeassistant/qemux86-64-homeassistant" BR2_PACKAGE_HASSOS_SUPERVISOR_PROFILE="hassio-supervisor" BR2_PACKAGE_HASSOS_SUPERVISOR_PROFILE_URL="http://s3.amazonaws.com/hassio-version/apparmor.txt" BR2_PACKAGE_HASSOS_CLI="homeassistant/amd64-hassio-cli" -BR2_PACKAGE_HASSOS_CLI_VERSION="8" +BR2_PACKAGE_HASSOS_CLI_VERSION="11" BR2_PACKAGE_HASSOS_CLI_ARGS="--network=hassio --add-host hassio:172.30.32.2" BR2_PACKAGE_HASSOS_CLI_PROFILE="docker-default" BR2_PACKAGE_HASSOS_APPARMOR_DIR="supervisor/apparmor" diff --git a/buildroot-external/configs/rpi0_w_defconfig b/buildroot-external/configs/rpi0_w_defconfig index b9ad65a70..22f9c85ad 100644 --- a/buildroot-external/configs/rpi0_w_defconfig +++ b/buildroot-external/configs/rpi0_w_defconfig @@ -33,6 +33,7 @@ BR2_LINUX_KERNEL_NEEDS_HOST_OPENSSL=y BR2_LINUX_KERNEL_NEEDS_HOST_LIBELF=y BR2_PACKAGE_BUSYBOX_CONFIG="$(BR2_EXTERNAL_HASSOS_PATH)/busybox.config" BR2_PACKAGE_BUSYBOX_INDIVIDUAL_BINARIES=y +BR2_PACKAGE_PROCPS_NG=y BR2_PACKAGE_JQ=y BR2_PACKAGE_E2FSPROGS=y BR2_PACKAGE_E2FSPROGS_RESIZE2FS=y @@ -70,6 +71,7 @@ BR2_PACKAGE_RNG_TOOLS=y # BR2_PACKAGE_SYSTEMD_NETWORKD is not set BR2_PACKAGE_SYSTEMD_RANDOMSEED=y # BR2_PACKAGE_SYSTEMD_RESOLVED is not set +BR2_PACKAGE_SYSTEMD_COREDUMP=y BR2_PACKAGE_UTIL_LINUX_PARTX=y BR2_PACKAGE_UTIL_LINUX_ZRAMCTL=y BR2_TARGET_ROOTFS_SQUASHFS=y @@ -90,12 +92,12 @@ BR2_PACKAGE_HOST_MTOOLS=y BR2_PACKAGE_HOST_RAUC=y BR2_PACKAGE_HASSOS=y BR2_PACKAGE_HASSOS_SUPERVISOR="homeassistant/armhf-hassio-supervisor" -BR2_PACKAGE_HASSOS_SUPERVISOR_VERSION="144" +BR2_PACKAGE_HASSOS_SUPERVISOR_VERSION="163" BR2_PACKAGE_HASSOS_SUPERVISOR_ARGS="-e HOMEASSISTANT_REPOSITORY=homeassistant/raspberrypi-homeassistant" BR2_PACKAGE_HASSOS_SUPERVISOR_PROFILE="hassio-supervisor" BR2_PACKAGE_HASSOS_SUPERVISOR_PROFILE_URL="http://s3.amazonaws.com/hassio-version/apparmor.txt" BR2_PACKAGE_HASSOS_CLI="homeassistant/armhf-hassio-cli" -BR2_PACKAGE_HASSOS_CLI_VERSION="8" +BR2_PACKAGE_HASSOS_CLI_VERSION="11" BR2_PACKAGE_HASSOS_CLI_ARGS="--network=hassio --add-host hassio:172.30.32.2" BR2_PACKAGE_HASSOS_CLI_PROFILE="docker-default" BR2_PACKAGE_HASSOS_APPARMOR_DIR="supervisor/apparmor" diff --git a/buildroot-external/configs/rpi2_defconfig b/buildroot-external/configs/rpi2_defconfig index 44329f2e1..ed921ba0c 100644 --- a/buildroot-external/configs/rpi2_defconfig +++ b/buildroot-external/configs/rpi2_defconfig @@ -33,6 +33,7 @@ BR2_LINUX_KERNEL_NEEDS_HOST_OPENSSL=y BR2_LINUX_KERNEL_NEEDS_HOST_LIBELF=y BR2_PACKAGE_BUSYBOX_CONFIG="$(BR2_EXTERNAL_HASSOS_PATH)/busybox.config" BR2_PACKAGE_BUSYBOX_INDIVIDUAL_BINARIES=y +BR2_PACKAGE_PROCPS_NG=y BR2_PACKAGE_JQ=y BR2_PACKAGE_E2FSPROGS=y BR2_PACKAGE_E2FSPROGS_RESIZE2FS=y @@ -69,6 +70,7 @@ BR2_PACKAGE_RNG_TOOLS=y # BR2_PACKAGE_SYSTEMD_NETWORKD is not set BR2_PACKAGE_SYSTEMD_RANDOMSEED=y # BR2_PACKAGE_SYSTEMD_RESOLVED is not set +BR2_PACKAGE_SYSTEMD_COREDUMP=y BR2_PACKAGE_UTIL_LINUX_PARTX=y BR2_PACKAGE_UTIL_LINUX_ZRAMCTL=y BR2_TARGET_ROOTFS_SQUASHFS=y @@ -88,13 +90,13 @@ BR2_PACKAGE_HOST_GPTFDISK=y BR2_PACKAGE_HOST_MTOOLS=y BR2_PACKAGE_HOST_RAUC=y BR2_PACKAGE_HASSOS=y -BR2_PACKAGE_HASSOS_SUPERVISOR="homeassistant/armhf-hassio-supervisor" -BR2_PACKAGE_HASSOS_SUPERVISOR_VERSION="144" +BR2_PACKAGE_HASSOS_SUPERVISOR="homeassistant/armv7-hassio-supervisor" +BR2_PACKAGE_HASSOS_SUPERVISOR_VERSION="163" BR2_PACKAGE_HASSOS_SUPERVISOR_ARGS="-e HOMEASSISTANT_REPOSITORY=homeassistant/raspberrypi2-homeassistant" BR2_PACKAGE_HASSOS_SUPERVISOR_PROFILE="hassio-supervisor" BR2_PACKAGE_HASSOS_SUPERVISOR_PROFILE_URL="http://s3.amazonaws.com/hassio-version/apparmor.txt" -BR2_PACKAGE_HASSOS_CLI="homeassistant/armhf-hassio-cli" -BR2_PACKAGE_HASSOS_CLI_VERSION="8" +BR2_PACKAGE_HASSOS_CLI="homeassistant/armv7-hassio-cli" +BR2_PACKAGE_HASSOS_CLI_VERSION="11" BR2_PACKAGE_HASSOS_CLI_ARGS="--network=hassio --add-host hassio:172.30.32.2" BR2_PACKAGE_HASSOS_CLI_PROFILE="docker-default" BR2_PACKAGE_HASSOS_APPARMOR_DIR="supervisor/apparmor" diff --git a/buildroot-external/configs/rpi3_64_defconfig b/buildroot-external/configs/rpi3_64_defconfig index 2f161e5a9..b10b4add3 100644 --- a/buildroot-external/configs/rpi3_64_defconfig +++ b/buildroot-external/configs/rpi3_64_defconfig @@ -33,6 +33,7 @@ BR2_LINUX_KERNEL_NEEDS_HOST_OPENSSL=y BR2_LINUX_KERNEL_NEEDS_HOST_LIBELF=y BR2_PACKAGE_BUSYBOX_CONFIG="$(BR2_EXTERNAL_HASSOS_PATH)/busybox.config" BR2_PACKAGE_BUSYBOX_INDIVIDUAL_BINARIES=y +BR2_PACKAGE_PROCPS_NG=y BR2_PACKAGE_JQ=y BR2_PACKAGE_E2FSPROGS=y BR2_PACKAGE_E2FSPROGS_RESIZE2FS=y @@ -70,6 +71,7 @@ BR2_PACKAGE_RNG_TOOLS=y # BR2_PACKAGE_SYSTEMD_NETWORKD is not set BR2_PACKAGE_SYSTEMD_RANDOMSEED=y # BR2_PACKAGE_SYSTEMD_RESOLVED is not set +BR2_PACKAGE_SYSTEMD_COREDUMP=y BR2_PACKAGE_UTIL_LINUX_PARTX=y BR2_PACKAGE_UTIL_LINUX_ZRAMCTL=y BR2_TARGET_ROOTFS_SQUASHFS=y @@ -90,12 +92,12 @@ BR2_PACKAGE_HOST_MTOOLS=y BR2_PACKAGE_HOST_RAUC=y BR2_PACKAGE_HASSOS=y BR2_PACKAGE_HASSOS_SUPERVISOR="homeassistant/aarch64-hassio-supervisor" -BR2_PACKAGE_HASSOS_SUPERVISOR_VERSION="144" +BR2_PACKAGE_HASSOS_SUPERVISOR_VERSION="163" BR2_PACKAGE_HASSOS_SUPERVISOR_ARGS="-e HOMEASSISTANT_REPOSITORY=homeassistant/raspberrypi3-64-homeassistant" BR2_PACKAGE_HASSOS_SUPERVISOR_PROFILE="hassio-supervisor" BR2_PACKAGE_HASSOS_SUPERVISOR_PROFILE_URL="http://s3.amazonaws.com/hassio-version/apparmor.txt" BR2_PACKAGE_HASSOS_CLI="homeassistant/aarch64-hassio-cli" -BR2_PACKAGE_HASSOS_CLI_VERSION="8" +BR2_PACKAGE_HASSOS_CLI_VERSION="11" BR2_PACKAGE_HASSOS_CLI_ARGS="--network=hassio --add-host hassio:172.30.32.2" BR2_PACKAGE_HASSOS_CLI_PROFILE="docker-default" BR2_PACKAGE_HASSOS_APPARMOR_DIR="supervisor/apparmor" diff --git a/buildroot-external/configs/rpi3_defconfig b/buildroot-external/configs/rpi3_defconfig index fd65ceaef..e967378c5 100644 --- a/buildroot-external/configs/rpi3_defconfig +++ b/buildroot-external/configs/rpi3_defconfig @@ -33,6 +33,7 @@ BR2_LINUX_KERNEL_NEEDS_HOST_OPENSSL=y BR2_LINUX_KERNEL_NEEDS_HOST_LIBELF=y BR2_PACKAGE_BUSYBOX_CONFIG="$(BR2_EXTERNAL_HASSOS_PATH)/busybox.config" BR2_PACKAGE_BUSYBOX_INDIVIDUAL_BINARIES=y +BR2_PACKAGE_PROCPS_NG=y BR2_PACKAGE_JQ=y BR2_PACKAGE_E2FSPROGS=y BR2_PACKAGE_E2FSPROGS_RESIZE2FS=y @@ -70,6 +71,7 @@ BR2_PACKAGE_RNG_TOOLS=y # BR2_PACKAGE_SYSTEMD_NETWORKD is not set BR2_PACKAGE_SYSTEMD_RANDOMSEED=y # BR2_PACKAGE_SYSTEMD_RESOLVED is not set +BR2_PACKAGE_SYSTEMD_COREDUMP=y BR2_PACKAGE_UTIL_LINUX_PARTX=y BR2_PACKAGE_UTIL_LINUX_ZRAMCTL=y BR2_TARGET_ROOTFS_SQUASHFS=y @@ -89,13 +91,13 @@ BR2_PACKAGE_HOST_GPTFDISK=y BR2_PACKAGE_HOST_MTOOLS=y BR2_PACKAGE_HOST_RAUC=y BR2_PACKAGE_HASSOS=y -BR2_PACKAGE_HASSOS_SUPERVISOR="homeassistant/armhf-hassio-supervisor" -BR2_PACKAGE_HASSOS_SUPERVISOR_VERSION="144" +BR2_PACKAGE_HASSOS_SUPERVISOR="homeassistant/armv7-hassio-supervisor" +BR2_PACKAGE_HASSOS_SUPERVISOR_VERSION="163" BR2_PACKAGE_HASSOS_SUPERVISOR_ARGS="-e HOMEASSISTANT_REPOSITORY=homeassistant/raspberrypi3-homeassistant" BR2_PACKAGE_HASSOS_SUPERVISOR_PROFILE="hassio-supervisor" BR2_PACKAGE_HASSOS_SUPERVISOR_PROFILE_URL="http://s3.amazonaws.com/hassio-version/apparmor.txt" -BR2_PACKAGE_HASSOS_CLI="homeassistant/armhf-hassio-cli" -BR2_PACKAGE_HASSOS_CLI_VERSION="8" +BR2_PACKAGE_HASSOS_CLI="homeassistant/armv7-hassio-cli" +BR2_PACKAGE_HASSOS_CLI_VERSION="11" BR2_PACKAGE_HASSOS_CLI_ARGS="--network=hassio --add-host hassio:172.30.32.2" BR2_PACKAGE_HASSOS_CLI_PROFILE="docker-default" BR2_PACKAGE_HASSOS_APPARMOR_DIR="supervisor/apparmor" diff --git a/buildroot-external/configs/rpi_defconfig b/buildroot-external/configs/rpi_defconfig index ba5d9029f..e55e50a8a 100644 --- a/buildroot-external/configs/rpi_defconfig +++ b/buildroot-external/configs/rpi_defconfig @@ -33,6 +33,7 @@ BR2_LINUX_KERNEL_NEEDS_HOST_OPENSSL=y BR2_LINUX_KERNEL_NEEDS_HOST_LIBELF=y BR2_PACKAGE_BUSYBOX_CONFIG="$(BR2_EXTERNAL_HASSOS_PATH)/busybox.config" BR2_PACKAGE_BUSYBOX_INDIVIDUAL_BINARIES=y +BR2_PACKAGE_PROCPS_NG=y BR2_PACKAGE_JQ=y BR2_PACKAGE_E2FSPROGS=y BR2_PACKAGE_E2FSPROGS_RESIZE2FS=y @@ -69,6 +70,7 @@ BR2_PACKAGE_RNG_TOOLS=y # BR2_PACKAGE_SYSTEMD_NETWORKD is not set BR2_PACKAGE_SYSTEMD_RANDOMSEED=y # BR2_PACKAGE_SYSTEMD_RESOLVED is not set +BR2_PACKAGE_SYSTEMD_COREDUMP=y BR2_PACKAGE_UTIL_LINUX_PARTX=y BR2_PACKAGE_UTIL_LINUX_ZRAMCTL=y BR2_TARGET_ROOTFS_SQUASHFS=y @@ -89,12 +91,12 @@ BR2_PACKAGE_HOST_MTOOLS=y BR2_PACKAGE_HOST_RAUC=y BR2_PACKAGE_HASSOS=y BR2_PACKAGE_HASSOS_SUPERVISOR="homeassistant/armhf-hassio-supervisor" -BR2_PACKAGE_HASSOS_SUPERVISOR_VERSION="144" +BR2_PACKAGE_HASSOS_SUPERVISOR_VERSION="163" BR2_PACKAGE_HASSOS_SUPERVISOR_ARGS="-e HOMEASSISTANT_REPOSITORY=homeassistant/raspberrypi-homeassistant" BR2_PACKAGE_HASSOS_SUPERVISOR_PROFILE="hassio-supervisor" BR2_PACKAGE_HASSOS_SUPERVISOR_PROFILE_URL="http://s3.amazonaws.com/hassio-version/apparmor.txt" BR2_PACKAGE_HASSOS_CLI="homeassistant/armhf-hassio-cli" -BR2_PACKAGE_HASSOS_CLI_VERSION="8" +BR2_PACKAGE_HASSOS_CLI_VERSION="11" BR2_PACKAGE_HASSOS_CLI_ARGS="--network=hassio --add-host hassio:172.30.32.2" BR2_PACKAGE_HASSOS_CLI_PROFILE="docker-default" BR2_PACKAGE_HASSOS_APPARMOR_DIR="supervisor/apparmor" diff --git a/buildroot-external/configs/tinker_defconfig b/buildroot-external/configs/tinker_defconfig index 9e619d825..cf35a3f07 100644 --- a/buildroot-external/configs/tinker_defconfig +++ b/buildroot-external/configs/tinker_defconfig @@ -32,6 +32,7 @@ BR2_LINUX_KERNEL_NEEDS_HOST_OPENSSL=y BR2_LINUX_KERNEL_NEEDS_HOST_LIBELF=y BR2_PACKAGE_BUSYBOX_CONFIG="$(BR2_EXTERNAL_HASSOS_PATH)/busybox.config" BR2_PACKAGE_BUSYBOX_INDIVIDUAL_BINARIES=y +BR2_PACKAGE_PROCPS_NG=y BR2_PACKAGE_JQ=y BR2_PACKAGE_E2FSPROGS=y BR2_PACKAGE_E2FSPROGS_RESIZE2FS=y @@ -69,6 +70,7 @@ BR2_PACKAGE_RNG_TOOLS=y # BR2_PACKAGE_SYSTEMD_NETWORKD is not set BR2_PACKAGE_SYSTEMD_RANDOMSEED=y # BR2_PACKAGE_SYSTEMD_RESOLVED is not set +BR2_PACKAGE_SYSTEMD_COREDUMP=y BR2_PACKAGE_UTIL_LINUX_PARTX=y BR2_PACKAGE_UTIL_LINUX_ZRAMCTL=y BR2_TARGET_ROOTFS_SQUASHFS=y @@ -92,13 +94,13 @@ BR2_PACKAGE_HOST_GPTFDISK=y BR2_PACKAGE_HOST_MTOOLS=y BR2_PACKAGE_HOST_RAUC=y BR2_PACKAGE_HASSOS=y -BR2_PACKAGE_HASSOS_SUPERVISOR="homeassistant/armhf-hassio-supervisor" -BR2_PACKAGE_HASSOS_SUPERVISOR_VERSION="144" +BR2_PACKAGE_HASSOS_SUPERVISOR="homeassistant/armv7-hassio-supervisor" +BR2_PACKAGE_HASSOS_SUPERVISOR_VERSION="163" BR2_PACKAGE_HASSOS_SUPERVISOR_ARGS="-e HOMEASSISTANT_REPOSITORY=homeassistant/tinker-homeassistant" BR2_PACKAGE_HASSOS_SUPERVISOR_PROFILE="hassio-supervisor" BR2_PACKAGE_HASSOS_SUPERVISOR_PROFILE_URL="http://s3.amazonaws.com/hassio-version/apparmor.txt" -BR2_PACKAGE_HASSOS_CLI="homeassistant/armhf-hassio-cli" -BR2_PACKAGE_HASSOS_CLI_VERSION="8" +BR2_PACKAGE_HASSOS_CLI="homeassistant/armv7-hassio-cli" +BR2_PACKAGE_HASSOS_CLI_VERSION="11" BR2_PACKAGE_HASSOS_CLI_ARGS="--network=hassio --add-host hassio:172.30.32.2" BR2_PACKAGE_HASSOS_CLI_PROFILE="docker-default" BR2_PACKAGE_HASSOS_APPARMOR_DIR="supervisor/apparmor" diff --git a/buildroot-external/kernel/hassos.config b/buildroot-external/kernel/hassos.config index e90a004dc..a7d4967ea 100644 --- a/buildroot-external/kernel/hassos.config +++ b/buildroot-external/kernel/hassos.config @@ -30,6 +30,7 @@ CONFIG_MSDOS_PARTITION=y # CONFIG_DEBUG_STACK_USAGE is not set # CONFIG_BTRFS_FS is not set +CONFIG_TUN=y CONFIG_VLAN_8021Q=m CONFIG_VLAN_8021Q_GVRP=y CONFIG_VLAN_8021Q_MVRP=y diff --git a/buildroot-external/meta b/buildroot-external/meta index 92f278f13..abcb6db46 100644 --- a/buildroot-external/meta +++ b/buildroot-external/meta @@ -1,5 +1,5 @@ VERSION_MAJOR=3 -VERSION_BUILD=0 +VERSION_BUILD=1 HASSOS_NAME="HassOS" HASSOS_ID="hassos" diff --git a/buildroot-external/rootfs-overlay/etc/modprobe.d/.empty b/buildroot-external/rootfs-overlay/etc/modprobe.d/.empty new file mode 100644 index 000000000..e69de29bb diff --git a/buildroot-external/rootfs-overlay/etc/modules-load.d/.empty b/buildroot-external/rootfs-overlay/etc/modules-load.d/.empty new file mode 100644 index 000000000..e69de29bb diff --git a/buildroot-external/rootfs-overlay/etc/systemd/coredump.conf b/buildroot-external/rootfs-overlay/etc/systemd/coredump.conf new file mode 100644 index 000000000..d46fb0960 --- /dev/null +++ b/buildroot-external/rootfs-overlay/etc/systemd/coredump.conf @@ -0,0 +1,3 @@ +[Coredump] +Storage=none +ProcessSizeMax=0 diff --git a/buildroot-external/rootfs-overlay/etc/systemd/system/docker.service.d/hassos.conf b/buildroot-external/rootfs-overlay/etc/systemd/system/docker.service.d/hassos.conf index cf12227ea..b9b819bb0 100644 --- a/buildroot-external/rootfs-overlay/etc/systemd/system/docker.service.d/hassos.conf +++ b/buildroot-external/rootfs-overlay/etc/systemd/system/docker.service.d/hassos.conf @@ -1,5 +1,5 @@ [Unit] -RequiresMountsFor=/etc/docker /var/lib/docker +RequiresMountsFor=/etc/docker /mnt/data [Service] ExecStart= diff --git a/buildroot-external/rootfs-overlay/etc/systemd/system/systemd-modules-load.service.d/hassos.conf b/buildroot-external/rootfs-overlay/etc/systemd/system/systemd-modules-load.service.d/hassos.conf index 3e1ee64cc..c490b62b8 100644 --- a/buildroot-external/rootfs-overlay/etc/systemd/system/systemd-modules-load.service.d/hassos.conf +++ b/buildroot-external/rootfs-overlay/etc/systemd/system/systemd-modules-load.service.d/hassos.conf @@ -1,2 +1,2 @@ [Unit] -RequiresMountsFor=/etc/modules-load.d +RequiresMountsFor=/etc/modules-load.d /etc/modprobe.d diff --git a/buildroot-external/rootfs-overlay/usr/lib/systemd/system/etc-modprobe.d.mount b/buildroot-external/rootfs-overlay/usr/lib/systemd/system/etc-modprobe.d.mount new file mode 100644 index 000000000..2854476d5 --- /dev/null +++ b/buildroot-external/rootfs-overlay/usr/lib/systemd/system/etc-modprobe.d.mount @@ -0,0 +1,14 @@ +[Unit] +Description=Kernel persistent modprobe.d +Requires=mnt-overlay.mount +After=mnt-overlay.mount +Before=systemd-modules-load.service hassos-config.service + +[Mount] +What=/mnt/overlay/etc/modprobe.d +Where=/etc/modprobe.d +Type=None +Options=bind + +[Install] +WantedBy=hassos-bind.target diff --git a/buildroot-external/rootfs-overlay/usr/sbin/hassos-config b/buildroot-external/rootfs-overlay/usr/sbin/hassos-config index 5ae969a0a..08504c53b 100755 --- a/buildroot-external/rootfs-overlay/usr/sbin/hassos-config +++ b/buildroot-external/rootfs-overlay/usr/sbin/hassos-config @@ -44,12 +44,21 @@ fi ## # Modules if [ -d "${CONFIG_DIR}/modules" ]; then - echo "[Info] Update Modules configuration!" + echo "[Info] Update Modules autoload!" rm -rf /etc/modules-load.d/* cp -f ${CONFIG_DIR}/modules/* /etc/modules-load.d/ fi +## +# Modules configuration +if [ -d "${CONFIG_DIR}/modprobe" ]; then + echo "[Info] Update Modules configuration!" + + rm -rf /etc/modprobe.d/* + cp -f ${CONFIG_DIR}/modprobe/* /etc/modprobe.d/ +fi + ## # Udev if [ -d "${CONFIG_DIR}/udev" ]; then diff --git a/buildroot-external/rootfs-overlay/usr/sbin/hassos-supervisor b/buildroot-external/rootfs-overlay/usr/sbin/hassos-supervisor index 6e93074e9..246a59906 100755 --- a/buildroot-external/rootfs-overlay/usr/sbin/hassos-supervisor +++ b/buildroot-external/rootfs-overlay/usr/sbin/hassos-supervisor @@ -23,7 +23,7 @@ runSupervisor() { # shellcheck disable=SC2086 docker container run --name hassos_supervisor \ - --security-opt apparmor="${APPARMOR}" \ + --privileged --security-opt apparmor="${APPARMOR}" \ -v /var/run/docker.sock:/var/run/docker.sock \ -v /var/run/dbus:/var/run/dbus \ -v /etc/machine-id:/etc/machine-id:ro \ diff --git a/buildroot-external/scripts/rauc.sh b/buildroot-external/scripts/rauc.sh index 20f5d5888..b06748b65 100755 --- a/buildroot-external/scripts/rauc.sh +++ b/buildroot-external/scripts/rauc.sh @@ -78,6 +78,7 @@ function install_rauc_certs() { function install_bootloader_config() { if [ "${BOOTLOADER}" == "uboot" ]; then + # shellcheck disable=SC1117 echo -e "/dev/disk/by-partlabel/hassos-bootstate\t0x0000\t${BOOT_ENV_SIZE}" > "${TARGET_DIR}/etc/fw_env.config" else cp -f "${BR2_EXTERNAL_HASSOS_PATH}/misc/barebox-state-efi.dtb" "${TARGET_DIR}/etc/barebox-state.dtb" diff --git a/buildroot-external/scripts/rootfs-layer.sh b/buildroot-external/scripts/rootfs-layer.sh index 1c65b83ce..1592c5f80 100755 --- a/buildroot-external/scripts/rootfs-layer.sh +++ b/buildroot-external/scripts/rootfs-layer.sh @@ -29,6 +29,7 @@ function fix_rootfs() { function install_hassos_cli() { + # shellcheck disable=SC1117 sed -i "s|\(root.*\)/bin/sh|\1/usr/sbin/hassos-cli|" "${TARGET_DIR}/etc/passwd" if ! grep "hassos-cli" "${TARGET_DIR}/etc/shells"; then