FreeBSD/QuickStart

Aus UUGRN
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.

Dieser Artikel beschreibt eine mögliche Standardmethode zur Installation eines FreeBSD-Systems.

Vorbereitung

Ziel der Vorbereitung ist, ein passendes Installationsmedium für FreeBSD zu bekommen.

Da dieser Artikel einen Weg beschreibt, wie man von einer Minimal-Installation von CD ausgehend sich ein System an den Start bringt, mit dem man dann alles selbst einrichten kann, reicht das erste Installationsmedium, insbesondere ein DVD Image wird nicht benötigt!

Für i386 (Intel 32 Bit) reicht 7.1-RELEASE-i386-disc1.iso vollkommen aus, weitere gibt es unter FreeBSD/FTP.

Das passende ISO-Image auf CD brennen und prüfen, dass das Zielsystem bootfähig ist.

Grundsystem installieren

Ziel der Installation des Grundsystems ist es, ein minimalistisches FreeBSD zu haben, welches eine Anbindung zum Internet hat. Hier wird keine Software installiert.

  • Vom Installationsmedium booten
  • Im Installationsmenü die Distributionsauswahl "[x] Minimal" verwenden.
  • Keine Systemsourcen und keine Ports installieren, da diese im Zweifel ohnehin veraltet sind.
  • Alle anderen Einstellungen wie gewohnt vornehmen.
  • Nach der Installation und vor dem Reboot noch alle erforderlichen Grundeinstellungen durchführen (Console, Zeitzone, Netzwerk, ...)
  • Reboot ins neue System.

Post-Install

Ziel der Nachinstallation ist es, die Grundlagen für sie Softwareinstallation zu bekommen. Hierfür werden zum einen die System-Sourcen als auch die FreeBSD/Ports so eingerichtet, dass sie einfach aktualisiert werden können. Außerdem soll hier die gesamte Hilfssoftware installiert werden, die einem das spätere Softwaremanagement erleichtert.


Ein paar nützliche Packages installieren

# pkg_add -r -v portupgrade
# pkg_add -r -v bash
# pkg_add -r -v vim-lite

Rootshell ändern

Dieser Schritt ist Geschmacksache und kann ausgelassen werden. Wichtig ist allerdings, dass die Standard-Rootshell /bin/csh kein Environment /usr/local/sbin/ kennt, hier liegen allerdings die Tools aus dem portuprgade-Paket.

# vipw
(Ändern von /bin/csh nach /usr/local/bin/bash)
(Neu einloggen)

Sourcen und Ports

Die hier bevorzugte Methode für das Update von /usr/src und /usr/ports ist csup (ehem. cvsup). Dieser Artikel geht davon aus, dass eine breitbandige Anbindung (mind 2MBit) zum Internet möglich ist.

  • supfiles kopieren
# mkdir /root/update/
# cp /usr/share/examples/cvsup/ports-supfile /root/update/ports-supfile
# cp /usr/share/examples/cvsup/stable-supfile /root/update/src-supfile
# chmod +w /root/update/*
  • Anpassen: In beiden Dateien die Zeile
*default host=CHANGE_THIS.FreeBSD.org

ersetzen durch einen cvsup-mirror

*default host=cvsup.de.freebsd.org
  • /usr/src updaten
# csup -L 2 /root/update/src-supfile
  • /usr/ports updaten
# csup -L 2 /root/update/ports-supfile

Das Update kann regelmäßig, z.B. täglich erfolgen.

Initialisieren von portupgrade

Aktuelle /usr/ports/INDEX* vom Master-Server herunterladen und anlegen:

# portsdb -Fu 

Alternativ kann man sich den INDEX auch selbst generieren, das kann aber je nach Rechner sehr lange dauern.

 # portsdb -u

Package-DB anhand von /var/db/pkg/ initialisieren:

# pkgdb -fu

Basissystem neu bauen

Je nachdem, welches Release in /root/update/src-supfile angegeben wird, existieren auf dem System die aktuellen Sourcen unter /usr/src/

# The following line is for 7-stable.  If you want 6-stable, 5-stable,
# 4-stable, 3-stable, or 2.2-stable, change to "RELENG_6", "RELENG_5",
# "RELENG_4", "RELENG_3", or "RELENG_2_2" respectively.
*default release=cvs tag=RELENG_7
  • RELENG_7 entspricht zum Beispiel 7-STABLE oder 7.1-STABLE oder 7.2-PRERELEASE
  • RELENG_7_1 entspricht 7.1-RELEASE

Exkurs: Kernel Config

Normalerweise braucht man nichts anderes als den GENERIC-Kernel. Die allermeisten Dinge lassen sich als Modul laden und zwar anders als bei Linux nicht per initrd oder sysimage (?), sondern direkt vom Bootloader. Das Beispiel soll exemplarisch eine minimale Anpassung des GENERIC-Kernels zeigen

# cd /usr/src/sys/i386/conf/
# vi FOO

... mit folgendem Inhalt:

# Meine Foo-Config
include GENERIC
ident   FOO
nodevice plip

Dieses Setup unterdrückt den Build des "printer port Internet Protocol driver" (grob gesagt: Ethernet-Layer für die Parallele Schnittstelle). Das braucht heute eigentlich niemand mehr und man bekommt es anders nicht aus dem System heraus.


buildworld, buildkernel

Jetzt alles erstmal nur bauen. Das ist selbst auf schnellen Rechnern relativ zeitintensiv!

# cd /usr/src
# time make -j8 buildworld buildkernel KERNCONF=FOO 

Der Zahlenwert hinter "-j" gibt die maximale Anzahl der Parallelen Buildprozesse an, soweit sie sich parallelisieren lassen. Ein gutes Ergebnis bekommt man bei "2*Anzahl Prozessorkerne", -j8 also für einen Quadcore oder 2x DualCore System.

Erfahrungswerte für die Dauer
  • ein derzeit aktueller "Intel Core[tm]2 Quad" mit 4x2.82GHz und insgesamt 12MB L2-Cache, 4GB DDR2, schafft mit halbwegs schnellen SATA-Platten das "buildworld buildkernel" in knapp über 20min.
  • ein etwas in die Tage gekommener Laptop mit 1.8GHz AMD CPU, 1GB RAM und einer 7200er Platte benötigt für den gleichen Build mit -j2 210min oder 3,5 Stunden

installkernel

Als erstes will der Kernel installiert werden:

# time make installkernel KERNCONF=FOO

Anschließend reboot

# reboot

installworld

Nach dem reboot

# cd /usr/src
# mergemaster -p (ergänzt etwaig erforderliche Systemuser, bei 7.1 -> 7.2-PRERELESE allerdings nicht erforderlich)
# time make installworld (kann ein paar Minuten dauern)
# mergemaster -U (das -U geht allerdings nicht nach einer Neuinstallation)
(alle Änderungen übernehmen, aufpassen bei /etc/passwd /etc/group /etc/master.passwd!)
# reboot

Fremdsoftware (Ports) installieren

An diesem Punkt angekommen entscheidet sich, was das System einmal werden soll. Denkbar wären verschiedene Grundkonfigurationen wie etwa "Webserver", "Desktop System mit KDE"

Zur Installation der Ports wird - anders als im offiziellen FreeBSD Handbuch dokumentiert - ausschließlich das Tool portupgrade bzw portinstall verwendet. Die Tools dieses Paket operieren nicht direkt auf den Ports, sondern primär auf vorkompilierten DB-Files, was komplexere Abhängigkeitsanalysen und Untersuchung von Alternativen ermöglicht. ALs Hilfstools dienen portsdb und pkgdb, welche die DB-Files nach Änderungen am System aktualisieren. Erforderliche Aufrufe werden in der Regel durch portupgrade oder portinstall selbst getriggert.

Die Ports werden zwar zu bestimmten RELEASES eingefroren und dann als insich konsistenter Snapshot mit einem RELEASE ausgeliefert (das ist das, was sysinstall bei der Installation mitinstallieren will), zwischen dem Port-Freeze und dem RELEASE-Termin liegen aber zuweilen einige Wochen, manchmal gar Monate.

Wer mit aktueller Software arbeiten will, sollte daher mit täglich aktuellen Ports arbeiten (Update per csup, siehe oben).

Nachteil von aktuellen Ports ist, dass sie niemals einen "in sich konsistenten" Zustand haben. Tools wie Portupgrade können damit in der Regel aber sehr gut umgehen. Es soll allerdings nicht verschwiegen werden, dass auch portupgrade mit seinen Standardmechanismen in manchen (komplexen) Situationen manchmal nicht mehr weiterkommt oder gar falsche Annahmen/Entscheidungen trifft.

Grundsätzlich empfiehlt sich vor Updates die Datei /usr/ports/UPDATING zu lesen. Hier wwerden Updates eschrieben, die einen manuellen Eingriff erfordern, häufig direkt mit konkreten Aufrufen von "portmaster" (Alternative zu portupgrade) oder eben "portupgrade" selbst, zum Beispiel:

20090328:
  AFFECTS: users of lang/perl*
  AUTHOR: skv@FreeBSD.org

  lang/perl5.10 is out. If you want to switch to it from, for example
  lang/perl5.8, that is:

  Portupgrade users:
    0) Fix pkgdb.db (for safety):
        pkgdb -Ff

    1) Reinstall perl with new 5.10:
        portupgrade -o lang/perl5.10 -f perl-5.8.\*

    2) Reinstall everything that depends on Perl:
        portupgrade -fr perl

  Portmaster users:
        portmaster -o lang/perl5.10 lang/perl5.8
        portmaster -r perl\*

Diese Hinweise sollten unbedingt befolgt werden!

Portupgrade und pkg-Tools

In der Manpage zu portupgrade gibt es eine umfangreiche Liste von anderen Manpages, die man kennen sollte:

SEE ALSO
    pkg_add(1), pkg_deinstall(1), pkg_delete(1), pkg_glob(1), pkg_info(1),
    pkg_sort(1), pkgdb(1), portcvsweb(1), ports_glob(1), portsclean(1),
    portsdb(1), portversion(1), pkgtools.conf(5), ports(7) und eben portupgrade(1)