From c7e1be058db00addddadcca191d87cba48647e40 Mon Sep 17 00:00:00 2001 From: Luke Shumaker Date: Mon, 20 Aug 2018 11:56:11 -0400 Subject: add openrc support for osi-shell, build an openrc base image --- osi-mk.d/openrc-osi-shell.sh | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 osi-mk.d/openrc-osi-shell.sh (limited to 'osi-mk.d/openrc-osi-shell.sh') diff --git a/osi-mk.d/openrc-osi-shell.sh b/osi-mk.d/openrc-osi-shell.sh new file mode 100644 index 0000000..654cc31 --- /dev/null +++ b/osi-mk.d/openrc-osi-shell.sh @@ -0,0 +1,35 @@ +#!/hint/bash -euE +# Copyright (C) 2018 Luke Shumaker +# SPDX-License-Identifier: AGPL-3.0-or-later + +post_install+=(10:openrc-osi-shell:post_install) +openrc-osi-shell:post_install() { + local arg_mountpoint=$1 + + install -Dm755 /dev/stdin "${arg_mountpoint}/etc/osi-shell" <<-'EOT' + #!/bin/sh + # We can't use login(1) because it masks the exit status of the shell, + # but we want this to be a real local login with PAM, so use su(1), + # but trick in in to using login(1)'s PAM config. We undo this trick by + # using nsenter(1) to reset the mount namespace after we've done the PAM stuff. + # This hardcodes the shell as /bin/bash, which is the default for root. + unshare --mount -- sh -c 'mount --bind /etc/pam.d/login /etc/pam.d/su && exec -- su -c "exec nsenter --mount --target=1 -- setsid bash -l"' <>/dev/ttyS0 >&0 2>&0 + echo $? >/dev/ttyS1 + openrc-shutdown --poweroff + sleep infinity + EOT + + install -Dm755 /dev/stdin "${arg_mountpoint}/etc/init.d/osi-shell" <<-'EOT' + #!/usr/bin/openrc-run + + description="osi-shell service" + supervisor=supervise-daemon + command=/etc/osi-shell + pidfile="/run/${RC_SVCNAME}.pid" + + depend() { + after network-online + } + EOT + arch-chroot -- "$arg_mountpoint" rc-update add osi-shell default +} -- cgit v1.2.2