OpenBSD auf älteren ThinkPads

Aus ThinkPad-Wiki

Prolog

Openbsd fish.jpg

Die Herausforderung: Ihr habt ein altes ThinkPad (in meinem Fall ein T60 mit Core-Duo-CPU), das mit möglichst einfachen und kostenlosen Mitteln langfristig flügge gemacht werden soll, da es zu schade zum Wegwerfen ist und Windows bzw. Mac OS die 32-bit-CPU nicht ewig unterstützen wird?

Das Ziel: Aus dem alten T60 einen leichten, schnellen Alltagslaptop machen, der auch die nächsten paar Jahre an Betriebssystemupdates voraussichtlich noch übersteht, ohne dass neue Hardware fällig wird.

Die nahe liegende Lösung wäre eine Linux-Distribution, ungeachtet des Umstands, dass der Linuxkernel immer "fetter" wird. Nun habe ich mit Linux auf Laptops insbesondere hinsichtlich des Ruhezustands und der WLAN-Unterstützung sehr gemischte Erfahrungen gemacht. Warum nicht mal etwas anderes?

Warum BSD?

Ein tritt BSD. BSD - Berkeley Software Distribution - ist eine Klasse von Betriebssystemen, die ursprünglich auf dem Code von AT&T Unix, dessen Entwicklung bis in die späten 1960-er Jahre zurückreicht, basierten, im Laufe der Jahre aber immer umfangreicher überarbeitet wurden, so dass Anfang der 1990-er Jahre - etwa zur Zeit der Veröffentlichung von FREAX, dem Vorgänger von Linux - in 386BSD, der ersten freien BSD-Version für x86-Rechner, die 1993 zur Basis von NetBSD und FreeBSD wurde, kein lizenzbehafteter Code mehr im System enthalten war.

In BSD fanden Innovationen wie der Texteditor vi und die TCP/IP-Protokollfamilie ihren Ursprung, verschiedene Versionen von BSD dienten später als Teilelager und Inspiration für NeXTStep (und damit Mac OS X), iOS und weitere Systeme.

Obwohl Linux nach dem Vorbild von BSD gestaltet wurde, sind die Unterschiede doch bis heute geblieben.

Linus Torvalds sagte einmal: "Hätte 386BSD bereits existiert, als ich mit Linux angefangen habe, wäre Linux wahrscheinlich nie passiert."

Aber welches BSD nun?

An aktuellen freien BSD-Abkömmlingen (FreeBSD, DragonFly BSD, NetBSD, OpenBSD, Forks wie EdgeBSD (NetBSD) und Bitrig (OpenBSD) sowie diverse FreeBSD-Distributionen wie GhostBSD, PC-BSD und MidnightBSD) mangelt es wahrlich nicht. Unsere Auswahl wird im vorliegenden Fall allerdings - zum Glück - von zwei Faktoren eingeschränkt:

  1. Das Ziel ist ein leichtes, schnelles Gerät; die vorkonfigurierten Desktopsysteme haben, so weit ich das bis jetzt sehen konnte, immer irgendwelchen Bloat an Bord, der dieses Ziel unnötig ins Schwanken geraten lässt.
  2. Unser Testsystem beherrscht "nur" 32 Bit. Die FreeBSD-Familie nimmt ebenso wie Bitrig allmählich Abschied von dieser veralteten Plattform; zwar unterstützt zumindest FreeBSD selbst noch - bis auf Weiteres - i386, aber zukunftssicher ist das nicht. Auch lässt der WLAN-Adapter im T60 FreeBSD bei meinem Router - einer Fritz!Box - gelegentlich ins Straucheln geraten.

Damit bleiben als zumindest theoretische Optionen übrig:

  • EdgeBSD: Junger NetBSD-Fork mit dem ambitionierten Ziel, die Codebasis rundzuerneuern. Leider passiert momentan nicht viel, es bleibt abzuwarten, ob das Projekt langfristig überleben kann.
  • NetBSD: Das älteste der drei "großen" BSDs, läuft beinahe überall und inzwischen auch auf Toastern.
  • OpenBSD: 1995 entstandener NetBSD-Fork mit Fokus auf Sicherheit und Korrektheit des Codes, OpenSSH und weitere bekannte Werkzeuge entstanden im Rahmen dieses Projekts; aktuell ist OpenBSD mit dem hauseigenen OpenSSL-Fork LibreSSL in den Medien. Unter ThinkPad-Nutzern bekannt für seine herausragende APM-/ACPI-Unterstützung.

Ich habe NetBSD nicht selbst getestet, die Unterschiede zu OpenBSD sind wohl durchaus spürbar. Ein wesentlicher Unterschied gerade für ältere Systeme: Während NetBSD auf pkgsrc, eine Art "Ports-System", und damit auf Selbstkompilieren setzt, bevorzugt OpenBSD Binärpakete. Das kommt uns sehr entgegen.

Nehmen wir also OpenBSD.

Die verschiedenen OpenBSD-Versionen

Von OpenBSD gibt es - wie unter *BSD üblich - mehrere "Zweige":

  • -STABLE: Die "stabile" Version, alle sechs Monate erscheint der jeweilige Nachfolger, Unterstützung für jeweils ein Jahr; geeignet für Server, Firewalls und alles, wo ihr sonst Debian Stable nutzen würdet. Nachteil: Auch die Pakete erhalten nach Veröffentlichung nur noch Sicherheitsfixes, Firefox und dergleichen wird also recht schnell veralten.
  • -CURRENT: Quasi das "Rolling Release" der Nachfolgeversion; dank ausgiebiger Qualitätskontrollen ebenfalls stabil, trotz seiner Natur nur sehr selten tiefgreifende Änderungen, die viel Nacharbeit erforderten. (Mehr dazu siehe weiter unten.)

Weil wir hier einen Laptop für den täglichen Einsatz und keine Firewall, die wir danach in einen Schrank sperren und den Schlüssel wegwerfen, einrichten wollen, nehmen wir die -CURRENT-Version.

Herunterladen

OpenBSD ist ein schlankes System, das Herunterladen ist also schnell erledigt: Ein vollständiges ISO der Installations-CD ist nur wenig mehr als 200 MiB groß.

Das Image namens installXX.iso - wobei "XX" die aktuelle Versionsnummer, für 5.8-CURRENT also "58", angibt - ist auf diversen FTP-Servern zu finden, etwa auf dem hier. (Hinweis: Es handelt sich um den Ordner für 32-Bit-Images; Nutzer von 64-Bit-ThinkPads werden zum Beispiel hier fündig.) Möchtet ihr lieber einen USB-Stick nutzen, so ist das Image installXX.fs das richtige.

Während ihr das ISO herunterladet, erspare ich euch eine weitere unangenehme Überraschung: Zwar hat OpenBSD in aktuellen Versionen eine ziemlich hervorragende Hardwareunterstützung (sogar der freie radeon-Treiber wird inzwischen automatisch installiert), aber ausgerechnet die wpi-Firmware für den WLAN-Adapter steht unter einer nicht ausreichend freien Lizenz. OpenBSD ist da ähnlich konservativ wie Debian und Fedora, wenn man nicht nachhilft. ;-) Ihr solltet euch also rechtzeitig auch diese Firmware besorgen, sie ist hier zu finden.

Die Installation

Ich betrachte das Wort "idiotensicher" immer mit etwas Argwohn, aber es ist hier sehr, sehr nahe liegend: CD rein, ein paar Fragen beantworten, fertig. Unter diesen Fragen befindet sich auch die Frage, ob ihr "X" - also den Desktop - beim Systemstart laden wollt. Bestätigt das! Zwei Anmerkungen im Speziellen:

  1. WLAN geht an dieser Stelle wahrscheinlich noch nicht, während der Installation braucht ihr aber auch noch kein Internet. Das könnt ihr also überspringen.
  2. Bei der Paketauswahl überfordert? Wählt einfach alles aus. bsd.mp ist der "spezielle" Multiprozessor-Kernel, läuft auf dem T60 aber anstandslos.

Nach einem Neustart könnt ihr euch als root anmelden und den WLAN-Treiber installieren. Im Folgenden gehe ich davon aus, dass ihr ihn auf eine - die eingelegte ;-) - CD gebrannt habt, für USB-Sticks müsst ihr aber nicht viel ändern:

mkdir -p /mnt/cdrom
mount /dev/cd0a /mnt/cdrom
cd /mnt/cdrom ; cp wpi-*.tgz /root/ ; umount /mnt/cdrom
cd /root
pkg_add wpi-firmware-3.2p1.tgz ; rm wpi-*.tgz
ifconfig wpi0 up

Wenn ihr an dieser Stelle übrigens schon an ein LAN kommt, also den Laptop per Kabel an den Router angeschlossen habt, und so mit dem Internet verbunden seid, könnt ihr die wpi-Firmware übrigens auch mit dem Systemprogramm fw_update installieren.

Der WLAN-Adapter sollte nun ohne Fehlermeldung "hochfahren". (Eine automatische Verbindung beim Hochfahren ist natürlich machbar, mehr dazu unten.)

Da ihr gerade sowieso auf der Shell arbeitet, solltet ihr eurem hoffentlich bei der Installation - wie empfohlen - angelegten Nicht-"root"-Benutzerkonto zumindest Zugriff auf su und/oder sudo gewähren:

usermod -G wheel euerBenutzer

Das schiebt den Benutzer in die Gruppe "wheel" (das hat historische Gründe), er "darf" anschließend per su kurzzeitig root-Rechte akquirieren.

vi /etc/sudoers

In der Datei /etc/sudoers solltet ihr eine der beiden Zeilen, die mit "%wheel" beginnen, entkommentieren. Lest die Kommentare über den Zeilen, wenn ihr nicht wisst, welche Zeile ihr "braucht".

So weit der umständliche Teil. Ihr könnt euch jetzt als Benutzer anmelden.

Pakete installieren

Ich gebe ja zu, der fvwm-Standarddesktop von OpenBSD ist etwas für Puristen:

OpenBSD_fvwm.png

Aber natürlich wollt ihr auch auf einem "alten" Laptop was für's Auge. Zum "minimalistischen" Konzept unseres Vorhabens passt ein eleganter, aber leichtgewichtiger Fenstermanager wie Openbox oder ein Desktop wie LXDE. Ich bevorzuge awesome wm, die Vorgehensweise ist aber überall recht ähnlich; ich mach' euch das mal an einem Beispiel klar.

Zuerst brauchen wir natürlich eine Paketverwaltung, um Zeug (etwa einen anderen Texteditor oder zum Beispiel den Fenstermanager unserer Wahl) zu installieren. OpenBSD kennt anders als viele Linux- und FreeBSD-Distributionen kein "Standard-Repository", es lässt dem Benutzer hier die größtmögliche Flexibilität. (Grundsätzlich gilt: Ein OpenBSD-"Repository" liegt immer auch da, wo es OpenBSD-ISOs gibt.)

Da ich annehme, dass fast jeder von euch irgendwo in Europa heimisch ist, ist ein europäischer Spiegelserver eine gute Idee. Eine Liste an möglichen Spiegelservern gibt's hier.

Habt ihr euch für einen Server entschieden, so solltet ihr ihn in der Datei ~/.profile eintragen:

export PKG_PATH=ftp://ftp.eu.openbsd.org/pub/OpenBSD/snapshots/packages/i386/

Die vollständige Ordnerangabe ist hier relevant: "snapshots/" bedeutet, dass es sich um den -CURRENT-Zweig handelt, "i386/" gibt die Plattform an. Wenn ihr stattdessen OpenBSD -STABLE mit einem x64-Prozessor nutzt, so lautet der Eintrag zum Beispiel:

export PKG_PATH=ftp://ftp.eu.openbsd.org/pub/OpenBSD/5.7/packages/amd64/

Ich empfehle, auf Experimente zu verzichten. Es gilt grundsätzlich: OpenBSD-STABLE-Pakete werden nicht problemlos unter OpenBSD -CURRENT funktionieren, andersherum sieht es ähnlich aus.

Ihr könnt euch nun ab- und wieder anmelden oder einfach die "export"-Zeile in den offenen xterm kopieren - die Paketverwaltung ist nun, funktionierendes WLAN vorausgesetzt, freigeschaltet.

Ach, richtig, das WLAN!

Automatisch ins WLAN

Wer von Ubuntu oder ähnlichen Linuxdistributionen kommt, ist möglicherweise etwas enttäuscht: Den "networkmanager" gibt's unter OpenBSD nicht. In euer heimisches (und ein beliebiges anderes euch zur Verfügung stehendes) WLAN kommt ihr per Befehl. Das könntet ihr manuell machen (den dort beschriebenen Befehl solltet ihr trotzdem kennen, er könnte nützlich sein, wenn ihr zum Beispiel mal mit eurem Laptop in fremden Netzen unterwegs seid), aber automatisch ist's doch viel schöner.

OpenBSD liest bei der Initialisierung eurer WLAN-Adapter - üblicherweise beim Hochfahren - eure hostname-Dateien aus. Das ist ziemlich praktisch. Heißt euer Adapter etwa "wpi0" (das könnt ihr per ifconfig prüfen), so genügt es, unter /etc/ eine Datei namens hostname.wpi0 folgenden Inhalts anzulegen:

nwid euerNetzwerkName
wpakey euerNetzwerkSchluessel
dhcp

Jetzt neu starten und freuen. :-)

(Ihr könnt übrigens auch das "wireless"-Script verwenden, wenn ihr mehrere kabellose Netze verwalten und verwenden wollt.)

Einen anderen Desktop installieren und einrichten

Die Paketverwaltung sollte nun funktionieren. Da OpenBSD bereits alles Nötige - Displaymanager, X-Server und dergleichen - mitbringt, hält sich der Installationsaufwand für zum Beispiel awesome wm auch deutlich in Grenzen:

pkg_add awesome

Und wenn ihr den Desktop direkt nach dem Anmelden sehen und nicht jedes Mal erst im fvwm rumfrickeln wollt, tragt ihn doch direkt in eurer ~/.xsession ein - die Zeile lautet schlicht:

awesome

(Für Openbox lautet der Eintrag stattdessen openbox-session, die Aufrufe von KDE, LXDE und so weiter solltet ihr selbst nachschlagen, das würde hier den Rahmen sprengen.)

Der fertige Desktop sieht dann ungefähr so aus:

OpenBSD-5.5-mit-awesome.png

(Wie ein vollwertiger KDE-Desktop mit Firefox, Emacs und dergleichen aussieht, entnehmt bitte der Bildersuche eurer Wahl - eine mit der hier gezeigten vergleichbare Systemlast könnte dann aber schwierig zu erzielen sein.)

Das System aktuell halten

Ihr habt OpenBSD jetzt nach euren Wünschen konfiguriert? Schön, aber das war es natürlich noch nicht. Es wird Updates geben, für -CURRENT sogar recht häufig.

Installierte Pakete auf dem neuesten Stand zu halten ist kein großes Problem und lässt sich theoretisch auch einfach mit 'nem Cronjob erledigen:

pkg_add -u

Interessanter wird's, wenn ihr einen "Snapshot" auf eine neuere Version aktualisieren wollt, etwa 5.6-CURRENT auf 5.7-CURRENT oder die Version von letzter Woche auf die Version von dieser Woche.

Die "nicht stabile" Version von OpenBSD ist, wie erwähnt, gelegentlichen Änderungen unterworfen. Unlängst wurde etwa Apache 1.3 (Teil des Systems selbst) durch nginx ersetzt, diese und weitere Änderungen bedürfen natürlich händischer Nacharbeit. OpenBSD-CURRENT-Nutzer sollten zumindest vor jedem Update auf einen neuen "Snapshot" einmal nachsehen, was sich geändert hat, und die empfohlenen Aktionen durchführen. Das hält das System sauber. (Fortgeschrittene Nutzer könnten das mit curl/wget und ein bisschen Scripting wahrscheinlich einfach automatisieren. Ich mache das manuell, damit ich weiß, was sich eigentlich geändert hat, und mich nicht irgendwann wundere.)

Aktuelle "Snapshots" gibt es recht oft, ich aktualisiere mein System etwa ein- bis zweimal im Monat. Natürlich reicht's aber auch, wenn ihr nur alle paar Monate mal ein Update einspielt.

Das ist etwas komplizierter als die erstmalige Installation, geht aber wohl am Einfachsten so:

Ihr erstellt als root ein Verzeichnis auf eurem Laptop, in dem ihr das Update "aufbewahren" wollt, und baut dann zuerst eine (anonyme) Verbindung zu einem Spiegelserver eurer Wahl auf.

mkdir ~/upgradefiles ; cd ~/upgradefiles
ftp ftp.eu.openbsd.org

Dort wechselt ihr in das "snapshots"-Verzeichnis für eure Plattform, ladet die Hashdateien (zum Abgleich) und alle aktuellen Distributionsdateien herunter:

cd pub/OpenBSD/snapshots/i386
prompt
mget SHA*
mget bsd*
mget *.tgz

Das kann ein bisschen dauern. Habt ihr allerdings nicht alles installiert und etwa auf die "games" verzichtet, könnt ihr die entsprechenden .tgz-Dateien auch einfach weglassen.

Sind alle Downloads intakt? Das könnt ihr prüfen:

cksum -a sha256 *

Zunächst könnt ihr nun den Kernel austauschen. Der besteht bei OpenBSD aus einer einzigen Datei (bsd oder bsd.mp):

rm /obsd
ln /bsd /obsd && cp bsd.mp /bsd
cp bsd.rd /

Installiert nun alles außer den "etc"-Dateien in euer laufendes System (Versionsnummern gegebenenfalls anpassen):

tar -C / -xzphf xserv57.tgz
tar -C / -xzphf xfont57.tgz
tar -C / -xzphf xshare57.tgz
tar -C / -xzphf xbase57.tgz
tar -C / -xzphf game57.tgz
tar -C / -xzphf comp57.tgz
tar -C / -xzphf man57.tgz
tar -C / -xzphf base57.tgz

Euer OpenBSD läuft nun mit einem neuen Userland unter einem alten Kernel. Um auch /etc zu aktualisieren, muss erst mal der neue Kernel her; danach könnt ihr sysmerge ausführen. (sysmerge dient dem Zweck, eure Änderungen an Konfigurationsdateien in /etc in das neue System zu integrieren.)

reboot
# ...
cd ~/upgradefiles
sysmerge

Das war's!

Weiterführende Links