Linux2BSD -- Erfahrungsbericht

hosi

New Member
Erfahrungsbericht Linux2BSD
----------------------------------------

Da ich mir gerne das ZFS-Filesystem einmal anschauen wollte, ZFS aber unter Linux nur über FUSE geht, dachte ich mir, dass ich mal testweise FreeBSD installiere. FreeBSD zu testen steht sowieso seit etwa 5 Jahren auf meiner ToDo-Liste und diese Woche hab ich nun endlich mal Zeit.


Ich schau mir also meine Festplatten-Partitionen an und wähle eine Debian-Lenny-Testinstallation (/dev/sda6) aus, die ich nicht mehr brauche und mit BSD überschreiben kann. Ich besorg mir also die ISO-Images von nem BSD-Mirror und boote die Installations-CD. Mein USB-Keyboard wird dabei leider nicht erkannt, so dass ich zuerst eine PS2-Tatstatur suchen muss. Hmm.

Die erste Überraschung finde ich beim Partitionieren der Platten. Partitionen heißen bei FreeBSD Slices und nicht Partition. Naja, kann man wohl mit zurecht kommen. Ich suche also /dev/sda6, um die Partition für die Installation vorzubereiten und versuche die BSD-Bennennung der Platten zu durchschauen. Ich hätte sowas wie /dev/ad10s6 erwartet, aber kann nichts finden. Alle logischen Partitionen werden komischerweise nicht angezeigt. Ich boote also Linux, setze den Typ von /dev/sda6 auf FreeBSD und starte die Installation erneut. Nichts -- auch die Partition vom Typ FreeBSD taucht nirgends auf. Nach Rücksprache mit dem FreeBSD-Handbuch ergibt sich, dass FreeBSD nur in primäre Partitionen installiert werden kann. *arg*

Also Linux gebootet und /dev/sdb2 (eine Linux-Data-Partition auf der nur Müll liegt), als FreeBSD markiert und den FreeBSD-Installer zum dritten Mal gestartet. Die FreeBSD-Partition wird dann im Partitionierungsscreen angezeigt und ich suche vergebens eine Möglichkeit, diese Partition auszuwählen ("Wie zum Teufel sag ich dem Installer, dass er diese Partition zum Installieren auswählen soll??"). Ein erneutes Durchlesen des Handbuchs verrät mir, dass ich da gar nichts machen muss, sondern das alleinige Vorhandensein einer FreeBSD-Partition reicht aus. Ich lasse meine Frage, was denn ist, wenn ich mehrere FreeBSD-Partitionen habe, unbeantwortet und fahre mit der Installation fort.

Nach der eigentlichen Installation, die ohne irgendwelche Schwierigkeiten durchgelaufen ist, werde ich gefragt, ob ich den Bootloader in den MBR schreiben will. Das will ich aber nicht, da dort schon ein grub liegt, mit dem ich mein Linux boote. Ich suche also nach einer Möglichkeit, dem BSD-Bootmanager zu sagen, dass er sich nach /dev/ad12s2 installieren soll, damit ich ihn über grub starten kann. Da das Handbuch bisher eigentlich hilfreich war, hab ich voller Hoffnung die relevanten Informationen dort zu finden, nochmals da rein geschaut. Diesmal aber leider ohne Erfolg. Mir fällt nichts besseres ein, als die Installation zu beenden und den Rechner neu zu booten. Nach dem Ausählen von FreeBSD im LiLo-Bootmenü kommt ein grub-Prompt. WTF? Da lag wohl glücklicherweise auf /dev/ad12s2 ein vergessener grub und ich kann FreeBSD zumindest booten:
Code:
root (hd1,1,a)
chainloader +1
boot

Es funktioniert und ich logge mich zum ersten Mal in mein FreeBSD ein. Das Passwort konnte ich ja schon während sysinstall vergeben.

Ich will erst einmal das wichtigste konfigurieren:
Code:
ifconfig eth0 192.168.1.4 netmask 255.255.255.0
-> interface eth0 does not exist

Ach ja, da war doch was... Netzwerkinterfaces heißen bei BSD ja nicht ethX. Aber wie heißt es denn dann?? Hmm, was sagt denn dmesg?
pci3: <network, ethernet> at device 0.0 (no driver attached)
Nicht sehr aussagekräftig. Ich hatte mir da eigentlich einen Device-Namen erhofft.
Ich überlege angestrengt, was ich überhaupt für eine Netzwerkkarte habe, um bei google nachschauen zu könnnen:
Code:
lspci -v
lspci: Command not found.
Hmm, lspci scheint es unter BSD wohl nicht zu geben.
Code:
ls -al /proc/
Auch nichts... Gibt's kein /proc unter BSD?
Nächster Versuch:
Code:
ls -al /usr/sbin/*pci* /usr/bin/*pci*
Nach der harten Methode und einem "man pciconf", guch ich mir nun meine PCI-Devices an:
Code:
pciconf -l -v
und finde meine Netzwerkkarte:
Code:
88E8053 Yukon PCI-E Gigabit Ethernet Controller (copper)

Laut google gibt es von marvell sogar einen BSD-Treiber, aber wie kriege ich den jetzt heruntergeladen ohne Netzwerk?? Ich überlege zwischen Floppy, USB-Stick und CD und entscheide mich waghalsig für den USB-Stick. Also auf dem Debian-Laptop die Treiber heruntergeladen und auf den USB-Stick gepackt und beide Daumen gedrückt, als ich den in das BSD stecke.
Es hagelt Fehlermeldungen:
Code:
CAM Status: SCSI Status Error
Medium not present
Retries Exhausted
und ich sehe mich schon zum Schrank gehen, auf der Suche nach einer 5 Jahre alten Floppy, die noch funktioniert. Aber dann:
Code:
Opened Disk da0
Huh? Sollte das mit dem USB-Stick doch noch funktioniert haben? Ich schau nach -- und wenn die Namensbennung konsistent ist, dann sollte es ja eigentlich ein /dev/da0s1 geben?
Code:
ls -al /dev/da0s1
Prima!

Code:
mkdir /mnt/foo && mount -t vfat /dev/da0s1 /mnt/foo 
-> incorrect super block

*ARG*

Nochmal nachschauen, ob wirklich die erste Partition -- äh ... das erste Slice -- die FAT-Partition ist:

Code:
fdisk -l /dev/da0 
illegal option -- l
*ARG*
Code:
man fdisk
fdisk /dev/da0
The data for partition 1 is: 
sysid 6

Die 6 war doch DOS? Sollte also passen.

Code:
ls -al /sbin/mount*

Aha! Unter BSD gibt es kein vfat und auch kein msdos, sondern ein msdosfs.

Code:
mount -t msdosfs /dev/da0s1 /mnt/foo

OK. Das klappt tatsächlich. Ich bin begeistert.

Laut einem Eintrag auf bsdforen.de muss ich nun das Treiber-Paket über pkg_add installieren:

Code:
pkg_add mykbsd60x86-8.14.9.3.tgz

Dann solle man wohl "irgendwo auf der Platte" (!) ein Kernelmodul finden. Toll!
Bevor ich ein "find / -name '*ko'" laufen lassen, gucke ich nach, ob man pkg_add nicht irgendwie gesprächiger machen kann, um zu erfahren, wo die Sachen hingepackt werden. Nach "man pkg_add" sehe ich, dass es da einen -v-Switch gibt:
Code:
pkg_add -v mykbsd60x86-8.14.9.3.tgz
> package "mykbsd60x86-8.14.9.3.tgz" or its older version already installed
1 package addition(s) failed

Toll, der Treiber ist bereits installiert und ich hätte mir also die ganze Fummelei mit dem USB-Stick sparen können. *sig*

Dann soll ich laut Forenbeitrag wohl eingeben:
Code:
kldload if_myk.ko
Merke! modprobe/insmod == kldload

Auf einmal erscheint auf der Konsole:
Code:
mykc0: <Generic Marvell Yukon 88E8053 based Ethernet Controller Ver. 8.14.9.3> port 0x7000-0x70ff mem 0xf7000000-0xf7003fff irq 16 at device 0.0 on pci3

Jippie!

Ich will die Karte mit DHCP konfigurieren. Aber wie heißt die jetzt? Wenn mein Modul myk heißt, würde ich die Karten als Entwickler wohl auch myk nennen. Ich versuche also mutig ein:
Code:
dhclient myk0
myk0: no link ............... giving up.
Naja, immerhin weiß ich jetzt, dass das Interface wohl wirklich myk0 heißt.

Unter Linux würde ich jetzt mit mii-tool nachschauen, ob das Autosensing funktioniert. Aber ich gehe fest davon aus, dass es mii-tool unter BSD nicht gibt. Versuchen wir's mal manuell:
Code:
ifconfig myk0 eth0 192.168.1.4
myk0: link up

Jippie!

So, jetzt wo das Netzwerk funktioniert, werd ich mich mal an xorg versuchen. Ich hab zwar noch keinen Plan, wie man Software nachinstallieren kann, aber ich schätze, das wird auch im FreeBSD-Handbuch stehen. Ich hoffe nur, es ist nicht viel schwieriger als ein "aptitude install xserver-xorg"...

Danach werde ich die ToDo-Liste wohl abarbeiten und mir mal die jails und pf anschauen. Und wenn ich dann noch Lust hab, komm ich mal auf ZFS zurück. Denn das konnte ich bei der Installation leider nicht als default-FS angeben. :-)
 
Das ganze geht sehr viel einfacher, wenn du keine Linux-Erfahrung mitbringst. Mir ergeht es umgekehrt. Unter Linux ist alles ähnlich, aber immer so anders, dass es mich zur Weißglut treiben kann.
 
Hi hosi,

Respekt für so viel Hartnäckigkeit, andere hätten da schon längst aufgegeben! Da wird der Rest für Dich ein Klacks :) Viel Erfolg und Spass weiterhin mit FreeBSD!

Aber ich verstehe nicht, warum Du ZFS nicht unter Linux ausprobierst - FUSE hin oder her. Zum Ausprobieren sollte das doch allemal taugen!

ZFS ist noch ausdrücklich "experimentell" unter FreeBSD 7.0 und deshalb aus gutem Grund auch nicht als default-FS bei der Installation verfügbar. Ich hoffe, Deine Hardware hat genügend Ressourcen für ZFS.
 
xorg

OK, es geht weiter -- mein erster Forenbeitrag unter Opera/FreeBSD

Die Installation von xorg war nicht allzu schwer, da ich schon bei der Installation X-User ausgewählt hab. Ist mir allerdings erst wieder eingefallen, als ich zufällig beim Installationsversuch darüber gestolpert bin.
Aber ich hab's immerhin hinbekommen, diesen Beitrag unter FreeBSD mit opera zu schreiben.

Allerdings machen mein USB-Keyboad und meine USB-Maus Probleme. Beide funktionieren prima bis zum Bildschirm mit dem Bootlogo. Dort kann ich den Bootvorgang noch mit Space pausieren, aber sobald die USB-Module geladen werden geht das Abtastlämpchen der Maus aus und die Tastatur reagiert auf keinerlei Eingaben mehr. Wenn ich am login-Prompt beide Geräte einmal rausziehe und wieder reinstecke, gehen beide wieder. Ich versuche mit kbdcontrol das irgendwie hinzubiegen, aber es klappt nicht. Das USB-Keyboard wird zwar von /dev/kbdmux0 nach /dev/kdb1 gelinkt (sollte also erkannt worden sein??), aber ein usbdevs -dv zeigt nur die Hubs an. Unter Linux würde ich jetzt die USB-Module einmal neu laden (rmmod && modprobe). Ich versuche das morgen auch mal bei FreeBSD.

Appropo modprobe/insmod/kldload: ich muss das if_myk.ko-Modul bei jedem boot einmal neu laden. Ein /etc/modules finde ich nicht - von daher hab ich ein "kldload if_myk.ko" erst mal an rc.conf angehängt. Das funktioniert zwar, aber scheint mir eine recht unsaubere Lösung zu sein, da ich des öfteren die Meldung "myk.ko already exists" bekomme. Wo trägt man das denn sonst ein?

Desweiteren ist mir aufgefallen, dass es doch erhebliche Unterschiede in der Filesystemhierarchie gibt. Unter FreeBSD liegen ne Menge Sachen unter /usr/local statt einfach in /usr. Das ist für mich doch extrem ungewohnt.

Um mich erst einmal unter Xorg einloggen zu können, hab ich GDM installiert, was mit einem
Code:
pkg_add -r gdm
auch recht einfach war (es gab zwar einige Fehlermeldungen bezülich scrollkeeper, aber die werde ich erst einmal ignorieren).

Außerdem hab ich FVWM nachinstalliert, aber leider taucht der nicht automatisch in den verfügbaren Sessions bei GDM auf. Ich musste dafür /usr/local/share/gnome/xsessions/fvwm.desktop anlegen (wie ich nach der Lektüre von /usr/local/etc/gdm/Xsession, diverser weiterer Xorg-Konfigurationsdateien und einem Eintrag im Wiki erfahren hab). Benutzerfreundlich ist das ... äh ... nicht wirklich. Wie soll man da drauf kommen, ohne die X-Skripte zu lesen?

Weitere Pakete wie opera, xmms hab ich ebenfalls installiert. xmms weigert sich aber beharrlich, MP3s abzuspielen:
Code:
** WARNING **; oss_open(): Failed to open audio device (/dev/dsp): No such file or directory
/dev/dsp gibt's auch nicht (wahrscheinlich muss ich irgendwelche sound.ko nachladen?) und eine Gruppe audio existiert auch (noch?) nicht.

Morgen schau ich mal, wie ich UTF-8 als Standard-Locale eingerichtet bekomme und was viel wichtiger ist: wie kriege ich die USB-Geräte ans Laufen?

Immerhin funktioniert das Mailsystem out-of-the-box (wie kann man nur freiwillig sendmail nehmen??) und ich hab meine erste Mail bekommen:

Code:
From: Charlie Root <root@localhost.my.domain>
Message-Id: <200801150201.m0F21TMJ002577@localhost.my.domain>
To: root@localhost.my.domain
Subject:  security run output

Aber who the f*** is Charlie?? :)
 
Hi,

schön das du dich für FreeBSD interessierst.

In der /boot/loader.conf must du die Module eintragen, die zum Start geladen werden sollen. Bsp: Modulname_load="YES"
Die Module die du laden kannst liegen unter /boot/kernel
Ich glaube unter /boot/default/loader.conf (Weiß ich jetzt nicht genau) findest du eine Datei die Vorkonfiguriert ist. Die wird vor der /boot/loader.conf aufgerufen und setzt die standard Einstellungen, in /boot/loader.conf überschreibst du dann die einzelnen Einstellungen. Die unter default solltest du nicht ändern.
Wenn du Sound haben möchtest, kannst du snd_driver_load="YES" in die /boot/loader.conf eintragen. Das ist so zusagen ein Metamodul, das alle Soundmodule läd.

Ich wünsche dir noch viel Spaß mit dem System und halte durch, es lohnt sich.

Gruß, Daniel_S
 
Der snd_driver ist nur zum Testen, welcher Treiber auf die Soundkarte anspricht. Den trägt man nicht in die loader.conf ein.
 
...damit Licht in das Soundkarte-Dunkel kommt: da hilft in der Tat das Handbuch weiter, in diesem Falle sogar sehr, sehr gut wie ich finde. Damit findest Du SICHER den richtigen Treiber für Deine Karte.

Was das /usr und /usr/local-Zeug angeht: mir gefällt die FreeBSD-Variante besser, weil die Struktur da klarer ist. Ich arbeite gar nicht mehr mit FreeBSD, weil ich auf der Arbeit einen Linux-Rechner habe und zu Hause andere Dinge zu tun habe, als an Rechnern zu schrauben. Aber dennoch gefällt die Struktur von FreeBSD deutlich besser...

Grüße und bleib tapfer,

Herakles
 
Hmmm, erstaunlich wie hartnaeckig du dich weigerst in die manpages zu schauen. Ein 'man -k pci' haette dich schnell auf pciconf gebracht. Ein 'man -k sound' gibt ebenfalls einen guten Ueberblick. Den "myk" Treiber findest du zwar nicht mit "man -k marvell", aber immerhin msk(4) ist damit auffindbar.
Ueber Kernel-Module gibt 'man -k kernel|egrep "\(1\)|\(8\)"' einen guten Ueberblick. Insbesondere ist da loader(8) aufgefuehrt.

Also, nicht im Trueben fischen, sondern die man-pages zu Rate ziehen. Du wirst dich wundern, was da alles zu finden ist.
 
Hmmm, erstaunlich wie hartnaeckig du dich weigerst in die manpages zu schauen.

Du bist ja witzig...

Vielleicht muss man erst einmal wissen, dass es die manpages überhaupt gibt. Unter Linux gibt es weder die manpage pci, noch sound.
Schön, wenn es unter BSD anders ist, aber ohne das zu wissen, kann man sie schlecht lesen...

So, und jetzt schau ich mal nach, ob es auch die manpage keyboard gibt. Und wehe da steht nichts drin, wie man ein USB-Keyboard zum laufen bekommt (kbdcontrol, kbdmux, usbd, und devd hab ich diesbezüglich schon durch).

Update:
ich nehme alles wieder zurück -- ich hab das -k übersehen!
 
Zurück
Oben