martes, 20 de marzo de 2012

Cómo instalar la distribución GENTOO en un entorno CHROOT

Este artículo describe cómo construir un entorno chroot en el que instalaremos la distribución Gentoo.

NOTA: Nuestro sistema host será una Debian GNU/Linux, pero los mismos pasos deberían funcionar en la mayoría de distros basadas en linux (p.ej: Ubuntu)


DESCARGAR UN SISTEMA MÍNIMO GENTOO

Primero vamos a descargar un sistema Gentoo mínimo, llamado STAGE3.

Elegimos nuestra arquitectura, en mi caso x86, y específicamente i686.
http://mirrors.kernel.org/gentoo/releases/x86/autobuilds/current-stage3/
$ wget http://mirrors.kernel.org/gentoo/releases/x86/autobuilds/current-stage3/stage3-i686-*.tar.bz2

Podemos encontrar una lista de mirrors aquí: http://www.gentoo.org/main/en/mirrors.xml

Ó también podemos descargar directamente de la página de gentoo:
$ wget ftp://distfiles.gentoo.org/pub/gentoo/releases/x86/current-stage3/stage3-i686-*.tar.bz2



CREAMOS NUESTRO DIRECTORIO GENTOO

Creamos el directorio donde colocaremos los ficheros de Gentoo:
$ mkdir gentoo_chroot
y descomprimimos allí el archivo stage3.
# tar xvjf stage3-i686-20100216.tar.bz2 -C gentoo_chroot/


Copiamos el fichero resolv.conf para que el sistema sea capaz de resolver direcciones:
# cp -L /etc/resolv.conf gentoo_chroot/etc/resolv.conf


Copiamos el fichero /etc/host:
# cp /etc/hosts gentoo_chroot/etc/
o también podemos crear uno nuevo:
p.ej: # echo "127.0.0.1 mybox.at.myplace mybox localhost" > gentoo_chroot/etc/hosts


Es una buena idea usar el mismo hostname que en el host, ya que si lo cambiamos en la jaula chroot, también cambiará en el host.


Cuando entremos en la jaula chroot ejecutaremos:
# hostname -f # muestra mybox.at.myplace.
# ping mybox.at.myplace



MONTAMOS LOS DIRECTORIOS NECESARIOS

Usaremos la opción bind para duplicar algunos directorios del host en el entorno chroot.

# mount --bind /dev gentoo_chroot/dev
# mount --bind /proc gentoo_chroot/proc
# mount --bind /sys gentoo_chroot/sys
# mount --bind /dev/pts gentoo_chroot/dev/pts # Necesarios para loguearse con agetty y el comando screen.
# mount --bind /tmp gentoo_chroot/tmp # Si queremos compartir las X windows entre el host y el entorno chroot.


ENTRAMOS EN EL ENTORNO CHROOT

# chroot gentoo_chroot /bin/bash
Ya estamos dentro del entorno chroot con gentoo!!
Mientras no especifiquemos lo contrario, cada comando desde ahora se ejecutará dentro del entorno chroot.


Actualizamos y configuramos algunas variables de entorno:
# env-update
# source /etc/profile # Para configurar nuestro entorno de shell actual.


CONFIGURANDO EL PROMPT

También podemos configurar el prompt para nos muestre que estamos dentro de la jaula chroot.
# export PS1="(chroot) $PS1"

Para que los cambios sean permanentes debemos cambiar /etc/profile.
# echo "export PS1=\"(chroot) \$PS1\"" >> /etc/profile
Para las shells que no sean de login hay que editar el fichero .bashrc .


CREAR EL FICHERO /etc/mtab

# cp /proc/mounts gentoo_chroot/etc/mtab

Algunas líneas del fichero mtab son inútiles así que las editamos:
# nano -w /etc/mtab

Y dejamos algo similar a ésto:
udev /dev tmpfs rw,relatime,size=10240k,mode=755 0 0
none /sys sysfs rw,nosuid,nodev,noexec,relatime 0 0
none /proc proc rw,nosuid,nodev,noexec,relatime 0 0
devpts /dev/pts devpts rw,relatime,mode=600,ptmxmode=000 0 0

Ahora ya podremos ejecutar los comandos mount y df.


CONFIGURANDO LA ZONA HORARIA

# ls /usr/share/zoneinfo # Muestra las zonas horarias disponibles.
# cp /usr/share/zoneinfo/Europe/Madrid /etc/localtime # En mi caso uso la zona horaria de Madrid.



CONFIGURANDO LAS LOCALES

$ cd /etc
# nano -w locale.gen
Añado: es_ES.UTF-8 UTF-8 # Son las locales específicas para el español de España. Elige las que más te convengan.
# locale-gen # Generamos las locales.
Cambiamos la locale:
# export LANG=es_ES.UTF-8
# locale



CAMBIAMOS EL PASSWORD DE ROOT

# passwd root

Editamos el fichero /etc/securetty
# nano -w /etc/securetty
Hay que añadir allí todas las tty en las que queramos poder loguearnos como root. p.ej: añadimos pts/5 si queremos loguearnos como root desde la tty /dev/pts/5.
Ejecuta $echo $(tty) en el host para averiguar en qué tty te encuentras.



AÑADIENDO UN NUEVO USUARIO

Vamos a crear un usuario llamado "new_user":
# useradd -m new_user # la opción -m sirve para crear el directorio home.
# passwd new_user # cambiamos el password del usuario.
# su new_user # nos convertimos en el usuario new_user.



LOGUEÁNDONOS DE OTRA MANERA

Si entramos en el entorno chroot de la manera que hemos indicado hasta ahora, se nos mezclan las variables de entorno del host y del guest.

Una manera mejor es usando el comando agetty, ejecutamos en el host:
# chroot gentoo_chroot/ /sbin/agetty $(tty) 38400

Podemos loguearnos como root o como el nuevo usuario que acabamos de crear.

NOTA: El usuario estandar no será capaz de ganar privilegios de root mediante el comando su a no ser que pertenezca al grupo wheel, así que:

# usermod -a -G wheel new_user
# su new_user
$ su root
Si no, obtendríamos el error: "su: permission denied error".

Ahora el usuario "new_user" puede ejecutar el comando su y convertirse en root.



DESCARGAMOS PORTAGE

Portage es el sistema de control de paquetes de Gentoo.

Instalamos el subsistema portage porque así nos permitirá después seguir instalando más paquetes de la distro Gentoo.

# cd /usr # Portage está situado el el directorio /usr.
# wget http://distfiles.gentoo.org/snapshots/portage-latest.tar.bz2 # (35 MBytes)
o podemos descargarlo desde un mirror: http://www.gentoo.org/main/en/mirrors.xml

Lo descomprimimos:
# tar xvjf portage-latest.tar.bz2



HERRAMIENTA EMERGE

Emerge es una herramienta de línea de comandos que nos permitirá buscar, instalar, actualizar, etc paquetes de Gentoo.

Instalamos el paginador less:
$ emerge --search less
encontramos: sys-apps/less
# emerge less # instalamos el paginador.
la herramienta less se compila y se instala.

Instalamos el gestor de terminales: screen.
$ emerge --color y --search screen | less
# emerge -v screen

Vamos a instalar un navegador web en modo texto:
Buscamos entre las categorias. p.ej: www-client
$ emerge --search @www-client --color y | less
# emerge -v links
$ links http://linuxclues.blogspot.com

Mi editor de texto favorito:
$ emerge --color y --search emacs | less
$ emerge --pretend emacs # Para ver que ocurrirá sin llegar a instalar nada.
# emerge -v emacs
# tail -f /var/log/emerge-fetch.log # Para ver el estado de la descarga del paquete.



COMPARTIENDO LAS X ENTRE EL HOST Y EL ENTORNO CHROOT

# emerge -v xclock # usaremos la herramienta xclock para testear el sistema de las X.

Necesitamos obtener permisos y guardarlos en el fichero .Xauthority:

En la máquina host ejecutamos:
$ xauth list
obtendremos algo así:
mybox/unix:0  MIT-MAGIC-COOKIE-1  5e20455a59909d2f911d73b8d7d8cba5

Como estoy usando un socket unix para conectar con el display :0 de las X, copio la línea anterior.

En el entorno chroot:
# emerge xauth
# xauth add mybox/unix:0 MIT-MAGIC-COOKIE-1 5e20455a59909d2f911d73b8d7d8cba5
# DISPLAY=:0.0 xclock # ahora podemos ejecutar aplicaciones X como root.
$ xauth add mybox/unix:0 MIT-MAGIC-COOKIE-1 5e20455a59909d2f911d73b8d7d8cba5
$ DISPLAY=:0.0 xclock # ya podemos ejecutar aplicaciones X como el usuario estandar.



INSTALAMOS MPLAYER PARA TESTEAR EL VÍDEO Y EL SONIDO

# emerge -v mplayer

Después de instalar mplayer, se ejecuta correctamente como root, pero no como el usuario estandar. Necesitamos concederle al usuario privilegios de audio.

Como uso los drivers de sonido alsa:
$ ls -l /dev/snd
Observamos en mi caso que los ficheros pertenecen al grupo número 29 (ésto aquí es un residuo de la máquina host)
Edito el fichero /etc/group y cambio el grupo de audio a 29.
# nano -w /etc/group
audio::29:

Añadimos el usuario estandar al grupo de audio:
# usermod -a -G audio new_user
# su new_user
$ mplayer -vo xv -framedrop foo.avi



SALIMOS DEL LA JAULA CHROOT

Símplemente escribimos:
$ exit



UMOUNT

Después de salir desmontamos los directorios montados mediante la opcion bind:
# umount gentoo_chroot/dev/pts
# umount gentoo_chroot/dev
# umount gentoo_chroot/proc
# umount gentoo_chroot/sys
# umount gentoo_chroot/tmp

NOTA: si al desmontar los directorios se queja de que "bind mount busy", puedes utilizar: mount -M para mover el directorio a otro lugar.
(Ya sé que es un apaño algo chapucero :-D )


TRADUCIDO DE

Howto Create a GENTOO Distro CHROOT ENVIRONMENT


REFERENCIA:

Gentoo Quick Install Guide
Portage (Wikipedia)

$ man emerge

Gentoo Documentation

No hay comentarios:

Publicar un comentario