Meinen vor knapp 2 Jahren gebauten Storage Server mit bislang FreeNAS 8.0 musste ich jetzt mal aktualisieren. Inzwischen ist FreeNAS 9.1 verfügbar und ich muss sagen, dass die Entwickler ordentlich investiert haben. Alleine das Browser-GUI enthält zahlreiche neue Funktionen und ist zudem aufgeräumt worden. Aber auch im System sind viele Optimierungen gemacht worden. Besonders ZFS wurde deutlich weiterentwickelt.
Im Artikel mit meinem Storage Server beschrieb ich bereits, wie man einen Printserver unter FreeNAS, also auf dem darunterliegenden Unix-Betriebssystem FreeBSD installiert. Das Vorgehen hat sich nun wieder in einigen Details geändert, sodass meine alte Anleitung auf FreeNAS 9.1 nicht mehr anwendbar ist.
Da es mich als Unix-Amateur selbst einige Zeit gekostet hat, den Drucker zur Arbeit zu motivieren, möchte ich das Wissen als kleine Anleitung an euch weitergeben.
Einleitung
Ein Printserver ist leider nicht in FreeNAS enthalten. Zwar ist es auch nicht Aufgabe eines Storage Servers, über einen Printserver zu verfügen, aber wenn man schon einen PC 24/7 abstellt, dann soll der diese Aufgabe doch bitte übernehmen.
Besonders konkrete Anleitungen konnte ich im Internet hierzu nicht finden. Lediglich auf instructables.com existiert eine Anleitung für FreeNAS v0.69, die ich auch schon für FreeNAS 8.0 modifiziert hatte. Technisch weichen die beiden Versionen v0.69 und v9.1 von FreeNAS aber so stark voneinander ab, dass ich die Anleitung nicht einfach nachmachen konnte und den „Lösungsweg“ in vielen veränderten Details selbst finden musste.
Bildquelle: Instructables.com
Ich möchte die Anleitung von instrucables.com nicht kopieren oder ersetzen, darum gehe ich hier nur auf die Abweichungen zu der Anleitung ein. Die Anleitung dort setzt sich aus 10 Schritten zusammen, die du in der Reihenfolge auch ausführen solltest. In den folgenden Unterkapiteln erkläre ich, was in den jeweiligen Schritten anders gemacht werden muss, als dort beschrieben. Du führst also jeden Schritt bei Instructables.com aus und prüfst vor jedem Handgriff erst auf dieser Seite, ob nicht eigentlich etwas anderes getan werden muss. Klar?
Also: Das hier ist keine eigenständige Anleitung. Es handelt sich nur um Abweichungen und Ergänzungen zur Anleitung von instructables.com!
Wenn die Anleitung Schritt für Schritt penibel nachvollzogen wird, sollte es mit dem Printserver klappen.
Vorbereitung
Zunächst wird FreeNAS installiert und gebootet. An den PC sollte ein Monitor angeschlossen und im Menü von FreeNAS die Netzwerkschnittstelle konfiguriert werden. Alternativ geht das bei FreeNAS 9.1 nun auch über das Browser-GUI. Jedenfalls sollte FreeNAS zuerst eine in das eigene LAN passende IP-Adresse erhalten. Die IP-Adresse muss eine statische sein, damit die Client-PCs später auf den Drucker zugreifen können. Weiterhin wird eine Default Route eingegeben, was in der Regel die IP des Routers ist. Und ein paar DNS-Server sollten angegeben werden, wenn kein DHCP aktiviert ist. Dann kommt FreeNAS auch in das Internet, was für die folgende Anleitung hilfreich, aber nicht zwingend ist. DNS-Server-Adressen können im Internet über Suchmaschinen leicht gefunden werden.
Step 1: Preparation
In diesem ersten Schritt wird noch nichts getan, lediglich auf benötigte Software und eine benötigte Kerneldatei hingewiesen. Diese Datei darf nicht von Instructables.com bezogen werden, da sie veraltet ist und möglicherweise nicht zu deiner PC-Architektur passt. Die Kerneldatei ulpt.ko bekommt man, indem man sich ein FreeBSD-ISO-Image herunterlädt (und zwar hier). Unbedingt darauf achten, dass die FreeBSD-Version die gleiche, wie die in deiner FreeNAS-Version enthaltene FreeBSD-Version ist (also u.U. nicht die neueste FreeBSD-Version) und unbedingt darauf achten, dass du die zu deinem Prozessortyp passende Variante (wie amd64, i386, oder weitere) herunterlädtst. In meinem Fall z.B. FreeBSD-9.1-RELEASE-amd64-disc1.iso. Du lädst dann wahrscheinlich eine ISO-Datei herunter. Diese entpackst du, etwa mit WinRAR, und suchst dir die Datei ulpt.ko aus dem Verzeichnis \Boot\Kernel heraus. Zwar hast du so mehrere hundert Megabyte heruntergeladen, um dann an ein paar kB heranzukommen, aber immerhin hast du nun die passende Datei.
Step 2: Connect via SSH
Keine Anmerkungen, genauso durchführen. Bevor eine SSH-Verbindung möglich ist, muss SSH natürlich im Webinterface von FreeNAS konfiguriert und aktiviert werden.
Step 3: Put ulpt.ko In The Right Spot
Zunächst wird sich die Datei gar nicht so einfach ins System kopieren lassen, wie in der Anleitung beschrieben. Unter FreeNAS 9.1 ist das Dateisystem nämlich per standard schreibgeschützt gemounted. Es muss vorher in der SSH-Konsole folgender Befehl eingegeben werden:
/sbin/mount -uw /
Nun kann die Kernel-Datei vom Desktop-PC zum Server übertragen werden. Hier bietet sich FileZilla an, da es eine bequeme Navigation auf dem Dateisystem des Servers ermöglicht. Kopiere die Datei z.B. in folgendes Verzeichnis: /var/tmp/ulpt.ko
Aufgrund von Rechten kann die Datei nicht direkt an ihr Ziel kopiert werden. Darum wird sie nun mittels eines weiteren Befehls in der Konsole, wo ja root-Rechte gelten, an das neue Ziel /boot/kernel/ulpt.ko verschoben.
mv /var/tmp/ulpt.ko /boot/kernel/ulpt.ko
Die Datei muss noch sinnvolle Dateiattribute erhalten, z.B. 755.
chmod 755 /boot/kernel/ulpt.ko
Step 4: Install LPRng
Schritt 4 funktioniert so wie dort beschrieben nur, wenn eine Internetverbindung besteht. Ansonsten geht man mit einem anderen PC wieder zur FreeBSD-Seite und lädt dort manuell die Datei LPRng.tbz herunter. Die gibt es dort einzeln und sie steckt nicht in einem Archiv oder Iso. Auch hier wieder unbedingt auf die richtige FreeBSD-Version und den richtigen Prozessortyp achten. Die Datei wird dann ebenfalls mit FileZilla übertragen, z.B. nach /var/tmp/LPRng.tbz.
Nun wird der folgende Befehl ausgeführt und die Datei sollte installiert werden.
Wenn FreeBSD ins Internet kommt:
pkg_add -r -f LPRng
Ansonsten:
pkg_add -f /var/tmp/LPRng.tbz
FreeNAS erneuert bei jedem Boot einige Verzeichnisse, z.B. /etc, indem es sie aus einer Quelle komplett überschreibt, so dass sie wieder im ursprünglichen Zustand sind. Werden also Dateien darin geändert, sind die Änderungen nach dem nächsten Boot verloren. Es ist also erforderlich, die „Originale“ zu bearbeiten, die in /conf/base liegen. Neu erzeugte Dateien müssen ebenfalls dort hinterlegt werden, sonst sind sie nach dem nächsten Boot schlicht … weg.
Darum ist noch ein Befehl notwendig, der in der Anleitung von Instructables.com nicht vorhanden ist:
cp /etc/local/rc.d/lprng /conf/base/etc/local/rc.d/lprng
Step 5: Configure Things to Load on Boot
Der Schritt 5 enthält zwei Anweisungen. Die erste mit der Überschrift „Load ulpt.ko Module“ wird wie angegeben durchgeführt. Für den zweiten Schritt, „Start LPRng“, gelten aber wieder Abweichungen: In FreeNAS 9.1 ist der Zugriff auf die Datei rc.conf nicht mehr über das Webinterface möglich, wie in der Anleitung beschrieben. Stattdessen wird die Datei im Editor in der SSH-Konsole bearbeitet.
Im Editor öffnest du daher die entsprechende Datei für eine manuelle Konfiguration. Jedoch muss auch hier wieder die Wiederherstellungsquelle editiert werden:
nano /conf/base/etc/rc.conf
Ganz am Ende der Datei werden folgende beiden Zeilen angefügt:
lpd_enable="NO" lprng_enable="YES"
Um den Editor nun zu verlassen, drückst du Strg+X. Dann bestätigst du die Speicherfrage mit Y und Enter.
Step 6: LPRng Configuration: 1 of 3 – printcap
Auch dieser Schritt funktioniert nicht nach Anleitung. Die Datei printcap existiert nicht wie angegeben in /etc, sondern in /usr/local/etc, was aber wiederum ein Link ist auf /etc/local. Also im Editor öffnen mit:
nano /etc/local/printcap
Eingefügt wird nun folgendes, wobei Zeilen beginnend mit # nur Kommentare sind. Darauf achten, dass der Drucker wirklich das Gerät ulpt0 ist, ansonsten anpassen. Die Bezeichnung laserjet gehört ebenfalls zu meinem Drucker und muss ggf. angepasst werden.
# @(#)printcap HP Laserjet 4 lp|laserjet :sd=/var/spool/lpd/bare :sh :lp=/dev/ulpt0 #
Wieder Strg+X, dann Y, dann Enter.
Da diese Datei durch die Installation neu erzeugt wurde, muss sie nach /conf/base kopiert werden.
cp /etc/local/printcap /conf/base/etc/local/printcap
Auch die weiteren Anweisungen in diesem Schritt der Anleitung müssen wie folgt abgewandelt werden. Statt des im Artikel erzeugten Ordners wird folgender Ordner erzeugt und der Besitzer festgelegt.
mkdir -p -m 700 /conf/base/var/spool/lpd/bare chown 1:1 /conf/base/var/spool/lpd/bare
Step 7: LPRng Configuration: 2 of 3 – lpd.perms
Alternativ zur angegebenen Datei wird folgende Datei bearbeitet:
nano /etc/local/lpd.perms
In der Datei existiert in einer der laut Anleitung zu editierenden Zeilen der Benutzer papowell. Das ist der Programmierer von LPRng. Der Name kann entfernt werden. Ich habe dafür noch den Systemuser daemon und meinen eigenen Useraccount ergänzt.
Da diese Datei durch die Installation neu erzeugt wurde, muss sie nach /conf/base kopiert werden.
cp /etc/local/lpd.perms /conf/base/etc/local/lpd.perms
Step 8: LPRng Configuration: 3 of 3 – lpd.conf
Alternativ zur angegebenen Datei wird folgende Datei bearbeitet:
nano /etc/local/lpd.conf
Da diese Datei durch die Installation neu erzeugt wurde, muss sie nach /conf/base kopiert werden.
cp /etc/local/lpd.conf /conf/base/etc/local/lpd.conf
Step 9: Start Things and Set Permissions When Printer Connects
Die in diesem Schritt beschriebene Datei liegt auch wieder woanders, nämlich statt in /usr/local/etc/devd/devd.conf ist sie in /etc/devd.conf zu finden, aber auch diese Datei muss wieder im gespiegelten Verzeichnis bearbeitet werden, also:
nano /conf/base/etc/devd.conf
An das Ende der Datei wird folgendes angehängt.
# start action when USB printer ulpt0 is plugged in # wait 3 seconds and then start the spooler daemon # attach 100 { device-name "ulpt0"; action "sleep 3; lpd; ln -s /etc/local/printcap /etc/printcap; checkpc -f; chown 0:0 /dev/ulpt0; chmod 666 /dev/ulpt0;"; };
Folgendes beachten und überprüfen:
- In der Datei sind teils seitenlange Bereiche auskommentiert mit /* … */, was man leicht übersieht. Ein /* beginnt einen auskommentierten Bereich und ein */ beendet einen solchen Bereich. Der obige Code darf nicht in einem kommentierten Bereich landen, sonst wird er nicht ausgeführt.
- Darauf achten, dass der Drucker auch wirklich das Gerät ulpt0 ist, sonst anpassen.
Den Softlink (in der Zeile „ln -s …„) habe ich übrigens erstellt, weil der Printserver die printcap-Datei immer im Verzeichnis /etc gesucht hat und sich davon nicht abbringen ließ, aber mit Softlink findet er sie auch an ihrem eigentlichen Ort.
Step 10: Connecting A Windows PC
Kann so durchgeführt werden, allerdings muss vorher FreeBSD einmal neugestartet werden, damit die modifizierten Dateien aus ihren Spiegelverzeichnissen übernommen werden.
Dann viel Erfolg, bei mir hat es schließlich so funktioniert. Bis heute arbeitet der Drucker zuverlässig und es gab nicht einmal Probleme.
Dann hoffe ich, dass die Anleitung dem einen oder anderen helfen konnte.
Gruß vom Mov
Danke für die Hinweise. Eine Frage habe ich: Wenn ich das richtig sehe, wird der Printserver direkt ins FreeNAS-System eingebunden, nicht in ein Jail. Was bedeutet das im Falle eines FreeNAS-Updates? Geht die Printserver-Installation dann verloren, oder bleibt sie erhalten?
Danke…
Nein, der Printserver wird direkt auf Unix installiert, nicht in FreeNAS. Er ist auch nicht über das FreeNAS-Webinterface erreichbar, was aber auch nicht nötig ist.
Soweit mir bekannt kann FreeNAS sich nicht selbst aktualisieren (vielleicht ab v9.2? noch nicht probiert). Bisher ist für ein Update immer eine Neuinstallation erforderlich und es wird ohnehin immer ein neuer Kernel mit ausgeliefert. Wegen ersterem muss auch der Printserver neu installiert werden. Mit ein paar Notizen von der ersten Installation, die ja mein Blog im Artikel bereitstellt, ist es aber beim nächsten Mal flott gemacht.
Außerdem bin ich der Meinung, dass man nicht jedes Update mitnehmen muss. FreeNAS läuft sehr stabil vor sich hin, auch wenn es nicht das schnellste ist (über 50 MB/s schaffe ich kaum). Da mein FreeNAS nicht am Internet hängt, brauche ich nicht so oft aktualisieren.
Fazit: FreeNAS läuft hier mindestens seit 3,5 Jahren und ich habe 2x den Printserver installiert. Das erste Mal war es Aufwand, weil ich auch Unix noch gar nicht kannte, das zweite Mal ging es schnell. Geht doch.
Beste Grüße,
Emanuel
Hallo,
leider bricht der Drucker beim Drucken nach wenigen Sekunden ab und freenas gibt Folgendes aus:
Mar 23 19:00:40 freenas kernel: ugen0.3: at usbus0 (disconnected)
Mar 23 19:00:40 freenas kernel: ulpt0: at uhub2, port 4, addr 3 (disconnected)
Mar 23 19:00:44 freenas kernel: ugen0.3: at usbus0
Mar 23 19:00:44 freenas kernel: ulpt0: on usbus0
Mar 23 19:00:44 freenas kernel: ulpt0: using bi-directional mode
Mar 23 19:00:44 freenas kernel: ulpt0: out of paper
Kannst du mir einen Ansatz für das weitere Vorgehen liefern?
Na das sieht doch schon gut aus. Anscheinend funktioniert die Kommunikation mit dem Drucker. Kann es nicht sein, dass er wirklich kein Papier hat?
Im Drucker befindet sich genug Papier, die Jobliste gibt folgenden Fehler aus:
Printer: lp@localhost ‚CLP-315‘
Queue: no printable jobs in queue
Server: no server active
Status: job ‚Christian@CWI_PC+4‘ saved at 19:00:40.210
Rank Owner/ID Pr/Class Job Files Size Time
error Christian@CWI_PC+4 A 4 ERROR: too many errors
Irgendwie passt das nicht zusammen, oder?
Bist du sicher, dass du die Anleitung wirklich Schritt für Schritt nachvollzogen hast und dein FreeNAS auch in derselben dort beschriebenen Version läuft?
Ich frage deswegen erstmal so pauschal, weil ich sonst nur höre, dass es so bei allen funktioniert und wenn nicht, gab es eigentlich immer Probleme, weil der Artikel nicht gründlich genug gelesen wurde.
Leider sagt dein Log auch nicht so viel aus. Offensichtlich läuft ja auch der LPRNG bei dir gar nicht.
Evtl. schickst du mir mal alle im Artikel benannten Config-Dateien. Weiterhin würde ich dich bitten, das Problem fortan per Email zu besprechen, damit wir nicht den Kommentarbereich mit dem konkreten Problem verstopfen. Falls sich etwas für die Allgemeinheit nützliches ergibt, werde ich es im Artikel nachpflegen. Die Email steht im Impressum.
Vielen Dank, ich habe dir eine E-Mail geschrieben.
wie hast ist den Drucker den unter MacOS konfiguriert?
Gar nicht. Die gesamte Konfiguration des Druckers findet nur im Unix statt. Darum geht es ja im Artikel. Es spielt keine Rolle, von welchem Betriebssystem nachher gedruckt wird, da es ja ein Printserver ist.
Falls du meinst, wie du den Drucker auf einem MacOS-Client einbinden sollst, kann ich dir aber nicht helfen, da mir das Betriebssystem nicht vorliegt. Die verlinkte Anleitung von Instructables zeigt den Vorgang jedoch auf Seite 11. Wenn das nicht funktioniert, ist deine eigene Recherche gefragt. Falls du da noch Erkenntnisse gewinnst, die nicht aus meiner Anleitung oder der von Instructables hervorgehen, freue ich mich über eine Rückmeldung, um auch andere Leser aufzuklären.
MfG Emanuel
Hi, saubere Arbeit! Danke für die Anleitung!
Ich besitze einen Brother MFC-7420, muss ich die Zeilen dann dementsprechend: http://welcome.solutions.brother.com/bsc/public_s/id/linux/en/instruction_prn3.html#printcap1 anpassen?
oder woher weisst du wie dein Drucker heisst?
Danke
Wie mein Drucker heißt steht außen auf ihm drauf. Im Prinzip kannst du irgendetwas dahinschreiben, solange du dann überall denselben Name verwendest, auch bei der Einrichtung im Windows-Client. Aus „HP LaserJet 4“ habe ich dann kurz „laserjet“ gemacht. Kann man aber auch „pumuckel“ nennen. Und das Gerät /dev/ulpt0 o.ä. muss natürlich stimmen. Dann kann LPRng die Druckaufträge an den gewählten Namen an das Gerät weiterleiten.
Wahnsinn! Es funktioniert genauso wie du es beschrieben hast. Danke für deine Hilfe! i love it !