Installation de NetBSD sur un Sheevaplug
Un howto qui date un peu, mais je n’avais pas encore eu l’occasion de le mettre sur le blog. Comme c’est un peu long j’ai mis le tout sur ma doc sphinx :
Introduction
Le port de NetBSD sur le Sheevaplug est disponible depuis Octobre 2010. Même si je rencontre quelques soucis d’utilisation je me permet de décrire une méthode simple pour installer NetBSD sur un Sheevaplug.
Toutes les manipulations ont été effectués sur MacOS X, mais c’est le même topo sur BSD, GNU/Linux, etc. Il faut toutefois NetBSD pour le partitionnement du support.
Il est tout à fait possible d’utiliser tftp et nfs pour s’amuser avec NetBSD sans avoir à se prendre la tête du choix d’un support physique.
Récupération des sources
Depuis CVS :
export CVS_RSH="ssh"
export CVSROOT="anoncvs@anoncvs.NetBSD.org:/cvsroot"
cvs checkout -A -P src
Pour mettre à jour les sources :
cvs update -A -Pd
Configuration du kernel
Par défaut la configuration du kernel est basique. Vous pouvez ajouter les options qui suivent si cela vous interesse.
cp sys/arch/evbarm/conf/SHEEVAPLUG sys/arch/evbarm/conf/SHEEVAPLUG_CUSTOM
$EDITOR sys/arch/evbarm/conf/SHEEVAPLUG_CUSTOM
Packet Filter :
options PFIL_HOOKS # pfil(9) packet filter hooks
pseudo-device pf # PF packet filter
pseudo-device pflog # PF log interface
Ne pas devoir choisir la partition root au boot (indispensable pour tout le monde je pense) :
config netbsd-sd0 root on sd0 type ffs
- Choix du device :
- sd0 correspond au disque en USB.
- ld0 correspond à la carte SD
- wd0 correspond au disque connecté au port e-sata (pas encore testé)
Compilation de NetBSD
./build.sh -m evbarm tools
./build.sh -u -U -m evbarm release
./build.sh -u -U -m evbarm kernel=SHEEVAPLUG
Partionnement
Effacer le disque
Pour s’assurer qu’un disque est complètement vide, il suffit de remplir de “zéro” le premier secteur du disque via dd. Par exemple pour sd4:
dd if=/dev/zero of=/dev/sd4d bs=8k count=1
Création des partitions
Pour utiliser NetBSD sur le Sheevaplug nous avons besoin au minimum de deux partitions. Une première contenant le kernel au format FAT32 et une seconde pour le système en lui même. La création des partitions passent par l’utilitaire fdisk.
fdisk -u sd4
...
Do you want to change our idea of what BIOS thinks? [n] n
Partition table:
0: <UNUSED>
1: <UNUSED>
2: <UNUSED>
3: <UNUSED>
Bootselector disabled.
No active partition.
Which partition do you want to change?: [none]
Partition FAT32 de 32MB (soit 65536 secteurs). Pour connaître le nombre de secteurs il suffit de faire un simple produit en croix. Par exemple pour 32MB : Je sais que j’ai 488397168 secteurs au total et 238475MB, donc il me faut (488397168 * 32) / 238475 = 65536 secteurs pour faire 32MB.
Which partition do you want to change?: [none] 0
The data for partition 0 is:
<UNUSED>
sysid: [0..255 default: 169] 11
start: [0..30401dcyl default: 63, 0dcyl, 0MB]
size: [0..30401dcyl default: 488397105, 30401dcyl, 238475MB] 65536
bootmenu: []
Partition FFS sur le reste du disque (garder les paramètres par défaut) :
Which partition do you want to change?: [none] 1
The data for partition 1 is:
<UNUSED>
sysid: [0..255 default: 169]
start: [0..30401dcyl default: 65599, 4dcyl, 32MB]
size: [0..30397dcyl default: 488331569, 30397dcyl, 238443MB]
bootmenu: []
Ce qui nous donne au final :
Partition table:
0: Primary DOS with 32 bit FAT (sysid 11)
start 63, size 65536 (32 MB, Cyls 0-4/21/16)
PBR is not bootable: All bytes are identical (0x00)
1: NetBSD (sysid 169)
start 65599, size 488331569 (238443 MB, Cyls 4/21/17-30401/80/63)
PBR is not bootable: All bytes are identical (0x00)
2: <UNUSED>
3: <UNUSED>
Pour prendre en compte les modifications :
Which partition do you want to change?: [none] none
Should we write new partition table? [n] y
Création des slices
aintenant que le disque est correctement formaté, il faut créer les différents slices de NetBSD. Il faut au minimum un slice pour /. Dans cet exemple j’organise mon disque de cette façon:
- kernel/FAT32 : 32MB (65536) [e]
- / : 1GB FFS (2097153) [a]
- swap : 2G (4194307) [b]
- /tmp : 512MB FFS (1048576) [f]
- /var : 2GB FFS (4194307) [g]
- /usr : * FFS (480991596) [h]
Pour calculer la taille de chaque slice en secteurs il faut utiliser la même méthode que pour fdisk : (secteurs_max_disque * taille) / taille_max_disque. Pour créer les slices on utilise disklabel. Pour chaque label (a, b, e, etc) il faut spécifier où celui-ci commence (offset) et sa taille (size). Pour connaitre le premier offset il suffit de lancer fdisk sd4 et de lire l’offset de notre première partition. Dans mon cas “start 63” donc 63. Pour les autres offset il suffit d’additionner la taille et l’offset du slice précédent.
disklabel -e sd4
...
8 partitions:
# size offset fstype [fsize bsize cpg/sgs]
a: 2097153 65599 4.2BSD 0 0 0 # (Cyl. 65*- 2145*)
b: 4194307 2162752 4.2BSD 0 0 0 # (Cyl. 2145*- 6306*)
c: 488331632 63 unused 0 0 # (Cyl. 0*- 484456*)
d: 488397168 0 unused 0 0 # (Cyl. 0 - 484520)
e: 65536 63 MSDOS # (Cyl. 0*- 65*)
f: 1048576 6357059 4.2BSD 0 0 0 # (Cyl. 6306*- 7346*)
g: 4194307 7405635 4.2BSD 0 0 0 # (Cyl. 7346*- 11507*)
h: 476797226 11599942 4.2BSD 0 0 0 # (Cyl. 11507*- 484520)
Explications:
- c correspond à l’emplacement de NetBSD sur le disque.
- d correspond à tout le disque
- e est la partition contenant le kernel
Création des filesystem
Pour la partition FAT32 :
newfs_msdos /dev/rsd4e
Pour les partitions FFS (NetBSD) :
newfs /dev/rsd4a
newfs /dev/rsd4f
newfs /dev/rsd4g
newfs /dev/rsd4h
Installation
Il faut tout d’abord monter chaque partitions :
mkdir /mnt/kernel
mount -t msdosfs /dev/sd4e /mnt/kernel
mkdir /mnt/sheeva
mount /dev/sd4a /mnt/sheeva
mkdir /mnt/sheeva/tmp
mount /dev/sd4f /mnt/sheeva/tmp
mkdir /mnt/sheeva/var
mount /dev/sd4g /mnt/sheeva/var
mkdir /mnt/sheeva/usr
mount /dev/sd4h /mnt/sheeva/usr
Ensuite il faut décompresser chaque sets sur le disque :
cd obj/releasedir/evbarm/binary/sets
tar xvzf base.tgz -C /mnt/sheeva
tar xvzf comp.tgz -C /mnt/sheeva
tar xvzf etc.tgz -C /mnt/sheeva
tar xvzf games.tgz -C /mnt/sheeva
tar xvzf man.tgz -C /mnt/sheeva
tar xvzf misc.tgz -C /mnt/sheeva
tar xvzf modules.tgz -C /mnt/sheeva
tar xvzf tests.tgz -C /mnt/sheeva
tar xvzf text.tgz -C /mnt/sheeva
Puis copier le kernel dans la partition FAT32 :
cd -
cd sys/arch/evbarm/compile/obj/SHEEVAPLUG
cp netbsd.ub /mnt/kernel
(ou si vous avez configuré la partition root dans le kernel)
cp netbsd-sd0.ub /mnt/kernel/netbsd.ub
(remplacer sd0 par le bon device ld0, wd0, etc)
Configuration
Avant de pouvoir brancher le disque et lancer NetBSD il est sage de configurer quelques fichiers.
etc/fstab
/dev/sd0a / ffs rw 1 1
/dev/sd0b none swap sw,dp 0 0
/dev/sd0f /tmp ffs rw 1 1
/dev/sd0g /var ffs rw 1 1
/dev/sd0h /usr ffs rw 1 1
etc/rc.conf
if [ -r /etc/defaults/rc.conf ]; then
. /etc/defaults/rc.conf
fi
# If this is not set to YES, the system will drop into single-user mode.
#
rc_configured=YES
# Add local overrides below
#
hostname=mon_host
# Daemons
sshd=YES
# Horloge
ntpdate=YES
ntpdate_hosts="pool.ntp.org"
# Reseau
dhclient=YES
dhclient_flags=mvgbe0
critical_filesystems_local="/var"
etc/mk.conf
NO_X11=YES
Ce ne sont que des exemples, libre à vous de les modifier comme bon vous semble.
Fin de l’installation
cd
sync
umount /mnt/sheeva/tmp
umount /mnt/sheeva/var
umount /mnt/sheeva/usr
umount /mnt/sheeva/
umount /mnt/kernel
Configuration du u-boot
Se connecter via la console série au Sheevaplug. Pour tester l’installation. Depuis un disque en USB :
Marvell>> usb start
Marvell>> fatload usb 0:1 0x2000000 netbsd.ub
Marvell>> bootm 0x2000000
Pour rendre la configuration permanente :
Marvell>> setenv bootcmd 'usb start; fatload usb 0:1 0x2000000 netbsd.ub; bootm 2000000'
Marvell>> saveenv
Marvell>> reset
Depuis une carte SD :
Marvell>> mmc init
Marvell>> fatload mmc 0:1 0x2000000 netbsd.ub
Marvell>> bootm 0x2000000
Marvell>> setenv bootcmd 'mmc init; fatload mmc 0:1 0x2000000 netbsd.ub; bootm 2000000'
Marvell>> saveenv
Marvell>> reset
Depuis TFTP :
Marvell>> tftpboot 2000000 netbsd.ub
Marvell>> bootm 2000000
Depuis un disque en E-SATA:
Marvell>> ide reset
Marvell>> fatload ide 0:1 0x2000000 netbsd.ub
Marvell>> bootm 0x2000000
Marvell>> setenv bootcmd 'ide reset; fatload ide 0:1 0x2000000 netbsd.ub; bootm 2000000'
Marvell>> saveenv
Marvell>> reset
First boot
login: root
passwd
user -m -G wheel foo
passwd foo
Problèmes
Les bugs que j’ai recontré durant mon utilisation de NetBSD sur mon Sheevaplug :
Console série
Si on utilise pendant un trop long moment NetBSD depuis la console série (minicom, screen, etc) celui-ci crash tout bêtement. Par contre aucun soucis via SSH.
sdmmc0: couldn’t enable card
Lors du boot de NetBSD si aucune carte SD n’est inséré on a un beau flood de :
sdmmc0: couldn't enable card
Le seul moyen d’y remédier pour le moment c’est d’insérer une carte au boot, ou à l’apparition des messages. Ensuite elle peut être enlevé sans aucun soucis.
A l’avenir je mettrai plutôt mes howto sur le sphinx. Je trouve plus sympa à lire que sur un blog.