From 28a244874b7d3fe9edd0e28a945feb9f7d772391 Mon Sep 17 00:00:00 2001 From: aptalca Date: Sun, 25 Sep 2022 15:28:39 -0400 Subject: [PATCH] template update to s6 v2-v3 hybrid --- Dockerfile.complex | 18 +++++------ README.md | 2 ++ root/etc/cont-init.d/95-apt-get | 5 ++++ root/etc/cont-init.d/98-vpn-config | 1 - .../dependencies.d/init-mods | 0 .../run | 30 +++++++++++++++++++ .../type | 1 + .../init-mod-imagename-modname-add-package/up | 1 + .../dependencies.d/init-mods-package-install | 0 .../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-imagename-modname-add-package | 0 .../init-mod-imagename-modname-install | 0 .../user/contents.d/svc-mod-imagename-modname | 0 root/etc/services.d/sshvpn/run | 0 21 files changed, 66 insertions(+), 10 deletions(-) create mode 100644 root/etc/cont-init.d/95-apt-get create mode 100644 root/etc/s6-overlay/s6-rc.d/init-mod-imagename-modname-add-package/dependencies.d/init-mods create mode 100755 root/etc/s6-overlay/s6-rc.d/init-mod-imagename-modname-add-package/run create mode 100644 root/etc/s6-overlay/s6-rc.d/init-mod-imagename-modname-add-package/type create mode 100644 root/etc/s6-overlay/s6-rc.d/init-mod-imagename-modname-add-package/up create mode 100644 root/etc/s6-overlay/s6-rc.d/init-mod-imagename-modname-install/dependencies.d/init-mods-package-install create mode 100755 root/etc/s6-overlay/s6-rc.d/init-mod-imagename-modname-install/run create mode 100644 root/etc/s6-overlay/s6-rc.d/init-mod-imagename-modname-install/type create mode 100644 root/etc/s6-overlay/s6-rc.d/init-mod-imagename-modname-install/up create mode 100644 root/etc/s6-overlay/s6-rc.d/init-mods-end/dependencies.d/init-mod-imagename-modname-install create mode 100644 root/etc/s6-overlay/s6-rc.d/init-mods-package-install/dependencies.d/init-mod-imagename-modname-add-package create mode 100644 root/etc/s6-overlay/s6-rc.d/svc-mod-imagename-modname/dependencies.d/init-services create mode 100755 root/etc/s6-overlay/s6-rc.d/svc-mod-imagename-modname/run create mode 100644 root/etc/s6-overlay/s6-rc.d/svc-mod-imagename-modname/type create mode 100644 root/etc/s6-overlay/s6-rc.d/user/contents.d/init-mod-imagename-modname-add-package create mode 100644 root/etc/s6-overlay/s6-rc.d/user/contents.d/init-mod-imagename-modname-install create mode 100644 root/etc/s6-overlay/s6-rc.d/user/contents.d/svc-mod-imagename-modname mode change 100644 => 100755 root/etc/services.d/sshvpn/run diff --git a/Dockerfile.complex b/Dockerfile.complex index db4598e..d2c6b11 100644 --- a/Dockerfile.complex +++ b/Dockerfile.complex @@ -1,15 +1,15 @@ ## Buildstage ## -FROM ghcr.io/linuxserver/baseimage-alpine:3.12 as buildstage +FROM ghcr.io/linuxserver/baseimage-alpine:3.15 as buildstage RUN \ - echo "**** install packages ****" && \ - apk add --no-cache \ - curl && \ - echo "**** grab rclone ****" && \ - mkdir -p /root-layer && \ - curl -o \ - /root-layer/rclone.deb -L \ - "https://downloads.rclone.org/v1.47.0/rclone-v1.47.0-linux-amd64.deb" + echo "**** install packages ****" && \ + apk add --no-cache \ + curl && \ + echo "**** grab rclone ****" && \ + mkdir -p /root-layer && \ + curl -o \ + /root-layer/rclone.deb -L \ + "https://downloads.rclone.org/v1.47.0/rclone-v1.47.0-linux-amd64.deb" # copy local files COPY root/ /root-layer/ diff --git a/README.md b/README.md index 761c799..e2c84a5 100644 --- a/README.md +++ b/README.md @@ -11,6 +11,8 @@ If adding multiple mods, enter them in an array separated by `|`, such as `DOCKE * 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. +* The mod should be compatible with both s6v2 and s6v3 (until s6v2 based baseimages are deprecated). +* After all init scripts and services are created, run `find ./ -name run -exec chmod +x {} +; find ./ -name finish -exec chmod +x {} +` to fix permissions. * Edit this readme with pertinent info, delete these instructions. * Finally edit the `.github/workflows/BuildImage.yml`. Customize the build branch, and the vars for `BASEIMAGE` and `MODNAME`. * 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. diff --git a/root/etc/cont-init.d/95-apt-get b/root/etc/cont-init.d/95-apt-get new file mode 100644 index 0000000..8e5fe66 --- /dev/null +++ b/root/etc/cont-init.d/95-apt-get @@ -0,0 +1,5 @@ +#!/usr/bin/with-contenv bash + +if [ -f /usr/bin/apt ]; then + apt-get update +fi diff --git a/root/etc/cont-init.d/98-vpn-config b/root/etc/cont-init.d/98-vpn-config index a5f9127..98f2770 100644 --- a/root/etc/cont-init.d/98-vpn-config +++ b/root/etc/cont-init.d/98-vpn-config @@ -4,7 +4,6 @@ if [ ! -f /usr/local/lib/python***/dist-packages/sshuttle ] && \ [ -f /usr/bin/apt ]; then ## Ubuntu - apt-get update apt-get install --no-install-recommends -y \ iptables \ openssh-client \ 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/init-mod-imagename-modname-add-package/dependencies.d/init-mods new file mode 100644 index 0000000..e69de29 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 new file mode 100755 index 0000000..063b570 --- /dev/null +++ b/root/etc/s6-overlay/s6-rc.d/init-mod-imagename-modname-add-package/run @@ -0,0 +1,30 @@ +#!/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/type b/root/etc/s6-overlay/s6-rc.d/init-mod-imagename-modname-add-package/type new file mode 100644 index 0000000..3d92b15 --- /dev/null +++ b/root/etc/s6-overlay/s6-rc.d/init-mod-imagename-modname-add-package/type @@ -0,0 +1 @@ +oneshot \ No newline at end of file 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 new file mode 100644 index 0000000..6414139 --- /dev/null +++ b/root/etc/s6-overlay/s6-rc.d/init-mod-imagename-modname-add-package/up @@ -0,0 +1 @@ +/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/dependencies.d/init-mods-package-install b/root/etc/s6-overlay/s6-rc.d/init-mod-imagename-modname-install/dependencies.d/init-mods-package-install new file mode 100644 index 0000000..e69de29 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 new file mode 100755 index 0000000..59a4b77 --- /dev/null +++ b/root/etc/s6-overlay/s6-rc.d/init-mod-imagename-modname-install/run @@ -0,0 +1,8 @@ +#!/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 new file mode 100644 index 0000000..3d92b15 --- /dev/null +++ b/root/etc/s6-overlay/s6-rc.d/init-mod-imagename-modname-install/type @@ -0,0 +1 @@ +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 new file mode 100644 index 0000000..03d298d --- /dev/null +++ b/root/etc/s6-overlay/s6-rc.d/init-mod-imagename-modname-install/up @@ -0,0 +1 @@ +/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 new file mode 100644 index 0000000..e69de29 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 new file mode 100644 index 0000000..e69de29 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 new file mode 100644 index 0000000..e69de29 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 new file mode 100755 index 0000000..02ffe39 --- /dev/null +++ b/root/etc/s6-overlay/s6-rc.d/svc-mod-imagename-modname/run @@ -0,0 +1,7 @@ +#!/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 new file mode 100644 index 0000000..1780f9f --- /dev/null +++ b/root/etc/s6-overlay/s6-rc.d/svc-mod-imagename-modname/type @@ -0,0 +1 @@ +longrun \ No newline at end of file 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 new file mode 100644 index 0000000..e69de29 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 new file mode 100644 index 0000000..e69de29 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 new file mode 100644 index 0000000..e69de29 diff --git a/root/etc/services.d/sshvpn/run b/root/etc/services.d/sshvpn/run old mode 100644 new mode 100755