commit f9086e00aaa2c7e74b0c9dcb5215ebe3679ba0a7
parent 779113e7d163e4f4e23ed27062bf772c81413408
Author: Jan Pobříslo <ccx@te2000.cz>
Date: Tue, 28 Jun 2022 01:59:47 +0200
Rework containers_usersvc_simple to mount arbitrary subset of predefined directories to /mnt
Diffstat:
1 file changed, 29 insertions(+), 6 deletions(-)
diff --git a/zsh-functions/confz_site_containers_init b/zsh-functions/confz_site_containers_init
@@ -14,21 +14,44 @@ typeset -gA site_containers_mountpoints=(
confz_site_containers_usersvc_simple_check() {
checkvars containers_dir svscan_dir user uid gid image_name
defvar container_name "$vars[image_name]"
+ defvar mount_ro init
+
+ local userdir bindroot flags mtp
+ local -a fstab mnt_dirs_extra
+ userdir=$vars[containers_dir]/user/$vars[user]
+ bindroot=$userdir/$vars[container_name]/root
+
+ if (($+vars[mount_ro])); then
+ flags=$'\tnone\tbind,ro,nosuid,nodev\t0 0'
+ for mtp in ${=vars[mount_ro]}; do
+ mnt_dirs_extra+=( $mtp )
+ fstab+=( $site_containers_mountpoints[$mtp]$'\t'$bindroot/mnt/$mtp$flags )
+ done
+ fi
+ if (($+vars[mount_rw])); then
+ flags=$'\tnone\tbind,rw,nosuid,nodev\t0 0'
+ for mtp in ${=vars[mount_rw]}; do
+ mnt_dirs_extra+=( $mtp )
+ fstab+=( $site_containers_mountpoints[$mtp]$'\t'$bindroot/mnt/$mtp$flags )
+ done
+ fi
+
+ if (($#mnt_dirs_extra)); then
+ unify mnt_dirs_extra "$mnt_dirs_extra"
+ unify fstab_extra ${(F)fstab}
+ fi
- local userdir=$vars[containers_dir]/user/$vars[user]
- local bindroot=$userdir/$vars[container_name]/root
- local -a fstab
require container_service_generic \
:image_name :container_name :containers_dir :svscan_dir :user \
- mnt_dirs_extra=init \
- fstab_extra=/home/$vars[user]/bzr/container-user-init$'\t'$bindroot/mnt/init$'\tnone\tbind,ro,nosuid,nodev\t0 0'
+ \?mnt_dirs_extra \?fstab_extra
+
local chome=$userdir/$vars[container_name]/home/$vars[user]
if ! [[ -d $chome/run ]]; then
require fs_l filename=$chome/run destination=/mnt/init
require fs_o filename=$chome/run owner=$uid:$gid
fi
-
}
+
confz_site_containers_user_check() {
checkvars containers_dir svscan_dir user
local display container bind bind_dir bindroot chome uid gid