Introduction of a new device class (localhome).
- user-home is on local disk - additional entry in dolphin: home@server - display info about localhome on login-screen - provide unison-config for sync home with home@server - force user to be logged out immediately after first login, because home-dir must exists for bind-mounts on /lmn/media
This commit is contained in:
parent
4aeee9442c
commit
08f0f082fd
6 changed files with 111 additions and 3 deletions
|
@ -85,6 +85,8 @@
|
||||||
- lmn_printer
|
- lmn_printer
|
||||||
- kerberize
|
- kerberize
|
||||||
- lmn_security
|
- lmn_security
|
||||||
|
- role: lmn_localhome
|
||||||
|
when: when: groups.localhome is defined and inventory_hostname in groups.localhome
|
||||||
|
|
||||||
tasks:
|
tasks:
|
||||||
## Temporary fixes and quirks:
|
## Temporary fixes and quirks:
|
||||||
|
|
|
@ -16,19 +16,44 @@ fi
|
||||||
id="$(grep ID "$file" | sed -E "s|^.+ID>([[:digit:]]+)/([[:digit:]]+)</ID.+$|\1:\2|" \
|
id="$(grep ID "$file" | sed -E "s|^.+ID>([[:digit:]]+)/([[:digit:]]+)</ID.+$|\1:\2|" \
|
||||||
| sort -n -t: -k2 | tail -1 )"
|
| sort -n -t: -k2 | tail -1 )"
|
||||||
|
|
||||||
|
if id | grep teachers; then
|
||||||
|
NETHOME=/srv/samba/schools/default-school/teachers/$USER
|
||||||
|
else
|
||||||
|
NETHOME=/srv/samba/schools/default-school/students/*/$USER
|
||||||
|
fi
|
||||||
|
|
||||||
IDENTITY="${id%%:*}"
|
IDENTITY="${id%%:*}"
|
||||||
NUM0="${id##*:}"
|
NUM0="${id##*:}"
|
||||||
NUM1=$(( NUM0 + 1 ))
|
NUM1=$(( NUM0 + 1 ))
|
||||||
NUM2=$(( NUM0 + 2 ))
|
NUM2=$(( NUM0 + 2 ))
|
||||||
|
NUM3=$(( NUM0 + 3 ))
|
||||||
|
|
||||||
|
if [[ $HOME =~ ^/home/ ]]; then
|
||||||
|
HOMEONSERVER="+ <bookmark href=\"file://$NETHOME\">
|
||||||
|
+ <title>Home@Server</title>
|
||||||
|
+ <info>
|
||||||
|
+ <metadata owner=\"http://freedesktop.org\">
|
||||||
|
+ <bookmark:icon name=\"user-home-symbolic\"/>
|
||||||
|
+ </metadata>
|
||||||
|
+ <metadata owner=\"http://www.kde.org\">
|
||||||
|
+ <ID>$IDENTITY/${NUM1}</ID>
|
||||||
|
+ <isSystemItem>true</isSystemItem>
|
||||||
|
+ </metadata>
|
||||||
|
+ </info>
|
||||||
|
+ </bookmark>"
|
||||||
|
else
|
||||||
|
HOMEONSERVER=$'\n\n\n\n\n\n\n\n\n\n\n\n'
|
||||||
|
fi
|
||||||
|
|
||||||
patch="
|
patch="
|
||||||
--- a/$file
|
--- a/$file
|
||||||
+++ b/$file
|
+++ b/$file
|
||||||
@@ -98,9 +98,33 @@
|
@@ -98,9 +98,45 @@
|
||||||
<isSystemItem>true</isSystemItem>
|
<isSystemItem>true</isSystemItem>
|
||||||
</metadata>
|
</metadata>
|
||||||
</info>
|
</info>
|
||||||
</bookmark>
|
</bookmark>
|
||||||
|
$HOMEONSERVER
|
||||||
+ <bookmark href=\"file:///srv/samba/schools/default-school/share\">
|
+ <bookmark href=\"file:///srv/samba/schools/default-school/share\">
|
||||||
+ <title>Tausch</title>
|
+ <title>Tausch</title>
|
||||||
+ <info>
|
+ <info>
|
||||||
|
@ -36,7 +61,7 @@ patch="
|
||||||
+ <bookmark:icon name=\"folder-publicshare\"/>
|
+ <bookmark:icon name=\"folder-publicshare\"/>
|
||||||
+ </metadata>
|
+ </metadata>
|
||||||
+ <metadata owner=\"http://www.kde.org\">
|
+ <metadata owner=\"http://www.kde.org\">
|
||||||
+ <ID>$IDENTITY/${NUM1}</ID>
|
+ <ID>$IDENTITY/${NUM2}</ID>
|
||||||
+ <isSystemItem>true</isSystemItem>
|
+ <isSystemItem>true</isSystemItem>
|
||||||
+ </metadata>
|
+ </metadata>
|
||||||
+ </info>
|
+ </info>
|
||||||
|
@ -48,7 +73,7 @@ patch="
|
||||||
+ <bookmark:icon name=\"folder-cloud\"/>
|
+ <bookmark:icon name=\"folder-cloud\"/>
|
||||||
+ </metadata>
|
+ </metadata>
|
||||||
+ <metadata owner=\"http://www.kde.org\">
|
+ <metadata owner=\"http://www.kde.org\">
|
||||||
+ <ID>$IDENTITY/${NUM2}</ID>
|
+ <ID>$IDENTITY/${NUM3}</ID>
|
||||||
+ <isSystemItem>true</isSystemItem>
|
+ <isSystemItem>true</isSystemItem>
|
||||||
+ </metadata>
|
+ </metadata>
|
||||||
+ </info>
|
+ </info>
|
||||||
|
|
29
roles/lmn_localhome/files/lmn-create-unisonconfig.sh
Normal file
29
roles/lmn_localhome/files/lmn-create-unisonconfig.sh
Normal file
|
@ -0,0 +1,29 @@
|
||||||
|
#!/usr/bin/bash
|
||||||
|
#
|
||||||
|
# create ~/.unison/SyncHome.prf if not exists
|
||||||
|
#
|
||||||
|
set -eu
|
||||||
|
|
||||||
|
[[ -f ~/.unison/SyncHome.prf ]] && exit 0
|
||||||
|
|
||||||
|
mkdir -p ~/.unison
|
||||||
|
|
||||||
|
if id | grep teachers; then
|
||||||
|
NETHOME="$(find /srv/samba/schools/default-school/teachers/ -maxdepth 1 -type d -name "${USER}")"
|
||||||
|
else
|
||||||
|
NETHOME="$(find /srv/samba/schools/default-school/students/ -maxdepth 2 -type d -name "${USER}")"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ ! -f ~/.unison/SyncHome.prf ]]; then
|
||||||
|
echo "# Unison preferences
|
||||||
|
label = Sync Home on Server
|
||||||
|
path = Bilder
|
||||||
|
path = Dokumente
|
||||||
|
path = Musik
|
||||||
|
path = Videos
|
||||||
|
root = $HOME
|
||||||
|
root = $NETHOME
|
||||||
|
dontchmod = true
|
||||||
|
perms = 0" > ~/.unison/SyncHome.prf
|
||||||
|
fi
|
||||||
|
|
35
roles/lmn_localhome/tasks/main.yml
Normal file
35
roles/lmn_localhome/tasks/main.yml
Normal file
|
@ -0,0 +1,35 @@
|
||||||
|
---
|
||||||
|
- name: enable pam_mkhomedir.so
|
||||||
|
lineinfile:
|
||||||
|
dest: /etc/pam.d/common-session
|
||||||
|
line: "session optional pam_mkhomedir.so umask=0077"
|
||||||
|
insertbefore: "session optional pam_mount.so"
|
||||||
|
|
||||||
|
- name: Patch sddm login screen to inform about localhome
|
||||||
|
blockinfile:
|
||||||
|
path: /usr/share/sddm/themes/debian-breeze/Main.qml
|
||||||
|
marker: // {mark} ANSIBLE MANAGED BLOCK localhome
|
||||||
|
insertbefore: '\s+//Footer'
|
||||||
|
block: |
|
||||||
|
Text {
|
||||||
|
id: localhome
|
||||||
|
anchors.top: parent.top
|
||||||
|
anchors.left: parent.left
|
||||||
|
anchors.topMargin: 10
|
||||||
|
anchors.leftMargin: 15
|
||||||
|
color: "#ffffff"
|
||||||
|
text: "Lokale Anmeldung!\nHome-Verzeichnis liegt nicht im Netz!"
|
||||||
|
font.pointSize: config.fontSize
|
||||||
|
}
|
||||||
|
|
||||||
|
- name: Copy unison-createconfig scripts
|
||||||
|
ansible.builtin.copy:
|
||||||
|
src: lmn-create-unisonconfig.sh
|
||||||
|
dest: /usr/local/bin/
|
||||||
|
mode: 0755
|
||||||
|
|
||||||
|
- name: Install auto-logout-script for first login in /etc/profile.d/
|
||||||
|
copy:
|
||||||
|
dest: /etc/profile.d/lmn-logout.sh
|
||||||
|
content: |
|
||||||
|
[[ "${UID}" -gt 10000 ]] && ! findmnt "/lmn/media/${USER}/home" > /dev/null && exit 0
|
|
@ -17,3 +17,6 @@ ad_gpo_access_control = disabled
|
||||||
ad_gpo_ignore_unreadable = True
|
ad_gpo_ignore_unreadable = True
|
||||||
ad_maximum_machine_account_password_age = 0
|
ad_maximum_machine_account_password_age = 0
|
||||||
ignore_group_members = True
|
ignore_group_members = True
|
||||||
|
{% if groups.localhome is defined and inventory_hostname in groups.localhome %}
|
||||||
|
override_homedir = /home/%u
|
||||||
|
{% endif %}
|
||||||
|
|
|
@ -48,6 +48,20 @@
|
||||||
</volume>
|
</volume>
|
||||||
insertafter: "<!-- END ANSIBLE MANAGED BLOCK .* -->"
|
insertafter: "<!-- END ANSIBLE MANAGED BLOCK .* -->"
|
||||||
|
|
||||||
|
- name: Configure pam_mount for VM bind mounts
|
||||||
|
blockinfile:
|
||||||
|
dest: /etc/security/pam_mount.conf.xml
|
||||||
|
marker: "<!-- {mark} ANSIBLE MANAGED BLOCK (bind mount school for VMs) -->"
|
||||||
|
block: |
|
||||||
|
<volume
|
||||||
|
path="/srv/samba/schools/default-school"
|
||||||
|
mountpoint="/lmn/media/%(USER)/school"
|
||||||
|
options="bind"
|
||||||
|
><not><or><user>root</user><user>ansible</user><user>Debian-gdm</user><user>sddm</user><user>{{ localuser }}</user></or></not>
|
||||||
|
</volume>
|
||||||
|
insertafter: "<!-- END ANSIBLE MANAGED BLOCK .* -->"
|
||||||
|
when: groups.localhome is defined and inventory_hostname in groups.localhome
|
||||||
|
|
||||||
- name: Use umount script for proper cleanup
|
- name: Use umount script for proper cleanup
|
||||||
blockinfile:
|
blockinfile:
|
||||||
dest: /etc/security/pam_mount.conf.xml
|
dest: /etc/security/pam_mount.conf.xml
|
||||||
|
|
Loading…
Add table
Reference in a new issue