Création d'une image bootable de NetBSD

Voici une méthode pour générer une image bootable de NetBSD, comprenant un noyau et un ramdisk minimal, ce qui vous permettra de générer un système minimal en vue de magouilles diverses et variées comme par exemple l'installation de NetBSD sur des disques flashs, des clés USB et j'en passe.

Configuration du noyau

Afin de réserver l'espace nécessaire au RAMDISK, md(4), il vous faudra ajouter ces lignes à votre configuration noyau :

[...]
pseudo-device   md              1       # memory disk device (ramdisk)
[...]
# Enable the hooks used for initializing the root memory-disk.
options         MEMORY_DISK_HOOKS
options         MEMORY_DISK_IS_ROOT     # force root on memory disk
options         MEMORY_DISK_SERVER=0    # no userspace memory disk support
options         MEMORY_DISK_ROOT_SIZE=16384  # size of memory disk, in blocks
options         MEMORY_RBFLAGS=0        # IMPORTANT pour ne pas forcer le mode single user

Et vous assurer que votre noyau supporte bien vnd(4) :

pseudo-device   vnd             4       # disk-like interface to files

Une fois ces paramètres vérifiés, compilez votre noyau de la manière habituelle :

cd /usr/src/sys/arch/VOTREARCHITECTURE/conf
config VOTRENOYAU
cd ../compile/VOTRENOYAU
make depend
make

Géneration de l'image

Créez maintenant un répertoire de travail quelconque dans votre ${HOME} par exemple

mkdir imagefun

Dans ce répertoire, créez un répertoire fakeroot dans lequel vous déposerez tous les outils / scripts que vous souhaitez inclure dans votre image bootable. N'oubliez pas de créer les entrées dev/, et les répertoires bin/ sbin/ lib/ etc/ tmp/ var/ et usr/. Je ne rentrerai pas dans le détail de la population de ce filesystem.

Et voici un script maison qui réalisera l'image souhaitée :

#!/bin/sh

MFDISKSIZE=8m
MDNAME=mdisk.img
FAKEROOT=./fakeroot
DISKSIZE=16384
BOOTIMG=bootdisk.img
VND=/dev/vnd0
BOOTDISK=bootdisk
KERNEL=LIVEKEY
KERNDIR=/usr/src/sys/arch/i386/compile/${KERNEL}

# generate RAMDISK and push it into the kernel

rm -f netbsd.gz
cp ${KERNDIR}/netbsd .
makefs -s ${MFDISKSIZE} -t ffs ${MDNAME} ${FAKEROOT}
mdsetimage netbsd ${MDNAME}
echo ">> compressing kernel..."
gzip -9 netbsd

echo ">> kernel generated."

# this one's taken from http://eggplant.ddo.jp/www/pukiwiki/
echo "miniroot:\
:ty=floppy:se#512:nt#1:rm#3600:ns#${DISKSIZE}:nc#1:\
:pa#${DISKSIZE}:oa#0:ba#4096:fa#512:ta=4.2BSD:\
:pb#${DISKSIZE}:ob#0:\
:pc#${DISKSIZE}:oc#0:" > miniroot.disktab

dd if=/dev/zero of=${BOOTIMG} count=${DISKSIZE} bs=512
vnconfig -v -c ${VND} ${BOOTIMG}
disklabel -w -f miniroot.disktab ${VND} miniroot
newfs ${VND}a

echo ">> filesystem created."

rm -rf ${BOOTDISK}
mkdir ${BOOTDISK}
mount ${VND}a ${BOOTDISK}

cp /usr/mdec/boot ${BOOTDISK}/boot
cp netbsd.gz ${BOOTDISK}/netbsd
installboot -v -o timeout=5 /dev/rvnd0a /usr/mdec/bootxx_ffsv1

echo ">> MBR installed"

umount ${BOOTDISK}
vnconfig -u ${VND}

Après l'exécution de ce script, le fichier boot.img représente l'image bootable de votre noyau.

netbsd/creation_d_image.txt · Last modified: 2010/01/12 13:29 (external edit)