Kapitel 8: Die Package- Collection

Inhalt:
8.1. Installation
8.2. Updates
8.3. Ein Programm aus den Quellen installieren
8.4. Installation eines Binärpakets
8.5. Kommandos für das Paketmanagement
8.6. Quick-Start- Anleitung im Packaging
Seitenende und Ausstieg

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:

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

8.1. Installation der Package-Collection

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.

  1. 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

  2. Wenn Du eine Collection auf dem System installiert hast, muss sie mit diesem Kommando entfernt werden:

    # cd /usr
    # rm -rf pkgsrc
              
  3. 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
      

Pass auf, dass Du die distfiles nicht verlierst!

Wenn Du eine existierende Package-Collection löschst, um eine neuere Version zu installieren, vergiss nicht, Dein /usr/pkgsrc/distfiles-Unterverzeichnis zu sichern; ansonsten wirst Du alle Tarbälle, die Du heruntergeladen hast, verlieren. Wenn Du das nicht riskieren willst, kannst Du das System anweisen, ein anderes Verzeichnis für die Distfiles zu benutzen; eines, das kein Unterverzeichnis von /usr/pkgsrc ist. Beispiel für ein neues Verzeichnis:

# mkdir /usr/pkgsrc_distfiles

Ergänze /etc/mk.conf mit dieser Zeile:

DISTDIR=/usr/pkgsrc_distfiles
    

Du kannst natürlich ein Verzeichnis Deiner Wahl verwenden. /usr/pkgsrc_distfiles ist nur ein Beispiel.

Du kannst viele Aspekte des Package-Systems in /etc/mk.confkonfigurieren. Ein detailliertes Beispiel findest Du in

/usr/pkgsrc/mk/mk.conf.example.

nach oben

8.2. Update der Package-Collection

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.

nach oben

8.3. Beispiel: Installation eines Programms aus den Quellen

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

8.3.1. Download der Quellen

Wenn du mit dem Internet verbunden bist, besorgt das Makefile die nötigen Quellen; Du musst dann diese Sektion nicht lesen.

Download von einer anderen Maschine

Ein weit verbreitetes Szenario ist der Download der Paketquellen von einer anderen Maschine mit einer schnellen Internetverbindung (Vielleicht auf der Arbeit) und sie dann auf dem NetBSD- System zu installieren (Vielleicht zu Hause). Hinweis des Übersetzers: Frage vorher Deinen Boss, um Ärger zu vermeiden.

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

8.3.2. Kompilieren und Installieren

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

8.4. Beispiel: Installation eines Binärpakets

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:

  1. Kopiere gtexinfo-3.12.tgz in ein temporäres Verzeichnis.

  2. Setze folgendes Kommando ab:

    # pkg_add -v gtexinfo-3.12.tgz
        
  3. Prüfe, dass die Installation auch durchgeführt wurde:

    # pkg_info
        
  4. 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

8.5. Paketmanagement- Kommandos

Die wichtigsten Kommandos für das Paketmanagement sind:

pkg_add
... fügt vorkompilierte Pakete dazu.
pkg_delete
Löscht installierte Pakete. Paketnamen können mit oder ohne Version angegeben werden. Wenn keine Version vorgegeben wird, findet pkg_delete heraus, welche Version installiert ist. Wildcard können benutzt werden, sofern die Shell das akzeptiert. Beispiel:
# pkg_delete "*emacs*"

        
Die »-r«-Option kann eine Menge: damit werden alle die Pakete entfernt, die das eigentliche Paket benötigt und bei der Installation nachgefragt hat. Beispiel:
# pkg_delete -r jpeg

        
entfernt jpeg und alle Pakete, die es brauchte. Das erlaubt das Updating des jpeg- Pakets.
pkg_info
zeigt die Informationen über Pakete an, installierte und nicht installierte.
pkg_create
erstellt ein neues Paket für die Package-Collection. Dieses Programm wird benutzt, um neue vorkompilierte Pakete zu schnüren. Es wird automatisch vom Build- System aufgerufen; Handarbeit bzw. manueller Aufruf ist nicht nötig.
pkg_admin
führt diverse administrative Funktionen im Package- System aus.
nach oben

8.6. Quickstart Packaging-Guide

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

8.6.1. Tools

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

nach oben

8.6.1.1. url2pkg

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.

8.6.1.2. Das eigentliche Paket

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

8.6.1.3. pkglint

Pkglint kann aus dem pkgsrc- Baum installiert werden. Dieses Tool überprüft im Wesentlichen die Pakete auf ihre Korrektheit.

nach oben

8.6.2. Ein Anfang

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

8.6.2.1. url2pkg

Der nächste Schritt ist url2pkg.

Folgendes muss getan werden, um die am Anfang benötigten Dateien für das neue Paket zu erzeugen:

  1. Erstelle das Verzeichnis unter Deinem pkgsrc- Verzeichnis, in dem das neue Paket liegen soll. Lege noch nichts darin ab.

  2. cd in das neue Verzeichnis.

  3. Schreibe:

    $ url2pkg
                  
  4. Du wirst an diesem Punkt aufgefordert, einen URL einzugeben. Tue das und drücke <return>

  5. 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.

  6. Speichere die Datei und verlasse vi.

  7. url2pkg greift das Paket automatisch ab und legt es in das Arbeitsverzeichnis.

  8. 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

8.6.3. Den Rest dazutun

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.

DESCR
Ein Mehrzeiler mit der Beschreibung der Software. Hier sollten auch die Hinweise zu den Urhebern drinstehen.
COMMENTS
Eine einzeilige Kurzbeschreibung der Software. Hier muss der Paketname nicht drinstehen. Das erledigen die pkg_*- Tools, wenn sie aufgerufen werden.
PLIST
In dieser Datei steht, wo die Dateien auf dem System installiert werden: Ein kleines Paket (z.B.: eine Binärdatei und ein, zwei Manpages) ; ein verstohlener Blick auf das Makefile, installscript etc. sollte mit wenigen Worten illustrieren, wo die Daten abgelegt werden sollen.
nach oben

8.6.4. Prüfen mit pkglint

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

8.6.5. Installationen und gebaute Pakete ablaufen lassen und testen

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

8.6.6. Ein Paket mit send-pr veröffentlichen

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

8.6.7. Schlußbemerkungen

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
Inhaltsverzeichnis