NetBSD sur un iBook G4

Ce billet décrit l'installation du système NetBSD sur un iBook. Je me suis inspiré de cette page.

J'ai souhaité ne pas conservé MacOS X, donc NetBSD occupera la totalité du disque (56G). De plus, toute la configuration se fera avec un clavier en QWERTY.

Quelques remarques à propos de MacOS X

Pour démarrer à partir du CD, il faut obtenir le prompt Open Firmware. Il faut appuyer simultanément sur les touches commande + option + O + F.

La touche commande est celle où il y a la pomme. Option est la touche Alt.

/!\ Sous le prompt Open Firmware, le clavier est en QWERTY (pour les claviers AZERTY).

Ensuite on va modifier la valeur de l'auto-boot. Par défaut cette valeur est à true, on va la mettre à false.

 ok
0 > setenv auto-boot? false
0 > reset-all

Remarque : On peut faire la même chose sous MacOS X, dans la console tapez :

sudo su
nvram 'auto-boot?'='false'
exit

Let's go

Pour booter sur le CD à partir du prompt :

 ok
0 > boot cd:,ofwboot.xcf netbsd.macppc

On valide le choix de l'émulateur de terminal, mais on ne procède pas à l'installation, il faut choisir (S)hell.

Le partionnement

Depuis la version 5.0.x, l'outil de partionnement, pdisk(8) est présent dans le média d'installation.

/!\ LE CLAVIER EST EN QWERTY et LE SHELL /bin/sh

On peut lancer cette commande :

# /sbin/pdisk /dev/wd0c

Edit /dev/wd0c -
Command (? for help):

La lettre "c" correspond à la totalité du disque.

On va ré-initialiser la table des partitions grâce à l'option i. Cela a également pour effet de supprimer toutes les partitions.

Ensuite, on va créer une partition particulière, qui servira plus tard à stocker le fichier ofwboot.xcf. Cette partition doit être dans le format HFS ou HFS+.

  • option : C (C majuscule)
  • offset : 2p (car c'est la deuxième partition)
  • size : 32m
  • type : Apple_HFS
  • name : boot (le nom n'a aucune importance)

Maintenant, on va partitionner le disque pour installer le futur système.

Pour la racine :

  • option : c (c minuscule)
  • offset : 3p
  • size : 5g
  • bzb bit : a
  • name : root

Pour la swap :

  • option : c (c minuscule)
  • offset : 4p
  • size : 1g
  • bzb bit : b
  • name : swap

Pour la partition temporaire (/tmp) :

  • option : c (c minuscule)
  • offset : 5p
  • size : 512m
  • bzb bit : e
  • name : tmp

Pour la partition /var :

  • option : c (c minuscule)
  • offset : 6p
  • size : 1g
  • bzb bit : f
  • name : var

Pour la partition /usr :

  • option : c (c minuscule)
  • offset : 7p
  • size : 35g
  • bzb bit : g
  • name : usr

Pour la partition /home :

  • option : c (c minuscule)
  • offset : 8p
  • size : 8p (prend la totalité de l'espace libre)
  • bzb bit : h
  • name : home

L'option "p" affiche toutes les partitions (dans mon cas) :

Command (? for help): p

Partition map (with 512 byte blocks) on '/dev/wd0c'
 #:                type name     length   base     ( size )
 1: Apple_partition_map Apple        63 @ 1       
 2:           Apple_HFS boot      65536 @ 64       ( 32.0M)
 3:     Apple_UNIX_SVR2 root   10485760 @ 65600    (  5.0G) S0 RUFS k0  /
 4:     Apple_UNIX_SVR2 swap    2097152 @ 10551360 (  1.0G) S1  SFS k0  (swap)
 5:     Apple_UNIX_SVR2 tmp     1048576 @ 12648512 (512.0M) S2  UFS k0
 6:     Apple_UNIX_SVR2 var     2097152 @ 13697088 (  1.0G) S2  UFS k0
 7:     Apple_UNIX_SVR2 usr    73400320 @ 15794240 ( 35.0G) S2  UFS k0  /usr
 8:     Apple_UNIX_SVR2 home   28015680 @ 89194560 ( 13.4G) S2  UFS k0

Device block size=512, Number of Blocks=117210240 (55.9G)
DeviceType=0x0, DeviceId=0x0

Command (? for help): 

Pour connaître le véritable nom de chacune de nos partitions [1], on doit utiliser disklabel(8).

# disklabel /dev/wd0

# /dev/wd0c:
type: ESDI
disk: FUJITSU MHT2060A
[...]
8 partitions:
#        size    offset     fstype [fsize bsize cpg/sgs]
 a:  10485760     65600     4.2BSD      0     0     0  # (Cyl.     65*-  10467*)
 b:   2097152  10551360       swap                     # (Cyl.  10467*-  12548*)
 c: 117210240         0     unused      0     0        # (Cyl.      0 - 116279)
 d:     65536        64        HFS                     # (Cyl.      0*-     65*)
 e:   2097152  13697088     4.2BSD      0     0     0  # (Cyl.  13588*-  15668*)
 f:  73400320  15794240     4.2BSD      0     0     0  # (Cyl.  15668*-  88486*)
 g:   1048576  12648512     4.2BSD      0     0     0  # (Cyl.  12548*-  13588*)
 h:  28015680  89194560     4.2BSD      0     0     0  # (Cyl.  88486*- 116279)
disklabel: boot block size 0
disklabel: super block size 0

On constate, qu'il n'y a pas de correspondance entre pdisk et disklabel au niveau des partitions. Il faut se référer à la taille.

Il faut savoir que : 2097152 correspond à 1g, de plus a est toujours la racine, et b la swap. On peut ainsi déduire l'ordre des partitions par déduction.

On peut formater les partitions avec newfs(8). Il faudra préciser les partitions en raw device et non en bloc device (concrètement on rajoute la lettre "r").

# newfs -m 5 /dev/rwd0a
# newfs -m 5 /dev/rwd0e
# newfs -m 5 /dev/rwd0g
# newfs -m 5 /dev/rwd0f
# newfs -m 5 /dev/rwd0h

L'étape suivante consiste à créer le fichier /etc/fstab. Pour cela on va « monter » la partition racine, et créer les différents répertoires correspondant aux autres partitions.

# mount /dev/wd0a /mnt2
# mkdir /mnt2/etc
# mkdir /mnt2/tmp
# mkdir /mnt2/usr
# mkdir /mnt2/var
# mkdir /mnt2/home

Ne connaissant pas l'éditeur ed(1), je passe par la fonction echo pour écrire dans le fichier /mnt2/etc/fstab.

# echo "dev/wd0a   /   ffs   rw  1   1" > /mnt2/etc/fstab
# echo "/dev/wd0b   none  swap  sw  0   0" >> /mnt2/etc/fstab
# echo "/dev/wd0e   /var  ffs   rw,nocoredump   1   2" >> /mnt2/etc/fstab
# echo "/dev/wd0f   /usr  ffs   rw,nocoredump   1   2" >> /mnt2/etc/fstab
# echo "/dev/wd0g   /tmp  ffs   rw,nocoredump   1   2" >> /mnt2/etc/fstab
# echo "/dev/wd0h   /home   ffs   rw,nocoredump   1   2" >> /mnt2/etc/fstab

On « démonte » la partition, et on lance sysinst. Il faut choisir cette fois-ci Réinstaller des composants.

Si tout c'est parfaitement déroulé, on quitte sysinst pour récuper le shell. On va réaliser un chroot(8) pour commencer à configuer notre système.

# mount -o rw /dev/wd0a /mnt2
# mount -o rw /dev/wd0f /mnt2/usr
# mount -o rw /dev/wd0e /mnt2/var

La partition /var n'est pas nécessaire, par contre si vous comptez utiliser vi(1), il la faut pour /var/tmp/vi.recover.

# chroot -u root /mnt2 /bin/ksh

A partir de là, on est à la racine de notre système. On va tout d'abord mettre le clavier en AZERTY.

# wsconsctl -w encoding=fr

Ensuite on va éditer le fichier /etc/rc.conf, voici un extrait :

[...]
# If this is not set to YES, the system will drop into single-user mode.
#
rc_configured=YES

# Add local overrides below
#
wscons=YES

dhclient=YES                          
hostname=brigand.errements.net        
net_interfaces="gem0"
critical_filesystems_local="/var"     

clear_tmp=YES

sshd=YES
cron=YES
postfix=NO

ntpdate=YES
ntpdate_hosts="ntp.obspm.fr"

Les deux premiers paramètres sont les plus importants.

Dans le fichier /etc/wscons.conf on rajoute cette ligne :

[...]
# Select a kernel builtin keyboard map by uncommenting the following line and  
# altering the country code to your requirements
# (choose from user, us, uk, de, dk, it, fr, jp, sv, no, es, pt, cz, hu).      
# See wsconsctl(8), pckbd(4), ukbd(4) etc. for more details.
encoding fr
[...]

Pour préparer les futurs utilisateurs les fichiers à modifier / créer :

  • /etc/login.conf
  • /etc/skel

On est prêt à redémarrer la machine. Il faut connaître le numéro de la partition racine, si on l'a oublié, pdisk.

# exit
# halt

Fin de l'installation

/!\ Il faut conserver le CD dans le lecteur.

Au prompt de l'OpenFirmware :

 ok
0 > boot cd:,ofwboot.xcf hd:3,/netbsd

Normalement la connexion réseau devrait être établie, on va pouvoir installer hfsutils. Là il y a plusieurs méthodes :

  • par compilation, via pkgsrc
  • en le téléchargeant par ftp / pkg_add(1) ou pkgin

A l'heure où j'écris ces lignes, le pkgsrc-bulk pour les PowerPC donne ça comme résultat :

pkgsrc 2010Q1 bulk build results
NetBSD 5.1/powerpc
Compiler: gcc

Summary:

        Build started:                  Wed May 26 07:34:32 2010 UTC
        Build ended:                    Thu Jun  3 23:42:33 2010 UTC

        Successfully packaged:          8266
        Packages really broken:         213
        Pkgs broken due to them:        283
        Total broken:                   496
        Not packaged:                   1
        Not available:                  292
        Total:                          497

source

On peut formater notre partition de boot (celle qui est formatée en HFS).

# hformat /dev/wd0d

On copie le fichier ofwboot.xcf du CD sur cette partition. Il faut au préalable « monter » le CD.

# mount -t cd9660 /dev/cd0a /mnt
# hcopy /mnt/ofwboot.xcf :

Le système est enfin prêt.

Dernières remarques

A chaque démarrage, pour booter, il faut écrire la ligne suivante :

 ok
0 > boot hd:2,ofwboot.xcf hd:3,/netbsd

On peut automatiser cette commande :

 ok
0 > setenv boot-device hd:2,ofwboot.xcf
0 > setenv boot-file hd:3,/netbsd
0 > reset-all

Désormais à chaque démarrage, au prompt, il suffira de taper boot.

Suivant le gestionnaire de bureaux choisit, il faudra créer les partitions /proc et /kern.

# mkdir /proc
# mount -t procfs proc /proc
# mkdir /kern
# mount -t kernfs kernfs /kern

On rajoute ces lignes au fichier /etc/fstab.

[...]
proc  /proc procfs  rw  0 0
kernfs  /kern kernfs  rw  0 0

Notes

[1] On parle généralement de slices.

Commentaires

1. Le samedi 31 juillet 2010, 20h47 par olivier

Un avant goût, pour de futurs articles, http://picasaweb.google.fr/duchatea...

2. Le mardi 3 août 2010, 20h55 par olivier

On peut mettre à jour la valeur de PKG_PATH, un nouveau pkgsrc-bulk-2010Q2 a été publié le 2 août.

http://mail-index.netbsd.org/pkgsrc...