O'Reilly News
oreilly.deO'Reilly Network
KontaktBestellinfosOnline-Bücher

Pfeil Suche
Pfeil Bücher A-Z
Pfeil Neuerscheinungen
Pfeil Bücher bestellen
Pfeil Special Offer
 Programmbereiche
Pfeil
 C/C++
 Design & Grafik
 Java
 Linux/Unix
 Mac
 .Net
 Open Source
 Perl
 PHP & MySQL
 Python
 Sicherheit
 System- &
 Netzwerkadministration
 Technology- &
 Society
 Web
 Windows
 XML
Special Offer
 Buchreihen
Pfeil
 In a Nutshell
 Taschenbibliothek
 Personal Trainer
 Missing Manuals
 Basics
 Hacks
 Kochbücher
 Head First
 Developer's
 Notebooks
 Pragmatic
 Bookshelf
Pfeil Schreiben für O'Reilly
Pfeil Katalog bestellen
Pfeil Newsletter
Pfeil Veranstaltungen
Pfeil UserGroups
Pfeil Archiv
Pfeil AGB

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.

Buch zum Thema:

BSD Hacks

BSD Hacks
100 Insider-Tricks & Tools
Von Dru Lavigne

Leseproben
Inhaltsverzeichnis
Index

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.

Sehen diese Seiten zu fade bzw. langweilig aus? Wenn ja, dann liegt das daran, daß unsere Seiten CSS verwenden! Entweder Ihr Browser unterstützt CSS nicht oder Sie haben CSS deaktiviert.
Netscape 4.x-Benutzer: Deaktivierung von JavaScript bewirkt leider, daß auch CSS deaktiviert ist!


O'Reilly Home | O'Reilly-Partnerbuchhandlungen | Bestellinformationen
Kontakt | Über O'Reilly | Datenschutz

© 2005, O'Reilly Verlag
webmaster@oreilly.de