--- - name: Install needed packages ansible.builtin.apt: name: - libpam-mount - cifs-utils - nfs-common - hxtools - davfs2 state: latest - name: Configure pam_mount for Webdav Nextcloud ansible.builtin.blockinfile: dest: /etc/security/pam_mount.conf.xml marker: "<!-- {mark} ANSIBLE MANAGED BLOCK (mount Nextcloud) -->" block: | <volume fstype="davfs" path="{{ web_dav }}" mountpoint="/lmn/media/%(USER)/nextcloud" options="username=%(USER),nosuid,nodev,uid=%(USER),gid=%(USERGID),grpid,file_mode=0700,dir_mode=0700,forceuid,forcegid" ><not><or><user>root</user><user>ansible</user><user>Debian-gdm</user><user>sddm</user>{% if localuser %}<user>{{ localuser }}</user>{% endif %}</or></not> </volume> insertafter: "<!-- Volume definitions -->" when: web_dav is defined and web_dav | length > 0 - name: Configure pam_mount for LMN homes ansible.builtin.blockinfile: dest: /etc/security/pam_mount.conf.xml marker: "<!-- {mark} ANSIBLE MANAGED BLOCK (mount LMN home) -->" block: | <volume fstype="cifs" server="{{ smb_server }}" path="{{ smb_share }}" mountpoint="/srv/samba/schools/default-school" options="sec=krb5i,cruid=%(USERUID),user=%(USER),gid=%(USERGID),file_mode=0700,dir_mode=0700,mfsymlinks,nobrl,actimeo=600{{ cifsopt | default(",cache=loose") }}" ><not><or><user>root</user><user>ansible</user><user>Debian-gdm</user><user>sddm</user>{% if localuser %}<user>{{ localuser }}</user>{% endif %}</or></not> </volume> insertafter: "<!-- Volume definitions -->" - name: Prepare mount point for homes ansible.builtin.file: path: /srv/samba/schools/default-school/ state: directory mode: '0755' - name: Prepare persistent user cache base directory ansible.builtin.file: path: /var/cache/user/ state: directory mode: '1777' - name: Create user-environment-generator directory ansible.builtin.file: path: /etc/systemd/user-environment-generators/ state: directory mode: '0755' - name: Prepare generator for persistent user cache directory ansible.builtin.copy: dest: /etc/systemd/user-environment-generators/50-xdg-cache-home.sh content: | #!/usr/bin/bash set -eu ## local users do not need the extra cache dir: [[ "$UID" -le 60000 ]] && exit 0 cp -r -n /etc/skel/.* "$HOME" DIR="/var/cache/user/${UID}/" [[ -d "$DIR" ]] || mkdir -m 0700 "$DIR" echo XDG_CACHE_HOME="$DIR" echo JUPYTER_ALLOW_INSECURE_WRITES=1 mode: "0755" - name: Clean up all user processes after logout ansible.builtin.replace: path: /etc/security/pam_mount.conf.xml regexp: '^(<logout wait="0" hup="no" term="no" kill="no" />)$' replace: '<!-- \1 -->\n<logout wait="1000" hup="yes" term="yes" kill="yes" />' - name: Kill all user processes on logout ansible.builtin.lineinfile: path: /etc/systemd/logind.conf line: KillUserProcesses=yes insertafter: '#KillUserProcesses=no' - name: Bind mount /lmn/media with nosuid directory ansible.posix.mount: src: /lmn/media path: /lmn/media opts: nosuid,bind state: present fstype: none - name: Mount NFSv4 tools directory ansible.posix.mount: src: "{{ nfs_server }}:tools" path: /lmn/tools opts: rw,_netdev,x-systemd.automount,x-systemd.idle-timeout=10s,timeo=100,soft state: present fstype: nfs4 when: nfs_server is defined - name: Mount NFSv4 home directory ansible.posix.mount: src: server:/default-school path: /srv/samba/schools/default-school opts: sec=krb5p,_netdev,x-systemd.automount,x-systemd.idle-timeout=60 state: present fstype: nfs4 when: nfs4