Yet Another Useless Unix Book
! zum Inhaltsverzeichnis
< zum vorangehenden Abschnitt:
Software auf einem Unix-System zu installieren gestaltet sich, will
man es intelligent, homogen und auf benutzerfreundliche Weise machen,
doch oft schwieriger als es auf den ersten Blick scheint. Schnell
verliert man den Überblick über installierte Programme und deren
Versionen, erst recht wenn man diese in einem ganzen Netz installieren
muß. Spätestens wenn sich die Kapazität der Festplatte dem Ende
zuneigt und man versucht Nichtbenötigtes zu löschen oder temporär
``auszulagern'', merkt man in welchen Ecken des Filesystems sich ein
Programm überall hininstalliert hat: Konfigurationsdateien,
Manualpages, weiterführende Dokumentation, evtl. benötigte
Bibliotheken und nicht zuletzt das ausführbare Programm (oder
mehrere) liegen über die Festplatte verteilt und lassen sich oft nur
schwer als zusammengehörend erkennen.
Eine Möglichkeit zumindest den gröbsten Wildwuchs zu vermeiden, ist
das gewissenhafte Editieren des zu den Programm-Sourcen mitgelieferten
Makefile um dort auf die Gegebenheiten des verwendeten Systems
einzugehen und so die einzelnen Programmbestandteile an möglichst
zentralen Stellen zu installieren (make install). Dies
verhindert zwar das sich jedes Programm an anderer Stelle im System
installiert, eine Kontrolle was alles und wohin installiert wurde hat
man damit aber noch nicht.
Viele moderne Unix-Systeme (u.a. Solaris, Linux und FreeBSD) gehen
deshalb einen für den Anwender sehr einfachen und komfortablen Weg:
Programme samt allem benötigten Zubehör werden für das System
fertig compiliert in einem ``Packet'', dem sog. Package, geliefert.
dieses muß der Anwender, die nötigen Rechte vorrausgesetzt, nur noch
mit einem Befehl (z.B. pkg_add(1)) installieren. Bei diesem
Vorgang wird das Package ausgepackt, alle benötigten Dateien an
sinnvolle Stellen kopiert und das ganze in einer Datenbank vermerkt.
Anhand dieser Datenbank ist es jederzeit möglich, nachzuvollziehen
was alles für dieses Programm installiert wurde. Dadurch gestaltet
sich auch das Entfernen (z.B. mit pkg_delete(1)) denkbar
einfach, da das System nur noch in der Datenbank nach der Aufzeichung
suchen muß, die dort vermerken Datein löschen und den Eintrag aus
der Datenbank entfernen. Unter FreeBSD befindet sich diese Datenbank
im Verzeichnis /var/db/pkg/. Darunter ist für jedes
installierte Package ein Verzeichnis mit dem Programmnamen als
Verzeichnisnamen zu finden, welches ein File mit den für das Programm
installierten Dateien enthält (+CONTENTS). Zusätzlich finden
soch dort noch zwei Dateien, welche Beschreibungen für diese Software
(eine Einzeilen-Version, eine ausführlichere Variante) enthalten.
Diese werden z.B. von Package-Verwaltungsprogramme wie pkg_info(1) angezeigt. Mit diesem Kommando läßt sich (mit der
Option -aI) auch anzeigen welche Packages sich auf dem System
befinden.
Das unter Linux sehr verbreitete RPM-Format und das
Solaris-Packagesystem arbeiten ähnlich wie oben beschrieben. Allen
gemeinsam ist der Nachteil das das Programm schon fertig compiliert,
und somit evtl. nicht an die eigenen Bedürfnisse angepaßt, geliefert
wird. Programm-Sourcen um eigene Einstellungen, die nur vor dem
Compilieren möglich sind, vorzunehmen, sind nicht in solchen Packages
enthalten. Zudem ist man vom Willen der System-Hersteller oder
Programmautoren, auch solche Pakete für das entsprechende System
anzufertigen und zu verteilen (FTP, CDROMs), abhängig. Auch
Abhängigkeiten zwischen verschiedenen Packeten, wenn also der Betrieb
eines bestimmten Programms das Vorhandensein eines anderen bedingt,
sind meißt nur in Form einer kurzen Warnung zu finden.
Die Vorteile des Package-Systems zu genießen und trotzdem möglichst
unabhängig von vor-compilierten Programmen und dem Goodwill der
Autoren oder freiwilliger Package-Maintainer zu sein, veranlaßte die
FreeBSD-Entwickler das sog. Ports-System zu erstellen. Bei dieser Art
der Software-Verwaltung wird sich ausschließlich auf die
Original-Quellen des jeweiligen Programmautors gestützt und mit Hilfe
der für jeden Port verfügbaren Patches*34* das Programm compiliert und, basierend auf dem
Package-System, verwaltet. Dies setzt natürlich vorraus das sich
jemand für das Erstellen und die Aktualität eines solchen ``Ports''
zuständig fühlt. Erledigt wird dies durch die Port-Maintainer,
welche sich jeweils für ein oder mehrere Ports verantwortlich zeichnen. Die für den Port
benötigten Quellen, sucht das System zuerst im Verzeichnis /usr/ports/distfiles/ und versucht sie per FTP oder HTTP von der
Home-Site oder einem anderen Server zu bekommen, wenn sie sich nicht in
diesem Verzeichnis befinden. Nachdem sie über das Netz geholt
wurden, werden sie dann in /usr/ports/distfiles/ abgelegt.
Im Verzeichnis
/usr/ports/ befinden sich mehrere Unterverzeichnisse, welche
eine grobe Gliederung in Kategorien (System-Utilities, X11-Programme,
Netzwerk-Programme, News- und Mail-Systeme und -Clients, usw.)
darstellen, darunter jeweils ein Verzeichnis pro Port, also
jedes Programmpacket welches von FreeBSD bzw. einem Maintainer als
Port unterstützt wird. Als Beispiel sei hier der Port für die
``pdksh'', der Public-Domain Korn-Shell, näher erklärt. Alle anderen
Ports halten sich aber streng an die beschriebenen Mechanismen.
Das Verzeichnis /usr/ports/shells/pdksh/ sieht in etwa so aus:
drwxrwxr-x 2 root wheel 512 Apr 6 18:18 CVS
-rw-rw-r-- 1 root wheel 374 Nov 18 12:39 Makefile
drwxrwxr-x 3 root wheel 512 Apr 6 18:18 files
drwxrwxr-x 3 root wheel 512 Apr 6 18:18 patches
drwxrwxr-x 3 root wheel 512 Apr 6 18:18 pkg
Im Folgenden seien die wichtichsten Dateien erklärt:
opp@semmel2:/usr/ports/shells/pdksh% cat Makefile
# New ports collection makefile for: pdksh
# Version required: 5.2.12
# Date created: 23 May 1995
# Whom: thomas@ghpc8.ihf.rwth-aachen.de
#
# $Id: Makefile,v 1.16 1996/11/18 11:39:51 asami Exp $
#
DISTNAME= pdksh-5.2.12
CATEGORIES= shells
MASTER_SITES= ftp://ftp.cs.mun.ca/pub/pdksh/
MAINTAINER= tg@freebsd.org
GNU_CONFIGURE= yes
MAN1= ksh.1
.include <bsd.port.mk>
opp@semmel2:/usr/ports/shells/pdksh% cat files/md5
MD5 (pdksh-5.2.12.tar.gz) = b622d7b961dbb6dc9cccd237a68ff151
opp@semmel2:/usr/ports/shells/pdksh% ls -l patches/
total 2
drwxrwxr-x 2 root wheel 512 Apr 6 18:18 CVS
-rw-rw-r-- 1 root wheel 313 Nov 5 1996 patch-aa
opp@semmel2:/usr/ports/shells/pdksh% cat pkg/COMMENT
The Public Domain Korn Shell.
opp@semmel2:/usr/ports/shells/pdksh% cat pkg/DESCR
PDKSH is the Public Domain Korn Shell. Its command language is a
superset of the sh(1) shell language.
opp@semmel2:/usr/ports/shells/pdksh% cat pkg/PLIST
bin/ksh
@exec echo "updating /etc/shells"; cp /etc/shells /etc/shells.bak;
(grep -v %D/%F /etc/shells.bak; echo %D/%F) >/etc/shells
@unexec echo "updating /etc/shells"; cp /etc/shells /etc/shells.bak;
(grep -v %D/%F /etc/shells.bak) >/etc/shells
man/man1/ksh.1.gz
Zum Compilieren des Ports genügt ein einfaches make in diesem
Verzeichnis:
opp@semmel2:/usr/ports/shells/pdksh% make
>> Checksum OK for pdksh-5.2.12.tar.gz.
===> Extracting for pdksh-5.2.12
===> Patching for pdksh-5.2.12
===> Applying FreeBSD patches for pdksh-5.2.12
===> Configuring for pdksh-5.2.12
creating cache ./config.cache
checking for gcc... cc
[....]
creating ./config.status
creating Makefile
creating config.h
===> Building for pdksh-5.2.12
CONFIG_FILES="" CONFIG_HEADERS=config.h ./config.status
creating config.h
config.h is unchanged
date > stamp-h
cc -c -DHAVE_CONFIG_H -I. -I. -O alloc.c
[...]
Dieses ``make'' entpackt im Unterverzeichnis work/ die Sourcen,
bereitet sie anhand der Patches optimal für FreeBSD vor und
compiliert das Programm, so wie es der Autor vorgesehen hat. Es kann
jederzeit in diesen Vorgang eingegriffen werden um z.B. Änderungen
der Konfiguration vorzunehmen.
Ein ``make install'' installiert das Programmm im System und
registriert es im Package-System:
opp@semmel2:/usr/ports/shells/pdksh% sudo make install
>> Checksum OK for pdksh-5.2.12.tar.gz.
===> Installing for pdksh-5.2.12
./mkinstalldirs /usr/local/bin /usr/local/man/man1
install -c -s -o bin -g bin -m 555 ksh /usr/local/bin/`echo ksh|sed 's,x,x,'`
/usr/bin/install -c -o bin -g bin -m 644 ksh.1
/usr/local/man/man1/`echo ksh|sed 's,x,x,'`.1
NOTE: /etc/shells does not contain /usr/local/bin/ksh you should add
it if you want to set your shell to ksh
===> Compressing manual pages for pdksh-5.2.12
===> Registering installation for pdksh-5.2.12
Mit einem ``make clean'' wird das Verzeichnis work/ gelöscht
und somit alles nichtmehr benötigte entfernt.
*34*
Änderungen im
Quellcode von Programmen um sie möglichst optimal an das vorhandene
System anzupassen, bekannte Bugs zu entfernen oder spezielle Features
zu implementieren.
This document was converted from LaTeX using Karl Ewald's latex2html.