sábado, 21 de julio de 2012

Solución del problema con glibc al actualizar Arch Linux

Esta entrada va dirigida a usuarios de Arch Linux, una gran distro que la semana pasada sufrió un cambio que puede haber traído de cabeza a más de uno, y de dos. Si habéis actualizado el sistema es posible que sepáis a lo que me refiero (no tiene por qué afectar a todos).

La cuestión es que tal y como se anunció tanto en la web como en listas de correo y redes sociales, todos los paquetes que tenían ficheros en /lib ahora los tendrán en usr/lib, quedando /lib como un enlace simbólico a /usr/lib. Si habéis intentado actualizar con nuestro querido sudo pacman -Syu quizás os hayáis encontrado con una sorpresita:

error: error al realizar la transacción (archivos en conflicto)
glibc: /lib existe en el sistema de archivos
Ocurrieron errores, no se actualizaron paquetes

Esto os habrá ocurrido si tenéis paquetes instalados que tienen ficheros en /lib, sin tener en cuenta a glibc. Algo muy importante que tenéis que saber y de lo que advierten en la web de Arch:
Ni se os ocurra utilizar --force para actualizar. Básicamente os podéis cargar el sistema.
Para poder actualizar y corregir el problema haremos lo siguiente:

sudo pacman -Syu --ignore glibc
sudo pacman -Su

Con esto es posible que hayáis podido solucionar el problema y vuestro sistema ya se haya actualizado correctamente, sin embargo puede ser que os ocurra como a mí y al hacer el sudo pacman -Su os encontréis con que el problema persiste. De ser así significa que tenéis ficheros en /lib que no pertenecen al paquete glibc. Con este comando podremos ver qué paquetes tienen fichero en /lib y cuáles son estos ficheros, sin tener en cuenta a glibc:

grep '^lib/' /var/lib/pacman/local/*/files | grep -v glibc
Estos paquetes deberían ser actualizados una vez actualizado glibc, con lo que una solución sería desinstalarlos, lo que podría corregir el problema, y una vez actualizado glibc con sudo pacman -Su, volverlos a instalar.

Puede ocurrir que habiendo hecho esto, o también en el caso de que el comando anterior no nos dé ningún paquete, el problema siga. Esto se debería a que existen ficheros en /lib que no pertenecen a ningún paquete. Podemos verlos con el comando:

find /lib -exec pacman -Qo -- {} +
Estos ficheros podemos borrarlos o moverlos a /usr/lib, y en caso de tener directorios dentro de /lib que estén provocando el problema, deberíamos eliminarlos. Ojo, este caso concreto no me ha ocurrido a mí, os comento lo que he leído al respecto, por lo que antes de borrar nada investigad un poco.

En la mayoría de los casos con todo esto debería solucionarse el problema, sin embargo el mío no estaba entre ellos, ya que tenía instalado el paquete lib32-glibc, que tenía un fichero en /lib. Este paquete pertenece al repositorio multilib, el cual tenía deshabilitado desde hace tiempo. Lo volví a habilitar en /etc/pacman.conf y seguidamente lancé otro sudo pacman -Syu --ignore glibc, lo que actualizó dicho paquete. Esto terminó de solucionar el problema en mi caso y el siguiente sudo pacman -Su funcionó sin problemas.

Si queréis algo más de información o vuestro problema al actualizar ha sido distinto, también podéis consultar el artículo al respecto en la wiki.


No hay comentarios:

Publicar un comentario