FreeBSD

Aus UUGRN

FreeBSD ist ein freies Betriebssystem der BSD-Familie. Es bietet umfangreiche Unterstützung moderne Hardware der 'ix86'- und 'amd64' Architekturen und einige weitere, weniger verbreitete Architekturen.

FreeBSD besteht aus einem Basissystem, das nicht nur einen Kernel, sondern auch einige grundlegende Systemdienste und Programme für Systemwartung und einfache Arbeiten bereitstellt, wie etwa Shells, Editoren, Compiler. Für die Installation weitergehender Software sieht der umfangreiche Portsbaum eine komfortable Infrastruktur zur Verfügung.

Um bestehende Systeme upzudaten, die aus einem älteren Zweig stammen, gibt es folgende:

  • FreeBSD 3.x: Neuinstallation.
  • FreeBSD 4.x: Updaten auf 4.11 (wird allerdings nicht mehr supportet).
  • FreeBSD 5.x: Updaten auf 5.4 oder 5.5 (kurz vor der Fertigstellung, wird das letzte 5.x Release sein)

System installieren

von CD

Eine CD kann man käuflich erwerben (und damit das Projekt unterstützen), oder als 2 ISO-Files herunterladen. Eine Übersicht über die verschiedenen Hardwareplattformen und Bezugsquellen steht unter Getting FreeBSD. Hier soll für i386 (Intel 32 Bit) in kurzen Schritten gezeigt werden, was wo und wie:

Vom freebsd.org Server downloaden:

$ wget ftp://ftp.freebsd.org/pub/FreeBSD/releases/i386/ISO-IMAGES/6.0/6.0-RELEASE-i386-disc{1,2}.iso

Mit prozilla Downloadmanager automatisch die schnellsten FTP-Mirrors suchen lassen:

$  proz -s -k 2 ftp://ftp.freebsd.org/pub/FreeBSD/releases/i386/ISO-IMAGES/6.0/6.0-RELEASE-i386-disc1.iso (ca 550MB)
$  proz -s -k 2 ftp://ftp.freebsd.org/pub/FreeBSD/releases/i386/ISO-IMAGES/6.0/6.0-RELEASE-i386-disc2.iso (ca 650MB)

Die ISO-Dateien wie gewohnt auf CD brennen.

per FTP

Für eine FTP Installation benötigt man direkt Internet-Zugriff. Ich habe bisher nicht probiert, ob man aus der Installation heraus direkt DSL machen kann, aber wenn der Rechner in einem LAN steht, das per Router am Internet angeschlossen ist, funktioniert das einwandfrei.

ISO Image herunterladen:

$ wget ftp://ftp.freebsd.org/pub/FreeBSD/releases/i386/ISO-IMAGES/6.0/6.0-RELEASE-i386-bootonly.iso (ca, 44MB)

Das ISO File auf CD brennen und booten.

Software installieren

Binary Packages

Von der Installations CD aus können fertige Pakete entweder via CD/DVD oder FTP installiert werden. Bei der FTP-Installation empfiehlt es sich, einen in deutschland gehosteten FTP Server zu wählen, zB ftp.de.freebsd.org, oder einen der mirrors ftp2.de.freebsd.org, ... ftp6.de.freebsd.org.

Wenn das System schon installiert ist, kann man den Installer auch nochmal direkt aufrufen, unter /usr/sbin/sysinstall (ab 6.x) oder als /stand/sysinstall (4.x und 5.x).

Binary Packages lassen sich auch einzepn mit Hilfe von "pkg_add" installieren:

# pkg_add bash.tbz

oder wenn das Package automatisch per FTP heruntergeladen werden soll:

# pkg_add -r bash

Über portinstall -PP (= nur packages verwenden) geht es auch, sofern bereits installiert:

# portinstall -PP bash

Ports

Die Ports sind ein Framework zum Installieren von Fremdsoftware, die nicht im Basis-System enthalten ist. Anders als bei den meisten Linux-Distriburionen sind BSDs nur Basissysteme, die mehr oder weniger Software beinhalten. Ein Port ist dabei nur ein Verzeichnis unter /usr/ports/xyz/portname/, welches ein paar Zeilen Makefile enthält, ggf. ein paar patches und Informatione zur Installation.

Ports sind so aufgebaut, dass sie bei der Installation automatisch Abhängigkeiten zu anderen Bibliotheken und Programmen prüfen, und diese ggf. mitinstallieren. Dabei kann es zu kniffeligen Versionskonflikten kommen, gerade beim Update. Zusatztools wie portupgrade versuchen diese Abhängigkeiten noch feiner zu berücksichtigen bzw. bieten Tools wie pkgdb an, mit der man Abhängigkeitskonflikte auflösen kann (pkgdb -F).

Beispiel: shells/bash:

/usr/ports/shells/bash# ls -la *
-rw-r--r--  1 root  wheel  3299 Mar  7 07:03 Makefile         Zentrales Makefile
-rw-r--r--  1 root  wheel  2038 Feb 22 06:57 distinfo         MD5 und SHA256 Summen aller Dateien, die zum Port gehören    
-rw-r--r--  1 root  wheel   505 Oct 14  2004 pkg-deinstall    Hilfsscript 
-rw-r--r--  1 root  wheel   381 Jul 31  2004 pkg-descr        Kurzbeschreibung (siehe unten)
-rw-r--r--  1 root  wheel   418 Oct 14  2004 pkg-install      Hilfsscript
-rw-r--r--  1 root  wheel  2254 Jul 31  2004 pkg-plist        Informationen zur Installation für das Makefile
_
files:
total 30
drwxr-xr-x  3 root  wheel   512 Feb 22 06:57 .
drwxr-xr-x  4 root  wheel   512 Mar  7 07:03 ..
-rw-r--r--  1 root  wheel   453 Feb 22 06:57 patch-builtins::Makefile.in
-rw-r--r--  1 root  wheel   910 Feb 22 06:57 patch-config-top.h
-rw-r--r--  1 root  wheel   639 Feb 22 06:57 patch-doc::Makefile.in
-rw-r--r--  1 root  wheel   442 Feb 22 06:57 patch-doc::bash.1
-rw-r--r--  1 root  wheel   907 Feb 22 06:57 patch-doc::bashref.texi
-rw-r--r--  1 root  wheel   705 Feb 22 06:57 patch-lib::readline::display.c
-rw-r--r--  1 root  wheel   313 Feb 22 06:57 patch-support::mkversion.sh
-rw-r--r--  1 root  wheel  5819 Feb 22 06:57 xpatch-colonbreakswords
-rw-r--r--  1 root  wheel  3569 Feb 22 06:57 xpatch-implicitcd

Die sogenannten Distfiles werden nach (standardmäßig) /usr/ports/distfiles/ heruntergeladen. Manche Ports (z.B. KDE) haben so viele Dateien, dass diese in einem eigenen Unetrverzeichnis abgelegt werden (/usr/ports/distfiles/KDE/)

Die FreeBSD ports enthalten derzeit über 14.000 Einträge, zu finden unter /usr/ports.

Die stärksten Kategorien sind (aktuell):

# < INDEX-6 cut -f 2 -d "|" | cut -f 4 -d "/" | sort | uniq -c | sort -rn | head 
1699 devel
1004 www
 837 textproc
 793 games
 788 net
 655 sysutils
 647 graphics
 633 security
 603 audio
 567 mail

Eine aktuelle Übersicht über alle Ports kann man sich so generieren:

# cd /usr/ports
# find */ -name "pkg-descr"  | sort | xargs head -n 100  > pkg-descr_ALL 

Die Ausgabe dieses Befehls dauert eine Weile oder kann hier aufgerufen werden: http://rabe.uugrn.org/FreeBSD/ports/pkg-descr_ALL.txt (ca 5.5MB). In dieser Datei kann man bequem nach Software suchen, z.B.

==> shells/bash/pkg-descr <==
This is GNU Bash, version 3.0.  Bash is the GNU Project's Bourne
Again SHell, a complete implementation of the POSIX.2 shell spec,
but also with interactive command line editing, job control on
architectures that support it, csh-like features such as history
substitution and brace expansion, and a slew of other features. 

WWW: http://cnswww.cns.cwru.edu/~chet/bash/bashtop.html

Für die Installation von Ports ist portupgrade zu empfehlen:

# portinstall shells/bash

Man kann statt der Angabe des Verzeichnisses auch den generischen Namen verwenden:

# portinstall bash


Update

cvsup

Systemsourcen (/usr/src) und Ports (/usr/ports) kann man schnell, effizient und bequem mit cvsup updaten. Man benötigt neben dem Tool selbst ein sogenanntes supfile, welches genauere Angaben darüber enthält, was wo wie upgedatet werden soll.

Ich verwende folgendes:

*default host=cvsup.de.freebsd.org
*default base=/var/db
*default prefix=/usr
*default release=cvs tag=RELENG_6_0
*default delete use-rel-suffix
# *default compress
src-all
ports-all tag=.
# doc-all tag=.

Dieses Supfile updatet die Systemsourcen in /usr/src für den Stand RELENG_6_0, was bedeutet, dass die Sourcen von Release 6.0 mit Sicherheitspatches aktualisiert werden.

Andere Tags sind:

  • RELENG_6_0_0_RELEASE: der exakte Stand vom Release-Datum (6.0-RELEASE)
  • RELENG_6_0: Das Release plus Security-Fixes (z.B. 6.0-RELEASE-p5)
  • RELENG_6: Die aktuelle Entwicklung für 6.x (z.B. 6-STABLE), derzeit 6.1 PREREELASE

Ports KANN man am Release koppeln, man KANN aber auch immer die aktuellsten Ports verwenden, das ist "tag=.".

portupgrade

mit portupgrade und portversion lassen sich bequem aktuellere Ports herausfinden bzw. updaten.

# portversion -vl "<"
3dm-2.04.00.011,1           <  needs updating (port has 2.04.00.014,1) 
ImageMagick-6.2.5.5_1       <  needs updating (port has 6.2.5.5_3) 
ORBit-0.5.17_2              <  needs updating (port has 0.5.17_3) 
ORBit2-2.12.5_1             <  needs updating (port has 2.12.5_2) 
aalib-1.4.r5_1              <  needs updating (port has 1.4.r5_2) 
acroread7-7.0.1             <  needs updating (port has 7.0.1,1) 
apr-gdbm-db4-1.2.2_2        <  needs updating (port has 1.2.2_3) 
[...]
bash-3.0.16_1               <  needs updating (port has 3.1.10_1) 
[...]

Mit portupgrade installiert man dann den oder die ports neu, die man möchte, wobei portupgrade dabei prüft, ob Abhängigkeiten ebenfalls aktualisiert werden sollen. Das ist allerdings ein recht komplexes Thema und wird unter portuprade genauer erläutert. Als Beispiel soll hier das Upgdate der Bash von 3.0 auf 3.1 erläutert werden:

# portupgrade bash-3.0.16_1
--->  Upgrading 'bash-3.0.16_1' to 'bash-3.1.10_1' (shells/bash)
--->  Building '/usr/ports/shells/bash'
bash-3.1.10_1: "/usr/ports/devel/libtool15" non-existent -- dependency list incomplete
===>  Cleaning for gettext-0.14.5_2
===>  Cleaning for libiconv-1.9.2_2
===>  Cleaning for bash-3.1.10_1
===>  Vulnerability check disabled, database not found
===>  Extracting for bash-3.1.10_1
=> MD5 Checksum OK for bash/bash-3.1.tar.gz.
=> SHA256 Checksum OK for bash/bash-3.1.tar.gz.
=> MD5 Checksum OK for bash/bash31-001.
=> SHA256 Checksum OK for bash/bash31-001.
[...]
===>  Patching for bash-3.1.10_1
===>  Applying distribution patches for bash-3.1.10_1
===>  Applying extra patch /usr/local/ports/shells/bash/files/xpatch-implicitcd
===>  Applying extra patch /usr/local/ports/shells/bash/files/xpatch-colonbreakswords
===>  Applying FreeBSD patches for bash-3.1.10_1
===>   bash-3.1.10_1 depends on shared library: intl - found
===>  Configuring for bash-3.1.10_1
checking build system type... i386-portbld-freebsd6.0
checking host system type... i386-portbld-freebsd6.0
checking for emacs... no
checking for xemacs... no 
_
Beginning configuration for bash-3.1-release for i386-portbld-freebsd6.0
_
checking for gcc... cc
checking for C compiler default output... a.out
[...]
--->  Backing up the old version
--->  Uninstalling the old version
--->  Deinstalling 'bash-3.0.16_1'
pkg_delete: package 'bash-3.0.16_1' is required by these other packages
and may not be deinstalled (but I'll delete it anyway):
apsfilter-7.2.6_2
[Updating the pkgdb <format:dbm_hash> in /var/db/pkg ... - 587 packages found (-1 +0) (...) done]
--->  Installing the new version via the port
===>  Installing for bash-3.1.10_1
===>   bash-3.1.10_1 depends on shared library: intl - found
===>   Generating temporary packing list
===>  Checking if shells/bash already installed
[...]
===>   Compressing manual pages for bash-3.1.10_1
===>   Registering installation for bash-3.1.10_1
===>  Cleaning for gettext-0.14.5_2
===>  Cleaning for libiconv-1.9.2_2
===>  Cleaning for bash-3.1.10_1
--->  Cleaning out obsolete shared libraries
[Updating the pkgdb <format:dbm_hash> in /var/db/pkg ... - 588 packages found (-0 +1) . done]

Portupgrade kümmert sich vollautomatisch um den gesamten Vorgang und ist ein intelligener Überbau für die FreeBSD Ports.

Weblinks