{{tag> }}
====== Wie man einen Linuxclient offline nutzen kann ======
Gedanken zum Setup:
* linuxmuster-client pakete sind installiert
* Variante 1: Auswahl per Linbo/Grub
* offline Nutzung wird explizit beim Booten über GRUB-Menü ausgewählt. Nutzung sollte offline bleiben bis zum Reboot (iptables)
* postsync script schiebt verschiedene Dateien hin, um offline nutzung zu ermöglichen
* Variante 2: Automatisches Erkennen, ob man sich im GRÜNEN Netz befindet (ping server)
* falls offline erkannt wird: automatisches Login im X-Server mit lokalem Nutzerkonto, sollte offline bleiben bis zum Neu-Anmelden (iptables)
* Möglichkeit zum logoff, welches wiederum automatisch erkennen kann, ob man offline oder online ist
* login-Prozess sollte möglichst alle linuxmuster-client Schritte ausführen
===== Variante 2: Automatische Offline-Erkennung mit linuxmuster-client-extras =====
== Einschränkungen ==
* Untenstehendes wurde momentan nur für lightdm-Windowmanager und Xubuntu 12.04 getestet.
== Bootkonfiguration ==
Beim Bootvorgang, (am besten vor dem Start des X-Servers) muss festgestellt werden, ob man offline ist.
Dementsprechend die X-Session konfigurieren.
Ebenso z.B. den Profilbenutzer auf den lokalen synchronisieren.
#!/bin/sh -e
sleep 10
/usr/bin/linuxmuster-check-offlineity --init
== Konfiguration ==
findet in einem File statt. Passwort ist der crypt-hash, der sich durch Passwortänderung (hier: "lehrer") in ''/etc/shadow'' wiederfindet.
#!/bin/sh
offlineuserenabled="yes"
offlineuser="lehrer"
offlineuserpw='$6$SCla3OOt$DJSgJ35o/AJxJ0dD5EbkeC7BazOEQlEQfuL.KjlWVNL4XQf3CjXClBe64fN6kaGnryM25WyhnplaZ8fZVEYQs0'
offlinetargetdir="/lokal/lehrer_lokal"
== Status Offlineity ==
findet sich in der Existenz der Datei ''/etc/linuxmuster-client/offlineuser/offline'' wieder.
== Zwei verschiedene lightdm Konfigurationen ==
[SeatDefaults]
greeter-session=lightdm-gtk-greeter
user-session=xubuntu
allow-guest=false
greeter-hide-users=true
session-cleanup-script=/usr/bin/linuxmuster-check-offlineity
[SeatDefaults]
greeter-session=lightdm-gtk-greeter
user-session=xubuntu
allow-guest=false
greeter-hide-users=true
#session-setup-script=
session-cleanup-script=/usr/bin/linuxmuster-check-offlineity
autologin-user=%offlineuser%
autologin-user-timeout=0
#pam-service=lightdm
Leider funktioniert bei mir der pam-service "lightdm" nicht beim Kaltstart. D.h. es wird beim ersten Start immer "lightdm-autologin" verwendet.
Also muss man ''/etc/pam.d/lightdm-autologin'' editieren und mindestens das pam_group.so Modul hinzufügen.
Alternative ist per Befehl "adduser $offlineuser dialout" etc.. den offlineuser im Image in die entsprechenden Gruppen einzufügen. (/etc/group editieren reicht nicht, da /etc/gshadow auch gefragt wird)
#%PAM-1.0
auth requisite pam_nologin.so
auth required pam_permit.so
auth optional pam_group.so
@include common-account
session [success=ok ignore=ignore module_unknown=ignore default=bad] pam_selinux.so close
session required pam_limits.so
@include common-session
session [success=ok ignore=ignore module_unknown=ignore default=bad] pam_selinux.so open
session required pam_env.so readenv=1
session required pam_env.so readenv=1 user_readenv=1 envfile=/etc/default/locale
@include common-password
== Entsprechendes Skript zum Offlinetest und zur Vorbereitung des Kontos ==
#!/bin/bash
#
# linuxmuster-client-offline
#
# Tobias Küchel 2014,
# 04.11.2014
# GPLv2
. /etc/linuxmuster-client/offlineuser/config
[ "x$offlineuserenabled" != "xyes" ] && exit 0
# files involved:
# /etc/linuxmuster-client/offlineuser/config
# lightdm.conf.online,offline
# -> session-cleanup-script=/usr/bin/linuxmuster-check-offlineity
# /etc/rc.local (workaround for boot.d not working)
# /usr/bin/linuxmuster-setup-offlineuser
# linuxmuster-client-extras-setup --type login --order 020 --on /usr/local/bin/linuxmuster-setup-offlineuser
# leoclient-vm-printer.conf
# run-vm-printer-splitter
# run-vm-printer-spooler
# functions
log_msg() {
logger -t check-offlineity "$1"
}
STATUSFILE=/etc/linuxmuster-client/offlineuser/offline
PROFILE_USER=linuxadmin
HOMEDIR=/home/$offlineuser
## save the old status of offlineity
[ -e $STATUSFILE ] && OLDSTATUS=1 || OLDSTATUS=0
log_msg "Offlineity was: $OLDSTATUS"
##
## check if we are offline
##
if ! ping -c 1 10.16.1.1 >/dev/null ; then
## we should be offline
echo 1 > $STATUSFILE
else
## we should be online, revert changes
rm -f $STATUSFILE
fi
## Debugging FORCE offline
#echo 1 > $STATUSFILE
#printenv >> /tmp/asdfasdf.$$
##
## check, if change is needed
##
restart=0
if [ -e $STATUSFILE -a $OLDSTATUS -eq 0 ]; then
restart=1
fi
if [ ! -e $STATUSFILE -a $OLDSTATUS -eq 1 ]; then
restart=1
fi
if [ -n "$1" -a "x$1"="x--init" ]; then
restart=1
log_msg "Called using --init. We set current status offline/online."
fi
## no change needed, get out
[ $restart -eq 0 ] && { log_msg "No change needed."; exit 0; } || log_msg "Changing offline/online status."
log_msg "Lokales Verzeichnis erstellen/überprüfen"
mkdir -p $offlinetargetdir
chown $offlineuser $offlinetargetdir
if [ -e $STATUSFILE ]; then
log_msg "Seem to be offline. Change to offline."
#pw="$offlineuser"':$6$SCla3OOt$DJSgJ35o/AJxJ0dD5EbkeC7BazOEQlEQfuL.KjlWVNL4XQf3CjXClBe64fN6kaGnryM25WyhnplaZ8fZVEYQs0:16091::::::'
pw="${offlineuser}:${offlineuserpw}:16091::::::"
## Repair leoclient-vm-printer
log_msg "Fix leoclient-vm-printer to point to Home_lokal"
sed -i "s/Home_auf_Server/Home_lokal/g" /etc/leoclient/leoclient-vm-printer.conf
log_msg "Disable network on firewall"
iptables -A OUTPUT -p all -m owner --uid-owner $offlineuser -j DROP
log_msg "autologin lightdm config"
unlink /etc/lightdm/lightdm.conf
sed -i "s/%offlineuser%/$offlineuser/" /etc/linuxmuster-client/offlineuser/lightdm.conf.offline
ln -s /etc/linuxmuster-client/offlineuser/lightdm.conf.offline /etc/lightdm/lightdm.conf
else
log_msg "Seem to be online. Change to online."
pw="$offlineuser"':*:16091:::::'
## Repair leoclient-vm-printer
log_msg "Fix leoclient-vm-printer to point to Home_auf_Server"
sed -i "s/Home_lokal/Home_auf_Server/g" /etc/leoclient/leoclient-vm-printer.conf
log_msg "Enable network on firewall"
iptables -D OUTPUT -p all -m owner --uid-owner $offlineuser -j DROP
unlink /etc/lightdm/lightdm.conf
ln -s /etc/linuxmuster-client/offlineuser/lightdm.conf.online /etc/lightdm/lightdm.conf
fi
## replace the lehrer pw
log_msg "Replace the $offlineuser pw"
sed -i "s@^$offlineuser:.*@${pw}@" /etc/shadow
## workaround fast VNC
log_msg "Background setzen"
sed -i 's@@@' $HOMEDIR/.config/xfce4/xfconf/xfce-perchannel-xml/xfce4-desktop.xml
##
## Restart X and lightdm, if status changed
##
## if the service is running, grep returns 0, then stop lightdm
if service lightdm status | grep running >/dev/null ; then
service lightdm stop
sleep 2
fi
## workaround: printer-spooler stays after logout
pkill 'run-vm-printer'
## Sync the PROFILE_USER to the offlineuser
## This only works, if the $offlineuser is not logged in, thus when lightdm is down
log_msg "Synching: rsync -rlpt --force --delete /home/$PROFILE_USER/ $HOMEDIR/ "
rsync -rlpt --force --delete /home/$PROFILE_USER/ $HOMEDIR/
chown -R $offlineuser:$offlineuser $HOMEDIR
## now start (again)
service lightdm start
== Loginskripte beim X Login ==
Beim Login wollen möglicherweise einige Skripte aus ''/etc/linuxmuster-client/{pre,post}-mount.d/'' ausgeführt werden.
Dies ist lokalen Benutzern verboten, kann aber über ''extras'' re-implementiert werden.
Natürlich macht das nur für die Skripte Sinn, die kein Netzwerk/Tauschordner erfordern.
# linuxmuster-client-extras-setup --type login --order 020 --on /usr/local/bin/linuxmuster-setup-offlineuser
#!/bin/bash
#
# Tobias Küchel
#
# with code from
# frank@linuxmuster.net
#
# 15.04.2012
# GPL v2
#
# default value for PROFILE_USER
PROFILE_USER="linuxadmin"
# if the package linuxmuster-client-profile is installed,
# configuration is stored in /etc/linuxmuster-client/profile.conf
if [ -f /etc/linuxmuster-client/profile/profile.conf ]; then
. /etc/linuxmuster-client/profile/profile.conf
# source profile functions
#. /var/lib/linuxmuster-client-profile/functions.inc || exit 1
fi
. /etc/linuxmuster-client/offlineuser/config
## proceed, if offline
if [ ! -e /etc/linuxmuster-client/offlineuser/offline ]; then
exit 0
fi
# args
#SERVER="offline"
#VOLUME="$offlineuser"
#MNTPT="not_set"
USER="$offlineuser"
HOMEDIR="/home/$offlineuser"
#OPTIONS="not_set"
# functions
log_msg() {
logger -t setup-offlineuser "$1"
}
## Problem:
## Grundsätzlich sollte linuxadmin -> $offlineuser schon mal gesynct sein,
## sonst funktioniert das login nicht, weil diese Skripte hier nicht
## wie die pam_mount scripte vor dem eigentlichen Login ausgeführt werden,
## sondern erst nach dem login beim autostart
## Lsg: beim Booten sync. starten in /usr/bin/linuxmuster-check-offlineity
log_msg "Bookmarks des Dateimanagers setzen"
echo "file://$HOMEDIR/Home_lokal" > $HOMEDIR/.gtk-bookmarks
chown $USER:$USER $HOMEDIR/.gtk-bookmarks
## replace the Home_auf_Server Folder in the config if not done yet
WINXP=`echo $HOMEDIR/.VirtualBox/Machines/winXP/winXP.xml`
if [ -e $WINXP ]; then
log_msg "Replace leoclient WinXP -> Home_auf_Server link in $WINXP"
sed -i "/Home_auf_Server/s%hostPath=\"/home/linuxadmin/Home_auf_Server%hostPath=\"$HOMEDIR/Home_lokal%" $WINXP
fi
log_msg "Replace Home_auf_Server mit Home_lokal"
[ ! -e /home/$offlineuser/Home_lokal ] && ln -s $offlinetargetdir /home/$offlineuser/Home_lokal
## remove Home_auf_Server
[ -e /home/$offlineuser/Home_auf_Server ] && rm -rf /home/$offlineuser/Home_auf_Server
## remove Desktop-link
[ -e /home/$offlineuser/Desktop/Home_auf_Server.desktop ] && unlink /home/$offlineuser/Desktop/Home_auf_Server.desktop
## add Desktop-link
if [ ! -e /home/$offlineuser/Desktop/Home_lokal.desktop ]; then
mkdir -p /home/$offlineuser/Desktop
cp /home/linuxadmin/Desktop/Home_auf_Server.desktop /home/$offlineuser/Desktop/Home_lokal.desktop
sed -i "s/Home auf Server/Home lokal/g;" /home/$offlineuser/Desktop/Home_lokal.desktop
sed -i "s/Home_auf_Server/Home_lokal/g" /home/$offlineuser/Desktop/Home_lokal.desktop
chown $offlineuser /home/$offlineuser/Desktop/Home_lokal.desktop
fi
== Ausloggen ==
Beim Ausloggen sollte der offline-zustand resetted werden, dies geschieht über die cleanup-skripte in den lightdm-Konfigurationen.