# [portage] duda sobre emerge --resume (solucionado)

## Theasker

He instalado un nuevo gcc y después de cambiar al nuevo compilador y hacer un emerge -e system, como dice el manual, he hecho un emerge -e world, y después de asombrarme con los 800 y pico paquetes a reinstalar y después de pegarse unas buenas horas compilando, iba por el 400 y pico y ha dado un error el paquete sys-boot/syslinux, he pensado en desinstalarlo y luego hacer el emerge --resume pero al desinstalarlo y usar emerge para hacerlo, perdería la oportunidad de hacer emerge --resume.

¿Podríais decirme como puedo hacer esto? y sino ... como puedo arreglar el error, que creo que eso será más ... complicao.

```
/usr/lib/gcc/i686-pc-linux-gnu/4.3.2/../../../../i686-pc-linux-gnu/bin/ld: i386:x86-64 architecture of input file `cache.o' is incompatible with i386 output

/usr/lib/gcc/i686-pc-linux-gnu/4.3.2/../../../../i686-pc-linux-gnu/bin/ld: i386:x86-64 architecture of input file `fatchain.o' is incompatible with i386 output

/usr/lib/gcc/i686-pc-linux-gnu/4.3.2/../../../../i686-pc-linux-gnu/bin/ld: i386:x86-64 architecture of input file `open.o' is incompatible with i386 output

/usr/lib/gcc/i686-pc-linux-gnu/4.3.2/../../../../i686-pc-linux-gnu/bin/ld: i386:x86-64 architecture of input file `searchdir.o' is incompatible with i386 output

distcc[6820] ERROR: compile (null) on localhost failed

make[1]: *** [syslinux] Error 1

make[1]: se sale del directorio `/var/tmp/portage/sys-boot/syslinux-3.71/work/syslinux-3.71/mtools'

make: *** [installer] Error 2

 *

 * ERROR: sys-boot/syslinux-3.71 failed.

 * Call stack:

 *               ebuild.sh, line   49:  Called src_compile

 *             environment, line 2190:  Called die

 * The specific snippet of code:

 *       emake installer || die

 *  The die message:

 *   (no error message)

 *

 * If you need support, post the topmost build error, and the call stack if relevant.

 * A complete build log is located at '/var/tmp/portage/sys-boot/syslinux-3.71/temp/build.log'.

 * The ebuild environment file is located at '/var/tmp/portage/sys-boot/syslinux-3.71/temp/environment'.

 *

>>> Failed to emerge sys-boot/syslinux-3.71, Log file:

>>>  '/var/tmp/portage/sys-boot/syslinux-3.71/temp/build.log'

 * GNU info directory index is up-to-date.

```

gracias anticipadas

----------

## Txema

Es bien sencillo:

```
emerge --resume --skip-first
```

Con eso te salta el paquete problemático y continúa por donde iba, pero ya que estás añade (y acosúmbrate a añadirlo a partir de ahora) la opción --keep-going que es una maravilla en estos casos  :Wink: 

En cuanto al error, ¿estás haciendo compilaciones cruzadas? (distcc creo que era)

----------

## Theasker

si, estoy haciendo crosscompiling pero, para que no hubiera ningun fallo, he hecho un /etc/init.d/distccd stop y ... luego como seguía fallando ... directamente he apagado el ordenador amd64 dejando sólo para compilar y que no hubiera problemas el x86.

----------

## Txema

Nunca he usado distcc, pero ¿no habría que desactivarlo en /etc/make.conf para que deje de usarlo?

----------

## Theasker

En principio, no se muy bien como funciona, pero observando como lo hace, intenta mandar los paquetes a compilar a los diferentes nodos q has configurado en tu red de distcc y si resonde lo envia y sino pues lo compila el host que ha hecho el emerge y punto. 

De esta manera no tienen que estar forzosamente encendidos los ordenadores que componen la red distcc. Ya me pasó cuando el emerge -e world llegó al gcc, simplemente desactivé el distcc y funcionó luego Crtl + C y seguí con el emerge --resume.

Ah, y gracias por el apunte de las opciones del emerge, no pensé que tenía esas opciones y que había que hacerlo de una manera más ... manual. Debería haber mirado la página man del emerge antes de preguntarlo.

gracias

----------

## gringo

distcc es para distribuir las compilaciones, que pueden ser para la misma arquitectura o no.

Si tienes una máquina que es de 32 bits y una máquina de 64 bits con un sistema de 64 bits, estrictamente hablando yo no lo considero una compilación cruzada, pero el compilador del sistema de 64 bits no te servirá para compilar para 32bits ( por defecto al menos).

Si quieres que p.ej. la máquina de 64 bits pueda compilar software de 32 bits tendrás que instalar un nuevo compilador de 32 bits. Ahora mismo que yo sepa la únca forma soportada en gentoo es usar crossdev.

Si además quieres usar distcc para compilaciones cruzadas, puedes usar esta guía -> http://www.gentoo.org/doc/es/cross-compiling-distcc.xml

saluetes

----------

## Theasker

exactamente es justo eso lo que estoy haciendo, estoy usando crossdev, la compilación (el emerge) se hace en el x86 de 1 núcleo y le echa una mando el de amd64 con un dual core xeon.

Debería ir a toda velocidad con los 3 núcleos que juntos suman casi 8000 Mhz. pero ... no, no debo tenerlo bien configurado.

----------

## Inodoro_Pereyra

 *Theasker wrote:*   

> exactamente es justo eso lo que estoy haciendo, estoy usando crossdev, la compilación (el emerge) se hace en el x86 de 1 núcleo y le echa una mando el de amd64 con un dual core xeon.
> 
> Debería ir a toda velocidad con los 3 núcleos que juntos suman casi 8000 Mhz. pero ... no, no debo tenerlo bien configurado.

 

Lo de la velocidad depende de varios factores. Antes que nada, el valor -j tiene gran impacto sobre distcc, para tres núcleos en total, si no te importa consumir el 100% del microprocesador yo usaría MAKEOPTS="-j7" por ejemplo.

En segundo lugar, la velocidad de la red. Distcc sobre internet y nada es lo mismo. (Por experiencia lo digo).  :Very Happy: 

Por último, el modo pump de distcc que distribuye toda la parte previa a la compilación (en la medida de lo posible) y que según los de google hace que vaya hasta 3 veces mas rápido. Lo estás usando?

Salud!

----------

## Theasker

 *Inodoro_Pereyra wrote:*   

> 
> 
> Por último, el modo pump de distcc que distribuye toda la parte previa a la compilación (en la medida de lo posible) y que según los de google hace que vaya hasta 3 veces mas rápido. Lo estás usando?
> 
> Salud!

 

Pos no, además creo que lo tengo mal configurado porque me salen más errores responsables del distcc, creo que entre el distcc y el crossdev me he equivocado en algo o he hecho algo mal :/.

----------

## Theasker

a ver si me podéis echar un cable, sigue dandome mogollón de errores si compilo con el distcc en compilación cruzada

```
creating cache ./config.cache

checking host system type... Invalid configuration `i686-pc-linux-': machine `i686-pc-linux' not recognized

checking for Cygwin environment... no

checking for mingw32 environment... no

checking for EMX/OS2 environment... no

checking for executable suffix... configure: error: installation or configuration problem: compiler cannot create executables.

make[2]: *** [incs/x86-linux-cc/rules.cnf] Error 1

make[2]: se sale del directorio `/var/tmp/portage/app-cdr/cdrdao-1.2.2-r3/work/cdrdao-1.2.2/scsilib'

make[1]: *** [all-recursive] Error 1

make[1]: se sale del directorio `/var/tmp/portage/app-cdr/cdrdao-1.2.2-r3/work/cdrdao-1.2.2'

make: *** [all] Error 2

 * 

 * ERROR: app-cdr/cdrdao-1.2.2-r3 failed.

 * Call stack:

 *               ebuild.sh, line   49:  Called src_compile

 *             environment, line 2439:  Called die

 * The specific snippet of code:

 *       emake -j1 || die "could not compile"

 *  The die message:

 *   could not compile

 * 

 * If you need support, post the topmost build error, and the call stack if relevant.

 * A complete build log is located at '/var/tmp/portage/app-cdr/cdrdao-1.2.2-r3/temp/build.log'.

 * The ebuild environment file is located at '/var/tmp/portage/app-cdr/cdrdao-1.2.2-r3/temp/environment'.

 * 

>>> Failed to emerge app-cdr/cdrdao-1.2.2-r3, Log file:

>>>  '/var/tmp/portage/app-cdr/cdrdao-1.2.2-r3/temp/build.log'
```

----------

## Txema

Pega tu uname -a

----------

## Theasker

Ordenador que hace el emerge (192.168.0.69)

uname -a

```
Linux TheaskerHost 2.6.27-gentoo-r7 #1 SMP Tue Jan 27 11:57:48 CET 2009 i686 Intel(R) Pentium(R) 4 CPU 3.20GHz GenuineIntel GNU/Linux
```

/etc/make.conf

```
CFLAGS="-O2 -march=pentium4 -pipe"

CHOST="i686-pc-linux-gnu"

CXXFLAGS="${CFLAGS}"

MAKEOPTS="-j4"

# Variables USE

USE="gtk nls spell X hal dbus -kde -gnome nvidia opengl qt3 userlocales -fortran -ipv6 apache2 alsa oss mp3 -arts truetype-fonts truetype mysql php startup-notification additions ntfs fuse svg jpeg ccache ogg xvmc"

# Configuración de Video, teclado y ratón

INPUT_DEVICES="evdev keyboard mouse ps2mouse"

VIDEO_CARDS="nvidia fbdev none"

LINGUAS="es"

ALSA_CARDS="emu10k1"

#Configuración

AUTOCLEAN="yes"

FEATURES="ccache parallel-fetch"

#FEATURES="distcc ccache parallel-fetch"

ACCEPT_KEYWORDS="x86"

CCACHE_SIZE="2G"

#CCACHE_PREFIX="distcc"
```

cat /etc/distcc/hosts 

```
192.168.0.68 192.168.0.69
```

cat /etc/conf.d/distccd

```
DISTCCD_OPTS=""

DISTCCD_EXEC="/usr/bin/distccd"

DISTCCD_PIDFILE="/var/run/distccd/distccd.pid"

DISTCCD_OPTS="${DISTCCD_OPTS} --port 3632"

DISTCCD_OPTS="${DISTCCD_OPTS} --log-level critical"

DISTCCD_OPTS="${DISTCCD_OPTS} --allow 192.168.0.0/24"

DISTCCD_OPTS="${DISTCCD_OPTS} --listen 192.168.0.69"

DISTCCD_NICE="15"
```

Ordenador que debería llevar la carga de compilación ( 192.168.0.68 )

uname -a

```
Linux TheaskerHost64 2.6.27-gentoo-r8 #3 SMP Wed Apr 1 21:47:25 GMT 2009 x86_64 Intel(R) Xeon(R) CPU 3065 @ 2.33GHz GenuineIntel GNU/Linux

```

/etc/make.conf

```
CFLAGS="-march=nocona -O2 -pipe"

CXXFLAGS="${CFLAGS}"

CHOST="x86_64-pc-linux-gnu"

FEATURES="distcc ccache parallel-fetch"

MAKEOPTS="-j7"

USE="mmx sse sse2 spell nls userlocales -kde -gnome X -qt3 -qt4 dbus hal startup-notification nvidia xvmc"

# Configuración de Video, audio, teclado y ratón

INPUT_DEVICES="evdev keyboard mouse ps2mouse"

VIDEO_CARDS="nvidia fbdev none"

LINGUAS="es"

#ALSA_CARDS="emu10k1"

ACCEPT_KEYWORDS="amd64"

CCACHE_SIZE="2G"

CCACHE_DIR="/var/tmp/ccache"

PORTDIR_OVERLAY="/usr/portage/local"
```

cat /etc/distcc/hosts 

```
192.168.0.68 192.168.0.69
```

cat /etc/conf.d/distccd

```

DISTCCD_OPTS=""

DISTCCD_EXEC="/usr/bin/distccd"

DISTCCD_PIDFILE="/var/run/distccd/distccd.pid"

DISTCCD_OPTS="${DISTCCD_OPTS} --port 3632"

DISTCCD_OPTS="${DISTCCD_OPTS} --log-level critical"

DISTCCD_OPTS="${DISTCCD_OPTS} --allow 192.168.0.0/24"

DISTCCD_OPTS="${DISTCCD_OPTS} --listen 192.168.0.68"

DISTCCD_OPTS="${DISTCCD_OPTS} -N 15"
```

La idea es que toda la compilación la hiciera el ordenador de 2 núcleos y el otro simplemente "ayudara" un poco na más.

gracias anticipadas por la ayuda.

----------

## Inodoro_Pereyra

Se puede definir quien llevará la mayor parte del trabajo cuando se compila distribuído usando la variable DISTCC_HOSTS en make.conf.

Para que la parte pesada la haga .68 agregas en tu make.conf de .69:

```
DISTCC_HOSTS="192.168.0.68"
```

Para que la parte pesada la haga .68 pero .69 ayude agregas en .69:

```
DISTCC_HOSTS="192.168.0.68, localhost"
```

Salud!

----------

## Theasker

 *Inodoro_Pereyra wrote:*   

> Se puede definir quien llevará la mayor parte del trabajo cuando se compila distribuído usando la variable DISTCC_HOSTS en make.conf.
> 
> Para que la parte pesada la haga .68 agregas en tu make.conf de .69:
> 
> ```
> ...

 

A ver que no me entero muy bien lo que tengo que poner en cada uno de los ordenadores:

para el .69 ("lento")

```
DISTCC_HOSTS="192.168.0.68, localhost"
```

y para el .68 (rápido)

```
DISTCC_HOSTS="192.168.0.69, localhost"
```

Sería así?

Y ¿el MAKEOPTS="-jx" de cada uno?

----------

## Inodoro_Pereyra

Para el .69, el microprocesador mas lento, la configuración que has especificado es correcta. Para el caso inverso, en el microprocesador mas rápido yo no usaría distcc.

Distribuir la compilación a microprocesadores mas lentos en mi experiencia personal al menos, en lugar de mejorar las cosas las empeora.

Si aún así decidis usar distcc sobre la pc que tiene el microprocesador mas rápido te convendría invertir el orden de prioridades y que quede:

```
DISTCC_HOSTS="localhost, 192.168.0.69"
```

De esa forma .68 será siempre el que lleve la carga mas pesada.

Para MAKEOPTS yo uso el número de microprocesadores implicados multiplicado por dos mas uno. Para dos procesadores doble núcleo y un quadcore, por ejemplo, (8 núcleos en total en tres PC) uso MAKEOPTS="-j17" en la pc que está distribuyendo la compilación.

De todas formas hace algunas pruebas primero. Lo que a mi me da resultado puede que a vos no te sirva, depende de la velocidad y disponibilidad de tu red, de hasta que punto pretendes darle prioridad al compilador, etc...

Salud!

----------

## gringo

 *Quote:*   

> DISTCC_HOSTS="localhost, 192.168.0.69"

 

no estoy seguro, pero si haces eso todo irá a localhost y 192.168.0.69 no verá nada de nada, localhost siempre debe ir el último.

Yo simplemente pondría la ip de la máquina mas rápida en el /etc/distcc/hosts de la máquina mas lenta y arreando.

Dos cosillas mas que no se han mencionado :

- el FEATURES distcc sólo lo tienes que poner en la máquina que va a distribuir.

- el demonio distccd solo lo tienes que lanzar en la las máquinas que van a compilar. 

El pump mode apenas lo he usado porque me peta en la mayoría de las compilaciones, cuestión de leerse la documentación con detenimiento e ir probando supongo.

saluetes

----------

