{{tag>Trusty live_usb lubuntu mbr boot}} ---- ====== Lubuntu USB Creator ====== Ce tutoriel a pour origine un besoin de remplacer un disque dur défaillant (voir [[http://openclassrooms.com/forum/sujet/remplacer-un-hdd-par-un-live-usb#message-88173124|ici]]). Comme je pouvais difficilement le remplacer (format 1.8" peu commun), je suis parti en quête de solution alternative. Je voulais explorer la possibilité d'utiliser un Live USB, mais sans trop savoir où je m'aventurais. Pris au jeu, cette exploration est devenue un projet à part entière. Ayant bien-bien-bien avancé sur le sujet et je vous propose aujourd'hui le fruit de mon travail... :-) Comme je le disais dans mon [[http://openclassrooms.com/forum/sujet/remplacer-un-hdd-par-un-live-usb#message-88173124|post initial]], j'allais tester la solution du Live USB à partir d'un S-ATA externe connecté par USB. J'ai réussi à créer un Live USB persistant sur un HDD SATA branché sur une station d'accueil externe et connectée via USB. De plus, j'ai réussi à créer un script 'OneTouch' qui construit lui même le Live USB à partir de nos réglages. Je l'ai appelé L.U.C. (Lubuntu USB Creator). Comme je suis trop content :-) ! Ce document est devenu très grand et tout ne sera pas utile pour tout le monde. Pour ceux qui sont juste curieux du résultat, vous pouvez directement lire le chapitre [[#pre-requis|Pré-requis]] puis poursuivre par [[#mode_d_emploi|Mode d'emploi]] (temps d'installation estimé : 20 minutes) Si vous avez des commentaires, remarqué des erreurs ou adapté le script à d'autres distributions, n'hésitez pas à faire un retour sur le [[http://forum.ubuntu-fr.org/viewtopic.php?pid=19673001#p19673001|forum]]. ===== Pré-requis ===== Pour mettre tout ça en place, vous aurez besoins des éléments suivants : * Disposer des [[:sudo|droits d'administration]]. * Disposer d'une connexion à Internet configurée et activée. * Le fichier ISO de la distribution [[https://help.ubuntu.com/community/Lubuntu/GetLubuntu|Lubuntu]] pour architecture 32 bits (voir les [[#plateformes_supportees|plateformes supportées]]) Pour connaître l'architecture du micro-processeur : lscpu |grep bit * Un PC pour construire le support USB, appelons le **PC-BUILDER** (voir les [[#plateformes_supportees|plateformes supportées]]) * Un disque dur externe SATA + station accueil SATA reliée par USB ou eSATA (pour ceux qui ne connaissent pas : [[http://lmgtfy.com/?q=station+accueil+sata+usb|http://lmgtfy.com/?q=station+accueil+sata+usb]]) ; pour ceux qui n'ont pas un tel matériel une simple clé USB de 2 GB mini fera l'affaire pour tester. ATTENTION : la technologie d'une clé USB n'étant pas prévue pour les multiples écritures nécessaires au fonctionnement d'un OS, il en résultera une durée de vie réduite, vous voilà prévenu ! * Un autre PC pour tester, appelons le **PC-LIVE** qui servira d'hôte à notre Live USB (il ne touchera pas à l'éventuel OS en place) ; si on n'a pas de 2ème PC on peut utiliser PC-BUILDER, seulement ce sera moins pratique (surtout pour l'accès distant ^^ ) Maintenant que vous avez les pré-requis, peut être voudriez-vous tester la [[#mode_d_emploi|finalité]] (temps estimé : 20 min) ? ==== Plateformes supportées ==== Ces couples de plateformes ont été testées avec succès : ^ OS PC-BUILDER ^ CPU ^ OS PC-LIVE ^ CPU ^ RMQ ^ | Ubuntu 12.04 LTS 32 bits | 32 bits | Lubuntu 14.10 32 bits | 32 bits | | | Ubuntu 14.04 LTS 64 bits | 32 bits | Lubuntu 14.10 32 bits | 32 bits | environnement VM | N'hésitez pas à faire un retour sur le [[http://forum.ubuntu-fr.org/viewtopic.php?pid=19673001#p19673001|forum]], pour faire évoluer cette liste. ===== Un live USB persistant ? ===== Le Net regorge de tutoriels pour créer des Live CD et Live USB . Mais au fait c'est quoi un Live xx ? C'est la possibilité de démarrer un mini OS pour par exemple installer un système un peu plus costaud ou tout simplement le tester sans affecter l'éventuel système déjà en place. Comme les CDs c'est un peu galère, on a créé les Live USB qui sont plus rapides et plus {ergonom|économ|écolog}iques. Cerise sur le gateau, la persistance. Ben oui, pourquoi ne pas pouvoir enregistrer ses réglages, ses fichiers aussi ? La persistance a réglé le problème, à un tel point qu'on pourrait presque songer à remplacer son vieux OS par un Live USB persistant (sisi j'vous jure :-P ). A noter que de base, la persistance réside dans un fichier nommé **casper-rw** de 4 GB maxi (limitation FAT32) et se trouve à la racine du support. ===== Ce que je vous propose ici ===== Un Live USB dont la persistance se fera sur une partition à part entière dédiée. Il sera équipé du système d'exploitation Lubuntu, car très léger. Il sera accessible à distance via SSH ou par VNC à une adresse IP définie AVANT la création du support. Il sera en français, à l'heure et aura comme unique utilisateur ... vous ! Il possèdera les fonctions de base d'un système d'exploitation : client navigateur Internet, éditeur de texte, navigateur de fichiers, Disk, GParted, etc. En outre, il intégrera tous les outils que vous jugerez bon de lui ajouter (avant ou après sa création). Il faut ajouter que tout se configure avant l'installation en renseignant [[#mode_d_emploi|quelques paramètres]] (pas de quoi foueter un chat non plus hein !). Le top must de la mort qui tue :-), in situ on pourra réinitialiser le support comme si on venait de le créer (reboot nécessaire) et on pourra même modifier sa propre installation sans repasser par la re-création du support (plus d'explications dans le [[#mini_how-to|mini How-To]]) ===== Fonctionnement d'un support bootable ===== J'ai fait une grosse recherche sur tout le mécanisme de boot et je me propose de vous exposer mes découvertes. Cette partie optionnelle est longue et technique, mais elle n'est pas complexe. De plus, j'ai précisé mes sources. Bonne lecture ! Ce que je décris ici, c'est ce que j'ai compris après plein, plein, pleins de lectures sur le sujet. Des sujets qui parfois se contredisent, surtout au niveau des termes. Je ne garanti pas l'exactitude, mais je suis parti du principe que quand plusieurs explications vont dans le même sens, c'est qu'elle doivent être vraies ou tendre vers la vérité. Ensuite, il y a mes propres expériences (réalisées avec mes mimines à moi), le bon sens et l'intuition. Toutefois quand j'annonce quelque chose, j'essaye dans la mesure du possible de citer mes sources. Si vous voyez des erreurs n'hésitez pas à le signaler, mais dans la même optique, en citant vos sources. Nota : ici je ne parle que du mécanisme de boot par BIOS / MBR ; je m'attaquerais peut être plus tard au boot UEFI / GPT encore que je ne sois pas sûr que des Live USB de plus de 2 TB soient pertinents. Le schéma à avoir en tête ([[http://poloastucien.free.fr/mbr_fat_secteurs_boot_h.html#1|source]]) : {{http://poloastucien.free.fr/mbr_secteurs-01.jpg}} Nota : **BS** (Boot Sector) sera nommé VBR, dans les explications suivantes, car boot sector est un terme trop générique. Je passe toutes les étapes (très intéressantes) sur le démarrage physique et électronique du PC, pour arriver à la dernière étape de traitement du BIOS après le POST ([[http://fr.wikipedia.org/wiki/Power-On_Self-Test|Power-On Self-Test]]) Le BIOS cherche le premier support bootable, dont on peut définir soi-même l'ordre de recherche (boot sequence) ou à la demande avec la touche F12 (ou autre), puis exécute le code du MBR... ==== Support bootable et MBR ==== Q : Qu'est ce qu'un support bootable ?\\ R : C'est un support qui lors du démarrage d'un PC, va exécuter du code pour charger un système d'exploitation ou autres. Pour permettre cela, il faut que les premiers octets du support constituent un MBR bootable ou plus rarement, un VBR bootable (voir plus bas). Q : Qu'est ce qu'un **MBR** (Master Boot Record) ?\\ R : //C'est le premier secteur adressable d'un disque dur (cylindre 0, tête 0 et secteur 1, ou secteur 0 en adressage logique) dans le cadre d'un partitionnement Intel.// ([[http://fr.wikipedia.org/wiki/Master_boot_record|wiki]]). Par héritage, pour adapter aux supports autres que le disque dur, on dira que le [[http://fr.wikipedia.org/wiki/Master_boot_record|MBR]] ce sont les **512 premiers octets** de n'importe quel support bootable. Nota : fdisk -l /dev/ retourne l'adresse en CHS (Cylinder, Head, Sector) et l'adresse du premier secteur LBA (Logical Block Address) MEME si le support est une simple clé USB, alors que physiquement il n'y a ni cylindres, ni têtes de lecture sur une clé USB (comme quoi l'héritage...) Q : Quel est le contenu d'un MBR ?\\ R : Un code exécutable (appelons la **routine_MBR**), d'éventuels messages d'erreurs en cas de problème, le descripteur des partitions principales, une signature de contrôle facultative et se termine obligatoirement par les octets "55 aa" qui représentent le **nombre magique** 0xaa55 ([[http://fr.wikipedia.org/wiki/Master_boot_record#Structure_du_MBR|wiki]]) pour distinguer un support bootable d'un autre ([[http://poloastucien.free.fr/mbr_fat_secteurs_boot_h.html#2|sources]]) Attention : le nombre magique ne suffit pas en soi, pour déterminer si le support est réellement bootable, il faut également qu'une partition soit active (voir dessous) ! On peut visualiser le contenu hexadécimal/ASCII d'un MBR grâce à la commande hexdump ou hd hd /dev/ -n 512 -s 0 $ hd /dev/sde -n 512 -s 0 00000000 fa b8 00 10 8e d0 bc 00 b0 b8 00 00 8e d8 8e c0 |................| 00000010 fb be 00 7c bf 00 06 b9 00 02 f3 a4 ea 21 06 00 |...|.........!..| 00000020 00 be be 07 38 04 75 0b 83 c6 10 81 fe fe 07 75 |....8.u........u| 00000030 f3 eb 16 b4 02 b0 01 bb 00 7c b2 80 8a 74 01 8b |.........|...t..| 00000040 4c 02 cd 13 ea 00 7c 00 00 eb fe 00 00 00 00 00 |L.....|.........| 00000050 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| * 000001b0 00 00 00 00 00 00 00 00 30 85 09 00 00 00 80 01 |........0.......| 000001c0 01 00 0c fe 3f 79 3f 00 00 00 bb e7 1d 00 00 00 |....?y?.........| 000001d0 01 7a 83 fe ff ff fa e7 1d 00 c7 a2 83 12 00 00 |.z..............| 000001e0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| 000001f0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 55 aa |..............U.| 00000200 Vous remarquerez que cette section se termine par "55 aa", on a donc le nombre magique 0xaa55, on visualise donc le MBR d'un disque bootable Nota : * indique que la ligne du dessus est répétée plusieurs fois Q : Que contient le **descripteur de partitions principales** ?\\ R : 64 octets décrivant les 4 partitions principales. Pour chacune des partitions sur 16 octets (16*4=64), on sait si la partition est active (donc bootable), on connait son système de fichiers sous-jacent (**FS** : File System), sa taille et sa position ([[http://poloastucien.free.fr/mbr_fat_secteurs_boot_h.html#2|sources]]) En reprenant l'affichage hexdump du dessus : 000001b0 80 01 | ..| 000001c0 01 00 0c fe 3f 79 3f 00 00 00 bb e7 1d 00 |....?y?....... | 000001c0 00 00 | ..| 000001d0 01 7a 83 fe ff ff fa e7 1d 00 c7 a2 83 12 |.z............ | 000001d0 00 00 | ..| 000001e0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| 000001f0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |.............. | Ici : * Le 1er bloc (ligne 000001b0) représente le descripteur de partition 1 : le 80 du début indique que la partition est active (et donc bootable). * Le 2ème bloc (ligne 000001c0) représente le descripteur de la partition 2 : le 00 du début indique que la partition n'est pas active (donc n'est pas bootable). * Le 3ème bloc (commence à la ligne 000001d0) représente les descripteurs des partitions 3 et 4 : comme elles sont remplies de "00", cela indique qu'il n'y a pas de 3ème et 4ème partition. Pour plus d'explications, voir [[http://poloastucien.free.fr/mbr_fat_secteurs_boot_h.html#2|ici]]. ==== Partition principale / étendue ==== Q : Que trouve t-on au début d'une **partition principale** ?\\ R : 512 octets qui constituent, soit le début d'un secteur de boot de volume (VBR), soit un secteur de boot de partition étendue (EBR) - ([[http://poloastucien.free.fr/mbr_fat_secteurs_boot_h.html#1|sources]]). Q : Qu'est ce qu'une **partition étendue** ?\\ R : Permet d'étendre le nombre de partitions pour dépasser la limite des 4 partitions principales. FIXME Q : Que contient un secteur de boot d'une partition étendue ?\\ R : Même type de structure qu'un MBR ([[http://en.wikipedia.org/wiki/Extended_boot_record|EBR]]), en revanche semble commencer par une instruction de saut. ==== VBR et bootloader ==== Q : Qu'est ce qu'un **VBR** (Volume Boot Record) ?\\ R : C'est un secteur de boot de partition. Les informations qu'elle contient, varient selon le FS sous-jacent. Certains supports contiennent directement un VBR sans MBR parent ; c'est le cas de nos vieilles disquettes ([[http://en.wikipedia.org/wiki/Volume_boot_record#Signature|wiki]]) Nota : la taille d'un VBR dépend du FS sous-jacent (FAT32 : 32 secteurs, NTFS : 16 secteurs - [[http://poloastucien.free.fr/mbr_fat_secteurs_boot_h.html#1|source]]) Q : Quel est le contenu d'un VBR ?\\ R : Un VBR commence toujours par une instruction de saut vers le code exécutable que nous appellerons **routine_VBR**, est suivi par le BPB qui donne les caractéristiques physiques de la partition et surtout l'adresse de la table d'allocation de fichiers, suivi de la routine_VBR, les éventuels messages d'erreur, et comme pour le MBR, elle se termine par le nombre magique 0xaa55 ([[http://poloastucien.free.fr/mbr_fat_secteurs_boot_h.html#5|source]]). La routine_VBR exécutera le bootloader. Nota : on peut visualiser le contenu hexadécimal/ASCII d'un VBR de partition grâce à la commande hexdump hd /dev/ -n 512 -s 0 $ hd /dev/sde1 -n 512 -s 0 00000000 eb 58 90 53 59 53 4c 49 4e 55 58 00 02 08 20 00 |.X.SYSLINUX... .| 00000010 02 00 00 00 00 f8 00 00 3f 00 ff 00 00 00 00 00 |........?.......| 00000020 bb e7 1d 00 78 07 00 00 00 00 00 00 02 00 00 00 |....x...........| 00000030 01 00 06 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| 00000040 00 01 29 04 22 bd 91 4c 5f 4c 55 42 55 4e 54 55 |..)."..L_LUBUNTU| 00000050 20 20 46 41 54 33 32 20 20 20 fa fc 31 c9 8e d1 | FAT32 ..1...| 00000060 bc 76 7b 52 06 57 1e 56 8e c1 b1 26 bf 78 7b f3 |.v{R.W.V...&.x{.| 00000070 a5 8e d9 bb 78 00 0f b4 37 0f a0 56 20 d2 78 1b |....x...7..V .x.| 00000080 31 c0 b1 06 89 3f 89 47 02 f3 64 a5 8a 0e 18 7c |1....?.G..d....|| 00000090 88 4d f8 50 50 50 50 cd 13 eb 62 8b 55 aa 8b 75 |.M.PPPP...b.U..u| 000000a0 a8 c1 ee 04 01 f2 83 fa 4f 76 31 81 fa b2 07 73 |........Ov1....s| 000000b0 2b f6 45 b4 7f 75 25 38 4d b8 74 20 66 3d 21 47 |+.E..u%8M.t f=!G| 000000c0 50 54 75 10 80 7d b8 ed 75 0a 66 ff 75 ec 66 ff |PTu..}..u.f.u.f.| 000000d0 75 e8 eb 0f 51 51 66 ff 75 bc eb 07 51 51 66 ff |u...QQf.u...QQf.| 000000e0 36 1c 7c b4 08 e8 e9 00 72 13 20 e4 75 0f c1 ea |6.|.....r. .u...| 000000f0 08 42 89 16 1a 7c 83 e1 3f 89 0e 18 7c fb bb aa |.B...|..?...|...| 00000100 55 b4 41 e8 cb 00 72 10 81 fb 55 aa 75 0a f6 c1 |U.A...r...U.u...| 00000110 01 74 05 c6 06 46 7d 00 66 b8 88 1a 02 00 66 ba |.t...F}.f.....f.| 00000120 00 00 00 00 bb 00 80 e8 0e 00 66 81 3e 1c 80 5e |..........f.>..^| 00000130 30 95 71 75 74 e9 f8 02 66 03 06 60 7b 66 13 16 |0.qut...f..`{f..| 00000140 64 7b b9 10 00 eb 2b 66 52 66 50 06 53 6a 01 6a |d{....+fRfP.Sj.j| 00000150 10 89 e6 66 60 b4 42 e8 77 00 66 61 8d 64 10 72 |...f`.B.w.fa.d.r| 00000160 01 c3 66 60 31 c0 e8 68 00 66 61 e2 da c6 06 46 |..f`1..h.fa....F| 00000170 7d 2b 66 60 66 0f b7 36 18 7c 66 0f b7 3e 1a 7c |}+f`f..6.|f..>.|| 00000180 66 f7 f6 31 c9 87 ca 66 f7 f7 66 3d ff 03 00 00 |f..1...f..f=....| 00000190 77 17 c0 e4 06 41 08 e1 88 c5 88 d6 b8 01 02 e8 |w....A..........| 000001a0 2f 00 66 61 72 01 c3 e2 c9 31 f6 8e d6 bc 68 7b |/.far....1....h{| 000001b0 8e de 66 8f 06 78 00 be da 7d ac 20 c0 74 09 b4 |..f..x...}. .t..| 000001c0 0e bb 07 00 cd 10 eb f2 31 c0 cd 16 cd 19 f4 eb |........1.......| 000001d0 fd 8a 16 74 7b 06 cd 13 07 c3 42 6f 6f 74 20 65 |...t{.....Boot e| 000001e0 72 72 6f 72 0d 0a 00 00 00 00 00 00 00 00 00 00 |rror............| 000001f0 00 00 00 00 00 00 00 00 fe 02 b2 3e 18 37 55 aa |...........>.7U.| 00000200 En reprenant l'affichage hexdump du dessus : 00000000 eb 58 90 |.X. | 00000000 53 59 53 4c 49 4e 55 58 | SYSLINUX | 00000000 02 08 20 00 | .. .| 00000010 02 00 00 00 00 f8 00 00 3f 00 ff 00 00 00 00 00 |........?.......| 00000020 bb e7 1d 00 78 07 00 00 00 00 00 00 02 00 00 00 |....x...........| 00000030 01 00 06 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| 00000040 00 01 29 04 22 bd 91 4c 5f 4c 55 42 55 4e 54 55 |..)."..L_LUBUNTU| 00000050 20 20 46 41 54 33 32 20 20 | FAT32 | 00000050 20 fa fc 31 c9 8e d1 | ..1...| 00000060 bc 76 7b 52 06 57 1e 56 8e c1 b1 26 bf 78 7b f3 |.v{R.W.V...&.x{.| 00000070 a5 8e d9 bb 78 00 0f b4 37 0f a0 56 20 d2 78 1b |....x...7..V .x.| 00000080 31 c0 b1 06 89 3f 89 47 02 f3 64 a5 8a 0e 18 7c |1....?.G..d....|| 00000090 88 4d f8 50 50 50 50 cd 13 eb 62 8b 55 aa 8b 75 |.M.PPPP...b.U..u| 000000a0 a8 c1 ee 04 01 f2 83 fa 4f 76 31 81 fa b2 07 73 |........Ov1....s| 000000b0 2b f6 45 b4 7f 75 25 38 4d b8 74 20 66 3d 21 47 |+.E..u%8M.t f=!G| 000000c0 50 54 75 10 80 7d b8 ed 75 0a 66 ff 75 ec 66 ff |PTu..}..u.f.u.f.| 000000d0 75 e8 eb 0f 51 51 66 ff 75 bc eb 07 51 51 66 ff |u...QQf.u...QQf.| 000000e0 36 1c 7c b4 08 e8 e9 00 72 13 20 e4 75 0f c1 ea |6.|.....r. .u...| 000000f0 08 42 89 16 1a 7c 83 e1 3f 89 0e 18 7c fb bb aa |.B...|..?...|...| 00000100 55 b4 41 e8 cb 00 72 10 81 fb 55 aa 75 0a f6 c1 |U.A...r...U.u...| 00000110 01 74 05 c6 06 46 7d 00 66 b8 88 1a 02 00 66 ba |.t...F}.f.....f.| 00000120 00 00 00 00 bb 00 80 e8 0e 00 66 81 3e 1c 80 5e |..........f.>..^| 00000130 30 95 71 75 74 e9 f8 02 66 03 06 60 7b 66 13 16 |0.qut...f..`{f..| 00000140 64 7b b9 10 00 eb 2b 66 52 66 50 06 53 6a 01 6a |d{....+fRfP.Sj.j| 00000150 10 89 e6 66 60 b4 42 e8 77 00 66 61 8d 64 10 72 |...f`.B.w.fa.d.r| 00000160 01 c3 66 60 31 c0 e8 68 00 66 61 e2 da c6 06 46 |..f`1..h.fa....F| 00000170 7d 2b 66 60 66 0f b7 36 18 7c 66 0f b7 3e 1a 7c |}+f`f..6.|f..>.|| 00000180 66 f7 f6 31 c9 87 ca 66 f7 f7 66 3d ff 03 00 00 |f..1...f..f=....| 00000190 77 17 c0 e4 06 41 08 e1 88 c5 88 d6 b8 01 02 e8 |w....A..........| 000001a0 2f 00 66 61 72 01 c3 e2 c9 31 f6 8e d6 bc 68 7b |/.far....1....h{| 000001b0 8e de 66 8f 06 78 00 be da 7d ac 20 c0 74 09 b4 |..f..x...}. .t..| 000001c0 0e bb 07 00 cd 10 eb f2 31 c0 cd 16 cd 19 f4 eb |........1.......| 000001d0 fd 8a 16 74 7b 06 cd 13 07 c3 42 6f 6f 74 20 65 |...t{.....Boot e| 000001e0 72 72 6f 72 0d 0a 00 00 00 00 00 00 00 00 00 00 |rror............| 000001f0 00 00 00 00 00 00 00 00 fe 02 b2 3e 18 37 55 aa |...........>.7U.| 00000200 On peut notera que : * Les 3 premiers octets constituent une instruction de saut de 88 octets ([[http://www.binaryhexconverter.com/hex-to-decimal-converter|58h=88d]] ; 58 en héxadécimal correspond à 88 décimal). Donc on va "sauter" 88 octets qui nous emmène directement au 4ème bloc (ligne 0000050) * Les 8 octets suivants concernent le [[http://thestarman.narod.ru/asm/mbr/W7VBR.htm|OEM ID]] (en gros qui a créé le VBR) : ici on voit que c'est SYSLINUX * Le bloc suivant concerne le BPB ([[http://fr.wikipedia.org/wiki/BIOS_parameter_block|BIOS parameter block]]) qui décrit la couche physique du support ; également on peut voir en clair le libellé du support (ici L_LUBUNTU), ainsi que le FS (ici le système de fichier est en FAT32) * Le dernier bloc commence par la routine_VBR (exécuté après l'instruction de saut), suivi des messages d'erreur * Encore et toujours, les deux derniers octets constituent le nombre magique 0xaa55 Plus d'explications [[http://thestarman.narod.ru/asm/mbr/W7VBR.htm|ici]] (attention : en anglais et pour utilisateurs avertis) Q : Qu'est ce qu'un **bootloader** ?\\ R : C'est un programme en lecture seule accessible dans le système de fichiers (généralement on peut le voir avec un simple ls). Son rôle est de charger en mémoire un mini-système d'exploitation qui à son tour pourra charger un système d'exploitation "lourd" (Ubuntu, Windows). ==== En résumé ==== On peut dire ici que le démarrage se fait en trois temps après le POST. Le BIOS exécute la routine_MBR, qui exécute à son tour la routine_VBR, qui exécute elle même le boot loader. Rien n'empêche de le faire en deux temps : le BIOS exécute la routine_MBR qui exécute elle même le bootloader. Voir en un temps, le BIOS exécute la routine_MBR qui se trouve être le fichier bootloader. Aussi, je rappelle qu'on peut très bien avoir un VBR sans MBR (cas des [[http://en.wikipedia.org/wiki/Design_of_the_FAT_file_system#Bootsector|disquettes]]). Tout ça pour dire, que finalement tout est possible, selon "comment" on écrit le BIOS, la routine de MBR / VBR, etc. Ceci explique certainement, pourquoi les explications concernant le boot, sont floues et divergentes. En tout cas j'espère vous avoir éclairé sur ses possibilités. ===== Installation manuelle du Live USB ===== Avant d'élaborer le [[#le_code|script OneTouch]], je suis bien évidemment passé par la phase "installation à la mano". Ce guide manuel est dédié pour un live USB "Lubuntu 14.10 32 bits" qui a été créé depuis un PC équipé de "Ubuntu 12.04 LTS 32 bits" (PC-BUILDER) ; si vous n'avez pas ces prérequis, vous aurez certainement à adapter les consignes suivantes. ==== Préparation ==== Pour créer le support avec une persistance dans une partition **/casper-rw**, j'ai suivi [[http://gornthorn.over-blog.fr/article-live-usb-en-mode-persistant-avec-l-integralite-de-la-cle-usb-74373994.html|ce lien]] qui utilise l'outil "Créer un disque de démarrage" et GParted ([[:tutoriel:comment_installer_un_paquet|Installez les paquets]] **[[apt>gparted|gparted]]**). L'outil "Créer un disque de démarrage" est par défaut sous Ubuntu et contient quelques bugs. Entre autres : * Pour une raison que j'ignore, parfois le support disparait au bout d'un moment ; il suffit de rebrancher le support pour qu'il réapparaisse * Apparemment, si on utilise une connexion eSATA, le support ne sera pas détecté par l'application (en tout cas, moi je n'ai pas réussi), donc uniquement en connexion USB ==== Session Live FR et silencieuse ==== Modifier le fichier de configuration ([[:tutoriel:comment_modifier_un_fichier|Ouvrez le fichier]] **/syslinux/syslinux.cfg**). Remplacer son contenu par : DEFAULT live LABEL live SAY Lubuntu USB Live Persistant KERNEL /casper/vmlinuz APPEND noprompt persistent boot=casper initrd=/casper/initrd.lz quiet splash \ locale=fr_FR.UTF-8 console-setup/layoutcode=fr ==== Remplacer le fichier gfxboot.c32 ==== Remplacer le fichier gfxboot.c32 du support par celui du PC-BUILDER de création : sudo cp /usr/lib/syslinux/gfxboot.c32 /syslinux/gfxboot.c32 Nota :\\ Si on ne fait pas cette étape, le boot automatique ne marchera pas et se soldera par un prompt "boot :". Dans ce cas, on n'aura plus qu'à taper manuellement **"live"** (sans les guillemets), suivi d'un appui la touche **Entrée**. ==== Mettre en place le PC-LIVE ==== Brancher le live USB sur un PC de test éteint (PC-LIVE) S'assurer que le PC-LIVE est relié physiquement au réseau (au besoin démarrez le et vérifiez que vous avez accès au réseau). Démarrer le PC-LIVE et configurer le BIOS pour qu'il démarre sur le Live USB ou bien choisir le support depuis la liste des périphériques (F12 ou autre). NB : je ne décris pas cette étape qui varie d'une machine à une autre, toutefois une recherche avec votre moteur de recherche favori, devrait donner rapidement la solution. ==== 1er démarrage : Live session ==== Vous venez de démarrer le support avec succès et le bureau est affiché. Il ne reste plus qu'à personnaliser et ajouter un nouvel utilisateur (vous). On peut noter qu'il y a un raccourci "Installer Lubuntu" sur le bureau === Modifier adresse IP via Network Manager === * Icône réseau en bas à droite > Modification des connexions (Edit Connections) * Sélectionner : Connexion filaire 1 (Wired connection 1) * Modifier (Edit) * Onglet "Paramètres IPv4" (IPv4 settings) et renseigner (adapter à votre cas) : * Méthode (Method) : manuelle (manual) * Adresse (Address) : 192.168.0.3 * Masque réseau (Netmask) : 24 (/24 soit 255.255.255.0) * Passerelle (Gateway) : 192.168.0.254 * DNS (DNS servers) : 8.8.8.8 * Enregistrer (Save) * Fermer (Close) === Environnement complet en FR === * Menu démarrer > Préférences > Prise en charge des langues * Popup "La prise en charge des langues n'est pas complètement installée" * Installer * Installer / Supprimer des langues * Cocher : Français * Décocher : Anglais * Appliquer les changements * Appliquer à tout le système * Close === Installer SSH et VNC === * Menu démarrer > Outils système > Gestionnaire de paquets Synaptic * Popup "Présentation rapide" * Fermer * Tout mettre à niveau * Rechercher * Saisir : openssh-server * Rechercher * Cocher > Sélectionner pour l'installation * Ajouter à la sélection * Refaire une recherche pour **vino** et pour **x11vnc** * Appliquer * Popup "Appliquer les modification suivantes" * Appliquer * Popup "Les modifications ont été appliquées" * Fermer * Fermer === Créer votre utilisateur (vous) === * Menu démarrer > Outils système > Utilisateurs et groupes * Ajouter et renseigner les différents champs (adapter) : * Nom : mon nom complet * Utilisateur : mon_login * Valider * Popup "Modifier le mot de passe de l'utilisateur" (adapter) : * Nouveau mot de passe : mot_de_passe_super_baleze * Confirmation (retaper) : * Cocher (option) "Ne pas demander de mot de passe à la connexion" * Valider * Gérer les groupes * Sélectionner le groupe sudo * Propriétés * Cocher "vous" dans la liste des membres du groupe * Valider * Fermer * Fermer === Ouverture auto de session === * Menu démarrer > Accessoires > LXTerminal * Saisir les lignes suivantes (adapter mon_login) et les exécuter : ME= sudo sed -i "s/lubuntu/$ME/g" /etc/lightdm/lightdm.conf exit * Menu démarrer > Déconnexion > Redémarrer ==== 2ème démarrage : votre session ==== Vous venez d'ouvrir automatiquement votre session avec succès. Il ne reste plus qu'à supprimer l'utilisateur par défaut de la Live session "lubuntu" et configurer l'accès VNC. Vous pourrez constater, qu'il N'Y A PLUS de raccourci "Installer Lubuntu" sur le bureau === Supprimer l'utilisateur "lubuntu" et son groupe === * Menu démarrer > Accessoires > LXTerminal * Saisir les lignes suivantes telles quelles et les exécuter : LU=lubuntu sudo deluser $LU sudo usermod -g $USER $LU sudo delgroup $LU sudo rm -rf /home/$LU sudo sed -i "s/^$LU/$USER/g" /etc/sudoers.d/casper sudo sed -i "/^$LU:/d" /etc/passwd sudo sed -i "/^$LU:/d" /etc/shadow exit === Configurer VNC === Autoriser l'accès distant : * Menu démarrer > Exécuter et saisir : vino-preferences * Cocher "Autoriser d'autres utilisateurs à voir votre bureau" * Fermer Sécuriser l'échange par VNC : * Menu démarrer > Accessoires > LXTerminal * Saisir les lignes suivantes telles quelles et les exécuter : * x11vnc -storepasswd * Renseigner mot de passe : mot_de_passe_super_baleze * Confirmation (retaper) : * Write password to ... : y * exit Démarrage automatique de VNC : * Menu démarrer > Accessoires > LXTerminal * Saisir les lignes suivantes telles quelles et les exécuter : sudo bash -c "echo x11vnc -rfbauth /home/$USER/.vnc/passwd -forever -repeat -display :0 \& >> /etc/profile" exit * Menu démarrer > Déconnexion > Redémarrer ==== Tests d'accès distant ==== Désormais on peut accéder à distance par SSH : depuis le terminal d'un PC (appelons le PC-CLIENT, exécuter la ligne suivante dans un terminal : ssh @ (ex : ssh lnj@192.168.0.3) Et on peut également accéder avec un client VNC, pour ma part j'ai utilisé Remmina. Il faut configurer la connexion comme ceci (adapter) : * Nom : nom_du_profil (ex : live_pc) * Protocole : "VNC - Virtual Network Computing" * Serveur : 192.168.0.3 (adresse statique du serveur) * Nom d'utilisateur : mon_login * Mot de passe (celui généré par x11vnc -storepasswd) : mot_de_passe_super_baleze * Profondeur de couleur : autre chose que 256 couleurs (sinon ne marche pas) * Se connecter Et voilou :-) ! ===== L.U.C. (Lubuntu USB Creator) ===== ==== Fonctionnement ==== Nous allons voir ici, le fonctionnement interne de votre Live USB. Cette partie optionnelle est longue et technique, mais elle n'est pas complexe. Bonne lecture ! Volontairement, je ne donne pas trop d'explications dans la section qui suit, car je maitrise mal et ça alourdirait. Si vous avez lu le chapitre [[#fonctionnement_d_un_support_bootable|Fonctionnement d'un support bootable]], le début devrait vous sembler limpide. Donc, vous branchez votre support USB et vous démarrez la machine. Le BIOS effectue le POST et détermine le premier support bootable. Et ensuite ? === Boot support === Le BIOS va exécuter la routine_MBR (construite par la commande **parted /dev/ mklabel -s "msdos"**), qui à son tour va exécuter la routine_VBR (construite par la commande **syslinux /dev/**), qui va exécuter le boot loader (fichier **/ldlinux.sys** créé par la commande syslinux précédente). === Le bootloader syslinux === A ce stade, syslinux ce n'est qu'un simple prompt (c.a.d. un curseur qui clignote sur fond noir :-) ) qui attend que vous saisissiez quelque chose, avant d'appuyer sur la touche Entrée. En réalité, il attend que vous lui fournissiez un **kernel**. Vous pourriez simplement taper manuellement (sur un clavier QWERTY of course ;-) ) :\\ /casper/vmlinuz /casper/initrd.lz Et ça marcherait (explication plus bas) ! Fort heureusement, **/syslinux.sys** est accompagné d'un fichier **/syslinux/syslinux.cfg** qui automatise son fonctionnement. Donc, **/syslinux.sys** va [[http://www.syslinux.org/wiki/index.php/SYSLINUX#How_do_I_Configure_SYSLINUX.3F|lire]] **/syslinux/syslinux.cfg**, en déduire et exécuter **/casper/vmlinuz /casper/initrd.lz** suivi des autres joyeusetés, telles que désactiver le network-manager pour le remplacer par ifup, indiquer la persistance, booter silencieusement (écran splash à l'appui), etc. Que sont ces fichiers du dossier **/casper** : * **/casper/vmlinuz** : **kernel** de linux au format compressé (d'où le "z" au lieu du "x"), c'est à dire le noyau de linux, par défaut sans interractions extérieures possibles et qui sera chargé en mémoire vive. * **/casper/initrd.lz** : ([[http://en.wikipedia.org/wiki/Initrd|initial ramdisk]]) ajoute une sorte de mini système d'exploitation (compressé et lui aussi en mémoire vive) qui permettra, entre autre, d'interagir sur le kernel, de lui ajouter des pilotes et des fonctionnalités, mais aussi, il permettra de dialoguer avec l'utilisateur. Pour s'en convaincre, si le chargement du système échoue après l'exécution du boot loader **/syslinux.sys**, on se retrouve avec une ligne de commande (initramfs) avec un shell qui prend en compte les commandes busybox ([[http://fr.wikipedia.org/wiki/BusyBox|wiki]]). Maintenant que le mini-système et ses pilotes sont en mémoire, l'installation Live commence... === 1er démarrage système === Ne maitrisant pas du tout le processus de boot du système Live, je préfère m'abstenir de dire des bêtises et sauter directement à la phase suivante Notre système de fichier est monté. L'étape suivante c'est l'exécution automatique de **/etc/profile** (point d'entrée sous notre contrôle - voir [[#synoptique_et_role_des_fichiers|synoptique]]), qui va exécuter un script externe au système **/cdrom/scripts/runme1st_from_ext.sh** (externe, car il se trouve sur la première partition du Live USB). Cette étape va s'effectuer APRES l'ouverture de la Live session, lorsque le bureau sera affiché, pour avoir une interaction avec l'utilisateur final (vous). Ce dernier pourra alors suivre les opérations en cours dans un terminal. Si on ne lui montre pas, il aura l'impression que le démarrage dure (c'est tordu, mais ça marche :D !) Remarque importante : Pour arriver à créer ce point d'entrée, on a extrait le contenu du fichier **/casper/filesystem.squashfs** (système d'exploitation au format compressé [[http://fr.wikipedia.org/wiki/SquashFS|SQUASHFS]] en lecture seule), on en a modifié le fichier **/etc/profile** et on a reconstruit **/casper/filesystem.squashfs**. La modification ayant inséré dans **/etc/profile** une unique instruction qui dit tout simplement : exécute le fichier externe **/cdrom/scripts/runme1st_from_ext.sh** (voir [[#synoptique_et_role_des_fichiers|synoptique]]) Ce script externe va supprimer son propre déclencheur dans **/etc/profile** (pour éviter qu'il soit exécuté à chaque démarrage) et réaliser la première phase de post-installation. Cette première phase va permettre d'installer le système aux petits oignons : sa configuration réseau, ses outils, ses réglages, l'utilisateur final (vous), l'accès distant et dernière étape, la création du script **/home/runmelast.sh** avec son déclencheur ajouté dans **/etc/rc.local**. **/home/runmelast.sh** sera exécuté après redémarrage. Cette première phase s'achève avec le redémarrage de la machine. === 2ème démarrage système === La deuxième phase de post-installation démarre avec l'exécution automatique du script **/etc/rc.local** qui exécute à son tour **/home/runmelast.sh**. **/home/runmelast.sh** va supprimer : l'utilisateur de la Live session qui n'est plus utile et qui a un mot de passe vide (on ne pouvait pas le faire avant car on était sur sa propre session, donc impossible de se supprimer soi-même), son déclencheur dans **/etc/rc.local**, lui-même. Et voilou ! ==== Synoptique et rôle des fichiers ==== Synoptique de LUC : {{:tutoriel:luc_synoptic.png?direct|}} Rôle des fichiers : * luc : dossier projet * luc/iso : montage du fichier ISO * luc/iso/casper/filesystem.squashfs : le filesystem du Live CD au format squashfs * luc/liveusb : dossier montage du support USB * luc/liveusb/casper/filesystem.squashfs : le filesystem du Live USB au format squashfs RO * luc/liveusb/casper/vmlinuz : le kernel linux compressé qui sera chargé en mémoire * luc/liveusb/casper/initrd.lz : sorte de mini-OS chargé en mémoire, qui interface kernel + utilisateur * luc/liveusb/idlinux.sys : bootloader qui rend le support bootable (généré par syslinux) * luc/liveusb/scripts : scripts externes au live USB (accessible depuis **/cdrom** du Live USB) * luc/liveusb/scripts/reset.sh : réinitialise tout comme au premier boot (donnée persistantes de **casper-rw perdues**) * luc/liveusb/scripts/runme1st_from_ext.sh : script auto-déclenché au premier boot du Live USB par le point d'entrée **/etc/profile** * luc/liveusb/syslinux/gfxboot.c32 : fichier remplacé par celui de PC-BUILDER * luc/liveusb/syslinux/syslinux.cfg : configuration de boot du Live USB * luc/squashfs : dossier montage de **luc/filesystem.squashfs** * luc/custom-squashfs : dossier RW sur une copie du contenu de **luc/iso/casper/filesystem.squashfs**, on ajoute uniquement le point d'entrée dans **/etc/profile** vers **/cdrom/scripts/runme1st.sh** * luc/filesystem.squashfs : copie en RW de **luc/iso/casper/filesystem.squashfs** en RO Nota : RW (Lecture / Ecriture), RO (Lecture seule) ==== Mode d'emploi ==== Pour automatiser la gestion du réseau, je n'ai pas eu d'autre choix, que de me passer du Network Manager qui n'est pas configurable en ligne de commande sous Ubuntu. La version nmcli ne permet pas le paramétrage sous Ubuntu (apparemment sous les autres distributions ça marche). Je ne le désinstalle pas, il est seulement "caché" par le paramètre **ip=frommedia** de **/syslinux/syslinux.cfg**. Supprimer le paramètre et redémarrer permettra d'utiliser à nouveau le Network Manager. Copier le contenu du [[#le_code|script OneTouch]] et le coller dans le fichier **luc_onetouch_install.sh** Donnez vous les droits d'exécution :\\ chmod u+x luc_onetouch_install.sh Déterminer le support que vous allez utiliser :\\ lsblk -o NAME,TYPE,FSTYPE,LABEL,SIZE,MOUNTPOINT === Configurer paramètres fonctionnels (ou laisser les valeurs par défaut) === * **DEV** : c'est un support entier choisi et non une partition (ex : DEV=/dev/sde) * **ISO** : chemin absolu du fichier ISO de Lubuntu (ex : ISO='/ISO/lubuntu-14.10-desktop-i386.iso' * **ME** : c'est ... vous, le nom de login de votre utilisateur (ex : ME=lnj) * **ME_FULL** : c'est encore vous mais avec le nom long (ex : ME_FULL='Le nain jaune') * **NET_ADDRESS** : adresse IP statique donnée au PC-LIVE (ex : NET_ADDRESS=192.168.0.3) * **NET_NETMASK** : masque réseau du réseau de PC-LIVE (ex : NET_NETMASK=255.255.255.0) * **NET_GATEWAY** : la passerelle du réseau de PC-LIVE (ex : NET_GATEWAY=192.168.0.254) * **NET_DNS** : un serveur DNS accessible par le PC-LIVE (ex : NET_DNS=8.8.8.8) === Configurer les paramètres pré-configurés (ou laisser les valeurs par défaut) === Remarque : pour plus de détails, voir le [[#le_code|script OneTouch]] * **USB_LABEL** : le nom de la partition 1 de votre Live USB (ex : USB_LABEL=L_LUBUNTU) * **USB_PART1_SIZE** : la taille de la partition 1 (ex : USB_PART1_SIZE=1G) * **USB_PART2_SIZE** : la taille de la partition 2 (ex : USB_PART2_SIZE=100%) * **LIVE_USB_BOOT_MESSAGE** : Message de bienvenue lors du démarrage (ex: LIVE_USB_BOOT_MESSAGE='Lubuntu USB Live Persistant' * **LIVE_USB_BOOT_QUIET** : indique si le démarrage est verbeux / silencieux (0/1) (ex : LIVE_USB_BOOT_QUIET=1) * **ME_DEFAULT_PASSWORD** : mon mot de passe en clair pour l'installation ; à changer dès l'ouverture de session (ex : ME_DEFAULT_PASSWORD=lubuntu) * **EMBED_PACKETS** : liste des logiciels qui seront installés (SSH sera automatiquement ajouté) (ex : EMBED_PACKETS=' ') * **EMBED_VNC** : indique si VNC sera non installé / installé (0/1) (ex : EMBED_VNC=1) * **UPDATE_OS** : indique si on occulte / fait la MAJ OS (0/1) (ex : UPDATE_OS=1) * **INSTALL_APP_LANG** : indique si on occulte / installe le support de langues pour les applications (0/1) (ex : INSTALL_APP_LANG=1) === Installer le support === Exécuter :\\ sudo ./luc_onetouch_install.sh === Utiliser la configuration rapide === Exécuter :\\ sudo ./luc_onetouch_install.sh DEV ISO * **DEV** est un support entier et est nécessairement le 1er paramètre * **ISO** (optionnel) est le chemin de l'ISO et est nécessairement le 2ème paramètre Cette configuration rapide permet de ne pas modifier le script pour ces paramètres. === Modifier vos mots de passe === Une fois le Live USB démarré et opérationnel, n'oubliez pas de modifier sur le PC-LIVE : * Mot de passe de session : passwd * Mot de passe de VNC (si vous l'avez installé) : x11vnc -storepasswd === Les outils === Des alias ont été ajoutés au profil de l'utilisateur final (vous) dans le fichier **~/.bahsrc** ; ils ciblent des fichier du dossier externe **/cdrom**. Les outils : * luc_edit_runme1st : édite le script **/cdrom/scripts/runme1st_from_ext.sh** * luc_edit_syslinux : édite la configuration **/cdrom/syslinux/syslinux.cfg** * luc_reset : (attention : contenu de la persistance perdu) réinitialise la partition **casper-rw** (**/cdrom/scripts/reset.sh**) ; redémarrage nécessaire avec le mot de passe configuré dans **ME_DEFAULT_PASSWORD** ==== Le code ==== Si vous avez des commentaires, remarqué des erreurs ou adapté le script à d'autres distributions, n'hésitez pas à faire un retour sur le [[http://forum.ubuntu-fr.org/viewtopic.php?pid=19673001#p19673001|forum]]. Le script luc_onetouch_install.sh (n'oubliez pas de [[#mode_d_emploi|configurer]]) #!/bin/bash # LUBUNTU USB CREATOR aka LUC (run as sudo only) # Up to date version : https://doc.ubuntu-fr.org/tutoriel/lubuntu_usb_creator # v1.4 lnj 22/04/2015 # USAGE : luc_onetouch_install.sh [DEV [ISO]] # Where optional DEV is device disk (not a partition) and optional ISO an ISO file. # Supported versions : https://doc.ubuntu-fr.org/tutoriel/lubuntu_usb_creator?do=edit&rev=0#plateformes_supportees # History : # - v1.4 lnj 22/04/2015 : adding needed dependency # - v1.3 lnj 15/04/2015 : adding needed dependency squashfs-tools # - v1.2 lnj 12/04/2015 # Different links which help me : # http://askubuntu.com/questions/397481/how-to-make-a-persistent-live-ubuntu-usb-with-more-than-4gb # http://david.hautbois.free.fr/wordpress/index.php/175-how-to-customize-your-ubuntu-live-usb-stick # http://day-to-day-stuff.blogspot.fr/2011/03/on-making-custom-ubuntu-bootable-usb.html # more - boot process : https://wiki.archlinux.org/index.php/syslinux # http://doc.ubuntu-fr.org/tutoriel/live_usb_install4 # http://www.linux.com/community/blogs/133-general-linux/420179-creating-a-debian-live-usb-flash-drive-with-persistence-for-non-techies # https://help.ubuntu.com/community/USB%20Installation%20Media) ################################## CHOOSE HDD ##################################### # to retrieve parts and disks : http://www.labtestproject.com/using_linux/partition_hard_disk_using_fdisk_command_on_linux_fedora_system # lsblk -o NAME,TYPE,FSTYPE,LABEL,SIZE,MOUNTPOINT ################################ STATIC SETTINGS ################################## # ------------------------------- FUNCTIONAL -------------------------------------- # DEV : the DEV disk used to install Live USB (not part) ; can be given from $1 arg # See lsblk command above to determine the target disk # !!! Warning: DEV data will be permanently deleted (no possible return ) !!! # ISO : ISO file location (only absolute paths is possible) ; i.e. '/ISO/tux.iso' # ME : my short name user # ME_FULL : my full name user # NET_ADDRESS : static IP address wanted in my network # !!! Becareful : possible IP conflict with other PC, especially DHCP scope !!! # NET_NETMASK : my network mask # NET_GATEWAY : the accessible gateway (i.e. to join the Internet) # NET_DNS : an accessible DNS server to allow internet browsing and apt-get jobs too DEV=/dev/sde # !!! Warning: DEV data will be permanently deleted (no possible return ) !!! ISO='/ISO/lubuntu-14.10-desktop-i386.iso' ME=user ME_FULL='User' NET_ADDRESS=192.168.0.3 NET_NETMASK=255.255.255.0 NET_GATEWAY=192.168.0.254 NET_DNS=8.8.8.8 # ------------------------------- PRE-CONFIGURED ----------------------------------- # USB_LABEL : partition 1 label [default : L_LUBUNTU (Live LUBUNTU)] # USB_PART1_SIZE : size for the partition 1 # [recommended : USB_PART1_SIZE=1G - for 1 GB, see man parted search unit] # USB_PART2_SIZE : size for the partition 2 # [recommended : USB_PART2_SIZE=100% - for all the remaining space] # If we want a 3rd part or more, not give 100% or specify in absolute size # for example 10GB (see man parted and search unit) # LIVE_USB_BOOT_MESSAGE : welcome boot message [dft : 'Lubuntu USB Live Persistant'] # LIVE_USB_BOOT_QUIET : 0/1 (0 => verbose/no splash, 1 => quiet with splash) # [default : 1] # ME_DEFAULT_PASSWORD : my simple default password (change it for first logon) # !!! Becareful : password in clear, so give a temp simple password !!! # [default : lubuntu] # EMBED_PACKETS : list of packets automatically installed at 1st boot # separate all packets by a space # i.e. EMBED_PACKETS='htop vim' # [default : ''] # Nota : ssh is later included by default # EMBED_VNC : 0/1 embed VNC for remote desktop (0 => no, 1 => yes) # http://adept1formatique.unblog.fr/2013/08/12/bureau-a-distance-avec-lubuntu/ # [default : 1] # UPDATE_OS : 0/1 update OS (take a while) (0 => no, 1 => yes) # [default : 1] # INSTALL_APP_LANG : 0/1 install language for apps (take a while) (0 => no, 1 => yes) # [default : 1] USB_LABEL=L_LUBUNTU USB_PART1_SIZE=1G USB_PART2_SIZE=100% LIVE_USB_BOOT_MESSAGE='Lubuntu USB Live Persistant' LIVE_USB_BOOT_QUIET=1 ME_DEFAULT_PASSWORD=lubuntu # !!! Becareful : password in clear, so give a temp simple password !!! EMBED_PACKETS='' EMBED_VNC=1 UPDATE_OS=1 INSTALL_APP_LANG=1 # ---------------------------------------------------------------------- # For future version # # DEFAULT_LIVE_USB_USER : default live session user # NETWORK_MANAGER_ACTIVE : 0/1 indicate how to manage network (0 => ifup, 1 => NM) # [default : 0] # LOCALE : embed locale for keyboard, live session boot and other stuff # [default : FR so 'locale=fr_FR.UTF-8 console-setup/layoutcode=fr' # LANGUAGE_SUPPORT : make apps language with the right language support # [default : fr] # DATE_TIME_ZONE : synchro Time Zone (http://askubuntu.com/a/594186) # [default : Europe/Paris] # WAITING_REBOOT_TITLE : title to display in the terminal before reboot # [default : 'Patienter avant le redémarrage...'] DEFAULT_LIVE_USB_USER=lubuntu NETWORK_MANAGER_ACTIVE=0 LOCALE='locale=fr_FR.UTF-8 console-setup/layoutcode=fr' LANGUAGE_SUPPORT=fr DATE_TIME_ZONE=Europe/Paris WAITING_REBOOT_TITLE='Patienter avant le redémarrage...' # Embed ssh to install EMBED_PACKETS="ssh $EMBED_PACKETS" # Embed VNC to install if [ $EMBED_VNC -eq 1 ] ; then EMBED_PACKETS="$EMBED_PACKETS vino x11vnc" fi # Quiet or not if [ $LIVE_USB_BOOT_QUIET -eq 1 ] ; then LIVE_USB_BOOT_QUIET='quiet splash' else LIVE_USB_BOOT_QUIET= fi # Manage network with NM or ifup if [ $NETWORK_MANAGER_ACTIVE -eq 1 ] ; then NETWORK_MANAGER_ACTIVE= else NETWORK_MANAGER_ACTIVE='ip=frommedia' fi # Define customized colors : http://stackoverflow.com/a/5947802 C_red='\033[1;31m' C_blue='\033[0;34m' C_green='\033[0;32m' C_yellow='\033[1;33m' C_NC='\033[0m' # Echoing all steps (usage : echof "..." [color]) # a=( "$@" ) ... ${a[1]} because ${$2} does not work (args to array) # http://stackoverflow.com/a/18041780 + http://stackoverflow.com/a/12711837 function echof () { if [ "$2" ] ; then a=( "$@" ) ; echo -e "\n${a[1]}=> $1${C_NC}\n" ; else echo -e "\n${C_yellow}=> $1${C_NC}\n" ; fi } ############################## PROTECT DATA ############################# LUC_MNT=~/tmp/mnt # If we give arg1 it will become DEV if [ "$1" ] ; then DEV=$1 fi # If we give arg2 it will become ISO if [ "$2" ] ; then ISO="$2" fi # Get DISK part of DEV, so /dev/sde gives sde DISK=`echo $DEV |sed "s/.*\/\([a-z]*\)$/\1/"` # If DEV is not a real device disk IS_DISK=`lsblk -o NAME,TYPE,FSTYPE,LABEL,SIZE,MOUNTPOINT |grep ^$DISK` if [ ! "$IS_DISK" ] ; then echo "Error : $DEV is not a valid disk !" exit 1 fi # If ISO file does not exist if [ ! -f "$ISO" ] ; then echo "Error : $ISO ISO file does not exist !" exit 2 fi # Infos about selected device echo -e "\n${C_yellow}Block device of ${C_blue}$DEV${C_NC} :" RES=`lsblk -o NAME,TYPE,FSTYPE,LABEL,SIZE,MOUNTPOINT |sed "1p;/$DISK/!d"` echo -e "${C_green}$RES${C_NC}" mkdir -p $LUC_MNT # For each partition we display the partial content for X in `echo $DEV`* do if [ $X != $DEV ] ; then echo -e "\n${C_yellow}Partial content of ${C_blue}$X${C_NC} :" if [ "`mount |grep $X`" ] ; then FOLDER=`mount |grep $X |cut -f 3 -d " "` CONTENT=`ls -alF $FOLDER | head` else mount $X $LUC_MNT CONTENT=`ls -alF $LUC_MNT | head` umount -l $LUC_MNT fi echo -e "$CONTENT" fi done rmdir $LUC_MNT # Confirm or not : http://stackoverflow.com/a/1885534 MSG="\n${C_red}You are about destroying all data from ${C_blue}$DEV${C_red}" echo -e "$MSG (no return is possible) !${C_NC}" read -p "Are you sure (y/[N]) ? " -r echo if [[ ! $REPLY =~ ^[y]$ ]] then exit 0 fi # do dangerous stuff #echo Destroy en cours... ################################ PREPARE ################################ # LUC paths LUC_PATH=~/luc LUC_LIVEUSB_PATH=~/luc/liveusb LUC_ISO_PATH=~/luc/iso LUC_SQUASHFS_PATH=~/luc/squashfs LUC_CUSTOM_SQUASHFS_PATH=~/luc/custom-squashfs # Scripts and other stuff paths SCRIPTS_PATH=$LUC_LIVEUSB_PATH/scripts RUNME1ST_ROOT_PATH=scripts/runme1st_from_ext.sh RUNME1ST_EXT_PATH=/cdrom/$RUNME1ST_ROOT_PATH SYSLINUX_EXT_PATH=/cdrom/syslinux/syslinux.cfg RESET_ROOT_PATH=scripts/reset.sh RESET_EXT_PATH=/cdrom/$RESET_ROOT_PATH RUNMELAST_PATH=/home/runmelast.sh # Escaped string path RUNME1ST_EXT_PATH_ESC=${RUNME1ST_EXT_PATH//\//\\\/} RUNMELAST_PATH_ESC=${RUNMELAST_PATH//\//\\\/} # debug : Start / End / exit to let start here and move end and exit #:< Download dependencies" apt-get install -y syslinux mtools parted squashfs-tools echof "PREPARE > Unmount all" umount $DEV* umount $LUC_ISO_PATH umount $LUC_LIVEUSB_PATH umount $LUC_SQUASHFS_PATH rm -rf $LUC_PATH echof "PREPARE > MBR + partitions" # man parted : http://linux.die.net/man/8/parted # sample : http://stackoverflow.com/questions/10519486/valid-arguments-for-parted # 100% remaining space http://forums.gentoo.org/viewtopic-t-586478-start-0.html echof "PREPARE > MBR MS-DOS (force to change)" parted "$DEV" mklabel -s "msdos" msg="PREPARE > part1 FAT32, $USB_PART1_SIZE, format FAT32, label $USB_LABEL," echof "$msg flag boot + lba" parted -a cylinder "$DEV" mkpart primary fat32 1 $USB_PART1_SIZE mkfs.vfat -n "$USB_LABEL" -I "$DEV"1 -F 32 parted "$DEV" set 1 boot on parted "$DEV" set 1 lba on msg="PREPARE > part2 EXT4, $USB_PART2_SIZE remaining space, format EXT4," echof "$msg label 'casper-rw'" parted -a cylinder "$DEV" mkpart primary ext4 $USB_PART1_SIZE $USB_PART2_SIZE mkfs.ext4 -L 'casper-rw' "$DEV"2 echof "PREPARE > Live USB Building" echof "PREPARE > Live USB Building > Prepare working dir skeleton" rm -rf $LUC_PATH mkdir $LUC_PATH mkdir $LUC_LIVEUSB_PATH mkdir $LUC_ISO_PATH mkdir $LUC_SQUASHFS_PATH mkdir $LUC_CUSTOM_SQUASHFS_PATH echof "PREPARE > Live USB Building > Mount of USB device" mount "$DEV"1 $LUC_LIVEUSB_PATH echof "PREPARE > Live USB Building > Mount of ISO file" mount -o loop $ISO $LUC_ISO_PATH echof "PREPARE > Live USB Building > Copy all file from ISO" # 2 errors of symlink will occur, because we can not copy symlink in FAT32 FS rsync -aPv --exclude 'filesystem.squashfs' $LUC_ISO_PATH/ $LUC_LIVEUSB_PATH/ echof "PREPARE > Live USB Building > Copy of squashfs filesystem" rsync -aPv $LUC_ISO_PATH/casper/filesystem.squashfs $LUC_PATH/ # Rename isolinux folder is mandatory because SYSLINUX searches in /syslinux folder (http://www.syslinux.org/wiki/index.php/SYSLINUX#How_do_I_Configure_SYSLINUX.3F) mv $LUC_LIVEUSB_PATH/isolinux/ $LUC_LIVEUSB_PATH/syslinux echof "PREPARE > Live USB Building > Create boot configuration" cat > "$LUC_LIVEUSB_PATH/syslinux/syslinux.cfg" < Live USB Building > Make `echo $DEV`1 bootable" # We must use gfxboot.c32 file's host (https://bugs.launchpad.net/ubuntu/+source/usb-creator/+bug/1325801/comments/11) rsync -aPv /usr/lib/syslinux/gfxboot.c32 $LUC_LIVEUSB_PATH/syslinux/ # Last step to make the USB bootable (`syslinux -i dev` run too) syslinux "$DEV"1 ################################ CUSTOMIZE ################################ echof "=== CUSTOMIZE LIVE USB ===" echof "CUSTOMIZE > Extract SQUASHFS filesystem" mount -t squashfs -o loop $LUC_PATH/filesystem.squashfs $LUC_SQUASHFS_PATH rsync -aPv $LUC_SQUASHFS_PATH/ $LUC_CUSTOM_SQUASHFS_PATH/ echof "CUSTOMIZE > Adding auto-trigger script on reboot" # Entry point to execute an external script and following the execution in a terminal echo sudo lxterminal -t "'"$WAITING_REBOOT_TITLE"'" \ -e "bash -c \"$RUNME1ST_EXT_PATH\" &" \ >> $LUC_CUSTOM_SQUASHFS_PATH/etc/profile # Folder in which we are storing external scripts of live system mkdir $SCRIPTS_PATH echof "CUSTOMIZE > Building off auto triggered script" bash -c "cat > $LUC_LIVEUSB_PATH/$RUNME1ST_ROOT_PATH" < /etc/network/interfaces" <> /home/$ME/.profile" <> /home/$ME/.bashrc" < $RUNMELAST_PATH" < Building of 'reset all' script" bash -c "cat > $LUC_LIVEUSB_PATH/$RESET_ROOT_PATH" < Restore SQUASHFS filesystem" mksquashfs $LUC_CUSTOM_SQUASHFS_PATH \ $LUC_LIVEUSB_PATH/casper/filesystem.squashfs -info ################################ FINALIZE ################################ echof "=== FINALIZE LIVE USB ===" echof "FINALIZE > Unmount and cleaning" umount $LUC_SQUASHFS_PATH umount $LUC_LIVEUSB_PATH umount $LUC_ISO_PATH rm -rf $LUC_PATH echof "~~~ SUCCESS ! YOUR LIVE USB IS READY TO RUN ! ~~~" $C_green unset -f echof ===== Mini How-To ===== ==== Avant l'installation ==== Dans le script OneTouch, si je veux : * Changer la taille des partitions : voir les paramètres pré-configurés **USB_PART*_SIZE** * Ajouter d'autres partitions : ne pas donner 100% de la taille restante à **USB_PART2_SIZE** et utiliser un outil de partition tel GParted * Ajouter automatiquement des nouveaux logiciels : voir le paramètre pré-configuré **EMBED_PACKETS** et séparer les packets par une espace * Avoir tous les messages au démarrage : voir le paramètre pré-configuré **LIVE_USB_BOOT_QUIET** ==== Après l'installation ==== Si je veux : * Avoir ou pas tous les messages au démarrage : supprimer / ajouter les paramètres "quiet splash" dans le fichier **{/cdrom|}/syslinux/syslinux.cfg** (selon si le Live USB est démarré ou non) ; (re)démarrer pour prendre en compte. * Utiliser ou pas le Network Manager au lieu de ifup : supprimer / ajouter le paramètre **"ip=frommedia"** dans le fichier **{/cdrom|}/syslinux/syslinux.cfg** (selon si le Live USB est démarré ou non) ; (re)démarrer pour prendre en compte. * Modifier le script d'installation du PC-LIVE : modifier le fichier **{/cdrom|}/scripts/runme1st_from_ext.sh** (selon si le Live USB est démarré ou non) ; ne pas oublier de réinitialiser (par défaut le script n'est plus déclenché après la première installation) et à (re)démarrer. * Réinitialiser (attention : contenu de la persistance perdu) : Live USB éteint il suffit de monter et de supprimer le contenu de la partition **casper-rw**, si le Live USB est démarré et a été construit avec L.U.C., il suffit d'exécuter le script **sudo /cdrom/scripts/reset.sh** (redémarrage nécessaire avec le mot de passe configuré dans **ME_DEFAULT_PASSWORD**) ===== Les autres OS ? ===== ==== Live USB 64 bits ==== Je n'ai pas pu installer un Lubuntu 64 bits car je n'ai pas de processeur 64 bits à disposition. Si quelqu'un le teste, ce serait bien qu'il fasse un retour ! ==== Live USB autres distros ==== Donc, là je n'ai testé que Lubuntu. Il faudra vérifier / adapter les scripts runme1st_from_ext.sh et reset.sh qui sont dédiés à Lubuntu. ==== PC-BUILDER autre que Ubuntu ==== Si PC-BUILDER n'est par Debian like, je pense qu'il faudra tout adapter. En particulier, toutes les commandes apt-get. ==== PC-BUILDER sous Windows ==== Alors là tout est à faire :-D, mais peut être qu'en Power Shell ce n'est pas si compliqué et ça permettrait de tout scripter. * Créer une clé bootable avec système Live Linux ([[http://forum.ubuntu-fr.org/viewtopic.php?id=270322|exemple]]) * Gestion MBR et partitions par script ([[http://blogs.msdn.com/b/san/archive/2012/07/03/managing-storage-with-windows-powershell-on-windows-server-2012.aspx|point d'entrée]]) Par contre pour les fonctionnalités squashfs, je ne suis pas sûr qu'un Windows puisse (peut être avec émulation) Bref ! A voir ! ===== TODO ===== ==== Où vais-je ? ==== Je suis à 99 % satisfait du résultat. Seul un (tout ch'ti) petit bémol : ce n'est pas pratique de trimbaler un HDD externe (je pense à l'utilisation dans le train par exemple). Donc ce problème reste à résoudre (en même temps c'était un peu l'objectif du post ;-) ). J'ai deux pistes : * les clés USB avec technologie SSD (très onéreuses 8-o ) * les clés USB standard avec gestions différentes (comme par exemple [[http://www.wefightcensorship.org/fr/article/tails-systeme-dexploitation-live-taille-lanonymathtml.html|tails]]) ==== Pistes à suivre (ou pas :) ) ? ==== * Résoudre les problèmes connus * Etudier le processus de boot du système Live ou système normal * Comprendre pourquoi il faut copier gfxboot.c32 de PC-BUILDER * Epurer tous les fichiers dont on n'a pas besoin pour le boot, pour créér un système minimal * Que se passe-t-il lors d'une mise à jour du système ? Du noyau ? * Gestion des disques avec GPT (pour UEFI) * Historiser tous les affichages en plus de l'écran pendant la construction du Live USB * Gérer la wifi par script * Modifier filesystem.squashfs de manière à lui intégrer les applis et autres AVANT le 1er démarrage (chroot sur le système) : pas forcément pertinent car 1) la taille de partition 1 va grossir et donc il faudra le gérer, 2) on peut modifier in situ le script runme1st_from_ext.sh (on a déjà la rolls quoi !) * Multi boot ? ===== Problèmes connus ===== * A l'ouverture de session par SSH, la sortie standard de VNC (stdout) est redirigée vers le terminal * Si on enlève la prise en charge ifup dans /syslinux/syslinux.cfg, la remettre ne réactivera par ifup et ce sera toujours le Network Manager qui aura le contrôle (à corriger) * Parfois sous Lubuntu, le bouton power n'ouvre pas la fenêtre pour éteindre / redémarrer / fermer la session ===== Le mot de la fin ===== Je tiens à remercier les nombreuses personnes qui n'ont pas hésité à passer du temps pour nous transmettre leur travail, leur passion, leurs tests, leurs découvertes, leur savoir. Je référence une partie de ces personnes en indiquant le lien source. Enfin, je remercie tout particulièrement [[http://poloastucien.free.fr/mbr_fat_secteurs_boot_h.html|Polo Astucien]] pour son étude très précise sur les mécanismes de boot d'un support. J'ai découvert que le boot est un monde en soi. Comme le disait un de mes anciens profs : "En informatique, on ouvre une porte et il y en a dix autres à explorer..." Toute cette documentation a été élaborée en à partir de l'outil d'aperçu de https://doc.ubuntu-fr.org. Voilou, merci de m'avoir lu et j'espère que mon travail vous sera utile. ===== Historique ===== * v_1_2 (22/04/15) : * modifications mineures * v_1_1 (17/04/15) : * modifications mineures, * test actualisé Ubuntu 14.04 LTS 64 bits, * ajout de la rubrique "Systèmes supportés" * v_1_0 (14/04/15) : début de l'aventure ;-) ---- //Contributeurs principaux : [[:utilisateurs:lenainjaune|lenainjaune]].// Version : 1.2 Date de version : 22/04/15