~solevis

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.