Debian su una penna USB

20.12.2007 Aggiornamento: aggiunto l’utilizzo dell’UUID per gestire Grub e il file fstab sotto consiglio di Enrico

L’idea di installare Gnu/Linux su un supporto usb mi è venuta qualche giorno fa quando mi sono ritrovato “in prestito” un computer portatile con su Windows Vista che non potevo modificare. L’ho usato un pò con una live ma i difetti delle live nel lungo tempo si sentono (anche nel breve tempo…non riuscivo a installare i driver video 😀 ). Un’installazione persistente su una penna usb era l’ideale. Devo dire la verità all’inizio ero un pò scettico perchè i supporti flash hanno un numero di cicli più limitato dei normali hard disk. Ma come vedremo esistono dei piccoli trucchi per limitare gli accessiinutili alla penna usb.

Le prestazioni ne risentono leggermente quando la penna è più sottosforzo del solito, per esempio quando si sta installando software tramite apt.

Detto questo partiamo:

ATTENZIONE Update: Questo metodo rimane valido ma probabilmente non è il metodo migliore esiste un alternativa valutate entrambe prima di procedere!

Cosa serve:

  • Un’installazione linux con internet dalla quale preparare la penna.
  • Da linux bisogna avere a disposizione questi tool: debootstrap, fdisk, mkfs.ext2, chroot e altri
  • Una penna usb, con 1gb si è molto al limite se si sceglie di installare Gnome o Kde, altro discorso sono i DE minori. Io ne ho una da 4gb
  • Può essere utile avere qemu installato e configurato per verificare che la penna faccia il boot correttamente (invece di riavviare il computer)

Partizionare la penna

Prima di tutto bisogna partizionare la penna usb (la indicherò come /dev/sda)
sudo fdisk /dev/sda
Fdisk è molto semplice da usare, bisogna cancellare tutte le partizioni esistenti e crearne una unica primaria. Poi bisogna renderla bootable e impostare come file system il numero “83” (Linux)

Una volta partizionata la chiavetta bisogna creare il filesystem vero e proprio quindi:
sudo mkfs.ext2 /dev/sda1
È meglio usare ext2 per ridurre gli accessi in scrittura della chiavetta che la degraderebbero più in fretta.

Usare debootstrap

Ora montiamo la chiavetta normalmente:

sudo mkdir /media/debusb
sudo mount /dev/sda1 /media/debusb

Usiamo debootstrap, il quale ci permette di installare un sistema base su un supporto esterno. Credo sia possibile installare anche Ubuntu ma io ho preferito installare debian semplicemente perchè partendo da una normale netinst posso selezionare io i programmi da installare e quindi risparmiare spazio.
sudo debootstrap --arch i386 sid /media/debusb
Io ho installato la sid (attualmente unstable) ma si può sceglire anche sarge o lenny.

Il sistema è già praticamente pronto ora facciamo in modo che possa fare il boot:

Chroot

Prima bisogna montare proc
sudo mount -t proc proc /media/debusb/proc
ora si esegue il chroot
sudo chroot /media/debusb
In questo modo siamo dentro al sistema della chiavetta, per prima cosa impostiamo i repository

deb http://ftp.it.debian.org/debian/ sarge main contrib
deb http://security.debian.org/ sarge/updates main contrib

aggiorniamo il sistema:

sudo apt-get update
sudo apt-get upgrade

Ora aggiustiamo il fstab in modo che ci siano meno accessi possbili alla chiavetta che la degraderebbero

Prima però occorre annotare l’UUID per avere una corrispondenza sempre vera della partizione:
sudo tune2fs -l /dev/sda1
Il mio UUID per sempio è:” Filesystem UUID: 59cfdd33-fd1e-44b3-9bf2-51dac3748b69″
UUID=59cfdd33-fd1e-44b3-9bf2-51dac3748b69 / ext2 defaults,errors=remount-ro,noatime 0 0
proc /proc proc defaults 0 0
tmpfs /etc/network/run tmpfs defaults,noatime 0 0
tmpfs /tmp tmpfs defaults,noatime 0 0
tmpfs /var/lock tmpfs defaults,noatime 0 0
tmpfs /var/log tmpfs defaults,noatime 0 0
tmpfs /var/run tmpfs defaults,noatime 0 0
tmpfs /var/tmp tmpfs defaults,noatime 0 0
#tmpfs /home tmpfs defaults,noatime 0 0
Io ho commentato l’ultima riga perchè in quel modo la home si cancellerebbe ad ogni riavvio, se uno si accontenta di un semplice sistema live che non memorizza le impostazioni nella home può togliere il commento.

Altro trucco per ridurre gli accessi è eliminare il file /etc/mtab e sostituirlo con un link simbolico a /proc/mounts

rm /etc/mtab
ln -s /proc/mounts /etc/mtab

Ora utilizziamo uno script che consente di creare i file device

cd /dev
MAKEDEV generic

Installiamo il kernel (questo o comunque quello che è disponibile nel repository)
apt-get install linux-image-2.6.23-1-486
e poi generiamo il nuovo initramfs
update-initramfs -u
Grub

Il passo finale è quello di installare e configurare Grub

Usciamo dal chroot digitando “exit”, quindi dalla console della nostra distribuzione principale digitiamo:
sudo grub-install –root-directory=/media/debusb /dev/sda
ATTENZIONE wordpress trasforma le due linee in un unica linea più lunga, in realtà prima di root ci sono 2 linee.

Per evitare di dover editare ogni volta Grub recuperiamo l’UUID trovato prima e infine creiamo il file menu.lst in /media/debusb/boot/grub/

######################################################
# Globals
default 1
fallback 0
color white/blue black/light-gray
#####################################################
# LIVE
title Debian from USB by monossido ;)
root (hd0,0)
kernel /boot/vmlinuz root=UUID=59cfdd33-fd1e-44b3-9bf2-51dac3748b69
initrd /boot/initrd.img
boot

Rispetto alla prima versione della guida Grub non ci dovrebbe essere più bisogno di modificare Grub, l’unica cosa che potrebbe cambiare è “root (hdx,o)” ma credo non serva nel senso che nel momento in cui si fa il boot dei supporti rimovibili la penna diventa automaticamente il primo hard disk del computer. Almeno così è stato in tutte le mie prove.

Rimane popssibile utilizzare syslinux ma non ho voluto provare per non dover fare troppi casini con le installazioni di nuovi kernel.

A questo punto come ho scritto all’inizio si può verificare molto velocemente che la penna faccia correttamente il boot con qemu, un esempio di utilizzo può essere:
qemu -boot c -hda /dev/sda
Finito! Ora se tutto va bene si riesce a fare il boot e si può iniziare a installare i software preferiti con apt!

Per ottenere il risultato e scrivere questa simil-guida ho preso spunto da pastebin.com e da labs.truelite.it.

22 risposte a “Debian su una penna USB”

  1. Questo potrebbe essere interessante per quanto riguarda l’fstab e l’opzione root= del kernel:

    http://ubuntuforums.org/showthread.php?t=223182

    Enrico

  2. Ottima guida (seppur non tutta tua) Gratz 😉

  3. @enrico è vero potrebbe essere un’idea…appena posso provo!

    diciamo che ho messo in pratica quelle guide integrandole con alcune cose mie 😉

  4. Ma anche usare debian-live.. già supporta il target USB.. e con la persistenza snapshot le tue nand flash durano di più…

  5. non sapevo che la debian live supportasse la modalità persistente
    tnx dell’info!

  6. Seguendo passo passo la tua guida non mi esegue il comando debootstrap.

    Credo la sintassi corretta sia:

    debootstrap

    Nell’esempio che citi quindi diventa

    debootstrap sid /media/debusb http://ftp.debian.org/debian

    o sbaglio?

    Comunque complimenti per la guida… davvero utile.

    RP

  7. Provato la procedura così come descritta non funziona…

    Sintomi:
    1) Tutti i passi si completano con esito positivo, ma eseguendo il comando alla fine “sudo grub-install –root-directory=/media/debusb /dev/sda”
    ritorna un errore tipo “file stage1 cannot be read”

    2) eseguendo boot su un sistema USB bootable, il boot non viene eseguito e parte il boot da hard disk, secondo nell’ordine di boot specificato nel BIOS.

    So che non è molto per fare troubleshooting ma questo è quello che ho notato.

    Ciao

    RP

  8. allora premetto che altri hanno seguito la guida e so per certo che funziona…probabilmente i problemi deriveno da qualche variabile

    la sintassi di debootstrap forse può cambiare a seconda della versione…io ho usato la versione che ha ubuntu gutsy tu da che distro hai provato ad usarla?

    per quanto riguarda grub invece attento che wordpress traduce due trattini (due meno) in uno unico un po’ più lungo (meglio assicurarsi delle banalità prima intanto penso quale possa essere il problema se non è questo 😉 )

  9. Ho seguito la tua guida ma quando voglio aggiungere i repo al file /etc/apt/sources.list mi diche che non trova nano nel bash… idem per apt-get…
    Per apt-get mi dice:
    apt-get: error while loading shared libraries: libapt-pkg-libc6.4-6.so.3.53: cannot open shared object file: No such file or directory
    Come risolvo?

  10. vai in /usr/lib e dai

    ln -s libapt-pkg-libc6.4-6.so.3.53.0 libapt-pkg-libc6.4-6.so.3.53

    dovrebbe correggere il problema con apt…o almeno così mi pare di aver capito da qua
    http://ubuntuforums.org/archive/index.php/t-562324.html

    certo che è strano…

  11. ho seguito i passi della guida e tutto è andato okkei
    quando poi però faccio il boot, al momento in cui carica la riga
    ” initrd /boot/initrd.img” di grub mi dice
    “ERROR 15 (File not found)” e non parte….

    Aiuto!! Che vuol dire??

  12. Molto probabilmente è sbagliato il numero della partizione di root che gli hai dato.
    Direttamente dal menù di grub quando fai il boot puoi modificare le impostazioni di grub come se modificassi *temporaneamente* menu.lst.

    Quindi prova ad andare sopra alla voce relativa e premere E, poi ancora E per modificare “root(x,y)” prova a scrivere root( e a premere TAB lui ti dirà le possibilità che hai. quando scrivi il primo numero premi ancora TAB e ti dirà le possibilità che hai riguardo le partizioni così capisci anche di che disco hai selezionato.

    quando hai impostato disco e partizione premi invio e poi B per fare il boot

    è più facile di quanto sembri a parole 😀

  13. Grande, mi hai risposto subito!
    Ho provato a fare come dicevi tu. Di buoni mi da hd0,0 e hd1,0
    se lancio il secondo (hd1) non trova il filesystem ext2 (probabilmente perchè è l’hard disk di windows). con hd0 succede il problema di prima. le scelte sono finite 🙁
    Comunque non penso che sia quello l’errore:
    infatti le prime due righe del grub quando faccio boot le passa senza problemi

    root (hd0,0) -> qui trova il filesystem giusto
    kernel /boot/vmlinuz root=UUID=… -> qui trova vmlinuz e l’UUID
    alla riga successiva da quell’errore

    Qualche altro suggerimento?
    Comunque complimenti per la guida!
    in ultimo, se può servire, ho installato lenny

  14. mm non è che con la lenny cambiano le posizioni delle immagini del kernel?
    Perchè anche con ubuntu i link vmlinuz e initrd.img sono in “/”…dentro a boot ci sono solo i file veri e propri vmlinuz-2.6..22-1-generic ecc…
    Sono sicuro invece che nella etch è tutto in “/boot/”
    Controlla!

  15. ho controllato e ci sono anche i link. ho fatto vari tentativi, ho scritto anche i nomi esatti di vmlinuz e initrimg ma sempre lo stesso errore. ho cercato un pò in giro e nessuna dritta. credo che domani riproverò l’installazione con etch

  16. Ciao, ho lo stesso problema di un altro utente.

    Quando installo il grub ottengo l’errore:
    The file /media/debusb/boot/grub/stage1 not read correctly.

    E la penna non risulta bootabile…=(

  17. Mi spiace non saperti aiutare ma è da un sacco che non rifaccio la procedura di grub 🙁

  18. Seguito l’intera guida, ma il mio lenny non ne vuol sapere di partire. L’unica parte che ho saltato è l’installazione di grub. Mi sapete dire perché?

    Premetto che l’avvio da USB è supportato dalla mia scheda madre dato che il procedimento è stato oltretutto seguito da una Mint su pen drive.

  19. È da tanto che non faccio il procedimento, ma direi che la parte di Grub è importante!

  20. ~”‘ I am very thankful to this topic because it really gives up to date information -~*

  21. Fashion Style Blog…

    […]here are some links to sites that we link to because we think they are worth visiting[…]…

Lascia un commento