Mot-clé - Gentoo

Fil des billets

15sept. 2009

Xen bridge IPv6 support

Xen_logo.png
A chaque mise à jour de Xen je me retrouve confronté à un bug causé par le support IPv6 compilé dans le kernel.
Ce petit bug est présent depuis près d'une année il sera peut être un jour corrigé, en attendant voici le patch à utiliser (ça m'évitera d'avoir à le rechercher la prochaine fois)

--- /etc/xen/scripts/network-bridge~	2008-06-03 14:50:29.000000000 +0100
+++ /etc/xen/scripts/network-bridge	2008-06-03 14:50:29.000000000 +0100
@@ -90,7 +90,7 @@
 tdev=tmpbridge
 
 get_ip_info() {
-    addr_pfx=`ip addr show dev $1 | egrep '^ *inet' | sed -e 's/ *inet //' -e "s/$1//"`
+    addr_pfx=`ip addr show dev $1 | egrep '^ *inet ' | sed -e 's/ *inet //' -e "s/$1//"`
     gateway=`ip route show dev $1 | fgrep default | sed 's/default via //'`
 }



Patch : xen-vif-bridge-ipv6-225715.diff
Lien : Gentoo Bug 225715

27août 2009

myisamchk error Not enough memory for blob

mysql_logo.gif
Une nouvelle erreur apparu sur une table corrompu suite à un crash Mysql pour manque de RAM (Out of memory).

Tout d'abord un petit rappel sur la façon qu'utilise le moteur MyISAM pour la gestion des tables :

  1. wordpress_postmeta.MYD - la table où tous les enregistrements sont stockés.
  2. wordpress_postmeta.MYI - l'index pour les tables.
  3. wordpress_postmeta.frm - le schéma de la table.


Voici l' erreur rencontrée lors de la réparation de la table :

srv1234 ~ # myisamchk -r /var/lib/mysql/wordpress/wordpress_postmeta.MYI
 
- recovering (with sort) MyISAM-table '/var/lib/mysql/wordpress/wordpress_postmeta.MYI'
Data records: 31769
- Fixing index 1
Wrong block with wrong total length starting at 94358749
myisamchk: error: Not enough memory for blob at 94358800
MyISAM-table '/var/lib/mysql/wordpress/wordpress_postmeta.MYI' is not fixed because of errors

Cela se produit parce que l'entrée de l'index invalide indique que la taille d'un champ BLOB est plus grande que celle spécifié entre parenthèse. La correction a été assez simple, il suffit d'ajouter l'option --max-record-length=0.

srv1234 ~ # myisamchk --max-record-length=0 -r /var/lib/mysql/wordpress/wordpress_postmeta.MYI

Dans le cas présent la valeur --max-record-length=0 permet de ne définir aucune limitation sur la taille du champ BLOB.

22juil. 2009

Xen installation de windows avec support VNC

Xen_logo.png
Je dispose d'un processeur supportant la virtualisation matérielle, je vais donc m'atteler à l'utilisation un système Windows en tant que DomU Xen (Je passe volontairement les pré-requis CPU/BIOS). Pour ce faire je vais devoir activer le support VNC pour Xen, le Dom0 Xen ne disposant que d'un accès SSH.

De nombreux how to 's existent sur la toile néanmoins ces derniers sont rarement à jour, le use flag "vnc" ayant par exemple disparu sous Gentoo.

Enfait rien de bien spécial à faire, le support est inclus nativement, voici la configuration que j'ai adopté :

Informations systèmes :

dom0 ~ # equery l xen
[ Searching for package 'xen' in all categories among: ]
 * installed packages
[I--] [ ~] app-emulation/xen-3.3.1-r1 (0)
[I--] [ ~] app-emulation/xen-tools-3.3.1 (0)
[I--] [M~] sys-kernel/xen-sources-2.6.21 (2.6.21)
[I--] [ ~] sys-kernel/xen-sources-2.6.30-r2 (2.6.30-r2)

Fichier de configuration DomU : /etc/xen/win2k3

import os, re
arch = os.uname()[4]
if re.search('64', arch):
    arch_libdir = 'lib64'
else:
    arch_libdir = 'lib'
kernel = "/usr/lib/xen/boot/hvmloader"
builder='hvm'
memory = 256
name = "win2k3"
vif = [ 'type=ioemu, bridge=xenbr0' ]
disk = [ 'phy:/dev/500/windows,ioemu:hda,w','file:/root/win2003.iso,hdc:cdrom,r' ]
boot = 'cd'
device_model = '/usr/' + arch_libdir + '/xen/bin/qemu-dm'
vnc=1
vnclisten="IP_Dom0"
vncdisplay=1
vncunused=0
keymap='fr'
usb='1'
usbdevice='tablet'

Fichier de configuration Dom0 : /etc/xen/xend-config.sxp

(xend-relocation-server yes)
(xend-relocation-hosts-allow '^localhost$ ^localhost\\.localdomain$')
(network-script network-bridge)
(vif-script vif-bridge)
(dom0-min-mem 196)
(enable-dom0-ballooning yes)
(dom0-cpus 0)
(vnc-listen '0.0.0.0')
(vncpasswd 'azerty')

L'accès au serveur crée sur le DomU Xen se fera au travers de VNC le temps de l'installation, le port à utiliser sera alors 5900 + vncdisplay soit dans le cas présent IP_Dom0:5901

Il est à noter que le lancement des DomU Xen sous Windows posait des problèmes lors du 2nd boot (après l'étape de formatage et de copie des fichiers d'installation), un upgrade vers le kernel 2.6.30-r2 a pour ma part résolu le problème.

27mai 2009

dev-util/subversion-1.6.2 Cannot allocate memory

Me voila confronté à une superbe erreur avec ma Gentoo toute neuve :)

/var/tmp/portage/dev-util/subversion-1.6.2/work/subversion-1.6.2/libtool: line 6628: /bin/sed: Cannot allocate memory
libtool: install: warning: `../../subversion/libsvn_subr/libsvn_subr-1.la' has not been installed in `/usr/lib'
libsandbox:  max_envp_len too big!
/var/tmp/portage/dev-util/subversion-1.6.2/work/subversion-1.6.2/libtool: line 6669: /bin/sed: Cannot allocate memory
/usr/bin/install -c  /var/tmp/portage/dev-util/subversion-1.6.2/image//usr/bin/svnadmin
libsandbox:  max_envp_len too big!
/var/tmp/portage/dev-util/subversion-1.6.2/work/subversion-1.6.2/libtool: line 6691: /usr/bin/install: Cannot allocate memory
make: *** [install-bin] Error 126
 * 
 * ERROR: dev-util/subversion-1.6.2 failed.
 * Call stack:
 *               ebuild.sh, line   49:  Called src_install
 *             environment, line 5883:  Called die
 * The specific snippet of code:
 *       emake -j1 DESTDIR="${D}" local-install || die "Installation of core of Subversion failed";
 *  The die message:
 *   Installation of core of Subversion failed

Tout d'abord je vérifie que ma version de sed est bien à jour, mais c'est le cas.

srv1 tmp #  eix sys-apps/sed
[I] sys-apps/sed
     Available versions:  4.1.5-r1 ~4.2 {acl nls static}
     Installed versions:  4.1.5-r1(14:31:27 08/06/08)(nls -static)
     Homepage:            http://sed.sourceforge.net/
     Description:         Super-useful stream editor

Puis l'erreur libsandbox attire mon attention, je me décide de mettre à jour sandbox qui en avait besoin.

srv1 tmp # emerge -av sandbox
 
These are the packages that would be merged, in order:
 
Calculating dependencies... done!
[ebuild     U ] app-misc/pax-utils-0.1.19 [0.1.17] USE="-caps" 76 kB
[ebuild     U ] sys-apps/sandbox-1.6-r2 [1.2.18.1-r2] 300 kB

Et voila le problème est résolu, probablement un oubli dans l'ebuild qu'il me reste à remonter ;)

11avr. 2009

Xen creation d'un reseau prive via un bridge

Xen_logo.png
Depuis le début, j'utilise les adresses IPs publique des DomU Xen pour les communications internes comme par exemple Mysql <=> Web.

Je me suis donc enfin penché sur la question de la mise en place d'un réseau privé dédié et facilement déployable entre plusieurs serveurs Dom0.

Voici pour rappel la configuration par défaut en bridge :

dom0: ----------------- bridge -> real eth0 -> the network
                           |
domU: fake eth0 -> vifN.0 -+

En plus du bridge par défaut, le but est de disposer de cette configuration pour eth1 :

dom0: ----------------- bridge -> real eth1 -> Not connect
                           |
domU: fake eth1 -> vifN.1 -+

Ceci me permettra donc en cas d'ajout d'un nouveau Dom0 Xen, de raccorder les interfaces eth1 de mes Dom0 et de laisser mes DomU communiquer entre eux comme si de rien n'était, mais bon je n'en suis pas encore là ;)

Voici donc comment procéder pour la création d'un bridge, c'est très simple :

1) On crée le bridge :

brctl addbr private

2) On ajoute une interface au bridge :

brctl addif private eth1

3) Et enfin on monte cette interface avec une IP :

ifconfig private 192.168.0.1/24 up

Il ne nous reste qu'a configurer le DomU de manière classique et la communication Dom0 <=> DomU ou DomU <=> DomU devrait se faire :)

Cette configuration est par contre volatile, au redémarrage elle sera alors perdu je vous conseil donc de mettre en place un script dans les rc.d ou de modifier le script de démarrage de Xen pour prendre en compte ces commandes au lancement.

10avr. 2009

Fixing broken portage installations

J'ennoncais dans mon précédent article l'utilisation d'un portage recovery, permettant de continuer à utiliser la commande en cas de problème.

Le script get_portage_back.sh automatisant la mise en place du portage recovery disponible sur la page officielle Gentoo Manually fixing broken portage installations redirigeant à présent vers une erreur 404, voici la source de ce script :

#!/bin/bash
 
python_version=$(python -c 'import sys; print "%02d%02d" % sys.version_info[:2]')
unpack_dir=/var/tmp/portage-unpack
 
die() {
	echo $@
	exit 1
}
 
case "$python_version" in
	0202)
		portage_version=2.0.51.22
		portage_dir=/usr/lib/portage
		;;
	0203)
		portage_version=2.1.1
		portage_dir=/usr/lib/portage
		;;
	0204|0205)
		portage_version=2.1.4
		portage_dir=${HOME}|>/portage-recover
		;;
	0201|0200)
		die "your python version is too old"
		;;
	*)
		die "unknown python version: $python_version"
		;;
esac
 
echo ">>> Found python version ${python_version}, using portage-${portage_version}"
 
tarball="portage-${portage_version}.tar.bz2"
mypath=$(readlink -f $0)
[ -z "${DISTDIR}" ] && DISTDIR=${mypath%/*/*}
mkdir -p "$portage_dir" "$unpack_dir"
 
[ -d "$DISTDIR" ] || DISTDIR=/var/tmp
 
wget -O "${DISTDIR}/${tarball}" "http://distfiles.gentoo.org/distfiles/${tarball}"
 
tar xfj "${DISTDIR}/${tarball}" -C "$unpack_dir" 
unpack_dir=${unpack_dir}|>/portage-${portage_version}|>
 
cp -r "${unpack_dir}"/{pym,bin} "${portage_dir}/"
if [ ! -e /etc/make.globals ]; then
	echo ">>> Restoring /etc/make.globals"
	cp "${unpack_dir}/cnf/make.globals" /etc
fi
 
if [ -e "${unpack_dir}/cnf/sets.conf" -a ! -e /usr/share/portage/config/sets.conf ]; then
	echo ">>> Restoring /usr/share/portage/config/sets.conf"
	mkdir -p /usr/share/portage/config/
	cp -r "${unpack_dir}/cnf/sets.conf" /usr/share/portage/config/
fi
 
echo ">>> Testing if rescue portage works and trying to remerge portage"
export PYTHONPATH="${portage_dir}/pym" 
export PATH="${portage_dir}/bin:${PATH}"
emerge --version > /dev/null && emerge --oneshot portage
if [ "$?" -ne 0 ]; then
	echo "!!! Portage was not remerged correctly"
fi
if [ "${portage_dir}" != /usr/lib/portage ]; then
	echo ">>> The rescue portage has been installed in \$HOME/portage-recover. You can access it"
	echo "    with the following command:"
	echo "    PYTHONPATH=${portage_dir}/pym PATH="${portage_dir}|>/bin:\$PATH" emerge"
	echo "    Of course you can also remove that directory if you've sucessfully remerged portage"
	echo "    and don't need the rescue version anymore."
fi
echo ">>> Cleaning up"
rm -rf "$(dirname ${unpack_dir})"



Script : get_portage_back.sh

10avr. 2009

Emerge IOError: [Errno 21] Is a directory [sys-apps/portage]

J'ai procédé à un upgrade apparemment sans problème de sys-apps/portage-2.1.4.5 vers sys-apps/portage-2.1.6.7.

Finalement au bout de quelques jours j'ai eu besoin d'installer et de mettre à jour un paquet et c'est là que tout ce complique, la fameuse erreur IOError: [Errno 21] Is a directory est apparu.

raga ~ # emerge -av tcpdump
 
These are the packages that would be merged, in order:
 
Calculating dependencies
Traceback (most recent call last):
File "/usr/bin/emerge", line 40, in <module>
retval = _emerge.emerge_main()
File "//usr/lib/portage/pym/_emerge/__init__.py", line 14670, in emerge_main
myopts, myaction, myfiles, spinner)
File "//usr/lib/portage/pym/_emerge/__init__.py", line 13587, in action_build
mydepgraph = depgraph(settings, trees, myopts, myparams, spinner)
File "//usr/lib/portage/pym/_emerge/__init__.py", line 4373, in __init__
pkg_cache=self._pkg_cache)
File "//usr/lib/portage/pym/_emerge/__init__.py", line 1074, in __init__
real_dbapi.flush_cache()
File "//usr/lib/portage/pym/portage/dbapi/vartree.py", line 368, in flush_cache
self._owners.populate() # index any unindexed contents
File "//usr/lib/portage/pym/portage/dbapi/vartree.py", line 748, in populate
self._populate()
File "//usr/lib/portage/pym/portage/dbapi/vartree.py", line 774, in _populate
owners_cache.add(cpv)
File "//usr/lib/portage/pym/portage/dbapi/vartree.py", line 698, in add
contents = self._vardb._dblink(cpv).getcontents()
File "//usr/lib/portage/pym/portage/dbapi/vartree.py", line 1162, in getcontents
myc = open(contents_file,"r")
IOError: [Errno 21] Is a directory

Cette erreur ne donnant rien de concret sur les moteurs de recherches, je me suis tourné vers le chan officiel Gentoo, un problème de compilation avec python a été évoqué, néanmoins je reste sceptique à cette hypothèse, en effet le portage recover en version 2.1.4.5 fonctionne parfaitement. Cependant en l'utilisant je reste limité à l'utilisation de paquet dans la branche EAPI=1.

Je me suis donc intéressé de plus près au fameux dossier /var/db/pkg contenant toutes les informations sur les paquets installés nécessaires à portage. Après suppression de ce dossier (un backup a été effectué), emerge a l'air de fonctionner néanmoins je ne valide pas l'installation du paquet.

En procédant par élimination (d'où l'intérêt du backup), je remonte jusqu'au dossier /var/db/pkg/sys-libs/timezone-data-2006a, après suppression de ce dernier et une réinstallation de sys-libs/timezone-data-2009b, tout fonctionne parfaitement.

14déc. 2008

Chiffrement du filesystem complet (dm-crypt,luks)

Suite à mon billet du 26 Mai 2008 , je vais comme promis procéder au chiffrement complet (hors /boot) de mon laptop toujours grâce à dm-crypt. Sans le mot de passe associé (passphrase), le portable ne pourra booter.

Bien entendu, nous utiliserons toujours la norme LUKS (Linux Unified Key Setup) :

Le projet LUKS, développé par Clemens Fruhwirth de l’université de Vienne, vise à standardiser le chiffrement de systèmes de fichiers par la définition et l’implémentation d’un format standard.

En fournissant une norme sur l'encryption disque, il ne se contente pas de faciliter la compatibilité entre les distributions, mais aussi fournir une gestion sûre des multiples mots de passe utilisateur.

Prérequis :

     1. Kernel :
Device Drivers --> RAID and LVM Support --> 
[*] Multiple devices driver support (RAID and LVM)           
<*> Device mapper support
<*> Crypt target support
 Cryptographic Options --> 
 <*> AES cipher algorithms (x86_64)
 <*>   SHA256 digest algorithm
 <*>   SHA384 and SHA512 digest algorithms
     2. Outil :
sys-fs/cryptsetup

Mise en place :

Nous allons supprimé toutes les trace des données qui sont actuellement sur le disque dur. Il existe des outils dit de "forensic" comme TCT, qui peuvent retrouver des données effacées. Une donnée sur un disque dur disparait au bout d'environ sept écritures au même endroit, il existe un outil nommé shred (sys-apps/coreutils) qui effectue se genre de chose.

shred -n 10 -v /dev/sda2
shred -n 10 -v /dev/sda3
shred -n 10 -v /dev/sda4

Shred n'etant pas efficace pour la génération d'entropie (reproduit toujours la même séquence), on va donc généré de l'entropie depuis /dev/urandom

dd if=/dev/urandom of=/dev/sda2
dd if=/dev/urandom of=/dev/sda3
dd if=/dev/urandom of=/dev/sda4

On crée à présent la partition crypté LUKS en y définissant une passphrase.

cryptsetup -y --cipher aes-cbc-essiv:sha256  --key-size 256 luksFormat /dev/sda4

On dévérouille la partition crypté

cryptsetup luksOpen /dev/sda4 racine

luksOpen créé un mapping pour la partition crypté, /dev/sda4 devient /dev/mapper/racine. On formate ce mapping (par ailleurs je revient en ext3).

mke2fs -j /dev/mapper/racine

Je crée le cryptage de la swap

cryptsetup -d /dev/urandom create swap /dev/sda3

Je formate la swap

mkswap /dev/mapper/swap

Je prépare la partition /boot

mke2fs /dev/sda2

On monte les partitions de manière classique

mount /dev/mapper/racine /mnt/gentoo
mkdir /mnt/gentoo/boot
mount /dev/sda2 /mnt/gentoo/boot

Je restaure mes données :)

tar xvjpf backup.tar.bz2 -C /mnt/gentoo

On configure le fstab

/dev/sda2	/boot	ext2	noauto,noatime	1 2
/dev/mapper/racine	/	ext3	noatime	0 1
/dev/mapper/swap	none	swap	sw	0 0
shm/dev/shm	tmpfs	nodev,nosuid,noexec	0 0

On déclare les partitions crypté pour le device mapper

  • /etc/conf.d/dmcrypt
swap=swap
source='/dev/sda3'
target=racine    
source='/dev/sda4'

On va créer l'initramfs

1) On crée la structure

cd /mnt/
mkdir -p work/initramfs/{bin,sbin,etc,proc,sys,newroot}
cd work
touch initramfs/etc/mdev.conf

2) Mise en place de busybox

wget http://blog.yacoubi.fr/scripts/busybox/busybox-1.10.1-static.bz2 -O - | bunzip2 > initramfs/bin/busybox
chmod +x initramfs/bin/busybox
ln -s busybox initramfs/bin/sh

3) Mise en place du script d'init

touch initramfs/init
chmod +x initramfs/init
  • initramfs/init
#!/bin/sh
 
#Mount things needed by this script
mount -t proc proc /proc
mount -t sysfs sysfs /sys
 
#Disable kernel messages from popping onto the screen
echo 0 > /proc/sys/kernel/printk
 
#Clear the screen
clear
 
#Create all the symlinks to /bin/busybox
busybox --install -s
 
#Create device nodes
mknod /dev/null c 1 3
mknod /dev/tty c 5 0
mdev -s
 
#Function for parsing command line options with "=" in them
# get_opt("init=/sbin/init") will return "/sbin/init"
get_opt() {
	echo "$@" | cut -d "=" -f 2
}
 
#Defaults
init="/sbin/init"
root="/dev/mapper/racine"
enc_root=/dev/sda4
 
#Process command line options
for i in $(cat /proc/cmdline); do
	case "${i}" in
		root\=*)
			root=$(get_opt $i)
			;;
		init\=*)
			init=$(get_opt $i)
			;;
		enc_root\=*)
			enc_root=$(get_opt $i)
			;;
	esac
done
 
#Open encrypted partition to create /dev/mapper/racine
cryptsetup luksOpen "${enc_root}" racine
if [ $? -ne 0 ]
then
exec /sbin/halt
else
#Mount the root device
mount "${root}" /newroot
fi
#Unmount all other mounts so that the ram used by
#the initramfs can be cleared after switch_root
umount /sys /proc
 
#Switch to the new root and execute init
if [[ -x "/newroot/${init}" ]] ; then
	exec switch_root /newroot "${init}"
fi
 
#This will only be run if the above line failed
echo "Failed to switch_root, dropping to a shell"
exec sh

4) Copie de l'executable cryptsetup

cp /sbin/cryptsetup initramfs/bin/

5) Construction de l'image

cd initramfs
find . | cpio -H newc -o > ../initramfs.cpio
cd ..
cat initramfs.cpio | gzip > initramfs.igz

6) Configuration de grub

title=Gentoo Linux
root (hd0,1)
kernel /boot/linux
initrd /initramfs.igz

A présent on redémarre, la passphrase devrait vous être demandé, à ce sujet la configuration clavier sera alors en QWERTY et non en AZERTY donc attention au caractère spéciaux. Votre filesystem ainsi que votre swap sont à présent crypté ;)

Lien utile :

Luks Official Web Site

08sept. 2008

How To Roundcube

roundcube_logo.png
Habituellement j'utilise Squirrelmail, néanmoins ce dernier commence à m'ennuyer (par habitude je vous rassure) j'ai donc décidé de le remplacer par Roundcube.

RoundCube Webmail (RC) est un client Webmail IMAP multilingue basé sur les standards du web, et doté d'une interface utilisateur lui donnant l'aspect d'une application "client lourd" classique. Il contient toutes les fonctionnalités que vous pouvez attendre d'un client de messagerie électronique, notamment le support des types MIME, un carnet d'adresse, la manipulation des dossiers IMAP, la recherche de messages, et la vérification orthographique. RoundCube Webmail est écrit en PHP et nécessite une base de données MySQL. L'interface utilisateur est entièrement personnalisable, via l'utilisation de XHTML et de CSS2.

Roundcube fournit une interface de votre système de messagerie via le web. Il contient toutes les fonctionnalités que vous pourriez attendre d'un client E-Mail moderne, notamment les carnets d'adresse et la manipulation des dossiers IMAP. RoundCube est aussi fortement personnalisable. Vos administrateurs système peuvent écrire et installer des thèmes pour que cela convienne à votre identité de marque.

On prépare les sources

cd /home/public/www/;
svn checkout https://svn.roundcube.net/trunk/roundcubemail roundcube;

On crée la base de donnée et le user

CREATE USER 'db_roundcube'@'%' IDENTIFIED BY '****************';
GRANT USAGE ON * . * TO 'db_roundcube'@'%' IDENTIFIED BY '****************' WITH MAX_QUERIES_PER_HOUR 0 MAX_CONNECTIONS_PER_HOUR 0 MAX_UPDATES_PER_HOUR 0 MAX_USER_CONNECTIONS 0 ;
CREATE DATABASE `db_roundcube` DEFAULT CHARACTER SET latin1 COLLATE latin1_swedish_ci;
GRANT SELECT , INSERT , UPDATE , DELETE , CREATE , DROP , INDEX , ALTER , CREATE TEMPORARY TABLES , LOCK TABLES , CREATE VIEW , SHOW VIEW , CREATE ROUTINE, ALTER ROUTINE, EXECUTE ON `db\_roundcube` . * TO 'db_roundcube'@'%';

On importe la structure de la base

mysql -u root -p db_roundcube < /home/public/www/roundcube/SQL/mysql5.initial.sql

On configure roundcube

  • /home/public/www/roundcube/config/db.inc.php
$rcmail_config['db_dsnw'] = 'mysql://db_roundcube:xxxxxxxxxxxxxxx@localhost/db_roundcube';
  • /home/public/www/roundcube/config/main.inc.php
$rcmail_config['default_host'] = 'localhost';
$rcmail_config['des_key'] = 'clé aléatoire de 24 caractères';
$rcmail_config['language'] = 'fr_FR';

On supprime à présent les fichiers inutiles

rm -r /home/public/www/roundcube/installer;
rm -r /home/public/www/roundcube/SQL;

10juil. 2008

Segmentation Fault sous Gentoo (PHP 5.2, Mysql 5)

php_logo.png
Une petite mise à jour de PhP afin de passer en version "dev-lang/php-5.2.6-r2" et plus rien ne fonctionne ...

Grosse galère :

srv78 tad63 # php index.php
segmentation fault
srv78 tad63 # 

Une petite recherche me fait rapidement douter sur les CFLAGS utilisaient :

CFLAGS="-O3 -march=prescott -mfpmath=sse -pipe -fforce-addr -frerun-loop-opt -falign-functions=4 -maccumulate-outgoing-args -ffast-math -fprefetch-loop-arrays -funroll-loops"

Une petite recherche plus approfondie m'aide un peu plus à cibler le problème : http://bugs.gentoo.org/show_bug.cgi?id=227373

On retire le flag d'optimisation -funroll-loops dans le make.conf et on recompile PHP :)

- page 2 de 3 -