In this post I will show you how to make chroot systems using the debootstrap utility.

In questo post vi mostro come creare sistemi chroot usando il programma debootstrap.

How to create chroot environments with debootstrap

Hello world, today I'm going to explain how to create chroot environments by using the debootstrap command.
Chroot, as reported here, "on Unix operating systems is an operation that changes the apparent root directory for the current running process and its children".
In short, you can have another system (the "chroot environment") installed on a subdirectory of your current system. If you execute a program with the chroot command, its root directory will be the one you choose for it, not your current system's root directory, the consequence is that directories outside the chroot directory you've chosen, cannot be acceded by the program.
Usually, chroot environments are used by developers for testing purposes, this way they don't have to mess with their actual system.

Nowadays, there's another reason to create a chroot environment, it's more a playful reason than an useful one though.
In 2012, I followed the tutorial proposed here, to install an Ubuntu distribution on my LG-E510.
The Ubuntu distribution mentioned earlier was, as you can imagine, a chroot environment, the program that I executed on this environment was "/bin/bash", which allowed me to execute an Ubuntu terminal session along Android, thanks to a Terminal Emulator app.
This can be done because of Android's nature, after all, it uses the Linux kernel.
The only thing I was never able to do, was to create a chroot environment from scratch (I used the one proposed in the tutorial), and frankly, I didn't have a good reason to do so (the phone is pretty slow, and trust me, you don't want to use a pc operating system on a phone).
Everything changed when the Galaxy Tab came along, in fact, I had a powerful machine compared to my phone, so I could actually make a good use of the environment.

The command used to make a new system in the Debian and Ubuntu distributions is debootstrap or cdebootstrap (the latter is used on Debian installers).
This, as for the previous post on the dd command, won't be a full tutorial on this utility.

The first thing you need is to install the debootstrap utility, on Debian/Ubuntu, you can do that by typing:

sudo apt-get install debootstrap

Simple installation

If you want to create a simple environment, you may want to install it on a directory of your current system.
I'm going to assume that you want to install the environment in ~/chroot_environment, of course, first, make the directory:

mkdir ~/chroot_environment

It's time to use debootstrap (please notice that every mount and debootstrap operation needs root privileges):
The command to use in this case is:

debootstrap --arch architecture_name distribution_code_name install_directory repository_url

Here's a brief description of the arguments:

  • architecture_name:
    It specifies the target architecture.
  • distribution_code_name:
    It specifies the distribution code name (this depends on the GNU/Linux distribution, examples of code names are wheezy, lenny, jessie for Debian and karmic for Ubuntu).
  • install_directory:
    It specifies the directory where to install the environment.
  • repository_url:
    It specifies the url where to retrieve the system from.

For simplicity, I'm going to assume you want to install Debian Wheezy (one of the official repositories is http://ftp.it.debian.org/debian/), in the ~/chroot_environment directory.
To install the environment on an i386 machine, you need to type:

debootstrap --arch i386 wheezy ~/chroot_environment http://ftp.it.debian.org/debian/

Installing on a different partition

Nothing prevents you to install the chroot environment in a totally different partition that you prepared for this purpose.
In this case we will use the ~/chroot_environment directory as mount point.
I will asume that your partition is "/dev/sdb1". First, mount it:

mount /dev/sdb1 ~/chroot_environment

Now you can type as before:

debootstrap --arch i386 wheezy ~/chroot_environment http://ftp.it.debian.org/debian/

You can unmount the partition now:

umount ~/chroot_environment

Installing for a different architecture

Let's say you want to install the environment on a partition intended for another architecture, assuming that the partition is, again, mounted on ~/chroot_environment, you would use a command similar to this:

debootstrap --arch architecture_name --foreign wheezy ~/chroot_environment http://ftp.it.debian.org/debian/

Remember to add the --foreign parameter, it is important because it instructs the program to just perform the packages download, it does not install the system (you cannot execute the installation from the architecture, because the target one is different).
It's time to execute the second stage of the debootstrap program (that is, installation of the system), from the target architecture.
Mount the partition and type as follows:

chroot mount_directory /debootstrap/debootstrap --second-stage

How to make partition files to use with Android

The first thing to do is to create an image disk of a partition formatted with ext4.
Once you have created it, mount it, and do the same steps of the previous section.

Let's see a full working script example:

#Make a 5 Gb partition image disk formatted as ext4
dd if=/dev/zero of=debian_wheezy.img bs=5M count=1024
mkfs -t ext4 debian_wheezy.img

#Mount the disk image
mkdir mount_tmp
sudo mount debian_wheezy.img mount_tmp

#Download the system
sudo debootstrap --arch armel --foreign wheezy mount_tmp http://ftp.it.debian.org/debian/
sudo umount mount_tmp
rmdir mount_tmp

Now, move the disk image to your Android device, use the Terminal Emulator app to use the scripts and enter into a bash session.
Complete the installation by giving this command:

/debootstrap/debootstrap --second-stage

These are some of the ways to make a chroot environment.
I hope you find this post useful, and as usual, see you another time, in another post!

Go back to the top, Share, Look at the comments or Comment yourself!

Come creare ambienti chroot con debootstrap

Salve mondo, oggi mi accingo a spiegare come creare ambienti chroot utilizzando il comando debootstrap.
Chroot, come riportato qui, "on Unix operating systems is an operation that changes the apparent root directory for the current running process and its children" (sui sistemi operativi Unix è un'operazione che cambia la cartella radice visibile al processo attualmente in esecuzione e ai suoi discendenti).
In breve, è possibile avere un altro sistema (l'"ambiente chroot") installato in una sottocartella del sistema corrente. Se eseguite un programma con comando chroot, la sua cartella radice sarà quella che gli fornirete voi, non la cartella radice del sistema corrente, conseguenza di ciò è che le cartelle risiedenti al di fuori della cartella chroot che avete scelto, non saranno accessibili dal programma.
Solitamente, gli ambienti chroot vengono usati dagli sviluppatori a scopo di test, in questo modo non devono scomodare il loro vero sistema.

Oggi giorno c'è anche un'altra ragione per creare un ambiente chroot, una ragione più ludica che utile in realtà.
Nel 2012, ho seguito il tutorial proposto qui, per installare una distribuzione Ubuntu sul mio LG-E510.
La distribuzione Ubuntu prima menzionata era, come immaginerete, un ambiente chroot, il programma che eseguivo era "/bin/bash", che mi permetteva di eseguire una sessione da terminale di Ubuntu assieme ad Android, grazie ad una app emulatore di terminale.
Questo è possibile per via della natura di Android, dopotutto, utilizza il kernel Linux.
C'è stata una sola cosa che non sono mai riuscito a fare, non sono mai riuscito a creare un ambiente chroot da zero (utilizzavo quello proposto nel tutorial), e francamente, non avevo una buona ragione per farlo (il telefono è molto lento, e credetemi, non è cosa buona usare un sistema operativo per computer su un telefono).
Tutto è cambiato quando è arrivato il Galaxy Tab, infatti, avevo una macchina potente rispetto al telefono, potevo dunque fare un buon uso dell'ambiente.

Il comando usato per fare un nuovo sistema nelle distribuzioni Debian e Ubuntu è debootstrap o cdebootstrap (il secondo viene usato negli installatori di Debian).
Questo, come per il precedente post sul comando dd, non sarà un tutorial completo su questo programma.

La prima cosa da fare è installare il programma debootstrap, su Debian/Ubuntu, potete farlo digitando:

sudo apt-get install debootstrap

Installazione semplice

Se volete creare un semplice ambiente, lo dovreste installare su una sottocartella del vostro sistema.
Assumerò che vogliate installare l'ambiente in ~/ambiente_chroot, ovviamente, prima, create la cartella:

mkdir ~/ambiente_chroot

È il momento di utilizzare debootstrap (vi faccio notare che ogni operazione di montaggio e di debootstrap ha bisogno dei privilegi di root):
Il comando da utilizzare in questo caso è:

debootstrap --arch nome_architettura nome_codice_distribuzione cartella_installazione url_repository

Ecco qui una breve descrizione degli argomenti:

  • nome_architettura:
    Specifica l'architettura di destinazione.
  • nome_codice_distribuzione:
    Specifica il nome in codice della distribuzione (dipende dalla distribuzione GNU/Linux, esempi di nomi in codice sono wheezy, lenny, jessie per Debian e karmic per Ubuntu).
  • cartella_installazione:
    Specifica la cartella dove installare l'ambiente.
  • url_repository:
    Specifica l'indirizzo da dove scaricare il sistema.

Per semplicità, assumerò che vogliate installare Debian Wheezy (uno dei repository ufficiali è http://ftp.it.debian.org/debian/), nella cartella ~/ambiente_chroot.
Per installare l'ambiente su una macchina i386, dovete digitare:

debootstrap --arch i386 wheezy ~/ambiente_chroot http://ftp.it.debian.org/debian/

Installare su una diversa partizione

Niente vi vieta di installare l'ambiente chroot in una partizione diversa che avete preparato a tale scopo.
In questo caso utilizzeremo la cartella ~/ambiente_chroot come punto di montaggio.
Assumerò che la vostra partizione sia "/dev/sdb1". Prima montatela:

mount /dev/sdb1 ~/ambiente_chroot

Ora digitate come prima:

debootstrap --arch i386 wheezy ~/ambiente_chroot http://ftp.it.debian.org/debian/

Adesso smontate la partizione:

umount ~/ambiente_chroot

Installare su un'altra architettura

Assumiamo che vogliate installare l'ambiente su una partizione destinata ad un'altra architettura, assumendo che la partizione sia, di nuovo, montata su ~/ambiente_chroot, dovreste usare un comando come questo qui:

debootstrap --arch nome_architettura --foreign wheezy ~/ambiente_chroot http://ftp.it.debian.org/debian/

Ricordatevi di aggiungere il parametro --foreign, è importante perché istruisce il programma ad effettuare solo lo scaricamento dei pacchetti, non installa il sistema (non potete eseguire l'installazione dall'architettura corrente, perché quella di destinazione è diversa).
È il momento di eseguire la seconda fase del programma debootstrap (cioè, l'installazione del sistema) dall'architettura di destinazione.
Montate la partizione e digitate come segue:

chroot cartella_montaggio /debootstrap/debootstrap --second-stage

Come creare file di partizioni da usare su Android

La prima cosa da fare è creare un'immagine disco di una partizione formattata in ext4.
Una volta creata, montatela e fate gli stessi passi fatti nella sezione precedente.

Vediamo uno script d'esempio:

#Crea l'immagine disco di una partizione di 5 Gb formattata in ext4
dd if=/dev/zero of=debian_wheezy.img bs=5M count=1024
mkfs -t ext4 debian_wheezy.img

#Monta l'immagine disco
mkdir mount_tmp
sudo mount debian_wheezy.img mount_tmp

#Scarica il sistema
sudo debootstrap --arch armel --foreign wheezy mount_tmp http://ftp.it.debian.org/debian/
sudo umount mount_tmp
rmdir mount_tmp

Ora, spostate l'immagine disco sul vostro dispositivo Android, usate l'app dell'emulatore di terminale ed entrate in una sessione bash.
Completate l'installazione dando questo comando:

/debootstrap/debootstrap --second-stage

Questi sono alcuni dei modi per creare ambienti chroot.
Spero che troviate utile questo post, e come al solito, ci si vede un'altra volta, in un altro post!

Torna in cima, Condividi, Guarda i commenti o Commenta tu stesso!