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
|