summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--system/s6/APKBUILD49
-rw-r--r--system/s6/s6-svscanboot32
-rw-r--r--system/s6/s6.initd15
-rw-r--r--system/s6/s6.pre-install6
-rw-r--r--system/s6/s6.pre-upgrade6
-rw-r--r--system/s6/s6.trigger3
6 files changed, 111 insertions, 0 deletions
diff --git a/system/s6/APKBUILD b/system/s6/APKBUILD
new file mode 100644
index 000000000..77a123cd9
--- /dev/null
+++ b/system/s6/APKBUILD
@@ -0,0 +1,49 @@
+# Contributor: John Regan <john@jrjrtech.com>
+# Maintainer: Laurent Bercot <ska-devel@skarnet.org>
+pkgname=s6
+pkgver=2.7.1.1
+pkgrel=0
+pkgdesc="skarnet.org's small & secure supervision software suite"
+url="https://skarnet.org/software/$pkgname/"
+arch="all"
+options="!check" # No test suite.
+license="ISC"
+makedepends="skalibs-dev execline-dev"
+install="s6.pre-install s6.pre-upgrade"
+subpackages="$pkgname-dev $pkgname-doc $pkgname-openrc"
+triggers="s6.trigger=/run/service"
+source="https://skarnet.org/software/$pkgname/$pkgname-$pkgver.tar.gz
+ s6-svscanboot
+ s6.initd"
+
+
+build() {
+ cd "$builddir"
+ ./configure \
+ --enable-shared \
+ --enable-static \
+ --disable-allstatic \
+ --libdir=/usr/lib \
+ --libexecdir="/lib/$pkgname" \
+ --with-dynlib=/lib
+ make
+}
+
+package() {
+ cd "$builddir"
+ make DESTDIR="$pkgdir" install
+ cp -f "$srcdir/s6-svscanboot" "$pkgdir/lib/s6/s6-svscanboot"
+ mkdir -p "$pkgdir/etc/init.d"
+ cp -f "$srcdir/s6.initd" "$pkgdir/etc/init.d/s6"
+ chmod 0755 "$pkgdir/lib/s6/s6-svscanboot" "$pkgdir/etc/init.d/s6"
+}
+
+doc() {
+ default_doc
+ mkdir -p "$subpkgdir/usr/share/doc"
+ cp -a "$builddir/doc" "$subpkgdir/usr/share/doc/$pkgname"
+}
+
+sha512sums="59b0a611eaa0bbdeae3133a182e933e14806151d3b8d44c7f4258a63693cf2fa487fce91a4ea37527ed0f52f211a5391b3fcf6202773b0a80d6ce7f3de60ff79 s6-2.7.1.1.tar.gz
+871ca1f86b354b7c63ce1d3bef8794627e176f993144ed67a17d0a069f5ac2164d94aba980711f61ad349dcd4fe2bf928195f2121a75e611c9897d73f1af12a0 s6-svscanboot
+e7f4fcdc04fc7f72df4419018d048e14f80d50d01ebc284b6d208d6bada3201ca91be0a110930618a26fb0e6bcc1603de01467f6f1dc635c8dcae60f1a0b1b9b s6.initd"
diff --git a/system/s6/s6-svscanboot b/system/s6/s6-svscanboot
new file mode 100644
index 000000000..2b41d2916
--- /dev/null
+++ b/system/s6/s6-svscanboot
@@ -0,0 +1,32 @@
+#!/bin/execlineb -S1
+
+foreground { redirfd -w 2 /dev/null mkdir -p /run/uncaught-logs }
+if { chown catchlog:catchlog /run/uncaught-logs }
+if { chmod 2700 /run/uncaught-logs }
+foreground { redirfd -w 2 /dev/null mkdir -p ${1}/.s6-svscan ${1}/s6-svscan-log }
+foreground { redirfd -w 2 /dev/null ln -sf /bin/false ${1}/.s6-svscan/crash }
+if
+{
+ redirfd -w 1 ${1}/.s6-svscan/finish
+ heredoc 0 "#!/bin/execlineb -P\ns6-svc -X -- \"${1}/s6-svscan-log\"\n"
+ cat
+}
+if { chmod 0755 ${1}/.s6-svscan/finish }
+foreground { redirfd -w 2 /dev/null mkfifo -m 0600 ${1}/s6-svscan-log/fifo }
+if
+{
+ redirfd -w 1 ${1}/s6-svscan-log/run
+ heredoc 0 "#!/bin/execlineb -P
+redirfd -w 2 /dev/console
+redirfd -rnb 0 fifo
+s6-setuidgid catchlog
+exec -c
+s6-log t /run/uncaught-logs\n"
+ cat
+}
+if { chmod 0755 ${1}/s6-svscan-log/run }
+
+redirfd -r 0 /dev/null
+redirfd -wnb 1 ${1}/s6-svscan-log/fifo
+fdmove -c 2 1
+s6-svscan -St0 ${1}
diff --git a/system/s6/s6.initd b/system/s6/s6.initd
new file mode 100644
index 000000000..9f984cc13
--- /dev/null
+++ b/system/s6/s6.initd
@@ -0,0 +1,15 @@
+#!/sbin/openrc-run
+# Copyright 2016 Laurent Bercot
+# Distributed under the terms of the ISC License.
+#
+# We currently start the supervision tree under OpenRC because
+# it's easy integration. It's not perfect: the supervision tree
+# should ideally be rooted in process 1, and here it's not.
+# But it's only temporary: in a later Alpine release, s6-svscan
+# will *be* process 1.
+
+name="s6"
+command="/lib/s6/s6-svscanboot"
+command_args="/run/service"
+pidfile="/run/s6.pid"
+start_stop_daemon_args="-b -m -k 022"
diff --git a/system/s6/s6.pre-install b/system/s6/s6.pre-install
new file mode 100644
index 000000000..19804af6d
--- /dev/null
+++ b/system/s6/s6.pre-install
@@ -0,0 +1,6 @@
+#!/bin/sh
+
+addgroup -S catchlog 2>/dev/null
+adduser -S -D -H -s /bin/false -G catchlog -g catchlog catchlog 2>/dev/null
+echo 'Run "rc-update add s6 default" to automatically start a s6 supervision tree on /run/service at boot time.' 1>&2
+exit 0
diff --git a/system/s6/s6.pre-upgrade b/system/s6/s6.pre-upgrade
new file mode 100644
index 000000000..19804af6d
--- /dev/null
+++ b/system/s6/s6.pre-upgrade
@@ -0,0 +1,6 @@
+#!/bin/sh
+
+addgroup -S catchlog 2>/dev/null
+adduser -S -D -H -s /bin/false -G catchlog -g catchlog catchlog 2>/dev/null
+echo 'Run "rc-update add s6 default" to automatically start a s6 supervision tree on /run/service at boot time.' 1>&2
+exit 0
diff --git a/system/s6/s6.trigger b/system/s6/s6.trigger
new file mode 100644
index 000000000..8db8d9a5a
--- /dev/null
+++ b/system/s6/s6.trigger
@@ -0,0 +1,3 @@
+#!/bin/execlineb -P
+
+s6-svscanctl -aN /run/service