Apportez votre aide…
Lubuntu USB Creator
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 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.
Pré-requis
Pour mettre tout ça en place, vous aurez besoins des éléments suivants :
- Disposer des droits d'administration.
- Disposer d'une connexion à Internet configurée et activée.
- Le fichier ISO de la distribution Lubuntu pour architecture 32 bits (voir les 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 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) ; pour ceux qui n'ont pas un tel matériel une simple clé USB de 2 GB mini fera l'affaire pour tester.
- 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 ^^ )
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 |
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 ).
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 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)
Fonctionnement d'un support bootable
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 (source) :
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 (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. (wiki). Par héritage, pour adapter aux supports autres que le disque dur, on dira que le MBR ce sont les 512 premiers octets de n'importe quel support bootable.
Nota :
fdisk -l /dev/<device>
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 (wiki) pour distinguer un support bootable d'un autre (sources)
On peut visualiser le contenu hexadécimal/ASCII d'un MBR grâce à la commande hexdump ou hd
hd /dev/<device> -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 (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 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) - (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.
Q : Que contient un secteur de boot d'une partition étendue ?
R : Même type de structure qu'un MBR (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 (wiki)
Nota : la taille d'un VBR dépend du FS sous-jacent (FAT32 : 32 secteurs, NTFS : 16 secteurs - 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 (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/<device><num_part> -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 (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 OEM ID (en gros qui a créé le VBR) : ici on voit que c'est SYSLINUX
- Le bloc suivant concerne le BPB (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 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 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 script OneTouch, je suis bien évidemment passé par la phase "installation à la mano".
Préparation
Pour créer le support avec une persistance dans une partition /casper-rw, j'ai suivi ce lien qui utilise l'outil "Créer un disque de démarrage" et GParted (Installez les paquets 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 (Ouvrez le fichier <racine_support_usb>/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 <racine_support_usb>/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).
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=<mon_login> 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.
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 <mon_login>@<ip_PC-LIVE>
(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.
Si vous avez lu le chapitre 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/<device> mklabel -s "msdos"), qui à son tour va exécuter la routine_VBR (construite par la commande syslinux /dev/<device>), 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 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 : (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 (wiki).
Maintenant que le mini-système et ses pilotes sont en mémoire, l'installation Live commence…
1er démarrage système
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), 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 <racine_live_usb>/casper/filesystem.squashfs (système d'exploitation au format compressé SQUASHFS en lecture seule), on en a modifié le fichier <racine_contenu>/etc/profile et on a reconstruit <racine_live_usb>/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)
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 :
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
Copier le contenu du 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 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
Le script luc_onetouch_install.sh (n'oubliez pas de configurer)
- luc_onetouch_install.sh
#!/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 #:<<COM #COM #exit echof "=== PREPARE LIVE USB ===" echof "PREPARE > 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" <<EOT DEFAULT live LABEL live SAY $LIVE_USB_BOOT_MESSAGE KERNEL /casper/vmlinuz ## casper config : http://manpages.ubuntu.com/manpages/trusty/man7/casper.7.html ## - NETWORK_MANAGER_ACTIVE : indicate whether NM or ifup is used to manage network ## [default : ip=frommedia] ## - persistent : make persistent the "casper-rw" partition ## - LIVE_USB_BOOT_QUIET : display or not Lubuntu splash no verbose ## [default : quiet splash] ## - LOCALE : embed locale for keyboard, live session boot and other stuff ## [locale=fr_FR.UTF-8 console-setup/layoutcode=fr] APPEND noprompt $NETWORK_MANAGER_ACTIVE \ persistent boot=casper initrd=/casper/initrd.lz \ $LIVE_USB_BOOT_QUIET $LOCALE EOT # Files not used rm $LUC_LIVEUSB_PATH/syslinux/isolinux.cfg echof "PREPARE > 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" <<EOF1 #!/bin/bash ## Hint : alter this file in Live USB context only ## PRE-CONFIGURED SWITCH VARS FROM PARENT EMBED_VNC=$EMBED_VNC UPDATE_OS=$UPDATE_OS INSTALL_APP_LANG=$INSTALL_APP_LANG ## Modifying network configuration, auto-start in boot and apply changes ## nota : due to Network Manager removing, network will not auto-start bash -c "cat > /etc/network/interfaces" <<EOF1_1 auto lo iface lo inet loopback iface eth0 inet static address $NET_ADDRESS netmask $NET_NETMASK gateway $NET_GATEWAY dns-nameservers $NET_DNS EOF1_1 sed -i ":a;N;s/\nexit 0/\n# Start network\nifup eth0\n&/;Ta" /etc/rc.local ifdown eth0 ifup eth0 # Update is asked if [ \$UPDATE_OS -eq 1 ] ; then apt-get -y update fi ## Install SSH and other asked packets apt-get -y install $EMBED_PACKETS ## All apps with LANGUAGE_SUPPORT is asked ## http://askubuntu.com/questions/149876/how-can-i-install-one-language-by-command-line if [ \$INSTALL_APP_LANG -eq 1 ] ; then apt-get -y install \`check-language-support -l $LANGUAGE_SUPPORT\` fi ## Date & Time Zone timedatectl set-timezone $DATE_TIME_ZONE ## Add ME, join SUDOERS, AUTO LOGON and set DEFAULT PASSWORD addgroup $ME adduser --ingroup $ME --home /home/$ME --disabled-password -gecos "$ME_FULL" $ME adduser $ME sudo ## Auto-logon : http://doc.ubuntu-fr.org/lightdm#connexion_automatique sed -i "s/^\(autologin-user=\)$DEFAULT_LIVE_USB_USER$/\1$ME/g" \ /etc/lightdm/lightdm.conf bash -c "echo $ME:$ME_DEFAULT_PASSWORD | /usr/sbin/chpasswd" # Embed VNC stuff if [ \$EMBED_VNC -eq 1 ] ; then # VNC : auto enable server desktop sharing # http://askubuntu.com/a/530196 gsettings set org.gnome.Vino enabled true gsettings set org.gnome.Vino prompt-enabled false gsettings set org.gnome.Vino require-encryption false bash -c "cat >> /home/$ME/.profile" <<EOF1_2 # VNC : Activate distant desktop sharing # src : http://adept1formatique.unblog.fr/2013/08/12/bureau-a-distance-avec-lubuntu/ # nota : x11vnc indicates that running without password is dangerous ; # so it recommends to creating a password file (x11vnc -storepasswd) # repeat : allow repetitive keys # remind too : ending '&' will run this command detached from process x11vnc -rfbauth ~/.vnc/passwd -forever -repeat -display :0 & EOF1_2 fi ## Useful aliases bash -c "cat >> /home/$ME/.bashrc" <<EOF1_3 alias luc_edit_runme1st="sudo nano $RUNME1ST_EXT_PATH" alias luc_edit_syslinux="sudo nano $SYSLINUX_EXT_PATH" alias luc_reset="sudo $RESET_EXT_PATH" EOF1_3 ## Delete first trigger sed -i "/^sudo lxterminal -t/d" /etc/profile ## Adding last trigger sed -i ":a;N;s/\nexit 0/\n$RUNMELAST_PATH_ESC&/;Ta" /etc/rc.local ## Last actions in session ME ## warning : this script auto delete itself in the end bash -c "cat > $RUNMELAST_PATH" <<EOF1_4 #!/bin/bash ### Hint : alter this file in Live USB context only ### Definitively remove $DEFAULT_LIVE_USB_USER user/group/home/sudoers/persistance ### nota : usermod -g ... temporarily move user into my group, so I can remove it deluser $DEFAULT_LIVE_USB_USER usermod -g $ME $DEFAULT_LIVE_USB_USER delgroup $DEFAULT_LIVE_USB_USER rm -rf /home/$DEFAULT_LIVE_USB_USER sed -i "s/^$DEFAULT_LIVE_USB_USER/$ME/g" /etc/sudoers.d/casper sed -i "/^$DEFAULT_LIVE_USB_USER:/d" /etc/passwd sed -i "/^$DEFAULT_LIVE_USB_USER:/d" /etc/shadow ### Delete my RUNMELAST trigger sed -i "/^$RUNMELAST_PATH_ESC/d" /etc/rc.local ### Delete me rm -f \\\$0 EOF1_4 chmod +x $RUNMELAST_PATH reboot EOF1 chmod +x $LUC_LIVEUSB_PATH/$RUNME1ST_ROOT_PATH echof "CUSTOMIZE > Building of 'reset all' script" bash -c "cat > $LUC_LIVEUSB_PATH/$RESET_ROOT_PATH" <<EOF4 #!/bin/bash ## Empty casper-rw partition (impossible to retrieve data) CASPER_RW_PATH=\`mount |grep casper-rw |cut -f 3 -d " "\` rm -rf \$CASPER_RW_PATH/* echo "System has been reset !" echo "Warning : the system is now incomplete, "\ "you must reboot to resolve the problem" echo "To reboot : sudo reboot + give password" EOF4 chmod +x $LUC_LIVEUSB_PATH/$RESET_ROOT_PATH echof "CUSTOMIZE > 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|<racine_live_usb>}/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|<racine_live_usb>}/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|<racine_live_usb>}/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 , 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 (exemple)
- Gestion MBR et partitions par script (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 )
- les clés USB standard avec gestions différentes (comme par exemple 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 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 : lenainjaune.
Version : 1.2
Date de version : 22/04/15