Benutzer-Werkzeuge

Webseiten-Werkzeuge


 [[anwenderwiki:linuxclient:offlineusage]] 
no way to compare when less than two revisions

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.


anwenderwiki:linuxclient:offlineusage [2014/11/07 23:38] (aktuell) – angelegt - Externe Bearbeitung 127.0.0.1
Zeile 1: Zeile 1:
 +{{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.
 +<code bash /etc/rc.local>
 +#!/bin/sh -e
 +
 +sleep 10
 +/usr/bin/linuxmuster-check-offlineity --init
 +</code>
 +
 +== Konfiguration ==
 +findet in einem File statt. Passwort ist der crypt-hash, der sich durch Passwortänderung (hier: "lehrer") in ''/etc/shadow'' wiederfindet.
 +<code bash /etc/linuxmuster-client/offlineuser/config>
 +#!/bin/sh
 +
 +offlineuserenabled="yes"
 +offlineuser="lehrer"
 +offlineuserpw='$6$SCla3OOt$DJSgJ35o/AJxJ0dD5EbkeC7BazOEQlEQfuL.KjlWVNL4XQf3CjXClBe64fN6kaGnryM25WyhnplaZ8fZVEYQs0'
 +offlinetargetdir="/lokal/lehrer_lokal"
 +</code>
 +
 +== Status Offlineity ==
 +findet sich in der Existenz der Datei ''/etc/linuxmuster-client/offlineuser/offline'' wieder.
 +
 +== Zwei verschiedene lightdm Konfigurationen ==
 +<code none /etc/linuxmuster-client/offlineuser/lightdm.conf.online>
 +[SeatDefaults]
 +greeter-session=lightdm-gtk-greeter
 +user-session=xubuntu
 +allow-guest=false
 +greeter-hide-users=true
 +session-cleanup-script=/usr/bin/linuxmuster-check-offlineity
 +</code>
 +
 +<code none /etc/linuxmuster-client/offlineuser/lightdm.conf.offline>
 +[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
 +</code>
 +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)
 +
 +<code none /etc/pam.d/lightdm-autologin>
 +#%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
 +</code>
 +
 +== Entsprechendes Skript zum Offlinetest und zur Vorbereitung des Kontos ==
 +<code bash /usr/bin/linuxmuster-check-offlineity>
 +#!/bin/bash
 +#
 +# linuxmuster-client-offline
 +#
 +# Tobias Küchel 2014, <tobias@linuxmuster.net>
 +# 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@<property name="image-show" type="empty"/>@<property name="image-show" type="bool" value="false"/>@' $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
 +</code>
 +
 +== 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.
 +
 +<code>
 +# linuxmuster-client-extras-setup --type login --order 020 --on /usr/local/bin/linuxmuster-setup-offlineuser
 +</code>
 +
 +<code bash /usr/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
 +
 +</code>
 +
 +
 +== Ausloggen ==
 +Beim Ausloggen sollte der offline-zustand resetted werden, dies geschieht über die cleanup-skripte in den lightdm-Konfigurationen.
 +
  
 [[anwenderwiki:linuxclient:offlineusage]] anwenderwiki/linuxclient/offlineusage.txt · Zuletzt geändert: 2014/11/07 23:38 von 127.0.0.1