nosh 1.37 release
[archnosh.git] / misc.patch
blob2bf9845bd0e6f284402c097a719d684bf0b5b36f
1 diff --git a/source/convert/dbus-services.do b/source/convert/dbus-services.do
2 new file mode 100755
3 index 0000000..c435cfc
4 --- /dev/null
5 +++ b/source/convert/dbus-services.do
6 @@ -0,0 +1,136 @@
7 +#!/bin/sh -e
8 +## **************************************************************************
9 +## For copyright and licensing terms, see the file named COPYING.
10 +## **************************************************************************
11 +# vim: set filetype=sh:
13 +# Convert the Desktop Bus system-wide services.
14 +# This is invoked by all.do .
17 +case "`uname`" in
18 +Linux)
19 + redo-ifchange rc.conf
21 + # This gets us *only* the configuration variables, safely.
22 + read_rc() { clearenv read-conf rc.conf printenv "$1" ; }
24 + case "`read_rc os_version`" in
25 + arch:*) g=dbus ;;
26 + debian:*) g=messagebus ;;
27 + gentoo:*) g=messagebus ;;
28 + centos:*) g=dbus ;;
29 + rhel:*) g=dbus ;;
30 + *) echo 1>&2 "$0: Do not know the message bus group for your system." ; exec false ;;
31 + esac
32 + ;;
33 +*BSD) g=messagebus ;;
34 +*) echo 1>&2 "$0: Do not know the message bus group for your system." ; exec false ;;
35 +esac
37 +sr="/var/sv/"
38 +lr="/var/local/sv/"
39 +e="--no-systemd-quirks --escape-instance --bundle-root"
41 +allow_dbus_bus_activation() {
42 + rm -f -- "$1/service/down"
43 + install -d -m 0750 -- "$1/supervise"
44 + test -p "$1/supervise/control" || mkfifo -m 0600 -- "$1/supervise/control"
45 + setfacl -m "g:${g}:rx" "$1/supervise/" || setfacl -m "group:${g}:rx::allow" "$1/supervise/" || :
46 + setfacl -m "g:${g}:w" "$1/supervise/control" || setfacl -m "group:${g}:wp::allow" "$1/supervise/control" || :
49 +link_service_to_logger_service() {
50 + rm -f -- "${lr}/$1/log"
51 + ln -s -- "../$2" "${lr}/$1/log"
52 + rm -f -- "${lr}/$1/wants/log" "${lr}/$1/after/log"
53 + ln -s -- "../log" "${lr}/$1/wants/log"
54 + ln -s -- "../log" "${lr}/$1/after/log"
57 +redo-ifchange -- "${sr}/"
58 +allow_dbus_bus_activation "${sr}/cyclog@dbus"
60 +# Make .service source files for all system-wide Desktop Bus service definitions.
61 +# Then make service bundles from those.
62 +for p in /usr/local/share /usr/share /share
63 +do
64 + if ! test -e "$p"
65 + then
66 + redo-ifcreate "$p"
67 + continue
68 + fi
69 + redo-ifchange "$p"
70 + test -d "$p" || continue
71 + d="$p/dbus-1/system-services"
72 + if ! test -e "$d"
73 + then
74 + redo-ifcreate "$d"
75 + continue
76 + fi
77 + redo-ifchange "$d"
78 + test -d "$d" || continue
80 + find "$d/" -maxdepth 1 -name '*.service' -type f -print |
81 + while read -r i
82 + do
83 + basename "${i}" .service
84 + done
85 +done |
86 +awk '!x[$0]++' |
87 +while read -r i
88 +do
89 + test \! -d "${sr}/$i/" || continue
90 + case "${i}" in
91 + org.freedesktop.systemd[0-9]*) continue ;; # blacklisted
92 + org.freedesktop.network[0-9]*) continue ;; # blacklisted
93 + org.freedesktop.resolve[0-9]*) continue ;; # blacklisted
94 + esac
95 + redo-ifchange -- "dbus/$i.service"
96 + printf "dbus/%s\n" "$i" >> "$3"
97 + if test -L "${lr}/$i"
98 + then
99 + redo-ifchange -- "${lr}/$i"
100 + continue
101 + fi
102 + system-control convert-systemd-units $e "${lr}/" "./dbus/$i.service"
103 + install -d -m 0755 -- "${lr}/$i/service/env"
104 + link_service_to_logger_service "$i" "../../sv/cyclog@dbus"
105 + system-control preset "$i.service"
106 + allow_dbus_bus_activation "${lr}/$i"
107 + printf "/var/local/sv/%s\n" "$i" >> "$3"
108 +done
110 +# Make .service source files for all per-user Desktop Bus service definitions.
111 +# Per-user configuration import deals with making the actual service bundles.
112 +for p in /usr/local/share /usr/share /share
114 + if ! test -e "$p"
115 + then
116 + redo-ifcreate "$p"
117 + continue
118 + fi
119 + redo-ifchange "$p"
120 + test -d "$p" || continue
121 + d="$p/dbus-1/services"
122 + if ! test -e "$d"
123 + then
124 + redo-ifcreate "$d"
125 + continue
126 + fi
127 + redo-ifchange "$d"
128 + test -d "$d" || continue
130 + find "$d/" -maxdepth 1 -name '*.service' -type f -print |
131 + while read -r i
132 + do
133 + basename "${i}"
134 + done
135 +done |
136 +awk '!x[$0]++' |
137 +while read -r i
139 + printf "per-user/dbus/%s\n" "$i"
140 + printf "per-user/dbus/%s\n" "$i" >> "$3"
141 +done |
142 +xargs -r -- redo-ifchange --
143 diff --git a/source/convert/java-home.do b/source/convert/java-home.do
144 index 2acaff7..c47eff1 100755
145 --- a/source/convert/java-home.do
146 +++ b/source/convert/java-home.do
147 @@ -9,7 +9,7 @@
150 # These get us *only* the configuration variables, safely.
151 -read_rc() { clearenv read-conf rc.conf "`which printenv`" "$1" ; }
152 +read_rc() { clearenv read-conf rc.conf printenv "$1" ; }
154 redo-ifchange rc.conf general-services
156 @@ -201,23 +201,34 @@ default_home() {
158 list_jvms | nl -p >> "$3"
160 -l="/usr/local/etc/system-control/local-java-services"
161 -if ! test -e "${l}"
162 +if ! test -d /usr/local/etc
163 then
164 - cat >>"${l}" <<-EOT
165 - # Local services that need JAVA_HOME configured by external configuration import.
167 - # Lines are of the form:
168 - # default_home service-name
169 - # specific_home service-name version-list type-list manufacturer-list
171 - # Empty lists match everything.
172 - # versions are 1.6, 1.7, 1.8, and so on.
173 - # types are native and foreign.
174 - # manufacturers are openjdk, gnu, sun, and oracle.
176 - EOT
178 + redo-ifcreate /usr/local/etc
179 +elif ! test -d /usr/local/etc/system-control
180 +then
181 + redo-ifchange /usr/local/etc
182 + redo-ifcreate /usr/local/etc/system-control
183 +else
184 + redo-ifchange /usr/local/etc /usr/local/etc/system-control
186 + l="/usr/local/etc/system-control/local-java-services"
187 + if ! test -e "${l}"
188 + then
189 + cat >>"${l}" <<-EOT
190 + # Local services that need JAVA_HOME configured by external configuration import.
192 + # Lines are of the form:
193 + # default_home service-name
194 + # specific_home service-name version-list type-list manufacturer-list
196 + # Empty lists match everything.
197 + # versions are 1.6, 1.7, 1.8, and so on.
198 + # types are native and foreign.
199 + # manufacturers are openjdk, gnu, sun, and oracle.
201 + EOT
202 + fi
204 -redo-ifchange "${l}"
205 -. "${l}" >> "$3"
206 + redo-ifchange "${l}"
207 + . "${l}" >> "$3"
209 diff --git a/source/convert/per-user/at-spi-dbus-bus.service.do b/source/convert/per-user/at-spi-dbus-bus.service.do
210 index dc1ad31..46e18ee 100755
211 --- a/source/convert/per-user/at-spi-dbus-bus.service.do
212 +++ b/source/convert/per-user/at-spi-dbus-bus.service.do
213 @@ -3,17 +3,19 @@
214 ## For copyright and licensing terms, see the file named COPYING.
215 ## **************************************************************************
216 # vim:set filetype=sh:
218 +# This is run at binary package compile time to decide which service source file to use.
220 case "`uname`" in
221 Linux)
222 - redo-ifchange /etc/os-release
223 - # These get us *only* the operating system variables, safely.
224 - read_os() { /bin/exec clearenv read-conf /etc/os-release "`which printenv`" "$1" ; }
226 - case "`read_os ID`:`read_os VERSION_ID`" in
227 + redo-ifchange os_version
228 + read -r os_version < os_version
229 + case "${os_version}" in
230 arch:*) ext=arch-linux ;;
231 debian:*) ext=debian-linux ;;
232 centos:*) ext=redhat-linux ;;
233 rhel:*) ext=redhat-linux ;;
234 + gentoo:*) ext=redhat-linux ;;
235 *) ext=who ;;
236 esac
238 diff --git a/source/convert/per-user/gconfd.service.do b/source/convert/per-user/gconfd.service.do
239 index dc1ad31..46e18ee 100755
240 --- a/source/convert/per-user/gconfd.service.do
241 +++ b/source/convert/per-user/gconfd.service.do
242 @@ -3,17 +3,19 @@
243 ## For copyright and licensing terms, see the file named COPYING.
244 ## **************************************************************************
245 # vim:set filetype=sh:
247 +# This is run at binary package compile time to decide which service source file to use.
249 case "`uname`" in
250 Linux)
251 - redo-ifchange /etc/os-release
252 - # These get us *only* the operating system variables, safely.
253 - read_os() { /bin/exec clearenv read-conf /etc/os-release "`which printenv`" "$1" ; }
255 - case "`read_os ID`:`read_os VERSION_ID`" in
256 + redo-ifchange os_version
257 + read -r os_version < os_version
258 + case "${os_version}" in
259 arch:*) ext=arch-linux ;;
260 debian:*) ext=debian-linux ;;
261 centos:*) ext=redhat-linux ;;
262 rhel:*) ext=redhat-linux ;;
263 + gentoo:*) ext=redhat-linux ;;
264 *) ext=who ;;
265 esac
267 diff --git a/source/convert/per-user/per-user.conf.do b/source/convert/per-user/per-user.conf.do
268 index 806e245..b2a70f6 100755
269 --- a/source/convert/per-user/per-user.conf.do
270 +++ b/source/convert/per-user/per-user.conf.do
271 @@ -3,16 +3,18 @@
272 ## For copyright and licensing terms, see the file named COPYING.
273 ## **************************************************************************
274 # vim:set filetype=sh:
276 +# This is run at binary package compile time to decide which service source file to use.
278 case "`uname`" in
279 Linux)
280 - redo-ifchange /etc/os-release
281 - # These get us *only* the operating system variables, safely.
282 - read_os() { /bin/exec clearenv read-conf /etc/os-release "`which printenv`" "$1" ; }
284 - case "`read_os ID`:`read_os VERSION_ID`" in
285 + redo-ifchange os_version
286 + read -r os_version < os_version
287 + case "${os_version}" in
288 arch:*) ext=linux ;;
289 debian:[78]) ext=debian7-linux ;;
290 debian:*) ext=linux ;;
291 + gentoo:*) ext=linux ;;
292 centos:*) ext=linux ;;
293 rhel:*) ext=linux ;;
294 *) ext=who ;;
295 diff --git a/source/convert/per-user/services.do b/source/convert/per-user/services.do
296 index db82062..fda31c7 100755
297 --- a/source/convert/per-user/services.do
298 +++ b/source/convert/per-user/services.do
299 @@ -4,6 +4,10 @@
300 ## **************************************************************************
301 # vim:set filetype=sh:
303 +# This prototype is copied into every (real) user's system-control/convert directory.
305 +# This is run by the per-user external configuration import subsystem.
306 +# It is used to compile all of the service bundles from source.
308 eu="--etc-bundle --user"
309 e="--no-systemd-quirks --escape-instance --bundle-root"
310 @@ -24,7 +28,27 @@ redo_ifchange_follow() {
311 done
314 -user_simple_alias() {
315 +make_raw_service_bundle() {
316 + system-control convert-systemd-units $eu $e "$hs/" "./$1$2"
317 + install -d -m 0755 -- "$hs/$1/service/env"
320 +link_logger_service_to_log_directory() {
321 + rm -f -- "$hs/$2/main"
322 + ln -s -- "/var/log/user/$i/$1" "$hs/$2/main"
325 +make_target_aliases() {
326 + local t="$1"
327 + shift
328 + for s
329 + do
330 + rm -f -- "$ht/$s"
331 + ln -s -- "$t" "$ht/$s"
332 + done
335 +make_service_aliases() {
336 local t="$1"
337 shift
338 for s
339 @@ -34,7 +58,7 @@ user_simple_alias() {
340 done
343 -user_dbus_definition() {
344 +make_local_dbus_user_service_definitions() {
345 for s
347 if ! test -e "$hd/dbus-1/services/$s.service"
348 @@ -45,15 +69,10 @@ user_dbus_definition() {
349 done
352 -user_dbus_alias() {
353 - local t="$1"
354 +make_service_bundle_aliases_and_local_dbus_user_service_definitions() {
355 + make_service_aliases "$@"
356 shift
357 - for s
358 - do
359 - rm -f -- "$hs/$s"
360 - ln -s -- "$t" "$hs/$s"
361 - done
362 - user_dbus_definition "$@"
363 + make_local_dbus_user_service_definitions "$@"
366 user_display() {
367 @@ -63,15 +82,11 @@ user_display() {
371 -user_dbus() {
372 - if ! test -e "$hs/$1/service/env/DBUS_SESSION_BUS_ADDRESS"
373 - then
374 -# system-control set-service-env "$hs/$1" DBUS_SESSION_BUS_ADDRESS "unix:runtime=yes"
375 - system-control set-service-env "$hs/$1" DBUS_SESSION_BUS_ADDRESS "unix:path=/run/user/$i/bus"
376 - fi
377 +allow_dbus_bus_activation() {
378 + rm -f -- "$1/service/down"
381 -user_link_to_log() {
382 +link_service_to_logger_service() {
383 rm -f -- "$hs/$1/log"
384 ln -s -- "../$2" "$hs/$1/log"
385 rm -f -- "$hs/$1/wants/log" "$hs/$1/after/log"
386 @@ -79,105 +94,88 @@ user_link_to_log() {
387 ln -s -- "../log" "$hs/$1/after/log"
390 -user_socket_dbus_service() {
391 - redo_ifchange_follow "$1.socket" "$1.service"
392 - system-control convert-systemd-units $eu $e "$hs/" "./$1.socket"
393 - install -d -m 0755 -- "$hs/$1/service/env"
394 - user_link_to_log "$1" "dbus-servers-log"
395 - userenv system-control --user preset "$1.socket"
398 user_simple_dbus_service() {
399 redo_ifchange_follow "$1.service"
400 - system-control convert-systemd-units $eu $e "$hs/" "./$1.service"
401 - install -d -m 0755 -- "$hs/$1/service/env"
402 - user_link_to_log "$1" "dbus-servers-log"
403 - user_dbus "$1"
404 - user_dbus_alias "$@"
405 - userenv system-control --user preset "$1.service"
406 + make_raw_service_bundle "$1" ".service"
407 + link_service_to_logger_service "$1" "dbus-servers-log"
408 + make_service_bundle_aliases_and_local_dbus_user_service_definitions "$@"
409 + system-control --user preset "$1.service"
410 + allow_dbus_bus_activation "${hs}/$1"
413 user_simple_dbus_service_with_dedicated_logger() {
414 redo_ifchange_follow "$1.service" "cyclog@.service"
415 - system-control convert-systemd-units $eu $e "$hs/" "./$1.service"
416 - install -d -m 0755 -- "$hs/$1/service/env"
417 - system-control convert-systemd-units $eu $e "$hs/" "./cyclog@$1.service"
418 - install -d -m 0755 -- "$hs/cyclog@$1/service/env"
419 - rm -f -- "$hs/cyclog@$1/main"
420 - ln -s -- "/var/log/user/$i/$1" "$hs/cyclog@$1/main"
421 - user_link_to_log "$1" "cyclog@$1"
422 - user_dbus "$1"
423 - user_dbus_alias "$@"
424 - userenv system-control --user preset "$1.service"
425 - userenv system-control --user preset --prefix "cyclog@" "$1.service"
426 + make_raw_service_bundle "$1" ".service"
427 + make_raw_service_bundle "cyclog@$1" ".service"
428 + link_logger_service_to_log_directory "$1" "cyclog@$1"
429 + link_service_to_logger_service "$1" "cyclog@$1"
430 + make_service_bundle_aliases_and_local_dbus_user_service_definitions "$@"
431 + system-control --user preset "$1.service"
432 + system-control --user preset --prefix "cyclog@" "$1.service"
433 + allow_dbus_bus_activation "${hs}/$1"
436 user_socket_dbus_service_with_dedicated_logger() {
437 redo_ifchange_follow "$1.socket" "$1.service" "cyclog@.service"
438 - system-control convert-systemd-units $eu $e "$hs/" "./$1.socket"
439 - install -d -m 0755 -- "$hs/$1/service/env"
440 - system-control convert-systemd-units $eu $e "$hs/" "./cyclog@$1.service"
441 - install -d -m 0755 -- "$hs/cyclog@$1/service/env"
442 - rm -f -- "$hs/cyclog@$1/main"
443 - ln -s -- "/var/log/user/$i/$1" "$hs/cyclog@$1/main"
444 - user_link_to_log "$1" "cyclog@$1"
445 - user_dbus "$1"
446 - user_dbus_alias "$@"
447 - userenv system-control --user preset "$1.socket"
448 - userenv system-control --user preset --prefix "cyclog@" "$1.service"
449 + make_raw_service_bundle "$1" ".socket"
450 + make_raw_service_bundle "cyclog@$1" ".service"
451 + link_logger_service_to_log_directory "$1" "cyclog@$1"
452 + link_service_to_logger_service "$1" "cyclog@$1"
453 + make_service_bundle_aliases_and_local_dbus_user_service_definitions "$@"
454 + system-control --user preset "$1.socket"
455 + system-control --user preset --prefix "cyclog@" "$1.service"
456 + allow_dbus_bus_activation "${hs}/$1"
459 user_simple_service() {
460 redo_ifchange_follow "$1.service"
461 - system-control convert-systemd-units $eu $e "$hs/" "./$1.service"
462 - install -d -m 0755 -- "$hs/$1/service/env"
463 - user_link_to_log "$1" "simple-servers-log"
464 - user_simple_alias "$@"
465 - userenv system-control --user preset "$1.service"
466 + make_raw_service_bundle "$1" ".service"
467 + link_service_to_logger_service "$1" "simple-servers-log"
468 + make_service_aliases "$@"
469 + system-control --user preset "$1.service"
472 user_simple_socket() {
473 redo_ifchange_follow "$1.socket" "$1.service"
474 - system-control convert-systemd-units $eu $e "$hs/" "./$1.socket"
475 - install -d -m 0755 -- "$hs/$1/service/env"
476 - user_link_to_log "$1" "socket-servers-log"
477 - user_simple_alias "$@"
478 - userenv system-control --user preset "$1.socket"
479 + make_raw_service_bundle "$1" ".socket"
480 + link_service_to_logger_service "$1" "socket-servers-log"
481 + make_service_aliases "$@"
482 + system-control --user preset "$1.socket"
485 +user_dbus_socket() {
486 + redo_ifchange_follow "$1.socket" "$1.service"
487 + make_raw_service_bundle "$1" ".socket"
488 + link_service_to_logger_service "$1" "dbus-servers-log"
489 + system-control --user preset "$1.socket"
492 user_socket_with_dedicated_logger() {
493 redo_ifchange_follow "$1.socket" "$1.service" "cyclog@.service"
494 - system-control convert-systemd-units $eu $e "$hs/" "./$1.socket"
495 - install -d -m 0755 -- "$hs/$1/service/env"
496 - system-control convert-systemd-units $eu $e "$hs/" "./cyclog@$1.service"
497 - install -d -m 0755 -- "$hs/cyclog@$1/service/env"
498 - rm -f -- "$hs/cyclog@$1/main"
499 - ln -s -- "/var/log/user/$i/$1" "$hs/cyclog@$1/main"
500 - user_link_to_log "$1" "cyclog@$1"
501 - userenv system-control --user preset "$1.socket"
502 - userenv system-control --user preset --prefix "cyclog@" "$1.service"
503 + make_raw_service_bundle "$1" ".socket"
504 + make_raw_service_bundle "cyclog@$1" ".service"
505 + link_logger_service_to_log_directory "$1" "cyclog@$1"
506 + link_service_to_logger_service "$1" "cyclog@$1"
507 + system-control --user preset "$1.socket"
508 + system-control --user preset --prefix "cyclog@" "$1.service"
511 user_service_with_dedicated_logger() {
512 redo_ifchange_follow "$1.service" "cyclog@.service"
513 - system-control convert-systemd-units $eu $e "$hs/" "./$1.service"
514 - install -d -m 0755 -- "$hs/$1/service/env"
515 - system-control convert-systemd-units $eu $e "$hs/" "./cyclog@$1.service"
516 - install -d -m 0755 -- "$hs/cyclog@$1/service/env"
517 - rm -f -- "$hs/cyclog@$1/main"
518 - ln -s -- "/var/log/user/$i/$1" "$hs/cyclog@$1/main"
519 - user_link_to_log "$1" "cyclog@$1"
520 - userenv system-control --user preset "$1.service"
521 - userenv system-control --user preset --prefix "cyclog@" "$1.service"
522 + make_raw_service_bundle "$1" ".service"
523 + make_raw_service_bundle "cyclog@$1" ".service"
524 + link_logger_service_to_log_directory "$1" "cyclog@$1"
525 + link_service_to_logger_service "$1" "cyclog@$1"
526 + make_service_aliases "$@"
527 + system-control --user preset "$1.service"
528 + system-control --user preset --prefix "cyclog@" "$1.service"
531 user_fan_in_logger() {
532 redo_ifchange_follow "$1-log.service"
533 - system-control convert-systemd-units $eu $e "$hs/" "./$1-log.service"
534 - install -d -m 0755 -- "$hs/$1-log/service/env"
535 - rm -f -- "$hs/$1-log/main"
536 - ln -s -- "/var/log/user/$i/$1" "$hs/$1-log/main"
537 - userenv system-control --user preset "$1-log.service"
538 + make_raw_service_bundle "$1-log" ".service"
539 + link_logger_service_to_log_directory "$1" "$1-log"
540 + system-control --user preset "$1-log.service"
543 user_target() {
544 @@ -201,7 +199,7 @@ relocate_user_service() {
548 -user_log() {
549 +make_user_log_directories() {
550 for d
552 install -d -m 0750 "/var/log/user/$i/$d"
553 @@ -227,8 +225,6 @@ then
554 exec false
557 -setfacl -m "u:$i:rwx" "/var/log/user/$i/dbus" || setfacl -m "user:$i:rwxpD::allow" "/var/log/user/$i/dbus" || :
559 hd="$h/.local/share"
560 hh="$h/.cache"
561 hc="$h/.config"
562 @@ -243,51 +239,44 @@ install -d -m 0755 -- "$hs"
563 install -d -m 0755 -- "$hc/service-bundles/common"
564 install -d -m 0755 -- "$hc/service-bundles/common/env"
566 -for t in halt reboot poweroff
568 - rm -f -- "$ht/$t"
569 - ln -s -- "exit" "$ht/$t"
570 -done
571 +# system-wide external configuration import has already made the exit service bundle for us.
572 +make_target_aliases "exit" halt reboot poweroff
574 install -d -m 0755 -- "$hd/dbus-1"
575 install -d -m 0755 -- "$hd/dbus-1/services"
577 +# startup used to be called intrat.
578 test -d "$ht/startup" || test \! -d "$ht/intrat" || mv -f -- "$ht/intrat" "$ht/startup"
580 user_target "intrat"
581 -for t in sysinit basic
583 - rm -f -- "$ht/$t"
584 - ln -s -- "intrat" "$ht/$t"
585 -done
586 +make_target_aliases "intrat" sysinit basic
588 user_target "startup"
589 -for t in normal multi-user emergency rescue workstation server
591 - rm -f -- "$ht/$t"
592 - ln -s -- "startup" "$ht/$t"
593 -done
594 +make_target_aliases "startup" normal multi-user emergency rescue workstation server
596 user_target "shutdown"
597 user_target "sockets"
599 -user_log "dbus-servers" "socket-servers" "simple-servers"
600 +make_user_log_directories "dbus-servers" "socket-servers" "simple-servers"
601 user_fan_in_logger "dbus-servers"
602 user_fan_in_logger "socket-servers"
603 user_fan_in_logger "simple-servers"
604 -userenv system-control --user enable "dbus-servers-log"
605 -userenv system-control --user enable "socket-servers-log"
606 -userenv system-control --user enable "simple-servers-log"
607 +system-control --user enable "dbus-servers-log"
608 +system-control --user enable "socket-servers-log"
609 +system-control --user enable "simple-servers-log"
611 relocate_user_service "dbus" "dbus-daemon"
612 test -h "$hs/dbus" || ln -s "dbus-daemon" "$hs/dbus"
613 relocate_user_log "dbus" "dbus-daemon"
614 test -h "/var/log/user/$i/dbus" || ln -s "dbus-daemon" "/var/log/user/$i/dbus"
616 -user_socket_dbus_service "dbus-daemon"
617 +user_dbus_socket "dbus-daemon"
618 redo_ifchange_follow "per-user.conf"
619 test -r "$hs/dbus-daemon/service/per-user.conf" || install -m 0644 -- "per-user.conf" "$hs/dbus/service/per-user.conf"
621 +relocate_user_service "org.gnome.Weather.Application" "gnome-weather-application"
622 +relocate_user_service "org.gnome.Maps" "gnome-maps"
624 user_simple_dbus_service "at-spi-dbus-bus" "org.a11y.Bus"
625 user_simple_dbus_service "clock-applet" "org.mate.panel.applet.ClockAppletFactory"
626 user_simple_dbus_service "dconf-editor" "ca.desrt.dconf-editor"
627 @@ -299,9 +288,11 @@ user_simple_dbus_service "evolution-source-registry" "org.gnome.evolution.datase
628 user_simple_dbus_service "gconfd" "org.gnome.GConf"
629 user_simple_dbus_service "gedit" "org.gnome.gedit"
630 user_simple_dbus_service "gnome-keyring-daemon" "org.gnome.keyring" "org.freedesktop.secrets"
631 +user_simple_dbus_service "gnome-maps" "org.gnome.Maps"
632 user_simple_dbus_service "gnome-settings-daemon" "org.gnome.SettingsDaemon.XSettings"
633 user_simple_dbus_service "gnome-shell" "org.gnome.Shell"
634 user_simple_dbus_service "gnome-terminal-server" "org.gnome.Terminal"
635 +user_simple_dbus_service "gnome-weather-application" "org.gnome.Weather.Application"
636 user_simple_dbus_service "goa-daemon" "org.gnome.OnlineAccounts"
637 user_simple_dbus_service "goa-identity-service" "org.gnome.Identity"
638 user_simple_dbus_service "gvfs-afc-volume-monitor" "org.gtk.Private.AfcVolumeMonitor" "org.gtk.vfs.AfcVolumeMonitor"
639 @@ -320,8 +311,6 @@ user_simple_dbus_service "mate-notification-daemon" "org.freedesktop.mate.Notifi
640 user_simple_dbus_service "mate-screensaver" "org.mate.ScreenSaver"
641 user_simple_dbus_service "notification-area-applet" "org.mate.panel.applet.NotificationAreaAppletFactory"
642 user_simple_dbus_service "obex" "org.bluez.obex" "dbus-org.bluez.obex"
643 -user_simple_dbus_service "org.gnome.Maps"
644 -user_simple_dbus_service "org.gnome.Weather.Application"
645 user_simple_dbus_service "telepathy-mission-control-5" "org.freedesktop.Telepathy.AccountManager"
646 user_simple_dbus_service "wnck-applet" "org.mate.panel.applet.WnckletFactory"
647 user_simple_dbus_service "xdg-desktop-portal-gtk" "org.freedesktop.implo.portal.desktop.gtk"
648 @@ -362,24 +351,33 @@ do
649 printf "dbus/%s\n" "$i" >> "$3"
650 done
652 -user_dbus_definition "org.gnome.Maps"
653 -user_dbus_definition "org.gnome.Weather.Application"
654 -userenv system-control --user preset "zeitgeist-fts"
656 -user_display "org.gnome.Weather.Application" # The fact that the GNOME Weather server requires an X display at startup is a bug.
657 -user_display "org.gnome.Maps" # The fact that the GNOME Maps server requires an X display at startup is a bug.
658 +system-control --user preset "zeitgeist-fts"
660 test -e "$hc/service-bundles/common/env/DISPLAY" || system-control set-service-env "$hc/service-bundles/common" DISPLAY ":0"
661 +# We do not need to set a common DBUS_SESSION_BUS_ADDRESS because userenv in the service definitions will do that for us.
663 user_simple_socket "dirmngr"
664 user_simple_socket "gpg-agent"
665 user_simple_socket "urxvt" "urxvtd"
666 +user_simple_socket "watchman"
668 user_simple_service "emacs"
669 user_simple_service "gam_server"
670 user_simple_service "speech-dispatcher"
672 -user_log "mpd"
673 +make_user_log_directories "uscheduled"
674 +user_socket_with_dedicated_logger "uscheduled" "uschedule"
675 +if test -d "$h/.uschedule" &&
676 + test ! -e "$hc/uschedule"
677 +then
678 + mv -f -- "$h/.uschedule" "$hc/uschedule"
679 +else
680 + install -d -m 0700 -- "$hc/uschedule"
682 +test -e "$h/.uschedule" || ln -s -- ".config/uschedule" "$h/.uschedule"
683 +install -d -m 0700 -- "$hc/uschedule/commands"
685 +make_user_log_directories "mpd"
686 user_socket_with_dedicated_logger "mpd"
687 redo_ifchange_follow "mpd.conf"
688 test -r "$hs/mpd/service/mpd.conf" || install -m 0644 -- "mpd.conf" "$hs/mpd/service/mpd.conf"
689 @@ -391,9 +389,5 @@ test -r "$hd/mpd/database" || install -m 0755 -- /dev/null "$hd/mpd/database"
690 install -d -m 0755 -- "$hh/mpd"
691 test -r "$hh/mpd/state" || install -m 0755 -- /dev/null "$hh/mpd/state"
693 -user_log "pulseaudio"
694 +make_user_log_directories "pulseaudio"
695 user_socket_dbus_service_with_dedicated_logger "pulseaudio" "org.pulseaudio.Server"
697 -install -m 0444 -- /dev/null "$hc/service-bundles/do-not-generate"
699 -redo_ifchange_follow "$hc/service-bundles"
700 diff --git a/source/convert/rc.conf.do b/source/convert/rc.conf.do
701 index 88f6806..f64db9f 100755
702 --- a/source/convert/rc.conf.do
703 +++ b/source/convert/rc.conf.do
704 @@ -10,8 +10,8 @@ freenas_db="/data/freenas-v1.db"
705 default_rc="/etc/defaults/rc.conf"
707 # This gets us *only* the variables, safely.
708 -read_variable() { clearenv read-conf "$1" "`which printenv`" "$2" ; }
709 -read_optional_variable() { read_variable "$1" "$2" || echo "$3" ; }
710 +read_variable() { clearenv read-conf "$1" printenv "$2" ; }
711 +read_optional_variable() { clearenv setenv "$2" "$3" read-conf "$1" printenv "$2" ; }
713 case "`uname`" in
714 Linux) extended_regexp="-r" ;;
715 @@ -530,7 +530,8 @@ convert_linux() {
716 local m
717 local os_version
719 - os_version="`read_variable \"$1\" ID`:`read_optional_variable \"$1\" VERSION_ID '*'`"
720 + os_version="`read_optional_variable \"$1\" ID linux`:`read_optional_variable \"$1\" VERSION_ID '*'`"
721 + printf "os_version=\"%s\"\n" "${os_version}"
723 #####
724 # Stuff that can be overriden by explicit lines in rc.conf comes first.
725 diff --git a/source/convert/user-services.do b/source/convert/user-services.do
726 index 4a35ffb..d89e27c 100755
727 --- a/source/convert/user-services.do
728 +++ b/source/convert/user-services.do
729 @@ -8,27 +8,38 @@
730 # This is invoked by all.do .
733 -redo-ifchange /etc/passwd "user-dbus-daemon@.socket" "user-dbus-daemon.service" "user-dbus-broker@.socket" "user-dbus-broker.service" "user-dbus-log@.service" "user-services.service" "user-services@.socket" "user-runtime@.service" "run-user-directory@.service" "user@.target" "per-user/exit.target" "per-user/per-user.conf"
735 lr="/var/local/sv/"
736 sr="/etc/service-bundles/services/"
737 tr="/etc/service-bundles/targets/"
738 eu="--etc-bundle --user"
739 e="--no-systemd-quirks --escape-instance --bundle-root"
741 -redo-ifchange /etc/passwd
742 +case "`uname`" in
743 +FreeBSD)
744 + if test -r /etc/spwd.db
745 + then
746 + redo-ifchange /etc/spwd.db
747 + else
748 + redo-ifchange /etc/pwd.db
749 + fi
750 + ;;
751 +Linux|*) redo-ifchange /etc/passwd ;;
752 +esac
754 +redo-ifchange "user-dbus-daemon@.socket" "user-dbus-daemon.service" "user-dbus-broker@.socket" "user-dbus-broker.service" "user-dbus-log@.service" "user-services.service" "user-services@.socket" "user-runtime@.service" "run-user-directory@.service" "user@.target" "per-user/exit.target" "per-user/per-user.conf" "per-user/all.do" "per-user/default.do" "per-user/home.do" "per-user/user.do" "per-user/config-path.do" "per-user/services.do"
756 getent passwd |
757 awk -F : '{ if (!match($7,"/nologin$")) print $1; }' |
758 while read -r i
760 - # On systems that don't set nologin/false as the shell, there is nothing distinguishing "system" accounts from accounts that temporarily have their password disabled.
761 + # On systems that don't set nologin as the shell, there is nothing distinguishing "system" accounts from accounts that temporarily have their password disabled.
762 # As the manual page says, an account with a temporarily disabled password could still be used via SSH, and obviously one might want user Desktop Bus service for such a login.
763 case "$i" in
764 - bin|daemon|games|irc|mail|news|nobody|root|sync|sys|uucp|www-data|libuuid|backup|lp|saned|man|proxy|backup|list|gnats) continue ;;
765 + bin|daemon|nobody|root|toor|sync|sys|games|irc|mail|news|uucp|www-data|libuuid|backup|lp|saned|man|proxy|backup|list|gnats) continue ;;
766 alias|qmail[dlpqrs]|publicfile) continue ;;
767 - avahi|colord|dnsmasq|geoclue|lightdm|messagebus|sddm|systemd-*|uuidd) continue ;;
768 + avahi|colord|dnsmasq|geoclue|lightdm|messagebus|sddm|systemd-*|uuidd|cron) continue ;;
769 rtkit|*\\*) continue ;;
770 - toor) continue ;;
771 + *-log) continue ;;
772 esac
774 h="`getent passwd \"$i\" | awk -F : '{print $6;}'`"
775 @@ -48,6 +59,24 @@ do
776 done
778 test -n "$h" || continue
780 + # We don't want to be setting up things in certain directories, regardless of the account name.
781 + case "$h" in
782 + # Apparently some people have not received the wisdom of the 1990s, which moved the superuser's home to /root, and still make / a home directory for some users.
783 + /)
784 + printf "WARNING: Dangerous home directory %s for account %s\n" "$h" "$i" 1>&2
785 + printf "WARNING: Dangerous home directory %s for account %s\n" "$h" "$i" >> "$3"
786 + continue
787 + ;;
788 + # Most of these will be caught by the preceding well-known account names test; but better safe than sorry.
789 + # Allow subdirectories of /run, but not /run itself.
790 + /run|/dev|/dev/*|/proc|/proc/*|/sys|/sys/*|/bin|/sbin|/usr/bin|/usr/sbin|/usr/local/bin|/usr/local/sbin|/rescue|/rescue/*|/boot|/boot/*|/root|/root/*)
791 + printf "WARNING: Dangerous home directory %s for account %s\n" "$h" "$i" 1>&2
792 + printf "WARNING: Dangerous home directory %s for account %s\n" "$h" "$i" >> "$3"
793 + continue
794 + ;;
795 + esac
797 test -d "$h/" || continue
799 echo "per-user@$i: $h" >> "$3"
800 @@ -65,6 +94,7 @@ do
801 echo "user-dbus-log@$i" >> "$3"
802 rm -f -- "$lr/user-dbus-log@$i/main"
803 ln -s -- "/var/log/user/$i/dbus" "$lr/user-dbus-log@$i/main"
804 +# setfacl -m "u:$i:rwx" "/var/log/user/$i/dbus" || setfacl -m "user:$i:rwxpD::allow" "/var/log/user/$i/dbus" || :
806 # This is a system-level service that is disabled in favour of the user-level dbus service.
807 system-control convert-systemd-units $e "$lr/" "./user-dbus-daemon@$i.socket"
808 @@ -110,53 +140,27 @@ do
809 # ln -s -- "../user-log@$i" "$lr/run-user-directory@$i/log"
811 ht="$h/.config/service-bundles/targets"
812 - install -d -o "$i" -m 0755 -- "$ht"
813 - hv="$h/.config/service-bundles/convert"
814 - install -d -o "$i" -m 0755 -- "$hv"
815 + setuidgid "$i" install -d -o "$i" -m 0755 -- "$ht"
817 # Yes, this service bundle is root-owned; we don't want users messing it up.
818 system-control convert-systemd-units $eu $e "$ht/" "./per-user/exit.target"
819 install -d -o "$i" -m 0755 "$ht/exit/supervise"
820 echo "per-user@$i/exit" >> "$3"
822 + setuidgid "$i" install -d -o "$i" -m 0755 -- "$h/.config/system-control"
824 + hv="$h/.config/system-control/convert"
825 + if test ! -d "${hv}" && test -d "$h/.config/service-bundles/convert"
826 + then
827 + mv -- "$h/.config/service-bundles/convert" "${hv}"
828 + ln -s -- "../system-control/convert" "$h/.config/service-bundles/"
829 + fi
830 + setuidgid "$i" install -d -o "$i" -m 0755 -- "$hv"
831 for s in all default home config-path user services
833 test -e "${hv}/${s}.do" ||
834 setuidgid "$i" ln -f "per-user/${s}.do" "${hv}/" 2>/dev/null ||
835 - install -o "$i" -m 0755 "per-user/${s}.do" "${hv}/"
836 + setuidgid "$i" install -o "$i" -m 0755 "per-user/${s}.do" "${hv}/"
837 done
838 - redo-ifchange "${hv}"
839 echo "per-user@$i" >> "$3"
840 done
842 -for p in /usr/local/share /usr/share /share
844 - if ! test -e "$p"
845 - then
846 - redo-ifcreate "$p"
847 - continue
848 - fi
849 - redo-ifchange "$p"
850 - test -d "$p" || continue
851 - d="$p/dbus-1/services"
852 - if ! test -e "$d"
853 - then
854 - redo-ifcreate "$d"
855 - continue
856 - fi
857 - redo-ifchange "$d"
858 - test -d "$d" || continue
860 - find "$d/" -maxdepth 1 -name '*.service' -type f -print |
861 - while read -r i
862 - do
863 - basename "${i}"
864 - done
865 -done |
866 -awk '!x[$0]++' |
867 -while read -r i
869 - printf "per-user/dbus/%s\n" "$i"
870 - printf "per-user/dbus/%s\n" "$i" >> "$3"
871 -done |
872 -xargs -- redo-ifchange --
873 diff --git a/source/services/dbus-broker.service.do b/source/services/dbus-broker.service.do
874 index 2f2eda6..e4fbcc8 100755
875 --- a/source/services/dbus-broker.service.do
876 +++ b/source/services/dbus-broker.service.do
877 @@ -5,15 +5,14 @@
878 # vim: set filetype=sh:
879 case "`uname`" in
880 Linux)
881 - redo-ifchange /etc/os-release exec
882 - # These get us *only* the operating system variables, safely.
883 - read_os() { ./exec clearenv read-conf /etc/os-release "`which printenv`" "$1" ; }
885 - case "`read_os ID`:`read_os VERSION_ID`" in
886 + redo-ifchange os_version
887 + read -r os_version < os_version
888 + case "${os_version}" in
889 arch:*) ext=redhat-linux ;;
890 debian:*) ext=debian-linux ;;
891 centos:*) ext=redhat-linux ;;
892 rhel:*) ext=redhat-linux ;;
893 + gentoo:*) ext=debian-linux ;;
894 *) ext=who ;;
895 esac
897 diff --git a/source/services/dbus-daemon.service.do b/source/services/dbus-daemon.service.do
898 index 2f2eda6..f041915 100755
899 --- a/source/services/dbus-daemon.service.do
900 +++ b/source/services/dbus-daemon.service.do
901 @@ -5,13 +5,12 @@
902 # vim: set filetype=sh:
903 case "`uname`" in
904 Linux)
905 - redo-ifchange /etc/os-release exec
906 - # These get us *only* the operating system variables, safely.
907 - read_os() { ./exec clearenv read-conf /etc/os-release "`which printenv`" "$1" ; }
909 - case "`read_os ID`:`read_os VERSION_ID`" in
910 + redo-ifchange os_version
911 + read -r os_version < os_version
912 + case "${os_version}" in
913 arch:*) ext=redhat-linux ;;
914 debian:*) ext=debian-linux ;;
915 + gentoo:*) ext=debian-linux ;;
916 centos:*) ext=redhat-linux ;;
917 rhel:*) ext=redhat-linux ;;
918 *) ext=who ;;
919 diff --git a/source/services/exim4-smtp-relay@.service.do b/source/services/exim4-smtp-relay@.service.do
920 new file mode 100755
921 index 0000000..f041915
922 --- /dev/null
923 +++ b/source/services/exim4-smtp-relay@.service.do
924 @@ -0,0 +1,23 @@
925 +#!/bin/sh -e
926 +## **************************************************************************
927 +## For copyright and licensing terms, see the file named COPYING.
928 +## **************************************************************************
929 +# vim: set filetype=sh:
930 +case "`uname`" in
931 +Linux)
932 + redo-ifchange os_version
933 + read -r os_version < os_version
934 + case "${os_version}" in
935 + arch:*) ext=redhat-linux ;;
936 + debian:*) ext=debian-linux ;;
937 + gentoo:*) ext=debian-linux ;;
938 + centos:*) ext=redhat-linux ;;
939 + rhel:*) ext=redhat-linux ;;
940 + *) ext=who ;;
941 + esac
942 + ;;
943 +*BSD) ext=bsd ;;
944 +*) ext=who ;;
945 +esac
946 +redo-ifchange "$1.${ext}"
947 +ln -s -f "`basename \"$1\"`.${ext}" "$3"
948 diff --git a/source/services/exim4-smtp-submission@.service.do b/source/services/exim4-smtp-submission@.service.do
949 new file mode 100755
950 index 0000000..f041915
951 --- /dev/null
952 +++ b/source/services/exim4-smtp-submission@.service.do
953 @@ -0,0 +1,23 @@
954 +#!/bin/sh -e
955 +## **************************************************************************
956 +## For copyright and licensing terms, see the file named COPYING.
957 +## **************************************************************************
958 +# vim: set filetype=sh:
959 +case "`uname`" in
960 +Linux)
961 + redo-ifchange os_version
962 + read -r os_version < os_version
963 + case "${os_version}" in
964 + arch:*) ext=redhat-linux ;;
965 + debian:*) ext=debian-linux ;;
966 + gentoo:*) ext=debian-linux ;;
967 + centos:*) ext=redhat-linux ;;
968 + rhel:*) ext=redhat-linux ;;
969 + *) ext=who ;;
970 + esac
971 + ;;
972 +*BSD) ext=bsd ;;
973 +*) ext=who ;;
974 +esac
975 +redo-ifchange "$1.${ext}"
976 +ln -s -f "`basename \"$1\"`.${ext}" "$3"
977 diff --git a/source/services/system-wide.conf.do b/source/services/system-wide.conf.do
978 index 1a787e0..3126c25 100755
979 --- a/source/services/system-wide.conf.do
980 +++ b/source/services/system-wide.conf.do
981 @@ -5,16 +5,15 @@
982 # vim: set filetype=sh:
983 case "`uname`" in
984 Linux)
985 - redo-ifchange exec /etc/os-release
986 - # These get us *only* the operating system variables, safely.
987 - read_os() { ./exec clearenv read-conf /etc/os-release "`which printenv`" "$1" ; }
989 - case "`read_os ID`:`read_os VERSION_ID`" in
990 + redo-ifchange os_version
991 + read -r os_version < os_version
992 + case "${os_version}" in
993 arch:*) ext=arch-linux ;;
994 debian:[78]) ext=debian7-linux ;;
995 debian:*) ext=linux ;;
996 centos:*) ext=linux ;;
997 rhel:*) ext=linux ;;
998 + gentoo:*) ext=linux ;;
999 *) ext=who ;;
1000 esac
1002 diff --git a/source/systemd/system/service-manager.socket.do b/source/systemd/system/service-manager.socket.do
1003 new file mode 100755
1004 index 0000000..e4fbcc8
1005 --- /dev/null
1006 +++ b/source/systemd/system/service-manager.socket.do
1007 @@ -0,0 +1,23 @@
1008 +#!/bin/sh -e
1009 +## **************************************************************************
1010 +## For copyright and licensing terms, see the file named COPYING.
1011 +## **************************************************************************
1012 +# vim: set filetype=sh:
1013 +case "`uname`" in
1014 +Linux)
1015 + redo-ifchange os_version
1016 + read -r os_version < os_version
1017 + case "${os_version}" in
1018 + arch:*) ext=redhat-linux ;;
1019 + debian:*) ext=debian-linux ;;
1020 + centos:*) ext=redhat-linux ;;
1021 + rhel:*) ext=redhat-linux ;;
1022 + gentoo:*) ext=debian-linux ;;
1023 + *) ext=who ;;
1024 + esac
1025 + ;;
1026 +*BSD) ext=bsd ;;
1027 +*) ext=who ;;
1028 +esac
1029 +redo-ifchange "$1.${ext}"
1030 +ln -s -f "`basename \"$1\"`.${ext}" "$3"