# [TIP] Boot USB

## bouleetbil

Comment démarrer Gentoo sur un disk USB :

Tout d'abord il faut installer Gentoo sur ce disque pour cela suivre la documentation, que l'installation se fasse sur un disque USB ou ide ou même sata ne change pas chose.

Les seul prériquis sont :

1. Compilation du noyau avec genkernel. Il a ses détracteurs mais je le trouve très efficace et en plus on peut le modifier facilement.

2. Utiliser GRUB comme chargeur de démarrage.

Personnellement, je me suis installer une Gentoo sur un disque USB avec un noyau assez généraliste ce qui me permet de booter sur à peu près n'importe quel PC. De plus, j'ai ajouter x11-misc/mkxf86config afin de générer un xorg.conf adapter à la machine sur laquelle je vais travailler. Pour information, vous pouvez modifier /etc/X11/xorg.in pour ajouter ou supprimer des options à xorg. Ensuite, udev suffit pour la détection de matériel.

Une Gentoo sur USB est très pratique pour remplacer un LiveCD, soit pour faire des démonstrations soit pour réparer ou même installer un système, on y met ce que l'on veut  :Wink: 

Maintenant, pour booter sur un disque USB il y a deux possibilités soit la carte mère accepte le boot sur USB donc la aucun problème.

Il suffit de configurer et d'installer grub sur le disque USB

Pour configurer grub ajouter cette ligne à grub.conf

```

title  Gentoo-2.6.16-gentoo-r5

root (hd1,0)

kernel /boot/kernel-genkernel-x86-2.6.16-gentoo-r5 ro root=/dev/ram0 udev nodevfs real_root=/dev/sda1 init=/linuxrc splash=verbose,fadein,theme:emergence quiet CONSOLE=/dev/tty1

initrd /boot/initramfs-genkernel-x86-2.6.16-gentoo-r5

```

C'est l'option real_root= qui est importante et qui permet d'indiquer où se trouve réellement le système.

Pour l'installation

```

# grub-install /dev/sda1

```

/dev/sda1 représente la clé ou le disque USB

Et voila.

Alors maintenant, dans le cas ou le boot sur USB n'est pas possible il suffit de se préparer un petit cd qui permettra juste de booter, puis celui-ci pointera vers le disque USB :

Copier le contenu de /boot dans /tmp/lanceur

```

# mkdir /tmp/lanceur

# cp -a /boot /tmp/lanceur

```

Dans /tmp/lanceur/boot/grub/ supprimer grub.conf et menu.lst. Les liens symboliques ne fonctionne pas avec grub en mode LiveCD.

Créer dans /boot/grub un fichier menu.lst afin qu'il ressemble à cela : 

```

title  Gentoo-2.6.16-gentoo-r5

root (cd)

kernel (cd)/boot/kernel-genkernel-x86-2.6.16-gentoo-r5 ro root=/dev/ram0 udev nodevfs real_root=/dev/sda1 init=/linuxrc  splash=verbose,fadein,theme:emergence quiet CONSOLE=/dev/tty1 scandelay

initrd (cd)/boot/initramfs-genkernel-x86-2.6.16-gentoo-r5

```

L'option "scandelay" permet d'attendre 10 secondes ce qui laisse le temps de monter la clé ou le disque USB.

Créer l'image iso :

```

# cd /tmp/lanceur

# mkisofs -J -R -l -V "Lanceur" -b boot/grub/stage2_eltorito -no-emul-boot -boot-load-size 4 -boot-info-table -z -iso-level 4  -c livecd -o /tmp/live.iso /tmp/lanceur

```

Maintenant, vous pouvez emmener votre Gentoo Move partout.  :Laughing: 

Pour une version détaillée cf ==> https://forums.gentoo.org/viewtopic-t-466611.html

----------

## geekounet

Intéressant  :Smile: 

J'ai toutefois une petite question : l'option real_root=/dev/sda1 ne risque t'elle pas de poser problème si d'autres disques usb sont branchés et sont détectés par le kernel avant celle sur laquelle on boot ?

----------

## bouleetbil

 *pierreg wrote:*   

> Intéressant 
> 
> J'ai toutefois une petite question : l'option real_root=/dev/sda1 ne risque t'elle pas de poser problème si d'autres disques usb sont branchés et sont détectés par le kernel avant celle sur laquelle on boot ?

 

Si en effet, il vaut mieux éviter de brancher deux disques USB au boot.   :Wink: 

En fait, je n'y avais jamais pensé j'ai jamais eu le cas.

----------

## geekounet

Et le pb se pose aussi si ya des disques SATA, et là c'est moins facile à contourner ...  :Confused: 

----------

## anigel

Super astuce, vraiment !

Je n'avais jamais pris le temps de m'y pencher, et j'avais toujours opté pour des LiveCD "clefs-en-main". Merci beaucoup pour cette astuce !

D'ailleurs, si tu as un peu de temps pour développer la phase de création, avec des détails sur les fichiers de conf, etc, je pense que ça peut intéresser pas mal de monde ici, et du même coup un [TIP] deviandra un [HOWTO] très conséquent  :Wink:  !

Merci encore !

----------

## bouleetbil

Pour le problème des disques Sata ou d'autres USB présent, on peux se baser sur la méthode de détection du LiveCD officiel qui cherche un fichier livecd à la racine.

1. Créer un fichier GentooMove

```

# touch /GentooMove

```

2. Modifier linuxrc

Editer /usr/share/genkernel/generic/linuxrc afin de rajouter une option bootusb à genkernel.

A la ligne 73 ajouter :

```

                bootusb)

                     #création point de montage temporaire

                     mkdir /cle

                     for a in `find /dev/ -name sd??`  

                     do

                            mount $a /cle

                             #attente de 10 secondes pour avoir le temps de monter la clé

                             sleep 10

                             #vérification si on trouve le fichier GentooMove

                             if [ -e /cle/GentooMove ]

                              then

                                        REAL_ROOT="${a}"

                                        umount ${a}

                                        break

                              fi

                              umount ${a}

                     done                    

      ;;

```

3. Ajouter l'option bootusb à grub.

Et voila, plus de problème (enfin j'espère   :Laughing:  ) 

Je vais voir pour faire un howto plus complet.   :Wink: 

----------

## bouleetbil

J'ai posté un peu vite, désolé

En faite, le test doit être fait plus tard sinon les modules ne sont pas chargés et donc pas de périphériques   :Embarassed: 

Pour la modification de linuxrc

Ajouter à la ligne 74

```

bootusb)

         BOOTUSB=1

      ;;

```

Ajouter à la ligne 244 avant

```

# Run debug shell if requested

rundebugshell

```

```

if [ "${BOOTUSB}" -eq '1' ] ; then

                     #création point de montage temporaire

                     mkdir /cle

                     for a in `find /dev/ -name sd??` 

                     do

                            mount $a /cle

                             #attente de 10 secondes pour avoir le temps de monter la clé

                             sleep 10

                             #vérification si on trouve le fichier GentooMove

                             if [ -e /cle/GentooMove ]

                              then

                                        REAL_ROOT="${a}"

                                        umount ${a}

                                        break

                              fi

                              umount ${a}

                     done            

fi

```

----------

## TrizoLakai

Merci pour ce [TIP], 

init=linuxrc,  CONSOLE=, ne servent à rien chez moi.

Et je me demander pourquoi il faut à tout pris compiler avec genkernel ?

J'ai essayé sans genkernel, en mettant tout les modules genre ehci_usb, usbcore, usbstorage, ...

Et bien j'ai un kernel panic, même si j'utilise l'option scandelay. En fait je pense que le plus important dans ce que fais genkernel est l'initrd. Alors j'ai aussi essayé de mettre tout les modules relatif à l'usb de mon disque dur externe dans l'intrd. Et j'ai aussi un kernel panic. Alors voila je ne sais pas si c'est impossible ou si c'est moi qui oublis des modules, ou même si je ne sais pas faire un initrd   :Rolling Eyes:  .

Mais j'aimerais bien des éclaircissement la dessus. Merci beaucoup,

note : mon bios ne gère pas le boot sur usb, alors je boot sur mon DD interne qui a grub et le noyau, ansi que l'initrd compilé par genkernel, pour ensuite booter sur mon DD - Externe.

Merci,

----------

## bouleetbil

Bonsoir,

J'ai la même configuration sur un portable 

 *TrizoLakai wrote:*   

> 
> 
> note : mon bios ne gère pas le boot sur usb, alors je boot sur mon DD interne qui a grub et le noyau, ansi que l'initrd compilé par genkernel, pour ensuite booter sur mon DD - Externe.

 

Chez moi cela fonctionne, en faite dans ce cas, il faut utiliser genkernel pour utiliser "linuxrc" et indiquer le "real_root". 

J'aurrais quelques questions :

Pourrais-tu envoyer ton grub.conf ?

Quel est le système de fichier sur le disque USB ?

Quel est le message exact du kernel panic ?

Les disques durs internes sont sata ?

(Je préfère demander pleins de renseignements, j'ai toujours peur de manquer   :Wink:  )

----------

## TrizoLakai

Je me suis mal exprimÃ©. Ton tuto fonctionne chez moi si j'utilise genkernel.

MAIS, si j'essais de faire un initrd Ã  la main ou un kernel avec toute en dur, Ã  la main Ã©galement Ã§a ne fonctionne pas.

Si tu avais compris Ã§a : 

reiserfs partout.

pas de disque en sata.

kernel panic : system de fichier en 0,0 non trouvÃ©. Bad link etc.

----------

## TrizoLakai

En fait j'amerais faire mon propre inintrd pour adpater tout ce la à n'importe quelle distribution

----------

## bouleetbil

Bonsoir,

J'avais pas compris.

Pour créer un initrd assez générique :

Soit modifier /usr/share/genkernel/gen_initramfs.sh afin de créer un ramfs et utiliser le linuxrc de genkernel

Soit installer et utiliser genkernel sur la distribution choisie.

Le problème est que tu risques de te heurter à des problèmes spécifiques à chaque distribution, comme certaines utilise le bootsplash et d'autre le gensplash.

Sinon le plus simple, faire des recherches sur les distributions que tu comptes essayer afin de regarder comment est générer l'initrd et modifier le linuxrc existant afin de rajouter l'option real_root et un temps mort pour laisser le temps de monter les disques USB. (mais à mon avis déjà intégré à certaines distrib)

Voila, après si tu as une idée précise sur une distribution je peux essayer de t'aider

----------

## TrizoLakai

Et bien je voulais faire la mÃªme chose pour une archlinux.

J'ai essayÃ© de prendre le mÃªme noyau que gentoo-EXT et le mÃªme initrd, mais il me demande les modules d'un noyau que je n'ai pas au dÃ©marrage, enfin un truc bizarre quand mÃªme.   :Rolling Eyes: 

Alors j'aimerais faire un noyau utilisable pour tout les distributions.

----------

## bouleetbil

Bonsoir,

Pour utiliser un noyau déjà compilé, il faut récuperer /boot/initramfs-genkernel-x86-version du noyau, /boot/kernel-genkernel-x86-version du noyau et /lib/modules/version du noyau 

Il doit manquer /lib/modules/version du noyau

----------

## TrizoLakai

Et bien justement, il ne trouvÃ© pas les libs dans /lib/modules/2.6.16.16/, alors que mon noyau a ce nom 2.6.16-gentoo-r1, mais je lui met quand mÃªme dans le repertoire demandÃ©. Ensuite il ne trouve pas les modules dans /lib/modules/2.6.16-gentoo-r1, alors je copie aussi.

Je reboote, invalid format *.ko, blablabla.

----------

## bouleetbil

Bonsoir,

Apres quelques recherches il est possible que cela vienne de la version de GCC qui a été utilisé.

Le mieux serais quand même de compiler le noyau sous arch plutôt que d'utiliser celui compilé sous Gentoo.

----------

## alpha_one_x86

Je voudrai ajouter une correction, qui a été obligatoire chez moi et chez d'autre personne, car certain on pu le remarquer, on ne peu pas démonter la partition par le périphérique du style /dev/sdaX mais seulement par sont point de montage, ici /cle, voici une solution possible (j'y ai ajouter le suport des disk dur ide, et la mise a jour automatique du fstab):

```
bootusb)

                     #création point de montage temporaire

                     mkdir /cle

                     for a in `find /dev/ -name [sh]d??` 

                     do

                            mount $a /cle

                             #vérification si on trouve le fichier GentooMove

                             if [ -e /cle/GentooMove ]

                              then

                                        REAL_ROOT="${a}"

                                        rm -f /cle/etc/fstab 2> /dev/null

                                        cp /cle/etc/fstab.in /cle/etc/fstab

                                        echo "${a}        /   auto         defaults      1 1" >> /cle/etc/fstab

                                        umount /cle

                                        break

                              fi

                              umount /cle

                     done                   

      ;; 
```

----------

## bouleetbil

Bonsoir,

Merci pour cette correction j'en ai profité pour ajouter 

```
for a in `find /dev/ -name [sh]d??` 
```

au topic gentoomove qui est plus complet et la suite de celui-ci :

https://forums.gentoo.org/viewtopic-p-3346620.html

En effet j'avais eu ce problème de démontage mais j'avais corrigé que le topic gentoomove, j'avais oublié celui-ci.

----------

