====== FreeBSD (6.1-RC1-i386) - auf einen USB-Stick installieren ====== * [[http://typo.submonkey.net/articles/2006/03/20/installing-freebsd-onto-a-usb-stick]] * [[http://typo.submonkey.net/articles/2006/04/13/installing-freebsd-on-usb-stick-episode-2]] ---- ===== 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 ===== * mounte ein CD-ISO-Image an /dist: # mkdir /dist # mdconfig -a -f /var/tmp/FreeBSD/6.1-RC1-i386-disc1.iso md17 # mount -t cd9660 /dev/md17 /dist * USB-Stick in den Port stecken, der ist mit FAT32 vorformatiert. Wir brauchen allerdings eine BSD-Slice und ein Disk-Label auf dem Stick - das folgende Kommando vernichtet alle Daten, die sich zur Zeit auf dem USB-Stick befinden. Erhältst du eine Warnung wie "Geom not found", mach dir keine Sorgen und ignoriere sie: # fdisk -BI /dev/da0 * nun brauchen wir noch ein Disk-Label: # bsdlabel -B -w da0s1 * und ein Dateisystem auf den USB-Stick schreiben, damit wir ihn an "/mnt" mounten können. Um die Anzahl der Schreibzugriffe auf den USB-Stick zu verringern, verwenden wir die Option "-U" damit //soft update// aktiviert wird. Zusätzlich werden wir das Dateisystem noch mit einem Label (FreeBSDonUSB) versehen, so kann man die Gerätedatei später wesentlich einfacher finden. # 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 * und jetzt die kinderleichte Installation: # 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 * Jetzt haben wir die Wahl den Generic-Kernel oder den SMP-Kernel zu verwenden, in diesem Beispiel entscheiden wir uns für den Generic-Kernel: # cd /dist/6.1-RC1/kernels # DESTDIR=/mnt sh ./install.sh generic # rmdir /mnt/boot/kernel # mv /mnt/boot/GENERIC /mnt/boot/kernel * Jetzt installieren wir den Boot-Manager, um den USB-Stick bootfähig machen. Wir verwenden hier die Option "noupdate", damit der MBR behandelt wird als wäre er "read-only": # 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) * erstelle dir eine "/etc/fstab" auf dem USB-Stick, hier ein einfaches Beispiel. Wir mounten auch ///var/tmp// an ///tmp//, wodurch auch dieses Verzeichnis die daten nur flüchtig halten kann: # 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... ;-) * Da wir nun ja das UFS-Dateisystem-Label verwenden wollen, um das "root"-Dateisystem zu identifizieren, müssen wir das GEOM-Label-Modul schon mit dem Kernel zusammen laden: # 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 ---- * installier dir jetzt alle Pakete, die du noch brauchst bzw. möchtest: # chroot /mnt /bin/sh # passwd root # pkg_add -r lsof rsync unzip zsh gnome... Das wars.