Contenu de la page
Aller au menu contextuel - Aller au menu principal
Gentoo sur un IBM OpenPower 720
| Auteur: | Laurent Guyon - Adelux |
|---|
Documents interessants concernant Gentoo sur PPC64 :
- page du mainteneur de port PPC64 de gentoo :
http://dev.gentoo.org/~tgall/ - serveur FTP contenant divers fichiers de config :
ftp://ftp.linuxppc64.org/pub/people/tgall/gentoo-ppc64
Channel IRC :
- serveur: freenode
- chan: #gentoo-ppc64
- 1 Généralités
- 2 Installation de la Gentoo
- 2.1 Démarrage du serveur sur le CD et prise en main
- 2.2 Partitionnement
- 2.3 Stage 3
- 2.4 Configuration des options de compilation
- 2.5 Chrootage dans notre futur systeme
- 2.6 Mise a jour de l'arbre Portage
- 2.7 Variable USE
- 2.8 Compilation du noyau
- 2.9 Configuration du nouveau système
- 2.10 Installer le système de journalisation
- 2.11 Installation du bootloader
- 2.12 Reboot :)
- 2.13 Troubleshooting
1 Généralités
1.1 Config matérielle du serveur OpenPower 720
- Processeur: processeur Power5 (G5) à 1.6 GHz
- Mémoire : 4 Go
- Video : Matrox
- Reseau : Carte Intel Gigabit Ethernet PRO/1000
- SCSI : Mylex Gemstone
L'IBM OpenPower est consideré comme un "pSeries".
Cette machine est dérivée des AS/400, respectant les memes principes, mais conçue spécialement pour y installer du Linux.
Le principe est qu'on peut y faire tourner plusieurs systèmes simultanément, ceci en créant plusieurs "partitions". Une "partition" dans le monde pSeries correspond en fait à une instance, une partie des ressources allouées à un système. En effet unje "partition" c'est tout d'abord de l'espace disque, mais aussi un pourcentage de mémoire et de processeur utilisable.
C'est avec l'aide d'une HMC (console de management, installée sur une machine à part, reliée au serveur OpenPower par un cable RJ45 sur son port HMC) que l'on créé / détruit / configure les partitions, et qu'on les démarre / arrête.
1.2 Consoles d'affichage
Sur cette machine, l'affichage correspondant à une partition (= une instance = un système) peut etre envoye dans 3 consoles au choix :
- soit un ecran normal branché sur la sortie de la carte video,
- soit une console branchee sur le port console serie (console serie),
- soit une console par reseau sur la HMC (console HVC)
1.3 Openfirmware
Openfirmware est une couche qui tourne sur la machine depuis le demarrage jusqu'a ce que le noyau linux prenne la main du système. Elle prend en charge tout le matériel. Il faut donc que le bootloader (yaboot) connaisse le nom du disque sur lequel il doit booter sous leur nomenclature Openfirmware, sinon il sera incapable de trouver le disque ! Le noyau Linux doit aussi supporter diverses fonctionnalités relatives à Openfirmware.
2 Installation de la Gentoo
Suivre les informations du handbook Gentoo PPC64, et les informations supplémentaires relatives à Gentoo sur PPC64 disponibles ici
http://dev.gentoo.org/~tgall/
Pour installer le Gentoo, nous allons utiliser le live CD disponible sur le site de tgall : install-ppc64-pSeries-minimal-2004.3-update2.iso
Le profile Gentoo 2004.3 version PPC64 utilise gcc-3.4.1, qui inclu les optimisations pour processeur power5.
2.1 Démarrage du serveur sur le CD et prise en main
Il faut tout d'abord commencer par configurer la "partition" de l'OpenPower pour pouvoir booter sur le CDROM. Cela se fait dans le menu SMS de Openfirmware que l'on obtient au démarrage de la "partition". Aller dans "Select boot options", puis."Configure boot device order". Deja on va mettre le lecteur de CD en premier, aller dans "Select 1st boot device", "List all devices". Selectionner le lecteur de CDROM et faire "Set boot sequence".
Revenir à l'écran précédent et cette fois nous allons mettre le disque dur en seconde position, aller dans "Select 2nd boot device", puis "List all devices". Selectionner le disque dur souhaité, mais cette fois, avant de valider nous allons regarder les "Informations" relatives à ce disque. Le champs "Device information" se trouve le nom "Openfirmware" du disque, par exemple dans notre cas
/pci@800000020000003/pci@2,4/pci1069,b166@1/scsi@0/sd@5,0
Cette information est cruciale pour la configuration du bootloader, il faut onserver ce nom précieusement. Revenir à l'écran précédent et valider avec "Set boot sequence".
Revenir au menu principal du menu
Une fois que c'est fait, revenir au menu principal de SMS en appuyant sur "M" et quitter le menu avec "X", la partition va réellement démarrer.
La "partition" démarre sur le CD sans problème, et à l'invite "boot:" nous sélectionnons de démarrer sur le noyau "power5".
Tout se passe bien mis à part qu'on se retrouve dans une console dont les caracteres sont illisibles (aparemment des problemes de charset ou de little/big endian)
Qu'à cela ne tienne, aparemment la carte reseau est bien reconnue (le resultat d'un "ifconfig eth0" ressemble à une sortie normale d'un ifconfig), nous configurons donc le réseau en aveugle, démarrons un serveur SSH et nous poursuivrons l'installation à distance :
# loadkeys fr # passwd -> test # ifconfig eth0 1.1.1.3 up # /etc/init.d/ssh start
La première chose à faire est de définir la passerelle par défaut, pour pouvoir accéder à Internet :
# route add default gw 1.1.1.1
Puis il faut définir dans le fichier /etc/resolv.conf l'adresse du serveur DNS à utiliser :
nameserver 1.1.1.2
Nous commencons l'installation en stage 3 car nous ne disposons pas d'une grande quantité de temps, et le but n'est pas d'optimiser le système.
2.2 Partitionnement
Un fdisk -l nous informe que des partitions sont deja existantes sur le disque dur
# fdisk -l Disk /dev/sda: 73.4 GB, 73407488000 bytes 128 heads, 32 sectors/track, 35003 cylinders Units = cylinders of 4096 * 512 = 2097152 bytes Device Boot Start End Blocks Id System /dev/sda1 * 1 1 2032 41 PPC PReP Boot /dev/sda2 10 522 1050624 82 Linux swap /dev/sda3 523 35003 70617088 83 Linux
Il ne faut surtout pas toucher à la première partition (sda1) car elle contient les informations de boot (yaboot).
Nous ne repartitionnons pas le disque, il est tres bien comme ca (1Go de swap et 70 Go pour la partition /). Si l'on voulait re-partitionner le disque, il aurait fallu utiliser cfdisk ou fdisk comme d'habitude, mais sans toucher à la partition /dev/sda1 !!!
Nous nous contentons donc de formatter les partition /dev/sda2 et /dev/sda3
# mkswap /dev/sda2 # swapon /dev/sda2 # mkfs.ext3 /dev/sda3
Puis nous montons la partition /dev/sda3, future partition / de notre système
# mount /dev/sda3 /mnt/gentoo
2.3 Stage 3
Nous avons choisi de faire une installation en partant du stage 3, il nous faut donc telecharger (il n'y a pas de stage sur le CD live) et installer sur notre futur système le contenu de l'archive "stage3" pour ppc64.
La dernière version à ce jour est la version 2004.3. L'archive à télécharger se nomme donc "stage3-ppc64-2004.3.tar.bz2", et est disponible sur tous les mirroirs Gentoo, dans la partie PPC64, Release, 2004.3, Stages.
Il faut donc la décompresser dans notre futur système
# cd /mnt/gentoo # tar -xvjpf stage3-ppc64-2004.3.tar.bz2
2.4 Configuration des options de compilation
Voici les options de compilation que nous avons choisies :
- C'est un bi-processeur Power5, et il existe des options d'optimisation pour power5 dans gcc-3.4.1
- Ce serveur dispose de 2 processeurs, mais linux en detecte 4, nous disposons donc virtuellement de 4 processeurs, nous pouvons donc définir à 5 le nombre maximum de processus de compilation concurrentes) :
- Il faut mettre le mot clé "ppc64" dans la variable USE !!!
/etc/make.conf
CHOST="powerpc64-unknown-linux-gnu"
CFLAGS="-mcpu=power5 -mtune=power5 -02 -pipe -fomit-frame-pointer"
CXXFLAGS="${CFLAGS}"
MAKEOPTS="-j5"
USE="ppc64"
2.5 Chrootage dans notre futur systeme
C'est parti
# cp -L /etc/resolv.conf /mnt/gentoo/etc/resolv.conf # mount -t proc none /mnt/gentoo/proc # mkdir /mnt/gentoo/dev # mount -o bind /dev /mnt/gentoo/dev # chroot /mnt/gentoo /bin/bash # env-update # source /etc/profile
Verifions quel est le gcc utilisé
# gcc -v Thread model: posix gcc version 3.4.1 20040803 (Gentoo Linux 3.4.1-r3, ssp-3.4-2, pie-8.7.6.5)
gcc 3.4.1 est parfait car il dispose d'optimisations pour le power5
on voit aussi qu'il utilise les posix threads (nptl) et non les linuxthreads, ce qui est parfait :)
2.6 Mise a jour de l'arbre Portage
Cette fois nous pouvons mettre à jour l'arbre Portage
# emerge sync
Verifions quel profile est utilisé
# ls -l /etc/make.profile /etc/make.profile -> ../usr/portage/profiles/default-ppc64-2004.3
C'est un ancien profile, maintenant il est mieux d'utiliser les nouveaux profiles cascadés (intégrant un principe d'héritage).
Les profiles disponibles sont dans /usr/portage/profiles/
Le profile cascadé suivant est disponible
/usr/portage/profiles/default-linux/ppc64/2004.3
Nous allons donc l'utiliser
# rm /etc/make.profile # ln -s /usr/portage/profiles/default-linux/ppc64/2004.3 /etc/make.profile
D'après les notes du site http://dev.gentoo.org/~tgall/ il faut mettre à jour portage si on a choisi un profile 2004.3
# emerge -UO portage
2.7 Variable USE
Cette fois il faut configurer notre variable USE (/etc/make.conf) Tout d'abord l'option "ppc64" est obligatoire comme nous l'avons vu. Nous n'allons pas installer d'environnement graphique ni configurer le son. Nous mettons l'option "ntpl" pour compiler le libc avec les Native Posix Thread" au lieu des "LinuxThreads", ils sont plus rapides.
USE="ppc64 nptl -java dvd"
Le contenu de l'archive stage3 est compilé avec l'option ntpl (dixit tgall), donc pas de probleme :)
2.8 Compilation du noyau
Il faut maintenant compiler le noyau de notre futur systeme. Il est conseillé d'utiliser les sources "gentoo-dev-sources" (noyau 2.6 avec des patches gentoo) pour un processeur PPC64.
# emerge gentoo-dev-sources -> il instale les sources du noyau 2.6.9-gentoo-r9
Commencons par regarder la liste des peripheriques
# lspci 0000:00:02.0 PCI bridge: IBM: Unknown device 0188 (rev 03) 0000:00:02.2 PCI bridge: IBM: Unknown device 0188 (rev 03) 0000:00:02.3 PCI bridge: IBM: Unknown device 0188 (rev 03) 0000:00:02.4 PCI bridge: IBM: Unknown device 0188 (rev 03) 0000:00:02.6 PCI bridge: IBM: Unknown device 0188 (rev 03) 0000:c8:01.0 USB Controller: NEC Corporation USB (rev 43) 0000:c8:01.1 USB Controller: NEC Corporation USB (rev 43) 0000:c8:01.2 USB Controller: NEC Corporation USB 2.0 (rev 04) 0000:cc:01.0 Unknown mass storage controller: Promise Technology, Inc. 20275 (rev 01) 0000:d8:01.0 PCI bridge: Hint Corp HB6 Universal PCI-PCI bridge (non-transparent mode) (rev 15) 0000:d9:00.0 VGA compatible controller: Matrox Graphics, Inc. MGA G400 AGP (rev 85) 0001:00:02.0 PCI bridge: IBM: Unknown device 0188 (rev 03) 0001:00:02.2 PCI bridge: IBM: Unknown device 0188 (rev 03) 0001:00:02.4 PCI bridge: IBM: Unknown device 0188 (rev 03) 0001:00:02.6 PCI bridge: IBM: Unknown device 0188 (rev 03) 0001:c8:01.0 Ethernet controller: Intel Corp. 82546EB Gigabit Ethernet Controller (Copper) (rev 01) 0001:c8:01.1 Ethernet controller: Intel Corp. 82546EB Gigabit Ethernet Controller (Copper) (rev 01) 0001:d0:01.0 SCSI storage controller: Mylex Corporation Gemstone chipset SCSI controller (rev 04)
La carte SCSI est une Mylex Gemstone (driver IPR = IBM Power Linux Raid) La carte reseau est une Intel Gigabit Ethernet 82546EB (driver e1000) Lspci nous dit que la carte graphique est une Matrox G400, mais en fait c'est une Matrox GXT135 en fait !!! donc pas besoin d'AGP ni de DRM
voici les options qu'il ne faut pas oublier (il y a un exemple de configuration dans le fichier arch/ppc64/configs/pSeries_defconfig, il y a un autre exemple de a l'adresse ftp://ftp.linuxppc64.org/pub/people/tgall/gentoo-ppc64/pSeries.config)
+ general setup
- support for paging of anonymous memory
- system V IPC
- sysctl support
- kernel log buffer size = 17 (128 Ko)
- support for hotpluggable devices
+ platform support
- type = Generic
- selectionner IBM pSeries & new iSeries
- support for VMX (Altivec) vector unit
- SMP, distribute interrupts on all CPU, 32 cpu max
- Preemptible kernel -> au choix
- Proc interface to RTAS et les sous options en module
- LPAR configuration data
+ general setup
- kernel support for ELF
- legacy /proc/pci support
- PCI device name database
- PCI hotplug support en module , RPA PCI hotplugging, RPA dynamic
- support for OpenFirmware device tree in /proc !!!
+ device drivers
- generic driver : select only driver that dont need compile-time ...
prevent firmware from beeing built
- block devices : floppy, loopback device support
ram disk support, size=4096, initial ram disk (initrd)
- SCSI : legacy /proc/scsi support
SCSI disk, SCSI cdrom, SCSI generic support
SCSI low-level drivers : IBM virtual scsi, IBM power linux raid
Sym53C8XX version 2 : 0, 16, 64
tous les Qlogic ISPxxxx en module
- network support : netpoll support, netpoll traffic trapping
tun/tap en module
Ethernet 10/100 : IBM VLAN Virtual Ethernet (module)
Intel PRO/100+
Ethernet 1000 : Intel Pro/1000 Gigabit, tigon3 (tg3)
Ethernet 10000 : Intel PRO/10GbE (en module)
- input device : legacy /dev/psaux, 1024 x 768
i8042 PC keyboard; AT keyboard, PS/2 mouse
- character devices : inotify file change
legacy (bsd) pty support
pSeries hypervisor virtual console server en dur
IBM hypervisor virtual console server en module !
sinon il se met par defaut sur console
HVC = HMC ! enfin je crois ...........
Raw driver, 256 number of Raw devices
- graphics : enable video mode handling helpers
Support for frame buffer, Openfirmware frame buffer device
sinon pas de support pour Openfirmware graphics !
Matrox acceleration, millenium I/II support, Mystique,
G100/G200/G400/G450/G550, multihead
Console display driver : framebuffer console support
Logo configuration : bootup logo, standard black, standard
16 color, standard 224 color
- USB : USB device filesystem,
EHCI HCD, OHCI HCD, USB mass storage
USB human interface device (pour clavier et souris USB !!!)
HID input layer support
/dev/hiddev support
+ file systems :
- ext2, ext3, reiserfs
- dnotify
- /dev fs (devfs), automatically mount at boot
- virtual memory fs support (shm fs)
- /proc fs
- /dev/pts fs
- hugeTLB fs
+ profiling support
- profiling support, Oprofile system profiling
+ kernel hacking
- kernel debugging : magic sysrq key, check for stack overflows,
stack utilization instrumentation,
enable debugger hooks, include xmon, enable xmon
+ crypto
- au choix, en module c'est mieux
+ library routines
- CRC-CCITT functions en module
- CRC32c en module
Attention, il n'y a pas de fichier arch/ppc64/boot/bzImage généré, seul un vmlinux est généré, à la racine des sources !!!
# cd /usr/src/linux # make menuconfig ... # make # make modules_install # cp vmlinux /boot/kernel-2.6.9-gentoo-r9 # cp System.map /boot/System.map-2.6.9-gentoo-r9
2.9 Configuration du nouveau système
Tout d'abord il faut construire le fichier /etc/fstab
# <fs> <mountpoint> <type> <opts> <dump/pass> /dev/sda3 / ext3 noatime 0 1 /dev/sda2 none swap sw 0 0 /dev/cdroms/cdrom0 /mnt/cdrom iso9660 noauto,ro 0 0 #/dev/fd0 /mnt/floppy auto noauto 0 0 none /proc proc defaults 0 0 none /dev/shm tmpfs defaults 0 0
Configuration réseau
# echo grosbill > /etc/hostname # echo waterdeep.fr > /etc/dnsdomainname # rc-update add domainname default
Configuration de la carte reseau (fichier /etc/conf.d/net)
iface_eth0="1.1.1.3 netmask 255.255.255.0" gateway="eth0/192.168.0.1"
Puis pour la monter automatiquement au démarrage
# rc-update add net.eth0 default
Enfin editer le fichier /etc/hosts
127.0.0.1 localhost 1.1.1.3 grosbill
Mot de passe root
passwd
Editer enfin le fichier rc.conf
KEYMAP="fr" SET_WINDOWKEYS="no" EXTENDED_KEYMAPS=
2.10 Installer le système de journalisation
Nous avons choisi metalog
# emerge metalog # rc-update add metalog default
2.11 Installation du bootloader
Le bootloader pour PPC est yaBoot. Il s'installe sur la premiere partition /dev/sda1. Il a besoin de connaitre les disques sous leur nom Openfirmware.
Il faut utiliser le package yaboot-static
# emerge --update yaboot-static
Il faut le configurer à la main car sur les IBM yabootconfig ne fonctionne pas
Tout d'abord il faut copier yaboot sur l'equivalent du MBR, la premiere partition nomée "RPeP partition" (/dev/sda1)
# dd if=/usr/lib/yaboot/yaboot.chrp of=/dev/sda1
Puis contruire le fichier /etc/yaboot.conf comme ceci (partition=3 = /dev/sda3)
# device = disque /dev/sda = disque SCSI d'ID 5, d'ou la 5 a la fin device=/pci@800000020000003/pci@2,4/pci1069,b166@1/scsi@0/sd@5,0: # partition = numero de la partition qui correspond au / = 3eme partition partition=3 root=/dev/sda3 default=2.6.9-gentoo-r9 timeout=50 image=/pci@800000020000003/pci@2,4/pci1069,b166@1/scsi@0/sd@5,0:3,/boot/kernel-2.6.9-gentoo-r9 label=2.6.9-gentoo-r9 #append="console=ttyS0,9600" #append="console=hvc0" read-only
2.12 Reboot :)
Croisez les doigts et ...
# exit # cd # umount /mnt/gentoo/dev # umount /mnt/gentoo/proc # umount /mnt/gentoo # reboot
Si tout va bien, le système demarre comme il faut et vous vous retrouvez dans une console NON illisible
# uname -a Linux grosbill 2.6.9-gentoo-r9 #6 SMP Mon Mar 7 15:27:20 CET 2005 ppc64 POWER5 (gr) CHRP IBM,9124-720 GNU/Linux
2.13 Troubleshooting
Si il boot bien, mais qu'il s'arrete apres avoir affiche le message :
returning from prom_init
C'est que l'affichage a ete envoye dans la mauvaise console, en effet on peut utiliser differentes consoles :
- soit un ecran normal branché sur la sortie de la carte video,
- soit une console branchee sur le port console serie (console serie),
- soit une console par reseau sur la HMC (console HVC)
Selon celle que l'on veut usiliser il faut passer l'option suivante au noyau (a mettre dans l'option append de yaboot.conf par exemple)
<@tgall_foo> if the hmc then console=hvc0
<@tgall_foo> if seral port then console=ttyS0,9600
<@tgall_foo> if video card, then which video card do you have ?
<@tgall_foo> you might need to pass video=ofonly but its not necessary,
en fait ne rien passer en append si on a un ecran normal ;)
En fait il continuie de booter, on peut meme le redemarre avec un "ctrl+alt+suppr", mais l'affichage est envoyé sur une autre console, ou alors c'est que le support pour les cartes openfirmware et la carte matrox n'est pas compilé dans le kernel, voir partie configuration du noyau ...
