diff options
-rw-r--r-- | INSTALL | 10 | ||||
-rw-r--r-- | NEWS | 6 | ||||
-rw-r--r-- | doc/index.html | 12 | ||||
-rw-r--r-- | doc/upgrade.html | 15 | ||||
-rw-r--r-- | package/info | 2 | ||||
-rw-r--r-- | src/init/s6-linux-init-maker.c | 26 | ||||
-rw-r--r-- | src/init/s6-linux-init-telinit.c | 3 | ||||
-rw-r--r-- | src/init/s6-linux-init.c | 9 | ||||
-rw-r--r-- | src/shutdown/s6-linux-init-shutdownd.c | 14 |
9 files changed, 64 insertions, 33 deletions
@@ -6,11 +6,11 @@ Build Instructions - A Linux-based system with a standard C development environment - GNU make version 3.81 or later - - skalibs version 2.9.3.0 or later: https://skarnet.org/software/skalibs/ - - execline version 2.6.1.1 or later: https://skarnet.org/software/execline/ - - s6 version 2.9.2.0 or later: https://skarnet.org/software/s6/ - - Optional: nsss version 0.0.2.2 or later: https://skarnet.org/software/nsss/ - - Optional: utmps version 0.0.3.2 or later: https://skarnet.org/software/utmps/ + - skalibs version 2.10.0.0 or later: https://skarnet.org/software/skalibs/ + - execline version 2.7.0.0 or later: https://skarnet.org/software/execline/ + - s6 version 10.0.0.0 or later: https://skarnet.org/software/s6/ + - Optional: nsss version 0.0.2.3 or later: https://skarnet.org/software/nsss/ + - Optional: utmps version 0.0.3.3 or later: https://skarnet.org/software/utmps/ This software is Linux-specific. It will run on a Linux kernel, version 2.6.32 or later. However, it should not be too hard to port to @@ -1,5 +1,11 @@ Changelog for s6-linux-init. +In 1.0.5.2 +---------- + + - Bugfixes. + + In 1.0.5.1 ---------- diff --git a/doc/index.html b/doc/index.html index d9e9abb..81e7749 100644 --- a/doc/index.html +++ b/doc/index.html @@ -72,16 +72,16 @@ kernel command line </li> <li> A Linux-based system with a standard C development environment </li> <li> GNU make, version 3.81 or later </li> <li> <a href="//skarnet.org/software/skalibs/">skalibs</a> version -2.9.3.0 or later. It's a build-time requirement. It's also a run-time +2.10.0.0 or later. It's a build-time requirement. It's also a run-time requirement (for <a href="s6-linux-init-maker.html">s6-linux-init-maker</a>) as well as a boot-time requirement (i.e. a run-time requirement for the programs used when you boot a system created with <a href="s6-linux-init-maker.html">s6-linux-init-maker</a>) if you link against the shared version of the skalibs library. </li> <li> <a href="//skarnet.org/software/execline/">execline</a> version -2.6.1.1 or later. It is a build-time and boot-time requirement. </li> +2.7.0.0 or later. It is a build-time and boot-time requirement. </li> <li> <a href="//skarnet.org/software/s6/">s6</a> version -2.9.2.0 or later. It is a build-time and boot-time requirement. </li> +2.10.0.0 or later. It is a build-time and boot-time requirement. </li> </ul> <p> @@ -92,10 +92,10 @@ against the shared version of the skalibs library. </li> <li> If you're using <a href="https://www.musl-libc.org/">musl</a> and want nsswitch-like functionality: <a href="//skarnet.org/software/nsss/">nsss</a> version -0.0.2.2 or later (build-time and boot-time) </li> +0.0.2.3 or later (build-time and boot-time) </li> <li> If you want secure utmp functionality: <a href="//skarnet.org/software/utmps/">utmps</a> version -0.0.3.2 or later (build-time and boot-time) </li> +0.0.3.3 or later (build-time and boot-time) </li> </ul> <p> @@ -115,7 +115,7 @@ all the other packages against the <em>static</em> version of libskarnet. <ul> <li> The current released version of s6-linux-init is -<a href="s6-linux-init-1.0.5.1.tar.gz">1.0.5.1</a>. </li> +<a href="s6-linux-init-1.0.5.2.tar.gz">1.0.5.2</a>. </li> <li> Alternatively, you can checkout a copy of the <a href="//git.skarnet.org/cgi-bin/cgit.cgi/s6-linux-init/">s6-linux-init git repository</a>: diff --git a/doc/upgrade.html b/doc/upgrade.html index ff58afe..afa96fb 100644 --- a/doc/upgrade.html +++ b/doc/upgrade.html @@ -18,6 +18,21 @@ <h1> What has changed in s6-linux-init </h1> +<h2> in 1.0.5.2 </h2> + +<ul> + <li> <a href="//skarnet.org/software/skalibs/">skalibs</a> +dependency bumped to 2.10.0.0. </li> + <li> <a href="//skarnet.org/software/execline/">execline</a> +dependency bumped to 2.7.0.0. </li> + <li> <a href="//skarnet.org/software/s6/">s6</a> +dependency bumped to 2.10.0.0. </li> + <li> <a href="//skarnet.org/software/nsss/">nsss</a> +optional dependency bumped to 0.0.2.3. </li> + <li> <a href="//skarnet.org/software/utmps/">utmps</a> +optional dependency bumped to 0.0.3.3. </li> +</ul> + <h2> in 1.0.5.1 </h2> <ul> diff --git a/package/info b/package/info index a1011ec..14c665a 100644 --- a/package/info +++ b/package/info @@ -1,4 +1,4 @@ package=s6-linux-init -version=1.0.5.1 +version=1.0.5.2 category=admin package_macro_name=S6_LINUX_INIT diff --git a/src/init/s6-linux-init-maker.c b/src/init/s6-linux-init-maker.c index f858e5f..1e6de62 100644 --- a/src/init/s6-linux-init-maker.c +++ b/src/init/s6-linux-init-maker.c @@ -125,20 +125,20 @@ static int container_crash_script (buffer *b, char const *data) S6_LINUX_INIT_EXTBINPREFIX "s6-linux-init-hpr -fnp\n") >= 0 ; } -static int container_exit_script (buffer *b, char const *results) +static int container_exit_script (buffer *b, char const *data) { - return put_shebang_options(b, "-S0") + (void)data ; + return put_shebang(b) && buffer_puts(b, - EXECLINE_EXTBINPREFIX "ifelse -X { test $1 = halt }\n{\n " - S6_EXTBINPREFIX "s6-envdir -- ") >= 0 - && buffer_puts(b, results) >= 0 - && buffer_puts(b, "\n " - EXECLINE_EXTBINPREFIX "importas -D0 -- EXITCODE exitcode\n " - EXECLINE_EXTBINPREFIX "exit $EXITCODE\n}\n" - EXECLINE_EXTBINPREFIX "ifte -X\n { " - S6_LINUX_INIT_EXTBINPREFIX "s6-linux-init-hpr -fnr }\n { " + S6_EXTBINPREFIX "s6-envdir -- " S6_LINUX_INIT_TMPFS "/" CONTAINER_RESULTS "\n" + EXECLINE_EXTBINPREFIX "multisubstitute\n{\n" + " importas -uD0 -- EXITCODE exitcode\n " + " importas -uDh -- HALTCODE haltcode\n}\n" + EXECLINE_EXTBINPREFIX "ifelse -X { test $HALTCODE = r } { " + S6_LINUX_INIT_EXTBINPREFIX "s6-linux-init-hpr -fnr }\n" + EXECLINE_EXTBINPREFIX "ifelse -X { test $HALTCODE = p } { " S6_LINUX_INIT_EXTBINPREFIX "s6-linux-init-hpr -fnp }\n" - "test $1 = reboot\n") >= 0 ; + EXECLINE_EXTBINPREFIX "exit $EXITCODE\n") >= 0 ; } static int s6_svscan_log_script (buffer *b, char const *data) @@ -573,8 +573,8 @@ static inline void make_image (char const *base) if (inns) { - auto_script(base, "run-image/" SCANDIR "/.s6-svscan/crash", &container_crash_script, "") ; - auto_script(base, "run-image/" SCANDIR "/.s6-svscan/finish", &container_exit_script, S6_LINUX_INIT_TMPFS "/" CONTAINER_RESULTS) ; + auto_script(base, "run-image/" SCANDIR "/.s6-svscan/crash", &container_crash_script, 0) ; + auto_script(base, "run-image/" SCANDIR "/.s6-svscan/finish", &container_exit_script, 0) ; auto_dir(base, "run-image/" CONTAINER_RESULTS, 0, 0, 0755) ; auto_file(base, "run-image/" CONTAINER_RESULTS "/exitcode", "0\n", 2) ; } diff --git a/src/init/s6-linux-init-telinit.c b/src/init/s6-linux-init-telinit.c index cf05a7e..3c8d3fe 100644 --- a/src/init/s6-linux-init-telinit.c +++ b/src/init/s6-linux-init-telinit.c @@ -7,6 +7,7 @@ #include <skalibs/sgetopt.h> #include <skalibs/strerr2.h> #include <skalibs/djbunix.h> +#include <skalibs/exec.h> #include <s6/config.h> @@ -72,5 +73,5 @@ int main (int argc, char const *const *argv, char const *const *envp) newargv[2] = 0 ; } - xpathexec_run(newargv[0], newargv, envp) ; + xexec_e(newargv, envp) ; } diff --git a/src/init/s6-linux-init.c b/src/init/s6-linux-init.c index c68d0f9..9e2d86e 100644 --- a/src/init/s6-linux-init.c +++ b/src/init/s6-linux-init.c @@ -21,6 +21,7 @@ #include <skalibs/sig.h> #include <skalibs/env.h> #include <skalibs/djbunix.h> +#include <skalibs/exec.h> #include <s6/config.h> @@ -113,7 +114,7 @@ static inline void run_stage2 (char const *basedir, char const **argv, unsigned if (fd_copy(2, 1) == -1) strerr_diefu1sys(111, "fd_copy stdout to stderr") ; } - xpathexec_r(childargv, envp, envlen, modifs, modiflen) ; + xmexec_fm(childargv, envp, envlen, modifs, modiflen) ; } int main (int argc, char const **argv, char const *const *envp) @@ -131,7 +132,7 @@ int main (int argc, char const **argv, char const *const *envp) if (getpid() != 1) { argv[0] = S6_LINUX_INIT_BINPREFIX "s6-linux-init-telinit" ; - xpathexec_run(argv[0], argv, envp) ; + xexec_e(argv, envp) ; } { @@ -253,7 +254,7 @@ int main (int argc, char const **argv, char const *const *envp) size_t pathlen = path ? strlen(path) : 0 ; pid_t pid ; char fmtfd[2 + UINT_FMT] = "-" ; - char const *newargv[6] = { S6_EXTBINPREFIX "s6-svscan", "-st0", fmtfd, "--", S6_LINUX_INIT_TMPFS "/" SCANDIR, 0 } ; + char const *newargv[5] = { S6_EXTBINPREFIX "s6-svscan", fmtfd, "--", S6_LINUX_INIT_TMPFS "/" SCANDIR, 0 } ; char pathvar[6 + pathlen] ; if (path) { @@ -284,6 +285,6 @@ int main (int argc, char const **argv, char const *const *envp) if (fd_copy(2, 1) == -1) strerr_diefu1sys(111, "redirect output file descriptor") ; } - xpathexec_r(newargv, newenvp, !!path, envmodifs.s, envmodifs.len) ; + xmexec_fm(newargv, newenvp, !!path, envmodifs.s, envmodifs.len) ; } } diff --git a/src/shutdown/s6-linux-init-shutdownd.c b/src/shutdown/s6-linux-init-shutdownd.c index 5e681e1..b646b5c 100644 --- a/src/shutdown/s6-linux-init-shutdownd.c +++ b/src/shutdown/s6-linux-init-shutdownd.c @@ -43,6 +43,7 @@ #define DOTPREFIXLEN (sizeof(DOTPREFIX) - 1) #define DOTSUFFIX ":XXXXXX" #define DOTSUFFIXLEN (sizeof(DOTSUFFIX) - 1) +#define CONTAINERDIR S6_LINUX_INIT_TMPFS "/" CONTAINER_RESULTS #define USAGE "s6-linux-init-shutdownd [ -c basedir ] [ -g gracetime ] [ -C ] [ -B ]" #define dieusage() strerr_dieusage(100, USAGE) @@ -160,6 +161,14 @@ static inline void prepare_stage4 (char const *basedir, char what) int fd ; char buf[512] ; size_t sabase = satmp.len ; + if (inns) + { + char s[2] = { what, '\n' } ; + if (mkdir(CONTAINERDIR, 0755) < 0 && errno != EEXIST) + strerr_diefu1sys(111, "mkdir " CONTAINERDIR) ; + if (!openwritenclose_unsafe(CONTAINERDIR "/haltcode", s, 2)) + strerr_diefu1sys(111, "write to " CONTAINERDIR "/haltcode") ; + } unlink_void(STAGE4_FILE ".new") ; fd = open_excl(STAGE4_FILE ".new") ; if (fd == -1) strerr_diefu3sys(111, "open ", STAGE4_FILE ".new", " for writing") ; @@ -174,9 +183,8 @@ static inline void prepare_stage4 (char const *basedir, char what) || (!nologger && buffer_puts(&b, EXECLINE_EXTBINPREFIX "foreground { " S6_EXTBINPREFIX "s6-svc -Xh -- " SCANPREFIX LOGGER_SERVICEDIR " }\n ") < 0) - || buffer_puts(&b, S6_EXTBINPREFIX "s6-svscanctl -") < 0 - || buffer_put(&b, what == 'h' ? "s" : &what, 1) < 0 - || buffer_putsflush(&b, "b -- " SCANDIRFULL "\n}\n") < 0) + || buffer_puts(&b, + S6_EXTBINPREFIX "s6-svscanctl -b -- " SCANDIRFULL "\n}\n") < 0) strerr_diefu2sys(111, "write to ", STAGE4_FILE ".new") ; } else |