Debian etch - Clé USB
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 cher[1]. 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.
Notes
[1] J'ai par ailleurs acheté récemment une clé USB de 2Go à cet effet pour à peine 15 euros
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 :
- 50Mo pour la partition /boot
- 1,5Go pour la partition /
- 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 ordre[1].
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écessaires[2] 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-installrecheckroot-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 utilisateur[3], 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