blob: f3f323faa5139b06f401efd3f97907fb2b0a483f (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
|
#!/bin/sh
set -eux
STATE_DIR=${STATE_DIR:-/etc/s6-rc}
TEMPLATE_DIR=${TEMPLATE_DIR:-${STATE_DIR}/templates}
GENERATE_DIR=${GENERATE_DIR:-${STATE_DIR}/generate}
dst_dir=${1:-/run/svtree-generated}
doinstall() {
local sv_name=${1:?}
local dir=${2:?}
local dst
# replace placeholder in destination name
dst="$(readlink -e "$dst_dir")"/"$(basename "$dir" | sed "s/+service/${sv_name}/")"
# create destination
install -d $dst
# copy everything over
cp -r ${dir}/* ${dst}/
# replace placeholders with service name
find $dst -type f -exec \
sed \
-e "s,+statedir,${STATE_DIR},g" \
-e "s,+service,${sv_name},g" \
-i {} \+
}
dogenerate() {
local sv_name=${1:?}
local sv_template=${2:?}
printf "=> generating $sv_template : $sv_name\n" >&2
# iterate over files in $TEMPLATE_DIR/<template> and pass them to
# doinstall
for dir in "${TEMPLATE_DIR}/${sv_template}"/*; do
dir=$(readlink -e "$dir")
doinstall "$sv_name" "$dir"
done
}
main() {
test -e "$GENERATE_DIR" || exit 1
test -e "$TEMPLATE_DIR" || exit 1
# clear previous output (if any)
rm -rf "${dst_dir:?}"/* || true
# create destination directory
mkdir -p "$dst_dir"
# files in $GENERATE_DIR indicate which services we need to generate
# and what template to use: <template>.<service>
for gen in "$(readlink -e "$GENERATE_DIR")"/*; do
gen=$(basename "$gen")
sv_template=$(printf %s "$gen" | cut -d. -f1)
sv_name=$(printf %s "$gen" | cut -d. -f2)
dogenerate "$sv_name" "$sv_template"
done
}
main
|