FreeBSD Tipps und Tricks
von Dru Lavigne
2005
Immer mal wieder nehme ich mir meine Liste der "Dinge, die ich mir ansehen will, wenn ich mal die Zeit dazu finde" vor, und auch diesmal habe ich dabei wieder ein paar Leckerbissen gefunden.
Beastie und Beerware
Ich versuche mindestens einmal pro Jahr die Dateien von meinem
FreeBSD-System durchzukämmen, um zu sehen, ob ich vielleicht neue
Dokumentationen, Skripte oder Manpages übersehen habe.
Ich habe die Suche in /usr/share/examples begonnen, und das Erste, was mir auffiel, war ein Verzeichnis namens BSD_daemon:
# ls /usr/share/examples/BSD_daemon
FreeBSD.pfa beastie.eps eps.patch
README beastie.fig poster.sh
Die Datei README beschreibt alle Dateien in diesem Verzeichnis.
Die Dateien wurden von
Poul-Henning Kamp erzeugt
und unterliegen der Beerware-Lizenz (die ebenfalls in README
erklärt wird).
In README ist auch beschrieben, wie mit dem Programm
fig2dev GIF- und PNG-Dateien erzeugt werden können.
Dieses Programm war nicht auf meinem System installiert, aber eine kurze
Google-Suche ergab, dass es zu den transfig-Utilities gehört.
Ich habe also schnell den transfig-Port installiert und die
Befehle ausgeführt, mit denen die Grafikdateien erzeugt werden:
# pkg_add -r transfig
# fig2dev -L gif -g '#f0f0f0' -t '#f0f0f0' beastie.fig beastie.gif
# fig2dev -L png beastie.fig beastie.png
Die erzeugten Bilder sind hübsche Darstellungen von Beastie.
Wenn Sie gerne mit Grafiken experimentieren, ist man fig2dev
eine lohnende Lektüre.
Skripte interaktiv machen
Als Nächstes habe ich mir das Verzeichnis dialog angeschaut:
# ls /usr/share/examples/dialog
README infobox msgbox textbox
checklist inputbox prgbox treebox
ftreebox menubox radiolist yesno
Vor ein paar Monaten hatte ich mit dialog herumexperimentiert,
mit dem interaktive Menüs in Shell-Skripten erzeugt werden können.
Damals habe ich das Internet nach funktionierenden Beispielen abgesucht, aber enttäuscht aufgegeben. Alles was ich finden konnte, waren eine Hand voll Beispiele, die zeigen, wie Auswahlboxen erzeugt werden, was nur eine der verschiedenen Möglichkeiten ist. man dialog erklärt zwar ziemlich ausführlich wie die diversen Optionen benutzt werden, aber wenn ich etwas Neues lerne, finde ich es einfacher, mir funktionierende Beispiele anzuschauen.
In diesem Verzeichnis finden Sie Beispiele für jeden Dialogboxtyp.
Es sind Bourne-Shell-Skripte, die einfach zu verstehen sind und sich als Vorlagen für Ihre eigenen interaktiven Skripte eignen. Um die Skripte zu testen, müssen sie zuerst als ausführbar markiert
werden:
# chmod +x [a-z]*
Beachten Sie, dass ich Dateinamensmuster bei dem Befehl chmod
verwendet habe.
Ich wollte die Datei README nicht als ausführbar
(+x) markieren,
aber ich wollte alle anderen Dateien in dem Verzeichnis auswählen.
Die gewünschten Dateien haben alle Namen in Kleinbuchstaben, und das
[a-z] vor dem Jokerzeichen
* sorgt dafür, dass nur Dateien, die mit einem Kleinbuchstaben anfangen, ausgewählt werden.
Weil die Skripte im Verzeichnis /usr/share/examples/dialog sind und dieses Verzeichnis nicht im Standardsuchpfad ist, müssen Sie die Skripte mit dem vollständigen Pfad aufrufen, damit sie ausgeführt werden. Als Alternative können Sie mit cd in obiges Verzeichnis wechseln
und ./ vor jeden Skriptnamen setzen:
# cd /usr/share/examples/dialog
# ./yesno
In Notfällen
Nachdem man die anfängliche Lernphase überstanden hat, in der es
einem so vorkommt, als ob man jeden zweiten Tag das System komplett
neuinstalliert, passiert es eigentlich selten, dass etwas gründlich schief
geht.
Wenn Sie FreeBSD 5.2 oder höher einsetzen, sollten Sie
man rescue lesen und anschließend einen Blick auf die Ausgabe von ls /rescue werfen. Es ist beruhigend zu wissen, dass es für den unwahrscheinlichen Fall, dass /bin oder /sbin nicht mehr zugreifbar sind, noch ein Notfallset mit Werkzeugen gibt. Die Manpage beschreibt auch Schritt für Schritt, wie Sie in so einem Notfall vorgehen müssen. Es ist eine gute Idee, die Manpage auszudrucken und bei der übrigen Papierdokumentation abzulegen.
Haben Sie schon einmal eine Konfigurationsdatei so richtig
verhunzt oder, schlimmer, aus Versehen die Datei gelöscht?
Wenn die Datei in /etc war, ist nicht alles verloren.
Auf dem System sollten Kopien der Originale in
/usr/share/examples/etc/
gesichert sein.
Das ungünstigste Verzeichnis, in dem man sich aufhalten kann, wenn man
mit rm herumexperimentiert ist, /dev/.
Ist Ihnen schon aufgefallen, dass ein ausführliches Dateilisting in
diesem Verzeichnis zwei zusätzliche Felder enthält, die sonst nirgends
im Dateisystem angezeigt werden?
Vergleichen Sie folgende Beispiellistings:
% ls -l /etc/rc.conf
-rw-r--r-- 1 root wheel 763 Dec 6 13:59 /etc/rc.conf
^^^
% ls -l /dev/fd0
crw-r----- 1 root operator 4, 10 Dec 29 08:44 /dev/fd0
^^^^^^
Anstatt der Dateigröße in Bytes wird bei einem ausführlichen
Listing einer Gerätedatei die Major- gefolgt von der Minornummer
angezeigt.
Diese Nummern repräsentieren den Gerätetyp, so dass der Kernel
weiß, welches Gerät angesprochen wird.
Dies bedeutet, dass wenn Sie versehentlich /dev/fd0 löschen,
ein einfaches touch /dev/fd0 den Schaden nicht repariert.
Stattdessen müssen Sie den Befehl mknod verwenden, der
folgende Syntax hat:
# mknod fd0 c 4 10
Das c zeigt an, dass es sich um eine zeichenorientierte
Gerätedatei handelt. Das c erschien in dem ausführlichen
Listing als erstes Zeichen vor den Zugriffsrechten.
Und was bedeutet dies alles?
Wenn Sie aus Versehen eine Gerätedatei gelöscht haben, brauchen Sie
drei Informationen um die Datei wiederherzustellen: Die Information, ob es eine zeichen-
oder blockorientierte Gerätedatei war, und die Major- und Minornummer
des Geräts.
Wenn Sie Zugriff auf ein anderes FreeBSD-System haben, können Sie diese
Informationen durch ein ausführliches Listing der fehlenden Datei
anzeigen.
Wenn Ihnen kein weiteres System zur Verfügung steht, sollten Sie
vielleicht eine Sicherungskopie von /dev anfertigen oder die
Ausgabe von ls -l /dev ausdrucken und abheften.
Lesestoff
Ich war angenehm überrascht von den vielen neuen
FreeBSD-Artikeln,
die im letzten Jahr hinzugekommen sind. Viele dieser Artikel sind unter
/usr/share/doc/en/articles verfügbar.
Hack Nummer 89 aus BSD Hacks
beschreibt, wie Sie Ihre Offline-Dokumentation mit den neu hinzugekommenen Artikeln aktualisieren können.
Dazu muss folgende Zeile in Ihrem CVS-supfile eingetragen sein:
doc-all tag=.
Weil die Quellen in SGML geschrieben sind, brauchen Sie folgenden Port, um sie in HTML umzuwandeln:
# pkg_add -r docproj-nojadetex
Ich verwende ein Shell-Skript um meine Systeme zu aktualisieren.
Der folgende Teil des Skripts erzeugt die HTML-Dokumentation:
echo "Aktualisieren von docs"
cd /usr/doc
cp Makefile.orig Makefile
make install > /dev/null
Einige der Artikel sind ideal für Neulinge. Und selbst wenn Sie kein
Neuling mehr sind, dann lohnt es sich doch, diese Artikel Ihren
Anfängerfreunden zu empfehlen.
Schauen Sie sich einmal
new-users und
freebsd-questions in
/usr/share/doc/en/articles an.
Allen, die nicht so recht wissen, was sie sagen sollen, wenn sie gefragt
werden, was FreeBSD ist, empfehle ich explaining-bsd.
Wenn Sie das Verlangen haben, etwas zu dem Projekt beizutragen, aber
glauben, es nicht zu können, weil Sie nicht programmieren, dann sollten
Sie einmal contributing durchsehen.
Wollten Sie schon immer mal in einer grafischen Darstellung sehen, wie sich die BSDs in den Unix-Stammbaum eingliedern?
Dann schauen Sie more /usr/share/misc/bsd-family-tree an.
Vielleicht reizt es Sie, eine Manpage zu schreiben.
Unter /usr/share/misc finden Sie Vorlagen in
man.template und mdoc.template. Noch besser:
In /usr/share/examples/mdoc befinden sich drei
Beispiel-Manpages mit ausführlichen Kommentaren zur Verwendung der Formatieranweisungen.
Eine GUI für rc.conf
Immer wenn ich die Zeit erübrigen kann, nutze ich die Gelegenheit und
schaue mich in der Ports-Sammlung um, installiere interessant
erscheinende Ports auf meinem Testsystem und probiere sie aus.
Ich hatte schon seit einer Weile vor,
thefish auszuprobieren.
Also installierte ich das Paket:
# pkg_add -r thefish
Als ich aber danach thefish aufrief, startete die
ncurses-Version.
Sie kennen den blauen Bildschirm, den Sie bekommen, wenn Sie
/stand/sysinstall aufrufen, wo die Maus nicht funktioniert und
Sie mit den Pfeil- und Tabtasten navigieren müssen?
Diese Sorte Bildschirmmasken wird mit der ncurses-Bibliothek
erzeugt, um eine quasi-GUI auf der Konsole bereitzustellen.
Das ist praktisch für Systeme, auf denen kein X installiert ist.
Wenn Sie aber unter einer GUI arbeiten und hübsch aussehende Menüs
wollen, dann sollten Sie das für Ihr Windowsystem passende Widget-Set
verwenden.
Wie ich das meine?
Nachdem ich das Binärpaket von thefish, das keine GUI
unterstützt, deinstalliert hatte, habe ich den Port komplett neu
übersetzt:
# cd /usr/ports/sysutils/thefish
# make install clean
Dabei bekam ich folgendes Menü angezeigt:
[ ] CONSOLE Disable X11 support
[x] GTK Use GTK+ for the X11 interface
[ ] QT Use Qt for the X11 interface
GTK+ und QT sind zwei mögliche Widget-Sets.
Ein Widget-Set bestimmt, wie Fensterrahmen aussehen; zum Beispiel
wo die Buttons zum Minimieren und Maximieren plaziert werden und wie
sie aussehen.
Wenn Sie den Gnome-Desktop benutzen, verwenden Sie das GTK+-Widget-Set.
Wenn Sie KDE benutzen, verwenden sie QT.
Mir gefallen die QT-Fenster besser, also habe ich meine Version von
thefish mit QT gebaut.
Wenn Sie die Screenshots auf den Webseiten von thefish genau
ansehen, werden Sie bemerken, dass sich die Buttons in den QT-Menüs von
denen im zweiten (nicht beschrifteten) Screenshot, der von der GTK+-Version
erzeugt wurde, unterscheiden.
Nachdem sie thefish installiert haben, steht Ihnen ein
einfach zu benutzendes Programm zur Verfügung, mit dem Sie die Parameter
in /etc/rc.conf ändern können. Dabei wird zu jedem Parameter
eine kurze Beschreibung angezeigt.
Sie können auch weitere Parameter hinzufügen, wenn Sie Anwendungen
installieren, die eigene Parameter für rc.conf verwenden.
Seine Meinung ändern
Haben Sie schon mal einen Port übersetzt, dabei das Menü mit den
Optionen gesehen und dann Ihre Meinung geändert?
Zum Beispiel wollte ich, nachdem ich die QT-Version von
thefish gebaut hatte, unbedingt auch noch die GTK+-Version
ausprobieren.
Aber als ich den Befehl make aufrief, bekam ich das Menü
mit den Optionen für die GUI-Unterstützung nicht mehr angezeigt.
Stattdessen erschien eine Zeile, die besagte, dass meine letzte
Konfiguration gespeichert sei und wieder verwendet werde.
Und dann ging make munter daran, die QT-Version zu
übersetzen.
Nachdem ich eine Weile gesucht habe, fand ich Folgendes:
# more /var/db/ports/thefish/options
# This file generated by 'make config'.
# No user-servicable parts inside!
# Options for thefish-0.6.3
_OPTIONS_READ=thefish-0.6.3
WITHOUT_CONSOLE=true
WITHOUT_GTK=true
WITH_QT=true
Ich habe diese Datei entfernt, make neu angeworfen und,
voila, schon war das Optionsmenü wieder da und ich konnte GTK
auswählen.
Schauen Sie auf Ihrem eigenen System mit ls /var/db/ports
nach, welche Ihrer Ports Optionseinstellungen abgespeichert haben.
RSS
Ich habe ein Liste mit Websites, die ich jeden Tag besuche, um mich
über Nachrichten, Wetter, Artikel und Blogs auf dem Laufenden zu halten.
Ich weiß, dass es RSS gibt, hatte aber noch keine Zeit gefunden, die
verschiedenen RSS-Clients auszuprobieren.
Eine Suche in der Ports-Sammlung brachte ein gutes Dutzend Clients zu Tage,
die ich alle ausprobiert habe.
Ich wollte eine attraktive grafische Oberfläche, die einfach zu
Konfigurieren ist.
Meiner Meinung nach ist
/usr/ports/www/akregator der klare Sieger.
Einige der anderen RSS-Clients kommen mit einer vordefinierten Liste.
Damit ließen sich zwar die besser bekannten Sites wie Slashdot und
FreeBSDDiary bequem auswählen, aber oft waren auch die URLs veraltet und
ich musste trotzdem auf die Website gehen und nach dem korrekten RSS-URL
suchen.
Von den ganzen Clients war
akregator der,
bei dem es am einfachsten war, einen RSS-Feed hinzuzufügen.
Die meisten der anderen Clients prüfen den URL erst dann, wenn versucht wird,
den Feed herunterzuladen; wenn man sich vertippt hat oder nicht den
vollständigen Pfad für den RSS-Feed angegeben hat, geht das
schief.
Mit akregator gebe ich einfach slashdot.org
ein und das Programm kontaktiert Slashdot, sucht nach dem Feed und speichert
den korrekten URL http://slashdot.org/index.rss ab.
Das hat bei allen Sites, die ich ausprobiert habe, funktioniert.
Sogar ziemlich gut.
Nebenbei bemerkt, benutze ich auch Firefox, der auch
RSS-Feeds als
Live-Bookmarks
unterstützt.
Hinter obigem Link finden Sie Screenshots und eine Erklärung der
Grundlagen von RSS und wie man Live-Bookmarks verwendet.
Es gibt dort auch eine Hyperlink zu
del.icio.us,
eine Site, die Sie nur besuchen sollten, wenn Sie viel Zeit zur Verfügung haben.
Es ist zwar bequem RSS-Feeds in den Webbrowser integriert zu haben, ich
bevorzuge aber die Oberfläche von akregator.
Jetzt wo ich auch zur RSS-Generation gehöre, kann ich mir nicht mehr
vorstellen, wie ich ohne RSS leben konnte.
Ich werde informiert, sobald ein neuer Blog/Artikel eingestellt wurde, das
Wetter sich geändert hat (ja, manchmal vergesse ich, aus dem Fenster zu
schauen!) oder ein Port hinzugefügt oder geändert wurde.
Zum Beispiel habe ich über den
Freshports-Feed
ungefähr acht Minuten, nachdem er eingecheckt wurde,
von /usr/ports/sysutils/pkg_rmleaves
erfahren.
Weil ich in der Vergangenheit
/usr/ports/sysutils/pkg_cutleaves
verwendet hatte, um nicht benötigte Ports zu entfernen,
war ich sofort interessiert.
Da der Port gerade erst eingecheckt worden war, habe ich
cvsup benutzt, um die Quellen für den Port zu aktualisieren,
damit ich ihn installieren konnte.
Nach dem Aufrufen von
pkg_rmleaves
bekam ich eine Abhakliste in einem dialog-Menü präsentiert,
mit dem ich ganz einfach auswählen konnte, welche Ports deinstalliert
werden sollen.
Mit diesem Port hat man ein sehr bequemes Werkzeug,
um verwaiste (und vermutlich nicht länger benötigte) Ports los zu
werden.
Zum Abschluss
Ich hoffe, dass Sie auch ab und zu Gelegenheit haben, in Ihrem FreeBSD-System
herumzustochern. Ich bin mir sicher, Sie werden dabei auf interessante Dinge stoßen.
Dru Lavigne
arbeitet als IT-Trainerin bei
Marketbridge Technologies in Ottawa und
ist für die ISECOM Protokoll Database
verantwortlich. Weitere englischsprachige Artikel von Dru Lavigne finden Sie in ihrer Kolumne FreeBSD Basics
columns. Weitere englischsprachige Artikel zu BSD finden Sie bei O'Reilly Network im BSD DevCenter.
|