Creer Son Premier Rim Linux
Creer Son Premier Rim Linux
Creer Son Premier Rim Linux
12 août 2019
Table des matières
1. Nomenclature . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
2. La petite histoire . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
2.1. Petit constat . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
3. Le noyau simplifié . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
3.1. Principe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
3.2. Types de noyaux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
3.3. Linux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
3.4. Les choix de ce tuto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
4. Le boot simplifié . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
4.1. La chaîne du boot . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
4.2. Le noyau lors du boot . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
4.3. Les choix de ce tuto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
5. L’environnement de travail . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
6. Premier RIM-Linux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
6.1. Le noyau Linux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
6.2. Busybox . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
6.3. Intégration à notre tux . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
7. Faire booter votre RIM-Linux . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
7.1. La préparation du noyau et du système . . . . . . . . . . . . . . . . . . . 14
7.2. Identification de l’architecture . . . . . . . . . . . . . . . . . . . . . . . . 15
7.3. Préparation de la clé USB . . . . . . . . . . . . . . . . . . . . . . . . . . 15
7.4. Configuration spécifique au BIOS . . . . . . . . . . . . . . . . . . . . . . 16
7.5. Configuration spécifique à l’UEFI . . . . . . . . . . . . . . . . . . . . . . 16
7.6. Et pour finir ... . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
8. Second RIM-Linux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
8.1. La configuration de base . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
8.2. Le clavier . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
8.3. Le hotplug . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
8.4. La persistance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
8.5. Finalisation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
8.6. Fin des scripts d’init . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
8.7. Les applications . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
8.8. Le réseau . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
9. Pour aller plus loin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
Contenu masqué . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
9.1. Installation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
9.2. Configuration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50
RIM Linux, pour Run In Memory Linux, est un système GNU/Linux fonctionnant entièrement
en mémoire vive.
1
1. Nomenclature
N’importe quel système GNU/Linux moderne utilise la technologie du RIM. Comprendre cette
technologie est donc un premier pas vers la réalisation de votre système.
Dans ce cas, pourquoi créer son propre système GNU/Linux ? Les raisons peuvent être mul-
tiples :
— Avoir un système parfaitement adapté à ses besoins.
— Créer sa propre distribution (oui oui, c’est possible).
— Tout simplement comprendre comment ça fonctionne.
— Et bien d’autres.
Ce tutoriel n’a pas pour objectif de vous apprendre tout cela, mais seulement de vous permettre
de comprendre le fonctionnement et la création d’un RIM Linux. C’est donc un premier pas
dans la création de distribution, rien de plus (mais rien de moins non plus ).
En effet, les technologies utilisées dans ce tutoriel, bien que généralement cachées par la
distribution, sont indispensable tant pour la création d’un LiveCD (ou LiveUSB) que pour
celle d’une distribution ”classique”. Donc normalement, quelque soit votre projet de création de
système GNU/Linux (ou quelque_chose/Linux, coucou les systèmes Android), vous ne perdrez
pas de temps en suivant ce tutoriel.
!
Pour ceux qui rêvent déjà : créer une distribution GNU/Linux à peu près utilisable est
extrèmement chronophage, et parfois très pénible. Cela demande une grande tenacité. Le
problème n’est pas de créer un système qui soit sympas, mais de le maintenir dans le
temps, avec les dernières versions des programmes utilisés, et des développeurs qui ont
des cycles de sorties radicalement différents.
1. Nomenclature
1.0.1. Une question de vocabulaire
2
2. La petite histoire
— linux ou Tux ou tux pour désigner un système UNIX utilisant le noyau Linux, que son
système soit ou non fondé sur GNU.
— système pour parler de tout ce qui n’est pas le noyau.
2. La petite histoire
Le LiveCD Linux est une chose qui ne date pas d’hier. Le premier est Knoppix.
2.1.0.1. Knoppix Knoppix est une distribution fondée sur Debian et créée en 2000, la première
à utiliser la technique du LiveCD. Elle est donc rapidement devenue populaire puisque cette
spécificité technique est accompagnée de script de détection du matériel ainsi que d’outils de
réparation du système, ce qui a permis d’avoir un SystemRescueCd avant l’heure. Comme
toute distribution ancienne et relativement populaire, elle a donné naissance à un certain nombre
de distributions dérivées .
Le LiveCD a pendant une période été une possibilité technique spécifique aux systèmes GNU/Li-
nux. Pourtant, il n’existait pas aux premiers âges de ce système.
?
Mais alors, comment faisait-on avant ?
Et bien comme nous allons le faire dans ce tuto ! Tout à la main ! Eh oui, GNU/Linux a été et
reste un système ”manuel”.
Le LiveCD répond au départ à des impératifs techniques : on ne peut pas écrire sur un CD-R,
et on n’a peut-être pas envie d’utiliser un CD-RW pour quelques utilisations seulement. Il faut
donc pouvoir utiliser un système qui, de façon tout à fait naturelle, a besoin d’écrire dans son
arborescence (ne serait-ce que pour les logs) alors que son support sera de toute façon en lecture
seule. La solution la plus évidente est alors de faire entièrement tourner ce système grâce à une
ressource présente sur chaque ordinateur : la RAM.
Mais avec le développement du LiveCD sont apparus d’autres usages :
— Distributions orientées sécurité ne laissant aucune trace sur l’ordinateur.
— Distributions axées sur la performance (la RAM permettant des performances spectacu-
laires par rapport à un disque dur), par exemple pour les ordinateurs anciens.
— Prolongement de la durée de vie des clés USB en limitant les écritures.
Néanmoins, pour les 2 derniers points, avoir un système ”isolé” dans sa RAM n’est pas très
pratique :
— Pas de sauvegarde de la configuration.
— Pas de sauvegarde des logiciels installés.
— En conséquence : temps de boot parfois long, car générique.
3
3. Le noyau simplifié
C’est alors que viennent les LiveUSB. Les LiveUSB sont globalement en RAM, mais une
persistance (parfois partielle, parfois manuelle) est possible par l’utilisation de la clé sur un
dossier particulier, éventuellement associé à des mécanismes de sauvegarde/restauration.
i
Par la suite, nous allons d’abord créer un pur LiveCD, ce sera notre premier RIM-Linux,
puis nous allons le transformer pour aboutir à un LiveUSB hybride.
3. Le noyau simplifié
3.1. Principe
?
Un noyau, c’est quoi ?
Le noyau, c’est tout. Le noyau d’un système d’exploitation (que nous nommerons par la suite
OS), c’est tout ce que l’on ne voit pas, et qui pourtant est très utile. Petit exemple :
Chaque carte graphique possède son propre ”langage” pour communiquer avec le système.
Vous imaginez si les développeurs devaient faire des applications qui étaient déclinées pour
chaque modèle ? Et attention, pas seulement pour les modèles actuels, mais pour ceux à venir
. Vous voyez bien que ce n’est pas gérable. C’est pour cela que l’on intègre au noyau des bouts de
codes, appelés driver, qui permettent de communiquer au modèle en question. Le noyau propose
un ”langage” générique à l’application, qui n’a pas à s’occuper du matériel mais seulement de
comment utiliser le matériel.
?
Mais sur ma console, je ne vois pas où est l’OS ! Dans le jeu ?
Eh bien non, en fait, si on prend une console très basique type GameBoy, il n’y en a pas. En
effet, le matériel est toujours le même, donc il n’y a pas besoin d’un OS !
?
Donc un noyau, c’est un sac de drivers ?
Non. Le noyau, c’est aussi un sac de drivers. Mais ce n’est pas tout. C’est lui aussi qui permet
de faire du multitâche, de gérer la mémoire, ...
Le noyau fait vraiment beaucoup de choses. Toujours pour simplifier la vie des développeurs et
des utilisateurs.
4
3. Le noyau simplifié
La première chose qui vient à l’esprit, c’est un gros programme avec toutes les fonctionnalités
dedans. C’est ce que l’on appelle un noyau monolithique. C’est simple, efficace, mais parfois dur
à gérer. En effet, si vous faites un LiveCD générique, il faut bien supporter (théoriquement)
tous les matériels existants, pour que votre LiveCD fonctionne sur tout les PCs existant.
Imaginons le PC d’un utilisateur. Celui-ci n’aura pas tout les matériels existant, donc il y aura
des supports dans le noyau qui ne seront pas utilisé. On aura donc un gachi de place, puisque le
noyau est plus gros que ce qu’il aurait pu être, et de temps parce qu’il a fallu charger tout ce
code inutile en mémoire.
Il faudrait donc que les supports matériels qui ne sont pas très utilisés soient dans l’arborescence
du système, et chargé en mémoire à la demande. C’est le concept du micro-noyau, où beaucoup
de supports matériels sont ”délocalisés” dans le système. L’inconvénient, c’est que l’on ne charge
pas forcément tout les supports requis en même temps, du coup on risque de faire plein de
petits accès disque au lieu d’un gros, ce qui risque de plomber le temps de boot, mais cette
fois à la détection du matériel, pas lors du chargement du noyau en RAM (de plus, de par le
fonctionnement interne d’un support ”délocalisé”, il est très généralement plus lent que son
homologue intégré directement au noyau). On n’y est toujours pas .
Il y a donc 2 solutions intermédiaires, le noyau monolithique modulaire, qui est un noyau
globalement monolithique, mais avec certains supports mis dans des modules, chargés à la
demande, et le noyau hybride, qui est un micro-noyau avec des supports ”relocalisés”.
3.2.0.1. En résumé :
— Noyau monolithique : un gros programme.
— Micro-noyau : un petit programme avec plein de petits modules.
— Noyau monolithique modulaire : un programme de taille intermédiaire avec quelques
(petits ou gros) modules. Tend vers le noyau monolithique.
— Noyau hybride : même chose que le noyau monolithique modulaire, mais tend vers le
micro-noyau.
Il existe aussi les noyaux mégalithiques et les exo-noyaux, mais ce sont plus des noyaux
expérimentaux et aucun OS robuste et relativement connu n’utilise ces noyaux-là.
i
Si vous êtes intéressé par le sujet des noyaux, ou plus généralement des OS, ce tuto
devrait vous plaire.
3.3. Linux
Le noyau Linux (car rappelons-le, Linux n’est qu’un noyau) est, c’est un de ses gros avantages,
très configurable. Linux était originellement monolithique pur mais, depuis un certains nombre
(élevé) d’années, est devenu modulaire. Toutefois, le support des modules est désactivable, ce
qui fait que vous pouvez encore faire un noyau purement monolithique.
5
4. Le boot simplifié
?
Mais puisque ça prend plus de temps, quel est l’intérêt ?
Un noyau monolithique générique est moins bien qu’un monolithique modulaire. Si le noyau est
optimisé, c’est-à-dire qu’il contient uniquement les supports dont on a besoin, il chargera en
une seule passe tout les supports requis, sans avoir de code inutile de chargé. Il est donc plus
efficace que le même noyau avec des modules.
4. Le boot simplifié
Après ce petit préliminaire de blabla, on entre dans la partie technique.
Mais avant de faire un système complet, il faut déjà comprendre comment il boote.
C’est la suivante :
— BIOS (ou UEFI), qui fait quelques vérifications matérielles de base (par exemple il
contrôle la présence de RAM).
— Le bootloader, chargé par le BIOS/(U)EFI, qui va charger en mémoire le noyau, lui
passer des paramètres, puis l’exécuter.
— Le noyau, qui fait lui aussi des vérifications matérielles, puis qui réagit en fonction des
paramètres passés par le bootloader.
— L’init, qui est le premier programme utilisateur (comprendre ”pas du noyau”) lancé, et
ce par le noyau. L’init fait plusieurs choses, nous verrons quoi précisément par la suite,
qui aboutissent à un OS prêt à l’emploi.
6
4. Le boot simplifié
Son paramètre principal, c’est l’endroit où est stocké le système (typiquement la partition
montée sur /), qui va lui permettre de lancer l’init.
Si on est dans un noyau monolithique, pas de problème, il monte sa partition système, lance
l’init et tout le monde est content.
Si on est dans un noyau monolithique modulaire, c’est plus problématique, car il se peut très
bien que le système soit en ext4 ou en xfs, alors que le support de ces systèmes de fichiers
(appelés aussi FS) est sous forme de module.
?
Mais alors, il est où le problème ? Ça sera détecté non ?
Ah oui, parfaitement détecté. Mais, ils sont où les modules ? Dans la partition système !
Vous voyez le problème. C’est exactement comme dans les anciennes voitures avec les loquets,
quand on fermait la porte de la voiture, loquet fermé, alors que la clé est à l’intérieur. Sauf que
dans ces cas-là on pouvait briser la vitre. Il n’y a pas de vitre dans un FS. Dommage hein ?
La solution, c’est de passer par un système intermédiaire. Ce système intermédiaire, chargé
en RAM par le noyau, contient tous les modules du noyau. Ce dernier peut donc monter sa
partition système en toute tranquillité.
i
Ce système intermédiaire, jusqu’aux noyaux 2.4 (inclus), c’était un initrd obligatoirement.
4.2.1. L’initrd
4.2.2. L’initramfs
7
5. L’environnement de travail
5. L’environnement de travail
Nous allons cannibaliser les bibliothèques de notre distribution, il faut donc que vous soyez sous
tux. On va compiler et recompiler, créer plein de fichiers, alors pas question de mettre tout ça
n’importe comment ! Créez dans votre dossier personnel un dossier tux, puis dedans un autre,
par exemple RIM (ce sera la racine de notre projet), puis dedans :
— build
— rootbase
— kernel
Vous mettrez votre (ou vos) archive(s) de noyau dans le dossier kernel, que vous décompresserez
à partir de celui-ci (vous aurez donc dans kernel un dossier par noyau), tout le reste dans
build. Le dossier rootbase sera l’original de votre système alors pas question de le polluer
avec des fichiers de compilation.
5.0.1.1. Remarque sur la notation Pour ceux qui ne seraient pas habitués à celle-ci, le fait de
mettre un ”#” en début de la ligne de commande dénote que la commande a besoin des droits
root, donc que vous fassiez les commandes en tant que root ou avec sudo devant.
8
6. Premier RIM-Linux
6. Premier RIM-Linux
6.0.0.1. Ce que nous allons faire
1. Configurer et compiler un noyau, notre premier !
2. Configurer et compiler busybox.
Majeur.mineur.publication-modification
Exemples :
— 2.6.32
— 3.15.5-2
6.1.2. Compilation
Allez on attaque la ligne de commande ! Allez sur le site du noyau linux , et prenez un noyau
récent et stable en longterm. À l’heure où j’écris ceci, la version 3.14.12 est disponible, donc
c’est sur celle-ci que je vais travailler. Mais ne vous en faites pas, la configuration change très
peu d’une version à l’autre, surtout que nous n’allons pas utiliser les toutes dernières avancées
du noyau. À la limite, même un noyau 2.6 pourrait faire l’affaire, mais on va éviter de tenter le
diable.
Décompressez-le dans le dossier kernel, par exemple via la commande :
!
Nous sommes ici situés à la racine du projet.
i
Le J indique que nous utilisons la compression xz, le x que nous voulons extraire (et non
rajouter des fichiers dans l’archive), le f que l’archive est donnée par un fichier (et pas par
l’entrée standard, soit par défaut le clavier et vos petits doigts).
Ensuite, pour ceux qui ne l’ont pas déjà fait, vous utilisez la ligne de commande.
9
6. Premier RIM-Linux
!
Mais c’est moche la ligne de commande !
Toi, tu sors ! Plus sérieusement, vous n’allez pas avoir le choix donc ce n’est pas le peine de
râler.
Avant toute chose il faut aller dans le dossier du noyau, pour cela c’est bien entendu la commande
cd :
cd kernel/linux-[VERSION]
?
Mais tu nous as menti ! On peut le configurer graphiquement !
Certes, sauf que vous êtes obligé de le lancer en console. Et puis de toute façon vous allez faire
un tux en console, alors pourquoi ça vous embête ?
Pour les exemples, j’utilise un make nconfigqui donne en premier lieu ceci (sur un système 64
bits, un 32 aura des entrées légèrement différentes) :
Là, normalement, je devrais être sympa et vous donner un fichier de configuration déjà fait pour
aller plus vite, ou lister rapidement les choses à cocher ou non. Et bien vous savez quoi ? Je ne
vais pas le faire !
Il faut vraiment que vous fouilliez un peu dans la configuration du noyau, c’est indispensable.
C’est comme vouloir faire du pain avec de la farine toute faite (farine + levure + arômes) plutôt
que de le faire soi-même.
Je vais juste vous dire quelques points :
— Dans General Setup, ne pas cocher l’option Embedded system. Cela évitera de faire de
grosses, grosses bêtises (vous ne pourrez faire que des petites ).
— Toujours dans General Setup, laisser coché le support de l’initrd/l’initramfs.
10
6. Premier RIM-Linux
i
Pour avoir quelque chose de sain pour votre architecture, vous pouvez, si vous le voulez,
faire un make defconfig avant.
Après cela, vous tapez make bzImage. Cela va prendre un peu de temps. D’après mes expériences
et des stats que j’ai glanées :
— 2 minutes sur un core i7 (-j8).
— ~45 minutes sur un pentium de base.
— Pas loin de 12h sur une rapsberry pi.
i
Si vous avez des stats à me proposer, transmettez-les par MP/sur le forum/mail, je ferais
une mise à jour ici.
i
Pour accélérer la compilation sur des machines multi-coeurs, utilisez make -jX plutôt que
make, avec X le nombre de coeurs que votre processeur possède.
6.2. Busybox
On télécharge ici , en prenant la version la plus récente (qui est ... tout en bas ). On décompresse
l’archive dans build, et ensuite c’est un peu près la même chose qu’avec le noyau :
1. Configuration (via make config ou make menuconfig, les résultats étant identiques à
ceux du noyau), en n’oubliant pas d’être dans le dossier racine de busybox (celui qui
vient d’être sorti de l’archive).
2. Compilation (make).
3. Installation (make install).
La version de busybox que j’utilise est la 1.22.1, et comme là c’est moins grave, je vous mets
une configuration possible :
11
6. Premier RIM-Linux
Ce fichier sera enregistré dans la racine du dossier de busybox, et avec le nom .config.
Une fois le make install lancé (éventuellement avec l’option -j), nous avons un dossier _ins
tall situé dans la racine du dossier de busybox qui contient tout le système créé par busybox.
?
Mais il y a des liens symboliques partout ! Pourquoi tu dis que c’est installé ?
Nous allons donc copier strictement tout ça vers rootbase. En admettant que le dossier _install
se trouve dans build/busybox-[version] (soit le comportement par défaut : à la racine du
dossier de busybox), la commande sera :
cp -a ./_install/* ../../rootbase/
!
Dans cet exemple nous sommes situés à la racine du dossier de busybox.
ldd rootbase/bin/busybox
!
Dans cet exemple, nous sommes à la racine du projet.
linux-gate.so.1 (0xb77a9000)
libm.so.6 => /usr/lib/libm.so.6 (0xb7739000)
12
6. Premier RIM-Linux
i
Si vous avez la flemme de tout recopier proprement, vous pouvez faire un lien symbolique
de usr/lib vers lib, via
ln -s ../lib lib
en étant dans rootbase/usr, en lieu et place du dossier, comme ça vous mettez tout
dans rootbase/lib et tout le monde est content (sauf les puristes, mais les puristes m’ont
déjà tué et torturé 3 fois, alors au point où on en est... ).
strip lib/*.so
strip usr/lib/*.so
Et pour finir, on va donner au noyau ce qu’il veut : son init. Positionnez-vous dans rootbase,
puis créez le lien symbolique vers busybox :
13
7. Faire booter votre RIM-Linux
ln -s bin/busybox init
i
Cette étape n’est pas spécifique au premier RIM-Linux, elle s’applique aussi au 2e et à
ceux d’après.
Nous n’allons pas faire un iso ! Et non ! Tout simplement parce que notre RIM est destiné à être
mis sur une clé, donc on va se simplifier la vie.
7.1.1. Le noyau
Allez dans le dossier de création des binaires, pour beaucoup d’entre vous ce sera arch/x86/boot,
et prenez le fichier bzImage. Mettez-le dans le dossier racine du projet, celui qui contient root
base, build, kernel, pour ne pas le perdre.
7.1.2. Le système
Là, il va falloir faire une archive cpio, compressée de préférence. On va faire ça au moyen de ce
petit script (que l’on met à la racine du projet également) :
Le principe est le suivant : on crée une archive cpio (cpio -o) avec le format qui va bien
(-Hnewc) compressée en gzip (gzip) à fond (-9, donc très compressé). cpio prend une liste de
fichier que l’on génère grâce à find.
!
Ce script sera appelé en se positionnant à la racine du projet.
14
7. Faire booter votre RIM-Linux
Pour ceux qui ne savent pas s’ils sont en BIOS ou UEFI, cette commande vous apportera la
réponse :
i
L’option -s sert de filtre (on ne prend que les champs correspondant au type de la
partition), et l’option -o spécifie ce que l’on veut tirer (la valeur de PTTYPE).
!
Pendant cette étape de partitionnement, il faut ABSOLUMENT que votre clé ne soit
pas montée.
Faisons une petite clé maison. Prenez une clé, et lancez un logiciel de partitionnement (je
recommande très fortement gparted, mais un (c)fdisk peut faire l’affaire pour les spécialistes).
Suivant votre architecture, vous allez refaire une table des partitions :
— msdos pour un BIOS.
— GPT pour un (U)EFI.
!
ATTENTION !! Réécrire la table des partitions est une opération très courte, irréversible
et destructrice : vous allez perdre toutes vos partitions, ainsi que vos données. Toutes, sans
exception.
i
Si vous faites une table gpt, les ”grands pros” devront utiliser (c)gdisk, et non (c)fdisk.
Ensuite, quelle que soit votre architecture, vous allez créer une seule partition en FAT32 ou
FAT16, et vous lui mettrez le drapeau (flag en anglais) boot (bootable pour certains logiciels).
Ensuite vous écrivez vos partitions et quittez le logiciel.
15
8. Second RIM-Linux
On monte ensuite la clé, et on y crée le dossier boot, dans lequel on place notre noyau (le
bzImage), et notre initramfs (RIM.cpio.gz).
On démonte la clé, on redémarre (en ayant bien configuré son BIOS/(U)EFI pour que la clé
passe avant le disque dur dans l’ordre de boot), et ça marche !
8. Second RIM-Linux
8.0.1. Réflexion
8.2. Le clavier
8.2.0.1. Méthode classique kbd est très certainement présent sur votre distribution. En vous
mettant à la racine du projet, recopiez ces commandes :
16
8. Second RIM-Linux
cp /bin/loadkeys rootbase/bin
strip rootbase/bin/loadkeys
mkdir -p rootbase/usr/share/kbd/keymaps/i386/azerty
cp -a /usr/share/kbd/keymaps/i386/include
rootbase/usr/share/kbd/keymaps/i386
cp /usr/share/kbd/keymaps/i386/azerty/fr-latin1.map.gz
rootbase/usr/share/kbd/keymaps/i386/azerty/
8.2.0.2. Méthode busybox Sur votre distribution, avec votre clavier bien configuré, faites
un dumpkmap > fr.kmap (c’est un outil busybox, donc vous pouvez utiliser celui de _ins
tall). Vous le chargerez par la commande loadkmap < chemin/vers/fr.kmap dans la section
clavier des scripts d’init. Une bonne solution est d’enregistrer le fichier produit dans root
base/etc/fr.kmap.
On va monter :
— procfs dans /proc, parce que c’est bien pratique.
— sysfs dans /sys, requis par le hotplug [m/u]dev.
— devpts dans /dev/pts, pour el ratón (la souris quoi).
— usbfs dans /dev/bus/usb, pour l’USB.
— shm dans /dev/shm, pour la mémoire partagée.
Pour se simplifier les choses (et surtout alléger - donc accélérer - les scripts init), on va faire
dans les règles de l’art : par le fichier etc/fstab :
17
8. Second RIM-Linux
Le fichier rootbase/etc/group :
root::0:root
Le fichier rootbase/etc/shadow :
root::9804:0:::::
Fichier rootbase/etc/inittab :
Fichier rootbase/etc/profile :
8.3. Le hotplug
18
8. Second RIM-Linux
8.4. La persistance
Je tiens à saluer ici l’équipe de Slitaz , dont j’ai entièrement repris le principe de persistance.
Il tient en 2 points :
— La méthode la plus simple pour sauvegarder les données est de refaire l’initramfs.
— Le répertoire qui va être le plus long (le plus inutile ?) à archiver/compresser est /home.
Par conséquent, on va utiliser un script de sauvegarde, qu’il faudra lancer à la main, et on va
monter la clé dans /home !
8.4.0.2. Le montage de /home On va monter la partition de la clé sur /home, ce qui permettra,
en plus de réduire le temps de création du nouvel initramfs, de permettre aux utilisateurs de
bénéficier de tout l’espace disponible sur la clé ainsi que de sauvegarder (via notre script) une
image modifiée.
Ce montage va se faire le plus simplement du monde par un mount dans les scripts d’init. Sauf
que pour cela, il nous faut 2 informations :
1. La partition à monter.
2. Si on souhaite effectivement monter cette partition.
En effet, pour le point 2, on peut souhaiter utiliser la distribution uniquement en LiveCD (ce
qui permet de retirer la clé après le boot).
?
Comment passer ces informations ?
Au boot ! En effet, le bootloader passe des paramètres au noyau, qui va les mettre dans des
variables d’environnements, qui sont donc exploitables par nos scripts.
19
8. Second RIM-Linux
En pratique Vous allez rajouter dans le champ option de votre bootloader deux paramètres,
home=[partition], où [partition] est égal à l’UUID.
Exemple : supposons que l’UUID de ma partition est truc-muche. Je mettrais donc home=truc-
muche.
Ensuite, vous rajoutez le paramètre ifmount, qui prendra la valeur yes pour monter la partition,
et no sinon.
Exemple pour une entrée type LiveUSB : dans option, on rajoute home=truc-muche
ifmount=yes. Et voilà.
8.5. Finalisation
Fichier rootbase/etc/init.d/rcS :
Fichier /etc/init.d/helper.rcs :
Fichier /etc/init.d/rc.shutdown :
8.8. Le réseau
8.8.0.1. Connexion câblée On a déjà les net-tools (ifconfig, route) par busybox, il ne vous
reste donc qu’à faire un script pour spécifier l’adresse IP, le DNS et la route par défaut.
En pratique : Créez le fichier opt/wired_net.sh (vous pouvez le faire à partir de la distribution
bootée si vous le souhaitez) avec :
20
9. Pour aller plus loin
nameserver [adresse_ip_du_serveur_dns]
?
Oui mais moi je veux faire du DHCP !
Vous voulez faire du DHCP ? Et bien vous allez dans la configuration de busybox, vous cochez
le client DHCP, et vous le faites tourner en root, et il se débrouille tout seul ! Rien à faire !
Eh bien voilà ! Vous avez un système fonctionnel, avec support du hotplug et de la persistance.
Vous pouvez maintenant ajouter ce que vous voulez à votre système, pour en faire, pourquoi
pas, la prochaine distribution Linux qui déchire.
Vous avez toutes les armes pour conquérir le monde !
N’hésitez pas à utiliser le forum, notamment si problèmes techniques, ou tout simplement pour
faire connaître votre distro.
Si ce tuto vous a plu (ou non d’ailleurs), que vous avez des remarques à faire, je suis preneur !
Entre les MP, les commentaires ici et le topic de présentation sur le forum , vous avez de la
place pour vous exprimer.
Sinon, vous pouvez m’envoyer un mail à l’adresse suivante : dosmpm at gmail dot com (mais la
réponse sera plus lente à venir)
Sources et remerciements :
21
Contenu masqué
— Un vieux numéro de GNU/Linux Magazine France (le n°80, de février 2006) pour le
principe de base, le premier RIM-Linux, ainsi qu’une partie du second (udev, un bout
des scripts d’init).
— La distribution Slitaz, pour le principe de la persistance.
— La documentation busybox, pour mdev.
— Le wiki archlinux pour l’installation détaillée de syslinux.
— Le site de rodsmith sur tux et l’UEFI, ainsi que le wiki d’archlinux, pour le boot en
UEFI.
Remerciements seuls :
— La distro core linux (anciennement micro-core linux), une branche de Tiny Core Linux,
pour m’avoir donné l’envie de faire mieux.
— La distribution Slackware, pour m’avoir permis de faire quelques tests de recompilation
de noyau sans me cracher à la figure (je la recommande d’ailleurs si d’aventure vous
souhaitez faire la même chose).
— La distribution Archlinux, pour m’avoir forcé à connaître wpa_supplicant et gummiboot.
<3
— Ubuntu, pour m’avoir fait passer à d’autres distros pour plusieurs raisons.
— Le projet busybox, sans qui rien n’aurait été possible dans ce tuto.
— Le projet du noyau Linux, pour nous donner une stabilité et une performance très
satisfaisante.
— Le projet GNU, pour avoir initié cette grande aventure qu’est le logiciel libre.
— ZdS pour permettre de partager tout cela.
— Et enfin Arius, qui me supporte, et c’est déjà beaucoup.
Contenu masqué
Pour les puristes, sachez que nous n’allons pas faire un GNU/Linux ici. En effet, la partie
système (coreutils notamment) sera gérée par busybox, qui n’est pas dans le projet GNU. C’est
donc un BusyBox/Linux.
Initrd, pour Initial Ramdisk, est, comme son nom l’indique, une sorte de partition en RAM.
Dans sa version a minima, il contient l’interpréteur shell, le chargeur de module, les modules,
et un fichier qui fera office d’init, linuxrc, qui est un simple fichier shell. Sa fonction est de
charger les modules requis puis de repasser la main au noyau.
22
Contenu masqué
Cet initrd a une taille fixe. Par conséquent, on ne peut pas l’agrandir si on a besoin de place, ni
le réduire s’il est trop grand.
Pour en faire un LiveCD, il suffit de dire au noyau que la partition système est la RAM, et c’est
fini. On restera indéfiniment dans cet initrd. Plutôt simple non ?
Oui, mais un peu rigide. C’est pourquoi depuis les noyaux 2.6 il existe une alternative. Retourner
au texte.
23
Contenu masqué
Retourner au texte.
24
Contenu masqué
Retourner au texte.
#
# Automatically generated make config: don't edit
# Busybox version: 1.21.1
# Mon Aug 11 13:36:34 2014
#
CONFIG_HAVE_DOT_CONFIG=y
#
# Busybox Settings
#
#
# General Configuration
#
CONFIG_DESKTOP=y
# CONFIG_EXTRA_COMPAT is not set
# CONFIG_INCLUDE_SUSv2 is not set
# CONFIG_USE_PORTABLE_CODE is not set
CONFIG_PLATFORM_LINUX=y
CONFIG_FEATURE_BUFFERS_USE_MALLOC=y
# CONFIG_FEATURE_BUFFERS_GO_ON_STACK is not set
# CONFIG_FEATURE_BUFFERS_GO_IN_BSS is not set
CONFIG_SHOW_USAGE=y
CONFIG_FEATURE_VERBOSE_USAGE=y
CONFIG_FEATURE_COMPRESS_USAGE=y
CONFIG_FEATURE_INSTALLER=y
# CONFIG_INSTALL_NO_USR is not set
CONFIG_LOCALE_SUPPORT=y
CONFIG_UNICODE_SUPPORT=y
# CONFIG_UNICODE_USING_LOCALE is not set
CONFIG_FEATURE_CHECK_UNICODE_IN_ENV=y
CONFIG_SUBST_WCHAR=63
CONFIG_LAST_SUPPORTED_WCHAR=767
# CONFIG_UNICODE_COMBINING_WCHARS is not set
CONFIG_UNICODE_WIDE_WCHARS=y
# CONFIG_UNICODE_BIDI_SUPPORT is not set
# CONFIG_UNICODE_NEUTRAL_TABLE is not set
# CONFIG_UNICODE_PRESERVE_BROKEN is not set
CONFIG_LONG_OPTS=y
CONFIG_FEATURE_DEVPTS=y
# CONFIG_FEATURE_CLEAN_UP is not set
CONFIG_FEATURE_UTMP=y
25
Contenu masqué
CONFIG_FEATURE_WTMP=y
CONFIG_FEATURE_PIDFILE=y
CONFIG_PID_FILE_PATH="/var/run"
CONFIG_FEATURE_SUID=y
CONFIG_FEATURE_SUID_CONFIG=y
CONFIG_FEATURE_SUID_CONFIG_QUIET=y
# CONFIG_SELINUX is not set
# CONFIG_FEATURE_PREFER_APPLETS is not set
CONFIG_BUSYBOX_EXEC_PATH="/proc/self/exe"
CONFIG_FEATURE_SYSLOG=y
# CONFIG_FEATURE_HAVE_RPC is not set
#
# Build Options
#
# CONFIG_STATIC is not set
# CONFIG_PIE is not set
# CONFIG_NOMMU is not set
# CONFIG_BUILD_LIBBUSYBOX is not set
# CONFIG_FEATURE_INDIVIDUAL is not set
# CONFIG_FEATURE_SHARED_BUSYBOX is not set
CONFIG_LFS=y
CONFIG_CROSS_COMPILER_PREFIX=""
CONFIG_SYSROOT=""
CONFIG_EXTRA_CFLAGS="-Os"
CONFIG_EXTRA_LDFLAGS=""
CONFIG_EXTRA_LDLIBS=""
#
# Debugging Options
#
# CONFIG_DEBUG is not set
# CONFIG_DEBUG_PESSIMIZE is not set
# CONFIG_WERROR is not set
CONFIG_NO_DEBUG_LIB=y
# CONFIG_DMALLOC is not set
# CONFIG_EFENCE is not set
#
# Installation Options ("make install" behavior)
#
CONFIG_INSTALL_APPLET_SYMLINKS=y
# CONFIG_INSTALL_APPLET_HARDLINKS is not set
# CONFIG_INSTALL_APPLET_SCRIPT_WRAPPERS is not set
# CONFIG_INSTALL_APPLET_DONT is not set
# CONFIG_INSTALL_SH_APPLET_SYMLINK is not set
# CONFIG_INSTALL_SH_APPLET_HARDLINK is not set
# CONFIG_INSTALL_SH_APPLET_SCRIPT_WRAPPER is not set
CONFIG_PREFIX="./_install"
26
Contenu masqué
#
# Busybox Library Tuning
#
# CONFIG_FEATURE_SYSTEMD is not set
CONFIG_FEATURE_RTMINMAX=y
CONFIG_PASSWORD_MINLEN=6
CONFIG_MD5_SMALL=1
CONFIG_SHA3_SMALL=0
CONFIG_FEATURE_FAST_TOP=y
# CONFIG_FEATURE_ETC_NETWORKS is not set
CONFIG_FEATURE_USE_TERMIOS=y
CONFIG_FEATURE_EDITING=y
CONFIG_FEATURE_EDITING_MAX_LEN=1024
# CONFIG_FEATURE_EDITING_VI is not set
CONFIG_FEATURE_EDITING_HISTORY=255
# CONFIG_FEATURE_EDITING_SAVEHISTORY is not set
# CONFIG_FEATURE_EDITING_SAVE_ON_EXIT is not set
# CONFIG_FEATURE_REVERSE_SEARCH is not set
CONFIG_FEATURE_TAB_COMPLETION=y
CONFIG_FEATURE_USERNAME_COMPLETION=y
CONFIG_FEATURE_EDITING_FANCY_PROMPT=y
# CONFIG_FEATURE_EDITING_ASK_TERMINAL is not set
CONFIG_FEATURE_NON_POSIX_CP=y
CONFIG_FEATURE_VERBOSE_CP_MESSAGE=y
CONFIG_FEATURE_COPYBUF_KB=4
# CONFIG_FEATURE_SKIP_ROOTFS is not set
# CONFIG_MONOTONIC_SYSCALL is not set
CONFIG_IOCTL_HEX2STR_ERROR=y
# CONFIG_FEATURE_HWIB is not set
#
# Applets
#
#
# Archival Utilities
#
CONFIG_FEATURE_SEAMLESS_XZ=y
CONFIG_FEATURE_SEAMLESS_LZMA=y
CONFIG_FEATURE_SEAMLESS_BZ2=y
CONFIG_FEATURE_SEAMLESS_GZ=y
# CONFIG_FEATURE_SEAMLESS_Z is not set
# CONFIG_AR is not set
# CONFIG_FEATURE_AR_LONG_FILENAMES is not set
# CONFIG_FEATURE_AR_CREATE is not set
CONFIG_BUNZIP2=y
CONFIG_BZIP2=y
CONFIG_CPIO=y
CONFIG_FEATURE_CPIO_O=y
CONFIG_FEATURE_CPIO_P=y
27
Contenu masqué
#
# Coreutils
#
CONFIG_BASENAME=y
CONFIG_CAT=y
CONFIG_DATE=y
CONFIG_FEATURE_DATE_ISOFMT=y
# CONFIG_FEATURE_DATE_NANO is not set
CONFIG_FEATURE_DATE_COMPAT=y
# CONFIG_HOSTID is not set
# CONFIG_ID is not set
# CONFIG_GROUPS is not set
CONFIG_TEST=y
CONFIG_FEATURE_TEST_64=y
CONFIG_TOUCH=y
CONFIG_FEATURE_TOUCH_SUSV3=y
CONFIG_TR=y
CONFIG_FEATURE_TR_CLASSES=y
CONFIG_FEATURE_TR_EQUIV=y
28
Contenu masqué
CONFIG_BASE64=y
CONFIG_WHO=y
CONFIG_USERS=y
CONFIG_CAL=y
CONFIG_CATV=y
CONFIG_CHGRP=y
CONFIG_CHMOD=y
CONFIG_CHOWN=y
CONFIG_FEATURE_CHOWN_LONG_OPTIONS=y
CONFIG_CHROOT=y
CONFIG_CKSUM=y
# CONFIG_COMM is not set
CONFIG_CP=y
CONFIG_FEATURE_CP_LONG_OPTIONS=y
CONFIG_CUT=y
CONFIG_DD=y
CONFIG_FEATURE_DD_SIGNAL_HANDLING=y
CONFIG_FEATURE_DD_THIRD_STATUS_LINE=y
CONFIG_FEATURE_DD_IBS_OBS=y
CONFIG_DF=y
CONFIG_FEATURE_DF_FANCY=y
CONFIG_DIRNAME=y
CONFIG_DOS2UNIX=y
CONFIG_UNIX2DOS=y
CONFIG_DU=y
CONFIG_FEATURE_DU_DEFAULT_BLOCKSIZE_1K=y
CONFIG_ECHO=y
CONFIG_FEATURE_FANCY_ECHO=y
CONFIG_ENV=y
CONFIG_FEATURE_ENV_LONG_OPTIONS=y
CONFIG_EXPAND=y
CONFIG_FEATURE_EXPAND_LONG_OPTIONS=y
CONFIG_EXPR=y
CONFIG_EXPR_MATH_SUPPORT_64=y
CONFIG_FALSE=y
CONFIG_FOLD=y
CONFIG_FSYNC=y
CONFIG_HEAD=y
CONFIG_FEATURE_FANCY_HEAD=y
# CONFIG_INSTALL is not set
# CONFIG_FEATURE_INSTALL_LONG_OPTIONS is not set
CONFIG_LN=y
CONFIG_LOGNAME=y
CONFIG_LS=y
CONFIG_FEATURE_LS_FILETYPES=y
CONFIG_FEATURE_LS_FOLLOWLINKS=y
CONFIG_FEATURE_LS_RECURSIVE=y
CONFIG_FEATURE_LS_SORTFILES=y
CONFIG_FEATURE_LS_TIMESTAMPS=y
CONFIG_FEATURE_LS_USERNAME=y
29
Contenu masqué
CONFIG_FEATURE_LS_COLOR=y
CONFIG_FEATURE_LS_COLOR_IS_DEFAULT=y
CONFIG_MD5SUM=y
CONFIG_MKDIR=y
CONFIG_FEATURE_MKDIR_LONG_OPTIONS=y
CONFIG_MKFIFO=y
CONFIG_MKNOD=y
CONFIG_MV=y
CONFIG_FEATURE_MV_LONG_OPTIONS=y
CONFIG_NICE=y
CONFIG_NOHUP=y
CONFIG_OD=y
CONFIG_PRINTENV=y
CONFIG_PRINTF=y
CONFIG_PWD=y
CONFIG_READLINK=y
CONFIG_FEATURE_READLINK_FOLLOW=y
# CONFIG_REALPATH is not set
CONFIG_RM=y
CONFIG_RMDIR=y
CONFIG_FEATURE_RMDIR_LONG_OPTIONS=y
CONFIG_SEQ=y
CONFIG_SHA1SUM=y
CONFIG_SHA256SUM=y
CONFIG_SHA512SUM=y
CONFIG_SHA3SUM=y
CONFIG_SLEEP=y
CONFIG_FEATURE_FANCY_SLEEP=y
CONFIG_FEATURE_FLOAT_SLEEP=y
CONFIG_SORT=y
CONFIG_FEATURE_SORT_BIG=y
CONFIG_SPLIT=y
CONFIG_FEATURE_SPLIT_FANCY=y
CONFIG_STAT=y
CONFIG_FEATURE_STAT_FORMAT=y
CONFIG_STTY=y
CONFIG_SUM=y
CONFIG_SYNC=y
CONFIG_TAC=y
CONFIG_TAIL=y
CONFIG_FEATURE_FANCY_TAIL=y
CONFIG_TEE=y
CONFIG_FEATURE_TEE_USE_BLOCK_IO=y
CONFIG_TRUE=y
CONFIG_TTY=y
CONFIG_UNAME=y
CONFIG_UNEXPAND=y
CONFIG_FEATURE_UNEXPAND_LONG_OPTIONS=y
CONFIG_UNIQ=y
CONFIG_USLEEP=y
30
Contenu masqué
#
# Common options for cp and mv
#
CONFIG_FEATURE_PRESERVE_HARDLINKS=y
#
# Common options for ls, more and telnet
#
CONFIG_FEATURE_AUTOWIDTH=y
#
# Common options for df, du, ls
#
CONFIG_FEATURE_HUMAN_READABLE=y
#
# Common options for md5sum, sha1sum, sha256sum, sha512sum, sha3sum
#
CONFIG_FEATURE_MD5_SHA1_SUM_CHECK=y
#
# Console Utilities
#
# CONFIG_CHVT is not set
CONFIG_FGCONSOLE=y
CONFIG_CLEAR=y
# CONFIG_DEALLOCVT is not set
CONFIG_DUMPKMAP=y
CONFIG_KBD_MODE=y
CONFIG_LOADFONT=y
CONFIG_LOADKMAP=y
CONFIG_OPENVT=y
CONFIG_RESET=y
CONFIG_RESIZE=y
CONFIG_FEATURE_RESIZE_PRINT=y
CONFIG_SETCONSOLE=y
CONFIG_FEATURE_SETCONSOLE_LONG_OPTIONS=y
CONFIG_SETFONT=y
CONFIG_FEATURE_SETFONT_TEXTUAL_MAP=y
CONFIG_DEFAULT_SETFONT_DIR=""
CONFIG_SETKEYCODES=y
CONFIG_SETLOGCONS=y
CONFIG_SHOWKEY=y
31
Contenu masqué
#
# Common options for loadfont and setfont
#
CONFIG_FEATURE_LOADFONT_PSF2=y
CONFIG_FEATURE_LOADFONT_RAW=y
#
# Debian Utilities
#
CONFIG_MKTEMP=y
CONFIG_PIPE_PROGRESS=y
# CONFIG_RUN_PARTS is not set
# CONFIG_FEATURE_RUN_PARTS_LONG_OPTIONS is not set
# CONFIG_FEATURE_RUN_PARTS_FANCY is not set
# CONFIG_START_STOP_DAEMON is not set
# CONFIG_FEATURE_START_STOP_DAEMON_FANCY is not set
# CONFIG_FEATURE_START_STOP_DAEMON_LONG_OPTIONS is not set
CONFIG_WHICH=y
#
# Editors
#
CONFIG_PATCH=y
CONFIG_VI=y
CONFIG_FEATURE_VI_MAX_LEN=4096
# CONFIG_FEATURE_VI_8BIT is not set
CONFIG_FEATURE_VI_COLON=y
CONFIG_FEATURE_VI_YANKMARK=y
CONFIG_FEATURE_VI_SEARCH=y
CONFIG_FEATURE_VI_REGEX_SEARCH=y
CONFIG_FEATURE_VI_USE_SIGNALS=y
CONFIG_FEATURE_VI_DOT_CMD=y
CONFIG_FEATURE_VI_READONLY=y
CONFIG_FEATURE_VI_SETOPTS=y
CONFIG_FEATURE_VI_SET=y
CONFIG_FEATURE_VI_WIN_RESIZE=y
CONFIG_FEATURE_VI_ASK_TERMINAL=y
CONFIG_AWK=y
CONFIG_FEATURE_AWK_LIBM=y
CONFIG_CMP=y
CONFIG_DIFF=y
CONFIG_FEATURE_DIFF_LONG_OPTIONS=y
CONFIG_FEATURE_DIFF_DIR=y
CONFIG_ED=y
CONFIG_SED=y
CONFIG_FEATURE_ALLOW_EXEC=y
#
# Finding Utilities
32
Contenu masqué
#
CONFIG_FIND=y
CONFIG_FEATURE_FIND_PRINT0=y
CONFIG_FEATURE_FIND_MTIME=y
CONFIG_FEATURE_FIND_MMIN=y
CONFIG_FEATURE_FIND_PERM=y
CONFIG_FEATURE_FIND_TYPE=y
CONFIG_FEATURE_FIND_XDEV=y
CONFIG_FEATURE_FIND_MAXDEPTH=y
CONFIG_FEATURE_FIND_NEWER=y
CONFIG_FEATURE_FIND_INUM=y
CONFIG_FEATURE_FIND_EXEC=y
CONFIG_FEATURE_FIND_USER=y
CONFIG_FEATURE_FIND_GROUP=y
CONFIG_FEATURE_FIND_NOT=y
CONFIG_FEATURE_FIND_DEPTH=y
CONFIG_FEATURE_FIND_PAREN=y
CONFIG_FEATURE_FIND_SIZE=y
CONFIG_FEATURE_FIND_PRUNE=y
CONFIG_FEATURE_FIND_DELETE=y
CONFIG_FEATURE_FIND_PATH=y
CONFIG_FEATURE_FIND_REGEX=y
# CONFIG_FEATURE_FIND_CONTEXT is not set
CONFIG_FEATURE_FIND_LINKS=y
CONFIG_GREP=y
CONFIG_FEATURE_GREP_EGREP_ALIAS=y
CONFIG_FEATURE_GREP_FGREP_ALIAS=y
CONFIG_FEATURE_GREP_CONTEXT=y
CONFIG_XARGS=y
CONFIG_FEATURE_XARGS_SUPPORT_CONFIRMATION=y
CONFIG_FEATURE_XARGS_SUPPORT_QUOTES=y
CONFIG_FEATURE_XARGS_SUPPORT_TERMOPT=y
CONFIG_FEATURE_XARGS_SUPPORT_ZERO_TERM=y
#
# Init Utilities
#
# CONFIG_BOOTCHARTD is not set
# CONFIG_FEATURE_BOOTCHARTD_BLOATED_HEADER is not set
# CONFIG_FEATURE_BOOTCHARTD_CONFIG_FILE is not set
CONFIG_HALT=y
# CONFIG_FEATURE_CALL_TELINIT is not set
CONFIG_TELINIT_PATH=""
CONFIG_INIT=y
CONFIG_FEATURE_USE_INITTAB=y
# CONFIG_FEATURE_KILL_REMOVED is not set
CONFIG_FEATURE_KILL_DELAY=0
CONFIG_FEATURE_INIT_SCTTY=y
CONFIG_FEATURE_INIT_SYSLOG=y
CONFIG_FEATURE_EXTRA_QUIET=y
33
Contenu masqué
#
# Login/Password Management Utilities
#
# CONFIG_ADD_SHELL is not set
# CONFIG_REMOVE_SHELL is not set
CONFIG_FEATURE_SHADOWPASSWDS=y
CONFIG_USE_BB_PWD_GRP=y
CONFIG_USE_BB_SHADOW=y
CONFIG_USE_BB_CRYPT=y
CONFIG_USE_BB_CRYPT_SHA=y
CONFIG_ADDUSER=y
CONFIG_FEATURE_ADDUSER_LONG_OPTIONS=y
# CONFIG_FEATURE_CHECK_NAMES is not set
CONFIG_FIRST_SYSTEM_ID=1000
CONFIG_LAST_SYSTEM_ID=9999
CONFIG_ADDGROUP=y
CONFIG_FEATURE_ADDGROUP_LONG_OPTIONS=y
CONFIG_FEATURE_ADDUSER_TO_GROUP=y
CONFIG_DELUSER=y
CONFIG_DELGROUP=y
CONFIG_FEATURE_DEL_USER_FROM_GROUP=y
CONFIG_GETTY=y
CONFIG_LOGIN=y
# CONFIG_LOGIN_SESSION_AS_CHILD is not set
# CONFIG_PAM is not set
CONFIG_LOGIN_SCRIPTS=y
# CONFIG_FEATURE_NOLOGIN is not set
# CONFIG_FEATURE_SECURETTY is not set
CONFIG_PASSWD=y
CONFIG_FEATURE_PASSWD_WEAK_CHECK=y
CONFIG_CRYPTPW=y
CONFIG_CHPASSWD=y
CONFIG_FEATURE_DEFAULT_PASSWD_ALGO="md5"
CONFIG_SU=y
CONFIG_FEATURE_SU_SYSLOG=y
CONFIG_FEATURE_SU_CHECKS_SHELLS=y
CONFIG_SULOGIN=y
# CONFIG_VLOCK is not set
#
# Linux Ext2 FS Progs
#
CONFIG_CHATTR=y
CONFIG_FSCK=y
34
Contenu masqué
CONFIG_LSATTR=y
CONFIG_TUNE2FS=y
#
# Linux Module Utilities
#
# CONFIG_MODINFO is not set
# CONFIG_MODPROBE_SMALL is not set
# CONFIG_FEATURE_MODPROBE_SMALL_OPTIONS_ON_CMDLINE is not set
# CONFIG_FEATURE_MODPROBE_SMALL_CHECK_ALREADY_LOADED is not set
# CONFIG_INSMOD is not set
# CONFIG_RMMOD is not set
# CONFIG_LSMOD is not set
# CONFIG_FEATURE_LSMOD_PRETTY_2_6_OUTPUT is not set
# CONFIG_MODPROBE is not set
# CONFIG_FEATURE_MODPROBE_BLACKLIST is not set
# CONFIG_DEPMOD is not set
#
# Options common to multiple modutils
#
# CONFIG_FEATURE_2_4_MODULES is not set
# CONFIG_FEATURE_INSMOD_TRY_MMAP is not set
# CONFIG_FEATURE_INSMOD_VERSION_CHECKING is not set
# CONFIG_FEATURE_INSMOD_KSYMOOPS_SYMBOLS is not set
# CONFIG_FEATURE_INSMOD_LOADINKMEM is not set
# CONFIG_FEATURE_INSMOD_LOAD_MAP is not set
# CONFIG_FEATURE_INSMOD_LOAD_MAP_FULL is not set
# CONFIG_FEATURE_CHECK_TAINTED_MODULE is not set
# CONFIG_FEATURE_MODUTILS_ALIAS is not set
# CONFIG_FEATURE_MODUTILS_SYMBOLS is not set
CONFIG_DEFAULT_MODULES_DIR=""
CONFIG_DEFAULT_DEPMOD_FILE=""
#
# Linux System Utilities
#
CONFIG_BLOCKDEV=y
CONFIG_MDEV=y
CONFIG_FEATURE_MDEV_CONF=y
CONFIG_FEATURE_MDEV_RENAME=y
CONFIG_FEATURE_MDEV_RENAME_REGEXP=y
CONFIG_FEATURE_MDEV_EXEC=y
CONFIG_FEATURE_MDEV_LOAD_FIRMWARE=y
CONFIG_REV=y
CONFIG_ACPID=y
CONFIG_FEATURE_ACPID_COMPAT=y
CONFIG_BLKID=y
# CONFIG_FEATURE_BLKID_TYPE is not set
CONFIG_DMESG=y
35
Contenu masqué
36
Contenu masqué
CONFIG_RDATE=y
CONFIG_RDEV=y
CONFIG_READPROFILE=y
CONFIG_RTCWAKE=y
CONFIG_SCRIPT=y
CONFIG_SCRIPTREPLAY=y
# CONFIG_SETARCH is not set
CONFIG_SWAPONOFF=y
CONFIG_FEATURE_SWAPON_PRI=y
# CONFIG_SWITCH_ROOT is not set
CONFIG_UMOUNT=y
CONFIG_FEATURE_UMOUNT_ALL=y
#
# Common options for mount/umount
#
CONFIG_FEATURE_MOUNT_LOOP=y
CONFIG_FEATURE_MOUNT_LOOP_CREATE=y
# CONFIG_FEATURE_MTAB_SUPPORT is not set
CONFIG_VOLUMEID=y
#
# Filesystem/Volume identification
#
CONFIG_FEATURE_VOLUMEID_EXT=y
CONFIG_FEATURE_VOLUMEID_BTRFS=y
# CONFIG_FEATURE_VOLUMEID_REISERFS is not set
CONFIG_FEATURE_VOLUMEID_FAT=y
CONFIG_FEATURE_VOLUMEID_EXFAT=y
# CONFIG_FEATURE_VOLUMEID_HFS is not set
# CONFIG_FEATURE_VOLUMEID_JFS is not set
CONFIG_FEATURE_VOLUMEID_XFS=y
# CONFIG_FEATURE_VOLUMEID_NILFS is not set
CONFIG_FEATURE_VOLUMEID_NTFS=y
CONFIG_FEATURE_VOLUMEID_ISO9660=y
CONFIG_FEATURE_VOLUMEID_UDF=y
# CONFIG_FEATURE_VOLUMEID_LUKS is not set
CONFIG_FEATURE_VOLUMEID_LINUXSWAP=y
# CONFIG_FEATURE_VOLUMEID_CRAMFS is not set
# CONFIG_FEATURE_VOLUMEID_ROMFS is not set
# CONFIG_FEATURE_VOLUMEID_SQUASHFS is not set
# CONFIG_FEATURE_VOLUMEID_SYSV is not set
# CONFIG_FEATURE_VOLUMEID_OCFS2 is not set
# CONFIG_FEATURE_VOLUMEID_LINUXRAID is not set
#
# Miscellaneous Utilities
#
CONFIG_CONSPY=y
CONFIG_LESS=y
37
Contenu masqué
CONFIG_FEATURE_LESS_MAXLINES=9999999
CONFIG_FEATURE_LESS_BRACKETS=y
CONFIG_FEATURE_LESS_FLAGS=y
CONFIG_FEATURE_LESS_MARKS=y
CONFIG_FEATURE_LESS_REGEXP=y
CONFIG_FEATURE_LESS_WINCH=y
CONFIG_FEATURE_LESS_ASK_TERMINAL=y
CONFIG_FEATURE_LESS_DASHCMD=y
CONFIG_FEATURE_LESS_LINENUMS=y
# CONFIG_NANDWRITE is not set
# CONFIG_NANDDUMP is not set
CONFIG_SETSERIAL=y
# CONFIG_UBIATTACH is not set
# CONFIG_UBIDETACH is not set
# CONFIG_UBIMKVOL is not set
# CONFIG_UBIRMVOL is not set
# CONFIG_UBIRSVOL is not set
# CONFIG_UBIUPDATEVOL is not set
CONFIG_ADJTIMEX=y
CONFIG_BBCONFIG=y
CONFIG_FEATURE_COMPRESS_BBCONFIG=y
CONFIG_BEEP=y
CONFIG_FEATURE_BEEP_FREQ=4000
CONFIG_FEATURE_BEEP_LENGTH_MS=30
CONFIG_CHAT=y
CONFIG_FEATURE_CHAT_NOFAIL=y
# CONFIG_FEATURE_CHAT_TTY_HIFI is not set
CONFIG_FEATURE_CHAT_IMPLICIT_CR=y
CONFIG_FEATURE_CHAT_SWALLOW_OPTS=y
CONFIG_FEATURE_CHAT_SEND_ESCAPES=y
CONFIG_FEATURE_CHAT_VAR_ABORT_LEN=y
CONFIG_FEATURE_CHAT_CLR_ABORT=y
CONFIG_CHRT=y
CONFIG_CROND=y
CONFIG_FEATURE_CROND_D=y
CONFIG_FEATURE_CROND_CALL_SENDMAIL=y
CONFIG_FEATURE_CROND_DIR="/var/spool/cron"
# CONFIG_CRONTAB is not set
CONFIG_DC=y
CONFIG_FEATURE_DC_LIBM=y
# CONFIG_DEVFSD is not set
# CONFIG_DEVFSD_MODLOAD is not set
# CONFIG_DEVFSD_FG_NP is not set
# CONFIG_DEVFSD_VERBOSE is not set
# CONFIG_FEATURE_DEVFS is not set
CONFIG_DEVMEM=y
CONFIG_EJECT=y
CONFIG_FEATURE_EJECT_SCSI=y
CONFIG_FBSPLASH=y
# CONFIG_FLASHCP is not set
38
Contenu masqué
#
# Networking Utilities
#
CONFIG_NAMEIF=y
CONFIG_FEATURE_NAMEIF_EXTENDED=y
CONFIG_NBDCLIENT=y
CONFIG_NC=y
CONFIG_NC_SERVER=y
CONFIG_NC_EXTRA=y
# CONFIG_NC_110_COMPAT is not set
CONFIG_PING=y
CONFIG_PING6=y
39
Contenu masqué
CONFIG_FEATURE_FANCY_PING=y
CONFIG_WHOIS=y
CONFIG_FEATURE_IPV6=y
# CONFIG_FEATURE_UNIX_LOCAL is not set
CONFIG_FEATURE_PREFER_IPV4_ADDRESS=y
# CONFIG_VERBOSE_RESOLUTION_ERRORS is not set
CONFIG_ARP=y
CONFIG_ARPING=y
CONFIG_BRCTL=y
CONFIG_FEATURE_BRCTL_FANCY=y
CONFIG_FEATURE_BRCTL_SHOW=y
# CONFIG_DNSD is not set
CONFIG_ETHER_WAKE=y
CONFIG_FAKEIDENTD=y
# CONFIG_FTPD is not set
# CONFIG_FEATURE_FTP_WRITE is not set
# CONFIG_FEATURE_FTPD_ACCEPT_BROKEN_LIST is not set
CONFIG_FTPGET=y
CONFIG_FTPPUT=y
CONFIG_FEATURE_FTPGETPUT_LONG_OPTIONS=y
CONFIG_HOSTNAME=y
# CONFIG_HTTPD is not set
# CONFIG_FEATURE_HTTPD_RANGES is not set
# CONFIG_FEATURE_HTTPD_USE_SENDFILE is not set
# CONFIG_FEATURE_HTTPD_SETUID is not set
# CONFIG_FEATURE_HTTPD_BASIC_AUTH is not set
# CONFIG_FEATURE_HTTPD_AUTH_MD5 is not set
# CONFIG_FEATURE_HTTPD_CGI is not set
# CONFIG_FEATURE_HTTPD_CONFIG_WITH_SCRIPT_INTERPR is not set
# CONFIG_FEATURE_HTTPD_SET_REMOTE_PORT_TO_ENV is not set
# CONFIG_FEATURE_HTTPD_ENCODE_URL_STR is not set
# CONFIG_FEATURE_HTTPD_ERROR_PAGES is not set
# CONFIG_FEATURE_HTTPD_PROXY is not set
# CONFIG_FEATURE_HTTPD_GZIP is not set
CONFIG_IFCONFIG=y
CONFIG_FEATURE_IFCONFIG_STATUS=y
CONFIG_FEATURE_IFCONFIG_SLIP=y
CONFIG_FEATURE_IFCONFIG_MEMSTART_IOADDR_IRQ=y
CONFIG_FEATURE_IFCONFIG_HW=y
CONFIG_FEATURE_IFCONFIG_BROADCAST_PLUS=y
CONFIG_IFENSLAVE=y
CONFIG_IFPLUGD=y
CONFIG_IFUPDOWN=y
CONFIG_IFUPDOWN_IFSTATE_PATH="/var/run/ifstate"
CONFIG_FEATURE_IFUPDOWN_IP=y
CONFIG_FEATURE_IFUPDOWN_IP_BUILTIN=y
# CONFIG_FEATURE_IFUPDOWN_IFCONFIG_BUILTIN is not set
CONFIG_FEATURE_IFUPDOWN_IPV4=y
CONFIG_FEATURE_IFUPDOWN_IPV6=y
CONFIG_FEATURE_IFUPDOWN_MAPPING=y
40
Contenu masqué
#
# Common options for tftp/tftpd
#
CONFIG_FEATURE_TFTP_GET=y
CONFIG_FEATURE_TFTP_PUT=y
CONFIG_FEATURE_TFTP_BLOCKSIZE=y
CONFIG_FEATURE_TFTP_PROGRESS_BAR=y
41
Contenu masqué
#
# Print Utilities
#
# CONFIG_LPD is not set
# CONFIG_LPR is not set
# CONFIG_LPQ is not set
#
# Mail Utilities
#
CONFIG_MAKEMIME=y
CONFIG_FEATURE_MIME_CHARSET="us-ascii"
CONFIG_POPMAILDIR=y
CONFIG_FEATURE_POPMAILDIR_DELIVERY=y
CONFIG_REFORMIME=y
CONFIG_FEATURE_REFORMIME_COMPAT=y
CONFIG_SENDMAIL=y
42
Contenu masqué
#
# Process Utilities
#
CONFIG_IOSTAT=y
CONFIG_LSOF=y
CONFIG_MPSTAT=y
CONFIG_NMETER=y
CONFIG_PMAP=y
CONFIG_POWERTOP=y
CONFIG_PSTREE=y
CONFIG_PWDX=y
CONFIG_SMEMCAP=y
CONFIG_TOP=y
CONFIG_FEATURE_TOP_CPU_USAGE_PERCENTAGE=y
CONFIG_FEATURE_TOP_CPU_GLOBAL_PERCENTS=y
CONFIG_FEATURE_TOP_SMP_CPU=y
CONFIG_FEATURE_TOP_DECIMALS=y
CONFIG_FEATURE_TOP_SMP_PROCESS=y
CONFIG_FEATURE_TOPMEM=y
CONFIG_UPTIME=y
CONFIG_FEATURE_UPTIME_UTMP_SUPPORT=y
CONFIG_FREE=y
CONFIG_FUSER=y
CONFIG_KILL=y
CONFIG_KILLALL=y
CONFIG_KILLALL5=y
CONFIG_PGREP=y
CONFIG_PIDOF=y
CONFIG_FEATURE_PIDOF_SINGLE=y
CONFIG_FEATURE_PIDOF_OMIT=y
CONFIG_PKILL=y
CONFIG_PS=y
# CONFIG_FEATURE_PS_WIDE is not set
# CONFIG_FEATURE_PS_LONG is not set
CONFIG_FEATURE_PS_TIME=y
CONFIG_FEATURE_PS_ADDITIONAL_COLUMNS=y
# CONFIG_FEATURE_PS_UNUSUAL_SYSTEMS is not set
CONFIG_RENICE=y
CONFIG_BB_SYSCTL=y
CONFIG_FEATURE_SHOW_THREADS=y
CONFIG_WATCH=y
#
# Runit Utilities
#
# CONFIG_RUNSV is not set
# CONFIG_RUNSVDIR is not set
# CONFIG_FEATURE_RUNSVDIR_LOG is not set
# CONFIG_SV is not set
43
Contenu masqué
CONFIG_SV_DEFAULT_SERVICE_DIR=""
# CONFIG_SVLOGD is not set
CONFIG_CHPST=y
CONFIG_SETUIDGID=y
CONFIG_ENVUIDGID=y
CONFIG_ENVDIR=y
# CONFIG_SOFTLIMIT is not set
# CONFIG_CHCON is not set
# CONFIG_FEATURE_CHCON_LONG_OPTIONS is not set
# CONFIG_GETENFORCE is not set
# CONFIG_GETSEBOOL is not set
# CONFIG_LOAD_POLICY is not set
# CONFIG_MATCHPATHCON is not set
# CONFIG_RESTORECON is not set
# CONFIG_RUNCON is not set
# CONFIG_FEATURE_RUNCON_LONG_OPTIONS is not set
# CONFIG_SELINUXENABLED is not set
# CONFIG_SETENFORCE is not set
# CONFIG_SETFILES is not set
# CONFIG_FEATURE_SETFILES_CHECK_OPTION is not set
# CONFIG_SETSEBOOL is not set
# CONFIG_SESTATUS is not set
#
# Shells
#
CONFIG_ASH=y
CONFIG_ASH_BASH_COMPAT=y
# CONFIG_ASH_IDLE_TIMEOUT is not set
CONFIG_ASH_JOB_CONTROL=y
CONFIG_ASH_ALIAS=y
CONFIG_ASH_GETOPTS=y
CONFIG_ASH_BUILTIN_ECHO=y
CONFIG_ASH_BUILTIN_PRINTF=y
CONFIG_ASH_BUILTIN_TEST=y
CONFIG_ASH_CMDCMD=y
# CONFIG_ASH_MAIL is not set
CONFIG_ASH_OPTIMIZE_FOR_SIZE=y
CONFIG_ASH_RANDOM_SUPPORT=y
CONFIG_ASH_EXPAND_PRMT=y
# CONFIG_CTTYHACK is not set
# CONFIG_HUSH is not set
# CONFIG_HUSH_BASH_COMPAT is not set
# CONFIG_HUSH_BRACE_EXPANSION is not set
# CONFIG_HUSH_HELP is not set
# CONFIG_HUSH_INTERACTIVE is not set
# CONFIG_HUSH_SAVEHISTORY is not set
# CONFIG_HUSH_JOB is not set
# CONFIG_HUSH_TICK is not set
# CONFIG_HUSH_IF is not set
44
Contenu masqué
#
# System Logging Utilities
#
CONFIG_SYSLOGD=y
CONFIG_FEATURE_ROTATE_LOGFILE=y
CONFIG_FEATURE_REMOTE_LOG=y
CONFIG_FEATURE_SYSLOGD_DUP=y
CONFIG_FEATURE_SYSLOGD_CFG=y
CONFIG_FEATURE_SYSLOGD_READ_BUFFER_SIZE=256
CONFIG_FEATURE_IPC_SYSLOG=y
CONFIG_FEATURE_IPC_SYSLOG_BUFFER_SIZE=4
CONFIG_LOGREAD=y
CONFIG_FEATURE_LOGREAD_REDUCED_LOCKING=y
CONFIG_FEATURE_KMSG_SYSLOG=y
CONFIG_KLOGD=y
#
# klogd should not be used together with syslog to kernel printk
buffer
#
CONFIG_FEATURE_KLOGD_KLOGCTL=y
# CONFIG_LOGGER is not set
Retourner au texte.
45
Contenu masqué
#!/bin/sh
ICI=$(pwd)
CHEMIN=./rootbase
echo "Le chemin de création est $CHEMIN."
echo "Création en cours ..."
cd $CHEMIN
find ./* -print | cpio -o -Hnewc > $ICI/RIM.cpio
cd $ICI
cat RIM.cpio | gzip -9 > RIM.cpio.gz
echo "Fait."
echo "Faites-vous plaisir avec votre système."
Retourner au texte.
Le bootloader utilisé va être syslinux. Attention aux confusions, car syslinux est une ”suite” de
bootloader qui comporte :
— syslinux : pour booter à partir d’une FAT32.
— isolinux : pour booter à partir d’un CD.
— extlinux : pour booter à partir d’un ext[2/3/4] ou d’un btrfs.
— pxelinux : pour booter en utilisant la technologie PXE (boot à partir du réseau).
Nous allons utiliser, parmi syslinux, syslinux. Clair ? Nous aurions pu choisir extlinux, mais une
clé en FAT32 a le gros avantage d’être compatible avec un nombre cataclysmique d’OS (dont
Windows et OS X), ce qui est toujours appréciable.
Les raisons du choix de cette suite :
— Les différents bootloader de la suite obéissent à la même syntaxe en ce qui concerne la
configuration.
— Les bootloader de cette suite sont utilisables dans nombre de situations, pas uniquement
celle qui nous intéresse ici.
— Les bootloader de cette suite ont la réputation d’être légers (et robustes).
— Les bootloader de cette suite peuvent changer dynamiquement de configuration (je pense
à lilo, qui n’a pas forcément cette souplesse).
— Il est relativement simple de créer un menu (même graphique) avec ces bootloader.
On télécharge syslinux ici (encore une fois, le plus récent est tout en bas ), on décompresse
dans build, et on ne compile pas.
46
Contenu masqué
?
Mais ... Pourquoi ?
Parce que les binaires sont déjà inclus, et qu’on ne va pas repasser du temps sur un truc qui
doit de toute façon être un binaire générique.
On va créer le dossier boot/syslinux sur la clé, et on va y mettre :
— bios/com32/chain/chain.c32
— bios/com32/menu/menu.c32
— bios/com32/modules/poweroff.c32
— bios/com32/modules/reboot.c32
— bios/com32/modules/config.c32
— bios/com32/elflink/ldlinux/ldlinux.c32
— bios/com32/libutil/libutil.c32
Note : les chemins sont donnés à partir de la racine de l’archive décompressée de syslinux. De
plus, on ne recrée pas les dossiers en question, on met tous les fichiers dans boot/syslinux,
sans sous-dossiers.
Ensuite, on fait la commande suivante :
# [chemin_vers_racine_syslinux]/bios/extlinux/extlinux --install
[chemin_vers_clé_usb]/boot/syslinux
On fait une copie bit-à-bit (dd) de 1 (count=1) bloc de 440 octets (bs=440) sans troncature
(conv=notrunc) de la source (if=) à la destination (of=).
UI menu.c32
PROMPT 0
47
Contenu masqué
LABEL rim
MENU LABEL RIM-Linux
LINUX ../bzImage
APPEND root=none rw
INITRD ../RIM.cpio.gz
LABEL poweroff
MENU LABEL Power off
COM32 poweroff.c32
LABEL reboot
MENU LABEL Reboot
COM32 reboot.c32
Retourner au texte.
Il va nous falloir recréer l’arborescence de base de l’UEFI. On va donc créer 2 dossiers sur la
clé :
— EFI
— EFI/Boot
La suite syslinux peut être utilisée (comme pour le BIOS), pour l’UEFI, mais (et c’est le plus
embêtant) il n’y a pas de support du chainload.
?
Gné ? Chainload ?
Le chainload c’est quand votre bootloader ne sait pas charger un OS particulier. Il va alors passer
la main à un autre bootloader (en fait à un binaire quelconque) qui lui va faire le boulot. Tout
ça pour vous dire que vous ne pourrez charger que des OS type UNIX avec syslinux UEFI.
Je vous propose donc une alternative : gummiboot. Ce programme est fait uniquement pour
l’UEFI, mais ce n’est pas un bootloader, c’est un bootmanager, c’est-à-dire qu’il ne fait que du
chainload.
?
Mais s’il ne peut pas booter linux, à quoi ça sert ?
48
Contenu masqué
En fait, il peut. En effet, les noyaux récents permettent d’inclure un mini-booloader, EFI stub,
qui ne fait que charger son noyau. On peut donc avec gummiboot chainloader sur l’EFI stub,
donc sur le fichier du noyau, et faire booter ce dernier. Cette méthode est notamment utilisée
par archlinux pour ses installations UEFI.
Mais également, comme il peut chainload, il peut chainloader sur ... syslinux !
Vous avez donc le choix entre 3 configurations :
— Syslinux seul, si vous n’avez besoin de rien d’autre.
— Gummiboot seul, si vous avez besoin du chainload et que vous ne voulez pas vous prendre
la tête à faire 2 installation et configuration successives.
— Gummiboot par-dessus syslinux, pour une installation robuste et complète.
Dans tous les cas, l’installation ne change pas, c’est uniquement la configuration de gummiboot
qui change (si gummiboot il y a).
9.1. Installation
9.1.1. Syslinux
Note : je vais utiliser dans la suite le répertoire [syslinux]. Celui-ci correspond au EFI/Boot de
la clé si vous voulez installer syslinux seul, ou EFI/syslinux si vous voulez faire un gummiboot
par dessus syslinux. Comme pour un syslinux BIOS, on décompresse l’archive du projet, puis
ensuite on copie quelques fichiers dans [syslinux] :
— efi64/com32/elflink/ldlinux/ldlinux.e64
— efi64/com32/elflink/ldlinux/ldlinux.elf
— efi64/com32/menu/menu.c32
— efi64/com32/modules/poweroff.c32
— efi64/com32/modules/config.c32
— efi64/com32/modules/reboot.c32
— efi64/com32/chain/chain.c32
— efi64/com32/libutil/libutil.c32
— efi64/com32/lib/libcom32.c32
— efi64/com32/lib/libcom32.elf
Et c’est tout !
9.1.2. Gummiboot
Je vous ai mis le binaire d’archlinux ici (en cas de problèmes pour le télécharger envoyez un
mail ou un MP), il devrait marcher pour tout le monde. Vous le mettez dans EFI/Boot, avec
comme nom bootx64.efi, et c’est fini.
49
Contenu masqué
9.2. Configuration
9.2.1. Syslinux
C’est la même que celle d’un syslinux BIOS, je vous renvoie donc à la partie précédente. Le seul
changement est que le fameux fichier syslinux.cfg ne sera pas mis dans boot/syslinux
mais dans [syslinux].
9.2.2. Gummiboot
default rim
timeout 4
Dans loader/entries/rim.conf :
title RIM-Linux
linux /boot/bzImage
initrd /boot/RIM.cpio.gz
options root=none rw
default syslinux
timeout 4
Dans loader/entries/syslinux.conf :
Retourner au texte.
50
Contenu masqué
# INIT
::sysinit:/etc/init.d/rcS
# Shells
tty1::respawn:-/bin/ash
tty2::askfirst:-/bin/ash
tty3::respawn:/sbin/getty 38400 /dev/tty3 linux
tty4::respawn:/sbin/getty 38400 /dev/tty4 linux
# Restarting init ?
::restart:/sbin/init
# Before rebooting
::ctrlaltdel:/sbin/reboot
::shutdown:/etc/init.d/rc.shutdown
Retourner au texte.
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin
LD_LIBRARY_PATH=/lib:/usr/lib:/usr/local/lib
TERM=linux
HOME=/root
DISPLAY=:0
LANG=FR_fr
export LANG PATH LD_LIBRARY_PATH
umask 026
Retourner au texte.
Udev requiert qu’il y ait un sysfs dans /sys. Udev va servir à remplir /dev avec ce qui est
présent sur le système. Il gère le coldplug et le hotplug. Depuis 2014 le code source d’udev a été
fusionné avec celui de systemd, qui est un remplaçant d’un init de type UNIX tel que celui de
busybox.
?
Mais alors, c’est quoi le problème avec systemd ?
51
Contenu masqué
Systemd n’est pas spécialement adapté à notre usage. En effet, il n’est pas aussi simple de ne
pas lui faire monter une partition sur / qu’avec celui de busybox, il n’est pas aussi léger, et
surtout son intérêt principal est de paralléliser les tâches pour un boot plus rapide. Or, nous
n’avons pas ce besoin, puisqu’il n’y a presque aucune tâche !
Personnellement, après avoir choisi dans le bootloader de booter ce tux, je boote sur un Acer
Aspire One en 2s50, donc je pense que nous n’avons pas forcément un fort besoin de paralléliser
les tâches. D’autant plus que systemd requiert d’utiliser dbus, ce qui fait que l’on va, avec ces 2
programmes, déjà alourdir nettement le système. Normalement, il est possible de compiler udev
sans compiler tout systemd (les programmes sont séparés), mais je n’ai pas encore assez exploré
cette possibilité, donc pour l’instant je n’en parle pas. Il est donc très fortement recommandé de
passer par mdev. Retourner au texte.
Comme udev, il faut qu’il y ait un sysfs dans /sys, sauf qu’il n’utilise pas la même syntaxe,
et surtout n’utilise qu’un seul fichier de configuration facultatif.
On le lance avec mtab -s. Retourner au texte.
#!/bin/sh
ROOTFS_IMG=RIM.cpio.gz
Il ressemble un peu au premier script pour générer l’archive cpio, mais avec quelques ajouts :
— Il faut stocker la nouvelle archive dans la clé, il faut donc qu’elle soit montée, ce qu’on
vérifie avec mountpoint /home. On redirige la sortie de cette commande dans le vide
cosmique parce qu’elle sort ”c’est bien une partition”, ce dont on n’a pas besoin puisque
c’est un script, et donc on ne veut pas polluer la sortie à l’écran avec n’importe quoi.
52
Contenu masqué
— grep permet de ne prendre que les résultats comportant l’expression passée en paramètre.
L’option -v permet d’inverser ce fonctionnement : grep filtre tout les résultats contenant
l’expression en question en les enlevant.
Retourner au texte.
#!/bin/sh
#/sbin/udevd --daemon&
#/sbin/udevstart&
#echo "/sbin/udev" > /proc/sys/kernel/hotplug
#mdev -s
#echo "/sbin/mdev" > /proc/sys/kernel/hotplug
# ===============
# Klogd
/sbin/klogd -c 2
53
Contenu masqué
# ================
# Hostname
/bin/hostname rim-linux
# Loopback
/sbin/ifconfig lo up
# Clear screen
clear
Retourner au texte.
#!/bin/sh
else
# Waiting system full-boot to mount usb-stick
sleep 3
/bin/mount -U $home /home
fi
Retourner au texte.
#!/bin/sh
echo "Umounting all filesystems..."
54
Contenu masqué
then
/bin/umount -r /home
fi
/bin/umount -a -r
echo "Shutting off swap ..."
/sbin/swapoff -a
Retourner au texte.
55