Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
netbsd:creation_d_image [2006/05/09 15:00]
imil
netbsd:creation_d_image [2010/01/12 13:29] (current)
Line 1: Line 1:
 +====== 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 :
 +
 +<​code>​
 +[...]
 +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
 +</​code>​
 +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 :
 +<​code>​
 +cd /​usr/​src/​sys/​arch/​VOTREARCHITECTURE/​conf
 +config VOTRENOYAU
 +cd ../​compile/​VOTRENOYAU
 +make depend
 +make
 +</​code>​
 +
 +==== 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 :
 +
 +<​code>​
 +#!/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}
 +</​code>​
 +
 +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)