Puffy

OpenBSD für Linuxumsteiger

Auf dieser Seite versuche ich dem Linuxuser der sich für OpenBSD interessiert zu helfen. Vermutlich sind sogar die meisten OpenBSD-User ehemalige Linuxuser. Ich will hier allerdings nicht die Installationsanleitung von der OpenBSD-Website nur kopieren, die gibt es dort in leicht verständlicher Form auch auf deutsch. Nach der Installation gibt es allerdings für den typischen Linuxuser eventuell einige Hürden im Umgang mit dem System und Tips die das Leben leichter machen die ich hier beleuchten will. Einige Tips gibt auch die OpenBSD-FAQ in Kapitel 9.

Einen Satz aus der OpenBSD-FAQ Kapitel 9 möchte ich hier direkt zitieren, da ich ihn für sehr wichtig halte: "Neue Benutzer von OpenBSD müssen ihre eigene Erfahrung einschätzen: wenn deine Erfahrung mit Unix aus dem Experimentieren mit einigen Varianten von Linux besteht, wirst du OpenBSD als "merkwürdig" empfinden. Im Übrigen wirkt Linux recht merkwürdig auf jene, die mit OpenBSD angefangen haben. Du musst den Unterschied zwischen "Standard" und deiner Erfahrung erkennen."

Oder anders gesagt: Linuxuser die bereits Erfahrungen mit verschiedenen Linuxdistributionen gesammelt haben und deren Unterschiede und Gemeinsamkeiten kennen, neigen dazu zu glauben, sie kennen Unix. OpenBSD ist zwar ein Unix, aber kein Linux. Generell ist der Unterschied zwischen Linux und OpenBSD größer als zwischen irgendwelchen Linuxdistributionen, aber kleiner als etwa zwischen Linux und Windows. OpenBSD teilt mit Linux, die Unixphilosophie und viele Programme die es für beide Plattformen gibt.

Shell

Eine der ersten Dinge mit denen man nach der Installation in Berührung kommt ist die Shell. Die Standardshell bei OpenBSD, die im Basissystem enthalten ist, ist die ksh, genauer gesagt die pdksh-Variante der Korn-Shell. Diese Shell ist der Bash relativ ähnlich. Weitere Shells wie die Bash, die tcsh und die zsh sind als Port oder Package verfügbar, die Bash ist auch als Package auf den offiziellen OpenBSD-CDs mit enthalten. Ich empfehle aber als Neuling, bevor man die Bash installiert und sie sich sofort zur Loginshell macht, sich die ksh erst mal ein wenig anzusehen. Viele Leute werden mit der ksh ebenso gut zurecht kommen, wie mit der Bash. History und Pfadvervollständigung funktionieren in der ksh genauso wie ein Linuxuser dies auch von der Bash kennt. Wer trotzdem lieber die Bash verwenden will, da er zusätzliche Funktionen der Bash haben möchte, kann sich natürlich jederzeit die Bash installieren und per chsh -s /usr/local/bin/bash zur Loginshell machen.

Kann ich die Bash auch zur root-Login-Shell machen? Ja! Normalerweise wird auf vielen Unixartigen Systemen davon abgeraten eine Shell die nicht im Root-Dateisystem enthalten ist zur Login-Shell von root zu machen, da diese ja nicht zur Verfügung steht, wenn man z. B. zu Reparaturarbeiten im Single-User Modus starten muß. Jedoch ist es bei OpenBSD so, das das System beim booten in den Single-User Modus explizit fragt, welche Shell benutzt werden soll und als Defaultwert /bin/sh verwendet.

Wer allerdings bei seinem Umstieg zu OpenBSD auch gleich auf eine noch leistungsfähigere, bequemere und anpassbarere Shell umsteigen will, dem kann ich empfehlen sich mal die zsh anzusehen.

ksh

Fall man nicht sofort die Bash installiert und der ksh erstmal eine Chance gibt, hier noch ein paar Tips im Umgang mit der ksh.

Die ksh liest als Startdatei beim Login die Datei ~/.profile ein. Dies gilt jedoch nur für Login-Shells. Unter X ist per default eine in einem xterm laufende ksh keine Loginshell und liest daher die .profile nicht. Variablen kann man exportieren, damit sie in allen Subshells gültig sind, daher kann man Variablen-Definitionen für die Shell auch in eine Startdatei für X (wie etwa die ~/.xsession) schreiben. Anders ist dies jedoch bei Funktionen und Aliasen. Diese müssen in jeder Shell definiert werden. Um Aliase unter X in der ksh nutzen zu können gibt es daher 2 Möglichkeiten: Entweder man übergibt seinem xterm einen Parameter, das diese Shell eine Loginshell ist (entsprechende Parameter findet man in den Manpages zu xterm/rxvt/aterm, etc.) oder man definiert in einer Startdatei einen Wert für die Variable ENV und exportiert diese. Der Wert von ENV wird von der ksh als zusätzliche Startdatei benutzt, welche sowohl von Loginshells, als auch von Subshells benutzt wird. Üblich ist es ENV auf ~/.kshrc zu setzen.

Der Prompt der ksh läßt sich wie auch bei der Bash mit Hilfe der Variablen PS1 verändern. Die ksh versteht dabei die meisten Escape-Sequenzen die auch die Bash kennt. Folgendes gibt einem z. B. einen Prompt der Benutzername und Hostname, sowie den letzten Teil des Pfades zum aktuellen Arbeitsverzeichnis ausgibt:

export PS1='\u@\h:\W\$ '

Schreiben sie dies in eine Ihrer Startdateien, wie etwa .profile und/oder .xsession.

Scripts

Falls man Shellscripts für die Bash unter Linux entwickelt hat, lautet deren erste Zeile womöglich #!/bin/bash. Selbst wenn unter OpenBSD die Bash installiert ist, werden diese Scripts jedoch nicht funktionieren, da die Bash, wie jedes zusätzliche Package unter OpenBSD, in die Hierarchie unter /usr/local abgelegt wird und nicht wie unter Linux unter /bin zu finden ist. Es gibt 3 Möglichkeiten dieses Problem zu lösen: Entweder schreibt man diese Scripts so um, das sie mit #!/usr/local/bin/bash anfangen, oder man benutzt wesentlich portabler die folgende Variante:

#!/usr/bin/env bash

Das Programm env, kann man auf praktisch jedem Unixsystem unter /usr/bin finden und führt ein Script einfach mit dem angegeben Interpreter aus, egal wo im Pfad dieser installiert ist. In diesem Fall kann die Bash also unter /bin oder unter /usr/local/bin liegen und beide male wird sie gefunden.

Die dritte Möglichkeit ist die portabelste: Man verzichtet in der Syntax der Shellscripte einfach auf alle Bash-spezifische Syntax und verwendet:

#!/bin/sh

/bin/sh ist unter Linux ein Link auf /bin/bash und unter OpenBSD ein Link auf /bin/ksh. /bin/sh sollte auf jeden Unix vorhanden sein und eine Bourne-Shell kompatible Shell aufrufen. Dies ist sozusagen das Verfahren des kleinsten gemeinsamen Nenners. Falls man dies verwendet, sollte man allerdings auch wirklich darauf achten, keine Bash-spezifische Syntax in seinen Shellscripts zu verwenden.

GNU-Tools

Die meisten Standard-Unixtools funktionieren unter OpenBSD genauso, wie man es unter Linux erwartet. Allerdings gibt es in Details immer mal wieder Abweichungen. Wer statt der in OpenBSD enthaltenen Tools, lieber die unter Linux benutzten GNU-Tools benutzen möchte, kann sich diese auch unter OpenBSD als Port oder Package installieren. Wer z. B. ein farbiges ls haben möchte kann das Package gnuls installieren. Die GNU Variante von ls steht dann als /usr/local/bin/gls zur Verfügung. Wer möchte kann dieses ls zu seinem Standard-ls machen indem er einfach einen alias setzt:

alias ls='gls --color=auto'

Das hat allerdings einen kleinen Hacken: Die Option -o dient unter BSD ls zur Anzeige zusätzlicher Dateiflags. GNU ls hingegen kennt diese Flags nicht. Unter GNU ls dient der Parameter -o zum Anzeigen der langen Informationen, wie mit -l, aber ohne Gruppeninformationen. Auf einem typischen Desktopsystem dürfte dies allerdings egal sein, da hier diese zusätzlichen Dateiflags kaum eingesetzt werden.

Wem es allerdings nur um die Farbe am ls geht, der kann auch colorls verwenden, welches ein BSD-ls ist, nur um die Farbe ergänzt, welche mit dem Schalter -G eingeschaltet wird. Auch hier kann man einen alias setzen: alias ls='colorls -G'.

Wer nicht nur GNU ls, sondern auch weitere Standardfiletools, wie etwa cp, mkdir, ln, rm und andere in ihrer jeweiligen GNU-Variante installiert haben möchte, kann sich das Package fileutils installieren. Die Programme findet man dann jeweils mit einem g als Vorsatz unter /usr/local/bin, also z. B. gcp statt cp. Auf Wunsch kann man natürlich auch für diese einen Alias definieren. Im Package findutils sind die GNU Versionen von find und xargs enthalten. Desweiteren gibt es auch noch GNU grep im Package ggrep, GNU tar im Package gtar und GNU awk im Package gawk.

Dualboot

Mit Hilfe von Grub, ist es einfach Dualboot zwischen Linux und OpenBSD einzurichten. Ich benutze folgenden Eintrag in /boot/grub/menu.lst um OpenBSD booten zu können:

title           OpenBSD
root            (hd0,2)
makeactive
chainloader     +1

Der Eintrag (hd0,2) besagt dabei, das sich die OpenBSD fdisk-Partition in der dritten Partition der ersten Festplatte befindet (die Zählweise von Grub beginnt bei 0), also der Partition, die unter Linux hda3 heißt. Es gibt auch eine englischsprachige Anleitung auf dem OpenBSD-FTP-Server zur Dualboot-Installation von Linux und OpenBSD.

Gerätebezeichnungen

Unter Linux heißen alle Netzwerkkarten eth, die erste Netzwerkkarte ist eth0, die zweite eth1 usw., egal welchen Netzwerkchip und damit Treiber diese verwenden. Unter OpenBSD gibt es keinen einheitlichen Namen für Netzwerkkarten, sondern die Karten heißen nach ihrem Treiber. Z. B. ist eine Intel E100 Netzwerkkarte fxp oder eine Realtek 8139 Karte nennt sich rl, jeweils ebenfalls gefolgt von einer laufen Nummer die bei 0 beginnt.

IDE-Festplatten nennen sich unter Linux hd, gefolgt von einem weiteren Buchstaben beginnend bei a, unter OpenBSD heißen sie wd, gefolgt von einer Zahl beginnend mit 0. Die erste IDE-Festplatte im System ist also unter Linux hda und unter OpenBSD wd0. SCSI-Festplatten heißen auf beiden Systemen sd, unter Linux heißt also die erste SCSI-Festplatte sda und unter OpenBSD sd0. SATA-Geräte werden unter Linux fast immer als SCSI-Geräte bezeichnet (ebenso wie USB-Speicher). Unter OpenBSD wurden bislang (bis 4.1) SATA-Platten als wd bezeichnet, seit 4.2 gibt es jedoch einige SATA-Treiber die sd benutzen. USB-Speicher wird unter OpenBSD ebenfalls als sd bezeichnet. Zusätzlich gibt es unter OpenBSD auch noch die Unterscheidung zwischen dem normalen Gerät und dem Raw-Device. Bestimmte Aktionen wie etwa das formatieren einer Partition oder das brennen einer CD werden auf dem Raw-Device ausgeführt. Dazu wird der Gerätebezeichnung ein r vorangestellt, also etwa rwd0a. Für das normale mounten benutzt man jedoch immer die normale Gerätebezeichnung. Über das Raw-Device erfolgt der Zugriff auf das Gerät übrigens als Zeichenorientiertes Gerät und nicht als Blockgerät (vergleichen Sie mal auf einem OpenBSD-System die Ausgabe von ls -l /dev/wd0a und ls -l /dev/rwd0a).

Partitionen werden unter OpenBSD mit einem Buchstaben nach der Festplattenbezeichnung versehen, also z. B. wd0a für die erste Partition. Die b-Partition ist im allgemeinen für Swap reserviert. Die c-Partition ist eigentlich keine Partition, sondern hat die besondere Funktion für die ganze Festplatte zu stehen. Unter Linux würde man eine ganze Festplatte z. B. mit hda bezeichnen und die Partitionen dann als hda1 usw. Unter OpenBSD gibt es jedoch keine Gerätedatei die z. B. nur wd0 heißt. Stattdessen verwendet man als Gerät für die gesamte Festplatte wd0c. Fremdpartitionen, also solche die kein OpenBSD-Dateisystem haben, beginnen übrigens bei OpenBSD immer frühestens mit i, also z. B. kann die FAT-Partition auf einem eingesteckten USB-Stick als sd0i erscheinen. Das Merkmal solcher Partitionen ist immer das diese nicht in einem OpenBSD Disklabel sitzen. OpenBSD selbst benutzt so etwas wie "Unterpartitionen" für seine eigenen Partitionen. Das heißt, das die OpenBSD-Partition aus DOS/Linux-Sicht eine große Partition ist, aber OpenBSD diese selber noch mal in Partitionen einteilt. Generell erkennt OpenBSD bis zu 16 Partitionen auf einer Festplatte.

CD-Laufwerke werden unter Linux, wenn es IDE-Geräte sind ebenfalls als hd bezeichnet (z. B. hdc, wenn das Gerät als Master am zweiten IDE-Controller hängt) unter OpenBSD werden jedoch alle CD/DVD-Laufwerke immer als cd bezeichnet, egal ob es sich um IDE-, oder SCSI-Laufwerke handelt. Das erste gefundene CD-Laufwerk ist immer cd0, das zweite cd1 usw. Auch hier gilt, wie bei den Festplattenpartitionen, das das Gerät selbst z. B. cd0c heißt und nicht etwa nur cd0. Da es auf CDs und DVDs keine Partitionen gibt, gibt es für CD-Geräte immer die beiden Gerätedateien die mit c und a enden, also cd0a und cd0c.

Weiteres

OpenBSD ist in der Lage Linux-Binaries über eine Linux-Emulationsschicht auszuführen. Dies funktioniert für viele Linuxprogramme erstaunlich gut und ist nicht mit Lösungen wie etwa wine zu vergleichen. Nähere Informationen dazu, gibt es in der OpenBSD-FAQ. In der FAQ finden sich außerdem auch Informationen wie man von OpenBSD aus auf ext2 Partitionen zugreifen kann.


Creative Commons Attribution 2.0 Germany License
Copyright (c) René Maroufi, 2007