Einfach von der Installations-CD booten und dann auf den USB-Stick installieren…
Allerdings gibt es bei einer solchen Installation eine Menge zu optimieren. Zum Beispiel sollte man kein Swap auf den Stick legen und auch das "/tmp" sollte in eine Memory-Disk verlegt werden, denn so ein Flash-Speicher hat eine sehr begrenzte Lebensdauer, die in Schreib-Zyklen angegeben wird.
# mkdir /dist # mdconfig -a -f /var/tmp/FreeBSD/6.1-RC1-i386-disc1.iso md17 # mount -t cd9660 /dev/md17 /dist
# fdisk -BI /dev/da0
# bsdlabel -B -w da0s1
# newfs -U -L FreeBSDonUSB /dev/da0s1a
/dev/da0s1a: 481.0MB (985040 sectors) block size 16384, fragment size 2048
using 4 cylinder groups of 120.25MB, 7696 blks, 15424 inodes.
with soft updates
super-block backups (for fsck -b #) at:
160, 246432, 492704, 738976
# mount /dev/da0s1a /mnt
# cd /dist/6.1-RC1/base # DESTDIR=/mnt ./install.sh You are about to extract the base distribution into /mnt - are you SURE you want to do this over your installed system (y/n)? y
# cd /dist/6.1-RC1/kernels # DESTDIR=/mnt sh ./install.sh generic # rmdir /mnt/boot/kernel # mv /mnt/boot/GENERIC /mnt/boot/kernel
# boot0cfg -v -B -o noupdate da0 # flag start chs type end chs offset size 1 0x80 0: 1: 1 0xa5 480: 63:32 32 985056 version=1.0 drive=0x80 mask=0xf ticks=182 options=packet,noupdate,nosetdrv default_selection=F1 (Slice 1)
# Device Mountpoint FStype Options Dump Pass# /dev/ufs/FreeBSDonUSB / ufs rw,noatime 1 1 md /tmp mfs rw,-s16M,nosuid,noatime 0 0 md /var/run mfs rw,-s4M,nosuid,noatime 0 0 md /var/log mfs rw,-s16M,nosuid,noatime 0 0 /dev/acd0 /cdrom cd9660 ro,noauto,nosuid 0 0 /proc /proc procfs rw,noauto 0 0 /tmp /var/tmp nullfs rw 0 0
Hier schieben wir noch ein paar sinnvolle Schritte ein, die man auch überspringen kann wenn man die Installation vereinfachen möchte. Allerdings bringt das auch Nachteile mit sich, denn "um sonst" sind sie ja nicht…
# cat >> /mnt/boot/loader.conf << EOF geom_label_load="YES" EOF
Da wir eine vi-Ähnliche Wiederherstellungsfunktion /var/tmp/vi.recover im System haben möchten, ich bin mir nicht sicher ob das hier vorhanden sein wird, werden wir dieses Script runter laden und installieren:
# mkdir -p /mnt/usr/local/etc/rc.d/ # cd /mnt/usr/local/etc/rc.d/ # fetch http://people.freebsd.org/~ceri/FreeBSDonUSB/scripts/mkvirecover # chmod 555 mkvirecover
In order for commands that use wtmp(5) to work correctly with /var/log on a memory disk, we need to tell newsyslog(8) that it is OK to create an empty /var/log/wtmp. Edit /mnt/etc/newsyslog.conf and add C to the /var/log/wtmp line:
Nach dem unser USB-System hoch gefahren ist, wird sich der Prozess beschweren, der als erstes in die Datei /var/log/wtmp schreiben möchte, weil diese Datei nicht existiert. Damit newsyslog sich nicht beschwert und sich die Datei selbst anlegt, müssen wir ein "C" an die folgende Zeile anhängen:
# vi /mnt/etc/newsyslog.conf /var/log/wtmp 644 3 * @01T05 BC
Das Netzwerk konfigurieren wir so, das es sich die nötigen Daten per DHCP holt. In diesem Beispiel sind die NIC's "fwe0" und "plip0" von der DHCP-Auto-Konfiguration ausgeschlossen, da sie eigentlich nie in einem Netzwerk mit DHCP-Server kommen:
# cat >> /etc/rc.conf << EOF ifconfig_DEFAULT="DHCP" ifconfig_fwe0="NOAUTO" ifconfig_plip0="NOAUTO" EOF
Auch diese Maßnahme unternehmen wir nur, um die Anzahl der Schreibzugriffe auf den USB-Stick zu minimieren. Hier erstellen wir eine "locate"-Datenbank:
# chroot /mnt /bin/sh # mount_devfs devfs /dev # /etc/periodic/weekly/310.locate
… und schalten das wöchentliche Update aus:
Rebuilding locate database: # cat >> /etc/periodic.conf << EOF weekly_locate_enable="NO" weekly_whatis_enable="NO" EOF
# chroot /mnt /bin/sh # passwd root # pkg_add -r lsof rsync unzip zsh gnome...
Das wars.