Je voulais installer OpenBSD sur une machine Alpha. Mais comme ces machines sont anciennes , elles utilisent des disques SCSI qui sont certes plus robustes, mais qui font aussi beaucoup de bruit. Je voulais pouvoir faire tourner la machine sans casque anti-bruit. Je propose donc une solution pour booter sur le disques SCSI puis faire en sorte que le système utilise le disque IDE pour le reste du temps en modifiant le noyau. Pour ce faire, il faut ajouter une carte PCI/IDE compatible et un disque IDE dans la machine. Le disque IDE donne aussi de meilleurs temps de réponse ce qui est un plus non négligeable. La prochaine étape sera de passer sur un disque SATA. Juste pour le fun !
Il faut donc faire 2 installations. Une sur le disque SCSI et
une sur le disque IDE.
Installation standard sur sd0 (le disque SCSI) :
>>> boot DKA400 (adresse du CDROM)
Pour différencier la machine bootant sur le disque SCSI et celle bootant sur le disque IDE, j'utilise alpha-scsi pour le SCSI et alpha-ide pour l'IDE. Pour partitionner le disque SCSI, je propose une configuration simple : 1 seule partition. Au final, on n'aura plus besoin de ce disque qu'au démarrage.
/dev/sd0a / ffs rw 1 1
Faire ensuite une installation standard sur (le disque IDE). Le disque n'est pas présent sur l'interface SRM, mais comme la carte PCI/IDE est reconnue par le CD d'installation d'OpenBSD, il est possible d'installer un système dessus. Comme précédemment :
>>> boot DKA400 (adresse du CDROM)
On donne le nom alpha-ide à la machine. Le partitionnement est là plus élaboré, puisque ce sera le disque final de la machine. A chacun d'adapter en fonction de ses besoins. J'utiliserai la partition /dev/wd0f pour les sources du noyau et sa recompilation. Je profiterai ainsi de meilleures performances en I/O disque. Voici donc la fstab correspondante :
/dev/wd0a / ffs rw 1 1
/dev/wd0f /home ffs rw,nodev,nosuid 1 2
/dev/wd0d /usr ffs rw,nodev 1 2
/dev/wd0e /var ffs rw,nodev,nosuid 1 2
Démarrer alpha-scsi en bootant la machine sur sd0 (le disque SCSI)
Seuls les disques SCSI sont vus par SRM (le "bios" de Digital).
>>> boot dka0
On assiste au premier démarrage de la machine sur son disque
SCSI.
Je propose de monter la future partition /home du disque IDE sur le
/usr/src du disque SCSI. Ceci permettra de gagner du temps lors de la
décompression des sources. On pourra ensuite
déplacer ces
sources une fois la machine démarrée sur le
disque IDE.
[alpha-scsi]# mount /dev/wd0f /usr/src
La récupération des sources pour recompiler le noyau se fait de deux façons différentes
Soit sur un référentiel OpenBSD : il faut alors copier les fichiers src.tar.gz et sys.tar.gz à copier dans /usr/src :
[alpha-scsi]# cp src.tar.gz /usr/src
[alpha-scsi]# cp sys.tar.gz /usr/src
puis exécuter un tar xvzf src.tar.gz et enfin un tar xvzf sys.tar.gz.
Soit sur le serveur CVS :
[alpha-scsi]# cd /usr
[alpha-scsi]# export CVSROOT=anoncvs@anoncvs.skyrock.com:/cvs/openbsd
[alpha-scsi]# cvs -d$CVSROOT checkout -rOPENBSD_4_0 -P src
Avant de créer un nouveau kernel, il est plus sage d'effectuer une copie de sauvegarde du kernel actuel.
[alpha-scsi]# cp /bsd /bsd.orig
Modification du disque "root" dans le fichier /usr/src/sys/arch/alpha/conf/GENERIC. C'est là qu'on positionne l'aiguillage qui indiquera au système que son disque est le disque IDE et non celui sur lequel il vient de booter.
Pour celà, on commente la ligne "config bsd swap generic", et on ajoute la ligne "config bsd root on wd0a".
C'est l'étape qui prend le plus de temps. Comme la machine tourne sur son disque SCSI qui est bruyant, c'est l'occasion d'aller faire autre chose dans une autre pièce. Ou d'aller se promener s'il fait beau :o)
[alpha-scsi]# cd /usr/src/sys/arch/alpha/conf
[alpha-scsi]# config GENERIC
[alpha-scsi]# cd ../compile/GENERIC
[alpha-scsi]# time make clean
temps sur Alphastation 200 :
0m7.23s real
0m3.62s user
0m1.86s system
temps sur Alphastation 800 :
0m1.57s real
0m0.44s user
0m0.46s system
[alpha-scsi]# time make depend
temps Alphastation 200 :
11m25.87s real
8m17.18s user
2m47.30s system
temps Alphastation 800 :
5m17.31s real
3m39.87s user
1m9.82s system
[alpha-scsi]# time make
[...lots of output...]
temps Alphastation 200 :
254m18.35s real
239m28.79s user
11m33.38s system
(Soit 4h16 minutes)
temps Alphastation 800
114m4.04s
real 107m5.85s user
5m9.55s system
Pour suivre l'avancée de la compilation on peut regarder combien de fichiers sont présents dans /usr/src/sys/arch/alpha/compile/GENERIC. Le nombre de fichiers est dépendant de la version l'OpenBSD. 825 fichiers pour une 4.2. (cette méthode n'est pas très fiable, je n'ai pas fait de tests pour la valider. Mais le principe est là ). J'ai fait mon installation le 17 Octobre. Je compte donc le nombre de fichiers créés à cette date.
[root@alpha-scsi]# cd /usr/src/sys/arch/alpha/compile/GENERIC/
[root@alpha-scsi]# ls -rtl | grep "Oct 17" | wc -l
825
On touche au but. Le noyau est recompilé, il ne reste plus qu'à l'installer :
[root@alpha-scsi]# make install
rm -f /obsd
ln /bsd /obsd
cp bsd /nbsd
mv /nbsd /bsd
On redémarre la machine pour qu'elle prenne en compte ce nouveau noyau :
[root@alpha-scsi]# reboot
On assiste au démarrage de la machine sur son disque SCSI, puis le disque IDE prend le relais. Le système procédera notamment à la génération des clés RSA/DSA pour OpenSSH.
Une fois le nouveau kernel (/bsd
du disque SCSI) chargé,
c'est le système sur le disque IDE qui sera
utilisé.
On peut donc stopper le disque SCSI qui tourne pour rien :
[alpha-ide]# scsi -f /dev/rsd0c -v -c "1b 0 0 0 0 0"
SCIOCCOMMAND ioctl: Command accepted.
return status 1 (Command Timeout) after 2000 ms host adapter status 254
Command out (6 of 6):
1b 00 00 00 00 00
No sense sent.
Cette ligne de commande peut-être ajoutée dans le fichier /etc/rc.local (qui est quant à lui sur le disque IDE).
À faire pour remettre les sources à leur place et récupérer /home : déplacer le contenu du point de montage /home/* vers /usr/src :
[root@alpha-ide]# mv /home/* /usr/src/
On notera que la carte PCI/IDE utilise une puce reconnue par OpenBSD.
[root@alpha-ide]# dmesg
AlphaStation 200 4/233, 233MHz
8192 byte page size, 1 processor.
total memory = 134217728 (131072K)
2 disks SCSI testés :
sd0 at scsibus0 targ 0 lun 0: <SEAGATE, ST34573N,5742>SCSI2 0/direct fixed
sd0 at scsibus0 targ 2 lun 0: <SEAGATE, ST318404LSUN18G,5221>SCSI3 0/direct fixed
1 carte PCI/IDE testée :
pciide0 at pci0 dev 12 function 0 "Promise PDC20268" rev 0x01: DMA,
channel 0 configured to native-PCI, channel 1 configured to native-PCI
pciide0: using isa irq 10 for native-PCI interrupt
wd0 at pciide0 channel 0 drive 0: <IC35L060AVV207-0>
wd0: 16-sector PIO, LBA48, 57220MB, 117187500 sectors
wd0(pciide0:0:0): using PIO mode 4, Ultra-DMA mode 2