Anleitung zum Erstellen eines bootbaren USB-Stick unter NetBSD

Hier habe ich mal eine kleine Anleitung zum Erstellen eines bootbaren USB-Stick’s erstellt, von dem aus NetBSD auf die lokale Festplatte installiert werden kann. Dabei wird ausgegangen, dass es sich um einen FAT-formatierten Stick mit 1 GB Speicher handelt. Er wird standardmäßig unter NetBSD als Gerät /dev/sd0e gemountet. Im Prinzip gleicht sie der aus dem Wiki von den BSD-Foren. Nur dass ich die entsprechenden Laufwerksbezeichnungen und Verzeichnisse meines eingesetzten System angepasst habe.

1. Den USB-Stick bootbar machen

Das Einrichten des USB-Sticks erfolgt auf einem NetBSD-System. Neben einem neuen oder bereits gebrauchten USB-Stick mit mindestens 256MB Speicherkapazität wird ein CD-Image der gewünschten NetBSD-Version benötigt. Das ca. 200MB grosse CD-Image ist im Internet auf vielen FTP-Servern verfügbar.

Generell empfiehlt es sich, als ersten Schritt den Master Boot Record (MBR) neu zu installieren. Dies ist zwar nicht unbedingt notwendig, stellt aber sicher, dass der USB-Stick booten wird:

$ su
# fdisk -i /dev/sd0d
Update the bootcode from /usr/mdec/mbr? [n] y

Ausserdem ist es empfehlenswert, zunächst unter fdisk(8) eine NetBSD-Partition einzurichten:

# fdisk -u /dev/sd0d
Disk: /dev/sd0d
NetBSD disklabel disk geometry:
cylinders: 996, heads: 64, sectors/track: 32 (2048 sectors/cylinder)
total sectors: 2040832
BIOS disk geometry:
cylinders: 1012, heads: 32, sectors/track: 63 (2016 sectors/cylinder)
total sectors: 2040832
Do you want to change our idea of what BIOS thinks? [n]
Partition table:
0: Primary DOS with 32 bit FAT (sysid 11)
start 63, size 2040759 (996 MB, Cyls 0-1012/9/63)
1: UNUSED
2: UNUSED
3: UNUSED
Bootselector disabled.
Which partition do you want to change?: [none] 0
The data for partition 0 is:
Primary DOS with 32 bit FAT (sysid 11)
start 63, size 2040759 (996 MB, Cyls 0-1012/9/63)
sysid: [0..255 default: 11] 169
start: [0..1012cyl default: 63, 0cyl, 0MB]
size: [0..1012cyl default: 2040759, 1012cyl, 996MB]
bootmenu: []
Partition table:
0: NetBSD (sysid 169)
start 63, size 2040759 (996 MB, Cyls 0-1012/9/63)
1: UNUSED
2: UNUSED
3: UNUSED
Bootselector disabled.
Which partition do you want to change?: [none]
We haven't written the MBR back to disk yet. This is your last chance.
Partition table:
0: NetBSD (sysid 169)
start 63, size 2040759 (996 MB, Cyls 0-1012/9/63)
1: UNUSED
2: UNUSED
3: UNUSED
Bootselector disabled.
Should we write new partition table? [n] y

Zusätzlich sollte die NetBSD-Partition unter fdisk noch auf „Active“ gesetzt werden:

# fdisk -a sd0
Disk: /dev/rsd0d
NetBSD disklabel disk geometry:
cylinders: 996, heads: 64, sectors/track: 32 (2048 sectors/cylinder)
total sectors: 2040832
BIOS disk geometry:
cylinders: 1012, heads: 32, sectors/track: 63 (2016 sectors/cylinder)
total sectors: 2040832
Partition table:
0: NetBSD (sysid 169)
start 63, size 2040759 (996 MB, Cyls 0-1012/9/63)
1: UNUSED
2: UNUSED
3: UNUSED
Bootselector disabled.
Do you want to change the active partition? [n] y
Choosing 4 will make no partition active.
active partition: [0..4 default: 4] 0
Are you happy with this choice? [n] y
We haven't written the MBR back to disk yet. This is your last chance.
Should we write new partition table? [n] y

NetBSD nutzt eine eigene Partitionstabelle, nicht die von fdisk. Diese wird mit disklabel angelegt:

# disklabel -i -I /dev/sd0e
partition> a
Filesystem type [?] [unused]: ?
Supported file system types:
4.1BSD Eighth Edition MSDOS unknown
4.2BSD FILECORE NTFS unused
4.4LFS HFS RAID Version 6
ADOS HPFS swap Version 7
Apple UFS ISO9660 System V vinum
boot jfs SysVBFS
ccd Linux Ext2 UDF
Filesystem type [?] [unused]: 4.2BSD
Start offset ('x' to start after partition 'x') [0c, 0s, 0M]:
Partition size ('$' for all remaining) [0c, 0s, 0M]: $
a: 2040832 0 4.2BSD 0 0 0 # (Cyl. 0 - 996*)
partition> d
Filesystem type [?] [unused]:
Start offset ('x' to start after partition 'x') [0c, 0s, 0M]:
Partition size ('$' for all remaining) [996.5c, 2040832s, 996.5M]:
partition> W
Label disk [n]? y
disklabel: partitions a and e overlap
Label written
partition> q
Unknown command q
partition> Q

Die Partitionen stehen nun fest. Es fehlt noch das Dateisystem auf der Partition sd0e, das mit newfs angelegt wird:

# newfs /dev/sd0e

Allerdings kann die Partition noch nicht gebootet werden. Die folgenden Schritte sind abschließend notwendig:

# mount /dev/sd0e /mnt
# cp /usr/mdec/boot /mnt
# installboot -v -o timeout=5 /dev/rsd0e /usr/mdec/bootxx_ffsv1
File system: /dev/rsd0e
Primary bootstrap: /usr/mdec/bootxx_ffsv1
Ignoring MBR with invalid magic in sector 0 of `/dev/rsd0e'
Preserving 51 (0x33) bytes of the BPB
Boot options: timeout 5, flags 0, speed 9600, ioaddr 0, console pc

2.Die Installations-Kernel und -Sets auf den USB-Stick kopieren

Der USB-Stick ist nun bootfähig, aber ihm fehlt noch das, was eigentlich gebootet werden soll: das Betriebssystem oder wie in userem Fall das NetBSD-Installations-System mit dem Installations-Kernel. Das spätere Betriebssystem steckt in den Installations-Sets, die während der Installation entpackt und auf die Festplatte kopiert werden. Auch diese Installations-Sets werden auf dem USB-Stick benötigt.

Am einfachsten ist es, die komplette Installations-CD herunterzuladen, die als CD-Image auf vielen FTP-Servern liegt:

$ cd /home/sommteck/
$ ftp -a ftp://ftp3.de.netbsd.org/pub/NetBSD/NetBSD-4.0/iso/i386cd-4.0.iso

Um die benötigten Dateien aus dem CD-Image auf den USB-Stick kopiern zu können, muss die Image-Datei ins Dateisystem eingebunden werden:

$ su
# mkdir /image
# vnconfig -c vnd0 /home/sommteck/i386cd-4.0.iso
# mount -t cd9660 /dev/vnd0d /image/

Der Installations-Kernel und die Sets werden dann auf den gemounteten USB-Stick kopiert:

# cp /image/i386/binary/kernel/netbsd-INSTALL.gz /mnt/netbsd.gz
# cp -R /image/i386/binary/sets/ /mnt/sets/

Danach ist der USB-Stick fertig eingerichtet. Nach dem Runterfahren des Computers, muss der USB-Stick im BIOS als das zu bootende Laufwerk eingestellt werden. NetBSD sollte im Anschluss daran einwandfrei booten und mit einem blauen Installations-Menü grüssen.

3.Anmerkungen zur Installation

Eigentlich läuft die Installation nun problemlos und nach dem vertrauten Muster ab. Der folgende Schritt könnte jedoch Probleme bereiten:

Ihre Festplatte ist nun bereit für die Installation der Kernel- und
Distributionspakete. [...]

Hier muss das richtige Medium ausgewählt werden, und zwar:

>f: Ungemountetes Dateisystem

Mit RETURN bestätigen und es erscheint der folgende Screen:

Geben Sie das noch nicht gemountete lokale Gerät und dessen entsprechendes
Verzeichnis an, im dem die Distribution zu finden ist. (Das Verzeichnis muss
.tgz Dateien enthalten)

Hier sind die Optionen wie folgt zu setzen (aber dies ist nur ein Beispiel, bitte gegebenenfalls anpassen!!):

a: Gerät sd0e
b: Dateisystem ffs
c: Basispfad
d: Verzeichnis /sets