Debian etch - Clé USB

Posté le 4. August 2007 dans SysAdmin

Il peut être parfois utile de se déplacer ici et là avec une distribution Linux clé en main sans se trimbaler toujours avec un ordinateur portable ou un CD.

La clé USB devient alors très utile atteignant aujourd'hui des tailles de l'ordre de 2G pour pas trop cher1. De petite taille, elle peut être utilisée dans des endroits ayant des ordinateurs avec un système d'exploitation propriétaire (ou un autre système libre, ou même pas sans système) mais permettant de démarrer sur un périphérique externe (une clé USB par exemple).

L'utilité peut-être variable :

  • Surfer avec une plus grande tranquillité
  • Utiliser ses logiciels favoris ( Amarok, KMyMoney, KDevelop, ... )
  • Utiliser une interface graphique, bien sûr, meilleure.
  • Utiliser dans un système embarqué.
  • Tester les ordinateurs portables dans les magasins

J'ai trouvé différents sites, tel que Ubuntu en mode persistant permettant d'installer une distribution Ubuntu sur une clé USB ou un disque dur USB.L'inconvénient de cette méthode est qu'il n'est pas possible d'installer uniquement ce que l'on souhaite partant obligatoirement d'une base LiveCD.

Ensuite j'ai trouvé d'autres sites, tels que Howto Install a Debian GNU/Linux system onto a USB flash thumb drive et Installing Debian onto USB flash media with everything encrypted. dont je me suis inspiré pour écrire ce tutoriel.

Préparation de la clé

Modules

Afin de pouvoir accéder à la clé USB, il faut bien évidemment avoir chargé sur sa machine Gnu/Linux les modules adéquates :

modprobe ehci_hcd
modprobe ohci_hcd
modprobe usbhid
modprobe usb_storage

Logiciels

Nous allons considérer que nous sommes sur un système à base de Gnu/Debian (Ubuntu devrait pouvoir faire l'affaire). Si vous avez un autre système, il vous faut trouver un moyen d'installer le programme debootstrap

Sur un système Gnu/Debian, il vous suffit de taper la commande, si le programme n'est pas déjà installé :

aptitude install debootstrap

Installation du système de base

Partitionnement de la clé USB

En premier lieu il faut effectuer le partitionnement de la clé USB. Selon sa taille et aussi de la quantité de logiciel que vous voulez installer il faudra prévoir plus ou moins de place.

Pour le partitionnement vous pouvez utiliser votre utilitaire favori (parted, qtparted, fdisk, cfdisk, ...). Le partitionnement que j'ai effectué pour ma propre clé est le suivant :

  1. 50Mo pour la partition /boot
  2. 1,5Go pour la partition /
  3. le reste pour la partition /home

La partition /home a été séparée afin de pouvoir mettre la partie / de la clé USB en lecture seule (étape que je n'ai pas encore effectuée).

Disk /dev/usb/k2g: 2024 MB, 2024275968 bytes
63 heads, 62 sectors/track, 1012 cylinders
Units = cylinders of 3906 * 512 = 1999872 bytes

        Device Boot      Start         End      Blocks   Id  System
/dev/sda1                   1          26       50747   83  Linux
/dev/sda2                  27         827     1564353   83  Linux
/dev/sda3                 828        1012      361305   83  Linux

Une fois les partitions créées vous pouvez les formater pour les utiliser.

mke2fs /dev/sda1 -L live-boot
mke2fs /dev/sda2 -L live-root
mke2fs /dev/sda3 -L live-home
mount /dev/sda2 /mnt
mkdir /mnt/boot
mkdir /mnt/home
mount /dev/sda1 /mnt/boot
mount /dev/sda3 /mnt/home

Installation à l'aide de debootstrap

Une fois les partitions montées on peut installer le système Gnu/Debian sur la clé USB en utilisant l'utilitaire debootstrap :

> debootstrap --arch i386 etch /mnt/ ftp://ftp2.fr.debian.org/debian/
I: Retrieving Release
I: Retrieving Packages
I: Validating Packages
I:  Resolving dependencies of required packages...
I: Resolving dependencies of base packages...
I: Found additional base dependencies: libdb4.2 libgnutls12 libreadline5
    libsigc++-2.0-0c2a openbsd-inetd readline-common
I: Checking component main on http://ftp.debian.org/debian...
I: Retrieving adduser
...
I: Configuring gnupg...
I: Configuring sysklogd...
I: Configuring klogd...
I: Configuring netbase...
I: Configuring openbsd-inetd...
I: Base system installed successfully.

Dans un Chroot

Les opérations suivantes sont à faire sur l'environnement de destination, il faut donc utiliser la commande chroot pour s'y placer.

chroot /mnt '/bin/bash -i'

Noyaux

Une fois le système de base installé, il faut le configurer et y ajouter de quoi démarrer la clé USB.

Ajustement et systèmes de fichiers : /etc/fstab

Cela dépend de votre configuration, et du partitionnement que vous avez fait. Si vous avez fait le même partitionnement que moi vous devriez avoir un fstab ressemblant à celui là :

#/etc/fstab: static file system informations.
#
LABEL=live-root    /           ext2    defaults,errors=remount-ro,noatime  0   1
LABEL=live-boot    /boot           ext2    defaults,noatime,ro         0   2
LABEL=live-home    /home           ext2    defaults,noatime            0   2
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

J'utilise le label de la partition au lieu d'utiliser le block device. L'utilisation du block device peut gêner si la clé USB n'est pas toujours détectée dans le même ordre2.Les dossiers temporaires sont tous reportés dans un système de fichier virtuel (en mémoire) à l'aide de tmpfs.

Une fois le fichier /etc/fstab configuré, il ne reste plus qu'à monter les partitions. Pour monter les partitions un simple mount -a le fait. Il est aussi possible de monter les partitions une à une.

Il est possible que la commande suivante faite hors du chroot puisse résoudre certain problème si l'application utilise udev, ... :

mount --bind /dev/ /mnt/dev/
Le réseau : /etc/hostname /etc/hosts

Le fichier /etc/hosts doit contenir une ligne indiquant l'adresse du loopback et le nom de la machine. Ceci afin que KDE par exemple puisse démarrer :

127.0.0.1       localhost.localdomain   localhost  liveding

Dans le fichier /etc/hostname il faut également mettre le nom de la machine.

Apt : /etc/apt/sources.list

Le fichier sources.list contient les lignes par défaut suivantes :

# etch
deb ftp://ftp2.fr.debian.org/debian/ etch main contrib non-free
deb-src ftp://ftp2.fr.debian.org/debian/ etch main contrib
deb http://security.debian.org/ etch/updates main
deb-src http://security.debian.org/ etch/updates main

# etch unofficial
deb http://ftp.debian-unofficial.org/debian etch main contrib non-free restricted

Ces lignes permettent de télécharger les paquets par défaut de Gnu/Debian ainsi que les paquets de sécurité, et les paquets non officiels permettant d'activer certaine fonctionnalité.

Initrd : /etc/kernel-img.conf

Dans le fichier /etc/kernel-img.conf on enregistre les informations suivantes (afin que Gnu/Debian crée un fichier initrd lors de l'installation du noyau) :

# Kernel Image management overrides
# See kernel-img.conf(5) for details
do_symlinks = Yes
do_initrd = yes

Le fichier initrd permet de charger les modules nécessaires3 au démarrage de Gnu/Linux sur une clé USB.

Installation de paquet
aptitude install initrd-tools linux-image-2.6.16-1-686
aptitude install grub
aptitude install localepurge
aptitude clean# localepurge

On installe une image du noyau, ainsi que les outils pour générer l'image initrd. On installe également grub qui servira à démarrer sur la clé USB. Le paquet localepurge permet quant à lui de nettoyer les locales qui prennent un peu trop de place sur la clé USB. Généralement je ne conserve que les locales françaises et anglaises.

Il est aussi possible d'installer quelques paquets comme un serveur graphique, même voir KDE, ou encore des outils d'administration. On peut aussi installer des outils qui pourront permettre de réparer une machine.

Quelques ajustements.

Afin de ne pas écrire trop souvent sur la clé USB, on remplace quelques fichiers.

rm -f /etc/blkid.tab*
ln -s /dev/null /etc/blkid.tab
rm -f /etc/mtab
ln -s /proc/mounts /etc/mtab

Configuration de grub

Afin que la machine puisse démarrer il faut installer grub sur le secteur de démarrage de la clé USB.Pour cela, on peut quitter le chroot. Pour installer grub on peut utiliser grub-install :

grub-install recheck root-directory=/mnt/ /dev/sda

Normalement cela devrait fonctionner ;) mais il est possible, si cela ne marche pas d'essayer de l'installer à l'aide de la commande grub directement (attention le hd1 est à adapter selon votre configuration) :

# grub
grub> root (hd1,0)
grub> setup (hd1)

Il faut également renseigner le fichier /mnt/boot/grub/menu.lst

# menu.lst - See: grub(8), info grub, update-grub(8)
#            grub-install(8), grub-floppy(8),
#            grub-md5-crypt, /usr/share/doc/grub
#            and /usr/share/doc/grub-doc/.

## default num
# Set the default entry to the entry number NUM. Numbering starts from 0, and
# the entry number 0 is the default if the command is not used.
#
# You can specify 'saved' instead of a number. In this case, the default entry
# is the entry saved with the command 'savedefault'.
# WARNING: If you are using dmraid do not change this entry to 'saved' or your
# array will desync and will not let you boot your system.
default        0

## timeout sec
# Set a timeout, in SEC seconds, before automatically booting the default entry
# (normally the first entry defined).
timeout        5

# Pretty colours
color cyan/blue white/blue

## password '--md5' passwd
# If used in the first section of a menu file, disable all interactive editing
# control (menu entry editor and command-line)  and entries protected by the
# command 'lock'
# e.g. password topsecret
#      password --md5 $1$gLhU0/$aW78kHK1QfV3P2b2znUoe/
# password topsecret

#
# examples
#
# title        Windows 95/98/NT/2000
# root     (hd0,0)
# makeactive
# chainloader  +1
#
# title        Linux
# root     (hd0,1)
# kernel   /vmlinuz root=/dev/hda2 ro
#

#
# Put static boot stanzas before and/or after AUTOMAGIC KERNEL LIST

### BEGIN AUTOMAGIC KERNELS LIST
## lines between the AUTOMAGIC KERNELS LIST markers will be modified
## by the debian update-grub script except for the default options below

## DO NOT UNCOMMENT THEM, Just edit them to your needs

## ## Start Default Options ##
## default kernel options
## default kernel options for automagic boot options
## If you want special options for specific kernels use kopt_x_y_z
## where x.y.z is kernel version. Minor versions can be omitted.
## e.g. kopt=root=/dev/hda1 ro
##      kopt_2_6_8=root=/dev/hdc1 ro
##      kopt_2_6_8_2_686=root=/dev/hdc2 ro
# kopt=root=LABEL=live-root rootdelay=5 ro quiet

## default grub root device
## e.g. groot=(hd0,0)
# groot=(hd0,0)

## should update-grub create alternative automagic boot options
## e.g. alternative=true
##      alternative=false
# alternative=true

## should update-grub lock alternative automagic boot options
## e.g. lockalternative=true
##      lockalternative=false
# lockalternative=false

## additional options to use with the default boot option, but not with the
## alternatives
## e.g. defoptions=vga=791 resume=/dev/hda5
# defoptions=vga=791

## should update-grub lock old automagic boot options
## e.g. lockold=false
##      lockold=true
# lockold=false

## Xen hypervisor options to use with the default Xen boot option
# xenhopt=

## Xen Linux kernel options to use with the default Xen boot option
# xenkopt=console=tty0

## altoption boot targets option
## multiple altoptions lines are allowed
## e.g. altoptions=(extra menu suffix) extra boot options
##      altoptions=(single-user) single
# altoptions=(single-user mode) single

## controls how many kernels should be put into the menu.lst
## only counts the first occurence of a kernel, not the
## alternative kernel options
## e.g. howmany=all
##      howmany=7
# howmany=all

## should update-grub create memtest86 boot option
## e.g. memtest86=true
##      memtest86=false
# memtest86=true

## should update-grub adjust the value of the default booted system
## can be true or false
# updatedefaultentry=false

## ## End Default Options ##

title      Debian GNU/Linux, kernel 2.6.18-4-686
root       (hd0,0)
kernel     /vmlinuz-2.6.18-4-686 root=LABEL=live-root rootdelay=5 ro quiet vga=791
initrd     /initrd.img-2.6.18-4-686
savedefault

title      Debian GNU/Linux, kernel 2.6.18-4-686 (single-user mode)
root       (hd0,0)
kernel     /vmlinuz-2.6.18-4-686 root=LABEL=live-root rootdelay=5 ro quiet single
initrd     /initrd.img-2.6.18-4-686
savedefault

### END DEBIAN AUTOMAGIC KERNELS LIST

Ajout d'un utilisateur

Enfin il ne faut pas oublier d'installer un compte utilisateur4, ainsi que changer le mot de passe root à l'aide des commandes :

chroot /mnt
passwd
adduser toto

Redémarrage et test

Il ne reste plus qu'à démonter toutes les partitions et redémarrer la machine.

umount -a
exit
reboot

  1. J'ai par ailleurs acheté récemment une clé USB de 2Go à cet effet pour à peine 15 euros

  2. Ce qui peut arriver quand on change de machine par exemple.

  3. i.e les modules USB, ...

  4. Il ne faudrait pas travailler en administrateur, hein !