diff options
| -rwxr-xr-x | configure | 66 | ||||
| -rw-r--r-- | package/configure-snippets/configure_case_lines | 6 | ||||
| -rw-r--r-- | package/configure-snippets/configure_generate_configh | 40 | ||||
| -rw-r--r-- | package/configure-snippets/configure_generate_make | 7 | ||||
| -rw-r--r-- | package/configure-snippets/configure_help_install | 7 | ||||
| -rw-r--r-- | package/configure-snippets/configure_init_vars | 6 | ||||
| -rw-r--r-- | src/s6/s6-internal.h | 8 | ||||
| -rw-r--r-- | src/s6/s6.c | 9 | ||||
| -rw-r--r-- | src/s6/service_start.c | 24 |
9 files changed, 157 insertions, 16 deletions
@@ -25,7 +25,12 @@ Fine tuning of the installation directories: --includedir=DIR C header files [PREFIX/include] --sysconfdir=DIR global configuration files [PREFIX/etc] --pkgconfdir=DIR pkg-config .pc files [PREFIX/lib/pkgconfig] - + --scandir=DIR assume s6-svscan is running on DIR [s6li default|/run/service] + --livedir=DIR run s6-rc live directory in DIR [s6-rc default|/run/s6-rc] + --repodir=DIR s6-frontend working base [/var/lib/s6-frontend/repository] + --bootdir=DIR location of the bootable s6-rc compiled db [/etc/s6-rc] + --syspkgdir=DIR location of service files for distro packages [/usr/lib/s6-frontend/s6-rc/source] + --localpkgdir=DIR location of service files for local packages [/etc/s6-frontend/s6-rc/source] If no --prefix option is given, by default libdir (but not dynlibdir) will be /usr/lib, and includedir will be /usr/include. @@ -174,6 +179,12 @@ deplibpath='' vpaths='' vpathd='' build= +scandir= +livedir= +repodir=/var/lib/s6-frontend/s6-rc/repository +bootdir=/etc/s6-rc +syspkgdir=/usr/lib/s6-frontend/s6-rc/source +localpkgdir=/etc/s6-frontend/s6-rc/source usensss=false uses6li=true useutillinux=false @@ -217,6 +228,12 @@ for arg ; do --disable-slashpackage) sproot= ; slashpackage=false ;; --enable-absolute-paths|--enable-absolute-paths=yes) abspath=true ;; --disable-absolute-paths|--enable-absolute-paths=no) abspath=false ;; + --scandir=*) scandir=${arg#*=} ;; + --livedir=*) livedir=${arg#*=} ;; + --repodir=*) repodir=${arg#*=} ;; + --bootdir=*) bootdir=${arg#*=} ;; + --syspkgdir=*) syspkgdir=${arg#*=} ;; + --localpkgdir=*) localpkgdir=${arg#*=} ;; --enable-nsss|--enable-nsss=yes) usensss=true ;; --disable-nsss|--enable-nsss=no) usensss=false ;; --enable-s6li|--enable-s6li=yes) uses6li=true ;; @@ -542,6 +559,13 @@ else echo "MAYBEPTHREAD_LIB :=" fi +echo "SCANDIR := $scandir" +echo "LIVEDIR := $livedir" +echo "REPODIR := $repodir" +echo "BOOTDIR := $bootdir" +echo "SYSPKGDIR := $syspkgdir" +echo "LOCALPKGDIR := $localpkgdir" + if $adaemontools ; then echo "WRAP_DAEMONTOOLS := 1" else @@ -588,20 +612,52 @@ else fi echo "#define ${package_macro_name}_LIBEXECPREFIX \"$libexecdir/\"" echo "#define ${package_macro_name}_SYSCONFPREFIX \"$sysconfdir/\"" +echo "#undef ${package_macro_name}_USE_UTIL_LINUX" +if $useutillinux ; then + echo "#define ${package_macro_name}_USE_UTIL_LINUX" +fi + echo "#undef ${package_macro_name}_USE_S6LI" if $uses6li ; then echo "#define ${package_macro_name}_USE_S6LI" - echo "#include <s6-linux-init/config.h>" + echo '#include <s6-linux-init/config.h>' + scandirdefault='S6_LINUX_INIT_TMPFS "/" S6_LINUX_INIT_SCANDIR' +else + scandirdefault='"/run/service"' fi -echo "#undef ${package_macro_name}_USE_UTIL_LINUX" -if $useutillinux ; then - echo "#define ${package_macro_name}_USE_UTIL_LINUX" + +echo "#undef ${package_macro_name}_SCANDIR" +if test -n "$scandir" ; then + echo "#define ${package_macro_name}_SCANDIR \"$scandir\"" +else + echo "#define ${package_macro_name}_SCANDIR $scandirdefault" +fi + +echo "#undef ${package_macro_name}_LIVEDIR" +if test -n "$livedir" ; then + echo "#define ${package_macro_name}_LIVEDIR \"$livedir\"" +else + echo "#include <s6-rc/config.h>" + echo "#define ${package_macro_name}_LIVEDIR S6RC_LIVE_BASE" fi +echo "#undef ${package_macro_name}_REPODIR" +echo "#define ${package_macro_name}_REPODIR \"$repodir\"" + +echo "#undef ${package_macro_name}_BOOTDIR" +echo "#define ${package_macro_name}_BOOTDIR \"$bootdir\"" + +echo "#undef ${package_macro_name}_SYSPKGDIR" +echo "#define ${package_macro_name}_SYSPKGDIR \"$syspkgdir\"" + +echo "#undef ${package_macro_name}_LOCALPKGDIR" +echo "#define ${package_macro_name}_LOCALPKGDIR \"$localpkgdir\"" + echo "#undef ${package_macro_name}_WRAP_DAEMONTOOLS" if $adaemontools ; then echo "#define ${package_macro_name}_WRAP_DAEMONTOOLS" fi + echo "#undef ${package_macro_name}_WRAP_RUNIT" if $arunit ; then echo "#define ${package_macro_name}_WRAP_RUNIT" diff --git a/package/configure-snippets/configure_case_lines b/package/configure-snippets/configure_case_lines index be1fcb4..3d94ecc 100644 --- a/package/configure-snippets/configure_case_lines +++ b/package/configure-snippets/configure_case_lines @@ -1,3 +1,9 @@ + --scandir=*) scandir=${arg#*=} ;; + --livedir=*) livedir=${arg#*=} ;; + --repodir=*) repodir=${arg#*=} ;; + --bootdir=*) bootdir=${arg#*=} ;; + --syspkgdir=*) syspkgdir=${arg#*=} ;; + --localpkgdir=*) localpkgdir=${arg#*=} ;; --enable-nsss|--enable-nsss=yes) usensss=true ;; --disable-nsss|--enable-nsss=no) usensss=false ;; --enable-s6li|--enable-s6li=yes) uses6li=true ;; diff --git a/package/configure-snippets/configure_generate_configh b/package/configure-snippets/configure_generate_configh index 8161153..70f56a6 100644 --- a/package/configure-snippets/configure_generate_configh +++ b/package/configure-snippets/configure_generate_configh @@ -1,17 +1,49 @@ +echo "#undef ${package_macro_name}_USE_UTIL_LINUX" +if $useutillinux ; then + echo "#define ${package_macro_name}_USE_UTIL_LINUX" +fi + echo "#undef ${package_macro_name}_USE_S6LI" if $uses6li ; then echo "#define ${package_macro_name}_USE_S6LI" - echo "#include <s6-linux-init/config.h>" + echo '#include <s6-linux-init/config.h>' + scandirdefault='S6_LINUX_INIT_TMPFS "/" S6_LINUX_INIT_SCANDIR' +else + scandirdefault='"/run/service"' fi -echo "#undef ${package_macro_name}_USE_UTIL_LINUX" -if $useutillinux ; then - echo "#define ${package_macro_name}_USE_UTIL_LINUX" + +echo "#undef ${package_macro_name}_SCANDIR" +if test -n "$scandir" ; then + echo "#define ${package_macro_name}_SCANDIR \"$scandir\"" +else + echo "#define ${package_macro_name}_SCANDIR $scandirdefault" +fi + +echo "#undef ${package_macro_name}_LIVEDIR" +if test -n "$livedir" ; then + echo "#define ${package_macro_name}_LIVEDIR \"$livedir\"" +else + echo "#include <s6-rc/config.h>" + echo "#define ${package_macro_name}_LIVEDIR S6RC_LIVE_BASE" fi +echo "#undef ${package_macro_name}_REPODIR" +echo "#define ${package_macro_name}_REPODIR \"$repodir\"" + +echo "#undef ${package_macro_name}_BOOTDIR" +echo "#define ${package_macro_name}_BOOTDIR \"$bootdir\"" + +echo "#undef ${package_macro_name}_SYSPKGDIR" +echo "#define ${package_macro_name}_SYSPKGDIR \"$syspkgdir\"" + +echo "#undef ${package_macro_name}_LOCALPKGDIR" +echo "#define ${package_macro_name}_LOCALPKGDIR \"$localpkgdir\"" + echo "#undef ${package_macro_name}_WRAP_DAEMONTOOLS" if $adaemontools ; then echo "#define ${package_macro_name}_WRAP_DAEMONTOOLS" fi + echo "#undef ${package_macro_name}_WRAP_RUNIT" if $arunit ; then echo "#define ${package_macro_name}_WRAP_RUNIT" diff --git a/package/configure-snippets/configure_generate_make b/package/configure-snippets/configure_generate_make index fc9bc0d..ddacd4a 100644 --- a/package/configure-snippets/configure_generate_make +++ b/package/configure-snippets/configure_generate_make @@ -6,6 +6,13 @@ else echo "MAYBEPTHREAD_LIB :=" fi +echo "SCANDIR := $scandir" +echo "LIVEDIR := $livedir" +echo "REPODIR := $repodir" +echo "BOOTDIR := $bootdir" +echo "SYSPKGDIR := $syspkgdir" +echo "LOCALPKGDIR := $localpkgdir" + if $adaemontools ; then echo "WRAP_DAEMONTOOLS := 1" else diff --git a/package/configure-snippets/configure_help_install b/package/configure-snippets/configure_help_install index 8b13789..73e2a96 100644 --- a/package/configure-snippets/configure_help_install +++ b/package/configure-snippets/configure_help_install @@ -1 +1,6 @@ - + --scandir=DIR assume s6-svscan is running on DIR [s6li default|/run/service] + --livedir=DIR run s6-rc live directory in DIR [s6-rc default|/run/s6-rc] + --repodir=DIR s6-frontend working base [/var/lib/s6-frontend/repository] + --bootdir=DIR location of the bootable s6-rc compiled db [/etc/s6-rc] + --syspkgdir=DIR location of service files for distro packages [/usr/lib/s6-frontend/s6-rc/source] + --localpkgdir=DIR location of service files for local packages [/etc/s6-frontend/s6-rc/source] diff --git a/package/configure-snippets/configure_init_vars b/package/configure-snippets/configure_init_vars index 20675cd..03ee8b6 100644 --- a/package/configure-snippets/configure_init_vars +++ b/package/configure-snippets/configure_init_vars @@ -1,3 +1,9 @@ +scandir= +livedir= +repodir=/var/lib/s6-frontend/s6-rc/repository +bootdir=/etc/s6-rc +syspkgdir=/usr/lib/s6-frontend/s6-rc/source +localpkgdir=/etc/s6-frontend/s6-rc/source usensss=false uses6li=true useutillinux=false diff --git a/src/s6/s6-internal.h b/src/s6/s6-internal.h index e269380..6616c87 100644 --- a/src/s6/s6-internal.h +++ b/src/s6/s6-internal.h @@ -54,12 +54,18 @@ struct global_s { unsigned int verbosity ; char const *scandir ; + char const *livedir ; + char const *repodir ; + uint8_t istty : 1 ; uint8_t color : 1 ; } ; #define GLOBAL_ZERO \ { \ .verbosity = 1, \ - .scandir = "/run/service", \ + .scandir = S6_FRONTEND_SCANDIR, \ + .livedir = S6_FRONTEND_LIVEDIR, \ + .repodir = S6_FRONTEND_REPODIR, \ + .istty = 0, \ .color = 0 \ } diff --git a/src/s6/s6.c b/src/s6/s6.c index 6a28448..9b6b88a 100644 --- a/src/s6/s6.c +++ b/src/s6/s6.c @@ -90,12 +90,13 @@ int main (int argc, char const *const *argv, char const *const *envp) if (golb & (1 << MAIN_GOLB_HELP)) help(argv) ; if (golb & ((1 << MAIN_GOLB_VERSION) | (1 << MAIN_GOLB_HELP))) return 0 ; - if (gola[MAIN_GOLA_SCANDIR]) strerr_warni("scandir is ", gola[MAIN_GOLA_SCANDIR]) ; - if (gola[MAIN_GOLA_LIVEDIR]) strerr_warni("livedir is ", gola[MAIN_GOLA_LIVEDIR]) ; - if (gola[MAIN_GOLA_REPODIR]) strerr_warni("repodir is ", gola[MAIN_GOLA_REPODIR]) ; + if (gola[MAIN_GOLA_SCANDIR]) g->scandir = gola[MAIN_GOLA_SCANDIR] ; + if (gola[MAIN_GOLA_LIVEDIR]) g->livedir = gola[MAIN_GOLA_LIVEDIR] ; + if (gola[MAIN_GOLA_REPODIR]) g->repodir = gola[MAIN_GOLA_REPODIR] ; { int force_color = 0 ; + g->istty = isatty(1) ; if (gola[MAIN_GOLA_COLOR]) { if (!strcmp(gola[MAIN_GOLA_COLOR], "yes")) @@ -111,7 +112,7 @@ int main (int argc, char const *const *argv, char const *const *envp) else if (strcmp(gola[MAIN_GOLA_COLOR], "auto")) strerr_dief1x(100, "--color value must be yes, no, or auto") ; } - if (!force_color) g->color = isatty(1) ; + if (!force_color) g->color = g->istty ; } if (!*argv) dieusage() ; diff --git a/src/s6/service_start.c b/src/s6/service_start.c index f9b5039..4b8c3a6 100644 --- a/src/s6/service_start.c +++ b/src/s6/service_start.c @@ -3,6 +3,9 @@ #include <skalibs/uint64.h> #include <skalibs/strerr.h> #include <skalibs/gol.h> +#include <skalibs/env.h> + +#include <s6-rc/config.h> #include "s6-internal.h" @@ -11,22 +14,41 @@ enum service_start_golb_e { + SERVICE_START_GOLB_DRYRUN, SERVICE_START_GOLB_WAIT, SERVICE_START_GOLB_N } ; -static gol_bool const service_start_golb[2] = +static gol_bool const service_start_golb[3] = { + { .so = 'n', .lo = "dryrun", .set = 1, .mask = 1 << SERVICE_START_GOLB_DRYRUN }, { .so = 'W', .lo = "nowait", .set = 0, .mask = 1 << SERVICE_START_GOLB_WAIT }, { .so = 'w', .lo = "wait", .set = 1, .mask = 1 << SERVICE_START_GOLB_WAIT } } ; int service_start (char const *const *argv) { + size_t argc = env_len(argv) ; uint64_t golb = 0 ; PROG = "s6 service start" ; argv += gol_argv(argv, service_start_golb, 0, 0, 0, &golb, 0) ; if (!argv) dieusage() ; + + { + size_t m = 0 ; + char const *newargv[10 + argc] ; + char fmtv[UINT_FMT] ; + + newargv[m++] = S6RC_EXTBINPREFIX "s6-rc" ; + newargv[m++] = "-v" ; + newargv[m++] = fmtv ; + fmtv[uint_fmt(fmtv, g->verbosity)] = 0 ; + if (golb & 1 << SERVICE_START_GOLB_DRYRUN) + { + newargv[m++] = "-n" ; + newargv[m++] = "1" ; + } + } return 0 ; } |
