Menu contextuel

Aller au menu principal - Aller au contenu

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 :

Channel IRC :

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 ...

Aller au menu contextuel - Aller au menu principal - Aller au contenu