Reparar el compilador GCC en gentoo

Gentoo es una distribución que se caracteriza por descargar y compilar el código fuente de acuerdo a los flags de compilación, llamadas USE, que el usuario ha decidido activar. Puesto que no existen binarios precompilados, o al menos están limitados a un puñado de paquetes grandes, un problema en el compilador GCC deja al sistema imposibilitado para instalar ningún software adicional. En este tutorial se abordará como solucionar problemas en el compilador GCC en gentoo.

Los errores que se puede encontrar, entre otros, son:

agd-server # emerge --info
!!! No gcc found. You probably need to 'source /etc/profile'
!!! to update the environment of this terminal and possibly
!!! other terminals also.

agd-server # gcc-config -l
* gcc-config: Active gcc profile is invalid!
[1] x86_64-pc-linux-gnu-4.4.4-r2

agd-server # gcc-config 1
* Switching native-compiler to x86_64-pc-linux-gnu-4.4.4-r2 ...

* Your gcc has a bug with GCC_SPECS.
* Please re-emerge gcc.
* http://bugs.gentoo.org/68395

 >>> Regenerating /etc/ld.so.cache... [ ok ]

* If you intend to use the gcc from the new profile in an already
* running shell, please remember to do:
* # source /etc/profile

agd-server # gcc
gcc-config error: Could not run/locate "gcc"

La solución ante este problema es obvia, reinstalar el compilador GCC. Sin embargo si su compilador GCC está dañado, no podrá recompilarse a sí mismo. A continuación se le muestran dos posibles soluciones a este problema:

SOLUCIÓN 1
La forma más sencilla de solucionar el problema es descargar un binario precompilado para su arquitectura e indicarle a portage que lo instale. Un sitio, con garantía, para descargar binarios para gentoo es tinderbox.dev.gentoo.org. La última versión estable, cuando se escribió este post, es sys-devel/gcc-4.4.5 tanto en x86_64 como en x86.

Una vez obtenga el binario, guárdelo en /usr/portage/packages/sys-devel/gcc-4.4.5.tbz2 e indique a Portage que lo instale (opción -k y ruta hasta el binario precompilado). Por último tan solo deberá listar los compiladores existentes y seleccionar un compilador válido (probablemente el 2 o 1). Una vez haya solucionado su problema con el compilador, es recomendable que verifique la integridad del resto del sistema mediante el comando revdep-rebuild.
agd-server # /usr/portage/packages/sys-devel/
agd-server # wget http://tinderbox.dev.gentoo.org/default-linux/amd64/sys-devel/gcc-4.4.5.tbz2
agd-server # emerge -avk /usr/portage/packages/sys-devel/gcc-4.4.5.tbz2
agd-server # gcc-config -l

* gcc-config: Active gcc profile is invalid!
[1] x86_64-pc-linux-gnu-4.4.4-r2
[2] x86_64-pc-linux-gnu-4.4.5

agd-server # gcc-config 2
agd-server # revdep-rebuild

Una vez que haya comprobado que la integridad del sistema, puede recompilar GCC para su sistema meidante emerge -av sys-devel/gcc.

SOLUCIÓN 2
En este caso, deberá descargar y descomprimir portage y stage3 en un directorio, copiar su /etc/make.conf al nuevo directorio, hacer chroot en él y compilar un binario para su máquina. A continuación tan solo deberá instalar el binario generado en el entorno chroot en su máquina. Por último solo deberá verificar los compiladores disponible y seleccionar el nuevo compilador.
agd-server # mkdir /temp/recovery-gcc
agd-server # cd /temp/recovery-gcc

agd-server # wget http://....stage3-....tar.bz2
agd-server # wget http://....portage-....tar.bz2
agd-server # tar xvjpf stage3-...tar.bz2 -C /temp/recovery-gcc
agd-server # tar xvjf porrtage-...tar.bz2 -C /temp/recovery-gcc/usr

agd-server # cp /etc/make.conf /temp/recovery-gcc/etc/
agd-server # cp -L /etc/resolv.conf /temp/recovery-gcc/etc/

agd-server # mount -t proc none /temp/recovery-gcc/proc
agd-server # mount -o bind /dev /temp/recovery-gcc/dev

agd-server # chroot /temp/recovery-gcc/ /bin/bash
agd-server # env-update
 >> Regenerating /etc/ld.so.cache...
agd-server # source /etc/profile
agd-server # export PS1="(chroot) $PS1"
(chroot) agd-server # emerge --sync
(chroot) agd-server # emerge -avB sys-devel/gcc

agd-server # cd usr/portage/packages/sys-devel/
agd-server # cp /temp/recovery-gcc/usr/portage/packages/sys-devel/gcc-4.4.5.tbz2 ./
agd-server # emerge -avk /usr/portage/packages/sys-devel/gcc-4.4.5.tbz2

agd-server # gcc-config -l
* gcc-config: Active gcc profile is invalid!

[1] x86_64-pc-linux-gnu-4.4.4-r2
[2] x86_64-pc-linux-gnu-4.4.5
agd-server # gcc-config 2
agd-server # revdep-rebuild

0 comentarios:

Publicar un comentario

Recuerde que puede utilizar algunos códigos HTML como <b>para negrita</b>, <i>para cursiva</i> y <a href="URL">para enlaces</a>.