Inhaltsverzeichnis

FreeBSD (6.1-RC1-i386) - auf einen USB-Stick installieren


der einfache Weg

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.

etwas aufwendiger

# 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.