Desactualizando paquete de Arch Linux sin pacman
A.K.A. El fin de semana después del día que ingenuamente quise actualizar Arch Linux por partes en vez de actualizarlo todo.
Acerca de como comenzó todo
Pueden omitir esta sección. Todo comenzó un día que quise actualizar mi instalación de Apricity OS mientras estaba cenando, pero no quise actualizar todo debido a que necesitaba trabajar en la computadora después de cena, en Windows, y el tamaño de la actualización era de 1.2 Gb, por lo que con una magnífica conexión de 2Mbps, eso iba a tomar un largo rato.Así que decidí a actualizar solo algunos paquetes que yo creía que eran independientes de todo lo demás. Empecé a ver la lista, y poco a poco fui actualizando algunos paquetes: geany, gimp, nano, samba... curl. Luego de eso seguí usando la computadora por un rato con normalidad, y la apagué. Todo bien.
Luego vine el fin de semana a querer utilizar la computadora para ver vídeos en Youtube mientras desayunaba. Para mis ratos de ocio prefiero ocupar Linux, ya que es más rápido, y no dependo de nada de Windows para ello. Todo bien. Luego noté que Variety no estaba corriendo (Variety se ha vuelto mi referencia de la salud del sistema operativo últimamente). ¡Qué raro?, pensé yo, pues lo había actualizado recientemente. Así que lo ejecuté desde la línea de comandos, para obtener más información. Apareció en pantalla un error de que no se podía encontrar la librería libssl.so.1.1.
Pensé que podría ser que Variety necesitaba otra actualización, así que procedí a actualizar la base de datos de paquetes de pacman, para ver si habían actualizaciones disponibles, con el comando:
sudo pacman -Syy
Cuando veo un error similar: No se puede encontrar la librería libssl.so.1.1. Así que ni modo, recurrí a Google para buscar alguna respuesta.
Después de un rato encontré un post que sugería crear enlaces simbólicos de las librerías requeridas hacia las librerías existentes, así que cree dos enlaces simbólicos, uno para libssl.so.1.1 y otro para libcrypto.so.1.1:
ln -s /usr/lib/libssl.so.1.0.0 /usr/lib/libssl.so.1.1 ln -s /usr/lib/libcrypto.so.1.0.0 /usr/lib/libcrypto.so.1.1
Luego intenté nuevamente actualizar la lista de paquetes de pacman, y obtuve el siguiente error:
Y allí me acordé: había actualizado curl, pero lo que no sabía es que curl requería versiones actualizadas de libssl y libcrypto. Además, lo había actualizado por sí solo pensando que yo había sido el que había instalado el paquete y que no había dependencias de este. Pero para mi horror, el mismísimo pacman dependía de curl.
Intenté buscar una forma de desactualizar curl, pero la forma estándar requería usar pacman, lo cual fue imposible. Oh, el horror.
Así que ni modo, a buscar una alternativa para hacer la actualización a pata. Gracias a Dios me encontré con esta entrada en Reddit: Pacman libcritpto.so.1.1 errors.
Desactualizando paquete de Arch sin pacman
Sabiendo que en mi caso el error había sido solamente con curl, procedí a realizar la desinstalación de la versión más nueva que encontré en /var/cache/pacman/pkg, la cual era curl-7.55.1-1. Ejecuté el siguiente comando, como super usuario:tar -tf /var/cache/pacman/pkg/curl-7.55.1-1-x86_64.pkg.tar.xz | sed s:^:/: | grep -v /$ | xargs rm
Explicando el comando por partes:
Paso | Comando | Descripción | |
---|---|---|---|
1 | tar -tf /var/cache/pacman/pkg/curl-7.55.1-1-x86_64.pkg.tar.xz | Obtiene la lista de archivos contenidos en el paquete. | |
2 | sed s:^:/: | Agrega / al principio de la ruta de cada archivo. | |
3 | grep -v /$ | Del listado anterior, quita los elementos que terminen en /, ya que estos corresponden a carpetas. | |
4 | xargs rm | Elimina los archivos listados. |
Luego, procedí a instalar la versión previa disponible en el cache de paquetes, que era curl-7.52.1-2, con el siguiente comando (siempre como usuario root):
tar -xf /var/cache/pacman/pkg/curl-7.52.1-2-x86_64.pkg.tar.xz
Y finalmente probé actualizar nuevamente la base de datos de pacman, y todo resultó bien:
Lección aprendida: No actualizar Arch Linux a medias.
0 comentarios:
Publicar un comentario