commit f6716a398908f0c2965315a59a5fa11ea796dcf6
parent c0063cc908efef690a39d7904c4c5ed00ee2afaa
Author: Jan Pobrislo <ccx@te2000.cz>
Date: Sun, 5 Apr 2020 01:24:05 +0200
User container generation
Diffstat:
1 file changed, 44 insertions(+), 0 deletions(-)
diff --git a/zsh-functions/confz_containers_init b/zsh-functions/confz_containers_init
@@ -82,3 +82,47 @@ confz_container_alpine_package_check() {
)
grep -q '^'$vars[package]'$' $vars[container_root]/etc/apk/world
}
+
+containers_fstab_gen(){
+ printf '%\n' \
+ "overlay $2/union overlay nosuid,nodev,lowerdir=$1,upperdir=$2/changes,workdir=$2/work 0 0" \
+ "run_tmpfs $2/union/run tmpfs rw,nosuid,nodev,mode=755,uid=1000 0 0"
+}
+
+confz_container_user_setup_check() {
+ checkvars container_name containers_dir user
+ defvar container_root $vars[containers_dir]/$vars[container_name]
+ defvar nameserver 127.0.0.1
+
+ local U=$vars[containers_dir]/user/$vars[user]
+ local D=$U/$vars[container_name]
+ local uid=$(awk </etc/passwd -F: -v USER=ccx '$1 == USER {print $3}')
+
+ [[ "$uid" =~ '[0-9]+' ]] || die "Could not get uid for ${(qqq)uid}"
+
+ require fs_d flags= filename=$vars[containers_dir]/user
+ require fs_d flags= filename=$U
+ require fs_d flags= filename=$D
+ require fs_d flags= filename=$D/changes
+ require fs_d flags= filename=$D/union
+ require fs_d flags= filename=$D/work
+ require fs_c flags= filename=$D/fstab \
+ content_call="containers_fstab_gen ${(qqq)vars[container_root]} ${(qqq)U}"
+ require fs_d flags= filename=$D/changes/dev
+ require fs_d flags= filename=$D/changes/dev/shm
+ require fs_d flags= filename=$D/changes/dev/pts
+ require fs_d flags= filename=$D/changes/etc
+ # TODO: $U/changes/etc/passwd
+ require fs_c flags= filename=$D/changes/etc/resolv.conf \
+ content_call="printf '%\n' $vars[nameserver]"
+ require fs_d flags= filename=$D/changes/home
+ require fs_d flags= filename=$D/changes/home/$vars[user]
+ require fs_o owner=$uid filename=$U/changes/home/$vars[user]
+
+ require fs_d flags= filename=$vars[containers_dir]/home
+ require fs_d flags= filename=$vars[containers_dir]/home/$vars[user]
+ require fs_l flags= \
+ filename=$vars[containers_dir]/home/$vars[user]/$vars[container_name] \
+ destination=../../user/$vars[user]/$vars[container_name]/union/home/$vars[user]
+
+}