tu /etc/fstab <<<"$l"
done
}
+kill-dir() {
+ found_pids=false
+ sig=${1:-TERM}
+ if pids=$(timeout 4 lsof -t $dir); then
+ found_pids=true
+ timeout 4 lsof -w $dir
+ kill -$sig $pids
+ fi
+ # fuser will find open sockets that lsof won't, for example from gpg-agent.
+ # note: -v shows kernel processes, which then doesn't return true when we want
+ if timeout 4 fuser -m $dir &>/dev/null; then
+ found_pids=true
+ fuser -$sig -mvk $dir
+ fi
+ if $found_pids; then
+ sleep .5
+ return 0
+ fi
+ return 1
+}
+
+force=false
+if [[ $1 == -f ]]; then
+ force=true
+fi
ret=0
shopt -s nullglob
+# ssh and probably some other things care about parent directory
+# ownership, and ssh doesn\'t allow any group writable parent
+# directories, so we are forced to use a directory structure similar
+# to home directories
f=(/mnt/root/btrbk/q.*)
if [[ -e $f ]]; then
fstab <<EOF
-$first_root_crypt /q btrfs noatime,subvol=q 0 0
+$first_root_crypt /q btrfs noatime,subvol=q,gid=1000 0 0
/q/p /p none bind 0 0
EOF
fi
if e umount -R $dir; then
unmounted+=($dir)
else
- if pids=$(timeout 4 lsof -t $dir); then
- timeout 4 lsof -w $dir
- kill $pids
- fi
-
- # fuser will find open sockets that lsof won't, for example from gpg-agent.
- # note: -v shows kernel processes, which then doesn't return true when we want
- if timeout 4 fuser -m $dir &>/dev/null; then
- fuser -TERM -mvk $dir
- fi
+ kill-dir || kill-dir INT || kill-dir HUP || ! $force || kill-dir KILL ||:
- sleep .5
if e umount -R $dir; then
unmounted+=($dir)
else