venerdì 10 giugno 2011

Installazione minimale di Ubuntu con debootstrap

Avevo la necessità di creare un numero consistente di macchine virtuali per fare delle simulazioni, ma tutte, pur condividendo la stessa distribuzione Linux di base, mi portavano via molto tempo e molto impegno perché ogni volta mi ritrovavo a dover rimuovere dei pacchetti che l'installer mi aveva automaticamente installato.
L'unica soluzione che vedevo a questo problema era quella di partire da una installazione minimale di Ubuntu, in modo da poter aggiungere in seguito solo i pacchetti veramente necessari. Ho individuato la soluzione (e anche la mia salvezza) nel comando debootstrap, che permette di installare, in modo minimale, all'interno di una directory, una distribuzione Ubuntu o Debian.
Premetto che la procedura che descrivo di seguito l'ho utilizzata personalmente sia per eseguire installazioni di macchine virtuali, che per l'installazione del mio notebook.
In sintesi ciò che faremo:
  1. scaricare la base minima di una distribuzione in una directory
  2. fare un chroot su questa directory
  3. impostare la password di root
  4. installare i pacchetti necessari al boot della macchina
  5. editare qualche file configurazione
  6. procedere al reboot della macchina
Ovviamente la partenza è un LiveCD di una distribuzione Debian based che ci permette di entrare in shell  per lanciare i comandi da tastiera.
La mia scelta è ricaduta su Finnix101, per le seguenti motivazioni:
  • è basata su Debian
  • è stata studiata per i system administrator e quindi ha a disposizione molti tool, utile quindi per essere utilizzata anche come RescueCD
  • permette di fare il boot sia del kernel a 32bit che di quello a 64bit dalla stessa ISO
  • la sua ISO è molto compatta (soli 128MB)
Procediamo per gradi.
Facciamo partire Finnix e, una volta scelto il kernel, ci ritroviamo al nostro bel prompt dei comandi come root. Per prima cosa, se non vogliamo impazzire, carichiamo il layout della tastiera italiana con il comando
loadkeys it
e a questo punto possiamo iniziare con il partizionamento dei dischi.
Innanzitutto verifichiamo quanti e quali dischi abbiamo a disposizione con il comando
fdisk -l
e poi partizioniamo secondo le nostre necessità.

Solitamente divido il disco in due partizioni: la prima per l'area di swap e la seconda come partizione LVM dove verranno creati i volumi logici da utilizzare.
Supponiamo di voler creare una partizione per /boot e una per la /, e che il nostro disco sia stato individuato come /dev/sda. Andremo a creare 2 partizioni: 1 per l'area di swap e una per i volumi logici di LVM.
fdisk /dev/sda
al prompt di fdisk procediamo come di seguito riportato:
  1. premere n per creare una nuova partizione
  2. scegliere p per una partizione primaria
  3. specificare 1 come numero di partizione da creare
  4. premere invio per accettare l'inizio di default della partizione
  5. specifichiamo la grandezza della partizione di swap che sarà di 4GB digitando al prompt +4096MB
  6. scegliere nuovamente n per creare l'altra partizione
  7. scegliere di nuovo p per una partizione primaria
  8. specificare 2 come numero di partizione da creare
  9. premere invio sia per accettare l'inizio della partizione, sia la fine della stessa, poiché vogliamo utilizzare l'intero disco
  10. premere t per impostare il tipo di partizione
  11. selezionare 1 come partizione da utilizzare
  12. digitare 82 per selezionare il tipo di partizione Linux Swap
  13. premere nuovamente t
  14. selezionare la partizione numero 2
  15. digitare 8e per selezionare il tipo di partizione Linux LVM
  16. premere p per verificare la correttezza della situazione corrente
  17. se tutto è corretto premere w per salvare le modifiche sul disco
La situazione delle partizioni ora è la seguente:
/dev/sda1: Linux Swap
/dev/sda2: Linux LVM

Passiamo ora alla creazione dei volumi logici LVM per l'installazione del sistema operativo.
Per prima cosa impostiamo la partizione /dev/sda2 come physical device con il comando
pvcreate /dev/sda2
Ora creiamo il gruppo logico con la partizione /dev/sda2 con il comando
vgcreate hds /dev/sda2
e infine creiamo 2 volumi logici: uno per la partizione / e uno per la partizione /boot impartendo i seguenti comandi:
lvcreate -n boot -L 1GB hds
lvcreate -n root -l 100%FREE hds
Passiamo alla formattazione dei volumi logici con il tipo di filesystem desiderato. Io ho scelto ext4.
mkfs.ext4 /dev/hds/root
mkfs.ext4 /dev/hds/boot
mkswap /dev/sda1

A questo punto siamo pronti per passare alla fase dell'installazione del sistema operativo. Per prima cosa montiamo la nostra partizione /dev/hds/root in /mnt
mount /dev/hds/root /mnt
e lanciamo debootstrap per installare un sistema operativo base. In questo esempio installeremo Ubuntu 11.04 a 64bit. Quindi lanciamo il comando
debootstrap --arch=amd64 natty /mnt
e attendiamo che tutto si concluda senza errori.
Bene, la nostra Ubuntu 11.04 minimale è installata nella directory /mnt. Ciò che dobbiamo fare ora è un chroot in questa directory per terminare la fase d'installazione. Prima però ricarichiamo il layout della tastiera italiana perché per qualche motivo è andato perso con il debootstrap.
loadkeys it
All'interno dell'ambiente chroot avremo bisogno dell'attuale directory /dev che quindi monteremo con l'opzione --bind. Poi eseguiremo il chroot nella directory /mnt e monteremo i filesystem virtuali di sistema e il volume logico destinato a /boot. Il chroot eseguirà automaticamente la shell bash e si posizionerà nell'ambiente dell'utente root come se avesse appena fatto il login.
mount --bind /dev /mnt/dev
chroot /mnt /bin/bash -c "su -"
mount none /proc -t proc
mount none /sys -t sysfs
mount none /dev/pts -t devpts
mount /dev/hds/boot /boot

Adesso siamo pronti per terminare l'installazione. I pacchetti base necessari per il boot della macchina sono il kernel, il boot loader e i moduli per LVM. A questi aggiungiamo anche qualche pacchetto di utilità che può esserci d'aiuto dopo aver effettuato il boot. Per quanto riguarda il kernel andremo ad installare una versione server, ma si può scegliere quella che si vuole. Per prima cosa impostiamo la password per l'utente root.
passwd
e poi
apg-get update
apt-get install linux-image-server lvm2 vim psmisc bash-completion

Terminata la fase di installazione dei pacchetti necessari al boot del sistema, facciamo un minimo di configurazione che riguarderà l'hostname della macchina, la tastiera e la timezone. L'hostname scelto per questo esempio è myserver01 quindi digitiamo:
echo myserver01 > /etc/hostname
hostname -F /etc/hostname

Per la tastiera:
dpkg-reconfigure keyboard-configuration
e seguire le istruzioni a video. Per la timezone:
dpkg-reconfigure tzdata
e seguire le istruzioni a video. Siamo pronti per riavviare il sistema e per installare i pacchetti desiderati.
Riavviamo uscendo prima dall'ambiente chroot
exit
reboot

Una volta riavviato il sistema (ovviamente in modalità testuale) facciamo il login come root e installiamo il software a piacimento secondo le nostre esigenze.  Per questo utilizziamo apt-get oppure aptitude. Se si vuole installare l'ambiente desktop è sufficiente installare il pacchetto virtuale ubuntu-desktop.
Prima di addentrarsi ad installare qualsiasi pacchetto, consiglio vivamente di modificare il file /etc/apt/sources.list per aggiungere i repository degli aggiornamenti di Ubuntu, e  di aggiornare il sistema. Solo ad aggiornamento avvenuto (e un eventuale reboot nel caso in cui sia stato aggiornato anche il kernel) procederei con l'installazione dei pacchetti desiderati.

Nessun commento:

Posta un commento