From e1f21d4cc5880a55c70129395b7fbdc18aa622b2 Mon Sep 17 00:00:00 2001 From: dcflachs Date: Tue, 18 Nov 2025 21:53:10 -0500 Subject: [PATCH 1/7] First pass --- Dockerfile | 32 ++++++++++++++++-- Dockerfile.complex | 33 ------------------- .../dependencies.d/init-mods-package-install | 0 .../init-mod-homeassistant-heyu-setup/run | 20 +++++++++++ .../type | 0 .../init-mod-homeassistant-heyu-setup/up | 1 + .../run | 30 ----------------- .../init-mod-imagename-modname-add-package/up | 1 - .../init-mod-imagename-modname-install/run | 8 ----- .../init-mod-imagename-modname-install/type | 1 - .../init-mod-imagename-modname-install/up | 1 - .../init-mod-imagename-modname-install | 0 .../init-mod-imagename-modname-add-package | 0 .../dependencies.d/init-services | 0 .../s6-rc.d/svc-mod-imagename-modname/run | 7 ---- .../s6-rc.d/svc-mod-imagename-modname/type | 1 - .../init-mod-homeassistant-heyu-setup} | 0 .../init-mod-imagename-modname-add-package | 0 .../init-mod-imagename-modname-install | 0 .../user/contents.d/svc-mod-imagename-modname | 0 20 files changed, 50 insertions(+), 85 deletions(-) delete mode 100644 Dockerfile.complex rename root/etc/s6-overlay/s6-rc.d/{init-mod-imagename-modname-install => init-mod-homeassistant-heyu-setup}/dependencies.d/init-mods-package-install (100%) create mode 100755 root/etc/s6-overlay/s6-rc.d/init-mod-homeassistant-heyu-setup/run rename root/etc/s6-overlay/s6-rc.d/{init-mod-imagename-modname-add-package => init-mod-homeassistant-heyu-setup}/type (100%) create mode 100644 root/etc/s6-overlay/s6-rc.d/init-mod-homeassistant-heyu-setup/up delete mode 100755 root/etc/s6-overlay/s6-rc.d/init-mod-imagename-modname-add-package/run delete mode 100644 root/etc/s6-overlay/s6-rc.d/init-mod-imagename-modname-add-package/up delete mode 100755 root/etc/s6-overlay/s6-rc.d/init-mod-imagename-modname-install/run delete mode 100644 root/etc/s6-overlay/s6-rc.d/init-mod-imagename-modname-install/type delete mode 100644 root/etc/s6-overlay/s6-rc.d/init-mod-imagename-modname-install/up delete mode 100644 root/etc/s6-overlay/s6-rc.d/init-mods-end/dependencies.d/init-mod-imagename-modname-install delete mode 100644 root/etc/s6-overlay/s6-rc.d/init-mods-package-install/dependencies.d/init-mod-imagename-modname-add-package delete mode 100644 root/etc/s6-overlay/s6-rc.d/svc-mod-imagename-modname/dependencies.d/init-services delete mode 100755 root/etc/s6-overlay/s6-rc.d/svc-mod-imagename-modname/run delete mode 100644 root/etc/s6-overlay/s6-rc.d/svc-mod-imagename-modname/type rename root/etc/s6-overlay/s6-rc.d/{init-mod-imagename-modname-add-package/dependencies.d/init-mods => user/contents.d/init-mod-homeassistant-heyu-setup} (100%) delete mode 100644 root/etc/s6-overlay/s6-rc.d/user/contents.d/init-mod-imagename-modname-add-package delete mode 100644 root/etc/s6-overlay/s6-rc.d/user/contents.d/init-mod-imagename-modname-install delete mode 100644 root/etc/s6-overlay/s6-rc.d/user/contents.d/svc-mod-imagename-modname diff --git a/Dockerfile b/Dockerfile index aa661704..bffec636 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,8 +1,34 @@ # syntax=docker/dockerfile:1 -FROM scratch +## Buildstage ## +FROM ghcr.io/linuxserver/baseimage-alpine:3.22 AS buildstage -LABEL maintainer="username" +ARG GIT_HASH=902a4ef # copy local files -COPY root/ / +COPY root/ /root-layer/ + +RUN \ + echo "**** install build packages ****" && \h + apk add --no-cache \ + curl build-base && \ + echo "**** get heyu source ****" && \ + mkdir -p /build && \ + cd /build && \ + curl -LsSo heyu.zip https://github.com/HeyuX10Automation/heyu/archive/${GIT_HASH}.zip && \ + unzip heyu.zip && \ + mv heyu-* heyu && \ + cd heyu && \ + echo "**** building heyu ****" && \ + ./configure --sysconfdir=/config/heyu/ && \ + make && \ + make install prefix=/root-layer sysconfdir=/root-layer/defaults && \ + cd / + +## Single layer deployed image ## +FROM scratch + +LABEL maintainer="dcflachs" + +# Add files from buildstage +COPY --from=buildstage /root-layer/ / \ No newline at end of file diff --git a/Dockerfile.complex b/Dockerfile.complex deleted file mode 100644 index 3ed07b0d..00000000 --- a/Dockerfile.complex +++ /dev/null @@ -1,33 +0,0 @@ -# syntax=docker/dockerfile:1 - -## Buildstage ## -FROM ghcr.io/linuxserver/baseimage-alpine:3.20 AS buildstage - -RUN \ - echo "**** install packages ****" && \ - apk add --no-cache \ - curl && \ - echo "**** grab rclone ****" && \ - mkdir -p /root-layer && \ - if [ $(uname -m) = "x86_64" ]; then \ - echo "Downloading x86_64 tarball" && \ - curl -o \ - /root-layer/rclone.deb -L \ - "https://downloads.rclone.org/v1.47.0/rclone-v1.47.0-linux-amd64.deb"; \ - elif [ $(uname -m) = "aarch64" ]; then \ - echo "Downloading aarch64 tarball" && \ - curl -o \ - /root-layer/rclone.deb -L \ - "https://downloads.rclone.org/v1.47.0/rclone-v1.47.0-linux-arm64.deb"; \ - fi && \ - -# copy local files -COPY root/ /root-layer/ - -## Single layer deployed image ## -FROM scratch - -LABEL maintainer="username" - -# Add files from buildstage -COPY --from=buildstage /root-layer/ / diff --git a/root/etc/s6-overlay/s6-rc.d/init-mod-imagename-modname-install/dependencies.d/init-mods-package-install b/root/etc/s6-overlay/s6-rc.d/init-mod-homeassistant-heyu-setup/dependencies.d/init-mods-package-install similarity index 100% rename from root/etc/s6-overlay/s6-rc.d/init-mod-imagename-modname-install/dependencies.d/init-mods-package-install rename to root/etc/s6-overlay/s6-rc.d/init-mod-homeassistant-heyu-setup/dependencies.d/init-mods-package-install diff --git a/root/etc/s6-overlay/s6-rc.d/init-mod-homeassistant-heyu-setup/run b/root/etc/s6-overlay/s6-rc.d/init-mod-homeassistant-heyu-setup/run new file mode 100755 index 00000000..f230140b --- /dev/null +++ b/root/etc/s6-overlay/s6-rc.d/init-mod-homeassistant-heyu-setup/run @@ -0,0 +1,20 @@ +#!/usr/bin/with-contenv bash + +# This is an install script that is designed to run after init-mods-package-install +# so it can take advantage of packages installed +# init-mods-end depends on this script so that later init and services wait until this script exits + +echo "**** Setting up heyu ****" + +mkdir -p /config/heyu + + +if [[ ! -f /config/heyu/x10config ]]; then + cp /defaults/x10config.sample /config/heyu/x10config +fi + +if [[ ! -f /config/heyu/x10config ]]; then + cp /defaults/x10.sched.sample /config/heyu/x10.sched +fi + +echo "**** heyu setup complete ****" \ No newline at end of file diff --git a/root/etc/s6-overlay/s6-rc.d/init-mod-imagename-modname-add-package/type b/root/etc/s6-overlay/s6-rc.d/init-mod-homeassistant-heyu-setup/type similarity index 100% rename from root/etc/s6-overlay/s6-rc.d/init-mod-imagename-modname-add-package/type rename to root/etc/s6-overlay/s6-rc.d/init-mod-homeassistant-heyu-setup/type diff --git a/root/etc/s6-overlay/s6-rc.d/init-mod-homeassistant-heyu-setup/up b/root/etc/s6-overlay/s6-rc.d/init-mod-homeassistant-heyu-setup/up new file mode 100644 index 00000000..e6249641 --- /dev/null +++ b/root/etc/s6-overlay/s6-rc.d/init-mod-homeassistant-heyu-setup/up @@ -0,0 +1 @@ +/etc/s6-overlay/s6-rc.d/init-mod-homeassistant-heyu-setup/run \ No newline at end of file diff --git a/root/etc/s6-overlay/s6-rc.d/init-mod-imagename-modname-add-package/run b/root/etc/s6-overlay/s6-rc.d/init-mod-imagename-modname-add-package/run deleted file mode 100755 index 063b5701..00000000 --- a/root/etc/s6-overlay/s6-rc.d/init-mod-imagename-modname-add-package/run +++ /dev/null @@ -1,30 +0,0 @@ -#!/usr/bin/with-contenv bash - -# This is the init file used for adding os or pip packages to install lists. -# It takes advantage of the built-in init-mods-package-install init script that comes with the baseimages. -# If using this, we need to make sure we set this init as a dependency of init-mods-package-install so this one runs first - -if ! command -v apprise; then - echo "**** Adding apprise and its deps to package install lists ****" - echo "apprise" >> /mod-pip-packages-to-install.list - ## Ubuntu - if [ -f /usr/bin/apt ]; then - echo "\ - python3 \ - python3-pip \ - runc" >> /mod-repo-packages-to-install.list - fi - # Alpine - if [ -f /sbin/apk ]; then - echo "\ - cargo \ - libffi-dev \ - openssl-dev \ - python3 \ - python3-dev \ - python3 \ - py3-pip" >> /mod-repo-packages-to-install.list - fi -else - echo "**** apprise already installed, skipping ****" -fi diff --git a/root/etc/s6-overlay/s6-rc.d/init-mod-imagename-modname-add-package/up b/root/etc/s6-overlay/s6-rc.d/init-mod-imagename-modname-add-package/up deleted file mode 100644 index 6414139f..00000000 --- a/root/etc/s6-overlay/s6-rc.d/init-mod-imagename-modname-add-package/up +++ /dev/null @@ -1 +0,0 @@ -/etc/s6-overlay/s6-rc.d/init-mod-imagename-modname-add-package/run \ No newline at end of file diff --git a/root/etc/s6-overlay/s6-rc.d/init-mod-imagename-modname-install/run b/root/etc/s6-overlay/s6-rc.d/init-mod-imagename-modname-install/run deleted file mode 100755 index 59a4b77f..00000000 --- a/root/etc/s6-overlay/s6-rc.d/init-mod-imagename-modname-install/run +++ /dev/null @@ -1,8 +0,0 @@ -#!/usr/bin/with-contenv bash - -# This is an install script that is designed to run after init-mods-package-install -# so it can take advantage of packages installed -# init-mods-end depends on this script so that later init and services wait until this script exits - -echo "**** Setting up apprise ****" -apprise blah blah diff --git a/root/etc/s6-overlay/s6-rc.d/init-mod-imagename-modname-install/type b/root/etc/s6-overlay/s6-rc.d/init-mod-imagename-modname-install/type deleted file mode 100644 index 3d92b15f..00000000 --- a/root/etc/s6-overlay/s6-rc.d/init-mod-imagename-modname-install/type +++ /dev/null @@ -1 +0,0 @@ -oneshot \ No newline at end of file diff --git a/root/etc/s6-overlay/s6-rc.d/init-mod-imagename-modname-install/up b/root/etc/s6-overlay/s6-rc.d/init-mod-imagename-modname-install/up deleted file mode 100644 index 03d298d2..00000000 --- a/root/etc/s6-overlay/s6-rc.d/init-mod-imagename-modname-install/up +++ /dev/null @@ -1 +0,0 @@ -/etc/s6-overlay/s6-rc.d/init-mod-imagename-modname-install/run \ No newline at end of file diff --git a/root/etc/s6-overlay/s6-rc.d/init-mods-end/dependencies.d/init-mod-imagename-modname-install b/root/etc/s6-overlay/s6-rc.d/init-mods-end/dependencies.d/init-mod-imagename-modname-install deleted file mode 100644 index e69de29b..00000000 diff --git a/root/etc/s6-overlay/s6-rc.d/init-mods-package-install/dependencies.d/init-mod-imagename-modname-add-package b/root/etc/s6-overlay/s6-rc.d/init-mods-package-install/dependencies.d/init-mod-imagename-modname-add-package deleted file mode 100644 index e69de29b..00000000 diff --git a/root/etc/s6-overlay/s6-rc.d/svc-mod-imagename-modname/dependencies.d/init-services b/root/etc/s6-overlay/s6-rc.d/svc-mod-imagename-modname/dependencies.d/init-services deleted file mode 100644 index e69de29b..00000000 diff --git a/root/etc/s6-overlay/s6-rc.d/svc-mod-imagename-modname/run b/root/etc/s6-overlay/s6-rc.d/svc-mod-imagename-modname/run deleted file mode 100755 index 02ffe39a..00000000 --- a/root/etc/s6-overlay/s6-rc.d/svc-mod-imagename-modname/run +++ /dev/null @@ -1,7 +0,0 @@ -#!/usr/bin/with-contenv bash - -# This is an example service that would run for the mod -# It depends on init-services, the baseimage hook for start of all longrun services - -exec \ - s6-setuidgid abc run my app diff --git a/root/etc/s6-overlay/s6-rc.d/svc-mod-imagename-modname/type b/root/etc/s6-overlay/s6-rc.d/svc-mod-imagename-modname/type deleted file mode 100644 index 1780f9f4..00000000 --- a/root/etc/s6-overlay/s6-rc.d/svc-mod-imagename-modname/type +++ /dev/null @@ -1 +0,0 @@ -longrun \ No newline at end of file diff --git a/root/etc/s6-overlay/s6-rc.d/init-mod-imagename-modname-add-package/dependencies.d/init-mods b/root/etc/s6-overlay/s6-rc.d/user/contents.d/init-mod-homeassistant-heyu-setup similarity index 100% rename from root/etc/s6-overlay/s6-rc.d/init-mod-imagename-modname-add-package/dependencies.d/init-mods rename to root/etc/s6-overlay/s6-rc.d/user/contents.d/init-mod-homeassistant-heyu-setup diff --git a/root/etc/s6-overlay/s6-rc.d/user/contents.d/init-mod-imagename-modname-add-package b/root/etc/s6-overlay/s6-rc.d/user/contents.d/init-mod-imagename-modname-add-package deleted file mode 100644 index e69de29b..00000000 diff --git a/root/etc/s6-overlay/s6-rc.d/user/contents.d/init-mod-imagename-modname-install b/root/etc/s6-overlay/s6-rc.d/user/contents.d/init-mod-imagename-modname-install deleted file mode 100644 index e69de29b..00000000 diff --git a/root/etc/s6-overlay/s6-rc.d/user/contents.d/svc-mod-imagename-modname b/root/etc/s6-overlay/s6-rc.d/user/contents.d/svc-mod-imagename-modname deleted file mode 100644 index e69de29b..00000000 From 92b3426376ccfcfaf39a941dacf56bcd7ebf0d7c Mon Sep 17 00:00:00 2001 From: dcflachs Date: Wed, 19 Nov 2025 21:39:00 -0500 Subject: [PATCH 2/7] Fix setup of defaults --- .../s6-overlay/s6-rc.d/init-mod-homeassistant-heyu-setup/run | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/root/etc/s6-overlay/s6-rc.d/init-mod-homeassistant-heyu-setup/run b/root/etc/s6-overlay/s6-rc.d/init-mod-homeassistant-heyu-setup/run index f230140b..dfba3ac8 100755 --- a/root/etc/s6-overlay/s6-rc.d/init-mod-homeassistant-heyu-setup/run +++ b/root/etc/s6-overlay/s6-rc.d/init-mod-homeassistant-heyu-setup/run @@ -13,7 +13,7 @@ if [[ ! -f /config/heyu/x10config ]]; then cp /defaults/x10config.sample /config/heyu/x10config fi -if [[ ! -f /config/heyu/x10config ]]; then +if [[ ! -f /config/heyu/x10.sched ]]; then cp /defaults/x10.sched.sample /config/heyu/x10.sched fi From b5e45ac009a48be38c5c1b488a79e02247c38a5c Mon Sep 17 00:00:00 2001 From: dcflachs Date: Wed, 19 Nov 2025 22:10:48 -0500 Subject: [PATCH 3/7] Create var directories and fix config file names --- .../s6-rc.d/init-mod-homeassistant-heyu-setup/run | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/root/etc/s6-overlay/s6-rc.d/init-mod-homeassistant-heyu-setup/run b/root/etc/s6-overlay/s6-rc.d/init-mod-homeassistant-heyu-setup/run index dfba3ac8..373edf15 100755 --- a/root/etc/s6-overlay/s6-rc.d/init-mod-homeassistant-heyu-setup/run +++ b/root/etc/s6-overlay/s6-rc.d/init-mod-homeassistant-heyu-setup/run @@ -7,10 +7,11 @@ echo "**** Setting up heyu ****" mkdir -p /config/heyu +mkdir -p /usr/local/var/tmp/heyu +mkdir -p /usr/local/var/lock - -if [[ ! -f /config/heyu/x10config ]]; then - cp /defaults/x10config.sample /config/heyu/x10config +if [[ ! -f /config/heyu/x10.conf ]]; then + cp /defaults/x10config.sample /config/heyu/x10.conf fi if [[ ! -f /config/heyu/x10.sched ]]; then From 8846e567bd97f1289b186fc8262e5ef7ad26435e Mon Sep 17 00:00:00 2001 From: dcflachs Date: Wed, 19 Nov 2025 22:13:45 -0500 Subject: [PATCH 4/7] Fix --- Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index bffec636..b8cecec8 100644 --- a/Dockerfile +++ b/Dockerfile @@ -9,7 +9,7 @@ ARG GIT_HASH=902a4ef COPY root/ /root-layer/ RUN \ - echo "**** install build packages ****" && \h + echo "**** install build packages ****" && \ apk add --no-cache \ curl build-base && \ echo "**** get heyu source ****" && \ From 1af66b45735a77474b9695872d98d1ae9c55f2a7 Mon Sep 17 00:00:00 2001 From: dcflachs Date: Mon, 1 Dec 2025 23:00:26 -0500 Subject: [PATCH 5/7] Update readme --- README.md | 26 ++++++-------------------- 1 file changed, 6 insertions(+), 20 deletions(-) diff --git a/README.md b/README.md index 17006683..9d5ec8a3 100644 --- a/README.md +++ b/README.md @@ -1,25 +1,11 @@ -# Rsync - Docker mod for openssh-server +# Heyu - Docker mod for homeassistant -This mod adds rsync to openssh-server, to be installed/updated during container start. +This mod adds heyu to homeassistant, to be installed/updated during container start. -In openssh-server docker arguments, set an environment variable `DOCKER_MODS=linuxserver/mods:openssh-server-rsync` +In homeassistant docker arguments, set an environment variable `DOCKER_MODS=linuxserver/mods:homeassistant-heyu` -If adding multiple mods, enter them in an array separated by `|`, such as `DOCKER_MODS=linuxserver/mods:openssh-server-rsync|linuxserver/mods:openssh-server-mod2` +If adding multiple mods, enter them in an array separated by `|`, such as `DOCKER_MODS=linuxserver/mods:homeassistant-heyu|linuxserver/mods:homeassistant-hacs` -# Mod creation instructions +# Mod config instructions -* Fork the repo, create a new branch based on the branch `template`. -* Edit the `Dockerfile` for the mod. `Dockerfile.complex` is only an example and included for reference; it should be deleted when done. -* Inspect the `root` folder contents. Edit, add and remove as necessary. -* After all init scripts and services are created, run `find ./ -path "./.git" -prune -o \( -name "run" -o -name "finish" -o -name "check" \) -not -perm -u=x,g=x,o=x -print -exec chmod +x {} +` to fix permissions. -* Edit this readme with pertinent info, delete these instructions. -* Finally edit the `.github/workflows/BuildImage.yml`. Customize the vars for `BASEIMAGE` and `MODNAME`. Set the versioning logic and `MULTI_ARCH` if needed. -* Ask the team to create a new branch named `-`. Baseimage should be the name of the image the mod will be applied to. The new branch will be based on the `template` branch. -* Submit PR against the branch created by the team. - - -## Tips and tricks - -* Some images have helpers built in, these images are currently: - * [Openvscode-server](https://github.com/linuxserver/docker-openvscode-server/pull/10/files) - * [Code-server](https://github.com/linuxserver/docker-code-server/pull/95) +Heyu cannot be configured through the homeassistant interface. To configure heyu edit the config file at `/config/heyu/x10.conf` From 847f300669a4656513cddcbbbf08a3663ed0efb4 Mon Sep 17 00:00:00 2001 From: dcflachs Date: Mon, 1 Dec 2025 23:04:47 -0500 Subject: [PATCH 6/7] Update BuildImage.yml --- .github/workflows/BuildImage.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/BuildImage.yml b/.github/workflows/BuildImage.yml index 4715e563..c8341e59 100644 --- a/.github/workflows/BuildImage.yml +++ b/.github/workflows/BuildImage.yml @@ -12,8 +12,8 @@ on: env: GITHUB_REPO: "linuxserver/docker-mods" #don't modify ENDPOINT: "linuxserver/mods" #don't modify - BASEIMAGE: "replace_baseimage" #replace - MODNAME: "replace_modname" #replace + BASEIMAGE: "homeassistant" #replace + MODNAME: "heyu" #replace MOD_VERSION: ${{ inputs.mod_version }} #don't modify MULTI_ARCH: "true" #set to false if not needed From e06371437f58171a36628b87ea7e25447c111cc2 Mon Sep 17 00:00:00 2001 From: dcflachs Date: Wed, 31 Dec 2025 15:38:46 -0500 Subject: [PATCH 7/7] Download heyu .tar instead of .zip --- Dockerfile | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/Dockerfile b/Dockerfile index b8cecec8..af2fd702 100644 --- a/Dockerfile +++ b/Dockerfile @@ -15,10 +15,8 @@ RUN \ echo "**** get heyu source ****" && \ mkdir -p /build && \ cd /build && \ - curl -LsSo heyu.zip https://github.com/HeyuX10Automation/heyu/archive/${GIT_HASH}.zip && \ - unzip heyu.zip && \ - mv heyu-* heyu && \ - cd heyu && \ + curl -LsSo heyu.tar.gz https://github.com/HeyuX10Automation/heyu/archive/${GIT_HASH}.tar.gz && \ + tar --strip-components=1 -xf heyu.tar.gz && \ echo "**** building heyu ****" && \ ./configure --sysconfdir=/config/heyu/ && \ make && \