Crear un entorno chroot con debootstrap en Gentoo o Debian

Como dice el encabezado, se seguirán los pasos para crear un entorno Debian/GNU Linux o alguna de las distribuciones que en ella están basadas, como la que utilizaré para el ejemplo: una feisty de Ubuntu.

Esto lo conseguiremos rápidamente gracias al paquete dev-util/debootstrap en Gentoo Linux o al paquete debootstrap en Debian GNU/Linux.

Una vez instalado podremos ver los entornos que podemos recrear, gracias a sus profiles que se encuentran en

~ $ ls /usr/share/debootstrap/scripts

Se puede utilizar del siguiente modo, por ejemplo:

~ $ debootstrap -arch=arquitectura versión dir-destino url-origen

donde

  • arquitectura el tipo de máquina para la que lo creamos amd64, i386 ...
  • versión: el la versión que instalaremos, si se trata de debian (eth, lenny, sid ...) si ubuntu (hardy gutsy feisty edgy dapper)
  • dir-destino el directorio que contendrá la raíz del nuevo sistema.
  • uri-origen: es la url desde donde iniciaremos la instalación, podemos informarnos de algún /etc/apt/sources.list donde encontraremos la url y la distro.

no tardará mucho en completarse y en poco tiempo tenemos nuestro entorno mínimamente funcional (es como la instalación que menos ocupa de cada distribución).

debemos trabajar como root, empezamos:
~ $ sudo su
~ # debootstrap --arch=i386 feisty ubuntu http://archive.ubuntu.com/ubuntu

Si queremos entrar en el nuevo sistema antes montaremos aquello que nos pueda hacer falta
~ # mount -t proc none ubuntu/proc
~ # mount -o bind /dev ubuntu/dev
~ # mount -o bind /sys ubuntu/sys

Ya podemos entrar en el nuevo entorno con
~ # chroot ubuntu /bin/bash

lo primero que podemos hacer es limpiar los depósitos del dpkg

~ # apt-get clean
y volvemos a leer el inittab
~ # init -q

y ya estamos en el entorno recreado.
-------------------------------------------------------------------
(¯`·._.·-oOOoo- <| ^· _·^ Segunda Parte ^· _·^ |"-oOOoo-·._.·´¯)
-------------------------------------------------------------------
Voy a recrear un ejemplo más real, grácias al mensaje Ayuda gcc, voy a emular el mismo entorno en mi máquina. Se trata se Xandros. A partir de la primera URL en donde el nombre de la distribución es p701 no lo he conseguido, principalmente porqué no tengo los profiles de p701 en /usr/share/debootstrap/scripts

~ # sudo debootstrap --arch=i386 etch Xandros http://xnv4.xandros.com/xs2.0/upkg-srv2

Con lo que consigo un entorno, monto aquello que me puede hacer falta

~ $ sudo mount -t proc none Xandros/proc
~ $ sudo mount -o bind /dev Xandros/dev
~ $ sudo mount -o bind /sys Xandros/sys
~ $ sudo chroot Xandros /bin/bash
/ # apt-get clean
/ # cat <<_eOf_> /etc/apt/sources.list
> deb http://update.eeepc.asus.com/p701 p701 main
> deb http://update.eeepc.asus.com/p701/es p701 main
> _eOf_
/ # apt-get update

Bien vamos allá. Ahora tengo el mismo entorno que se tiene en el mensaje. Lo que quiere hacer nuestro amigo es instalar gcc, y podemos comprobar que no lo tenemos:

/ # gcc
bash: gcc: command not found

/ # apt-cache search --names-only gcc
gcc-3.3-base - The GNU Compiler Collection (base package)
libgcc1 - GCC support library
gcc-4.1-base - The GNU Compiler Collection (base package)
gcc-3.4-base - The GNU Compiler Collection (base package)

Primero vamos a ampliar los archivos del sources list:

/ # cat <<_eOf_>> /etc/apt/sources.list
>
> # xandros
> deb http://xnv4.xandros.com/xs2.0/upkg-srv2 etch main contrib non-free
> deb http://dccamirror.xandros.com/dccri/ dccri-3.0 main
> deb http://www.geekconnection.org/ xandros4 main
>
> # community
> deb http://download.tuxfamily.org/eeepcrepos/ p701 main etch
>
> # mine
> deb http://eee.yet-another-geek.org/ ./
> _eOf_

Ahora establecemos la prioridad para los sitios de descarga estableciendola en el archivo /etc/apt/preferences

/ # cat <<_eOf_> /etc/apt/preferences
> Package: *
> Pin: origin update.eeepc.asus.com
> Pin-Priority: 950
>
> Package: *
> Pin: origin
> Pin-Priority: 925
>
> Package: *
> Pin: origin xnv4.xandros.com
> Pin-Priority: 90
>
> Package: *
> Pin: origin dccamirror.xandros.com
> Pin-Priority: 85
>
> Package: *
> Pin: origin www.geekconnection.org
> Pin-Priority: 75
>
> Package: *
> Pin: release a=stable
> Pin-Priority: 70
>
> Package: *
> Pin: release a=testing
> Pin-Priority: 65
>
> Package: *
> Pin: release a=unstable
> Pin-Priority: 60
> _eOf_

Vamos a actualizar

apt-get update

Si ahora buscamos de nuevo gcc encontramos todos estos:

/ # apt-cache search --names-only gcc
gcc-3.3-base - The GNU Compiler Collection (base package)
libgcc1 - GCC support library
gcc-4.1-base - The GNU Compiler Collection (base package)
gcc-3.4-base - The GNU Compiler Collection (base package)
colorgcc - Colorizer for GCC warning/error messages
gcc - The GNU C compiler
gcc-2.95 - The GNU C compiler
gcc-2.95-doc - Documentation for the GNU compilers (gcc, gobjc, g++)
gcc-3.3 - The GNU C compiler
gcc-3.4 - The GNU C compiler
gcc-4.1 - The GNU C compiler
gcc-4.1-locales - The GNU C compiler (native language support files)
gcc-4.1-source - Source of the GNU Compiler Collection
gcc-avr - The GNU C compiler (cross compiler for avr)
gcc-m68hc1x - GNU C compiler for the Motorola 68HC11/12 processors
gcc272 - The GNU C compiler.
gcc272-docs - Documentation for the gcc compiler (gcc272).
gccxml - XML output extension to GCC
lib64gcc1 - GCC support library (64bit)
pocketpc-gcc - The GNU C compiler for Pocket PC
gcc-doc - documentation for the GNU compilers (gcc, gobjc, g++)
gcc-4.1-doc - documentation for the GNU compilers (gcc, gobjc, g++)
gcc-doc-base - several GNU manual pages
gcc-3.3-doc - Documentation for the GNU compilers (gcc, gobjc, g++)

Con lo que ahora sí que se puede instalar el gcc :-))

/ # apt-get install gcc

Reading package lists... Done
Building dependency tree... Done
The following extra packages will be installed:
  binutils cpp cpp-4.1 gcc-4.1 libssp0
Suggested packages:
  binutils-doc cpp-doc gcc-4.1-locales make manpages-dev autoconf automake1.9
  libtool flex bison gdb gcc-doc gcc-4.1-doc libc6-dev-amd64 lib64gcc1
  lib64ssp0
Recommended packages:
  libc6-dev libc-dev libmudflap0-dev
The following NEW packages will be installed:
  binutils cpp cpp-4.1 gcc gcc-4.1 libssp0
0 upgraded, 6 newly installed, 0 to remove and 0 not upgraded.
Need to get 5419kB of archives.
After unpacking 14.0MB of additional disk space will be used.
Do you want to continue [Y/n]? Y
WARNING: The following packages cannot be authenticated!
  cpp-4.1 cpp binutils libssp0 gcc-4.1 gcc
Install these packages without verification [y/N]? y
...

/ # gcc --version
gcc (GCC) 4.1.2 20061115 (prerelease) (Debian 4.1.1-21)
Copyright (C) 2006 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

ByE