Compare commits
142 Commits
Author | SHA1 | Date | |
---|---|---|---|
![]() |
fea3b2675c | ||
![]() |
2dfb3ac0ad | ||
![]() |
fb924ced4f | ||
![]() |
7008745393 | ||
![]() |
5a93f2ca81 | ||
![]() |
3cd9f46117 | ||
![]() |
f88b0f4eac | ||
![]() |
1c6c1ff259 | ||
![]() |
f5217e18ef | ||
![]() |
051dacc843 | ||
![]() |
d3ec2f001e | ||
![]() |
0594295927 | ||
![]() |
95e074768e | ||
![]() |
dbc7e4d1af | ||
![]() |
4e1e004af7 | ||
![]() |
53bc1c3f84 | ||
![]() |
ea871d703a | ||
![]() |
2b6b36c265 | ||
![]() |
9acfccfad5 | ||
![]() |
32eaffc776 | ||
![]() |
de179883e4 | ||
![]() |
59f5925d6b | ||
![]() |
b5f41908b3 | ||
![]() |
a72258985a | ||
![]() |
9f81864f69 | ||
![]() |
571079581d | ||
![]() |
5153867c5c | ||
![]() |
3edf09f112 | ||
![]() |
7cceba59ba | ||
![]() |
f443c45b58 | ||
![]() |
a02517cd6c | ||
![]() |
780ccf8ccf | ||
![]() |
69b9f7ec7f | ||
![]() |
a0f3aa87f3 | ||
![]() |
2859cd5fa4 | ||
![]() |
a29d97570b | ||
![]() |
4e0a612d6c | ||
![]() |
426afc67cb | ||
![]() |
16f76d0e89 | ||
![]() |
3e198ee09d | ||
![]() |
157561ff1a | ||
![]() |
ee63627f34 | ||
![]() |
8aa20b50f3 | ||
![]() |
aaf133355a | ||
![]() |
69b64ba057 | ||
![]() |
376d28df6f | ||
![]() |
ca57ac6852 | ||
![]() |
c7b42d7b02 | ||
![]() |
9e6b8bf1b5 | ||
![]() |
a8a8109903 | ||
![]() |
3289c6c736 | ||
![]() |
1d17321c9a | ||
![]() |
f2ed6b08ac | ||
![]() |
8a2cd0bd2a | ||
![]() |
638a03632d | ||
![]() |
c1f8e69e31 | ||
![]() |
1188fd5a02 | ||
![]() |
66ff1cd25a | ||
![]() |
5dd10c21ab | ||
![]() |
f02e3e77f6 | ||
![]() |
c39d4eaa9f | ||
![]() |
5118d345f5 | ||
![]() |
0fdfb07785 | ||
![]() |
71c69a3712 | ||
![]() |
6e9aa207a9 | ||
![]() |
776956629c | ||
![]() |
9c398628df | ||
![]() |
1e3db3d992 | ||
![]() |
d734920302 | ||
![]() |
45228a409b | ||
![]() |
b05eb70a1a | ||
![]() |
f0e4ef7e71 | ||
![]() |
76bd850f2e | ||
![]() |
6a3223a718 | ||
![]() |
9c034c223c | ||
![]() |
08d073fe82 | ||
![]() |
aa834f05e4 | ||
![]() |
e4a337d82d | ||
![]() |
ef93123fc6 | ||
![]() |
96c517fbb6 | ||
![]() |
928bcb559f | ||
![]() |
e2d67d7c8c | ||
![]() |
a483e72826 | ||
![]() |
5aa4632678 | ||
![]() |
c7d9be62f8 | ||
![]() |
608df4bd47 | ||
![]() |
c32cc76462 | ||
![]() |
065c79b9ff | ||
![]() |
97f13d2f1a | ||
![]() |
983d28ae45 | ||
![]() |
1470fda317 | ||
![]() |
9e41be013b | ||
![]() |
b53a85ef5c | ||
![]() |
3790871455 | ||
![]() |
4aece292a1 | ||
![]() |
ce00a75a25 | ||
![]() |
473a622f41 | ||
![]() |
6dab7d1ff9 | ||
![]() |
aa34195b53 | ||
![]() |
15cb695a3e | ||
![]() |
9aa8671c09 | ||
![]() |
76e68327a6 | ||
![]() |
6f095a01e7 | ||
![]() |
b5162cd430 | ||
![]() |
95674ac04f | ||
![]() |
20c709697d | ||
![]() |
62e44763a1 | ||
![]() |
8b2f67c2bd | ||
![]() |
4db28f92ad | ||
![]() |
e994d4f8e0 | ||
![]() |
6679703194 | ||
![]() |
5a5798e699 | ||
![]() |
4c4aa196a3 | ||
![]() |
59103805ae | ||
![]() |
629e2a2693 | ||
![]() |
730c47503d | ||
![]() |
4a2ce7486b | ||
![]() |
4b516a60a3 | ||
![]() |
3ede7a7e1a | ||
![]() |
ecf880bbba | ||
![]() |
e078f81833 | ||
![]() |
2da29b1f89 | ||
![]() |
2229c16ccb | ||
![]() |
a973077e7c | ||
![]() |
c1462043c4 | ||
![]() |
8f488f90c2 | ||
![]() |
5b60188bd1 | ||
![]() |
6467aa9404 | ||
![]() |
ac5d797b7f | ||
![]() |
1360a70b56 | ||
![]() |
46e69c496d | ||
![]() |
22f0fca0fd | ||
![]() |
069c32c3c1 | ||
![]() |
36cf18ab0f | ||
![]() |
be97f38a80 | ||
![]() |
1b297934a6 | ||
![]() |
230d30ff1a | ||
![]() |
8a2027df08 | ||
![]() |
d2a83294e0 | ||
![]() |
a221f2dd22 | ||
![]() |
905d8f07b2 | ||
![]() |
244c0a4203 |
18
LICENSE
18
LICENSE
@@ -1,4 +1,14 @@
|
|||||||
# "THE BEERWARE LICENSE" (Revision 42):
|
Copyright (c) 2015-2017 Eric Vidal <eric@obarun.org>
|
||||||
# <eric@obarun.org> wrote this file. As long as you retain this notice you
|
All rights reserved.
|
||||||
# can do whatever you want with this stuff. If we meet some day, and you think
|
|
||||||
# this stuff is worth it, you can buy me a beer in return. Eric Vidal http://obarun.org
|
Permission to use, copy, modify, and/or distribute this software for any
|
||||||
|
purpose with or without fee is hereby granted, provided that the above
|
||||||
|
copyright notice and this permission notice appear in all copies.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
|
||||||
|
WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
|
||||||
|
MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
|
||||||
|
ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
|
||||||
|
WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
|
||||||
|
ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
|
||||||
|
OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||||
|
85
Makefile
Normal file
85
Makefile
Normal file
@@ -0,0 +1,85 @@
|
|||||||
|
# Makefile for s6-boot
|
||||||
|
|
||||||
|
VERSION = $$(git describe --tags| sed 's/-.*//g;s/^v//;')
|
||||||
|
PKGNAME = s6-boot
|
||||||
|
|
||||||
|
BINDIR_EXECLINE = /usr/local/bin
|
||||||
|
BINDIR = /usr/bin
|
||||||
|
|
||||||
|
CLASSIC = `find classic/ -type f`
|
||||||
|
DATA = `find data/scripts -type f`
|
||||||
|
RC = `find rc/ -type f`
|
||||||
|
FILESYSTEM = `find filesystem-env/ -type f`
|
||||||
|
ENV = `find env/ -type f`
|
||||||
|
|
||||||
|
DIRS= \
|
||||||
|
/usr/bin \
|
||||||
|
/etc/s6 \
|
||||||
|
/etc/s6/compiled \
|
||||||
|
/etc/s6/data/scripts \
|
||||||
|
/etc/s6/env \
|
||||||
|
/etc/s6/filesystem-env \
|
||||||
|
/etc/s6/rc \
|
||||||
|
/etc/s6/classic/service \
|
||||||
|
/etc/s6/classic/uncaught-logs \
|
||||||
|
/usr/share/zsh/site-functions \
|
||||||
|
/usr/share/licenses
|
||||||
|
|
||||||
|
install:
|
||||||
|
install -dm755 $(addprefix $(DESTDIR),$(DIRS))
|
||||||
|
|
||||||
|
for i in $(CLASSIC) $(RC) init stage2 stage2.tini stage3 poweroff reboot ; do \
|
||||||
|
sed -i 's,@BINDIR_EXECLINE@,$(BINDIR_EXECLINE),' $$i; \
|
||||||
|
done
|
||||||
|
|
||||||
|
for i in $(DATA) shutdown $(CLASSIC); do \
|
||||||
|
sed -i 's,@BINDIR@,$(BINDIR),' $$i; \
|
||||||
|
done
|
||||||
|
|
||||||
|
for i in $(CLASSIC); do \
|
||||||
|
install -Dm755 $$i $(DESTDIR)/etc/s6/$$i; \
|
||||||
|
done
|
||||||
|
|
||||||
|
for i in $(RC); do \
|
||||||
|
install -Dm644 $$i $(DESTDIR)/etc/s6/$$i; \
|
||||||
|
done
|
||||||
|
|
||||||
|
for i in $(FILESYSTEM); do \
|
||||||
|
install -Dm644 $$i $(DESTDIR)/etc/s6/$$i;\
|
||||||
|
done
|
||||||
|
|
||||||
|
for i in $(ENV); do \
|
||||||
|
install -m644 $$i $(DESTDIR)/etc/s6/$$i; \
|
||||||
|
done
|
||||||
|
|
||||||
|
rm $(DESTDIR)/etc/s6/classic/uncaught-logs/README
|
||||||
|
|
||||||
|
install -m755 data/scripts/s6.local $(DESTDIR)/etc/s6/data/scripts/s6.local
|
||||||
|
ln -sf /etc/s6/data/scripts/s6.local $(DESTDIR)/etc/s6.local
|
||||||
|
install -m755 data/scripts/user.sh $(DESTDIR)/etc/s6/data/scripts/user.sh
|
||||||
|
install -m755 data/scripts/modules.sh $(DESTDIR)/etc/s6/data/scripts/modules.sh
|
||||||
|
install -m755 data/scripts/tmpfiles.sh $(DESTDIR)/etc/s6/data/scripts/tmpfiles.sh
|
||||||
|
|
||||||
|
cp -P -a compiled/default $(DESTDIR)/etc/s6/compiled/default
|
||||||
|
ln -sf /etc/s6/compiled/default $(DESTDIR)/etc/s6/compiled/current
|
||||||
|
ln -sf /etc/s6/compiled/default $(DESTDIR)/etc/s6/compiled/previous
|
||||||
|
|
||||||
|
install -m755 init $(DESTDIR)/$(BINDIR)
|
||||||
|
for i in stage2 stage2.tini stage3 reboot shutdown poweroff; do \
|
||||||
|
install -m755 $$i $(DESTDIR)/etc/s6/$$i;\
|
||||||
|
done
|
||||||
|
ln -sf /etc/s6/poweroff $(DESTDIR)/$(BINDIR)
|
||||||
|
ln -sf /etc/s6/reboot $(DESTDIR)/$(BINDIR)
|
||||||
|
ln -sf /etc/s6/shutdown $(DESTDIR)/$(BINDIR)
|
||||||
|
|
||||||
|
install -m644 s6.conf $(DESTDIR)/etc/s6
|
||||||
|
ln -sf /etc/s6/s6.conf $(DESTDIR)/etc/s6.conf
|
||||||
|
|
||||||
|
install -m644 _s6-svc $(DESTDIR)/usr/share/zsh/site-functions
|
||||||
|
|
||||||
|
install -Dm644 LICENSE $(DESTDIR)/usr/share/licenses/$(PKGNAME)/LICENSE
|
||||||
|
|
||||||
|
version:
|
||||||
|
@echo $(VERSION)
|
||||||
|
|
||||||
|
.PHONY: install version
|
55
NEWS
Normal file
55
NEWS
Normal file
@@ -0,0 +1,55 @@
|
|||||||
|
Changelog for s6-boot
|
||||||
|
|
||||||
|
In 0.2.0
|
||||||
|
--------
|
||||||
|
|
||||||
|
- Bugs fix
|
||||||
|
- Improve udevd and udevadm service
|
||||||
|
- Umount NFS4 system if exist on stage2.tini
|
||||||
|
|
||||||
|
In 0.1.9
|
||||||
|
--------
|
||||||
|
|
||||||
|
- Bugs fix
|
||||||
|
|
||||||
|
In 0.1.8
|
||||||
|
--------
|
||||||
|
|
||||||
|
- add data/scripts/modules.sh : the variable MODULES at s6.conf was
|
||||||
|
removed. Modules are now loaded by this file with the rofs-modules
|
||||||
|
oneshot service which run the scripts data/scripts/modules.sh. This
|
||||||
|
scripts read, parse and load modules founded in files
|
||||||
|
/usr/lib/modules-load.d, /run/modules-load.d, and /etc/modules-load.d
|
||||||
|
the last supersedes the previous one.
|
||||||
|
- fix bug at rwfs-ip6tables at the shutdown process
|
||||||
|
- add rwfs-tmpfiles services : the file founded at /usr/lib/tmpfiles.d
|
||||||
|
is now parsed and applied at boot time. Those files create sub-directories
|
||||||
|
at /run directories.
|
||||||
|
- fix rwfs-end oneshot service
|
||||||
|
|
||||||
|
In 0.1.7
|
||||||
|
--------
|
||||||
|
|
||||||
|
- Pass to ISC license
|
||||||
|
- S6opts is now a dependences of s6-boot
|
||||||
|
- Rename boot-serv directory to classic
|
||||||
|
- Rename boot-rc-serv directory to rc
|
||||||
|
- Rename base-env directory to env :
|
||||||
|
- rename DESTBOOTSERV to DEST
|
||||||
|
- rename DESTRCSERV to DESTRC : this variable point now to /run/boot/rc
|
||||||
|
- rename SRCBOOTSERV to SRC : this variable point now to /etc/s6/classic
|
||||||
|
- rename SRCRCCOMPILED to SRCRC
|
||||||
|
- remove SRCRCSERV
|
||||||
|
- add HANDLE : point to /etc/s6/data/scripts to find user.sh scripts
|
||||||
|
- add TEMPLATE : point to /usr/share/obarun/s6opts/template to find supervison tree creation scheme
|
||||||
|
- Modify files in classic/.s6-svscan to reflect the change into env/ directory
|
||||||
|
- Modify files init, stage2, stage2.tini, poweroff, shutdown, reboot to reflect the change into env/ directory
|
||||||
|
- Simplify stage2.tini : random-seed and hwclock command is now made by down file of respectively services
|
||||||
|
- Use *.conf files at _s6-svc to define path for completion
|
||||||
|
- Remove all-Switch bundle, switch-{user,svscan,ready} rc service and replace it by adduser service:
|
||||||
|
- the supervision tree for root user is now created by adduser service calling data/scripts/user.sh to do it
|
||||||
|
- Remove s6-serv directory (added to s6opts)
|
||||||
|
- Add data/scripts/user.sh scripts : This scripts allow to create a supervison tree whatever the user calling it.
|
||||||
|
The scripts source {s6opts,service}.conf to define path, name of the different elements of the supervision tree.
|
||||||
|
- Add Makefile
|
||||||
|
- Block tty1 service until boot procedure is not fully operational.
|
10
README.md
10
README.md
@@ -1,3 +1,9 @@
|
|||||||
# s6-boot
|
# s6-boot
|
||||||
Boot files for s6
|
|
||||||
UNDER DEVELOPMENT, DO NOT USE FOR PRODUCTION
|
Obarun boot files for s6
|
||||||
|
|
||||||
|
For instructions about [S6 supervision suite.](https://skarnet.org/software/)
|
||||||
|
|
||||||
|
[Bug reports](https://forum.obarun.org)
|
||||||
|
|
||||||
|
|
||||||
|
29
_s6-svc
29
_s6-svc
@@ -1,17 +1,36 @@
|
|||||||
#compdef s6-svc
|
#compdef s6-svc
|
||||||
|
# Copyright (c) 2015-2017 Eric Vidal <eric@obarun.org>
|
||||||
|
# All rights reserved.
|
||||||
|
#
|
||||||
|
# This file is part of Obarun. It is subject to the license terms in
|
||||||
|
# the LICENSE file found in the top-level directory of this
|
||||||
|
# distribution and at https://github.com/Obarun/s6-boot/LICENSE
|
||||||
|
# This file may not be copied, modified, propagated, or distributed
|
||||||
|
# except according to the terms contained in the LICENSE file.
|
||||||
|
|
||||||
# completion for s6-svc
|
# completion for s6-svc
|
||||||
# Eric Vidal <eric@obarun.org>
|
# Change the path variable to suit your needs.
|
||||||
# services in /run/s6/service. Change the path variable to suit your needs.
|
|
||||||
|
|
||||||
path_dir=/run/s6/service
|
first_word=${${(z)BUFFER}[1]}
|
||||||
|
|
||||||
|
#overwrite config with user specification
|
||||||
|
|
||||||
|
if [[ $first_word == "sudo" ]] || [[ $first_word == "su" ]] || [[ $EUID == 0 ]]; then
|
||||||
|
source /etc/obarun/s6opts.conf
|
||||||
|
else
|
||||||
|
source $(getent passwd $(whoami)|cut -d : -f 6)/service/service.conf
|
||||||
|
fi
|
||||||
|
|
||||||
|
path_dir_boot=/run/boot/service
|
||||||
|
path_dir_user=${LIVE_CLASSIC_PATH}
|
||||||
|
|
||||||
typeset -A opt_args
|
typeset -A opt_args
|
||||||
|
|
||||||
_path() {
|
_path() {
|
||||||
local list_dir
|
local list_dir
|
||||||
list_dir=( $path_dir/* )
|
list_dir_boot=( $path_dir_boot/* )
|
||||||
compadd "$@" -a list_dir
|
list_dir_user=( $path_dir_user/* )
|
||||||
|
compadd "$@" -a list_dir_boot list_dir_root list_dir_user
|
||||||
}
|
}
|
||||||
|
|
||||||
_list_common=(
|
_list_common=(
|
||||||
|
15
classic/service/.s6-svscan/SIGHUP
Executable file
15
classic/service/.s6-svscan/SIGHUP
Executable file
@@ -0,0 +1,15 @@
|
|||||||
|
#!@BINDIR_EXECLINE@/execlineb -P
|
||||||
|
# Copyright (c) 2015-2017 Eric Vidal <eric@obarun.org>
|
||||||
|
# All rights reserved.
|
||||||
|
#
|
||||||
|
# This file is part of Obarun. It is subject to the license terms in
|
||||||
|
# the LICENSE file found in the top-level directory of this
|
||||||
|
# distribution and at https://github.com/Obarun/s6-boot/LICENSE
|
||||||
|
# This file may not be copied, modified, propagated, or distributed
|
||||||
|
# except according to the terms contained in the LICENSE file.
|
||||||
|
|
||||||
|
fdmove -c 2 1
|
||||||
|
s6-envdir -if /etc/s6/env
|
||||||
|
importas -i DEST DEST
|
||||||
|
foreground { /etc/s6/stage2.tini }
|
||||||
|
s6-svscanctl -h -- ${DEST}/service
|
15
classic/service/.s6-svscan/SIGINT
Executable file
15
classic/service/.s6-svscan/SIGINT
Executable file
@@ -0,0 +1,15 @@
|
|||||||
|
#!@BINDIR_EXECLINE@/execlineb -P
|
||||||
|
# Copyright (c) 2015-2017 Eric Vidal <eric@obarun.org>
|
||||||
|
# All rights reserved.
|
||||||
|
#
|
||||||
|
# This file is part of Obarun. It is subject to the license terms in
|
||||||
|
# the LICENSE file found in the top-level directory of this
|
||||||
|
# distribution and at https://github.com/Obarun/s6-boot/LICENSE
|
||||||
|
# This file may not be copied, modified, propagated, or distributed
|
||||||
|
# except according to the terms contained in the LICENSE file.
|
||||||
|
|
||||||
|
fdmove -c 2 1
|
||||||
|
s6-envdir -if /etc/s6/env
|
||||||
|
importas -i DEST DEST
|
||||||
|
foreground { /etc/s6/stage2.tini }
|
||||||
|
s6-svscanctl -6 -- ${DEST}/service
|
15
classic/service/.s6-svscan/SIGQUIT
Executable file
15
classic/service/.s6-svscan/SIGQUIT
Executable file
@@ -0,0 +1,15 @@
|
|||||||
|
#!@BINDIR_EXECLINE@/execlineb -P
|
||||||
|
# Copyright (c) 2015-2017 Eric Vidal <eric@obarun.org>
|
||||||
|
# All rights reserved.
|
||||||
|
#
|
||||||
|
# This file is part of Obarun. It is subject to the license terms in
|
||||||
|
# the LICENSE file found in the top-level directory of this
|
||||||
|
# distribution and at https://github.com/Obarun/s6-boot/LICENSE
|
||||||
|
# This file may not be copied, modified, propagated, or distributed
|
||||||
|
# except according to the terms contained in the LICENSE file.
|
||||||
|
|
||||||
|
fdmove -c 2 1
|
||||||
|
s6-envdir -if /etc/s6/env
|
||||||
|
importas -i DEST DEST
|
||||||
|
foreground { /etc/s6/stage2.tini }
|
||||||
|
s6-svscanctl -7 -- ${DEST}/service
|
15
classic/service/.s6-svscan/SIGTERM
Executable file
15
classic/service/.s6-svscan/SIGTERM
Executable file
@@ -0,0 +1,15 @@
|
|||||||
|
#!@BINDIR_EXECLINE@/execlineb -P
|
||||||
|
# Copyright (c) 2015-2017 Eric Vidal <eric@obarun.org>
|
||||||
|
# All rights reserved.
|
||||||
|
#
|
||||||
|
# This file is part of Obarun. It is subject to the license terms in
|
||||||
|
# the LICENSE file found in the top-level directory of this
|
||||||
|
# distribution and at https://github.com/Obarun/s6-boot/LICENSE
|
||||||
|
# This file may not be copied, modified, propagated, or distributed
|
||||||
|
# except according to the terms contained in the LICENSE file.
|
||||||
|
|
||||||
|
fdmove -c 2 1
|
||||||
|
s6-envdir -if /etc/s6/env
|
||||||
|
importas -i DEST DEST
|
||||||
|
foreground { /etc/s6/stage2.tini }
|
||||||
|
s6-svscanctl -t -- ${DEST}/service
|
14
classic/service/.s6-svscan/SIGUSR1
Executable file
14
classic/service/.s6-svscan/SIGUSR1
Executable file
@@ -0,0 +1,14 @@
|
|||||||
|
#!@BINDIR_EXECLINE@/execlineb -P
|
||||||
|
# Copyright (c) 2015-2017 Eric Vidal <eric@obarun.org>
|
||||||
|
# All rights reserved.
|
||||||
|
#
|
||||||
|
# This file is part of Obarun. It is subject to the license terms in
|
||||||
|
# the LICENSE file found in the top-level directory of this
|
||||||
|
# distribution and at https://github.com/Obarun/s6-boot/LICENSE
|
||||||
|
# This file may not be copied, modified, propagated, or distributed
|
||||||
|
# except according to the terms contained in the LICENSE file.
|
||||||
|
|
||||||
|
fdmove -c 2 1
|
||||||
|
s6-envdir -if /etc/s6/env
|
||||||
|
importas -i DEST DEST
|
||||||
|
s6-svscanctl -an -- ${DEST}/service
|
16
classic/service/.s6-svscan/SIGUSR2
Executable file
16
classic/service/.s6-svscan/SIGUSR2
Executable file
@@ -0,0 +1,16 @@
|
|||||||
|
#!@BINDIR_EXECLINE@/execlineb -P
|
||||||
|
# Copyright (c) 2015-2017 Eric Vidal <eric@obarun.org>
|
||||||
|
# All rights reserved.
|
||||||
|
#
|
||||||
|
# This file is part of Obarun. It is subject to the license terms in
|
||||||
|
# the LICENSE file found in the top-level directory of this
|
||||||
|
# distribution and at https://github.com/Obarun/s6-boot/LICENSE
|
||||||
|
# This file may not be copied, modified, propagated, or distributed
|
||||||
|
# except according to the terms contained in the LICENSE file.
|
||||||
|
|
||||||
|
fdmove -c 2 1
|
||||||
|
s6-envdir -if /etc/s6/env
|
||||||
|
importas -i DEST DEST
|
||||||
|
foreground { /etc/s6/stage2.tini }
|
||||||
|
s6-svscanctl -0 -- ${DEST}/service
|
||||||
|
|
17
classic/service/.s6-svscan/crash
Executable file
17
classic/service/.s6-svscan/crash
Executable file
@@ -0,0 +1,17 @@
|
|||||||
|
#!@BINDIR_EXECLINE@/execlineb -P
|
||||||
|
# Copyright (c) 2015-2017 Eric Vidal <eric@obarun.org>
|
||||||
|
# All rights reserved.
|
||||||
|
#
|
||||||
|
# This file is part of Obarun. It is subject to the license terms in
|
||||||
|
# the LICENSE file found in the top-level directory of this
|
||||||
|
# distribution and at https://github.com/Obarun/s6-boot/LICENSE
|
||||||
|
# This file may not be copied, modified, propagated, or distributed
|
||||||
|
# except according to the terms contained in the LICENSE file.
|
||||||
|
|
||||||
|
s6-envdir -if /etc/s6/env
|
||||||
|
importas -i DEST DEST
|
||||||
|
redirfd -r 0 /dev/console
|
||||||
|
redirfd -w 1 /dev/console
|
||||||
|
fdmove -c 2 1
|
||||||
|
foreground { s6-echo -- "s6-svscan at ${DEST}/service crashed. Dropping to an interactive shell." }
|
||||||
|
/bin/sh -i
|
19
classic/service/.s6-svscan/finish
Executable file
19
classic/service/.s6-svscan/finish
Executable file
@@ -0,0 +1,19 @@
|
|||||||
|
#!@BINDIR_EXECLINE@/execlineb -S0
|
||||||
|
# Copyright (c) 2015-2017 Eric Vidal <eric@obarun.org>
|
||||||
|
# All rights reserved.
|
||||||
|
#
|
||||||
|
# This file is part of Obarun. It is subject to the license terms in
|
||||||
|
# the LICENSE file found in the top-level directory of this
|
||||||
|
# distribution and at https://github.com/Obarun/s6-boot/LICENSE
|
||||||
|
# This file may not be copied, modified, propagated, or distributed
|
||||||
|
# except according to the terms contained in the LICENSE file.
|
||||||
|
|
||||||
|
s6-envdir -if /etc/s6/env
|
||||||
|
importas -i DEST DEST
|
||||||
|
cd /
|
||||||
|
redirfd -w 2 /dev/console
|
||||||
|
fdmove -c 1 2
|
||||||
|
foreground { s6-svc -X -- ${DEST}/service/s6-svscan-log }
|
||||||
|
unexport ?
|
||||||
|
wait -r -- { }
|
||||||
|
/etc/s6/stage3 ${@}
|
16
classic/service/s6-svscan-log/run
Executable file
16
classic/service/s6-svscan-log/run
Executable file
@@ -0,0 +1,16 @@
|
|||||||
|
#!@BINDIR_EXECLINE@/execlineb -P
|
||||||
|
# Copyright (c) 2015-2017 Eric Vidal <eric@obarun.org>
|
||||||
|
# All rights reserved.
|
||||||
|
#
|
||||||
|
# This file is part of Obarun. It is subject to the license terms in
|
||||||
|
# the LICENSE file found in the top-level directory of this
|
||||||
|
# distribution and at https://github.com/Obarun/s6-boot/LICENSE
|
||||||
|
# This file may not be copied, modified, propagated, or distributed
|
||||||
|
# except according to the terms contained in the LICENSE file.
|
||||||
|
|
||||||
|
importas -i DEST DEST
|
||||||
|
redirfd -w 2 /dev/console
|
||||||
|
fdmove -c 1 2
|
||||||
|
redirfd -rnb 0 fifo
|
||||||
|
s6-setuidgid s6log
|
||||||
|
s6-log -bp -- t ${DEST}/uncaught-logs
|
14
classic/service/tty1/run
Executable file
14
classic/service/tty1/run
Executable file
@@ -0,0 +1,14 @@
|
|||||||
|
#!@BINDIR@/bash
|
||||||
|
# Copyright (c) 2015-2017 Eric Vidal <eric@obarun.org>
|
||||||
|
# All rights reserved.
|
||||||
|
#
|
||||||
|
# This file is part of Obarun. It is subject to the license terms in
|
||||||
|
# the LICENSE file found in the top-level directory of this
|
||||||
|
# distribution and at https://github.com/Obarun/s6-boot/LICENSE
|
||||||
|
# This file may not be copied, modified, propagated, or distributed
|
||||||
|
# except according to the terms contained in the LICENSE file.
|
||||||
|
|
||||||
|
source /etc/obarun/s6opts.conf
|
||||||
|
if s6-svok ${LIVE_CLASSIC_PATH}/s6rc-fdholder; then
|
||||||
|
exec -c /usr/bin/agetty -J 38400 tty1
|
||||||
|
fi
|
11
classic/service/tty2/run
Executable file
11
classic/service/tty2/run
Executable file
@@ -0,0 +1,11 @@
|
|||||||
|
#!@BINDIR_EXECLINE@/execlineb -P
|
||||||
|
# Copyright (c) 2015-2017 Eric Vidal <eric@obarun.org>
|
||||||
|
# All rights reserved.
|
||||||
|
#
|
||||||
|
# This file is part of Obarun. It is subject to the license terms in
|
||||||
|
# the LICENSE file found in the top-level directory of this
|
||||||
|
# distribution and at https://github.com/Obarun/s6-boot/LICENSE
|
||||||
|
# This file may not be copied, modified, propagated, or distributed
|
||||||
|
# except according to the terms contained in the LICENSE file.
|
||||||
|
|
||||||
|
/usr/bin/agetty --delay 02 -J 38400 tty2
|
1
classic/uncaught-logs/README
Normal file
1
classic/uncaught-logs/README
Normal file
@@ -0,0 +1 @@
|
|||||||
|
erase me
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -8,8 +8,9 @@ pipeline -dw --
|
|||||||
}
|
}
|
||||||
if -nt --
|
if -nt --
|
||||||
{
|
{
|
||||||
|
redirfd -r 0 ./data/autofilled
|
||||||
s6-ipcclient -l0 -- s
|
s6-ipcclient -l0 -- s
|
||||||
/usr/libexec/s6-rc-fdholder-filler -1 --
|
/usr/libexec/s6-rc-fdholder-filler -1 --
|
||||||
}
|
}
|
||||||
s6-svc -t .
|
s6-svc -t .
|
||||||
}
|
}
|
||||||
|
@@ -4,5 +4,5 @@ fdmove 1 3
|
|||||||
s6-ipcserver-socketbinder -- s
|
s6-ipcserver-socketbinder -- s
|
||||||
s6-ipcserverd -1 --
|
s6-ipcserverd -1 --
|
||||||
s6-ipcserver-access -v0 -E -l0 -i data/rules --
|
s6-ipcserver-access -v0 -E -l0 -i data/rules --
|
||||||
s6-sudod -t 2000 --
|
s6-sudod -t 30000 --
|
||||||
/usr/libexec/s6-rc-oneshot-run -l ../.. --
|
/usr/libexec/s6-rc-oneshot-run -l ../.. --
|
||||||
|
@@ -1,5 +1,15 @@
|
|||||||
#!/usr/local/bin/execlineb -P
|
#!/usr/local/bin/execlineb -P
|
||||||
|
# Copyright (c) 2015-2017 Eric Vidal <eric@obarun.org>
|
||||||
|
# All rights reserved.
|
||||||
|
#
|
||||||
|
# This file is part of Obarun. It is subject to the license terms in
|
||||||
|
# the LICENSE file found in the top-level directory of this
|
||||||
|
# distribution and at https://github.com/Obarun/s6-boot/LICENSE
|
||||||
|
# This file may not be copied, modified, propagated, or distributed
|
||||||
|
# except according to the terms contained in the LICENSE file.
|
||||||
|
|
||||||
fdmove -c 2 1
|
fdmove -c 2 1
|
||||||
|
if { s6-echo -- udevd-udev longrun started }
|
||||||
exec -c
|
exec -c
|
||||||
udevd
|
udevd
|
||||||
|
|
||||||
|
@@ -1,4 +0,0 @@
|
|||||||
#!/usr/local/bin/execlineb -P
|
|
||||||
#fdmove -c 2 1
|
|
||||||
s6-devd
|
|
||||||
/usr/bin/udevadm settle
|
|
1
compiled/previous
Symbolic link
1
compiled/previous
Symbolic link
@@ -0,0 +1 @@
|
|||||||
|
/etc/s6/compiled/default
|
@@ -1 +0,0 @@
|
|||||||
put your special script here
|
|
71
data/scripts/modules.sh
Executable file
71
data/scripts/modules.sh
Executable file
@@ -0,0 +1,71 @@
|
|||||||
|
#!@BINDIR@/bash
|
||||||
|
# Copyright (c) 2015-2017 Eric Vidal <eric@obarun.org>
|
||||||
|
# All rights reserved.
|
||||||
|
#
|
||||||
|
# This file is part of Obarun. It is subject to the license terms in
|
||||||
|
# the LICENSE file found in the top-level directory of this
|
||||||
|
# distribution and at https://github.com/Obarun/s6-boot/LICENSE
|
||||||
|
# This file may not be copied, modified, propagated, or distributed
|
||||||
|
# except according to the terms contained in the LICENSE file.
|
||||||
|
|
||||||
|
|
||||||
|
# Configuration files are read from directories in
|
||||||
|
# /usr/lib/modules-load.d, /run/modules-load.d, and /etc/modules-load.d,
|
||||||
|
# in order of precedence
|
||||||
|
|
||||||
|
MODULES_PATH=( "/etc/modules-load.d" "/run/modules-load.d" "/usr/lib/modules-load.d" )
|
||||||
|
MODULES_NAME=""
|
||||||
|
MODULES_RESULT=""
|
||||||
|
|
||||||
|
check_elements(){
|
||||||
|
for e in "${@:2}"; do [[ $e == $1 ]] && return 0; done; return 1;
|
||||||
|
}
|
||||||
|
check_file(){
|
||||||
|
local tidy_loop conf
|
||||||
|
|
||||||
|
for tidy_loop in ${MODULES_PATH[@]}; do
|
||||||
|
if [[ -d "${tidy_loop}" ]]; then
|
||||||
|
for conf in "${tidy_loop}"/*.conf ; do
|
||||||
|
check_elements ${conf##*/} ${MODULES_NAME[@]}
|
||||||
|
if (( $? )); then
|
||||||
|
MODULES_NAME+=("${conf##*/}")
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
unset tidy_loop conf
|
||||||
|
}
|
||||||
|
check_path(){
|
||||||
|
local path tidy_loop
|
||||||
|
for path in ${MODULES_PATH[@]}; do
|
||||||
|
for tidy_loop in ${MODULES_NAME[@]}; do
|
||||||
|
if [[ -f "${path}/${tidy_loop}" ]]; then
|
||||||
|
check_elements "${tidy_loop}" ${MODULES_RESULT[@]##*/}
|
||||||
|
if (( $? ));then
|
||||||
|
MODULES_RESULT+=("${path}/${tidy_loop}")
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
done
|
||||||
|
}
|
||||||
|
|
||||||
|
check_file
|
||||||
|
if [[ -n ${MODULES_NAME[@]} ]]; then
|
||||||
|
check_path
|
||||||
|
else
|
||||||
|
echo "rofs-modules :: Nothing to do"
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
for mod in ${MODULES_RESULT[@]}; do
|
||||||
|
while read line; do
|
||||||
|
if [[ "${line:0:1}" == "#" ]] || [[ -z "${line}" ]];then
|
||||||
|
continue
|
||||||
|
fi
|
||||||
|
for check in ${line};do
|
||||||
|
modprobe -b "${check}" -v | sed 's:insmod [^ ]*/:Load modules :g; s:\.ko\(\.gz\)\? ::g'
|
||||||
|
done
|
||||||
|
done < "${mod}"
|
||||||
|
done
|
||||||
|
|
||||||
|
exit 0
|
14
data/scripts/s6.local
Executable file
14
data/scripts/s6.local
Executable file
@@ -0,0 +1,14 @@
|
|||||||
|
# Copyright (c) 2015-2017 Eric Vidal <eric@obarun.org>
|
||||||
|
# All rights reserved.
|
||||||
|
#
|
||||||
|
# This file is part of Obarun. It is subject to the license terms in
|
||||||
|
# the LICENSE file found in the top-level directory of this
|
||||||
|
# distribution and at https://github.com/Obarun/s6-boot/LICENSE
|
||||||
|
# This file may not be copied, modified, propagated, or distributed
|
||||||
|
# except according to the terms contained in the LICENSE file.
|
||||||
|
#
|
||||||
|
# Default s6.local for obarun; add your custom commands here.
|
||||||
|
#
|
||||||
|
# This is run by s6 before the user services are executed.
|
||||||
|
# This file is declared as oneshot service on s6, do not try to launch any daemon with this file.
|
||||||
|
# Do not forget to define your environment by a shebang.
|
411
data/scripts/tmpfiles.sh
Executable file
411
data/scripts/tmpfiles.sh
Executable file
@@ -0,0 +1,411 @@
|
|||||||
|
#!@BINDIR@/sh
|
||||||
|
# This is a reimplementation of the systemd tmpfiles.d code
|
||||||
|
# Control creation, deletion, and cleaning of volatile and temporary files
|
||||||
|
#
|
||||||
|
# Copyright (c) 2012 Gentoo Foundation
|
||||||
|
# Released under the 2-clause BSD license.
|
||||||
|
#
|
||||||
|
# This instance is a pure-POSIX sh version, written by Robin H Johnson
|
||||||
|
# <robbat2@gentoo.org>, based on the Arch Linux version as of 2012/01/01:
|
||||||
|
# http://projects.archlinux.org/initscripts.git/tree/arch-tmpfiles
|
||||||
|
#
|
||||||
|
# See the tmpfiles.d manpage as well:
|
||||||
|
# http://0pointer.de/public/systemd-man/tmpfiles.d.html
|
||||||
|
# This script should match the manpage as of 2012/03/12
|
||||||
|
#
|
||||||
|
|
||||||
|
|
||||||
|
# This file was modified by Eric Vidal <eric@obarun.org> for Obarun
|
||||||
|
DRYRUN=0
|
||||||
|
|
||||||
|
checkprefix() {
|
||||||
|
n=$1
|
||||||
|
shift
|
||||||
|
for x in $@; do
|
||||||
|
case $n in
|
||||||
|
${x}*) return 0 ;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
return 1
|
||||||
|
}
|
||||||
|
|
||||||
|
warninvalid() {
|
||||||
|
printf "tmpfiles: ignoring invalid entry on line %d of \`%s'\n" "$LINENUM" "$FILE"
|
||||||
|
error=$(( error+1 ))
|
||||||
|
} >&2
|
||||||
|
|
||||||
|
dryrun_or_real() {
|
||||||
|
local dryrun=
|
||||||
|
[ $DRYRUN -eq 1 ] && dryrun=echo
|
||||||
|
$dryrun "$@"
|
||||||
|
}
|
||||||
|
|
||||||
|
relabel() {
|
||||||
|
local path
|
||||||
|
local paths=$1 mode=$2 uid=$3 gid=$4
|
||||||
|
|
||||||
|
for path in ${paths}; do
|
||||||
|
if [ -e "$path" ]; then
|
||||||
|
[ -x /sbin/restorecon ] && dryrun_or_real restorecon $CHOPTS "$path"
|
||||||
|
[ $uid != '-' ] && dryrun_or_real chown $CHOPTS "$uid" "$path"
|
||||||
|
[ $gid != '-' ] && dryrun_or_real chgrp $CHOPTS "$gid" "$path"
|
||||||
|
[ $mode != '-' ] && dryrun_or_real chmod $CHOPTS "$mode" "$path"
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
}
|
||||||
|
|
||||||
|
splitpath() {
|
||||||
|
local path=$1
|
||||||
|
while [ -n "$path" ]; do
|
||||||
|
echo $path
|
||||||
|
path=${path%/*}
|
||||||
|
done
|
||||||
|
}
|
||||||
|
|
||||||
|
_restorecon() {
|
||||||
|
local path=$1
|
||||||
|
if [ -x /sbin/restorecon ]; then
|
||||||
|
dryrun_or_real restorecon -F $(splitpath "$path")
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
_b() {
|
||||||
|
# Create a block device node if it doesn't exist yet
|
||||||
|
local path=$1 mode=$2 uid=$3 gid=$4 age=$5 arg=$6
|
||||||
|
if [ ! -e "$path" ]; then
|
||||||
|
dryrun_or_real mknod -m $mode $path b ${arg%:*} ${arg#*:}
|
||||||
|
_restorecon "$path"
|
||||||
|
dryrun_or_real chown $uid:$gid $path
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
_c() {
|
||||||
|
# Create a character device node if it doesn't exist yet
|
||||||
|
local path=$1 mode=$2 uid=$3 gid=$4 age=$5 arg=$6
|
||||||
|
if [ ! -e "$path" ]; then
|
||||||
|
dryrun_or_real mknod -m $mode $path c ${arg%:*} ${arg#*:}
|
||||||
|
_restorecon "$path"
|
||||||
|
dryrun_or_real chown $uid:$gid $path
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
_C() {
|
||||||
|
# recursively copy a file or directory
|
||||||
|
local path=$1 mode=$2 uid=$3 gid=$4 age=$5 arg=$6
|
||||||
|
if [ ! -e "$path" ]; then
|
||||||
|
dryrun_or_real cp -r "$arg" "$path"
|
||||||
|
_restorecon "$path"
|
||||||
|
[ $uid != '-' ] && dryrun_or_real chown "$uid" "$path"
|
||||||
|
[ $gid != '-' ] && dryrun_or_real chgrp "$gid" "$path"
|
||||||
|
[ $mode != '-' ] && dryrun_or_real chmod "$mode" "$path"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
_f() {
|
||||||
|
# Create a file if it doesn't exist yet
|
||||||
|
local path=$1 mode=$2 uid=$3 gid=$4 age=$5 arg=$6
|
||||||
|
|
||||||
|
[ $CREATE -gt 0 ] || return 0
|
||||||
|
|
||||||
|
if [ ! -e "$path" ]; then
|
||||||
|
#dryrun_or_real $CHECKPATH -fq -m "$mode" -o "$uid:$gid" "$path"
|
||||||
|
dryrun_or_real touch "$path"
|
||||||
|
dryrun_or_real chmod "$mode" "$path"
|
||||||
|
dryrun_or_real chown "$uid:$gid" "$path"
|
||||||
|
[ -z "$arg" ] || _w "$@"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
_F() {
|
||||||
|
# Create or truncate a file
|
||||||
|
local path=$1 mode=$2 uid=$3 gid=$4 age=$5 arg=$6
|
||||||
|
|
||||||
|
[ $CREATE -gt 0 ] || return 0
|
||||||
|
if [ -e "$path" ]; then
|
||||||
|
[ -z "$arg" ] || _w "$@"
|
||||||
|
else
|
||||||
|
#dryrun_or_real $CHECKPATH -Fq -m "$mode" -o "$uid:$gid" "$path"
|
||||||
|
dryrun_or_real touch "$path"
|
||||||
|
dryrun_or_real chmod "$mode" "$path"
|
||||||
|
dryrun_or_real chown "$uid:$gid" "$path"
|
||||||
|
[ -z "$arg" ] || _w "$@"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
_d() {
|
||||||
|
# Create a directory if it doesn't exist yet
|
||||||
|
local path=$1 mode=$2 uid=$3 gid=$4
|
||||||
|
|
||||||
|
[ $CREATE -gt 0 ] || return 0
|
||||||
|
|
||||||
|
if [ ! -d "$path" ]; then
|
||||||
|
dryrun_or_real mkdir -p "$path" 2>/dev/null
|
||||||
|
_restorecon "$path"
|
||||||
|
#dryrun_or_real $CHECKPATH -dq -m "$mode" -o "$uid:$gid" "$path"
|
||||||
|
dryrun_or_real chmod "$mode" "$path"
|
||||||
|
dryrun_or_real chown "$uid:$gid" "$path"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
_D() {
|
||||||
|
# Create or empty a directory
|
||||||
|
local path=$1 mode=$2 uid=$3 gid=$4
|
||||||
|
|
||||||
|
if [ -d "$path" ] && [ $REMOVE -gt 0 ]; then
|
||||||
|
dryrun_or_real find "$path" -mindepth 1 -maxdepth 1 -xdev -exec rm -rf {} +
|
||||||
|
_restorecon "$path"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ $CREATE -gt 0 ]; then
|
||||||
|
dryrun_or_real mkdir -p "$path" 2>/dev/null
|
||||||
|
_restorecon "$path"
|
||||||
|
#dryrun_or_real $CHECKPATH -Dq -m "$mode" -o "$uid:$gid" "$path"
|
||||||
|
dryrun_or_real chmod "$mode" "$path"
|
||||||
|
dryrun_or_real chown "$uid:$gid" "$path"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
_v() {
|
||||||
|
# Create a subvolume if the path does not exist yet and the file system
|
||||||
|
# supports this (btrfs). Otherwise create a normal directory.
|
||||||
|
# TODO: Implement btrfs subvol creation.
|
||||||
|
_d "$@"
|
||||||
|
}
|
||||||
|
|
||||||
|
_L() {
|
||||||
|
# Create a symlink if it doesn't exist yet
|
||||||
|
local path=$1 mode=$2 uid=$3 gid=$4 age=$5 arg=$6
|
||||||
|
[ ! -e "$path" ] && dryrun_or_real ln -s "$arg" "$path"
|
||||||
|
_restorecon "$path"
|
||||||
|
}
|
||||||
|
|
||||||
|
_p() {
|
||||||
|
# Create a named pipe (FIFO) if it doesn't exist yet
|
||||||
|
local path=$1 mode=$2 uid=$3 gid=$4
|
||||||
|
|
||||||
|
[ $CREATE -gt 0 ] || return 0
|
||||||
|
|
||||||
|
if [ ! -p "$path" ]; then
|
||||||
|
#dryrun_or_real $CHECKPATH -pq -m $mode -o "$uid:$gid" "$path"
|
||||||
|
dryrun_or_real mkfifo -m "$mode" "$path"
|
||||||
|
dryrun_or_real chown "$uid:$gid" "$path"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
_x() {
|
||||||
|
# Ignore a path during cleaning. Use this type to exclude paths from clean-up as
|
||||||
|
# controlled with the Age parameter. Note that lines of this type do not
|
||||||
|
# influence the effect of r or R lines. Lines of this type accept shell-style
|
||||||
|
# globs in place of of normal path names.
|
||||||
|
:
|
||||||
|
# XXX: we don't implement this
|
||||||
|
}
|
||||||
|
|
||||||
|
_X() {
|
||||||
|
# Ignore a path during cleanup. Use this type to prevent path
|
||||||
|
# removal as controled with the age parameter. Note that if path is
|
||||||
|
# a directory, the content of the directory is not excluded from
|
||||||
|
# clean-up, only the directory itself.
|
||||||
|
# Lines of this type accept shell-style globs in place of normal path names.
|
||||||
|
:
|
||||||
|
# XXX: we don't implement this
|
||||||
|
}
|
||||||
|
|
||||||
|
_r() {
|
||||||
|
# Remove a file or directory if it exists. This may not be used to remove
|
||||||
|
# non-empty directories, use R for that. Lines of this type accept shell-style
|
||||||
|
# globs in place of normal path names.
|
||||||
|
local path
|
||||||
|
local paths=$1
|
||||||
|
|
||||||
|
[ $REMOVE -gt 0 ] || return 0
|
||||||
|
|
||||||
|
for path in ${paths}; do
|
||||||
|
if [ -f "$path" ]; then
|
||||||
|
dryrun_or_real rm -f "$path"
|
||||||
|
elif [ -d "$path" ]; then
|
||||||
|
dryrun_or_real rmdir "$path"
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
}
|
||||||
|
|
||||||
|
_R() {
|
||||||
|
# Recursively remove a path and all its subdirectories (if it is a directory).
|
||||||
|
# Lines of this type accept shell-style globs in place of normal path names.
|
||||||
|
local path
|
||||||
|
local paths=$1
|
||||||
|
|
||||||
|
[ $REMOVE -gt 0 ] || return 0
|
||||||
|
|
||||||
|
for path in ${paths}; do
|
||||||
|
[ -d "$path" ] && dryrun_or_real rm -rf --one-file-system "$path"
|
||||||
|
done
|
||||||
|
}
|
||||||
|
|
||||||
|
_w() {
|
||||||
|
# Write the argument parameter to a file, if it exists.
|
||||||
|
local path=$1 mode=$2 uid=$3 gid=$4 age=$5 arg=$6
|
||||||
|
if [ -f "$path" ]; then
|
||||||
|
if [ $DRYRUN -eq 1 ]; then
|
||||||
|
echo "echo \"$arg\" >>\"$path\""
|
||||||
|
else
|
||||||
|
echo "$arg" >>"$path"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
_z() {
|
||||||
|
# Set ownership, access mode and relabel security context of a file or
|
||||||
|
# directory if it exists. Lines of this type accept shell-style globs in
|
||||||
|
# place of normal path names.
|
||||||
|
[ $CREATE -gt 0 ] || return 0
|
||||||
|
|
||||||
|
relabel "$@"
|
||||||
|
}
|
||||||
|
|
||||||
|
_Z() {
|
||||||
|
# Recursively set ownership, access mode and relabel security context of a
|
||||||
|
# path and all its subdirectories (if it is a directory). Lines of this type
|
||||||
|
# accept shell-style globs in place of normal path names.
|
||||||
|
[ $CREATE -gt 0 ] || return 0
|
||||||
|
|
||||||
|
CHOPTS=-R relabel "$@"
|
||||||
|
}
|
||||||
|
|
||||||
|
BOOT=0 CREATE=0 REMOVE=0 CLEAN=0 VERBOSE=0 DRYRUN=0 error=0 LINENO=0
|
||||||
|
EXCLUDE=
|
||||||
|
PREFIX=
|
||||||
|
FILE=
|
||||||
|
fragments=
|
||||||
|
# XXX: The harcoding of /usr/lib/ is an explicit choice by upstream
|
||||||
|
tmpfiles_dirs='/usr/lib/tmpfiles.d/ /run/tmpfiles.d/ /etc/tmpfiles.d/'
|
||||||
|
tmpfiles_basenames=''
|
||||||
|
tmpfiles_d=''
|
||||||
|
# Build a list of sorted unique basenames
|
||||||
|
# directories declared later in the tmpfiles_d array will override earlier
|
||||||
|
# directories, on a per file basename basis.
|
||||||
|
# `/etc/tmpfiles.d/foo.conf' supersedes `/usr/lib/tmpfiles.d/foo.conf'.
|
||||||
|
# `/run/tmpfiles/foo.conf' will always be read after `/etc/tmpfiles.d/bar.conf'
|
||||||
|
for d in ${tmpfiles_dirs} ; do
|
||||||
|
[ -d $d ] && for f in ${d}/*.conf ; do
|
||||||
|
case "${f##*/}" in
|
||||||
|
systemd.conf|systemd-*.conf) continue;;
|
||||||
|
esac
|
||||||
|
[ -f $f ] && tmpfiles_basenames="${tmpfiles_basenames}\n${f##*/}"
|
||||||
|
done # for f in ${d}
|
||||||
|
done # for d in ${tmpfiles_dirs}
|
||||||
|
tmpfiles_basenames="$(printf "${tmpfiles_basenames}\n" | sort -u )"
|
||||||
|
|
||||||
|
for b in $tmpfiles_basenames ; do
|
||||||
|
real_f=''
|
||||||
|
for d in $tmpfiles_dirs ; do
|
||||||
|
f=${d}/${b}
|
||||||
|
[ -f "${f}" ] && real_f=$f
|
||||||
|
done
|
||||||
|
[ -f "${real_f}" ] && tmpfiles_d="${tmpfiles_d} ${real_f}"
|
||||||
|
done
|
||||||
|
|
||||||
|
while [ $# -gt 0 ]; do
|
||||||
|
case $1 in
|
||||||
|
--boot) BOOT=1 ;;
|
||||||
|
--create) CREATE=1 ;;
|
||||||
|
--remove) REMOVE=1 ;;
|
||||||
|
--clean) CLEAN=1 ;; # TODO: Not implemented
|
||||||
|
--verbose) VERBOSE=1 ;;
|
||||||
|
--dryrun|--dry-run) DRYRUN=1 ;;
|
||||||
|
--exclude-prefix=*) EXCLUDE="${EXCLUDE}${1##--exclude-prefix=} " ;;
|
||||||
|
--prefix=*) PREFIX="${PREFIX}${1##--prefix=} " ;;
|
||||||
|
esac
|
||||||
|
shift
|
||||||
|
done
|
||||||
|
|
||||||
|
if [ $(( CLEAN )) -eq 1 ] ; then
|
||||||
|
printf '%s clean mode is not implemented\n' "${0##*/}"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ "$CREATE$REMOVE" = '00' ]; then
|
||||||
|
printf 'usage: %s [--exclude-prefix=path] [--prefix=path] [--boot] [--create] [--remove] [--clean] [--verbose] [--dry-run]\n' "${0##*/}"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
error=0
|
||||||
|
|
||||||
|
# loop through the gathered fragments, sorted globally by filename.
|
||||||
|
# `/run/tmpfiles/foo.conf' will always be read after `/etc/tmpfiles.d/bar.conf'
|
||||||
|
for FILE in $tmpfiles_d ; do
|
||||||
|
LINENUM=0
|
||||||
|
|
||||||
|
### FILE FORMAT ###
|
||||||
|
# XXX: We ignore the 'Age' parameter
|
||||||
|
# 1 2 3 4 5 6 7
|
||||||
|
# Cmd Path Mode UID GID Age Argument
|
||||||
|
# d /run/user 0755 root root 10d -
|
||||||
|
# Mode, UID, GID, Age, Argument may be omitted!
|
||||||
|
# If Cmd ends with !, the line is only processed if --boot is passed
|
||||||
|
|
||||||
|
# XXX: Upstream says whitespace is NOT permitted in the Path argument.
|
||||||
|
# But IS allowed when globs are expanded for the x/r/R/z/Z types.
|
||||||
|
while read cmd path mode uid gid age arg; do
|
||||||
|
LINENUM=$(( LINENUM+1 ))
|
||||||
|
FORCE=0
|
||||||
|
|
||||||
|
# Unless we have both command and path, skip this line.
|
||||||
|
if [ -z "$cmd" -o -z "$path" ]; then
|
||||||
|
continue
|
||||||
|
fi
|
||||||
|
|
||||||
|
case $cmd in
|
||||||
|
\#*) continue ;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
while [ ${#cmd} -gt 1 ]; do
|
||||||
|
case $cmd in
|
||||||
|
*!) cmd=${cmd%!}; [ "$BOOT" -eq "1" ] || continue 2 ;;
|
||||||
|
*+) cmd=${cmd%+}; FORCE=1; ;;
|
||||||
|
*) warninvalid ; continue 2 ;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
|
||||||
|
# whine about invalid entries
|
||||||
|
case $cmd in
|
||||||
|
f|F|w|d|D|v|p|L|c|C|b|x|X|r|R|z|Z) ;;
|
||||||
|
*) warninvalid ; continue ;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
# fall back on defaults when parameters are passed as '-'
|
||||||
|
if [ "$mode" = '-' -o "$mode" = '' ]; then
|
||||||
|
case "$cmd" in
|
||||||
|
p|f|F) mode=0644 ;;
|
||||||
|
d|D|v) mode=0755 ;;
|
||||||
|
C|z|Z|x|r|R|L) ;;
|
||||||
|
esac
|
||||||
|
fi
|
||||||
|
|
||||||
|
[ "$uid" = '-' -o "$uid" = '' ] && uid=0
|
||||||
|
[ "$gid" = '-' -o "$gid" = '' ] && gid=0
|
||||||
|
[ "$age" = '-' -o "$age" = '' ] && age=0
|
||||||
|
[ "$arg" = '-' -o "$arg" = '' ] && arg=''
|
||||||
|
set -- "$path" "$mode" "$uid" "$gid" "$age" "$arg"
|
||||||
|
|
||||||
|
[ -n "$EXCLUDE" ] && checkprefix $path $EXCLUDE && continue
|
||||||
|
[ -n "$PREFIX" ] && ! checkprefix $path $PREFIX && continue
|
||||||
|
|
||||||
|
if [ $FORCE -gt 0 ]; then
|
||||||
|
case $cmd in
|
||||||
|
p|L|c|b) [ -f "$path" ] && dryrun_or_real rm -f "$path"
|
||||||
|
esac
|
||||||
|
fi
|
||||||
|
|
||||||
|
[ "$VERBOSE" -eq "1" ] && echo _$cmd "$@"
|
||||||
|
_$cmd "$@"
|
||||||
|
rc=$?
|
||||||
|
if [ "${DRYRUN}" -eq "0" ]; then
|
||||||
|
[ $rc -ne 0 ] && error=$((error + 1))
|
||||||
|
fi
|
||||||
|
done <$FILE
|
||||||
|
done
|
||||||
|
|
||||||
|
exit $error
|
||||||
|
|
||||||
|
# vim: set ts=2 sw=2 sts=2 noet ft=sh:
|
254
data/scripts/user.sh
Executable file
254
data/scripts/user.sh
Executable file
@@ -0,0 +1,254 @@
|
|||||||
|
#!@BINDIR@/bash
|
||||||
|
# Copyright (c) 2015-2017 Eric Vidal <eric@obarun.org>
|
||||||
|
# All rights reserved.
|
||||||
|
#
|
||||||
|
# This file is part of Obarun. It is subject to the license terms in
|
||||||
|
# the LICENSE file found in the top-level directory of this
|
||||||
|
# distribution and at https://github.com/Obarun/s6-boot/LICENSE
|
||||||
|
# This file may not be copied, modified, propagated, or distributed
|
||||||
|
# except according to the terms contained in the LICENSE file.
|
||||||
|
|
||||||
|
exec 2>&1
|
||||||
|
exec 1>>/var/log/user.log
|
||||||
|
|
||||||
|
log(){
|
||||||
|
printf "%s %s %s\n" "$(date +"%Y-%m-%d %H:%M:%S")" "${FUNCNAME[1]} ::" "${@}"
|
||||||
|
}
|
||||||
|
|
||||||
|
# ${1} user name
|
||||||
|
# ${2} action to do, add or del
|
||||||
|
|
||||||
|
if [[ -z "${1}" ]] || [[ -z "${2}" ]];then
|
||||||
|
log "handle-user :: Missing arguments, existing"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
if [[ "${1}" == "root" ]]; then
|
||||||
|
log "root user, nothing to do, exiting 0"
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
ENV="/etc/s6/env"
|
||||||
|
DEST=$(head -n1 ${ENV}/DEST) #/run/boot
|
||||||
|
TEMPLATE=$(head -n1 ${ENV}/TEMPLATE) #/usr/share/obarun/s6opts/template
|
||||||
|
SOURCE=""
|
||||||
|
|
||||||
|
USER="${1}"
|
||||||
|
# special case here, adduser scipts call
|
||||||
|
# user.sh with boot as user, but this user
|
||||||
|
# doesn't exist, wrap the uid,gid to root
|
||||||
|
if [[ "${USER}" == "boot" ]]; then
|
||||||
|
_UID=$(id -u 0)
|
||||||
|
_GID=$(id -g 0)
|
||||||
|
else
|
||||||
|
_UID=$(id -u ${USER})
|
||||||
|
_GID=$(id -g ${USER})
|
||||||
|
fi
|
||||||
|
|
||||||
|
# overwrite conf if connected with user
|
||||||
|
if ! (( "${_UID}" == 0 )); then
|
||||||
|
if ! source $(getent passwd ${USER}|cut -d : -f 6)/service/service.conf 2>/dev/null; then
|
||||||
|
out_error "$(getent passwd ${USER}|cut -d : -f 6)/service/service.conf doesn't exist"
|
||||||
|
out_error "Use s6opts user command first"
|
||||||
|
exit 1
|
||||||
|
else
|
||||||
|
SOURCE="$(getent passwd ${USER}|cut -d : -f 6)/service/service.conf"
|
||||||
|
fi
|
||||||
|
elif ! source /etc/obarun/s6opts.conf; then
|
||||||
|
out_error "/etc/obarun/s6opts.conf not found, existing"
|
||||||
|
exit 1
|
||||||
|
else
|
||||||
|
SOURCE="/etc/obarun/s6opts.conf"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# at this point, the good .conf file is sourced
|
||||||
|
# we know all needed variables
|
||||||
|
|
||||||
|
# do not pass if DEST_USER already exist
|
||||||
|
if [[ -d "${DEST_USER}" ]] && [[ "${2}" == "add" ]]; then
|
||||||
|
log "${DEST_USER} already exist, nothing to do"
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
LIST_SERV=$(ls ${CLASSIC_ENABLED})
|
||||||
|
# coming from boot time? so respect the choice of the .conf files
|
||||||
|
# and change the name of USER variable.
|
||||||
|
if [[ "${USER}" == "boot" ]]; then
|
||||||
|
USER="${DEST_USER##*/}"
|
||||||
|
fi
|
||||||
|
|
||||||
|
copy_template() {
|
||||||
|
log "mkdir ${DEST}/service/${USER}/{log,env}"
|
||||||
|
mkdir -p -m 0755 ${DEST}/service/${USER}/{log,env}
|
||||||
|
log "s6-hiercopy from ${TEMPLATE}/base/ to ${DEST}/service/${USER}"
|
||||||
|
/usr/bin/s6-hiercopy ${TEMPLATE}/base/run ${DEST}/service/${USER}/run
|
||||||
|
/usr/bin/s6-hiercopy ${TEMPLATE}/base/log ${DEST}/service/${USER}/log
|
||||||
|
/usr/bin/s6-hiercopy ${TEMPLATE}/base/env ${DEST}/service/${USER}/env
|
||||||
|
}
|
||||||
|
|
||||||
|
parse_env() {
|
||||||
|
local named
|
||||||
|
log "replace base by ${USER} at LOG,run,log/run files"
|
||||||
|
for named in ${DEST}/service/${USER}/env/LOG ${DEST}/service/${USER}/{run,log/run}; do
|
||||||
|
sed -i "s:base:${USER}:g" $named
|
||||||
|
done
|
||||||
|
|
||||||
|
unset named
|
||||||
|
}
|
||||||
|
|
||||||
|
add_env() {
|
||||||
|
local -a list_env=$(printenv)
|
||||||
|
local var value line list
|
||||||
|
|
||||||
|
|
||||||
|
while read line;do
|
||||||
|
|
||||||
|
if [[ "${line:0:1}" == "#" ]] || [[ -z "${line}" ]];then
|
||||||
|
continue
|
||||||
|
fi
|
||||||
|
|
||||||
|
var=$(awk -F"=" '{print $1}' <<< "${line}")
|
||||||
|
value=$(echo ${!var})
|
||||||
|
|
||||||
|
log "create new file ${var} with ${value} at ${DEST}/service/${USER}/env/"
|
||||||
|
touch ${DEST}/service/${USER}/env/"${var}"
|
||||||
|
echo "${value}" > ${DEST}/service/${USER}/env/"${var}"
|
||||||
|
|
||||||
|
done < "${SOURCE}"
|
||||||
|
|
||||||
|
#special env need to be create
|
||||||
|
log "create new file USER with ${USER} at ${DEST}/service/${USER}/env/"
|
||||||
|
touch ${DEST}/service/${USER}/env/USER
|
||||||
|
echo "${USER}" > ${DEST}/service/${USER}/env/USER
|
||||||
|
|
||||||
|
log "create new file UID with ${_UID} at ${DEST}/service/${USER}/env/"
|
||||||
|
touch ${DEST}/service/${USER}/env/UID
|
||||||
|
echo "${_UID}" > ${DEST}/service/${USER}/env/UID
|
||||||
|
|
||||||
|
log "create new file GID with ${_GID} at ${DEST}/service/${USER}/env/"
|
||||||
|
touch ${DEST}/service/${USER}/env/UID
|
||||||
|
echo "${_GID}" > ${DEST}/service/${USER}/env/GID
|
||||||
|
|
||||||
|
#su -l "${USER}" -c 'env'
|
||||||
|
|
||||||
|
# need improvement
|
||||||
|
for list in ${list_env[@]};do
|
||||||
|
|
||||||
|
while read line;do
|
||||||
|
|
||||||
|
var=$(awk -F"=" '{print $1}' <<< "${line}")
|
||||||
|
value=$(echo ${!var})
|
||||||
|
|
||||||
|
case "${var}" in
|
||||||
|
_|?|GID|UID|PWD|G_DEBUG|LOG) continue
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
log "create new file ${var} with ${value} at ${DEST}/service/${USER}/env/"
|
||||||
|
touch ${DEST}/service/${USER}/env/"${var}"
|
||||||
|
echo "${value}" > ${DEST}/service/${USER}/env/"${var}"
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
done <<< "${list}"
|
||||||
|
|
||||||
|
done
|
||||||
|
|
||||||
|
unset list_env var value line list
|
||||||
|
}
|
||||||
|
create_destuser() {
|
||||||
|
local tidy
|
||||||
|
|
||||||
|
log "create ${DEST_USER} directory"
|
||||||
|
mkdir -p ${DEST_USER}
|
||||||
|
log "create ${LIVE_CLASSIC_PATH} directory"
|
||||||
|
mkdir -p ${LIVE_CLASSIC_PATH}/.s6-svscan
|
||||||
|
log "create ${LIVE_RC_PATH} directory"
|
||||||
|
mkdir -p ${LIVE_RC_PATH}
|
||||||
|
|
||||||
|
|
||||||
|
log "copy ${TEMPLATE}/base/.s6-svscan to ${LIVE_CLASSIC_PATH}}/.s6-svscan"
|
||||||
|
/usr/bin/s6-hiercopy ${TEMPLATE}/base/.s6-svscan ${LIVE_CLASSIC_PATH}/.s6-svscan
|
||||||
|
|
||||||
|
# parse all SIG* file to point to the right place
|
||||||
|
for tidy in ${LIVE_CLASSIC_PATH}/.s6-svscan/{SIG{HUP,INT,QUIT,TERM,USR1,USR2},finish,crash}; do
|
||||||
|
log "change base by ${USER} at $tidy"
|
||||||
|
sed -i "s:base:${USER}:g" $tidy
|
||||||
|
done
|
||||||
|
|
||||||
|
log "change owner and permissions of ${DEST_USER} directory"
|
||||||
|
chown -R ${_UID}:root ${DEST_USER}
|
||||||
|
chmod 755 -R ${DEST_USER}
|
||||||
|
unset tidy
|
||||||
|
}
|
||||||
|
|
||||||
|
# copy daemon enabled by USER
|
||||||
|
enabled_daemon() {
|
||||||
|
log "enable daemon for $USER"
|
||||||
|
for serv in ${LIST_SERV[@]};do
|
||||||
|
ln -sfT ${CLASSIC_ENABLED}/${serv} ${LIVE_CLASSIC_PATH}/${serv}
|
||||||
|
done
|
||||||
|
}
|
||||||
|
|
||||||
|
start_database() {
|
||||||
|
log "init s6-rc database with -l ${LIVE_RC_PATH}/${LIVE_RC_NAME} -c ${RC_DATABASE_COMPILED}/current ${LIVE_CLASSIC_PATH}"
|
||||||
|
if [[ "${_UID}" == 0 ]]; then
|
||||||
|
s6-rc-init -l ${LIVE_RC_PATH}/${LIVE_RC_NAME} -c ${RC_DATABASE_COMPILED}/current ${LIVE_CLASSIC_PATH}
|
||||||
|
s6-rc -v 3 -l ${LIVE_RC_PATH}/${LIVE_RC_NAME} -u change All
|
||||||
|
else
|
||||||
|
su ${USER} -c "s6-rc-init -l ${LIVE_RC_PATH}/${LIVE_RC_NAME} -c ${RC_DATABASE_COMPILED}/current ${LIVE_CLASSIC_PATH}"
|
||||||
|
su ${USER} -c "s6-rc -v 3 -l ${LIVE_RC_PATH}/${LIVE_RC_NAME} -u change All"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# ${1} s6 program
|
||||||
|
# ${2} command to pass
|
||||||
|
# ${3} target
|
||||||
|
s6_cmd() {
|
||||||
|
local prog="${1}" cmd="${2}" target="${3}"
|
||||||
|
log "do a s6-${prog} -${cmd} ${target} command"
|
||||||
|
eval s6-"${prog}" -"${cmd}" "${target}"
|
||||||
|
|
||||||
|
unset prog cmd target
|
||||||
|
}
|
||||||
|
|
||||||
|
add() {
|
||||||
|
|
||||||
|
copy_template || exit 1
|
||||||
|
|
||||||
|
parse_env || exit 1
|
||||||
|
|
||||||
|
add_env || exit 1
|
||||||
|
|
||||||
|
create_destuser || exit 1
|
||||||
|
|
||||||
|
s6_cmd "svscanctl" "an" "${DEST}/service" || exit 1
|
||||||
|
|
||||||
|
enabled_daemon || exit 1
|
||||||
|
|
||||||
|
s6_cmd "svscanctl" "an" "${LIVE_CLASSIC_PATH}" 2>/dev/null || exit 1
|
||||||
|
|
||||||
|
start_database || exit 1
|
||||||
|
}
|
||||||
|
|
||||||
|
del() {
|
||||||
|
s6_cmd "svc" "wD -d -T2000" "${DEST}/service/${USER}"
|
||||||
|
|
||||||
|
if ! [[ -z $(s6-svstat ${DEST}/service/${USER}|grep down) ]];then
|
||||||
|
s6_cmd "svc" "kO" "${DEST}/service/${USER}"
|
||||||
|
fi
|
||||||
|
log "remove ${DEST}/service/${USER} directory"
|
||||||
|
rm -rf "${DEST}/service/${USER}/"
|
||||||
|
s6_cmd "svscanctl" "an" "${DEST}/service/"
|
||||||
|
log "remove ${DEST_USER} directory"
|
||||||
|
rm -rf "${DEST_USER}"
|
||||||
|
}
|
||||||
|
|
||||||
|
case "${2}" in
|
||||||
|
add)
|
||||||
|
add
|
||||||
|
;;
|
||||||
|
del)
|
||||||
|
del
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
exit 1
|
||||||
|
;;
|
||||||
|
esac
|
1
env/DESTRC
vendored
Normal file
1
env/DESTRC
vendored
Normal file
@@ -0,0 +1 @@
|
|||||||
|
/run/boot/rc
|
1
env/HANDLE
vendored
Normal file
1
env/HANDLE
vendored
Normal file
@@ -0,0 +1 @@
|
|||||||
|
/etc/s6/data/scripts
|
1
env/S6CONF
vendored
Normal file
1
env/S6CONF
vendored
Normal file
@@ -0,0 +1 @@
|
|||||||
|
/run/s6-conf
|
1
env/TEMPLATE
vendored
Normal file
1
env/TEMPLATE
vendored
Normal file
@@ -0,0 +1 @@
|
|||||||
|
/usr/share/obarun/s6opts/template
|
1
env/s6-conf
vendored
1
env/s6-conf
vendored
@@ -1 +0,0 @@
|
|||||||
/run/s6-conf
|
|
1
env/svc-serv
vendored
1
env/svc-serv
vendored
@@ -1 +0,0 @@
|
|||||||
/etc/s6/svc-serv
|
|
94
init
94
init
@@ -1,88 +1,50 @@
|
|||||||
#!/usr/local/bin/execlineb -P
|
#!@BINDIR_EXECLINE@/execlineb -P
|
||||||
# Copyright (C) 2015-2016 Eric Vidal <eric@obarun.org>
|
# Copyright (c) 2015-2017 Eric Vidal <eric@obarun.org>
|
||||||
#
|
# All rights reserved.
|
||||||
# This file is distributed in the hope that it will be useful, but WITHOUT ANY
|
#
|
||||||
# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
|
# This file is part of Obarun. It is subject to the license terms in
|
||||||
# FOR A PARTICULAR PURPOSE.
|
# the LICENSE file found in the top-level directory of this
|
||||||
#
|
# distribution and at https://github.com/Obarun/s6-boot/LICENSE
|
||||||
# This scripts is under License Beerware.
|
# This file may not be copied, modified, propagated, or distributed
|
||||||
#
|
# except according to the terms contained in the LICENSE file.
|
||||||
# "THE BEERWARE LICENSE" (Revision 42):
|
|
||||||
# <eric@obarun.org> wrote this file. As long as you retain this notice you
|
|
||||||
# can do whatever you want with this stuff. If we meet some day, and you think
|
|
||||||
# this stuff is worth it, you can buy me a beer in return. Eric Vidal http://obarun.org
|
|
||||||
|
|
||||||
|
|
||||||
# Export good path
|
# Export good path
|
||||||
/usr/local/bin/export PATH "/usr/local/bin:/usr/bin"
|
/usr/bin/s6-envdir -if /etc/s6/env
|
||||||
|
@BINDIR_EXECLINE@/importas -i PATH PATH
|
||||||
cd /
|
@BINDIR_EXECLINE@/export PATH ${PATH}
|
||||||
|
|
||||||
# parse s6.conf before loading environment
|
|
||||||
foreground {
|
|
||||||
redirfd -r 0 /etc/s6/s6.conf
|
|
||||||
pipeline { s6-grep -vF -- "#" }
|
|
||||||
forstdin -nCd"\n" -- conf
|
|
||||||
import -ui conf
|
|
||||||
multidefine -d"=" $conf { var value }
|
|
||||||
foreground {
|
|
||||||
if { mkdir -p /run/s6-conf/ }
|
|
||||||
redirfd -w 1 /run/s6-conf/$var
|
|
||||||
s6-echo -- $value
|
|
||||||
}
|
|
||||||
}
|
|
||||||
# load hostname for earlier tty
|
|
||||||
foreground {
|
|
||||||
s6-envdir /etc/s6/env/s6-conf
|
|
||||||
import -i HOSTNAME
|
|
||||||
s6-hostname ${HOSTNAME}
|
|
||||||
}
|
|
||||||
# Clean environment
|
|
||||||
emptyenv -p
|
|
||||||
s6-envdir -if /etc/s6/env
|
|
||||||
|
|
||||||
|
@BINDIR_EXECLINE@/cd /
|
||||||
|
|
||||||
# Be clean and safe
|
# Be clean and safe
|
||||||
|
emptyenv -p
|
||||||
s6-setsid -qb --
|
s6-setsid -qb --
|
||||||
umask 022
|
umask 022
|
||||||
|
|
||||||
if {
|
foreground {
|
||||||
if { s6-echo -- "***************************************************************************" }
|
if { s6-echo -- "***************************************************************************" }
|
||||||
if { s6-echo -- "** Booting Obarun under S6 **" }
|
if { s6-echo -- "** Booting Obarun with S6 **" }
|
||||||
if { s6-echo -- "** Warning: Under development **" }
|
if { s6-echo -- "** https://obarun.org/ **" }
|
||||||
if { s6-echo -- "** http://obarun.org/forum/ **" }
|
|
||||||
s6-echo -- "***************************************************************************"
|
s6-echo -- "***************************************************************************"
|
||||||
}
|
}
|
||||||
|
|
||||||
# Copy service for pid1 in the right place
|
# Copy service for pid1 at the right place
|
||||||
import -i svc-serv
|
s6-envdir -if /etc/s6/env
|
||||||
|
importas -i SRC SRC
|
||||||
|
importas -i DEST DEST
|
||||||
foreground {
|
foreground {
|
||||||
if { cp -a ${svc-serv} /run/s6 }
|
s6-hiercopy ${SRC} ${DEST}
|
||||||
}
|
|
||||||
|
|
||||||
# Create symlink to /run/s6-run
|
|
||||||
if {
|
|
||||||
forbacktickx -p -0 i { s6-ls -0 /run/s6 }
|
|
||||||
import -u i
|
|
||||||
foreground
|
|
||||||
{
|
|
||||||
if { s6-mkdir -p -m 0755 /run/s6-run/ }
|
|
||||||
s6-ln -s -- /run/s6/${i} /run/s6-run/
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
redirfd -r 0 /dev/null
|
redirfd -r 0 /dev/null
|
||||||
redirfd -wnb 1 /run/s6-run/service/s6-svscan-log/fifo
|
redirfd -wnb 1 ${DEST}/service/s6-svscan-log/fifo
|
||||||
|
fdmove -c 2 1
|
||||||
|
|
||||||
# Now we are good for stage2, start it
|
# Now we are good for stage2, start it
|
||||||
background {
|
background {
|
||||||
s6-setsid --
|
s6-setsid --
|
||||||
redirfd -w 1 /run/s6-run/service/s6-svscan-log/fifo
|
redirfd -w 1 ${DEST}/service/s6-svscan-log/fifo
|
||||||
fdmove -c 2 1
|
/etc/s6/stage2
|
||||||
/etc/stage2
|
|
||||||
}
|
}
|
||||||
|
|
||||||
unexport !
|
unexport !
|
||||||
fdmove -c 2 1
|
s6-svscan -st0 ${DEST}/service
|
||||||
s6-envdir -I /run/s6-run/service/.s6-svscan/
|
|
||||||
s6-svscan -st0 /run/s6-run/service
|
|
||||||
|
14
poweroff
14
poweroff
@@ -1,3 +1,13 @@
|
|||||||
#!/bin/bash
|
#!@BINDIR_EXECLINE@/execlineb -P
|
||||||
|
# Copyright (c) 2015-2017 Eric Vidal <eric@obarun.org>
|
||||||
|
# All rights reserved.
|
||||||
|
#
|
||||||
|
# This file is part of Obarun. It is subject to the license terms in
|
||||||
|
# the LICENSE file found in the top-level directory of this
|
||||||
|
# distribution and at https://github.com/Obarun/s6-boot/LICENSE
|
||||||
|
# This file may not be copied, modified, propagated, or distributed
|
||||||
|
# except according to the terms contained in the LICENSE file.
|
||||||
|
|
||||||
exec /run/s6-run/service/.s6-svscan/SIGUSR2
|
s6-envdir -if /etc/s6/env
|
||||||
|
importas -i DEST DEST
|
||||||
|
exec -c ${DEST}/service/.s6-svscan/SIGQUIT
|
||||||
|
@@ -1,46 +0,0 @@
|
|||||||
#!/usr/local/bin/execlineb -P
|
|
||||||
fdmove -c 2 1
|
|
||||||
s6-envdir /etc/s6/env/s6-conf
|
|
||||||
# mount proc sys dev run if doesn't exist
|
|
||||||
#import -i HOSTNAME
|
|
||||||
#if { s6-hostname $HOSTNAME }
|
|
||||||
foreground {
|
|
||||||
forx -p first { proc sys dev run }
|
|
||||||
import -ui first
|
|
||||||
foreground {
|
|
||||||
if -n { mountpoint -q /$first }
|
|
||||||
s6-envdir /etc/s6/env/mount/$first
|
|
||||||
import -ui fstype
|
|
||||||
import -ui device
|
|
||||||
import -ui mountpoint
|
|
||||||
import -ui options
|
|
||||||
s6-mount -o $options -t $fstype $device $mountpoint
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
# create needed directory on run if doesn't exist
|
|
||||||
if {
|
|
||||||
forx -p second { lvm user lock }
|
|
||||||
import -ui second
|
|
||||||
foreground {
|
|
||||||
if -n { s6-test -d /run/$second }
|
|
||||||
s6-mkdir -p -m 0755 /run/$second
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
# finaly mount /dev/shm /dev/pts
|
|
||||||
forx -p third { shm pts }
|
|
||||||
import -ui third
|
|
||||||
if {
|
|
||||||
foreground {
|
|
||||||
if -n { mountpoint -q /dev/$third }
|
|
||||||
if { s6-mkdir -p -m 0755 /dev/$third }
|
|
||||||
s6-envdir /etc/s6/env/mount/$third
|
|
||||||
import -ui fstype
|
|
||||||
import -ui device
|
|
||||||
import -ui mountpoint
|
|
||||||
import -ui options
|
|
||||||
s6-mount -o $options -n -t $fstype $device $mountpoint
|
|
||||||
}
|
|
||||||
}
|
|
@@ -1,2 +0,0 @@
|
|||||||
all-Boot
|
|
||||||
all-User
|
|
@@ -1,11 +0,0 @@
|
|||||||
#!/usr/local/bin/execlineb -P
|
|
||||||
|
|
||||||
fdmove -c 2 1
|
|
||||||
s6-envdir /etc/s6/env/s6-conf
|
|
||||||
import -D "" USEBTRFS
|
|
||||||
foreground {
|
|
||||||
if { s6-test $USEBTRFS = yes }
|
|
||||||
if { s6-test -x /usr/bin/btrfs }
|
|
||||||
btrfs device scan
|
|
||||||
}
|
|
||||||
true
|
|
@@ -1,11 +0,0 @@
|
|||||||
#!/usr/local/bin/execlineb -P
|
|
||||||
|
|
||||||
fdmove -c 2 1
|
|
||||||
s6-envdir /etc/s6/env/s6-conf
|
|
||||||
import -D "" USEDMRAID
|
|
||||||
foreground {
|
|
||||||
if { s6-test $USEDMRAID = yes }
|
|
||||||
if { s6-test -x /usr/bin/dmraid }
|
|
||||||
dmraid -i -ay
|
|
||||||
}
|
|
||||||
true
|
|
@@ -1,8 +0,0 @@
|
|||||||
#!/usr/local/bin/execlineb -P
|
|
||||||
fdmove -c 2 1
|
|
||||||
# if partition is checked, fsck return a fail exit
|
|
||||||
# and a crash occurs, so whatever happens with fsck, the output need to be a success
|
|
||||||
if -t {
|
|
||||||
fsck -A -T -a
|
|
||||||
}
|
|
||||||
s6-true
|
|
@@ -1,14 +0,0 @@
|
|||||||
#!/usr/local/bin/execlineb -P
|
|
||||||
|
|
||||||
fdmove -c 2 1
|
|
||||||
foreground {
|
|
||||||
redirfd -r 0 /proc/cgroups
|
|
||||||
pipeline { s6-tail -n +2 }
|
|
||||||
pipeline { s6-cut -d"\t" -f1 }
|
|
||||||
pipeline { s6-grep -vF -- devices }
|
|
||||||
forstdin -d"\n" -- i
|
|
||||||
import -u i
|
|
||||||
if { mountpoint -q /sys/fs/cgroup/${i} }
|
|
||||||
umount -R /sys/fs/cgroup/${i}
|
|
||||||
}
|
|
||||||
umount /sys/fs/cgroup
|
|
@@ -1,19 +0,0 @@
|
|||||||
#!/usr/local/bin/execlineb -P
|
|
||||||
|
|
||||||
fdmove -c 2 1
|
|
||||||
s6-envdir /etc/s6/env/s6-conf
|
|
||||||
import -D "" CGROUPS
|
|
||||||
foreground {
|
|
||||||
if { s6-test $CGROUPS = yes }
|
|
||||||
if { mkdir -p -m 0755 /sys/fs/cgroup }
|
|
||||||
if { s6-mount -wt tmpfs cgroup /sys/fs/cgroup }
|
|
||||||
redirfd -r 0 /proc/cgroups
|
|
||||||
pipeline { s6-tail -n +2 }
|
|
||||||
pipeline { s6-cut -d"\t" -f1 }
|
|
||||||
pipeline { s6-grep -vF -- devices }
|
|
||||||
forstdin -d"\n" -- i
|
|
||||||
import -u i
|
|
||||||
if { s6-mkdir /sys/fs/cgroup/${i} }
|
|
||||||
s6-mount -t cgroup -o ${i} -- cgroup /sys/fs/cgroup/${i}
|
|
||||||
}
|
|
||||||
true
|
|
@@ -1,14 +0,0 @@
|
|||||||
#!/usr/local/bin/execlineb -P
|
|
||||||
|
|
||||||
fdmove -c 2 1
|
|
||||||
s6-envdir /etc/s6/env/s6-conf
|
|
||||||
import -D "" KEYMAP
|
|
||||||
import -D "" FONT
|
|
||||||
import -D "" FONT_MAP
|
|
||||||
import -D "" FONT_UNIMAP
|
|
||||||
foreground {
|
|
||||||
loadkeys -q -u $KEYMAP
|
|
||||||
}
|
|
||||||
forx index { 0 1 2 3 4 5 6 7 8 9 10 }
|
|
||||||
import -u index
|
|
||||||
setfont -m $FONT_MAP -u $FONT_UNIMAP $FONT -C /dev/tty${index}
|
|
@@ -1,11 +0,0 @@
|
|||||||
#!/usr/local/bin/execlineb -P
|
|
||||||
|
|
||||||
fdmove -c 2 1
|
|
||||||
s6-envdir /etc/s6/env/s6-conf
|
|
||||||
import -D "" TZ
|
|
||||||
import -D "" HARDWARECLOCK
|
|
||||||
pipeline -d { echo $HARDWARECLOCK }
|
|
||||||
pipeline { tr A-Z a-z }
|
|
||||||
forstdin -- clock
|
|
||||||
import -iu clock
|
|
||||||
hwclock --systz --${clock} --noadjfile
|
|
@@ -1,10 +0,0 @@
|
|||||||
#!/usr/local/bin/execlineb -P
|
|
||||||
|
|
||||||
fdmove -c 2 1
|
|
||||||
pipeline -d { kmod static-nodes }
|
|
||||||
pipeline { s6-grep -F -- Module: }
|
|
||||||
pipeline { s6-cut -d":" -f2 }
|
|
||||||
pipeline { s6-cut -d" " -f2 }
|
|
||||||
forstdin -d"\n" -- mod
|
|
||||||
import -iu mod
|
|
||||||
modprobe $mod
|
|
@@ -1,12 +0,0 @@
|
|||||||
#!/usr/bin/execlineb -P
|
|
||||||
|
|
||||||
fdmove -c 2 1
|
|
||||||
s6-envdir /etc/s6/env/s6-conf
|
|
||||||
import -D "" KERNELRUNTIME
|
|
||||||
foreground {
|
|
||||||
if { s6-test $KERNELRUNTIME = yes }
|
|
||||||
if { s6-test -x /usr/bin/sysctl }
|
|
||||||
if { s6-test -e /etc/sysctl.conf }
|
|
||||||
sysctl -p /etc/sysctl.conf
|
|
||||||
}
|
|
||||||
true
|
|
@@ -1,4 +0,0 @@
|
|||||||
#!/usr/local/bin/execlineb -P
|
|
||||||
|
|
||||||
fdmove -c 2 1
|
|
||||||
ip link set up dev lo
|
|
@@ -1,14 +0,0 @@
|
|||||||
#!/usr/local/bin/execlineb -P
|
|
||||||
|
|
||||||
fdmove -c 2 1
|
|
||||||
foreground {
|
|
||||||
if { s6-test -e /etc/s6/env/s6-conf/MODULES }
|
|
||||||
redirfd -r 0 /etc/s6/env/s6-conf/MODULES
|
|
||||||
forstdin -n -- mods
|
|
||||||
import -ui mods
|
|
||||||
foreground {
|
|
||||||
if { s6-test -n $mods }
|
|
||||||
modprobe -ab $mods
|
|
||||||
}
|
|
||||||
}
|
|
||||||
true
|
|
@@ -1,4 +0,0 @@
|
|||||||
#!/usr/local/bin/execlineb -P
|
|
||||||
|
|
||||||
fdmove -c 2 1
|
|
||||||
swapoff -a
|
|
@@ -1,10 +0,0 @@
|
|||||||
#!/usr/local/bin/execlineb -P
|
|
||||||
|
|
||||||
fdmove -c 2 1
|
|
||||||
s6-envdir /etc/s6/env/s6-conf
|
|
||||||
import -D "" USESWAP
|
|
||||||
foreground {
|
|
||||||
if { s6-test $USESWAP = yes }
|
|
||||||
swapon -a
|
|
||||||
}
|
|
||||||
true
|
|
@@ -1,11 +0,0 @@
|
|||||||
#!/usr/local/bin/execlineb -P
|
|
||||||
|
|
||||||
fdmove -c 2 1
|
|
||||||
if -t { install -m0664 -o root -g utmp /dev/null /run/utmp }
|
|
||||||
|
|
||||||
if -nt { s6-test -e /var/log/wtmp }
|
|
||||||
if -t { install -m0664 -o root -g utmp /dev/null /var/log/wtmp }
|
|
||||||
|
|
||||||
if -nt { s6-test -e /var/log/btmp }
|
|
||||||
if -t { install -m0600 -o root -g utmp /dev/null /var/log/btmp }
|
|
||||||
install -dm1777 /tmp/.X11-unix /tmp/.ICE-unix
|
|
@@ -1,5 +0,0 @@
|
|||||||
#!/usr/local/bin/execlineb -P
|
|
||||||
|
|
||||||
fdmove -c 2 1
|
|
||||||
redirfd -w 1 /var/log/dmesg.log
|
|
||||||
dmesg
|
|
@@ -1,3 +0,0 @@
|
|||||||
#!/usr/local/bin/execlineb -P
|
|
||||||
fdmove -c 2 1
|
|
||||||
s6-mount -o remount,rw / /
|
|
@@ -1,6 +0,0 @@
|
|||||||
#!/usr/local/bin/execlineb -P
|
|
||||||
|
|
||||||
fdmove -c 2 1
|
|
||||||
s6-envdir /etc/s6/env/s6-conf
|
|
||||||
import -D "" TZ
|
|
||||||
s6-ln -sf /usr/share/zoneinfo/${TZ} /etc/localtime
|
|
@@ -1,4 +0,0 @@
|
|||||||
#!/usr/bin/execlineb -P
|
|
||||||
|
|
||||||
fdmove -c 2 1
|
|
||||||
mount -a -t "nosysfs,nonfs,nonfs4,nosmbfs,nocifs" -O no_netdev
|
|
@@ -1,23 +0,0 @@
|
|||||||
#!/usr/local/bin/execlineb -P
|
|
||||||
|
|
||||||
fdmove -c 2 1
|
|
||||||
|
|
||||||
foreground {
|
|
||||||
cp /var/lib/random-seed /dev/urandom
|
|
||||||
}
|
|
||||||
|
|
||||||
backtick -n bytes { cat /proc/sys/kernel/random/poolsize }
|
|
||||||
import -u bytes
|
|
||||||
if -t {
|
|
||||||
foreground {
|
|
||||||
if { s6-test -z $bytes }
|
|
||||||
define defbytes 512
|
|
||||||
umask 077
|
|
||||||
dd if=/dev/urandom of=/var/lib/random-seed count=1 bs=$defbytes
|
|
||||||
}
|
|
||||||
true
|
|
||||||
}
|
|
||||||
|
|
||||||
umask 077
|
|
||||||
redirfd -w 1 /dev/null
|
|
||||||
dd if=/dev/urandom of=/var/lib/random-seed count=1 bs=$bytes
|
|
@@ -1,5 +0,0 @@
|
|||||||
#!/usr/local/bin/execlineb -P
|
|
||||||
fdmove -c 2 1
|
|
||||||
exec -c
|
|
||||||
udevd
|
|
||||||
|
|
@@ -1,2 +0,0 @@
|
|||||||
udevd-udev
|
|
||||||
udevd-udevrules
|
|
@@ -1,4 +0,0 @@
|
|||||||
#!/usr/local/bin/execlineb -P
|
|
||||||
#fdmove -c 2 1
|
|
||||||
s6-devd
|
|
||||||
/usr/bin/udevadm settle
|
|
@@ -1 +0,0 @@
|
|||||||
longrun
|
|
@@ -1,6 +0,0 @@
|
|||||||
#!/usr/local/bin/execlineb -P
|
|
||||||
fdmove -c 2 1
|
|
||||||
foreground {
|
|
||||||
if { udevadm trigger --action=add --type=subsystems }
|
|
||||||
udevadm trigger --action=add --type=devices
|
|
||||||
}
|
|
94
rc/00/up
Normal file
94
rc/00/up
Normal file
@@ -0,0 +1,94 @@
|
|||||||
|
#!@BINDIR_EXECLINE@/execlineb -P
|
||||||
|
# Copyright (c) 2015-2017 Eric Vidal <eric@obarun.org>
|
||||||
|
# All rights reserved.
|
||||||
|
#
|
||||||
|
# This file is part of Obarun. It is subject to the license terms in
|
||||||
|
# the LICENSE file found in the top-level directory of this
|
||||||
|
# distribution and at https://github.com/Obarun/s6-boot/LICENSE
|
||||||
|
# This file may not be copied, modified, propagated, or distributed
|
||||||
|
# except according to the terms contained in the LICENSE file.
|
||||||
|
|
||||||
|
fdmove -c 2 1
|
||||||
|
if { s6-echo -- 00 started }
|
||||||
|
|
||||||
|
foreground {
|
||||||
|
|
||||||
|
if { s6-echo -- Mounting filesystem }
|
||||||
|
|
||||||
|
# mount proc sys dev run if doesn't exist
|
||||||
|
foreground {
|
||||||
|
forx -p first { proc sys dev run }
|
||||||
|
importas -ui -D "" first first
|
||||||
|
foreground {
|
||||||
|
if -n { mountpoint -q /$first }
|
||||||
|
s6-envdir /etc/s6/filesystem-env/$first
|
||||||
|
importas -ui fstype fstype
|
||||||
|
importas -ui device device
|
||||||
|
importas -ui mountpoint mountpoint
|
||||||
|
importas -ui options options
|
||||||
|
s6-mount -o $options -t $fstype $device $mountpoint
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
# create needed directory on run if doesn't exist
|
||||||
|
if {
|
||||||
|
forx -p second { lvm user lock }
|
||||||
|
importas -ui second second
|
||||||
|
foreground {
|
||||||
|
if -n { s6-test -d /run/$second }
|
||||||
|
s6-mkdir -p -m 0755 /run/$second
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
# finaly mount /dev/shm /dev/pts
|
||||||
|
if {
|
||||||
|
forx -p third { shm pts }
|
||||||
|
importas -ui third third
|
||||||
|
if {
|
||||||
|
foreground {
|
||||||
|
if -n { mountpoint -q /dev/$third }
|
||||||
|
if { s6-mkdir -p -m 0755 /dev/$third }
|
||||||
|
s6-envdir /etc/s6/filesystem-env/$third
|
||||||
|
importas -ui fstype fstype
|
||||||
|
importas -ui device device
|
||||||
|
importas -ui mountpoint mountpoint
|
||||||
|
importas -ui options options
|
||||||
|
s6-mount -o $options -n -t $fstype $device $mountpoint
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
s6-echo -- filesystem was mounted successfully
|
||||||
|
}
|
||||||
|
|
||||||
|
# parse s6.conf before loading environment
|
||||||
|
foreground {
|
||||||
|
|
||||||
|
if { s6-echo -- Parsing s6-conf }
|
||||||
|
|
||||||
|
importas -i S6CONF S6CONF
|
||||||
|
foreground {
|
||||||
|
redirfd -r 0 /etc/s6/s6.conf
|
||||||
|
pipeline { s6-grep -vF -- "#" }
|
||||||
|
forstdin -nCd"\n" -- conf
|
||||||
|
importas -ui conf conf
|
||||||
|
multidefine -d"=" $conf { var value }
|
||||||
|
foreground {
|
||||||
|
if { mkdir -p ${S6CONF}/ }
|
||||||
|
redirfd -w 1 ${S6CONF}/$var
|
||||||
|
s6-echo -- $value
|
||||||
|
}
|
||||||
|
}
|
||||||
|
s6-echo -- s6-conf was parsed successfully
|
||||||
|
}
|
||||||
|
|
||||||
|
# load hostname for earlier tty
|
||||||
|
foreground {
|
||||||
|
|
||||||
|
if { s6-echo -- Define hostname }
|
||||||
|
importas -i S6CONF S6CONF
|
||||||
|
s6-envdir ${S6CONF}
|
||||||
|
importas -i HOSTNAME HOSTNAME
|
||||||
|
s6-hostname ${HOSTNAME}
|
||||||
|
}
|
||||||
|
s6-echo -- 00 successfully started
|
3
rc/All/contents
Normal file
3
rc/All/contents
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
00
|
||||||
|
all-Boot
|
||||||
|
adduser
|
16
rc/adduser/up
Normal file
16
rc/adduser/up
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
#!@BINDIR_EXECLINE@/execlineb -P
|
||||||
|
# Copyright (c) 2015-2017 Eric Vidal <eric@obarun.org>
|
||||||
|
# All rights reserved.
|
||||||
|
#
|
||||||
|
# This file is part of Obarun. It is subject to the license terms in
|
||||||
|
# the LICENSE file found in the top-level directory of this
|
||||||
|
# distribution and at https://github.com/Obarun/s6-boot/LICENSE
|
||||||
|
# This file may not be copied, modified, propagated, or distributed
|
||||||
|
# except according to the terms contained in the LICENSE file.
|
||||||
|
|
||||||
|
fdmove -c 2 1
|
||||||
|
importas -i HANDLE HANDLE
|
||||||
|
if { s6-echo -- start adduser }
|
||||||
|
if { ${HANDLE}/user.sh "boot" add }
|
||||||
|
s6-echo -- adduser started successfully
|
||||||
|
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user