aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rwxr-xr-xconfigure66
-rw-r--r--package/configure-snippets/configure_case_lines6
-rw-r--r--package/configure-snippets/configure_generate_configh40
-rw-r--r--package/configure-snippets/configure_generate_make7
-rw-r--r--package/configure-snippets/configure_help_install7
-rw-r--r--package/configure-snippets/configure_init_vars6
-rw-r--r--src/s6/s6-internal.h8
-rw-r--r--src/s6/s6.c9
-rw-r--r--src/s6/service_start.c24
9 files changed, 157 insertions, 16 deletions
diff --git a/configure b/configure
index 398a075..51474bb 100755
--- a/configure
+++ b/configure
@@ -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 ;
}