# [glibc]Problemas tras borrar glibc e intentar chroot (Sol.)

## Popolous

¡Hola!

Acabo de cometer una enorme estupidez: ayer al actualizar el sistema, vi un conflicto existente en glibc y decidí desinstalarla (a pesar de los avisos del sistema de que podría estar cometiendo una tontería supina) y tratar de reinstalarla. El conflicto parecía venir de los slots en glibc.

Bien, al no poder hacer nada, me he decidido arrancar con un liveCD y tratar de re-emerger glibc. Todo va bien hasta que trato de hacer un chroot y me sale este mensaje:

```

#chroot /mnt/gentoo /bin/bash

```

 *Quote:*   

> 
> 
> chroot: cannot run command ´/bin/bash`: No such file or directory
> 
> 

 

He mirado en Google para ver si es problema de las librerías, pero no he encontrado absolutamente nada que me sirva. ¿Alguna idea? Luego me tendré que flagelar por la estupidez, pero a ver si logro salir de esta.

¡Saludos!Last edited by Popolous on Fri Jul 10, 2009 4:14 pm; edited 2 times in total

----------

## Inodoro_Pereyra

Bash no tiene que ver con glibc. Si chroot te da ese mensaje de error es por que no encuentra bash en /bin y esto puede ser por dos razones: O desinstalaste bash también, o no has montado la partición que contiene /bin en /mnt/gentoo/bin.

Salud!

----------

## Popolous

He comprobado lo que dices y sí que está instalado en ese directorio...

¡Saludos!

----------

## Inodoro_Pereyra

Ok entonces. Sigamos diagnosticando. Que pasa si cambias bash por otro intérprete de comandos?

```
chroot /mnt/gentoo /bin/busybox
```

Salud!

EDITO: De la salida de:

```
~ # ldd /bin/bash | grep libc

   libc.so.6 => /lib/libc.so.6 (0xb7e8e000)
```

Sospecho que lo que puede estar pasando en que en realidad chroot devuelve como error genérico "no such file..." al no poder cargarlo por estar enlazado con esta librería de glib... Si estoy en lo cierto entonces busybox va a fallar con el mismo mensaje de error también... A ver como se arregla esto...

----------

## Popolous

¡Hola!

El mismo error, cambiando el shell:

```

chroot /mnt/gentoo /bin/busybox

```

 *Quote:*   

> 
> 
> chroot: cannot run command ´/bin/busybox`: No such file or directory 
> 
> 

 

Gracias por la ayuda. Estoy más perdido...y encima me temo que este error me va a costar reinstalar  :Crying or Very sad: 

¡Saludos!

----------

## Popolous

Otra cosa...descartado que el liveCD esté mal...he probado con dos distintos y el mismo error. Aparte, si hago:

```

# /bin/bash

```

O pruebo con busybox, todo aparentemente, va bien. No sale ningún mensaje de error....

¡Saludos!

----------

## Inodoro_Pereyra

A googlear se ha dicho... Pega tu make.conf por favor.

Salud!

----------

## Inodoro_Pereyra

Que versión de glibc fué la que eliminaste?

Salud!

----------

## Popolous

¡Hola!

Aquí va el make.conf:

 *Quote:*   

> 
> 
> # Copyright 1999-2004 Gentoo Foundation
> 
> # Distributed under the terms of the GNU General Public License v2
> ...

 

Aparte, he estado googleando y he visto estos dos links que tratan el error, pero no funcionan en mi caso (o yo estoy haciendo mal las cosas, que también puede ser):

http://www.mail-archive.com/debian-user@lists.debian.org/msg492046.html

http://aplawrence.com/Unixart/art_of_troubleshooting.html <-- Este me ha parecido genial, pero no estoy seguro de hacer bien los pasos que da, aparte strace no está instalado en la LiveCD ni en mi sistema.

¡Saludos!

----------

## Popolous

 *Inodoro_Pereyra wrote:*   

> Que versión de glibc fué la que eliminaste?
> 
> Salud!

 

Eliminé la 2.20.3, tengo todo el sistema en ~x86.

¡Saludos!

----------

## ekz

Tengo una idea: De la misma manera que se montan los directorios /proc y /dev antes de hacer el chroot, montar /bin también. Eso haría que se use /bin/bash del liveCD, y no el que está dañado por la ausencia de glibc.

Según equery glibc no instala nada dentro de /bin, pero si dentro de /usr/bin

Y la pregunta que siempre hago: ¿Se puede usar emerge sin glibc? No para compilar glibc, sino para instalarlo de un paquete precompilado.

¡Saludos!

----------

## Popolous

 *ekz wrote:*   

> 
> 
> Y la pregunta que siempre hago: ¿Se puede usar emerge sin glibc? No para compilar glibc, sino para instalarlo de un paquete precompilado.
> 
> ¡Saludos!

 

Me temo que ese será otro problema que tendré que solucionar después de este... Voy a probar lo que has dicho.

¡Saludos!

----------

## Popolous

Una pregunta tonta...¿Cómo monto un directorio en otro directorio? ¿Creo un enlace simbólico con:

```

ln -sf /mnt/gentoo/bin /bin

```

?

¡Saludos!

----------

## Popolous

Vale, no he dicho nada:

```

mount -o bind /bin /mnt/gentoo/bin

```

¡Saludos!

----------

## Popolous

Sigue sin funcionar con lo apuntado por el amigo ekz de montar el directorio bin...

¡Saludos!

----------

## Inodoro_Pereyra

Me parece que habría que empezar por copiar el archivo /lib/libc-2.20.3.so de nuevo y generarle el symlink a /lib/libc.so.6 a ver si al menos con eso ya funciona el compilador (y bash, de paso). El asunto es de dónde sacarlo.

Todavía debes tener en /usr/portage/distfiles el código fuente de glibc. Dispones de otra pc en la que puedas compilar?

Salud!

----------

## Popolous

 *Inodoro_Pereyra wrote:*   

> Me parece que habría que empezar por copiar el archivo /lib/libc-2.20.3.so de nuevo y generarle el symlink a /lib/libc.so.6 a ver si al menos con eso ya funciona el compilador (y bash, de paso). El asunto es de dónde sacarlo.
> 
> Todavía debes tener en /usr/portage/distfiles el código fuente de glibc. Dispones de otra pc en la que puedas compilar?
> 
> Salud!

 

Sí, sí que tengo el código fuente en /usr/portage/distfiles, pero de otro ordenador disponible nada  :Sad: .

¿Habría alguna otra forma de hacerlo?

¡Saludos!

----------

## i92guboj

Una posibilidad sería usar un paquete binario construído en una máquina con una configuración similar a la tuya, y a ser posible de la misma versión exacta. Si no tienes una máquina con las mismas características quizás alguien pueda hacerlo por tí y proporcionarte el paquete precompilado.

----------

## Inodoro_Pereyra

 *i92guboj wrote:*   

> Una posibilidad sería usar un paquete binario construído en una máquina con una configuración similar a la tuya, y a ser posible de la misma versión exacta. Si no tienes una máquina con las mismas características quizás alguien pueda hacerlo por tí y proporcionarte el paquete precompilado.

 

Me ofrezco  :Very Happy: 

De todas formas me parece que sería mas rápido tratar de compilarlo en la ram (usando la swap del disco rígido) por medio de algún livecd. Systemrescuecd podría ser una alternativa pero habría que instalarle primero el toolchain i686 con crossdev...

Si tenes a mano algún livecd de Gentoo que use i686 como chost podrías hacer eso, swappear sobre el disco rígido, copiar el código fuente a la ramdisk (o usar mount -o bind /mnt/gentoo/usr/portage /portage para enlazar el portage del disco rígido con el del livecd), compilarlo con emerge pero generando un paquete binario, o a mano pero espefificando como --prefix la ruta a donde montaste tu instalación de forma de que al hacer make install se copie a donde corresponde, o simplemente copiar todos los archivos a mano...

Gentoo nunca muere!

Salud!

----------

## Popolous

¡Hola!

Ayer estuve probando algunas cosillas y me dí cuenta de algo extraño. Arrancando con una livecd (install o completa) si lanzaba el comando chroot (sin montar ninguna partición de mi disco duro) el error era el mismo.

Al principio pensaba que la liveCD estaba bien. Me estoy descargando otra de otro mirror distinto. Pero bueno, esto puede que funcione o puede que no...

Inodoro_Pereyra, lo de copiar el código fuente a la ramdisk creo que se hace con una opción del kernel cuando arranca que es docache. ¿Desde ahí se puede emerger glibc? ¿O debo montar las particiones y luego hacer el mount -o bind /mnt/gentoo/usr/portage /portage y hacer emerge glibc?

Voy a probar la liveCD en otro ordenador a ver si hace lo mismo y descarto que sea un error de la misma. Ojalá y sea esto, pero como sea, es para darme aún más de latigazos.

¡Saludos!

----------

## Popolous

¡Hola!

Pues he probado la liveCD en otro ordenador y el error es el mismo. Me estoy bajando otra liveCD y probaré suerte... Si no, tendremos que seguir con el plan alternativo.

Eso sí, aprender, estoy aprendiendo. Sin duda...

¡Saludos!

----------

## i92guboj

A no ser que esté entendiendo mal tus intenciones, usar otro livecd no va a servir de nada. Al hacer chroot, tu sistema efectivo pasa a ser el que tienes en disco, o sea, el corrupto. Bash no inicia en ese chroot porque no puede enlazar con las librerías que hay dentro del chroot, provocando el error que citas más arriba.

Necesitas restaurar tu glibc, o simplemente no habrá forma de que el 99% de los binarios que tienes en un instalación anden (excepto los estáticos, si es que hay alguno).

----------

## gringo

lo que te dice i92guboj, tienes que restaurar glibc como sea, si no tu sistema es inservible.

no sé que versión de glibc necesitas ( la 2.20.3 no desde luego, porque no existe, estarías mirando a glib supongo que no tiene nada que ver), aqui hay un paquete de la 2.9, que es la que está en estable ahora mismo, por si te sirve de algo :

http://tinderbox.x86.dev.gentoo.org/default-linux/x86/sys-libs/

si estás usando ~arch imagino que la versión sería la 2.10.1 o algo similar, trata de que sea la misma versión que estabas usando, bajar de versión glibc suele dar quebraderos de cabeza.

saluetes

----------

## Popolous

No, no estáis entendiendo mal mis intencionees. Me explico realmente mal. Con otro liveCD me sale el mismo error....Una pregunta i92guboj: si no monto ninguna partición, es decir, arranco mi sistema con el liveCD y tal cual intento chroot, ¿detecta mis librerías sin tener acceso a ellas? Es algo realmente sorprendente y no tenía ni idea de que funcionase así.

gringo, miré glib, sin duda   :Embarassed: .  Tegno la versión inestable 2.10.1. Tendré que compilar esa versión. Lo que no sé es cómo hacerlo de manera correcta para luego copiarlo a mi sistema y de ahí recompilar para terminar de arreglar el problema.

El primer paso imagino es entrar en el sistema con un liveCD, montar las particiones que tengo y compilar la versión 2.10.1 sin la posibilidad de hacer chroot. 

¿Qué pasos (comandos) debería ir siguiendo para compilar el paquete? He pensado en descomprimirlo en una carpeta temporal y compilarlo en esa carpeta, pero no sé si dará el resultado esperado.

¡Saludos!

----------

## i92guboj

 *Popolous wrote:*   

> No, no estáis entendiendo mal mis intencionees. Me explico realmente mal. Con otro liveCD me sale el mismo error....Una pregunta i92guboj: si no monto ninguna partición, es decir, arranco mi sistema con el liveCD y tal cual intento chroot, ¿detecta mis librerías sin tener acceso a ellas? Es algo realmente sorprendente y no tenía ni idea de que funcionase así.

 

No se exactamente lo que estás haciendo. Pero no puedes hacer chroot a un sistema que no tengas montado. Una de dos, o el chroot falló o hiciste chroot al mismo livecd de nuevas.

 *Quote:*   

> El primer paso imagino es entrar en el sistema con un liveCD, montar las particiones que tengo y compilar la versión 2.10.1 sin la posibilidad de hacer chroot. 
> 
> ¿Qué pasos (comandos) debería ir siguiendo para compilar el paquete? He pensado en descomprimirlo en una carpeta temporal y compilarlo en esa carpeta, pero no sé si dará el resultado esperado.
> 
> ¡Saludos!

 

La solución más fácil sería descargar un glibc precompilado de dicha versión para tu arquitectura, luego montar desde el livecd tu sistema sin hacer chroot, cambiar a la carpeta donde lo hayas montado y descomprimir el tarball tal cual, con "tar xf glibc-<loquesea>.tar.bz2". Una vez hecho eso, deberías poder hacer un chroot sin problemas, suponiendo que el glibc que hayas descargado sea bueno para tu instalación. Yo te puedo empaquetar uno para amd64 de esa misma versión, si te sirve. Aunque aviso que la descarga desde mi servidor no será muy rápida.

Mis cflags:

```
CFLAGS="-O2 -march=athlon64 -pipe -msse3"
```

----------

## Popolous

Realmente lo que estoy haciendo es intentar restaurar glibc que me cargué al hacer un emerge -C, ya que en la anterior sincronización con el árbol del portage daba errores de slot. Un fallo garrafal e infantil  :Crying or Very sad: .

Mi arquitectura y opciones de compilación son:

 *Quote:*   

> 
> 
> CHOST="i686-pc-linux-gnu" 
> 
> CFLAGS="-march=nocona -O2 -pipe -fomit-frame-pointer" 
> ...

 

Portátil Dell Inspiron 6400 con Intel Core 2 Duo. Si alguien puede darme una versión precompilada con esas opciones se lo agradecería enormemente. Una vez con ella tendría que descomprimirla en los directorios dentro de /mnt/gentoo (que es donde estoy montando mis particiones), ¿correcto?

¡Saludos!

----------

## Popolous

Bueno, he conseguido hacer chroot, tras una siesta que yo diría inspiradora  :Razz: .

Los pasos que he seguido han sido estos:

```

1. He arrancado con una liveCD 2008-r1

2. He montado todas las particiones de mi sistema en /mnt/gentoo

3. He montado los siguientes directorios:

3.1. #mount -t proc none /mnt/gentoo/proc

3.2. #mount -o bind /dev /mnt/gentoo/dev

3.3. #mount -o bind /lib /mnt/gentoo/lib

3.4. #mount -o bind /bin /mnt/gentoo/bin

```

Tras esto, puedo hacer chroot sin problemas. Ahora voy a hacer un

```

#emerge -av glibc

```

Y a rezar porque esto solucione el problema. La verdad es que pensando en compilar una versión de glibc he pensado: "¿Y por qué no uso la que viene en el liveCD?" De momento, parece que la cosa va bien. De todas formas, antes de seguir embarrándome compilando la versión que glibc que tenía en mi sistema (emerge me reconoce la 2.10.1), voy a esperar por si estoy pasando algo por alto...  :Rolling Eyes: 

¡Saludos!

----------

## Popolous

Pues la siesta tampoco ha sido tan inspiradora como habría creído yo...

En fin, he podido hacer chroot y eso, pero no he podido compilar dentro de la jaula glibc-2.10.1. Entonces he pensado otra manera de abordar el problema (aparte he tenido que montar los directorios del liveCD /usr/sbin /sbin /usr/lib).

He copiado los fuentes de glibc al directorio /usr/portage/distfiles (perteneciente al liveCD) así como el directorio sys-libs bajo el cual se encuentra dicha librería. Además, he sobreescrito el make.conf del liveCD con el de mi sistema.

Ahora, estoy haciendo un emerge de glibc y lo está compilando "dentro" del liveCD. De momento está compilando sin mayores problemas. La pregunta que hago ahora es:

Una vez terminado el proceso, ¿qué directorios he de copiar del "liveCD" a mi sistema?

He pensado que serían /usr/sbin /lib /bin y /usr/lib como mínimo...aunque ahora cuando termine de compilar voy a tratar de ver qué directorios afecta la compilación de glibc.

¡Saludos!

----------

## Popolous

Bueno, algo he avanzado. Aunque no sé qué tal quedará el sistema después de esta  :Laughing: . He compilado glibc dentro de la liveCD. El último paso, el de copiar las librerías donde deberían estar no lo ha podido hacer por la naturaleza de "sólo escritura" de las particiones (aún haciendo el docache como opción del kernel). Luego he copiado las librerías a /usr/lib /lib.

Los archivos compilados estaban en /var/tmp/portage/categoría-paquete/nombre-paquete/image

De la misma forma, he tenido que recompilar ncurses y copiarlas posteriormente a mi sistema.

Tras esto, he podido hacer chroot (y arrancar ya que antes no lograba arrancar debido a un kernel panic al haberme cargado el inicio).

Ahora estoy haciendo un:

```

#revdep-rebuild

```

Para comprobar que todo esté bien y "corregir" las librerías rotas que pueda haber. Espero que con esto vuelva a estar como antes.

Voy a poner el post como (Solucionado) (al menos ya puedo hacer chroot, otra cosa es lo que se derive de esto).

Gracias a todos por la ayuda y las pistas. Sin vuestra ayuda, seguramente, hubiese tirado la toalla y hubiese reinstalado todo.

¡Saludos!

----------

## Inodoro_Pereyra

Ya decia yo que Gentoo nunca muere...  :Very Happy: 

Si has compilado la misma version de glibc no deberias tener problemas. revdep-rebuild deberia poder encargarse de todo.

Si has compilado otra version habria que reinstalar glibc y gcc (en ese orden) y luego hacer un emerge -e @system como minimo (esto si estas usando portage 2.2) o emerge -e world con versiones anteriores de portage.

Salud!

----------

## Popolous

 *Inodoro_Pereyra wrote:*   

> Ya decia yo que Gentoo nunca muere... 
> 
> Si has compilado la misma version de glibc no deberias tener problemas. revdep-rebuild deberia poder encargarse de todo.
> 
> Si has compilado otra version habria que reinstalar glibc y gcc (en ese orden) y luego hacer un emerge -e @system como minimo (esto si estas usando portage 2.2) o emerge -e world con versiones anteriores de portage.
> ...

 

Ya he instalado glibc ncurses y ahora gcc. Tengo portage 2.2. El comando es con @?   :Confused: 

¡Saludos!

----------

## i92guboj

A partir de 2.2, @ denota un set de paquetes, que es una nueva característica de portage a partir de dicha versión, diseñada para hacer el manejo de grupos de paquetes más sencillo (imagina emerge -C @kde, o algo así  :Wink:  ).

Para 2.1.x o anteriores, los sets no existen y el comando sería sin @.

----------

## Popolous

 *i92guboj wrote:*   

> A partir de 2.2, @ denota un set de paquetes, que es una nueva característica de portage a partir de dicha versión, diseñada para hacer el manejo de grupos de paquetes más sencillo (imagina emerge -C @kde, o algo así  ).
> 
> Para 2.1.x o anteriores, los sets no existen y el comando sería sin @.

 

Muchas gracias, no sabía esta nueva característica.  Lo haré de todos modos por si las moscas.

Y es cierto, Gentoo nunca muere...aunque a mí casi me mata  :Laughing: 

¡Saludos!

----------

