commit f3e4b378a1aa36bb7d1463a137a97f56f873c92e
parent 0994eff55528ba130c047941674b19e82c002541
Author: Jan Pobříslo <ccx@te2000.cz>
Date: Sat, 25 Jun 2022 12:42:27 +0200
Add logging to generic containers
Diffstat:
2 files changed, 29 insertions(+), 2 deletions(-)
diff --git a/service_scripts/generic/run b/service_scripts/generic/run
@@ -1,4 +1,4 @@
-#!/command/execlineb
+#!/command/execlineb -P
#define CONTAINER_NAME alpine-games
#define CONTAINER_USER ccx
s6-envdir env
diff --git a/zsh-functions/confz_containers_init b/zsh-functions/confz_containers_init
@@ -93,6 +93,31 @@ confz_container_service_check() {
require fs_o filename=$vars[svc_dir]/supervise/lock \
owner=$vars[control_user]:0
require fs_m filename=$vars[svc_dir]/supervise/lock mode=644
+
+ if (($+vars[log_dir])); then
+ require container_service_log :log_dir :log_uid :log_gid
+ else
+ [[ -e $vars[svc_dir]/log/supervise ]] && \
+ die "Should not have a logger but one might be running: ${(qqq)vars[svc_dir]}"
+ require fs_r flags=r filename=$vars[svc_dir]/log
+ fi
+}
+
+confz_container_service_log_check() {
+ checkvars svc_dir log_dir log_uid log_gid
+
+ local -a runscript=(
+ '#!/command/execlineb -P'
+ "if { mkdir -p ${(qqq)vars[log_dir]} }"
+ "if { chown -R $vars[log_user]:$vars[log_group] ${(qqq)vars[log_dir]} }"
+ "s6-setuidgid :$vars[log_user]:$vars[log_group]"
+ "s6-log -b -- t ${(qqq)vars[log_dir]}"
+ )
+
+ require fs_d filename=$vars[svc_dir]/log
+ require fs_m filename=$vars[svc_dir]/log mode=755
+ require fs_contentnl filename=$vars[svc_dir]/log/run \
+ content="${(F)runscript}"
}
confz_container_service_preset_check() {
@@ -234,7 +259,7 @@ confz_container_service_sysroot_check() {
}
confz_container_service_generic_check() {
- local uid gid container_user_dir svc_dir container
+ local uid gid container_user_dir svc_dir log_dir container
local -a fstab mnt_dirs
checkvars containers_dir svscan_dir image_name user
defvar fstab_extra ''
@@ -283,9 +308,11 @@ confz_container_service_generic_check() {
)
svc_dir=$vars[svscan_dir]/container.$container.$vars[user]
+ log_dir=/run/container-logs/container.$container.$vars[user]
require container_service_preset preset=generic \
svc_dir=$svc_dir control_user=$uid control_group=$gid \
root_link=$container_user_dir/root \
+ log_dir=$log_dir log_uid=0 log_gid=$gid \
fstab=${(F)fstab} \?down \?fstab_post
require fs_d filename=$svc_dir/env
require fs_contentnl filename=$svc_dir/env/CONTAINER_USER \