Linux installazione Full su pendrive USB e multibootusb

Le pendrive USB oramai offrono  a costi ragionevoli una quantità di spazio in termini GB di tutto rispetto (64/128GB) ,  con prestazioni superiori ad un hard disk tradizionale velocità superiori ai 250MB/s in velocità di lettura che possono superare  i 100 MB/s in scrittura ( Benchmark di chiavette USB flash drive memoria stick pendrive USB in Linux ). Le tradizionali distribuzioni linux Live seppur assistite dalla persistenza purtroppo non risultano abbastanza funzionali. Infatti per la persistenza viene utilizzato un unico file il cui accesso dall’esterno risulta problematico. Inoltre se su partizione FAT32 non rappresentano il massimo in termini di stabilità. Quindi è preferibile anche disporre di una installazione di Linux completa direttamente su USB ( full Linux USB) .

Questa operazione può essere portata agevolmente in porto installando linux direttamente su chiavetta usb come se si trattasse di un hard disk interno.
Il problema del booting può essere affrontato con successo sfruttando la praticità di un tools come multibootusb (  Multibootusb installazione e utilizzo in debian 9.xx ) che consente anche l’avvio diretto delle ISO.
Anzi grazie a multibootusb  potremmo avere a disposizione su una pendrive USB :

  • distribuzioni LIVE avviabili magari con la persistenza
  • distribuzioni linux in formato ISO
  • installazioni complete Linux su USB
  • installazioni clonate full linux
  • copie di backup delle configurazioni di grub ( grub.cfg) dei propri computers.

Il tutto può essere testato ( menu e distribuzioni ) senza riavviare il computer grazie all’opzione Boot ISO/USB che si appoggia all’emulatore  QEMU.

Fattore critico, la chiavetta, che deve essere di buona qualità. Diversamente se ad esempio viene persa la connessione USB si ha il “freeze” del sistema Linux.

Dopo aver installato 2 Live, 4 full distro ( Debian, MX, Ubuntu, Starky )  e aver copiato diverse copie di backups su una chiavetta samsung muf da 128GB il menu GRUB si potrebbe presentare nel modo seguente.

Le voci evidenziate sono ottenute rinominando  i file grub.cfg generati dalle procedure di grub-install  e/o update-grub e copiandoli nella directory grub di multibootusb.

Viste le diverse copie di configurazioni grub.cfg utilizzate  la directory grub di multibootusb potrebbe diventare un po’  affollata.

Le modifiche al file principale grub.cfg sono fatte manualmente e consistono in semplici menuentry che richiamano gli altri file grub.cfg copiati:

#start Avvio MX183-full msdos3
menuentry 'x Avvio MX183-full - msdos3/USB' {configfile /multibootusb/grub/grub_MX183_full.cfg}

Cliccando ad esempio il menu entry  sopra elencato ‘x  avvio MX183 …. ‘  infatti si ottiene un nuovo menu grub.

Come evidenziato sono presenti diverse copie di backup di file grub.cfg rinominati di vari computers.
Infatti può fare comodo avere copie di backup di grub.cfg  per avvi di emergenza sopratutto quando si attivano procedure di manutenzione che coinvolgono gli hard disk.
La schermata di un GRUB.cfg di backup.

Alcune distribuzioni  potrebbero essere installate utilizzando l’opzione per l’avvio diretto delle ISO di nultiboot.
La funzionalità dell’avvio diretto delle ISO è supportata dalla versione 8.9 di multibootusb e utilizza la procedura  ( MultiBoot USB avviare ISO da pendrive USB ) di Agus Lopez. Le ISO che sono accessibili con menu <scan and boot ISOs under /multibootusb/iso -> però non possono trovarsi nella stesso disco su cui si effettua l’installazione.

Un elenco di  ISO automaticamente individuate e direttamente avviabili in una chiavetta con multibootusb.

L’installazione della distribuzione linux su chiavetta USB avviene in modo tradizionale.
E’ importante prestare attenzione alla gestione del partizionamento.
E preferibile partizionare preventivamente la chiavetta USB. La partizione per multiboot è bene che sia di tipo FAT32. In questo caso è di circa 40 GB.
Il partizionamento potrebbe essere sia MBR che GTP.  Visto l’uso anche come chiavetta per avvi di emergenza si può optare per la soluzione più conservativa la MBR.

L’installazione è bene che sia tutta su una sola partizione quella di root ( /).

E’ meglio evitare la creazione della partizione di swap, per non stressare troppo l’unità usb .

All’atto dell’installazione potrebbe essere preferibile non installare grub così da evitare la sovrascrittura e di dover reinstallare il bootloader di multibootusb.

Quando si dispone di una distribuzione linux full installata è possibile con una ISO Live e la modalità chroot lanciare il comando  l’update-grub e ottenere un nuovo file.grub.cfg in grado di avviare TUTTE le full presenti nella pendrive usb. Queste operazioni possono essere eseguite a livello di emulatore QEMU supportato da multibootusb.

In figura MX 8.3 Live da ISO nell’ ambiente QEMU.  I comandi usati per ottenere il file grub.cfg sono visibili nel terminale.

MX è installato nel partizione sda3.

sudo su
mount /dev/sda3 /mnt

mount --bind /dev /mnt/dev
mount --bind /proc /mnt/proc
mount --bind /sys /mnt/sys

adesso lavorariamo grazie a chroot sul sistema montato

chroot /mnt

aggiorniamo grub con

update-grub

uscire  da chroot e smontare i percorsi del sistema

exit

umount /mnt/dev
umount /mnt/proc
umount /mnt/sys 

umount /mnt

 

Sempre dall’interno della Live si può copiare il file grub.cfg in multimediausb/grub

mkdir /media/sda1     # partizione FAT32 con multibootusb
mkdir /media/sda3     # partizione ext4 per MX 18.3 

mount /dev/sda1  /media/sda1
mount /dev/sda3  /media/sda3

per sicurezza meglio avere una copia del grub.cfg di multibootusb

cp /media/sda1/multibootusb/grub/grub.cfg   /media/sda1/multibootusb/grub/grub_copia.cfg

copiare rinominando il file grub.cfg prodotto con l’update-grub per l’avvio delle Live

cp /media/sda3/boot/grub/grub.cfg /media/sda1/multibootusb/grub/grub_Lfull.cfg

il menu entry

#start Avvio grub 2 personal 
menuentry 'x Avvio Full Linux - All/USB' {configfile /multibootusb/grub/grub_full.cfg}

consentirà di visualizzare la seguente schermata grub

 

 

Risorse:

Installare Ubuntu 12.04 Manualmente

Installiamo Ubuntu 12.04 manualmente utilizzando la ISO live senza ricorrere alla procedura automatica.

La procedura di installazione manuale di ubuntu indicata si applica in genere anche alle altre distro ubuntu e alle distro derivate come mint …

Per iniziare avviamo la distro live.
Creiamo una nuova partizione con gparted ( la dimensione ottimale potrebbe essere 8 GB filesystem ext4 ).
Quindi montiamo la partizione così creata in /mnt/target.
Considerato che tutti i comandi vanno eseguiti da root eleviamoci anche a root

sudo su   
mkdir /mnt/target

monteremo la partizione con il solido comnado tipo

mount /dev/partizione /mnt/target

qualora la partizione creata sia in /dev/sdb2

mount /dev/sdb2 /mnt/target

adesso effettuiamo il mount del fiilesystem di base di Ubuntu presente nella live in /mnt/source.
Si tratta di un filesystem di tipo squashfs, un oggetto in sola lettura. Il filesystem squashfs della live di ubuntu si trova nella cartella /casper ed è di circa 650 MB.

Creiamo la dir source

mkdir /mnt/source

Se si è dentro la live per il mount utilizzare il comando

mount -o loop -t squashfs /cdrom/casper/filesystem.squashfs /mnt/source
Per aprire un un disco immagine di tipo squashfs si può usare anche il comando
unsquashfs immagine.squashfs /squashfs_dir
nello specifico
unsquashfs -f -d /mnt/source /live/image/casper/filesystem.squashfs

Una volta montato il filesystem base può essere copiato nella nuova partizione con

cp -a  /mnt/source/*   /mnt/target/

La cartella /mnt/target conterrà ora un vero e proprio sistema operativo autonomo, accessibile in lettura e scrittura dall’ambiente esterno.

Per poter accedere ad esso come ad un sistema operativo isolato si usa il comando chroot

Prima è necessario rendere disponibili, al suo interno, i file speciali generati dal kernel { in particolare /proc /sys } e possiamo smontare /mnt/source

sudo umount /mnt/source

mount -t proc /proc   /mnt/target/proc
mount -t sysfs  /sys    /mnt/target/sys
mount -o bind /dev    /mnt/target/dev
mount --bind /dev/pts  /mnt/target/dev/pts

Adesso dobbiamo aggiornare il file /fstab in modo che il sistema sappia dove montare le partizione base.
Creiamo il file /mnt/target/etc/fstab.

touch  /mnt/target/etc/fstab

e aggiugiamo due righe base con due comandi echo … >>

echo 'proc            /proc           proc    defaults          0       0' >> /mnt/target/etc/fstab
echo '/dev/sdb2       /               ext4    errors=remount-ro 0       1' >> /mnt/target//etc/fstab

possiamo controllare il risultato con cat /mnt/target/etc/fstab

Potevamo usare anche un editor secondo le proprie preferenze ( vi,nano, gedit, leafpad … )

nano /mnt/target/etc/fstab

il contenuto del file sar’ del tipo seguente

          
proc            /proc           proc    defaults        0       0
/dev/sdb2       /               ext4    errors=remount-ro 0       1
in un secondo momento sarà possibile precisare l’eventuale partizione di swap:
/dev/sda5 swap swap defaults 0 0
# /dev/volumes/swap none swap sw 0 0
una home diversa
/dev/volumes/home /home ext4 defaults 0 2
il cdrom
/dev/scd0 /media/cdrom0 udf,iso9660 user,noauto 0 0
eventualmente e possibile precisare la partizione di swap

Lavorare nel chroot

Adesso siamo pronti per lavorare nel chroot. Il chroot è un comando per lanciare processi in un ambiente che utilizza come directory radice la sottocartella locale, che rappresenta a tutti gli effetti un sistema operativo indipendente da quello esterno. L’attivazione dei file speciali, inoltre permette di utilizzare tutti servizi del kernel.

chroot /mnt/target

per evitare di fare confusione e ricordarci che siamo in chroot cambiamo il prompt

export PS1="(chroot) \$ "

Per completare l’installazione manuale di ubuntu dobbiamo creare un primo utente base di nome ad es. maurizio

useradd -gusers -Gsudo -d/home/maurizio -m maurizio

impostiamo la password con

passwd maurizio

dettagli nella gestione users in linux

exit per uscire dal chroot

(chroot) $ exit

Se tutto è statao fatto correttamente l’installazione manuale di ubuntu è terminata.

Prima di riavviare fare l’upgrade di grub 2.0 per avere la partizione disponibile all’avvio

grub-probe: error: cannot find a device for / (is /dev mounted?).

Se nell’installare grub utilizzando  grub-install  si presenta un  errore del tipo

grub-probe: error: cannot find a device for / (is /dev mounted?).

Ciò significa che si lanciando il comando da una situazione di chroot non configurata in modo appropriato. In genere questo accade utilizzando ad esempio le distribuzioni  live.

Installare reinstallare grub legacy da distro live

Per installare grub  a partire da una distribuzione live  debian, ubuntu o derivate.  Avviare la live. Quindi montare il sistema e passare in chroot.

Ad esempio se si dispone di una installaizone della distro linux nella partizione  11 i comandi saranno i seguenti:

sudo mount -t auto /dev/sda11 /mnt
sudo mount --bind /dev /mnt/dev
sudo mount --bind /proc /mnt/proc
sudo mount --bind /sys /mnt/sys

adesso lavorare grazie a chroot sul sistema operativo della partizione  11

sudo chroot /mnt

Per installare il boot manger grub attivare il prompt grub con:

 grub --no-curses 

quindi  con il comando root impostare la partizione con il boot grub e con il comando setup installare il boot manager

grub> root (hdx,y)

hdx =  (x) è il drive ( 0 perl primo disco )
y la partizione (la prima partizione sarà 0 non 1)

Istallare grub con il comando setup

setup (hdx) oppure setup (hd0,0)

uscire dal prompt grub con

grub> quit

per generare aggiornare il file menu.lst contenete il menu di grub lanciare:

update-grub

per ricercare le partizioni raggiungibili conrrettamente con il boot grub si può utilizzare il comando find

grub> find /boot/grub/stage1

Installare Reinstallare Grub 2 da live

Un approccio più radicale  anche se agevole  è il ripristono del boot loader.  Procurarsi un live di ubuntu ( di fatto il disco di installazione) .  Quindi alla schermata di installazione passare ad una console con [CTRL-ALT-F2]   e digitare seguenti comandi:

per determinare la partizione in cui è installato ubuntu  ( in genere è quella marcata con l’asterisco )

sudo fdisk  -l

nel mio caso /dev/sda3

montare la patizione in cui risiede il sistema  in /mnt con

sudo mount -t auto /dev/sda3  /mnt

montare il resto dei dispositivi con

sudo mount --bind  /dev  /mnt/dev
sudo mount --bind  /proc  /mnt/proc
sudo mount --bind  /sys  /mnt/sys

per modificare il sistema montato in /mnt effettuare un chroot

 sudo chroot /mnt

qualora sia presente un partizione di  /boot separata sarà necessario il mount anche di questa.
Se /boot si trova in /dev/sda2 digiteremo:

 sudo mount /dev/sda2 /boot

per installare grub2 nel master boot sector MBR digitare

sudo grub-install  /dev/sda
sudo update-grub2

smontare le partizioni e riavviare

sudo umount /mnt/dev
sudo umount /mnt/proc
sudo umount /mnt
sudo reboot

in caso di errori è possibile riprovare con

grub-install --recheck /dev/sda

per installare in una partizione del sistema ( scelta sconsigliata )
sudo grub-install /dev/sda3

Risorse:

Ubuntu 64 bit e applicazioni a 32 bit

Per far girare applicazioni a 32 bit in Ubuntu 64bit è necessario installare ia32 librerie a 32-bit per sistemi a 64 bit oppure usare l’ambiente chroot. Chroot è sostanziamente un ambiente per la compilazione consente l’installazione di pacchetti di sviluppo che non vanno a interferire con il sistema:

installare ia32 con

sudo apt-get install ia32-libs

ia32-libs dipende da

sudo apt-get install lib32gcc1 lib32z1 lib32stdc++6 lib32asound2 lib32bz2 lib32ncurses5  libc6-i386 
sudo apt-get install lib32ncursesw5 lib32stdc++6 lib32v4l-0

altre librerie a 32-bit per sviluppo

sudo  apt-get install lib32gomp1 lib32z1-dev lib32bz2-dev
sudo apt-get install g++-multilib

valutare anche l’installazione

sudo apt-get install ia32-libs-gtk

potrebbe essere necessario il symlink

ln -s /usr/lib32/libstdc++.so.6 /usr/lib32/libstdc++.so

DebootstrapChroot

sudo apt-get install dchroot debootstrap

DebootstrapChroot – Community Ubuntu Documentation

risorse:

http://help.ubuntu-it.org/7.04/ubuntu/packagingguide/it/appendix-chroot.html