Installare Debian/Ubuntu su USB, VirtualBox ci aiuta



Il motivo per cui scrivo questo post è perché sono stato mosso dalla lentezza del mio Ubuntu che sul portatile era diventata ormai improponibile, per cui prima di rasare a zero ho voluto vedere come si comportano debian e ubuntu sul mio hardware (Pentium M processor 1.86GHz, 1Gb RAM, video Intel i810).

Ho iniziato a usare le versioni livecd di debian e ubuntu e due pendrive con installate ubuntu e debian minimali, e via via che provavo ho concentrato l’attenzione più su come si riduce e si installa il software su USB che sulle prestazioni e il riconoscimento hardware..

Vista la scomodità di riavviare ogni volta per provare l’avvio da USB, ho usato VirtualBox, puntando al disco vmdk ricavato con VBoxManage sia delle pendrive che di un disco esterno USB.

In questi giorni ho considerato tra l’altro che esistono vari modi di installare su USB (argomento più volte trattato su questo blog). Per esempio le versioni di Ubuntu/Debian usano un file compresso (casper/live) con squashfs che, copiato su partizione FAT e aggiustando opportunamente syslinux.cfg, effettua il boot “decomprimendo” e comportandosi allo stesso modo di un LiveCD. I cambiamenti, secondo il livecd usato, possono essere mantenuti con l’opzione “persistent”.

E chiaro che è una soluzione comoda, veloce, ma di negativo ci sono le prestazioni, visto che oltre alla lentezza dell’USB c’è anche la decompressione di 700MB che diventano 2GB.

Un altro metodo è quello di usare un supporto USB esterno e effettuare una vera installazione su pendrive/disco USB usando le opzioni avanzate per posizionare grub sul disco esterno, facendo attenzione perché nell’installazione il disco USB sarebbe (hd1) e all’avvio si ripresenta come (hd0).

Questa è la scelta ottimale perché la partizione è Linux nativa (ext3 o altro), ma visto che supera i 2GB, è chiaro che non si può usare per supporti piccoli e infine non è possibile scegliere i pacchetti da installare.

grub hd1

Altra possibilità, che secondo me è la più tecnica e interessante, è quella di scaricare un filesystem minimale (con debootstrap) su una partizione montata, passare in chroot, installare il boot loader e sistemare le “cose” per l’avvio vero e proprio. Qui Debian (e Ubuntu segue) la fa da padrona perché in poco tempo da un qualunque sistema già avviato (si, lo so, dovete già avere un sistema) scarica un minisistema funzionante e copiabile anche su supporti esterni.

Tra le mie varie letture di questi giorni vi segnalo alcuni siti sui quali mi sono basato:

  1. http://eccelinux.org/wiki/index.php?title=Debian_su_supporto_USB
  2. http://pseudocode.cc/tutorials/ubuntu-on-a-usb-flash-disk
  3. https://help.ubuntu.com/6.10/ubuntu/installation-guide/hppa/linux-upgrade.html
  4. http://ubuntuforums.org/showthread.php?t=327466

L’esempio che segue è per Ubuntu, ma allo stesso modo ho usato Debian su pendrive/disco USB (su pendrive non è consigliabile usare la partizione di swap, basta usare una sola partizione ext3 e renderla attiva).
Ammesso che il disco sia montato in /media/disk, iniziamo subito con un errore:

$ sudo debootstrap --arch i386 hardy /media/disk/ http://it.archive.ubuntu.com/ubuntu
/usr/share/debootstrap/functions: line 1034: /media/disk/test-dev-null: Permission denied
E: Cannot install into target '/media/disk' mounted with noexec or nodev

occorre smontare la periferica montata con opzioni nodev e noexec: controllate la partizione sda, hda, hdb, ecc…. 😉

$ sudo umount /media/disk
$ sudo mkdir /media/sda1
$ sudo mount /dev/sda1 /media/sda1

Siamo pronti, fuoco alle polveri:

$ sudo debootstrap --arch i386 hardy /media/sda1/ http://it.archive.ubuntu.com/ubuntu
I: Retrieving Release
I: Retrieving Packages
I: Validating Packages
I: Resolving dependencies of required packages...
I: Resolving dependencies of base packages...
I: Checking component main on http://it.archive.ubuntu.com/ubuntu...

……
I: Configuring ubuntu-minimal...
I: Configuring libc6...
I: Configuring initramfs-tools...
I: Base system installed successfully.

Usiamo chroot per accedere al nuovo filesystem e prepariamo grub (occhio agli apici da “copia e incolla”)

$ sudo chroot /media/sda1/ /bin/bash

# aptitude install grub
# mkdir /boot/grub
# echo "(hd0) /dev/sda" > /boot/grub/device.map
# exit

$ sudo grub-install --no-floppy --root-directory=/media/sda1 /dev/sda

Due to a bug in xfs_freeze, the following command might produce a segmentation
fault when /mnt/sda2/boot/grub is not in an XFS filesystem. This error is harmless and
can be ignored.
xfs_freeze: specified file ["/mnt/sda2/boot/grub"] is not on an XFS filesystem
Installation finished. No error reported.
This is the contents of the device map /mnt/sda2/boot/grub/device.map.
Check if this is correct or not. If any of the lines is incorrect,
fix it and re-run the script `grub-install'.

(hd0) /dev/sda

E’ importante segnarsi qual’è l’UUID della partizione per usarlo in menu.lst di grub, il comando per ricavarlo è:

$ sudo blkid |grep sda

/dev/sda1: UUID="978d7916-496f-4c03-b373-9ba05820bddb" TYPE="ext3"
/dev/sda2: TYPE="swap" UUID="6222489e-2ccf-4c24-8eaa-0bc0660b8ba3"

il file /boot/grub/menu.lst contiene:

default 0
timeout 10
title Ubuntu hardy 8.04
root (hd0,0)
kernel /boot/vmlinuz-2.6.24-16-generic root=UUID=978d7916-496f-4c03-b373-9ba05820bddb ro quiet splash
initrd /boot/initrd.img-2.6.24-16-generic

Installiamo l’immagine del kernel:

# apt-get install linux-image-2.6.24-16-generic
…..
update-initramfs: Generating /boot/initrd.img-2.6.24-16-generic

e personalizziamo la lingua:

# mount -t proc proc /proc/
# dpkg-reconfigure console-setup
# apt-get install language-pack-it language-pack-gnome-it

Aggiungiamo l’utente e il gruppo che amministreranno il sistema:

# adduser ubuntu #rispondere (y)
# addgroup --system admin
# adduser ubuntu admin

aggiungere le righe a /etc/sudoers:

# visudo

%admin ALL=(ALL) ALL

e impostiamo la password di root

# passwd root
Inserire nuova password UNIX:
Reinserire la nuova password UNIX:
passwd: password aggiornata correttamente

Infine aggiorniamo il sistema con:

# apt-get update && apt-get upgrade

e installiamo il software “standard”

# apt-get install ubuntu-standard

prepariamo il file /etc/fstab

# UNCONFIGURED FSTAB FOR BASE SYSTEM
# /etc/fstab: static file system information.
#
# file system mount point type options dump pass
/dev/sda1 / ext3 defaults 0 1
/dev/cdrom /media/cdrom0 udf,iso9660 user,noauto 0 0
proc /proc proc defaults 0 0
none /proc/bus/usb usbfs devgid=46,devmode=664 0 0

Infine usciamo dall’ambiente chroot e smontiamo il disco/pendrive

# exit
$ sudo umount /media/sda1

A questo punto dovremmo riavviare con il disco USB inserito, ma se abbiamo VirtualBox, ricaviamo il disco vmdk e inseriamolo in una macchina virtuale. Se riceviamo errore di permessi su /dev/sdb o /dev/sda possiamo aggiungere al gruppo disk il nostro utente o impostare i pemessi a 666 della periferica (sda / sdb).

ATTENZIONE: E’ IMPORTANTE SMONTARE IL DISCO PRIMA DI ESEGUIRE LA MACCHINA VIRTUALE,

$ cd .VirtualBox/VDI
$ VBoxManage internalcommands createrawvmdk -filename disco40gb.vmdk -rawdisk /dev/sda -register

e questo è il file del mio disco da 40G usb:

$ cat disco40gb.vmdk
# Disk DescriptorFile
version=1
CID=f12a1b73
parentCID=ffffffff
createType="fullDevice"

# Extent description
RW 156301488 FLAT “/dev/sda”
# The disk Data Base
#DDB
ddb.virtualHWVersion = “4”
ddb.adapterType=”ide”
ddb.geometry.cylinders=”16383″
ddb.geometry.heads=”16″
ddb.geometry.sectors=”63″
ddb.uuid.image=”985db28c-0fa9-4c0f-6388-0292b1ac1be0″
ddb.uuid.parent=”00000000-0000-0000-0000-000000000000″
ddb.uuid.modification=”00000000-0000-0000-0000-000000000000″
ddb.uuid.parentmodification=”00000000-0000-0000-0000-000000000000″

La cosa interessante è che così si può usare il sistema in VirtualBox, portarsi dietro la pendrive o il disco (magari con le VB Guest Additions installate) e usarlo per il boot da USB reale cambiando o rigenerando se serve /etc/X11/xorg.conf

Un’altra cosa importante è che se avviate spesso la macchina virtuale su più vbox la rete diventa eth0, eth1, …. eth5 perciò vi potrei consigliare di usare al volo un comando per la configurazione dhcp:

sudo dhclient `ifconfig -a|grep eth|awk '{print $1}'`

ifconfig

Enjoy 🙂
Antonio

PS: scritto interamente da disco usb 8)

Pubblicità

Info Antonio Doldo
www.toolinux.it - www.virtualboxes.org - adoldo.wordpress.com - Linux user & Android fan

13 Responses to Installare Debian/Ubuntu su USB, VirtualBox ci aiuta

  1. Frederick says:

    I’m glad that my tutorial was of some use to you. I’ll add a link from my site to this page at the bottom of the tutorial.

    Thanks for the pingback and the reference!

  2. @Frederick
    Thansk to you for your useful post, have a nice day 🙂
    Antonio

  3. bautz says:

    Per quanto riguarda le installazioni su usb, la più prestante che ho trovato è sicuramente quella ottenuta con gli script di Larch (script per generare una distro su misura live-usb basata su Archlinux).
    Come con archlinux, ci si può scegliere ogni singolo pacchetto e servizio e personalizzarselo come si vuole. In più tutti i documenti, le modifiche e le configurazioni restano salvate al momento dello spegnimento.
    La distro basata su Larch più famosa è FaunOS (basata su KDE). Mi sono stupito di quanto sia veloce su hardware non recentissimo.
    http://www.faunos.com/
    Nel forum del sito c’è la sezione dedicata a Larch.

  4. @bautz
    Grazie della segnalazione, non conosco FaunOS, appena posso la scarico. La mia ignoranza è grande anche da non conoscere nemmeno Larch e ohimé la grande “arch” . Non ho avuto il tempo di andare avanti, mi sono fermato alla semplice installazione e aggiornamento.
    Ciao,
    Antonio

    Cit.
    La bellezza delle cose esiste nella mente di chi le osserva. (Hume)

  5. Bl@ster says:

    @Antonio: concetto molto Fichtiano, quello di Hume.
    Arch se hai due minuti da perderci dietro e fantastica. Provala!
    Bel post comunque, credo di stare per metterlo in pratica.

  6. Lazza says:

    Evvai, aspettavo da tempo un post così! 🙂 Il massimo che ero riuscito a trovare finora era stato questo: http://www.linutop.com/wiki/index.php/Debootstrap

  7. @Lazza
    sono contento che ti sia piaciuto, se avessi trovato prima il sito ti avrei aggiunto alle fonti di lettura per questo post, in pratica è più o meno quello che ho fatto io. Sarebbe interessante, così come minibuntu, mettere su una ISO minimale grafica (300/400 MB) da pubblicare su Internet, se qualcuno volesse intanto potrei mettere a disposizione il file img creato con dd, basta poco per clonarlo su pendrive/disco usb 😉
    Ciao e grazie a te.
    Antonio

  8. gpnet says:

    Ciao Antonio,
    Complimenti per l’articolo. Non so se mi puoi aiutare. Io capisco poco di linux. recentemente ho acquistato un medion Akoya E1210 con win XP. (senza cd) e mi volevo fare un distro di Linux da installare in un HD USB per smanettarci su.
    Ho letto il tuo post e questo http://wiki.ubuntu-it.org/InstallazioneHdEsterno.

    Visto che sul mio pc fisso non potevo disabilitare l’HD ( per sicurezza) ho scelto di procedere con il tuo metodo.
    Beh! non e’ per neofiti. Io di professione faccio il programmatore , pero’ questa procedura mi ha messo in crisi in piu’ di un punto.
    Andiamo con ordine:
    Nel mio PC fisso ho installato una Ubuntu 8.04 liveCD pensando di fare tutto da li. Il primo problema e’ che non c’e’ debootstrap e quindi te lo devi scaricare e installare. Il secondo problema e che io ( e magari qualcun altro ) non sa come si fa.
    Dopo qualche momento di calore sono riuscito a caricarlo , dopodiche ho partizionato con gparted il mio HD USB con 3 partizioni :
    1. Ext3 per 40GB
    2. Ext3 swap per 2GB
    3. FAT32 per 15 GB
    Il sistema vede il device come sdf ( perche’ ci sono tutti i lettori di schede prima)
    Dopodiche ho seguito la procedura sostiuendo le stringhe con /dev/sda1 con /dev/sdf1 fino alla uscita da chroot con exit e umount /media/sda1.

    Ho poi smontato l’HD USB e l’ho infilato nel medion Akoya.
    Risultato :
    parte grub , fa qualcosa sul kernel poi mi da questo messaggio:
    alert /dev/sda1 does not exist dropping to a shell.
    Ora non so proprio da dove iniziare. Prima di questo errore mi dava anziche’ /sda1 UUID=xxxxxxx-xxxxx ….. , poi ho pensato di modificare sia il menu.lst sia l’fstab inserendo root=/dev/sda1.
    Non so se Il problema e’ legato a come il netbook riconosce i devices , ma io non so proprio con che comando verificare questo perche’ tra i comandi di schell fdisk non c’e’.

    Mi puoi aiutare , per favore , grazie.

  9. @gpnet
    Mi dispiace che non hai trovato chiaro il post, spesso do per scontate cose che invece andrebbero scritte in modo diverso.
    Come dicevo in questo vecchio post:
    https://adoldo.wordpress.com/2007/06/05/installazione-persistente-di-ubuntu-704-su-usb-esterno-e-backup-immagine-del-disco/
    è importante installare grub sul disco esterno, cioè l’installazione va eseguita avendo cura di optare alla fine per opzioni avanzate e scegliere il disco (hd1) come avrai sicuramente fatto tu. Il problema è che grub assegna una stringa UUID corrispondente al device che in quel momento come (hd1) (ricavabile con blkid) e successivamente occorre editare il file /boot/grub/menu.lst per presentare al bios il disco USB come primario (correggendo hd1 in hd0), esempio:

    title Ubuntu USB
    root (hd0,1)
    kernel /boot/vmlinuz-2.6.27-2-generic root=UUID=e4e891a1-4fb7-4f0b-89aa-6802af300431 ro quiet splash
    initrd /boot/initrd.img-2.6.27-2-generic
    quiet

    E’ consigliabile se si ha un po’ di dimestichezza, a installazione completata, prima di riavviare, editare con l’editor il file menu.lst del disco USB
    Al boot puoi anche editare la riga con il tasto “e” oppure puoi tentare di rimuovere la prima con il tasto “d” lasciando a grub il compito di trovarsi la partizione di boot/root
    Se hai dubbi, sono sempre qui.
    Grazie,
    Antonio

  10. gpnet says:

    Grazie per la risposta Antonio. Approfitto perche’ di dubbi ne ho piu di 1.

    Vorrei pero’ dirti prima che ero e sono molto incistato dal riuscire a fare tale operazione, ma il fatto di non capire diverse cose mi fa parecchio rabbia anche perche trovo che a volte si potrebbe evitare di proporre in questi post (non e’ il tuo caso) strumenti come Vim. Gia’ le cose qui sono complicate se poi uno deve anche fare la guerra con Vim questo e’ troppo.
    Per quanto mi riguarda io gestisco una piccola software house di 5 persone che sarebber desiderosa di fare un porting del proprio gestionale ERP in ambiente linux usando mono. Quando ho accennano alla possibilita’ di fare smanettamenti mi riferivo a questo. Ora in un modo o nell’altro non sono riuscito nella operazione… e ho sulla groppa un po’ di anni di lavoro e sono partito dall’ dall’assembler , passando per il C, il Cpp e infine il C#.
    Scusa lo sfogo ma e’ evidente che nonostante ubuntu ce la metta tutta la strada e’ ancora parecchio in salita perche’ come esci un minimo dalle schermate a colori c’e’ il burrone.
    Veniamo a noi , i dubbi sono :
    1. nella distribuzione live non c’e’ il comando update-initramfs quindi non so come cappero scaricarlo e installarto.
    2. ho letto qualcosa su InitRamfs ma la sua funzione e’ per me oscura.
    3. Ma se io voglio fare un banale disco autoboottable ma per quale motivo ci devo mettere grub?.
    4. anziche’ usare update-initramfs io ho usato mkinitramfs. fa la stessa cosa ? puo’ creare problemi?
    5. Non ho proprio capito perche’ devo mettere nel file menu.lst root(hd0,0) quando il mio USBHD e’ visto come sdb e la sue partizioni sono sg1..
    6. Dove e’ l’inizio del problema.. parte grub ( con il suo pseudo DOS ) legge correttamente il disco USB e le cartelle tanto che trova vmlinuz e initrd.img poi passa la palla a linux dicendogli vai a cercare il filesystema in root(hd0,0) ?? .. a che punto centra il etc/fstab ???
    7. Last is : io mi aspettavo che il file menu.lst fosse generato in modo automatico , invece me lo sono dovuto creare a mano perche’ non l’ho trovato e dopo un po di prove e molte letture ho sostituito L’UUID con /dev/sg1 che sembra essere la partizione reale del mio disco.

    Ora e’ possibile fare un po’ di ordine ??. ti ringrazione per tutto quello che puoi fare.

    PS : ma per quale motivo questo sbandierato comando apt-get non mi scarica pacchetti come debootstrap e update-initramfs , ma dove diavolo li hanno messi? possibile che una “normale ” distribuzione come ubuntu non prevede i repository di questi pacchetti ???

    Grazie ancora gpnet.

  11. gpnet says:

    Scusa Antonio, Ho riletto cio’ che ho scritto , probabilmente vista l’ora ero un po cotto. Non volevo riempirti di domande ne essere scortese.
    Comunque grazie.
    gpnet

  12. @gpnet
    scusa se non ti ho potuto rispondere subito, non ho avuto molto tempo per seguire il blog, cercherò di fare un po’ di chiarezza, sperando di riuscirci.
    Capisco la tua frustrazione, ma sai bene che spesso non si riesce a comunicare oppure che c’è una ridondanza di informazioni e nessuno dovrebbe avere la pretesa di essere chiaro.
    Con questo non voglio dire che io lo sono, me ne guardo bene.
    Se mi permetti, cerchiamo di andare per gradi:
    * Tu dici: “Nel mio PC fisso ho installato una Ubuntu 8.04 liveCD pensando di fare tutto da li”
    qui non ho capito se usi sempre il cd live, perché in questo caso non hai a disposizione tutto il software necessario, quindi NON è la soluzione migliore, il liveCD è utile per poter installare o in una partizione windows con wubi (ma spero che tu non lo faccia) oppure in uno spazio nativo.

    * “1. nella distribuzione live non c’e’ il comando update-initramfs quindi non so come cappero scaricarlo e installarlo.”

    il comando fa parte di initramfs-tools, se vuoi vedere a quale pacchetto appartiene il file, usa:
    dpkg -S /usr/sbin/update-initramfs
    initramfs-tools: /usr/sbin/update-initramfs

    * “3. Ma se io voglio fare un banale disco autoboottable ma per quale motivo ci devo mettere grub?”
    Grub è una possibilità, si può usare lilo, oppure syslinux per partizioni vfat o extlinux per partizioni ext3, grub ha il vantaggio ENORME di poter correggere/editare le righe al boot con il tasto “e” o addirittura riconoscere dischie e partizioni premendo TAB dopo hd …. X.X

    * “4. anziche’ usare update-initramfs io ho usato mkinitramfs. fa la stessa cosa ? puo’ creare problemi?”
    No, un comando crea l’immagine initrd se non esiste e l’altro (update) fa l’update 😉

    * “5. Non ho proprio capito perche’ devo mettere nel file menu.lst root(hd0,0) quando il mio USBHD e’ visto come sdb e la sue partizioni sono sg1..”

    Perchè grub vede il primo disco come hd0 e la prima partizione di quel disco come hd0,0, per cui il tuo disco /dev/sdb diventa hd1 e le partizioni hd1,0, hd1,1 hd1,2 ecc. ecc.

    * “pseudo DOS” siamo ben lontani 🙂

    * “7. Last is : io mi aspettavo che il file menu.lst fosse generato in modo automatico , invece me lo sono dovuto creare a mano perche’ non l’ho trovato e dopo un po di prove e molte letture ho sostituito L’UUID con /dev/sg1 che sembra essere la partizione reale del mio disco.”

    se ti riferisci alla procedura debootstrap è normale che sia cosi, infatti serve solo a creare una release minimale e personalizzata, invece tutte le installazioni da livecd, provvedono sia a creare il menu.lst che fstab

    PS : ma per quale motivo questo sbandierato comando apt-get non mi scarica pacchetti come debootstrap e update-initramfs , ma dove diavolo li hanno messi? possibile che una “normale ” distribuzione come ubuntu non prevede i repository di questi pacchetti ???

    vedi che ti stai debianizzando/ubuntizzando anche tu? 😀
    infatti se il tuo /etc/apt/sources.list è corretto puoi interrogare il db dei pacchetti subito dopo aver updatato, esempio io devo cercare debootstrap:

    $ sudo apt-get update
    $ apt-cache search debootstrap
    kvm - Full virtualization on x86 hardware
    pbuilder - personal package builder for Debian packages
    debootstrap - Esegue il boostrap di un sistema Debian di base
    cdebootstrap - Bootstrap a Debian system
    cdebootstrap-static - Bootstrap a Debian system - static binary
    dfsbuild - Build Debian From Scratch CD/DVD images
    rinse - RPM installation environment

    se invece volessi semplificare ti serve il pacchetto apt-file con il quale fare ricerche o addirittura puoi cercare direttamente sul sito debian:
    http://www.debian.org/distrib/packages#search_contents

    Fammi sapere, ciao…

    Antonio

  13. Pingback: virtualbox-ose 2.1.1svn 15923 e l’anno che verrà « Antonio Doldo Linux Blog

Rispondi

Effettua il login con uno di questi metodi per inviare il tuo commento:

Logo di WordPress.com

Stai commentando usando il tuo account WordPress.com. Chiudi sessione /  Modifica )

Foto di Facebook

Stai commentando usando il tuo account Facebook. Chiudi sessione /  Modifica )

Connessione a %s...

%d blogger hanno fatto clic su Mi Piace per questo: