system-config-init (3610B)
1 {% extends "genlinks" %} 2 {%- block script %} 3 #+{{pkg_install_name("busybox")}} 4 #+{{pkg_install_name("s6")}} 5 #+{{pkg_install_name("s6-rc")}} 6 #+{{pkg_install_name("s6-portable-utils")}} 7 #+{{pkg_install_name("s6-linux-init")}} 8 #+{{pkg_install_name("execline")}} 9 #+{{pkg_install_name("system-config-rc")}} 10 11 s6rcdb={{pkg_install_dir("system-config-rc")}}/config/s6-rc-db 12 prefix={{versions}}/$pthbs_package 13 pkgdir="$pthbs_destdir/$prefix" 14 15 q() { 16 "s6-quote" "$@" 17 } 18 19 qx() { 20 exe=$(realpath "$(which "$1")") 21 name=$(basename "$1") 22 if ! test -x "$exe"; then 23 printf 'Error: executable not found: %s\n' "$1" 24 fi 25 mkdir -p "$pkgdir/deps/command" 26 ln -sf $exe "$pkgdir/deps/command/$name" 27 "s6-quote" "$prefix/deps/command/$name" 28 } 29 30 # Generate init ($pkgdir must not exist but parent dir does) 31 mkdir -p "$pthbs_destdir/{{versions}}" 32 s6-linux-init-maker \ 33 -p "/run/current/command:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin" \ 34 -G "$(q "$prefix/deps/command/env") TERM=linux $(q "$prefix/deps/command/getty") 38400 tty9" \ 35 -t 1 \ 36 -N \ 37 -c "$prefix" \ 38 "$pkgdir" 39 40 41 # Link deps that are passed to s6-l-i-m 42 qx env 43 qx getty 44 45 # Link execlineb - can't quote shebang 46 qx execlineb 47 el=$prefix/deps/command/$name 48 49 # Rewrite bin/init as it fails finding it's own s6-linux-init 50 s6-cat >"$pkgdir/bin/init.new" <<EOF || exit $? 51 #!$el -S0 52 $(qx pthbs-enter) 53 $(qx s6-envdir) -I /run/current/env 54 EOF 55 s6-cat >>"$pkgdir/bin/init.new" <"$pkgdir/bin/init" 56 chmod +x "$pkgdir/bin/init.new" 57 mv -v "$pkgdir/bin/init.new" "$pkgdir/bin/init" 58 59 # Rewrite dynamically generated scripts 60 s6-cat >"$pkgdir/scripts/rc.init" <<EOF || exit $? 61 #!$el -S1 62 $(qx export) TERM "linux" 63 $(qx foreground) { $(qx s6-echo) "* Starting s6-rc from "$(q "$s6rcdb") } 64 $(qx if) { $(qx s6-rc-init) -d -c $(q "$s6rcdb") /run/service } 65 $prefix/scripts/runlevel \$1 66 EOF 67 68 s6-cat >"$pkgdir/scripts/rc.shutdown" <<EOF || exit $? 69 #!$el -P 70 71 ### Things to do before hardware halt/reboot/poweroff. 72 ### Ideally, it should be a single call to the service manager, 73 ### telling it to bring all the services down. 74 75 $(qx redirfd) -w 1 /dev/console 76 $(qx redirfd) -w 2 /dev/console 77 $(qx s6-rc) -v2 -bDa change 78 EOF 79 80 s6-cat >"$pkgdir/scripts/runlevel" <<EOF || exit $? 81 #!$el -S1 82 export TERM "linux" 83 84 # The requested runlevel is in "\$1" but currently ignored. 85 86 # Run the service manager. 87 # Call it twice because the first time may spuriously "timeout" 88 # due to the clock jumping forward. 89 90 $(qx ifelse) -X { 91 $(qx s6-rc) -v 2 -t 600000 -- change ok-all-but-tty 92 } { 93 # no timeout, start ttys properly 94 $(qx foreground) { $(qx s6-echo) "* System started normally (bundle ok-all-but-tty)" } 95 $(qx foreground) { sleep 0.3 } 96 $(qx foreground) { $(qx s6-svc) -d /run/service/console-log-tail } 97 $(qx s6-rc) -v 2 -t 600000 -- change ok-all 98 } 99 $(qx foreground) { $(qx s6-echo) "* System startup failure: retry" } 100 # try again without tty and then with 101 $(qx foreground) { $(qx s6-rc) -v 2 -t 600000 -- change ok-all-but-tty } 102 $(qx foreground) { $(qx sleep) 0.1 } 103 $(qx foreground) { $(qx s6-svc) -d /run/service/console-log-tail } 104 $(qx s6-rc) -v 2 -t 600000 -- change ok-all 105 EOF 106 107 s6-mkdir "$pkgdir/run-image/service/console-log-tail" || exit $? 108 s6-cat >"$pkgdir/run-image/service/console-log-tail/run" <<EOF || exit $? 109 #!$el -P 110 $(qx redirfd) -w 1 /dev/console 111 $(qx fdmove) -c 2 1 112 $(qx pipeline) -w { $(qx s6-tai64nlocal) } 113 $(qx tail) -F -n +1 /run/uncaught-logs/current 114 EOF 115 s6-chmod 755 "$pkgdir/run-image/service/console-log-tail/run" exit $? 116 117 {% endblock -%} 118 {% block genlinks_begin %} 119 x["./bin/init"]=1 120 x["./bin/halt"]=1 121 x["./bin/poweroff"]=1 122 x["./bin/reboot"]=1 123 {%- endblock %}