Linux als Client: Unterschied zwischen den Versionen
(68 dazwischenliegende Versionen von 4 Benutzern werden nicht angezeigt) | |||
Zeile 1: | Zeile 1: | ||
− | + | {{Hinweis|Diese Anleitung wird gerade überarbeitet -- [[Benutzer:Mirko Augsburger|Mirko Augsburger]]}} | |
− | {{Hinweis| | + | |
+ | Ziel ist es einen Client mit Linux vollständig in die IServ Umgebung zu integrieren, so dass sich die IServ-Benutzer dort anmelden können und auf ihre Daten zugreifen können. | ||
+ | |||
+ | == Ubuntu 12.04 LTS, Ubuntu 14.04 LTS, Debian stable== | ||
+ | Die aktuellen LTS-Versionen ([https://wiki.ubuntuusers.de/Long_Term_Support Long Term Support]) können einfach, so wie Windows, über den IDesk installiert werden. Weitere Informationen hierzu finden sich in der [https://iserv.eu/doc/deploy-linux/ offiziellen IServ-Dokumentation] | ||
+ | |||
+ | == Ubuntu/Debian/Mint == | ||
+ | Für Ubuntu LTS ab Version 12.04 wird ein Paket entwickelt, dieses läuft aktuell auch auf Ubuntu 10.04 LTS, Debian Stable und Linux Mint. Das Paket selbst ist abhängig von den benötigten Programmen, welche bei graphischer Installation mitinstalliert werden. Diese Programme werden dann automatisch konfiguriert. | ||
+ | |||
+ | Die Testversion kann man aus dem [http://update.iserv.eu/debian/pool/main/i/iserv-client/ Repository] herunterladen, wobei bis zu drei Versionen vorhanden sind, neuere Versionen erhalten eventuell mehr Funktionen, sind aber gleichzeitig eventuell noch nicht für den täglichen Einsatz geeignet. Die zugehörige Diskussionsplattform findet sich im [https://support.iserv.eu/idesk/msg/?forums/public/Linux-Clients Support-Forum]. Bei der Installation des Clients werden alle nötigen Angaben abgefragt, unter anderem wie das Benutzerverzeichnis eingebunden werden soll. Hierfür gibt es vier Möglichkeiten: | ||
+ | * gleicher Share wie bei Windows (home) | ||
+ | * eigener Share (linux_home) | ||
+ | * lokal | ||
+ | * tmpfs | ||
+ | * tmpfs + archive | ||
+ | |||
+ | Bei den ersten beiden Varianten läuft einige Software nicht besonders gut oder gar nicht (z.B. Firefox, KDE). Der Unterschied hier ist lediglich, ob das Linux-Homeverzeichnis gleich dem <code>Eigene Dateien</code> Verzeichnis von Windows sein soll oder ob es dem Homeverzeichnis auf dem Server entsprechen soll. | ||
+ | |||
+ | Bei der dritten Variante bleiben alle Dateien, welche direkt im Home-Verzeichnis liegen lokal erhalten, werden aber nicht auf den Server synchronisiert. Dadurch bleiben die Konfigurationen von Programmen erhalten, jedoch müssen die Festplatten ausreichend dimensioniert sein. Eventuell lohnt es sich hierbei Quotas zu benutzen. | ||
+ | |||
+ | Die vierte Variante bindet ein temporäres Dateisystem ein, wodurch die Schüler nicht die Festplatte überfüllen können, jedoch gehen bei jedem Log-Out alle Dateien außerhalb von Files und Groups verloren | ||
+ | |||
+ | Die letzte Methode ist die aktuell zu bevorzugende. Hier wird sowohl ein temporäres Dateisystem eingebunden, als auch alle Daten behalten, da bei einem Log-Out alle Dateien gepackt und auf den IServ hochgeladen werden. | ||
+ | |||
+ | === Nötige Änderungen auf dem IServ === | ||
+ | Es ist nicht mehr nötig auf dem IServ Änderungen vorzunehmen. | ||
+ | Mit einer neuen Version des iserv-computer Pakets wurden die Änderungen in den IServ integriert und sind nun standardmäßig gesetzt. | ||
+ | |||
+ | === Dokumentation des Pakets === | ||
+ | Dieser Abschnitt dokumentiert, was das Paket automatisiert erledigt und ist insbesondere für Administratoren von nicht-unterstützten Systemen hilfreich. | ||
+ | ==== Abhängigkeiten ==== | ||
+ | * winbind: Ein Systemdienst, welcher für die Authentifikation über eine Windows-Domäne nötig ist. Unter Debian-basierten Distributionen sind die folgenden beiden Pakete extra zu installieren. | ||
+ | ** libpam-winbind | winbind (<= 2:3.5.11): Authetifizierung des Benutzers über [http://de.wikipedia.org/wiki/Pluggable_Authentication_Modules PAM] | ||
+ | ** libnss-winbind | winbind (<= 2:3.6.5-2): Systemweite Benutzer/Gruppen-Abfrage von winbind-Benutzern | ||
+ | * samba-common-bin: Liefert nmblookup, ein Tool zur Namensauflösung (vorinstalliert) | ||
+ | * network-manager: Einfache Netzwerkverwaltung (vorinstalliert) | ||
+ | * isc-dhcp-client | dhcp-client (vorinstalliert) | ||
+ | * cifs-utils | smbfs: Programme zum Einbinden des Benutzerverzeichnisses | ||
+ | * smbclient: Komandozeilenprogramme zum kommunizieren mit dem IServ-Samba-Server (vorinstalliert | ||
+ | * libpam-mount (>= 0.18): Automatische Einbinden der Benutzerverzeichnisse beim Login | ||
+ | * cups: [http://de.wikipedia.org/wiki/Common_Unix_Printing_System Common Unix Printing System], der Druckserver (vorinstalliert) | ||
+ | * ghostscript: Tools zum Erstellen von PDF-Dokumenten | ||
+ | |||
+ | ==== Nötige Konfigurationsschritte ==== | ||
+ | {{Hinweis|ISERVDOMAIN muss durch den Domänennamen ersetzt werden}} | ||
+ | |||
+ | ===== /etc/samba/smb.conf ===== | ||
+ | <filepre> | ||
+ | [global] | ||
+ | workgroup = ISERVDOMAIN | ||
+ | security = DOMAIN | ||
+ | os level = 0 | ||
+ | local master = No | ||
+ | domain master = No | ||
+ | template homedir = /home/%U | ||
+ | template shell = /bin/bash | ||
+ | winbind separator = + | ||
+ | winbind cache time = 10 | ||
+ | winbind enum users = Yes | ||
+ | winbind enum groups = Yes | ||
+ | winbind use default domain = Yes | ||
+ | idmap config * : range = 10000-20000 | ||
+ | idmap config * : backend = tdb | ||
+ | </filepre> | ||
+ | Bei einem älteren Samba (z.B. Ubuntu 10.04) müssen die letzten beiden Zeilen stattdessen folgendermaßen lauten: | ||
+ | <filepre> | ||
+ | idmap uid = 10000-20000 | ||
+ | idmap gid = 10000-20000 | ||
+ | </filepre> | ||
+ | ===== /etc/nsswitch.conf ===== | ||
+ | Hier muss an die beiden Zeilen beginnend mit <code>passwd:</code> und <code>group:</code> noch <code>winbind</code> drangehängt werden. | ||
+ | |||
+ | Aus | ||
+ | <filepre> | ||
+ | passwd: compat | ||
+ | group: compat | ||
+ | </filepre> | ||
+ | wird also | ||
+ | <filepre> | ||
+ | passwd: compat winbind | ||
+ | group: compat winbind | ||
+ | </filepre> | ||
+ | ===== /etc/security/pam_mount.conf.xml ===== | ||
+ | |||
+ | |||
+ | Die folgenden Zeilen müssen in der <code>/etc/security/pam_mount.conf.xml</code> direkt nach <code><!-- Volume definitions --></code> eingefügt werden. | ||
+ | ====== Gleicher Share wie bei Windows ====== | ||
+ | <code><filepre> | ||
+ | <volume uid="10000-20000" fstype="cifs" server="iserv" path="home" mountpoint="/home/%(USER)" options="iocharset=utf8,dir_mode=0700"/> | ||
+ | <volume uid="10000-20000" fstype="cifs" server="iserv" path="groups" mountpoint="/home/%(USER)/Groups" options="iocharset=utf8,dir_mode=0700"/> | ||
+ | </filepre></code> | ||
+ | ====== Eigener Share (linux_home zeigend auf %H) ====== | ||
+ | <code><filepre> | ||
+ | <volume uid="10000-20000" fstype="cifs" server="iserv" path="linux_home" mountpoint="/home/%(USER)" options="iocharset=utf8,dir_mode=0700"/> | ||
+ | </filepre></code> | ||
+ | ====== Lokal ====== | ||
+ | <filepre> | ||
+ | <volume uid="10000-20000" fstype="cifs" server="iserv" path="home" mountpoint="/home/%(USER)/Files" options="iocharset=utf8,dir_mode=0700"/> | ||
+ | <volume uid="10000-20000" fstype="cifs" server="iserv" path="groups" mountpoint="/home/%(USER)/Groups" options="iocharset=utf8,dir_mode=0700"/> | ||
+ | </filepre> | ||
+ | ====== tmpfs ====== | ||
+ | <filepre> | ||
+ | <volume uid="10000-20000" fstype="tmpfs" path="none" mountpoint="/home/%(USER)" options="nosuid,nodev,uid=%(USERUID),gid=%(USERGID),mode=700"/> | ||
+ | <volume uid="10000-20000" fstype="cifs" server="iserv" path="home" mountpoint="/home/%(USER)/Files" options="iocharset=utf8,dir_mode=0700"/> | ||
+ | <volume uid="10000-20000" fstype="cifs" server="iserv" path="groups" mountpoint="/home/%(USER)/Groups" options="iocharset=utf8,dir_mode=0700"/> | ||
+ | </filepre> | ||
+ | ====== Drucken ====== | ||
+ | Wenn das drucken möglich sein soll muss bei allen Versionen außer <code>Eigener Share (linux_home zeigend auf %H)</code> noch die folgende Zeile hinzugefügt werden: | ||
+ | <filepre><volume uid="10000-20000" fstype="cifs" server="iserv" path="linux_print" mountpoint="/home/%(USER)/Print" options="iocharset=utf8,dir_mode=0700"/></filepre> | ||
+ | |||
+ | ===== /etc/rc.local ===== | ||
+ | Da winbind, der für die Authentifizierung zuständige Dämon, manchmal schneller startet, als eine Netzwerkverbindung aufgebaut werden kann, empfiehlt es sich ihn nach dem Bootvorgang neuzustarten. Die einfachste Methode ist, folgende zwei Zeilen an das Ende der Datei <code>/etc/rc.local</code>, jedoch vor <code>exit 0</code> hinzuzufügen: | ||
+ | <filepre> | ||
+ | (sleep 5 && service winbind restart) & | ||
+ | (sleep 10 && service winbind restart) & | ||
+ | </filepre> | ||
+ | ===== lightdm ===== | ||
+ | Der aktuell in Ubuntu benutzte Desktop-Manager, lightdm, lässt sich mit folgendem Befehl so konfigurieren, dass er u.a. ein Eingabefeld für den Benutzer zeigt, anstatt einer Liste: | ||
+ | <rootpre> /usr/lib/lightdm/lightdm-set-defaults --hide-users=true --show-manual-login=true --allow-guest=false --show-remote-login=false </rootpre> | ||
+ | Bei älteren Systemen gibt es noch keine Option <code>--show-remote-login</code>, daher muss diese hier weggelassen werden: | ||
+ | <rootpre> /usr/lib/lightdm/lightdm-set-defaults --hide-users=true --show-manual-login=true --allow-guest=false </rootpre> | ||
+ | ===== CUPS ===== | ||
+ | Um Drucken zu können ist der einfachste Weg ein eigenes CUPS-Backend zu nutzen, welches gedruckte Dokumente einfach nach $HOME/Print schreibt. Dieses ist bei einem Debian unter <code>/usr/lib/cups/backend/iserv</code> zu speichern. Dabei ist zu beachten, dass die Zugriffsrechte 700 (rwx------) sein sollten. | ||
+ | <code><filepre> | ||
+ | #!/bin/bash | ||
+ | |||
+ | set -e | ||
+ | # Device Discovery | ||
+ | if [ "$#" = "0" ]; then | ||
+ | # device-class device-uri "device-make-and-model" "device-info" "device-id" "device-location" | ||
+ | echo 'file iserv:/ "IServ" "IServ Printer" "Generic PDF Printer"' | ||
+ | #"MFG:Generic;MDL:CUPS-PDF Printer;DES:Generic CUPS-PDF Printer;CLS:PRINTER;CMD:POSTSCRIPT;' | ||
+ | exit 0 | ||
+ | fi | ||
+ | |||
+ | |||
+ | # If no filname is submitted the printjob is on stdin | ||
+ | PRINTJOB="-" | ||
+ | if test -n "$6"; then | ||
+ | PRINTJOB="$6" | ||
+ | fi | ||
+ | |||
+ | JOB_NUMBER=$1 | ||
+ | USER=$2 | ||
+ | TITLE=$3 | ||
+ | COPIES=$4 | ||
+ | OPTIONS=$5 | ||
+ | # Replace/delete all characters which might be troublemakers from the filename | ||
+ | DESTTITLE=`echo $TITLE | iconv -t US-ASCII//translit | sed 's/ /_/g' | tr -d '\0-\51\57\72-\100\133-\136\140\173-\177'` | ||
+ | HOMEDIR="`getent passwd $USER | cut -d: -f6`" | ||
+ | DESTDIR="$HOMEDIR/Print/" | ||
+ | DESTFILE="$DESTDIR$DESTTITLE" | ||
+ | |||
+ | if [ ! -d $DESTDIR ]; then | ||
+ | sudo -u $USER mkdir $DESTDIR | ||
+ | fi | ||
+ | |||
+ | if [ ! -e $DESTFILE.ps ]; then | ||
+ | cat $6 | sudo -u $USER tee $DESTFILE.ps | ||
+ | exit 0 | ||
+ | else | ||
+ | NUMBER=2 | ||
+ | while [ -e "$DESTFILE-$NUMBER.ps" ]; do | ||
+ | NUMBER=`expr $NUMBER + 1` | ||
+ | done | ||
+ | cat $6 | sudo -u $USER tee $DESTFILE-$NUMBER.ps | ||
+ | exit 0 | ||
+ | fi | ||
+ | </filepre></code> | ||
+ | Der Drucker kann nun entweder manuell hinzugefügt werden, oder mithilfe dieses Scripts: | ||
+ | <code><filepre> | ||
+ | ## IServ PRINTING SUPPORT | ||
+ | # with parts from cups-pdf's debian postinst and prerm scripts (Version: 2.6.1-8) | ||
+ | # | ||
+ | # COPYRIGHT | ||
+ | # © 2003-2011 Martin-Éric Racine <martin-eric.racine@iki.fi> | ||
+ | # © 2009,2011 Till Kamppeter <till.kamppeter@gmail.com> | ||
+ | # © 2013 IServ <info@iserv.eu> | ||
+ | # | ||
+ | # LICENSE | ||
+ | # This package is free software; you can redistribute it and/or modify | ||
+ | # it under the terms of the GNU General Public License as published by | ||
+ | # the Free Software Foundation, either version 2 of the License or (at | ||
+ | # your option) any later version. | ||
+ | # | ||
+ | |||
+ | # Ensure that CUPS is running before we manipulte its queues | ||
+ | if [ -f /etc/init/cups ] ; then | ||
+ | service cups force-reload || service cups start || true | ||
+ | fi | ||
+ | |||
+ | # Wait until CUPS has reloaded its configuration. | ||
+ | if lpstat -h localhost -r 2>/dev/null | grep -q not; then | ||
+ | t=0 | ||
+ | while lpstat -h localhost -r 2>/dev/null | grep -q not; do | ||
+ | t=$(($t + 1)) | ||
+ | if [ $t = 10 ]; then | ||
+ | echo "CUPS failed to reload its configuration!" | ||
+ | break | ||
+ | fi | ||
+ | sleep 1 | ||
+ | done | ||
+ | fi | ||
+ | |||
+ | # Check if an IServ printer already exists | ||
+ | if [ -z "$( LC_ALL=C lpstat -h localhost -v 2>/dev/null | grep 'iserv:/' )" ] | ||
+ | then | ||
+ | # 1) Find a name for the PDF queue. | ||
+ | queue=IServ | ||
+ | number=0 | ||
+ | while $(LC_ALL=C lpstat -h localhost -v 2>/dev/null | cut -d ':' -f 1 | cut -d ' ' -f 3 | grep -q ^$queue\$) | ||
+ | do | ||
+ | number=$(($number + 1)) | ||
+ | queue="IServ$number" | ||
+ | done | ||
+ | # 2) Find the default paper size. | ||
+ | # Papersize is always A4! | ||
+ | # size="$(LC_ALL=C paperconf 2>/dev/null)" || size=a4 | ||
+ | size=a4 | ||
+ | # 3) Find PPD | ||
+ | if [ -e /usr/share/ghostscript/current/lib/ghostpdf.ppd ]; then | ||
+ | # Current GS have this dir which makes it easy for us | ||
+ | PPD="/usr/share/ghostscript/current/lib/ghostpdf.ppd" | ||
+ | else | ||
+ | # Older ones don't :/ | ||
+ | max=-1 | ||
+ | for version in `find /usr/share/ghostscript -maxdepth 3 -xdev -regex "/usr/share/ghostscript/[0-9]+\.[0-9]+/lib/ghostpdf.ppd" | sed -e 's/^\/usr\/share\/ghostscript\///g' -e 's/\/lib\/ghostpdf.ppd$//g'` | ||
+ | do | ||
+ | [[ `echo $version | sed 's/\.//'` -gt `echo $max | sed 's/\.//'` ]] && max=$version | ||
+ | done | ||
+ | PPD="/usr/share/ghostscript/$version/lib/ghostpdf.ppd" | ||
+ | fi | ||
+ | # 4) Create the queue. | ||
+ | echo | lpadmin -h localhost -p $queue -v iserv:/ -P $PPD -o printer-is-shared=no -o PageSize=$size 2>/dev/null || : | ||
+ | # 5) Enable the queue. | ||
+ | echo | cupsenable -h localhost $queue 2>/dev/null || : | ||
+ | echo | cupsaccept -h localhost $queue 2>/dev/null || : | ||
+ | # 6) Set the IServ queue as default if there is no default printer yet. | ||
+ | if [ -z "$(LC_ALL=C lpstat -h localhost -d 2>/dev/null | grep 'system default destination:')" ] | ||
+ | then | ||
+ | echo | lpadmin -h localhost -d $queue 2>/dev/null || : | ||
+ | fi | ||
+ | fi | ||
+ | </filepre></code> | ||
+ | |||
+ | == Fedora 13 == | ||
+ | === Voraussetzung === | ||
+ | * Ein Host mit (frisch installiertem?) Fedora 13 (inkl. einer gewünschten Oberfläche) | ||
+ | * Benötigte Software-Pakete auf dem Linux-Client installieren: | ||
+ | {{Hinweis|Alle folgenden Terminal-Befehle sind als ''root'' auf dem Linux-Client und '''nicht''' auf dem IServ auszuführen! Falls für ''root'' auf dem Client kein Passwort gesetzt sein sollte, kann mit ''sudo -i'' eine root-Login-Shell emuliert werden.}} | ||
<rootpre> | <rootpre> | ||
− | + | yum install samba-winbind samba-winbind-clients authconfig | |
</rootpre> | </rootpre> | ||
+ | === Client einbinden === | ||
+ | * das Tool authconfig starten, um die Benutzeranmeldung einzurichten: | ||
+ | <rootpre> | ||
+ | authconfig-tui | ||
+ | </rootpre> | ||
+ | |||
+ | * Jetzt füge ich unter Benutzerinformation und unter Authentifizierung winbind hinzu, wähle "Weiter" und konfiguriere winbind: | ||
+ | ** als Sicherheitsmodell "domain" | ||
+ | ** Domain ist der Name meiner "Windows"-Domäne, wie sie im IServ eingetragen ist | ||
+ | ** Der Domain-Controller ist IServ | ||
+ | ** '''Wichtig:''' als Standard-Shell die bin/bash wählen! | ||
+ | ** nun die Arbeitsstation der Domäne hinzufügen: | ||
+ | *** "Domain-Mitglied werden" wählen | ||
+ | *** Benutzername und Passwort eines Domänen-Admins (der also Rechner in die Domäne aufnehmen darf) eingeben<ref>'''Achtung bei Rechnern mit Windows und Linux parallel:''' Es lässt sich jeder Rechner'''name''' nur einmal der Domäne hinzufügen. Bei einer Parallelinstallation müssen daher (nur!) die Hostnamen der beiden Betriebssysteme unterschiedliche sein! | ||
+ | </ref> | ||
+ | * Jetzt noch dafür sorgen, dass neue (die sich auf ''diesem'' Host erstmals anmeldenden) Benutzer automatisch ein eigenes Home erhalten: | ||
+ | <rootpre> | ||
+ | authconfig --update --enablemkhomedir | ||
+ | </rootpre> | ||
+ | * Testen, ob der Client die Benutzer der Domäne kennt, Ergebnis sollte eine (lange) Liste sein: | ||
+ | <rootpre> | ||
+ | wbinfo -u | ||
+ | </rootpre> | ||
+ | |||
+ | === Anmelden und Spaß haben === | ||
+ | * Jetzt können sich alle (!) Benutzer der Domäne sowohl an der Shell als auch an der womöglich installierten grafischen Oberfläche anmelden. | ||
+ | * Ein benötigtes Home-Verzeichnis wird automatisch erstellt. | ||
+ | * '''Achtung''' | ||
+ | ** Benutzername erfolgt in der Form ''MEINEDOMÄNE\vorname.nachname'', also mit Angabe der Domäne! | ||
+ | ** Die GUI zeigt die Domänenbenutzer nicht in der Auswahlliste an, es ist also "Anderer Benutzer" zu wählen. | ||
+ | |||
+ | === Screenshots === | ||
+ | <gallery> | ||
+ | Bild:Authconfig-tui.png|Authentisierung einrichten | ||
+ | Bild:winbind-einstellungen.png|Einstellungen für winbind | ||
+ | Bild:join_domain_from_linux.png|Domäne beitreten | ||
+ | </gallery> | ||
+ | |||
+ | {{Todo| | ||
+ | * Home des Benutzers automatisch einhängen | ||
+ | * Quotas hinzufügen | ||
+ | }} | ||
+ | |||
+ | {{Fußnoten}} | ||
+ | |||
+ | == Zugriff auf Ubuntu mittels VNC von außerhalb der Schule== | ||
+ | Erstmal VNC auf dem Client starten. | ||
+ | Dafür erst über SSH auf dem IServ in der Schule, dann mit SSH weiter zum Clientrechner | ||
+ | Dabei die richtige XAuth-Datei auswählen, hier für lightdm (Ubuntu Standard). | ||
+ | <pre> | ||
+ | mirko@mirko:~$ ssh root@schule.example | ||
+ | schule.example ~ # ssh -oStrictHostKeyChecking=no -i /var/lib/iserv/config/id_rsa root@ubunturechner.schule.example | ||
+ | root@ubunturechner:~# x11vnc -auth /var/lib/lightdm/.Xauthority | ||
+ | </pre> | ||
+ | Dann in einem zweiten Terminal verbinden. | ||
+ | <pre> | ||
+ | mirko@mirko:~$ vncviewer -via root@schule.example ubunturechner.schule.example:0 | ||
+ | </pre> | ||
+ | Nun öffnet sich nach kurzer Zeit ein Fenster mit dem Anmeldebildschirm. Es ist zwar alles etwas langsam und stockend, aber für Fehlersuche gut geeignet. | ||
+ | |||
+ | == Direktes Drucken mit dem IServ Druckmodul == | ||
+ | Das direkte Drucken mit dem IServ-Druckmodul ist mithilfe eines inoffiziellen Zusatzmoduls möglich und unter dem Artikel [[Direktes Drucken mit Linux-Clients]] beschrieben. | ||
− | |||
[[Kategorie:Anleitungen für Admins/Linux]] | [[Kategorie:Anleitungen für Admins/Linux]] |
Aktuelle Version vom 7. Dezember 2017, 08:35 Uhr
Diese Anleitung wird gerade überarbeitet -- Mirko Augsburger |
Ziel ist es einen Client mit Linux vollständig in die IServ Umgebung zu integrieren, so dass sich die IServ-Benutzer dort anmelden können und auf ihre Daten zugreifen können.
Inhaltsverzeichnis
- 1 Ubuntu 12.04 LTS, Ubuntu 14.04 LTS, Debian stable
- 2 Ubuntu/Debian/Mint
- 3 Fedora 13
- 4 Zugriff auf Ubuntu mittels VNC von außerhalb der Schule
- 5 Direktes Drucken mit dem IServ Druckmodul
Ubuntu 12.04 LTS, Ubuntu 14.04 LTS, Debian stable
Die aktuellen LTS-Versionen (Long Term Support) können einfach, so wie Windows, über den IDesk installiert werden. Weitere Informationen hierzu finden sich in der offiziellen IServ-Dokumentation
Ubuntu/Debian/Mint
Für Ubuntu LTS ab Version 12.04 wird ein Paket entwickelt, dieses läuft aktuell auch auf Ubuntu 10.04 LTS, Debian Stable und Linux Mint. Das Paket selbst ist abhängig von den benötigten Programmen, welche bei graphischer Installation mitinstalliert werden. Diese Programme werden dann automatisch konfiguriert.
Die Testversion kann man aus dem Repository herunterladen, wobei bis zu drei Versionen vorhanden sind, neuere Versionen erhalten eventuell mehr Funktionen, sind aber gleichzeitig eventuell noch nicht für den täglichen Einsatz geeignet. Die zugehörige Diskussionsplattform findet sich im Support-Forum. Bei der Installation des Clients werden alle nötigen Angaben abgefragt, unter anderem wie das Benutzerverzeichnis eingebunden werden soll. Hierfür gibt es vier Möglichkeiten:
- gleicher Share wie bei Windows (home)
- eigener Share (linux_home)
- lokal
- tmpfs
- tmpfs + archive
Bei den ersten beiden Varianten läuft einige Software nicht besonders gut oder gar nicht (z.B. Firefox, KDE). Der Unterschied hier ist lediglich, ob das Linux-Homeverzeichnis gleich dem Eigene Dateien
Verzeichnis von Windows sein soll oder ob es dem Homeverzeichnis auf dem Server entsprechen soll.
Bei der dritten Variante bleiben alle Dateien, welche direkt im Home-Verzeichnis liegen lokal erhalten, werden aber nicht auf den Server synchronisiert. Dadurch bleiben die Konfigurationen von Programmen erhalten, jedoch müssen die Festplatten ausreichend dimensioniert sein. Eventuell lohnt es sich hierbei Quotas zu benutzen.
Die vierte Variante bindet ein temporäres Dateisystem ein, wodurch die Schüler nicht die Festplatte überfüllen können, jedoch gehen bei jedem Log-Out alle Dateien außerhalb von Files und Groups verloren
Die letzte Methode ist die aktuell zu bevorzugende. Hier wird sowohl ein temporäres Dateisystem eingebunden, als auch alle Daten behalten, da bei einem Log-Out alle Dateien gepackt und auf den IServ hochgeladen werden.
Nötige Änderungen auf dem IServ
Es ist nicht mehr nötig auf dem IServ Änderungen vorzunehmen. Mit einer neuen Version des iserv-computer Pakets wurden die Änderungen in den IServ integriert und sind nun standardmäßig gesetzt.
Dokumentation des Pakets
Dieser Abschnitt dokumentiert, was das Paket automatisiert erledigt und ist insbesondere für Administratoren von nicht-unterstützten Systemen hilfreich.
Abhängigkeiten
- winbind: Ein Systemdienst, welcher für die Authentifikation über eine Windows-Domäne nötig ist. Unter Debian-basierten Distributionen sind die folgenden beiden Pakete extra zu installieren.
- libpam-winbind | winbind (<= 2:3.5.11): Authetifizierung des Benutzers über PAM
- libnss-winbind | winbind (<= 2:3.6.5-2): Systemweite Benutzer/Gruppen-Abfrage von winbind-Benutzern
- samba-common-bin: Liefert nmblookup, ein Tool zur Namensauflösung (vorinstalliert)
- network-manager: Einfache Netzwerkverwaltung (vorinstalliert)
- isc-dhcp-client | dhcp-client (vorinstalliert)
- cifs-utils | smbfs: Programme zum Einbinden des Benutzerverzeichnisses
- smbclient: Komandozeilenprogramme zum kommunizieren mit dem IServ-Samba-Server (vorinstalliert
- libpam-mount (>= 0.18): Automatische Einbinden der Benutzerverzeichnisse beim Login
- cups: Common Unix Printing System, der Druckserver (vorinstalliert)
- ghostscript: Tools zum Erstellen von PDF-Dokumenten
Nötige Konfigurationsschritte
/etc/samba/smb.conf
[global] workgroup = ISERVDOMAIN security = DOMAIN os level = 0 local master = No domain master = No template homedir = /home/%U template shell = /bin/bash winbind separator = + winbind cache time = 10 winbind enum users = Yes winbind enum groups = Yes winbind use default domain = Yes idmap config * : range = 10000-20000 idmap config * : backend = tdb
Bei einem älteren Samba (z.B. Ubuntu 10.04) müssen die letzten beiden Zeilen stattdessen folgendermaßen lauten:
idmap uid = 10000-20000 idmap gid = 10000-20000
/etc/nsswitch.conf
Hier muss an die beiden Zeilen beginnend mit passwd:
und group:
noch winbind
drangehängt werden.
Aus
passwd: compat group: compat
wird also
passwd: compat winbind group: compat winbind
/etc/security/pam_mount.conf.xml
Die folgenden Zeilen müssen in der /etc/security/pam_mount.conf.xml
direkt nach <!-- Volume definitions -->
eingefügt werden.
datei<volume uid="10000-20000" fstype="cifs" server="iserv" path="home" mountpoint="/home/%(USER)" options="iocharset=utf8,dir_mode=0700"/>
<volume uid="10000-20000" fstype="cifs" server="iserv" path="groups" mountpoint="/home/%(USER)/Groups" options="iocharset=utf8,dir_mode=0700"/>
datei<volume uid="10000-20000" fstype="cifs" server="iserv" path="linux_home" mountpoint="/home/%(USER)" options="iocharset=utf8,dir_mode=0700"/>
Lokal
<volume uid="10000-20000" fstype="cifs" server="iserv" path="home" mountpoint="/home/%(USER)/Files" options="iocharset=utf8,dir_mode=0700"/> <volume uid="10000-20000" fstype="cifs" server="iserv" path="groups" mountpoint="/home/%(USER)/Groups" options="iocharset=utf8,dir_mode=0700"/>
tmpfs
<volume uid="10000-20000" fstype="tmpfs" path="none" mountpoint="/home/%(USER)" options="nosuid,nodev,uid=%(USERUID),gid=%(USERGID),mode=700"/> <volume uid="10000-20000" fstype="cifs" server="iserv" path="home" mountpoint="/home/%(USER)/Files" options="iocharset=utf8,dir_mode=0700"/> <volume uid="10000-20000" fstype="cifs" server="iserv" path="groups" mountpoint="/home/%(USER)/Groups" options="iocharset=utf8,dir_mode=0700"/>
Wenn das drucken möglich sein soll muss bei allen Versionen außer Eigener Share (linux_home zeigend auf %H)
noch die folgende Zeile hinzugefügt werden:
<volume uid="10000-20000" fstype="cifs" server="iserv" path="linux_print" mountpoint="/home/%(USER)/Print" options="iocharset=utf8,dir_mode=0700"/>
/etc/rc.local
Da winbind, der für die Authentifizierung zuständige Dämon, manchmal schneller startet, als eine Netzwerkverbindung aufgebaut werden kann, empfiehlt es sich ihn nach dem Bootvorgang neuzustarten. Die einfachste Methode ist, folgende zwei Zeilen an das Ende der Datei /etc/rc.local
, jedoch vor exit 0
hinzuzufügen:
(sleep 5 && service winbind restart) & (sleep 10 && service winbind restart) &
lightdm
Der aktuell in Ubuntu benutzte Desktop-Manager, lightdm, lässt sich mit folgendem Befehl so konfigurieren, dass er u.a. ein Eingabefeld für den Benutzer zeigt, anstatt einer Liste:
/usr/lib/lightdm/lightdm-set-defaults --hide-users=true --show-manual-login=true --allow-guest=false --show-remote-login=false
Bei älteren Systemen gibt es noch keine Option --show-remote-login
, daher muss diese hier weggelassen werden:
/usr/lib/lightdm/lightdm-set-defaults --hide-users=true --show-manual-login=true --allow-guest=false
CUPS
Um Drucken zu können ist der einfachste Weg ein eigenes CUPS-Backend zu nutzen, welches gedruckte Dokumente einfach nach $HOME/Print schreibt. Dieses ist bei einem Debian unter /usr/lib/cups/backend/iserv
zu speichern. Dabei ist zu beachten, dass die Zugriffsrechte 700 (rwx------) sein sollten.
datei#!/bin/bash
set -e
# Device Discovery
if [ "$#" = "0" ]; then
# device-class device-uri "device-make-and-model" "device-info" "device-id" "device-location"
echo 'file iserv:/ "IServ" "IServ Printer" "Generic PDF Printer"'
#"MFG:Generic;MDL:CUPS-PDF Printer;DES:Generic CUPS-PDF Printer;CLS:PRINTER;CMD:POSTSCRIPT;'
exit 0
fi
# If no filname is submitted the printjob is on stdin
PRINTJOB="-"
if test -n "$6"; then
PRINTJOB="$6"
fi
JOB_NUMBER=$1
USER=$2
TITLE=$3
COPIES=$4
OPTIONS=$5
# Replace/delete all characters which might be troublemakers from the filename
DESTTITLE=`echo $TITLE | iconv -t US-ASCII//translit | sed 's/ /_/g' | tr -d '\0-\51\57\72-\100\133-\136\140\173-\177'`
HOMEDIR="`getent passwd $USER | cut -d: -f6`"
DESTDIR="$HOMEDIR/Print/"
DESTFILE="$DESTDIR$DESTTITLE"
if [ ! -d $DESTDIR ]; then
sudo -u $USER mkdir $DESTDIR
fi
if [ ! -e $DESTFILE.ps ]; then
cat $6 | sudo -u $USER tee $DESTFILE.ps
exit 0
else
NUMBER=2
while [ -e "$DESTFILE-$NUMBER.ps" ]; do
NUMBER=`expr $NUMBER + 1`
done
cat $6 | sudo -u $USER tee $DESTFILE-$NUMBER.ps
exit 0
fi
Der Drucker kann nun entweder manuell hinzugefügt werden, oder mithilfe dieses Scripts:
datei## IServ PRINTING SUPPORT
# with parts from cups-pdf's debian postinst and prerm scripts (Version: 2.6.1-8)
#
# COPYRIGHT
# © 2003-2011 Martin-Éric Racine <martin-eric.racine@iki.fi>
# © 2009,2011 Till Kamppeter <till.kamppeter@gmail.com>
# © 2013 IServ <info@iserv.eu>
#
# LICENSE
# This package is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 2 of the License or (at
# your option) any later version.
#
# Ensure that CUPS is running before we manipulte its queues
if [ -f /etc/init/cups ] ; then
service cups force-reload || service cups start || true
fi
# Wait until CUPS has reloaded its configuration.
if lpstat -h localhost -r 2>/dev/null | grep -q not; then
t=0
while lpstat -h localhost -r 2>/dev/null | grep -q not; do
t=$(($t + 1))
if [ $t = 10 ]; then
echo "CUPS failed to reload its configuration!"
break
fi
sleep 1
done
fi
# Check if an IServ printer already exists
if [ -z "$( LC_ALL=C lpstat -h localhost -v 2>/dev/null | grep 'iserv:/' )" ]
then
# 1) Find a name for the PDF queue.
queue=IServ
number=0
while $(LC_ALL=C lpstat -h localhost -v 2>/dev/null | cut -d ':' -f 1 | cut -d ' ' -f 3 | grep -q ^$queue\$)
do
number=$(($number + 1))
queue="IServ$number"
done
# 2) Find the default paper size.
# Papersize is always A4!
# size="$(LC_ALL=C paperconf 2>/dev/null)" || size=a4
size=a4
# 3) Find PPD
if [ -e /usr/share/ghostscript/current/lib/ghostpdf.ppd ]; then
# Current GS have this dir which makes it easy for us
PPD="/usr/share/ghostscript/current/lib/ghostpdf.ppd"
else
# Older ones don't :/
max=-1
for version in `find /usr/share/ghostscript -maxdepth 3 -xdev -regex "/usr/share/ghostscript/[0-9]+\.[0-9]+/lib/ghostpdf.ppd" | sed -e 's/^\/usr\/share\/ghostscript\///g' -e 's/\/lib\/ghostpdf.ppd$//g'`
do
[[ `echo $version | sed 's/\.//'` -gt `echo $max | sed 's/\.//'` ]] && max=$version
done
PPD="/usr/share/ghostscript/$version/lib/ghostpdf.ppd"
fi
# 4) Create the queue.
echo | lpadmin -h localhost -p $queue -v iserv:/ -P $PPD -o printer-is-shared=no -o PageSize=$size 2>/dev/null || :
# 5) Enable the queue.
echo | cupsenable -h localhost $queue 2>/dev/null || :
echo | cupsaccept -h localhost $queue 2>/dev/null || :
# 6) Set the IServ queue as default if there is no default printer yet.
if [ -z "$(LC_ALL=C lpstat -h localhost -d 2>/dev/null | grep 'system default destination:')" ]
then
echo | lpadmin -h localhost -d $queue 2>/dev/null || :
fi
fi
Fedora 13
Voraussetzung
- Ein Host mit (frisch installiertem?) Fedora 13 (inkl. einer gewünschten Oberfläche)
- Benötigte Software-Pakete auf dem Linux-Client installieren:
yum install samba-winbind samba-winbind-clients authconfig
Client einbinden
- das Tool authconfig starten, um die Benutzeranmeldung einzurichten:
authconfig-tui
- Jetzt füge ich unter Benutzerinformation und unter Authentifizierung winbind hinzu, wähle "Weiter" und konfiguriere winbind:
- als Sicherheitsmodell "domain"
- Domain ist der Name meiner "Windows"-Domäne, wie sie im IServ eingetragen ist
- Der Domain-Controller ist IServ
- Wichtig: als Standard-Shell die bin/bash wählen!
- nun die Arbeitsstation der Domäne hinzufügen:
- "Domain-Mitglied werden" wählen
- Benutzername und Passwort eines Domänen-Admins (der also Rechner in die Domäne aufnehmen darf) eingeben[1]
- Jetzt noch dafür sorgen, dass neue (die sich auf diesem Host erstmals anmeldenden) Benutzer automatisch ein eigenes Home erhalten:
authconfig --update --enablemkhomedir
- Testen, ob der Client die Benutzer der Domäne kennt, Ergebnis sollte eine (lange) Liste sein:
wbinfo -u
Anmelden und Spaß haben
- Jetzt können sich alle (!) Benutzer der Domäne sowohl an der Shell als auch an der womöglich installierten grafischen Oberfläche anmelden.
- Ein benötigtes Home-Verzeichnis wird automatisch erstellt.
- Achtung
- Benutzername erfolgt in der Form MEINEDOMÄNE\vorname.nachname, also mit Angabe der Domäne!
- Die GUI zeigt die Domänenbenutzer nicht in der Auswahlliste an, es ist also "Anderer Benutzer" zu wählen.
Screenshots
Zu erledigen:
- Home des Benutzers automatisch einhängen
- Quotas hinzufügen
- ↑ Achtung bei Rechnern mit Windows und Linux parallel: Es lässt sich jeder Rechnername nur einmal der Domäne hinzufügen. Bei einer Parallelinstallation müssen daher (nur!) die Hostnamen der beiden Betriebssysteme unterschiedliche sein!
Zugriff auf Ubuntu mittels VNC von außerhalb der Schule
Erstmal VNC auf dem Client starten. Dafür erst über SSH auf dem IServ in der Schule, dann mit SSH weiter zum Clientrechner Dabei die richtige XAuth-Datei auswählen, hier für lightdm (Ubuntu Standard).
mirko@mirko:~$ ssh root@schule.example schule.example ~ # ssh -oStrictHostKeyChecking=no -i /var/lib/iserv/config/id_rsa root@ubunturechner.schule.example root@ubunturechner:~# x11vnc -auth /var/lib/lightdm/.Xauthority
Dann in einem zweiten Terminal verbinden.
mirko@mirko:~$ vncviewer -via root@schule.example ubunturechner.schule.example:0
Nun öffnet sich nach kurzer Zeit ein Fenster mit dem Anmeldebildschirm. Es ist zwar alles etwas langsam und stockend, aber für Fehlersuche gut geeignet.
Direktes Drucken mit dem IServ Druckmodul
Das direkte Drucken mit dem IServ-Druckmodul ist mithilfe eines inoffiziellen Zusatzmoduls möglich und unter dem Artikel Direktes Drucken mit Linux-Clients beschrieben.