Ein Solaris-System als Datei-, Druck- und FAX-Server im heterogenen Netz
Im folgenden Tutorial geht es – wie aus der Überschrift zu entnehmen ist – darum, mit einem Solaris-System im SOHO-Bereich die genannten Serverdienste anzubieten.
Konkret soll realisiert werden:
Dateiserverdienste für Windows-Maschinen mittels Samba
IPP-Druckserver (für alle Systeme, die IPP sprechen) mittels CUPS
Windows-Druckserver mittels Samba und CUPS
Faxempfang und Weiterleitung als Mail mit PDF-Anhang mittels Hylafax
Faxversand von verschiedenen Client-Systemen mittels Hylafax
Vorausgesetzt ist eine Solaris 10 Developer (Minimum) Installation und die Verwendung von beiliegendem Compilerprofil (einzubinden mit source ~/cc_profil).
Samba 3 als Dateiserver
Samba 3 wird seit Solaris 10 mitgeliefert – die Pakete heißen SUNWsmbar, SUNWsmbau und SUNWsmbac. Die Installation sollte dementsprechend keine Probleme verursachen.
Die Konfiguration ist für die Zwecke des Tutorials ebenfalls kein Problem, eine ausreichend kommentiertes Konfigurationsbeispiel (smb.conf) mit privaten Verzeichnissen der User (Sektion [homes]), einem für alle User sichtbaren (browseable) Verzeichnis (Sektion [tausch]) sowie einigen anderen Beispielen findet sich im Anhang. Sie muss in das Verzeichnis /etc/sfw/ kopiert werden, danach muss Samba neu gestartet werden.
/etc/init.d/samba stop
/etc/init.d/samba start
Wichtig ist, das Samba nur die Nutzernamen nicht aber die Passwörter vom System übernimmt und daher eine eigene Passwortdatei benötigt, in die man die Samba-Nutzer mit „smbpasswd -a Nutzername“ eintragen muss (der einzutragende Nutzer muss bereits existieren) – das zu vergebende Passwort muss nicht mit dem Systempasswort des Users identisch sein. Aufgrund der verschiedenen Passwortdatenbanken macht es Sinn, die Nutzernamen und Passwörter auf den Clientsystemen (Windows) und auf dem Samba-Server aneinander anzugleichen – mit Win2k/XP erspart man sich so zusätzliche Passwortabfragen und mit Windows9x geht es gar nicht anders.
Auf
den Samba-Server kann man nun von im gleichen Netz / gleicher
Arbeitsgruppe befindlichen Windows-Rechnern über die
Netzwerkumgebung zugreifen. Falls der Server dort nicht aufgeführt
wird oder man abkürzen möchte, kann man ihn auch direkt
aus der Adressleiste eines Ornderfensters über den NetBIOS
Namen (für die Beispiel-Konfiguration \\server\
) oder seine IP-Adresse (im Beispiel \\10.0.0.50\)
ansprechen.
Freigegebene Verzeichnisse können als
Netzlaufwerk gebunden (Rechtsklick auf das Verzeichnis) und dann mit
den windows-typischen Laufwerksbuchstaben verwendet werden.
CUPS als IPP-Druckserver
Das stable release 1.1.23 (auf http://www.cups.org erhältlich) lässt sich ohne größere Schwierigkeiten unter Solaris 10 kompilieren.
Nach dem Entpacken der Sourcen muss man lediglich die C Compiler festlegen, damit der Sun Studio Compiler verwendet wird.
export CXX=CC
export CC=CC
./configure --prefix=/usr/local --disable-openssl --disable-gnutls
gmake
gmake
install
Die Konfiguration von CUPS erfolgt über ein Web-Interface, welches standardmäßig nur über 127.0.0.1:631 erreichbar ist. Soll CUPS auch von anderen Rechnern konfigurierbar sein, muss in der Datei /usr/local/etc/cups/cupsd.conf in den Abschnitten <Location /> und <Location /admin> jeweils ein Eintrag „Allow From“ mit dem passenden Subnetz (hier 10.0.0.0/24) hinzugefügt werden.
Beispiel:
<Location />
Order Deny,Allow
Deny From All
Allow From 127.0.0.1
Allow From 10.0.0.0/24
</Location>
Einen
Drucker kann man nun über das Web-Interface (im Beispiel
10.0.0.50:631) in der Sektion „Einrichtungsaufgaben“
hinzufügen.
Um Treiberproblemen aus dem Weg zu gehen,
verwende ich auf dem CUPS-Rechner den RAW-Treiber (Hersteller) und
generiere die Druckdaten auf den Client-Rechnern.
Damit die Druckdaten unverändert zum Drucker gelangen, muss in zwei Dateien je eine Zeile am Dateiende entkommentiert werden:
Datei: /usr/local/etc/cups/mime.types
Zeile: application/octet-stream
Datei: /usr/local/etc/cups/mime.convs
Zeile: application/octet-stream
application/vnd.cups-raw 0 -
Danach ist CUPS neu zustarten – /etc/init.d/cups stop && /etc/init.d/cups start
Um den Drucker via IPP unter Windows2000/XP nutzen zu können, wählt man im Druckerinstallationsassistenten die Option Netzwerkdrucker, gibt die URL des Druckservers mit dem Port von CUPS an (z.B. http://10.0.0.50:631/printers/drucker – wobei „drucker“ der CUPS-Name des Druckers ist) und installiert dann nach Aufforderung den passenden Druckertreiber für Windows.
CUPS mit Samba als Windowsdruckserver
Nicht
jedes Windows spricht IPP – falls Windows 95 / 98 Clients
verwendet werden, kann man auch per Samba drucken. Diese Funktion
wird durch die Sektion [printers] in der smb.conf realisiert. Samba
gibt die in der printcap-Datei angegebenen Drucker (also die in CUPS
eingerichteten) automatisch mit frei.
Faxempfang
und Weiterleitung als Mail mit PDF-Anhang mittels
Hylafax
Voraussetzung ist ein seriell angeschlossenes
Fax-Modem.
Nach dem Entpacken der Hylafax 4.2.5
(http://www.hylafax.org) Sourcen durchsucht man das Verzeichnis nach
„5bin“ (grep -r 5bin ./)
und ändert es an den gefundenen Stellen in „bin“,
damit wieder gültige Pfade entstehen. Dann lässt Hylafax
wie folgt unter Solaris 10 kompilieren:
export CC=/opt/SUNWspro/bin/cc
./configure
gmake
gmake
install
Da
das configure Script Ghostscript unter /usr/local
sucht, muss man bei der Abfrage am Ende des Scripts den Pfad für
gs eintragen – er ist /usr/sfw/bin/gs
Nach
der Installation führt man faxsetup
aus – man kann fast alle Werte auf Standard lassen. Es ist nicht
zwingend notwendig, Hylafax und SNPP in /etc/services
einzutragen – ich habe daher no
gewählt.
In der folgenden Abfrage passt man Nummern wie
CountryCode / AreaCode
/ FAXNumber (eigene) /
(LongDistancePrefix /
InternationalPrefix) /
LocalIdentifier (eigener Name)
an sein Setup an.
Das Modem-Device ist relativ zu /dev/
anzugeben – in unserem Fall term/b,
was schlussendlich das Gerät /dev/term/b
– die zweite serielle Schnittstelle (die erste ist /dev/term/a)
– meint.
Bei
der Abfrage der Modemklasse kann man ruhig Class2 wählen –
die in den letzten Jahren gebauten Modems sollten dieser entsprechen
(mein 14400er FaxModem tut dies u.a. auch). Am Ende von faxsetup
lässt man faxmodem
ausführen. Um Faxe empfangen zu können, muss man noch
faxgetty mit der entsprechenden Schnittstelle starten – im
Beispiel faxgetty /dev/term/b -
jetzt sollte, wenn man das Modem anruft, den typischen Pfeifton
eines Faxgerätes hören.
Den Status des Modems kann man
sich mit faxstat anzeigen
lassen – im Normalfall sollte einige Sekunden nachdem faxgetty
gestartet wurde, „Running and idle“
ausgegeben werden.
Damit Hylafax TIF-Dateien generieren kann, benötigt man libtiff (www.libtiff.org) – die TIFF-Tools von Solaris haben Probleme verursacht.
export
CC=cc
export CXX=CC
./configure –prefix=/usr/local
gmake
gmake
install
Um die empfangenen Faxe als PDF weiterleiten zu lassen, muss man die Datei FaxDispatch in /var/spool/hylafax/etc anlegen. Eine einfache Version könnte so aussehen:
FILETYPE=pdf;
SENDTO=faxmaster;
Da Mail-Anhänge base64 kodiert sein müssen, benötigt man noch ein entsprechendes Programm – ich habe uuencode aus den sharutils verwendet (http://www.gnu.org/software/sharutils/) - das Kompilieren gestaltet sich wieder unkompliziert:
export
CC=cc
export CXX=CC
./configure –prefix=/usr/local
gmake
gmake
install
Dann muss man in /var/spool/hylafax/etc/setup.cache einige Änderungen vornehmen:
GREP='/usr/sfw/bin/ggrep' anstatt '/usr/bin/grep'
in PATH wieder das 5bin gegen bin korrigieren (falls es da noch fehlerhaft ist)
TIFF2PDF='/usr/local/bin/tiff2pdf'
UUENCODE='/usr/local/bin/uuencode'
In
/var/spool/hylafax/bin/faxrcvd
muss an zwei Stellen (Zeile 136 und 138) grep
in $GREP
geändert werden, da das Script sonst das Solaris grep
verwendet, welches die Option -E nicht kennt.
Danach startet
man Hylafax neu und empfangene Faxe sollten in der Mailbox des Users
landen, der als Alias für Faxmaster eingetragen ist. Man kann
in dieser Datei die Faxe auch nach Nummern der Sender oder nach
Device verschiedenen Usern zuordnen – mehr dazu in der
Manpage.
Zum Abruf der empfangenen Faxe eignet sich ein POP3
Daemon wie z.B. QPopper
(http://www.eudora.com/products/unsupported/qpopper/index.html).
Das Kompilieren geht problemlos:
export
CC=cc
./configure --prefix=/usr/local –enable-standalone
gmake
gmake
install
Die installierte Binary heißt popper und muss einfach nur gestartet werden – dann kann man mit seinem Mailclient die Faxe abrufen, in dem man als POP3 Server den Hylafax-Rechner und als Nutzer / Passwort entsprechend den Unix-Login des Users, der als Alias für faxmaster eingetragen ist, verwendet.
Faxversand von verschiedenen Clients mittels Hylafax
Zum Fax-Versand von verschiedenen Client-Systemen eignet sich JhylaFAX (http://jhylafax.sourceforge.net/) bestens. Berechtige User werden in /var/spool/hylafax/etc/hosts.hfaxd definiert - ^nutzer@ erlaubt nutzer von jedem Rechner aus das Versenden von Faxen. Näheres zu der Vergabe von Rechten / Passwörtern in der Manpage.
smb.conf
# Globale Parameter
[global]
# Anmeldeart - alternativ "security = share" - eine Nutzeranmeldung ist dann nicht notwendig
security = user
# Passwoerter werden verschluesselt uebertragen - in aelteren Windowsversionen war das nicht zwingend noetig
encrypt passwords = Yes
# Pfad zur Passwortdatei
smb passwd file = /etc/sfw/smbpasswd
# mehr Logging zwecks Fehlersuche
# je hoeher, desto mehr Datensalat findet sich in der Log-Datei - level 2 ist zur Fehlersuche meist ausreichend
log level = 2
log file = /var/log/samba.log
# maximale Groesse der Logdatei in kB
max log size = 100
# NetBIOS Informationen
# Name der Win-Arbeitsgruppe - sollte mit den Clientrechnern uebereinstimmen
workgroup = WORKGROUP
# Kommentarfeld
server string = Datei- und Druckserver
# Name des Systems
netbios name = server
# hat im [globals] Abschnitt Einfluss auf die "Sichtbarkeit" in der Netzwerkumgebung von Win
browsable = Yes
# Absicherung
# Samba reagiert nur auf Anfragen vom entsprechenden Interface
interfaces = 10.0.0.50/255.255.255.0
# und auf keine anderen
bind interfaces only = yes
# und nur auf Anfragen aus dem richtigen Subnetz
hosts allow = 10.0.0.
# root darf sich nicht per Samba anmelden
invalid users = root
# nach 10 Minuten Inaktivitaet des Clients wird die Verbindung geschlossen
deadtime = 10
# Charset des Servers - wichtig zur Konvertierung von Umlauten etc. - default ASCII
unix charset = ISO8859-1
# Festlegen des Drucksystems
printing = cups
# Ort der printcap Datei
printcap name = /etc/printcap
# alle verfügbaren Drucker werden automatisch geladen
[printers]
# Kommentarfeld
comment = freigegebene Drucker
# Spoolpfad - alle Samba-User sollten Schreibrechte haben
path = /var/spool/samba
# ein "MUST BE" laut Manpage - macht auch Sinn
printable = yes
# bei Verwendung eines RAW-Druckers kommt es mit WinNT/2k/XP sonst zu Problemen
use client driver = yes
# CUPS bringt eigene lp-Tools mit - die Solaris eigenen sind ungeeignet
print command = /usr/local/bin/lpr -P %p -o raw %s
# Home-Verzeichnisse der Nutzer - jeder Nutzer "sieht" in der Win-Netzwerkumgebung nur sein eigenes
[homes]
# Kommentarfeld
comment = Homeverzeichnis
# Schreibzugriffe moeglich
writeable = yes
# die [homes] Sektion erscheint nicht gesondert in der Win-Netzwerkumgebung
browseable = No
# [global], [printers] und [homes] sind spezielle Sektionen von Samba
# einfache Freigabe fuer alle Nutzer des Servers
[tausch]
# freigegebenes Verzeichnis
path = /export/home/tausch
# Schreibzugriff moeglich
writeable = yes
# auch per Windows-Gastanmeldung zugaenglich
guest ok = yes
# Unix-Rechte bei erstellten Dateien ...
create mask = 0666
# ... und Verzeichnissen
directory mask = 0777
# lesbare Freigabe fuer alle Nutzer des Servers
[installer]
# freigegebenes Verzeichnis
path = /export/home/installer
# Schreibzugriff moeglich
writeable = yes
# auch per Windows-Gastanmeldung zugaenglich
guest ok = yes
# Schreib- und Lesezugriff nur fuer Mitglieder der Gruppe admin (writelist)
create mask = 0664
directory mask = 0775
writelist = @admin
cc_profil
CC=/opt/SUNWspro/bin/cc
CXX=/opt/SUNWspro/bin/CC
PATH=/usr/local/bin:/usr/local/sbin::/usr/sfw/bin:/usr/sfw/sbin:/usr/bin:/usr/sbin:/usr/ccs/bin:/opt/SUNWspro/bin
CFLAGS="-xtarget=native -xarch=v8 -xO3 "
CXXFLAGS="-xtarget=native -xarch=v8 -xO3"
CPPFLAGS="-I/usr/local/include -I/usr/sfw/include"
LDFLAGS="-L/usr/local/lib -R/usr/local/lib -L/usr/sfw/lib -R/usr/sfw/lib"
export CC CXX PATH CFLAGS CXXFLAGS CPPFLAGS LDFLAGS