Chroot: Un entorno seguro para probar nuestro software
Categorías: Distribuciones de Gnu/Linux | Gentoo |
|
Esta sección es un esbozo en construcción. Se aprecian tus aportes y paciencia |
Contents
Enlaces:
How to set up a 32bit chroot en la documentación de gentoo. Este documento está basado fuertemente en esta referencia, incluso hay una traducción en español, pero no está en un wiki y no es exacta a esta (además la simpleza y escalabilidad de los medios de expresión modifican la simpleza y escalabilidad del mensaje, parafraseando a Alan Kay
). Howto AMD64 en Gentoo wiki.
Chroot en la wikipedia en inglés: Traducción del artículo en inglés en marcha.
1. Procedimiento
1.1. Fuera del chroot
- Se crea alguna carpeta donde se descarga un archivo de stage3 de gentoo para x86 de los mirror oficiales:
$ mkdir -p /home/Compartido/Instaladores/Distros/Gentoo32/ $ cd /home/Compartido/Instaladores/Distros/Gentoo32/ $ wget -c ftp://distfiles.gentoo.org/releases/x86/2006.1/stages/stage3-i686-2006.1.tar.bz2
- Se descomprime el archivo recien descargado al lugar donde se ejecutará el chroot:
$ su - (tecleamos la contraseña de superusuario) # mkdir /mnt/Gentoo32 # cd /mnt/Gentoo32 # tar -xvjpf /home/Compartido/Instaladores/Distros/Gentoo32/stage3-i686-2006.1.tar.bz2
- Copiamos los archivos de configuración de nuestra máquina al chroot:
# cp -L /etc/resolv.conf /mnt/Gentoo32/etc/ # cp -L /etc/passwd /mnt/Gentoo32/etc/
Modificamos el archivo /mnt/Gentoo32/etc/make.conf para que quede de esta manera:
CFLAGS="-march=k8 -m32 -O2 -pipe" CHOST="i686-pc-linux-gnu" CXXFLAGS="${CFLAGS}" MAKEOPTS="-j2"
Advertencia: Es importante colocar los flags de compilación adecuados en el archivo make.conf para el procesador que estamos usando, de lo contrario obtendremos el mensaje "checking for C compiler default output file name... configure: error: C compiler cannot create executables", referido al hecho de que el compilador no puede crear ejecutables para nuestra arquitectura, con las opciones que hemos colocado - Montamos los sistemas virtuales:
# mount -o bind /dev /mnt/Gentoo32/dev # mount -o bind /dev/pts /mnt/Gentoo32/dev/pts # mount -o bind /dev/shm /mnt/Gentoo32/dev/shm # mount -o bind /proc /mnt/Gentoo32/proc # mount -o bind /proc/bus/usb /mnt/Gentoo32/proc/bus/usb # mount -o bind /sys /mnt/Gentoo32/sys # mount -o bind /tmp /mnt/Gentoo32/tmp
Creamos un enlace simbólico de nuestro portaje actual al del chroot de modo que cada vez que actualicemos uno, quede actualizado el otro, sin necesidad de copiar archivos hasta el chroot.
# mkdir -p /mnt/Gentoo32/usr/portage/ # mount -o bind /usr/portage /mnt/Gentoo32/usr/portage/
- Opcionalmente podemos habilitar que las carpetas más importantes de nuestros usuarios en el entorno de 64 bits sean compartidas también dentro del chroot, por ejemplo:
# mkdir -p /mnt/Gentoo32/home/offray/Documentos # mount -o bind /home/offray/Documentos /mnt/Gentoo32/home/offray/Documentos
- Finalmente habilitamos la ejecución de aplicaciones gráficas:
# xhost local:localhost
1.2. Dentro del chroot
Con la ayuda de setarch configuramos el chroot para que perciba un entorno de 32 bits, en lugar del de 64 (en caso de no tener ya instalado setarch, cosa poco probable, hacemos un emerge setarch, previamente). Luego de estar en el chroot verificamos, con uname que efectivamente estamos dentro de un entorno con las variables apropiadas
# linux32 chroot /mnt/Gentoo32 /bin/bash # uname -m i686
- Ahora actualizamos nuestro entorno de 32 bits:
# source /etc/profile # env-update >>> Regenerating /etc/ld.so.cache...
- La salida del último comando será algo como esto:
Performing Global Updates: /usr/portage/profiles/updates/3Q-2007 (Could take a couple of minutes if you have a lot of binary packages.) .='update pass' *='binary update' @='/var/db move' s='/var/db SLOT move' S='binary SLOT move' p='update /etc/portage/package.*' ......................................... These are the packages that would be merged, in order: Calculating world dependencies... done!
y luego aparecerá un listado de todos los paquetes que serán actualizados en el chroot. Una vez respondamos que sí deseamos hacer la actualización, empezará el proceso de compilación de todos los paquetes actualizados. - Estamos ya listos para ejecutar aplicaciones de consola en el chroot, pero probablemente queramos también ejecutar aplicaciones gráficas, por lo que requeriremos dentro del chroot las librerías necesarias para esto. Instalando una pequeña aplicación gráfica, traeremos dichas aplicaciones sin otros requerimientos mayores (como las que traen gtk o qt). Xgalaga puede ser una buen candidato para esto y nos dará algunos momentos de diversión
nostálgica, para los que disfrutamos de los juegos de arcade ochenteros
# emerge xgalaga
La salida es algo como esto:* Just run 'gpasswd -a <USER> games', then have <USER> re-login.
Así que adicionamos a un usuario al grupo juegos y ejecutamos Xgalaga - El resultado final es algo como esto: Colocar acá una captura de pantalla del chroot ejecutando una aplicación gráfica.
1.3. Automatizando el montaje cada vez que se inicia
Ahora con el siguiente script haremos que el chroot quede habilitado cada vez que iniciemos la máquina:
Descargamos el script y lo copiamos en /etc/init.d/gentoo32
Lo hacemos ejecuble: chmod +x /etc/init.d/gentoo32
Ejecutamos como superusuario: rc-update add gentoo32 default
2. Faltante
- Habilitar a un usuario diferente al administrador para usar el chroot.
