lunes, 31 de octubre de 2011

Reviviendo el sistema: chroot desde un Live CD

Hace unos meses instale algunos paquetes que no debía, y jodí completamente el sistema. A tal punto que este era incapaz de iniciarse. Sabiendo cuales eran los paquetes que había instalado, supuse que habría alguna manera de desinstalar los paquetes de mi sistema usando un Live CD. Luego de un buen rato me tope con chroot.


Según la documentación
chroot - run command or interactive shell with special root directory
chroot()  changes the root directory of the calling process to that specified in path.  This directory will be used for pathnames beginning with /. The root directory is inherited by all children of the calling process.
Es decir, podemos hacerle creer al sistema que el directorio raíz se encuentra en otra parte y poder hacer con él casi cualquier cosa que queramos. Su principales uso es: aislar aplicaciones del resto del sistema, ya sea por motivos de desarrollo y pruebas, seguridad  o compatibilidad.

Vamos a lo nuestro, restaurar el funcionamiento normal de nuestro sistema.


Primero tenemos que saber donde se encuentra la partición root que queremos reparar

 sudo fdisk -l  

Una vez que la hayamos localizados, tenemos que decidir donde vamos a crear la estructura virtual de nuestro sistema, en este caso lo haremos en /mnt/raiz. Por lo que tenemos que crear la carpeta que se va a usar como raíz, montar nuestro

 sudo mkdir /mnt/raiz
 sudo mount "ruta_particion" /mnt/raiz
 for i in /dev /dev/pts /proc /sys; do sudo mount -B $i /mnt/raiz$i; done  

Donde "ruta_particion" es valga la redundancia la ruta de la partición root, por ejemplo: /dev/sda5.

 sudo cp /etc/resolv.conf /mnt/raiz/etc/resolv.conf  
 sudo chroot /mnt/raiz  

Y por ultimo, tenemos que ejecutar dos ordenes mas, la primera se puede omitir sino necesitamos conexión a internet, y la segunda es la ejecución del comando chroot, así que mejor la dejamos.

 sudo cp /etc/resolv.conf /mnt/raiz/etc/resolv.conf  
 sudo chroot /mnt/raiz  

Et voila, ya estamos en condiciones de instalar/desintalar los paquetes que nos causaron el problema.

Una vez que salgamos del chroot, debemos desmontar las unidades montadas anteriormente

 for i in /dev/pts /dev /proc /sys; do sudo umount /mnt/raiz$i ; done  

Reiniciar y listo.