lots of updates, things working
[distro-setup] / mount-latest-subvol
index e4c4d6b0a652b992f6feb7483cecd394bbf1040c..1b0a8e23123201182ac5eb0d7a99ca626f982652 100644 (file)
@@ -73,17 +73,25 @@ mnt() {
         e mount $dir
     fi
 }
+fstab() {
+    while read -r start mpoint end; do
+        l="$start $mpoint $end"
+        # kill off any lines that duplicate the mount point.
+        sed --follow-symlinks -ri "\%$l%b;\%^\s*\S+\s+$mpoint\s%d" /etc/fstab
+        tu /etc/fstab <<<"$l"
+    done
+}
 
 ret=0
 
 ##### begin setup fstab for subvols we care about ######
 first_root_crypt=$(awk '$2 == "/" {print $1}' /etc/mtab)
-tu /etc/fstab <<EOF
+fstab <<EOF
 $first_root_crypt  /a  btrfs  noatime,subvol=a  0 0
 EOF
 case $HOSTNAME in
     treetowl|x2|frodo)
-        tu /etc/fstab <<EOF
+        fstab <<EOF
 $first_root_crypt  /q  btrfs  noatime,subvol=q  0 0
 $first_root_crypt  /o  btrfs  noatime,subvol=o  0 0
 /q/p  /p  none  bind  0 0
@@ -92,7 +100,7 @@ EOF
         ;;
 esac
 if [[ $HOSTNAME == frodo ]]; then
-    tu /etc/fstab <<EOF
+    fstab <<EOF
 $first_root_crypt  /i  btrfs  noatime,subvol=i  0 0
 EOF
 fi
@@ -148,7 +156,7 @@ for vol in q a o i; do
             else
                 echo "$0: failed to umount $dir"
                 # lsof will fail if it finds no pids
-                if ! e lsof $dir; then
+                if ! e timeout 4 lsof $dir; then
                     umount_ret=false
                     ret=1
                     continue