Die NetBSD- Package-Collection ist eine Werkzeugsammlung, die die Kompilierung und Installation der riesigen Mengen an freier Software für Unix- Systeme sehr vereinfacht. Man muss nur ein oder zwei Kommando kennen, um ein nahezu perfekt konfiguriertes und funktionierendes Paket auf der Maschine zu haben.
Der erste Kontakt mit dem Package-System von NetBSD kann für eine gewisse Verwirrung sorgen: Es gibt manchmal mehrere Kommandos, die dasselbe bewirken. Die Frage, die sich dabei stellt, ist eigentlich einfach zu beantworten: Es gibt zwei Wege, ein Programm zu installieren. Du kannst:
Ein neues Paket aus den Quellen auf Deinem System kompilieren. Wenn man die Package-Collection benutzt, die automatisch die Quellen aus dem Internet herunterlädt, kompiliert, installiert und konfiguriert; geschieht das mit ganzen zwei Kommandos. Die Package-Collection beinhaltet ein Set mit Makefiles und Konfigurationsdateien, die die Standard- Unixtools verwenden, die mit dem Basissystem installiert werden. Ein weiteres Feature des Package-Systems ist die automatische Prüfung des Vorhandenseins bestimmter Pakete, die vielleicht für ein neues Paket nötig sind. Diese Pakete können ebenfalls gleich mit heruntergeladen und installiert werden. Die Package-Collection wird nicht automatisch mit dem Basissystem installiert, weil sie ständig überarbeitet und fast wöchentlich in einer neuen Version veröffentlicht wird. In der folgenden Sektion wird erklärt, wie man sie downloadet und auf dem System installiert. Auf der NetBSD- Site gibt es eine sehr genaue technische Beschreibung dieses Verfahrens.
Die Installation einer vorkompilierten und -konfigurierten Version des Programms. Das wird mit den pkgtools gemacht, die ebenfalls mit dem Basissystem installiert werden. Diese Methode ist schneller, aber nicht so flexibel wie die vorherige (Beispiel: Du kannst die Compile- Time- Optionen nicht konfigurieren). Die pkgtools werden auch für das Management der installierten Programm (egal ob aus den Quellen oder vorkompiliert) verwendet, die in einer Datenbank eingetragen werden. Du kannst, um ein Beispiel zu nennen, die installierten Pakete auflisten, ein Paket löschen usw.
Wenn Du nur vorkompilierte Pakete installieren willst, brauchst die Package-Collection nicht dafür.
Die beiden erwähnten Methoden setzen voraus, dass schon irgendwer ein »Paket erschaffen« hat; also ein Paket nach NetBSD portiert dafür konfiguriert hat. Momentan bietet die Package-Collection weit mehr als 1000 Programme. Es ist aber trotzdem möglich, dass das von Dir gesuchte Paket noch nicht dabei ist. In so einem Fall kannst Du das Paket ohne das Managementsystem kompilieren und benutzen; und, wenn es läuft, ein Paket herstellen, das in die Kollektion integriert werden kann. Andere User werden auch davon profitieren; genau so, wie Du es gerade tust und der Übersetzer es auch schon getan hat.
nach oben
Bevor Du ein Paket aus den Quellen installierst, solltest Du die Package-Collection von der NetBSD- Site oder einer ihrer Mirrors Deiner Wahl herunterladen und installieren. Das wird in den folgenden Schritten beschrieben.
Ziehe Dir die neueste Version der Package-System- Quellen, in der alle nötigen Makefiles und konfigurationsdateien enthalten sind. Das gibt es unter der Adresse: ftp://ftp.netbsd.org/pub/NetBSD/NetBSD-current/tar_files/. Die Datei, die gezogen werden muss ist pkgsrc.tar.gz
Wenn Du eine Collection auf dem System installiert hast, muss sie mit diesem Kommando entfernt werden:
# cd /usr
# rm -rf pkgsrc
Installiere die neue Collection, die Du gezogen hast:
# tar -xzvpf pkgsrc.tar.gz -C /usr
Die Ausführung dieses Kommandos kann eine ganze Zeit dauern, weil eine grosse Anzahl kleiner Pakete extrahiert wird. Am Ende steht das fertige Gerüst für die Installation neuer Programme. Du kannst jetzt damit anfangen, sie zu installieren.
Wichtig: Bis jetzt ist möglicherweise klar, dass Du mit den vorigen Kommandos die Konfigurationsdateien für die automatische Installation von Programmen auf Deinem System installiert hast. Du hast noch keine Programme installiert. Im Grunde genommen hast Du jetzt eine Liste mit den verfügbaren Paketen und die Anleitungen, sie zu besorgen, zu kompilieren und zu installieren. Nicht mehr; aber auch nicht weniger.
Wenn Du die Package-Collection installiert hast, kannst Du sie mit Lynx oder Netscape da durchsuchen und Dir die Details und Beschreibungen aller greifbaren Pakete und -Kategorien durchlesen. Beispiel für Lynx:
$ cd /usr/pkgsrc
$ lynx README.html
Die Package-Collection wird oft überarbeitet: Du kannst fast jede Woche eine neue Version davon auf der FTP-Site finden. Um ein Update durchzuführen, musst Du nach dem gleichen Schema vorgehen wie bei der beschriebenen Erstinstallation.
Manchmal, wenn Du ein Update der Package-Collection durchführst, wird es nötig sein, für das »pkgtools«- Utility ebenfalls ein Update einzuspielen. Du wirst schon herausbekommen, ob das nötig wird: Genau dann, wenn Du versuchst, ein Programm aus dem Package-System zu installieren und das Package-System Dir höflich mitteilt, dass Deine pkgtools veraltet sind.
# make
===> Validating dependencies for gqmpeg-0.6.3
Your package tools need to be updated to 2000/02/02 versions.
The installed package tools were last updated on 1999/01/01.
Please make and install the pkgsrc/pkgtools/pkg_install package.
*** Error code 1
Der einfachste Weg zu einem Update ist:
# cd /usr/pkgsrc/pkgtools/pkg_install
# make install
Danach kannst Du die Installation des Paketes, das sich beschwert hat, noch einmal durchführen.
Hinweis: Die geforderte Version kannst Du herausfinden, wenn Du pkgsrc/mk/bsd.pkg.mk nach der geforderten Version untersuchst. Suche eine Zeile, die aussieht wie diese hier:
PKGTOOLS_REQD = 20000202
(Das 20000202-Datum ist nur ein Beispiel) Das bedeutet, dass die benötigte Version der Programme in pkg_install-20000202.tar.gz zu suchen ist, die Du auf der NetBSD-FTP-Site unter packages/distfiles/LOCAL_PORTS. pkg_install findest und wie jedes andere Paket installieren kannst.
Diese Sektion beschreibt die installation eines Beispielsprogramms: die addnerd- Applikation, die das Erstellen von neuen Benutzerkonten auf Deinem System vereinfacht. Als Erstes gehst Du nach /usr/pkgsrc/sysutils/addnerd .
nach oben
Wenn du mit dem Internet verbunden bist, besorgt das Makefile die nötigen Quellen; Du musst dann diese Sektion nicht lesen.
Ansonsten musst Du sehen, wie Du selbst an die Tarbälle kommst. In diesem Fall brauchst Du die Namen der Tarbälle. Schau im Makefile nach der Zeile:
DISTNAME = addnerd-1.6
Der volle Name des Pakets ist addnerd-1.6.tar.gz.
Du kannst dasselbe Ergebnis auf einem einfacheren Weg mit diesen Kommandos erzielen:
# cd /usr/pkgsrc/sysutils/addnerd
# make fetch-list
...womit Du gleichzeitig eine Liste der Sites angezeigt bekommst, von denen Du das Paket downloaden kannst.
nach oben
Zum Kompilieren gib das hier ein:
# cd /usr/pkgsrc/sysutils/addnerd
# make
Das vorige Kommando beschafft das Quellarchiv (Wenn es nicht im distfiles- Verzeichnis vorhanden ist), extrahiert die Quellen; fügt die Patches hinzu, um es auf NetBSD kompilieren zu können und baut dann das Paket.
Dann installierst Du das Ganze:
# make install
Die Installation des neuen Programms wird auf dem System aufgezeichnet: Du kannst das mit pkg_info -a nachprüfen.
Das addnerd- Paket ist gebrauchsfertig. Du kannst wieder etwas Platz schaffen, indem Du die vom Compiler erstellten »Vermittlungsdateien« entfernst:
# make clean
# make clean-depends
Das zweite Kommando muss nur durchgeführt werden, wenn einige abhängige Pakete installiert wurden, was bei addnerd nicht der Fall ist. Das gleiche Ergebnis kann auch mit diesem Kommando erzielt werden:
# make clean CLEANDEPENDS=1
nach oben
Ich habe schon im ersten Teil dieses Kapitels erklärt, dass das Package-System die Programme sowohl aus den Quellen heraus als auch Binärpakete installieren kann, die jemand anderes für NetBSD vorbereitet hat. Die zweite Form der Installation ist schneller, weil das Kompilieren des Pakets nicht nötig ist und die Tarbälle der Binärpakete normalerweise kleiner und damit schneller zu laden sind. Für ein Binärpaket wird die Package-Collection nicht gebraucht: Die »pkgtools«- Utilities reichen.
Die Tarbälle der Binärprogramme besitzen meistens die Endung .tgz, während die Tarbälle mit den Quellen mit .tar.gz enden.
Hinweis: Nicht alle Source-Tarbälle enden mit .tar.gz.Das Package-System kommt auch mit anderen Pakettypen zurecht, beispielsweise .zip, .bz2.
Man muss die Binärpakete auch nicht unbedingt vor der Installation herunterladen. Mit den ftp://-URLs geht das genauso. Beispiel:
ftp://ftp.netbsd.org/pub/NetBSD/packages/1.4.2/i386/All/tcsh-6.09.00.tgz
Wenn du nicht genau weisst, welche Version des Paketes auf der FTP-Site vorhanden ist, kannst Du die Versionsinfo auch weglassen und pkg_add die Auswahl überlassen: Es wird immer die neueste Version auf dem Server benutzen. Beispiel:
# pkg_add ftp://ftp.netbsd.org/pub/NetBSD/packages/1.4.2/i386/All/tcsh
Es ist auch möglich, den PKG_PATH zu setzen. Man erstellt dann eine Liste mit den Pfaden und den URLs, wobei die Listeneinträge mit einem Semikolon getrennt werden müssen und pkg_add die Arbeit ganz zu überlassen:
# PKG_PATH="/cdrom;/usr/pkgsrc/packages/All;ftp://ftp.netbsd.org/pub/NetBSD/packages/1.4.2/i386/All/"
export PKG_PATH
# pkg_add tcsh
Das Kommando installiert das erste tcsh- Binärpaket, das es findet.
Lass uns mal zu Übung das texinfo- Programm in der vorkompilierten Form installieren:
Kopiere gtexinfo-3.12.tgz in ein temporäres Verzeichnis.
Setze folgendes Kommando ab:
# pkg_add -v gtexinfo-3.12.tgz
Prüfe, dass die Installation auch durchgeführt wurde:
# pkg_info
Entferne gtexinfo-3.12.tgz aus dem temporären Verzeichnis.
Vorkompilierte Pakete sind sehr bequem, weil sie mit weniger Aufwand an Zeit und Aufmerksamkeit installiert werden können. Source- Pakete erlauben Dir eine bessere Kontrolle, weil die Compileroptionen an die eigenen Bedürfnisse angepasst werden können. Die Installation dauert wegen der Kompilierung länger, was auf einigen (meistens älteren) Plattformen kritisch werden kann.
Vor der Installation eines Binärpaketes mit pkg_add ist es besser, das Paket mit dem pkg_info- Kommando zu überprüfen. Beispiel:
# pkg_info -f jpeg-6b.tgz
Es hat auch einen gewissen Wert, mit dem CWD- Kommando nachzuprüfen, wo das Paket installiert wurde (Basisverzeichnis). Meistens sind das /usr/pkg und /usr/X11R6. Wenn das Basisverzeichnis nicht das Gewünschte ist, kannst Du das mit der Option -p hinter dem pkg_add- Kommando ändern. Beispiel: das Paket jpeg-6b.tgz ist standardmässig in /usr/pkg installiert; aber Du kannst es auch in /usr/X11R6 installieren, wenn Du das Paket mit diesem Kommando entpackst:
# pkg_add -p /usr/X11R6 -v jpeg-6b.tgz
nach oben
Die wichtigsten Kommandos für das Paketmanagement sind:
# pkg_delete "*emacs*"
# pkg_delete -r jpeg
Diese Sektion (Quickstart Packaging Guide) ist ein Beitrag von Jason R. Fink.
Diese Sektion zeigt eine Methode zum Bauen von relativ kleinen Paketen für das Packaging-System von NetBSD. Für weitere Details über einige verwirrende Dinge in diesem System solltest Du die Datei Packages.txt im pkgsrc- Baum konsultieren.
nach oben
Es gibt da drei primäre Dinge, die gebraucht werden, um mit NetBSD ziemlich schnell ein Paket erzeugt werden kann:
|
url2pkg |
|
Das eigentliche Paket |
|
pkglint |
Url2pkg kann vom pkgsrc- Baum aus installiert werden. Das Tool unterstützt den Package-Builder darin, rudimentäre Aspekte des Paketbaus einzubinden und zu testen.
Das wird das eigentliche Paket bzw. Verzeichnis. In Packages.txt, Sektion 11 'A simple example of a package: bison' wird ein Beispiel gezeigt. Viele Pakete in NetBSD sind weitaus weniger komplex.
nach oben
Pkglint kann aus dem pkgsrc- Baum installiert werden. Dieses Tool überprüft im Wesentlichen die Pakete auf ihre Korrektheit.
nach oben
Der Start des Prozesse ist relativ einfach. Es ist wichtig, dass der Hersteller (z.B. Du) das Bauen der Pakete aus den Quellen schon auf einem NetBSD-System getestet hat. Ansonsten kann das Aufsetzen eines neuen Pakets problematisch werden, wenn der Build fehlschlägt. Meisten kann man aber für die Quellen einen Patch schreiben, mit dem diese Probleme beseitigt werden können. Das ist aber nicht das Thema dieser Anleitung (Details stehen in Packages.txt).
nach oben
Der nächste Schritt ist url2pkg.
Folgendes muss getan werden, um die am Anfang benötigten Dateien für das neue Paket zu erzeugen:
Erstelle das Verzeichnis unter Deinem pkgsrc- Verzeichnis, in dem das neue Paket liegen soll. Lege noch nichts darin ab.
cd in das neue Verzeichnis.
Schreibe:
$ url2pkg
Du wirst an diesem Punkt aufgefordert, einen URL einzugeben. Tue das und drücke <return>
Eine vi- Sitzung nimmt ihren Anfang
Hinweis: Das Programm benutzt den Standardplatz von vi für NetBSD. Wenn Du normalerweise einen anderen Klon verwendest (wie vim) können .exrc- Fehlermeldungen auflaufen.
Die vi- Sitzung ist für das Makefile des neuen Paketes. Du musst den Paketnamen angeben, wer das Paket pflegt und die Kategorie, in die diese Paket gehört.
Speichere die Datei und verlasse vi.
url2pkg greift das Paket automatisch ab und legt es in das Arbeitsverzeichnis.
Dann generiert urlpkg die md5- Dateien.
Das beendet eine urlpkg- Sitzung. Du solltest wissen, dass urlpkg nichts in andere Dateien schreibt, abgesehen vom Makefile. Es generiert eine leere PLIST- Datei.
nach oben
Jetzt ist das Makefile generiert worden. Die übrigen Dateien müssen generiert werden. Wenn Du in Deinem eigentlichen Paket arbeitest, musst Du folgende Dateien aus Deinem Paket in Dein Unterverzeichnis des pkg-Baumes kopieren.
Wenn alle diese Dateien fertig sind, ist es Zeit, das Paket mit dem pkglint- Tool zu kontrollieren. Oft muss im Makefile eine Sektion verschoben, geändert oder sonstwie bearbeitet werden. Für die erste Runde ist es hilfreich, pkglint einfach vorher mal ablaufen zu lassen, damit Du genau weisst, was Du vielleicht ändern musst. Das hier ist der Output, der in Packages.txt nach einer pkglint- Sitzung nachzulesen ist:
$ pkglint
OK: checking pkg/COMMENT.
OK: checking pkg/DESCR.
OK: checking Makefile.
OK: checking files/md5.
OK: checking patches/patch-aa.
looks fine.
Wenn ein Fehler aufläuft, ist die Ausgabe im Normalfall in Klartext; hier ist so eine Beispielsfehlermeldung, die ich bekam, während ich ein Paket baute:
extract suffix not required
Es bestand kein Bedarf, einen extract- Suffix im Makefile zu definieren.
nach oben
Wenn das Paket pkglint durchlaufen hat, mache ich normalerweise einen kompletten Check, der den Beschaffen des Pakets, das Bauen und die Installation beinhaltet. Um das mit Erfolg durchzuführen, muss ich das Arbeitsverzeichnis und die Distfiles in /usr/pkgsrc/distfiles löschen. Nur auf diesem Weg kann ich sicherstellen, dass ich einen vollen und kompletten Testlauf durchführen kann.
nach oben
Als Erstes machst Du ein Archiv aus dem Package-Baum selbst (einschließlich des pkg/Arbeitsverzeichnisses); etwa so:
$ tar -czf packagename.tgz package_dir
Als nächstes legst Du das Paket an einer Stelle ab, auf die die NetBSD-Package-Maintainer zugreifen können. Wenn Du das Archiv nirgends uploaden kannst, kontaktiere NetBSD, um zu sehen, ob es eine andere Methode gibt, Dein Archiv den Package-Maintainern zugänglich zu machen.
Die bevorzugte Methode, die NetBSD-Package-Maintainer zu informieren, ist »send-pr« mit einer Kategorie vom »pkg«, eine Zusammenfassung aus Paketname, Versionsnummer, eine Kurzbeschreibung und dem URL des Tarballs.
Du kannst sowohl send-pr dazu verwenden als auch das Online-Formular unter http://www.netbsd.org/cgi-bin/sendpr.cgi?gndb=netbsd benutzen, wenn Du aus irgendeinem Grund send-pr nicht bekommen kannst, um damit lokal zu arbeiten.
nach oben
Nochmals zu Abschluß: Dieser kurze Anleitung ist für kleine Pakete gedacht, die nur ein paar kleinere Dateien enthalten, die auf einem NetBSD- System installiert werden sollen. In dieser Anleitung wird davon ausgegangen, dass keine Patches gebraucht werden und das Paket ohne Abhängigkeiten von anderen Paketen gebaut werden kann.
Für weitere Informationen lies bitte auch Packages.txt.
nach oben