finish bind mount, removed in next commit
[distro-setup] / conflink
index 8431c168a40a5a36e13d7a2fd17ba80f39f1dbf5..50747a327e57e9ca7be960ada8c5ac14c242eab7 100755 (executable)
--- a/conflink
+++ b/conflink
@@ -43,23 +43,45 @@ subdir-link-r() {
     done
 }
 
+
+
 common-file-setup() {
-    local dir fs x
+    local dir fs x bdir f dst
     for dir in "$@"; do
         fs=$dir/filesystem
         if [[ -e $fs && $USER == ian ]]; then
             # note, symlinks get resolved, not copied.
             m s cp -RLT --preserve=mode,timestamps $fs /
         fi
+
+        # one program so far does not work with a symlink,
+        # so we have to use a bind mount
+        bdir=$dir/binds
+        if [[ -e $bdir && $USER == ian ]]; then
+            for f in $(find $bdir -type f); do
+                dst=/home/ian/${f##$bdir}
+                binds+="$f $dst none bind 0 0"$'\n'
+                if [[ ! -e $dst || $(stat -c%i $f $dst |uniq -u) ]]; then
+                    if mountpoint -q $dst; then
+                        s umount $dst
+                    fi
+                    # note: in future, may need to mkdir also
+                    [[ -e $dst ]] || touch $dst
+                    s mount --bind $f $dst
+                fi
+            done
+        fi
+
         if [[ -e $dir/subdir_files ]]; then
             subdir-link-r $dir/subdir_files
         fi
-        local x=( $dir/!(subdir_files|filesystem|machine_specific|..|.) )
+        local x=( $dir/!(binds|subdir_files|filesystem|machine_specific|..|.) )
         (( ${#x[@]} >= 1 )) || continue
         m lnf ${x[@]} ~
     done
 }
 
+binds=""
 all_dirs=({/a/c,/p/c}{,/machine_specific/$HOSTNAME})
 # note, we assume a group of hosts does not have the
 # same name as a single host, which is no problem on our scale.
@@ -72,6 +94,14 @@ case $USER in
     ian)
         # p needs to go first so .ssh link is created, then config link inside it
         common-file-setup ${all_dirs[@]}
+        if [[ $binds ]]; then
+            s /a/exe/cedit conflink /etc/fstab <<<"$binds" || [[ $? == 1 ]]
+        fi
+        if [[ -d /etc/bind/bind-writable ]]; then
+            # need bind writable dir for nsupdate, or else we get
+            # named[20823]: /etc/bind/db.iank.pw.jnl: create: permission denied
+            s chgrp bind /etc/bind/bind-writable
+        fi
         sudo -u traci "$BASH_SOURCE"
         ;;
     traci)