devcorner.schlenker-webdesign.de > Unix > FreeBSD auf Compact-Flash-Karte
Home Unix LaTeX WWW Print
Diese Seite wurde am 1. April 2006 vorübergehend auf statisch umgestellt. Einige der vorgestellten Tutorials sind veraltet, Links tot und die Zeitangaben stimmen auch nicht. Im Laufe der nächsten Monate wird eine überarbeitete Seite folgen, auf die dann weitergeleitet wird.

FreeBSD auf CF-Karte

Für ein Thinclient-Konzept, das gänzlich ohne TFTP- und NFS-Server auskommen soll, arbeite ich gerade an einem FreeBSD 5.2-Image auf Compact-Flash-Karte. Glücklicherweise erlauben die gegenwärtigen Rahmenbedingeungen eine 256MB-Karte, was praktisch eine vollständige FreeBSD-Installation incl. komplettem XFree86 mit vielen lokalen Schriften erlaubt.

Ich stelle hier primär den Weg vor, ein nahe am Standard liegendes aber dennoch kompaktes FreeBSD auf eine CompactFlash-Karte mit 64 bis 256MB zu bringen, dieses mit zusätzlicher Software zu versehen und nach Einbau der Karte in den Rechner der Bestimmung einfach booten zu können.

Weiter unter befindet sich ein Download-Link für ein fertiges Image. Dieses ist primär auf die Verwendung als Thinclient auf einem EPIA-M(E)-Board gedacht. Es enthält nur zwei Netzwerkkartentreiber und dürfte deshalb kaum allen Zwecken genügen.

Vorbereitung eines Images der CF-Karte

Da normale Schreibzyklen auf CF-Karte die Lebensdauer dieser ganz massiv verkürzen, arbeiten wir auf einem Image der CF-Karte. Dieses wird mit dd erzeugt, wir lassen uns mit dmesg die Anzahl der Sektoren der Karte anzeigen:

 da1: 244MB (500736 512 byte sectors: 64H 32S/T 244C)

und erzeugen dann ein Image derselben Größe:

 dd if=/dev/zero of=/tmp/cf256.img bs=512 count=500736

Dieses Image kann nun in eine virtuelle Festplatte umgewandelt werden:

 mdconfig -a -t vnode -f /tmp/cf256.img

Diese virtuelle Festplatte bekommt nun mit fdisk eine Partitionstabelle und mit bsdlabel ein Label verpasst:

 fdisk -iB md0

Nun darf man mit fdisk die Partitionierung editieren. Ich lege zunächst eine kleine MSDOS-Partition (Typ 1) an, auf der Konfigurationsdateien untergebracht werden. Hintergrund ist der, daß auch Admins ohne BSD das System einfach werten können.

 bsdlabel -Brw md0s4 auto
 EDITOR=emacs bsdlabel -e md0s4

Anschließend setzt man fsize auf 1024, bsize auf 8192 und fstype auf 4.2BSD. Für fsize und bsize kann man jeweils die halbe Größe verwenden, was oft Platz sparen dürfte.

Das Diklabel sieht nun so aus:

 8 partitions: 
 #        size   offset    fstype   [fsize bsize bps/cpg] 
  a:   497936       16    4.2BSD     1024  8192        
  c:   497952        0    unused        0     0         # "raw" part, don't edit 

Jetzt kann ein Dateisystem erzeugt werden:

 newfs -b 8192 -f 1024 -U /dev/md0s4a

Nach Erzeugen eines Mountpoints kann das Image wie jede Festplatte gemountet werden:

 mkdir /mnt/cf
 mount /dev/md0s4a /mnt/cf

Bauen des Kernels und der Welt

Nach einem frischen CVSUP baut man so ziemlich alles, was ein FreeBSD ausmacht. Ich mache das an meinem normalen Zweitrechner, der unter FreeBSD 5.2 läuft. Ist das Ziel ein vom Arbeitsplatz abweichender Prozessor, sollte man noch CPUTYPE=i686 oder ähnlich setzen.

Die Welt

 cd /usr/src
 make buildworld \
    NO_CVS=true \
    NO_BIND=true \
    NO_FORTRAN=true \
    NO_I4B=true \
    NO_SENDMAIL=true \
    NO_MAILWRAPPER=true \
    NO_OBJC=true \
    NO_GAMES=true \
    NOGAMES=true \
    NOINFO=true \
    NO_INFO=true \
    NOUUCP=true \
    NO_UUCP=true \
    NO_TOOLCHAIN=true \
    NO_CXX=true

Der Kernel

 make buildkernel \
    MODULES_OVERRIDE="sound splash vesa acpi null nullfs unionfs" \
    KERNCONF=THIN_CF_BOOT

Die Kernelkonfiguration THIN_CF_BOOT entstand durch Kopieren von /usr/src/sys/i386/conf/GENERIC nach /usr/src/sys/i386/conf/THIN_CF_BOOT und anschließendes entfernen aller nicht benötigten Treiber. Natürlich kann man auch GENERIC verwenden. MODULES_OVERRIDE gibt an, daß nicht alle, sondern nur die angegebenen Module gebaut werden sollen. Man reduziert damit Kernel plus Module von ca. 22MB auf 3 bis 4MB.

Installation von Kernel und Welt

Jetzt muß das Basissystem auf dem gemounteten Image installiert werden:

Die Welt

 make installworld \
    NO_CVS=true \
    NO_BIND=true \
    NO_FORTRAN=true \
    NO_I4B=true \
    NO_SENDMAIL=true \
    NO_MAILWRAPPER=true \
    NO_OBJC=true \
    NO_GAMES=true \
    NOGAMES=true \
    NOINFO=true \
    NO_INFO=true \
    NOUUCP=true \
    NO_UUCP=true \
    NO_TOOLCHAIN=true \
    NO_CXX=true \
    DESTDIR=/mnt/cf

Der Kernel

 make installkernel \
    MODULES_OVERRIDE="sound splash vesa acpi null nullfs unionfs" \
    KERNCONF=THIN_CF_BOOT \
    DESTDIR=/mnt/cf

Anschließend muß noch /etc mit Inhalt gefüllt werden:

 cd etc/
 make distribution \
    NO_CVS=true \
    NO_BIND=true \
    NO_FORTRAN=true \
    NO_I4B=true \
    NO_SENDMAIL=true \
    NO_MAILWRAPPER=true \
    NO_OBJC=true \
    NO_GAMES=true \
    NOGAMES=true \
    NOINFO=true \
    NO_INFO=true \
    NOUUCP=true \
    NO_UUCP=true \
    NO_TOOLCHAIN=true \
    NO_CXX=true \
    DESTDIR=/mnt/cf

Ich lösche anschließend noch alle Manualpages, Infos, Beispiele usw.:

 rm -rf /mnt/cf/usr/share/man
 rm -rf /mnt/cf/usr/share/doc
 rm -rf /mnt/cf/usr/share/dict
 rm -rf /mnt/cf/usr/include
 rm -rf /mnt/cf/usr/share/openssl/man
 rm -rf /mnt/cf/usr/share/examples

Letzte Konfigurationen

Dazu wechsle ich auf die gemountete CF-Karte und führe dort ein chroot aus. Das erlaubt es mir, ausstehende Konfigurationen in der späteren Arbeitsumgebung vorzunehmen:

 cd /mnt/cf
 chroot .

Es können nun die Konfigurationsdateien editiert werden:

/etc/fstab

 /dev/ad0s4a     /               ufs     ro     1       1
 md              /mnt/var        mfs     rw,-s4m 0       0
 md              /tmp            mfs     rw,-s2m 0       0
 /mnt/var        /var            unionfs rw      0       0
 proc            /proc           procfs  rw      0       0

Wenn man den Berkeley-LPD verwendet, sollte man die Größe des MFS für /mnt/var entsprechend größer setzen, 16 oder 32MB dürften dann ein vernünftiger Wert sein.

/etc/rc.conf

Meine sieht so aus:

 ifconfig_vr0="inet 192.168.1.11 netmask 255.255.255.0 up"
 sshd_enable="YES"
 keymap="german.cp850"
 devd_enable="yes"

/boot/loader.conf

Hier für Via Epia, mit hübschem Splashscreen:

 snd_via8233_load="YES"
 splash_bmp_load="YES"                         
 vesa_load="YES"
 bitmap_load="YES"
 bitmap_name="/boot/thinclient.bmp"

Passwort nicht vergessen!

Damit man nachher nicht vor verschlossenen Türen steht, sollte man (im chroot-Käfig) das Root-Passwort ändern:

 passwd

Jetzt wird geflasht

Das Image wird nun ausgehängt und die Vnode-Disk zerstört. Schließlich wird das Image auf die CF-Karte übertragen:

 umount /mnt/cf
 mdconfig -d -u md0

Und ab damit auf die Karte (wenn sie der Kartenleser auf da1 findet):

 dd if=/tmp/cf256.img of=/dev/da1

Das Image kann nun in einen ATA/CF-Adapter gesteckt und als Bootplatte benutzt werden.

Hinweise und Links


/dev/corner news
Visitenkarten mit LaTeX (27.10.2004)
X.org unter FreeBSD 5.2.1 (25.07.2004)
Kurzanleitung OpenOffice.org und MySQL (SuSE) (14.05.2004)
Neues Howto -- OpenOffice.org und PostgreSQL (FreeBSD) (02.05.2004)
Tip des Tages (FreeBSD) -- Multisession Datensicherung quick and dirty (18.04.2004)
Tip des Tages (Linux/Unix) -- Wörterbuch auf Tastaturshortcut (18.02.2004)
Werbung
Christall Folientechnik – Kastenhauben und technische Folien in Sondergrößen
Cycle-Sport GmbH Heilbronn – Ihr Spezialist für sportliche Mountainbikes
www.getriebeteile.com – Ihre günstige Quelle für Ersatzteile von PKW-Getrieben
Impressum · Mattias Schlenker · 04275 Leipzig · · ms@mattiasschlenker.de · 02.04.06, 14:49:53