commit b36fa44d554ceb9e9a481ad439e12712569082e9
parent 4ea0753f34ef66a4f2e71edbe83d0504d22a3485
Author: Robin Bron <robin.bron@yourhosting.nl>
Date: Thu, 1 Oct 2026 14:21:06 +0200
Supervise only enabled services, via runsvdir profiles
Diffstat:
7 files changed, 105 insertions(+), 24 deletions(-)
diff --git a/.conductor.yml b/.conductor.yml
@@ -122,7 +122,7 @@ tasks:
arch: [x86_64]
requires: [unos-sign-key]
script:
- - ./mk/check-revision.sh --channel edge base-files --pkgver 0.1.0-r7 --repo "$BUCKET_PUBLIC_URL" || { rc=$?; [ "$rc" = 1 ] && exit 0; exit "$rc"; }
+ - ./mk/check-revision.sh --channel edge base-files --pkgver 0.1.0-r8 --repo "$BUCKET_PUBLIC_URL" || { rc=$?; [ "$rc" = 1 ] && exit 0; exit "$rc"; }
- ./mk/channel-assemble.sh edge
- ./mk/bootstrap-host.sh
- ./mk/sysroot.sh --channel edge --arch "$ARCH" --repo "$BUCKET_PUBLIC_URL" base-files
@@ -332,7 +332,7 @@ tasks:
arch: [x86_64]
requires: [unos-sign-key]
script:
- - ./mk/check-revision.sh --channel edge linkd --pkgver 0.2.0-r1 --repo "$BUCKET_PUBLIC_URL" || { rc=$?; [ "$rc" = 1 ] && exit 0; exit "$rc"; }
+ - ./mk/check-revision.sh --channel edge linkd --pkgver 0.2.0-r2 --repo "$BUCKET_PUBLIC_URL" || { rc=$?; [ "$rc" = 1 ] && exit 0; exit "$rc"; }
- ./mk/channel-assemble.sh edge
- ./mk/bootstrap-host.sh
- ./mk/sysroot.sh --channel edge --arch "$ARCH" --repo "$BUCKET_PUBLIC_URL" linkd
@@ -360,7 +360,7 @@ tasks:
arch: [x86_64]
requires: [unos-sign-key]
script:
- - ./mk/check-revision.sh --channel edge tinyssh --pkgver 20260906-r4 --repo "$BUCKET_PUBLIC_URL" || { rc=$?; [ "$rc" = 1 ] && exit 0; exit "$rc"; }
+ - ./mk/check-revision.sh --channel edge tinyssh --pkgver 20260906-r5 --repo "$BUCKET_PUBLIC_URL" || { rc=$?; [ "$rc" = 1 ] && exit 0; exit "$rc"; }
- ./mk/channel-assemble.sh edge
- ./mk/bootstrap-host.sh
- ./mk/sysroot.sh --channel edge --arch "$ARCH" --repo "$BUCKET_PUBLIC_URL" tinyssh
@@ -393,6 +393,19 @@ tasks:
- ./mk/build.sh --channel edge unos-keys
- ./mk/publish.sh --channel edge --arch "$ARCH" unos-keys
+ pkg-edge-unos-services:
+ needs:
+ - check
+ arch: [x86_64]
+ requires: [unos-sign-key]
+ script:
+ - ./mk/check-revision.sh --channel edge unos-services --pkgver 0.1.0-r0 --repo "$BUCKET_PUBLIC_URL" || { rc=$?; [ "$rc" = 1 ] && exit 0; exit "$rc"; }
+ - ./mk/channel-assemble.sh edge
+ - ./mk/bootstrap-host.sh
+ - ./mk/sysroot.sh --channel edge --arch "$ARCH" --repo "$BUCKET_PUBLIC_URL" unos-services
+ - ./mk/build.sh --channel edge unos-services
+ - ./mk/publish.sh --channel edge --arch "$ARCH" unos-services
+
pkg-lts-glibc:
needs:
- check
@@ -468,7 +481,7 @@ tasks:
arch: [x86_64]
requires: [unos-sign-key]
script:
- - ./mk/check-revision.sh --channel lts base-files --pkgver 0.1.0-r7 --repo "$BUCKET_PUBLIC_URL" || { rc=$?; [ "$rc" = 1 ] && exit 0; exit "$rc"; }
+ - ./mk/check-revision.sh --channel lts base-files --pkgver 0.1.0-r8 --repo "$BUCKET_PUBLIC_URL" || { rc=$?; [ "$rc" = 1 ] && exit 0; exit "$rc"; }
- ./mk/channel-assemble.sh lts
- ./mk/bootstrap-host.sh
- ./mk/sysroot.sh --channel lts --arch "$ARCH" --repo "$BUCKET_PUBLIC_URL" base-files
@@ -678,7 +691,7 @@ tasks:
arch: [x86_64]
requires: [unos-sign-key]
script:
- - ./mk/check-revision.sh --channel lts linkd --pkgver 0.2.0-r1 --repo "$BUCKET_PUBLIC_URL" || { rc=$?; [ "$rc" = 1 ] && exit 0; exit "$rc"; }
+ - ./mk/check-revision.sh --channel lts linkd --pkgver 0.2.0-r2 --repo "$BUCKET_PUBLIC_URL" || { rc=$?; [ "$rc" = 1 ] && exit 0; exit "$rc"; }
- ./mk/channel-assemble.sh lts
- ./mk/bootstrap-host.sh
- ./mk/sysroot.sh --channel lts --arch "$ARCH" --repo "$BUCKET_PUBLIC_URL" linkd
@@ -706,7 +719,7 @@ tasks:
arch: [x86_64]
requires: [unos-sign-key]
script:
- - ./mk/check-revision.sh --channel lts tinyssh --pkgver 20260906-r4 --repo "$BUCKET_PUBLIC_URL" || { rc=$?; [ "$rc" = 1 ] && exit 0; exit "$rc"; }
+ - ./mk/check-revision.sh --channel lts tinyssh --pkgver 20260906-r5 --repo "$BUCKET_PUBLIC_URL" || { rc=$?; [ "$rc" = 1 ] && exit 0; exit "$rc"; }
- ./mk/channel-assemble.sh lts
- ./mk/bootstrap-host.sh
- ./mk/sysroot.sh --channel lts --arch "$ARCH" --repo "$BUCKET_PUBLIC_URL" tinyssh
@@ -739,6 +752,19 @@ tasks:
- ./mk/build.sh --channel lts unos-keys
- ./mk/publish.sh --channel lts --arch "$ARCH" unos-keys
+ pkg-lts-unos-services:
+ needs:
+ - check
+ arch: [x86_64]
+ requires: [unos-sign-key]
+ script:
+ - ./mk/check-revision.sh --channel lts unos-services --pkgver 0.1.0-r0 --repo "$BUCKET_PUBLIC_URL" || { rc=$?; [ "$rc" = 1 ] && exit 0; exit "$rc"; }
+ - ./mk/channel-assemble.sh lts
+ - ./mk/bootstrap-host.sh
+ - ./mk/sysroot.sh --channel lts --arch "$ARCH" --repo "$BUCKET_PUBLIC_URL" unos-services
+ - ./mk/build.sh --channel lts unos-services
+ - ./mk/publish.sh --channel lts --arch "$ARCH" unos-services
+
pkg-stable-glibc:
needs:
- check
@@ -814,7 +840,7 @@ tasks:
arch: [x86_64]
requires: [unos-sign-key]
script:
- - ./mk/check-revision.sh --channel stable base-files --pkgver 0.1.0-r7 --repo "$BUCKET_PUBLIC_URL" || { rc=$?; [ "$rc" = 1 ] && exit 0; exit "$rc"; }
+ - ./mk/check-revision.sh --channel stable base-files --pkgver 0.1.0-r8 --repo "$BUCKET_PUBLIC_URL" || { rc=$?; [ "$rc" = 1 ] && exit 0; exit "$rc"; }
- ./mk/channel-assemble.sh stable
- ./mk/bootstrap-host.sh
- ./mk/sysroot.sh --channel stable --arch "$ARCH" --repo "$BUCKET_PUBLIC_URL" base-files
@@ -1024,7 +1050,7 @@ tasks:
arch: [x86_64]
requires: [unos-sign-key]
script:
- - ./mk/check-revision.sh --channel stable linkd --pkgver 0.2.0-r1 --repo "$BUCKET_PUBLIC_URL" || { rc=$?; [ "$rc" = 1 ] && exit 0; exit "$rc"; }
+ - ./mk/check-revision.sh --channel stable linkd --pkgver 0.2.0-r2 --repo "$BUCKET_PUBLIC_URL" || { rc=$?; [ "$rc" = 1 ] && exit 0; exit "$rc"; }
- ./mk/channel-assemble.sh stable
- ./mk/bootstrap-host.sh
- ./mk/sysroot.sh --channel stable --arch "$ARCH" --repo "$BUCKET_PUBLIC_URL" linkd
@@ -1052,7 +1078,7 @@ tasks:
arch: [x86_64]
requires: [unos-sign-key]
script:
- - ./mk/check-revision.sh --channel stable tinyssh --pkgver 20260906-r4 --repo "$BUCKET_PUBLIC_URL" || { rc=$?; [ "$rc" = 1 ] && exit 0; exit "$rc"; }
+ - ./mk/check-revision.sh --channel stable tinyssh --pkgver 20260906-r5 --repo "$BUCKET_PUBLIC_URL" || { rc=$?; [ "$rc" = 1 ] && exit 0; exit "$rc"; }
- ./mk/channel-assemble.sh stable
- ./mk/bootstrap-host.sh
- ./mk/sysroot.sh --channel stable --arch "$ARCH" --repo "$BUCKET_PUBLIC_URL" tinyssh
@@ -1085,6 +1111,19 @@ tasks:
- ./mk/build.sh --channel stable unos-keys
- ./mk/publish.sh --channel stable --arch "$ARCH" unos-keys
+ pkg-stable-unos-services:
+ needs:
+ - check
+ arch: [x86_64]
+ requires: [unos-sign-key]
+ script:
+ - ./mk/check-revision.sh --channel stable unos-services --pkgver 0.1.0-r0 --repo "$BUCKET_PUBLIC_URL" || { rc=$?; [ "$rc" = 1 ] && exit 0; exit "$rc"; }
+ - ./mk/channel-assemble.sh stable
+ - ./mk/bootstrap-host.sh
+ - ./mk/sysroot.sh --channel stable --arch "$ARCH" --repo "$BUCKET_PUBLIC_URL" unos-services
+ - ./mk/build.sh --channel stable unos-services
+ - ./mk/publish.sh --channel stable --arch "$ARCH" unos-services
+
index-edge:
after:
- pkg-edge-glibc
@@ -1112,6 +1151,7 @@ tasks:
- pkg-edge-tinyssh
- pkg-edge-unos-firstboot
- pkg-edge-unos-keys
+ - pkg-edge-unos-services
arch: [x86_64]
requires: [unos-sign-key]
script:
@@ -1148,6 +1188,7 @@ tasks:
- pkg-lts-tinyssh
- pkg-lts-unos-firstboot
- pkg-lts-unos-keys
+ - pkg-lts-unos-services
arch: [x86_64]
requires: [unos-sign-key]
script:
@@ -1184,6 +1225,7 @@ tasks:
- pkg-stable-tinyssh
- pkg-stable-unos-firstboot
- pkg-stable-unos-keys
+ - pkg-stable-unos-services
arch: [x86_64]
requires: [unos-sign-key]
script:
diff --git a/channels/base/packages/base-files/files/rcS b/channels/base/packages/base-files/files/rcS
@@ -8,17 +8,23 @@ mkdir -p /dev/pts 2>/dev/null || true
mount -t devpts devpts /dev/pts -o gid=5,mode=620 2>/dev/null || mount -t devpts devpts /dev/pts 2>/dev/null || true
[ -c /dev/ptmx ] || mknod /dev/ptmx c 5 2 2>/dev/null || true
chmod 666 /dev/ptmx 2>/dev/null || true
-mkdir -p /run 2>/dev/null || true
+mkdir -p /run /tmp 2>/dev/null || true
+mount -t tmpfs tmpfs /run 2>/dev/null || true
+mount -t tmpfs tmpfs /tmp 2>/dev/null || true
+chmod 1777 /tmp 2>/dev/null || true
if [ -f /etc/hostname ]; then
hostname -F /etc/hostname 2>/dev/null || hostname unos 2>/dev/null || true
echo "rcS: hostname $(hostname 2>/dev/null || cat /etc/hostname)"
fi
-if [ -d /etc/sv ]; then
- echo "rcS: starting runsvdir"
- runsvdir /etc/sv &
-fi
-if [ -x /etc/sv/tinyssh/run ]; then
- echo "rcS: tinyssh will be supervised"
-else
- echo "rcS: no tinyssh service found"
-fi
+
+runlevel=default
+for arg in $(cat /proc/cmdline 2>/dev/null); do
+ [ -d "/etc/runit/runsvdir/${arg}" ] && runlevel="${arg}"
+done
+runsvchdir "${runlevel}"
+echo "rcS: runlevel ${runlevel}"
+
+mkdir -p /run/runit/runsvdir
+ln -s /etc/runit/runsvdir/current /run/runit/runsvdir/current
+echo "rcS: starting runsvdir"
+runsvdir -P /run/runit/runsvdir/current &
diff --git a/channels/base/packages/base-files/files/runsvchdir b/channels/base/packages/base-files/files/runsvchdir
@@ -0,0 +1,9 @@
+#!/bin/sh
+set -eu
+
+d=${1:?usage: runsvchdir <runlevel>}
+[ -d "/etc/runit/runsvdir/${d}" ] || {
+ echo "runsvchdir: no such runlevel: ${d}" >&2
+ exit 1
+}
+ln -sfn "${d}" /etc/runit/runsvdir/current
diff --git a/channels/base/packages/base-files/template b/channels/base/packages/base-files/template
@@ -1,7 +1,7 @@
# Template file for 'base-files'
pkgname=base-files
version=0.1.0
-revision=7
+revision=8
short_desc="UNOS filesystem skeleton - passwd, profile, nsswitch, fstab"
maintainer="finwo <finwo@pm.me>"
license="GPL-2.0-only"
@@ -27,6 +27,13 @@ do_install() {
vinstall ${FILESDIR}/os-release 644 etc
vinstall ${FILESDIR}/inittab 644 etc
vinstall ${FILESDIR}/rcS 755 etc/init.d rcS
+ vinstall ${FILESDIR}/runsvchdir 755 sbin runsvchdir
+ install -d "${DESTDIR}/etc/sv"
+ install -d "${DESTDIR}/etc/runit/runsvdir/default"
+ install -d "${DESTDIR}/etc/runit/runsvdir/single"
+ ln -sfn default "${DESTDIR}/etc/runit/runsvdir/current"
+ install -d "${DESTDIR}/var"
+ ln -sfn ../run/runit/runsvdir/current "${DESTDIR}/var/service"
vinstall ${FILESDIR}/network/ports 644 etc/network ports
vinstall ${FILESDIR}/network/interfaces 644 etc/network interfaces
vinstall ${FILESDIR}/network/interfaces.d/eth0.cnf 644 etc/network/interfaces.d eth0.cnf
@@ -35,8 +42,6 @@ do_install() {
install -d "${DESTDIR}/etc/network/ports.d"
install -d -m700 "${DESTDIR}/root"
install -d "${DESTDIR}/etc/ld.so.conf.d"
- # standard mount points (fstab references /run and /tmp; init mounts the
- # rest - the dirs must exist first)
install -d "${DESTDIR}/proc" "${DESTDIR}/sys" "${DESTDIR}/dev"
install -d "${DESTDIR}/dev/pts" "${DESTDIR}/tmp" "${DESTDIR}/run"
}
diff --git a/channels/base/packages/linkd/template b/channels/base/packages/linkd/template
@@ -1,7 +1,7 @@
# Template file for 'linkd'
pkgname=linkd
version=0.2.0
-revision=1
+revision=2
short_desc="Network interface manager - ifupdown replacement with RESP plugins"
maintainer="finwo <finwo@pm.me>"
license="GPL-2.0-only"
@@ -30,5 +30,7 @@ do_install() {
vinstall ${FILESDIR}/linkd-run 755 etc/sv/linkd run
vinstall ${FILESDIR}/linkd-check 755 etc/sv/linkd check
vinstall ${FILESDIR}/linkd-log-run 755 etc/sv/linkd/log run
+ ln -sfn /run/runit/supervise.linkd "${DESTDIR}/etc/sv/linkd/supervise"
+ ln -sfn /run/runit/supervise.linkd-log "${DESTDIR}/etc/sv/linkd/log/supervise"
install -d "${DESTDIR}/var/log/linkd"
}
diff --git a/channels/base/packages/tinyssh/template b/channels/base/packages/tinyssh/template
@@ -1,7 +1,7 @@
# Template file for 'tinyssh'
pkgname=tinyssh
version=20260906
-revision=4
+revision=5
short_desc="Small SSH server"
maintainer="finwo <finwo@pm.me>"
license="CC0-1.0"
@@ -39,6 +39,8 @@ do_install() {
vinstall ${FILESDIR}/tinyssh-run 755 etc/sv/tinyssh run
vinstall ${FILESDIR}/tinyssh-check 755 etc/sv/tinyssh check
vinstall ${FILESDIR}/tinyssh-log-run 755 etc/sv/tinyssh/log run
+ ln -sfn /run/runit/supervise.tinyssh "${DESTDIR}/etc/sv/tinyssh/supervise"
+ ln -sfn /run/runit/supervise.tinyssh-log "${DESTDIR}/etc/sv/tinyssh/log/supervise"
# owned (empty) so the keydir parent always exists; the run script also
# mkdir -p's defensively for wiped-state recovery
install -d "${DESTDIR}/etc/tinyssh"
diff --git a/channels/base/packages/unos-services/template b/channels/base/packages/unos-services/template
@@ -0,0 +1,15 @@
+# Template file for 'unos-services'
+pkgname=unos-services
+version=0.1.0
+revision=0
+short_desc="The set of services enabled on a fresh UNOS system"
+maintainer="finwo <finwo@pm.me>"
+license="GPL-2.0-only"
+homepage="https://unos.finwo.dev"
+depends="base-files linkd tinyssh"
+
+do_install() {
+ install -d "${DESTDIR}/etc/runit/runsvdir/default"
+ ln -sfn /etc/sv/linkd "${DESTDIR}/etc/runit/runsvdir/default/linkd"
+ ln -sfn /etc/sv/tinyssh "${DESTDIR}/etc/runit/runsvdir/default/tinyssh"
+}