Browse Source

System-wide location for user services (#307)

Add default service directories for user instances

Add "/etc/dinit.d/user", "/usr/local/lib/dinit.d/user",  and "/usr/lib/dinit.d/user" as default directories for user instances. As usual, if an explicit path is given when dinit is started, these defaults are ignored.
realroot2185 1 month ago
parent
commit
a77acc962a
2 changed files with 12 additions and 5 deletions
  1. 6 4
      doc/manpages/dinit.8.m4
  2. 6 1
      src/options-processing.cc

+ 6 - 4
doc/manpages/dinit.8.m4

@@ -32,7 +32,8 @@ See \fBRUNNING AS SYSTEM MANAGER / PRIMARY INIT\fR.
 Dinit reads service descriptions from files located in a service
 description directory, normally one of \fI/etc/dinit.d\fR, \fI/run/dinit.d\fR,
 \fI/usr/local/lib/dinit.d\fR and \fI/lib/dinit.d\fR for the system instance
-or \fI$XDG_CONFIG_HOME/dinit.d\fR and \fI$HOME/.config/dinit.d\fR when run as a user process.
+or \fI$XDG_CONFIG_HOME/dinit.d\fR, \fI$HOME/.config/dinit.d\fR, \fI/etc/dinit.d/user\fR,
+\fI/usr/lib/dinit.d/user\fR and \fI/usr/local/lib/dinit.d/user\fR when run as a user process.
 See \fBSERVICE DESCRIPTION FILES\fR for details of the service description format.
 .\"
 .SH OPTIONS
@@ -42,9 +43,10 @@ Specifies \fIdir\fP as the directory containing service definition files.
 This can be specified multiple times for multiple service directories.
 The default directories are not searched for services when this option is provided.
 .sp
-If not specified, the default for the user instance is \fI$XDG_CONFIG_HOME/dinit.d\fR
-and \fI$HOME/.config/dinit.d\fR or, for the system instance, each of \fI/etc/dinit.d\fR,
-\fI/run/dinit.d/\fR, \fI/usr/local/lib/dinit.d\fR, and \fI/lib/dinit.d\fR (searched in that order).
+If not specified, the default for the user instance is \fI$XDG_CONFIG_HOME/dinit.d\fR, 
+\fI$HOME/.config/dinit.d\fR, \fI/etc/dinit.d/user\fR, \fI/usr/lib/dinit.d/user\fR and
+\fI/usr/local/lib/dinit.d/user\fR or, for the system instance, each of \fI/etc/dinit.d\fR, \fI/run/dinit.d/\fR,
+\fI/usr/local/lib/dinit.d\fR, and \fI/lib/dinit.d\fR (searched in that order).
 .TP
 \fB\-e\fR \fIfile\fP, \fB\-\-env\-file\fR \fIfile\fP
 Read initial environment from \fIfile\fP.

+ 6 - 1
src/options-processing.cc

@@ -76,7 +76,12 @@ void service_dir_opt::build_paths(bool am_system_init)
 
         done_user_home:
 
-        if (!home_service_dir_set) {
+        if (home_service_dir_set) {
+            service_dir_paths.emplace_back("/etc/dinit.d/user", /*dyn_allocd=*/false);
+            service_dir_paths.emplace_back("/usr/lib/dinit.d/user", /*dyn_allocd=*/false);
+            service_dir_paths.emplace_back("/usr/local/lib/dinit.d/user", /*dyn_allocd=*/false);
+        }
+        else {
             service_dir_paths.emplace_back("/etc/dinit.d", /*dyn_allocd=*/false);
             service_dir_paths.emplace_back("/run/dinit.d", false);
             service_dir_paths.emplace_back("/usr/local/lib/dinit.d", false);