Installation de NetBSD 6.0_BETA sur un Sheevaplug
Vu que j’ai réparé mon Sheevaplug, j’ai décidé de re-installer dessus NetBSD. Profitant de la sortie en BETA de NetBSD 6.0 avec le support du Sheevaplug (seulement dans current auparavant), j’ai mis à jour ma documentation pour l’installation de NetBSD 6.0 BETA sur un Sheevaplug. L’ancienne documentation cible toujours la branche current de NetBSD.
Introduction
Je reprend ma précédente doc mais en me focalisant seulement sur la branch 6.0_BETA de NetBSD. De plus je pars du fait que l’installation se fait sur un disque connecté en e-sata au Sheevaplug.
Récupération des sources
Depuis CVS :
export CVS_RSH="ssh"
export CVSROOT="anoncvs@anoncvs.NetBSD.org:/cvsroot"
cvs checkout -r netbsd-6 -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
Support du SATA (pour la version avec port e-sata) :
mvsata* at mvsoc? offset ? irq ?
wd* at atabus? drive ? flags 0x0000
(atabus* at ata?
atapibus* at atapi?)
Ne pas devoir choisir la partition root au boot (indispensable pour tout le monde je pense) :
config netbsd-wd0 root on wd0 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
Compilation de NetBSD
./build.sh -m evbarm tools
./build.sh -u -U -m evbarm release
./build.sh -u -U -m evbarm kernel=SHEEVAPLUG_CUSTOM
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_CUSTOM
cp netbsd.ub /mnt/kernel
(ou si vous avez configuré la partition root dans le kernel)
cp netbsd-wd0.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/wd0a / ffs rw 1 1
/dev/wd0b none swap sw,dp 0 0
/dev/wd0f /tmp ffs rw 1 1
/dev/wd0g /var ffs rw 1 1
/dev/wd0h /usr ffs rw 1 1
Remplacer wd0 par le bon device que vous allez utiliser (sd0, ld0, etc)
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
# Clock
ntpdate=YES
ntpdate_hosts="pool.ntp.org"
# Network
dhcpcd=YES
ifconfig_mvgbe0="dhcp"
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 1:1 0x2000000 netbsd.ub
Marvell>> bootm 0x2000000
Marvell>> setenv bootcmd 'ide reset; fatload ide 1:1 0x2000000 netbsd.ub; bootm 2000000'
Marvell>> saveenv
Marvell>> reset
First boot
login: root
passwd
useradd -m -G wheel foo
passwd foo
Problèmes
Depuis NetBSD 6.0_BETA je n’ai encore jusqu’à présent connu aucun soucis.