From c59fb67ed0b8f17bc585914e98f099097df77c4e Mon Sep 17 00:00:00 2001 From: "Andreas B. Mundt" Date: Sat, 19 Aug 2023 14:26:58 +0200 Subject: [PATCH] Try smart umount as a simple solution (no credentials needed). --- roles/lmn_mount/tasks/main.yml | 6 ++-- roles/lmn_printer/tasks/main.yml | 3 +- roles/lmn_vm/files/pam-umount.sh | 40 +++++++++++++++++++++++++ roles/lmn_vm/files/u-mount.sh | 51 -------------------------------- roles/lmn_vm/tasks/main.yml | 30 +++++++++++++++---- 5 files changed, 70 insertions(+), 60 deletions(-) create mode 100644 roles/lmn_vm/files/pam-umount.sh delete mode 100644 roles/lmn_vm/files/u-mount.sh diff --git a/roles/lmn_mount/tasks/main.yml b/roles/lmn_mount/tasks/main.yml index ff633c8..195e85e 100644 --- a/roles/lmn_mount/tasks/main.yml +++ b/roles/lmn_mount/tasks/main.yml @@ -12,11 +12,11 @@ - name: Configure pam_mount for LMN homes blockinfile: dest: /etc/security/pam_mount.conf.xml - marker: "" + marker: "" block: | - + rootansibleDebian-gdmsddmvirti + >rootansibleDebian-gdmsddmvirti + insertafter: "" - name: Create /etc/linuxmuster-linuxclient7 Directory diff --git a/roles/lmn_vm/files/pam-umount.sh b/roles/lmn_vm/files/pam-umount.sh new file mode 100644 index 0000000..d6a33df --- /dev/null +++ b/roles/lmn_vm/files/pam-umount.sh @@ -0,0 +1,40 @@ +#!/usr/bin/bash +# +# /usr/local/sbin/pam-umount.sh %(USER) %(USERUID) %(MNTPT)' + +set -eu + +LANG=C +usr="$1" +uid="$2" +mtp="$3" + +lmuh="/lmn/media/$usr/home" +lmus="/lmn/media/$usr/share" + +for VMname in $(sudo -u $usr XDG_RUNTIME_DIR="/run/user/$uid" \ + virsh list --state-running | grep running | awk '{print $2}'); do + sudo -u $usr XDG_RUNTIME_DIR="/run/user/$uid" virsh destroy $VMname || true + sleep 1 +done +#killall -9 virtiofsd + +if [[ "$mtp" =~ "/srv/samba/schools" ]] ; then + N=0 + mh=true + ms=true + mountpoint -q $lmuh || mh=false + mountpoint -q $lmus || ms=false + while [[ $N -lt 10 ]] && ([[ $mh = true ]] || [[ $ms = true ]]) ; do + if [[ $mh = true ]] ; then + umount "$lmuh" && mh=false + fi + if [[ $ms = true ]] ; then + umount "$lmus" && ms=false + fi + N=$((N + 1)) + sleep 1 + done + systemd-cat echo "Tried $N umount(s)." +fi +exec umount "$mtp" diff --git a/roles/lmn_vm/files/u-mount.sh b/roles/lmn_vm/files/u-mount.sh deleted file mode 100644 index 9537167..0000000 --- a/roles/lmn_vm/files/u-mount.sh +++ /dev/null @@ -1,51 +0,0 @@ -#!/usr/bin/bash -# -# /usr/local/sbin/u-mount.sh %(USER) %(USERUID) %(MNTPT) %(FSTYPE) %(OPTIONS) %(SERVER) %(VOLUME)' -# /usr/local/sbin/u-mount.sh %(USER) %(USERUID) %(MNTPT)' - -set -eu - -systemd-cat echo $@ - -LANG=C -usr="$1" -uid="$2" -mtp="$3" - -if [[ "$#" -gt 3 ]] ; then - ## we are mounting - fty="$4" - opt="$5" - srv="$6" - vol="$7" - case "$fty" in - "davfs") - systemd-cat echo mount -t davfs -o "$opt" "$vol" "$mtp" - exec mount -t davfs -o "$opt" "$vol" "$mtp" - ;; - "cifs") - if [[ ! "$vol" =~ "sysvol" ]] ; then - home="$(getent passwd "$usr" | cut -d : -f 6)" - vol="default-school/" - mount -t cifs -o "$opt" "//$srv/$vol" "$mtp" - mkdir -p "/lmn/media/$usr/share" - mkdir -p "/lmn/media/$usr/home" - mount -o bind "/srv/samba/schools/default-school/share" "/lmn/media/$usr/share" - exec mount -o bind "$home" "/lmn/media/$usr/home" - else - mount -t cifs -o "$opt" "//$srv/$vol" "$mtp" - fi - esac -else -# for VMname in $(sudo -u $user XDG_RUNTIME_DIR="/run/user/$uid" \ -# virsh list --state-running | grep running | awk '{print $2}'); do -# sudo -u $user XDG_RUNTIME_DIR="/run/user/$uid" virsh destroy $VMname -# sleep 1 -# done - #killall -9 virtiofsd - - - umount "/lmn/media/$usr/share" && rmdir "/lmn/media/$usr/share" - umount "/lmn/media/$usr/home" && rmdir "/lmn/media/$usr/home" - exec umount "$mtp" -fi diff --git a/roles/lmn_vm/tasks/main.yml b/roles/lmn_vm/tasks/main.yml index 28658c2..7c4423c 100644 --- a/roles/lmn_vm/tasks/main.yml +++ b/roles/lmn_vm/tasks/main.yml @@ -14,19 +14,39 @@ # insertafter: '#auth_unix_rw = "polkit"' # notify: reload libvirtd -- name: Generate bind mounts for VMs in extra mount script +- name: Configure pam_mount for VM bind mounts blockinfile: dest: /etc/security/pam_mount.conf.xml marker: "" block: | - /usr/local/sbin/u-mount.sh %(USER) %(USERUID) %(MNTPT) %(FSTYPE) %(OPTIONS) %(VOLUME) "~"' - /usr/local/sbin/u-mount.sh %(USER) %(USERUID) %(MNTPT)' + + rootansibleDebian-gdmsddmvirti + + rootansibleDebian-gdmsddmvirti + + insertafter: "" + +- name: Use umount script for proper ordering + blockinfile: + dest: /etc/security/pam_mount.conf.xml + marker: "" + block: | + + /usr/local/sbin/pam-umount.sh %(USER) %(USERUID) %(MNTPT) insertafter: '^