yo!
Bon, j'viens aux nouvelles, ou plutôt vous en donner... J'ai finalement tenté l'aventure de l'initramfs, je cherchais désesperément la *bonne* doc pour le faire, mais je n'ai pas vraiment trouvé, donc, j'ai coupé les sources, et mijoté quelque chose de fonctionnel. Première remarque: c'est bien plus simple qu'il n'y parait. J'ai biensûr fait un initramfs à la main... comme on le disait plus haut... j'aime le camboui...
Ma motivation initiale était d'avoir tout de chiffré (sauf /boot évidemment), ensuite, ce thread m'avait rappellé que j'aurai bien aimé foutre du LVM la dedans, donc, ça nous donne:
sda1 - /boot
sda2 - une installe 64 bits temporaire depuis laquelle je fais en fait toutes mes manips, je pense que je la garderai en fait, en backup...
sda3 - rien
sda4 - dmcrypt machin en /dev/mapper/sda4
et par dessus cette partition (dé)chiffrée /dev/mapper/sda4, je viens foutre de LVM, avec tout plein de partitions logiques
Code: Select all
ls -l /dev/mapper/
total 0
lrwxrwxrwx 1 root root 16 2008-04-30 00:47 control -> ../device-mapper
brw-r----- 1 root disk 254, 0 2008-04-30 00:51 sda4
brw-r----- 1 root disk 254, 7 2008-04-30 00:51 vg-home
brw-r----- 1 root disk 254, 5 2008-04-30 00:51 vg-log
brw-r----- 1 root disk 254, 2 2008-04-30 00:51 vg-overlays
brw-r----- 1 root disk 254, 6 2008-04-30 00:51 vg-paludistmp
brw-r----- 1 root disk 254, 1 2008-04-30 00:51 vg-slash
brw-r----- 1 root disk 254, 3 2008-04-30 00:51 vg-src
brw-r----- 1 root disk 254, 9 2008-04-30 00:51 vg-suspend2disk
brw-r----- 1 root disk 254, 8 2008-04-30 00:51 vg-swap
brw-r----- 1 root disk 254, 4 2008-04-30 00:51 vg-tmp
(j'ai choisi de le faire comme ça mais le sens inverse est aussi possible, mais moins marrant quand faudra rentrer toutes les passphrases...)
Bref, alors voici en quelques points la démarche:
=> déjà l'idée c'est d'avoir un mini système linux à peine fonctionnel, il suffit qu'il ne fasse que ce dont on a besoin et rien de plus! Pour ce faire, en s'interesse à la doc des systèmes embarqués et compagnie... Donc déjà, y'a plusieurs écoles, dont celle avec klibc et une autre avec uclibc & busybox. J'ai opté pour la dernière.
Ensuite pour pouvoir compiler des packages en se servant de uclibc au lieu de glibc, il semble plus simple (pas trouvé d'autres méthodes en fait...) d'avoir un petit système chrooté pour ça. Sur le site de uclibc, en vous baladant un peu, vous trouverez la doc sur "buildroot" qui est exactement ce que nous cherchons. Le temps m'étant précieux, je prends un système déjà compilé, et le détargézaide chez moi pour en faire un système tout prèt pour être chrooté.
Une fois dans ce système, il "faut" (c'est plus roots quoi...) se recompiler un busybox avec que les applets qui nous interessent, et on le compile statiquement SVP, (de même pour tout ce qu'on compilera par la suite!)
Voici, en gros à quoi j'ai réduit busybox (bb) pour qu'il ne fasse que ce dont j'ai besoin
Code: Select all
root/pre-compiled-buildroot/root_fs/root/busybox-1.9.0/_install/bin/busybox --help
BusyBox v1.9.0 (2008-04-28 07:36:56 MDT) multi-call binary
Copyright (C) 1998-2007 Erik Andersen, Rob Landley, Denys Vlasenko
and others. Licensed under GPLv2.
See source distribution for full notice.
Usage: busybox [function] [arguments]...
or: function [arguments]...
BusyBox is a multi-call binary that combines many common Unix
utilities into a single executable. Most people will create a
link to busybox for each function they wish to use and BusyBox
will act like whatever it was invoked as!
Currently defined functions:
[, [[, ash, echo, halt, insmod, loadkmap, ls, mdev, mkdir, mknod, mount, poweroff, reboot, rm, sh, sleep, switch_root, test, umount
Vous remarquerez que votre bb de chez vous à beaucouuuuppp plus d'applets d'activés, et c'est normal! J'en ai encore 2-3 que je pourrais désactiver, mais je les laisse pour l'instant en prévison de ce qui viendra...
Ensuite vous essayé de faire pareil pour lvm, (le compiler statiquement, avec uclibc), vous découvrez ainsi, vos, peut-être premières, dépendances à résoudre à la main!
Il faut faire pareil pour cryptsetup, mais je n'ai pas réussi à le compiler, j'avais toujours une erreur, j'ai donc fini par récupérer celui de l'installe normale, qui était aussi compilé statiquement, et je m'en servirai à la place de celui que j'aurai bien voulu compiler avec uclibc, mais bon, on verra tout ça plus tard...
Une fois que vous avez tout vos utilitaires prets, il est l'heure d'écrire votre script /init qui se trouvera dans l'initramfs, et qui sera lancé tout seul après le chargement du noyau et autres joyeusetés...
Pour ce script, très simple, basez vous sur les quelques scripts que vous pourriez trouver sur la wibe, mais gardez un truc simple! J'ai vu trop du scripts un peu trop complets pour être quelque chose collant juste à mes besoins... Donc l'idée du script, est juste de faire se que vous feriez à la main pour déchiffrer la partition, et pour activer lvm dessus, faut juste mettre ça dans le script, puis monter la nouvelle racine, et faire le fameux switch_root de BB pour pouvoir enfin basculer sur la nouvelle racine.
=> Quand vous avez fait ça, il vous faut ensuite integrer ceci à l'image du noyau, toujours en gardant la roots attitude, vous préfererez la méthode makefile: dans le make menuconfig, au niveau de l'initramfs, donnez le chemin pour atteindre le makefile de votre initramfs, voici par exemple le mien, qui vous éclairciera probablement un peu plus que tout ce blabla:
Code: Select all
cat /usr/src/initramfs/makefile
# initramfs makefile
# /dev directory
dir /dev 0755 0 0
nod /dev/console 0644 0 0 c 5 1
nod /dev/null 0644 0 0 c 1 3
nod /dev/tty 0644 0 0 c 5 0
nod /dev/tty0 0644 0 0 c 4 0
# Empty dirs
dir /root 0700 0 0
dir /proc 0755 0 0
dir /sys 0755 0 0
dir /tmp 1755 0 0
# Init
file /init /root/pre-compiled-buildroot/root_fs/linuxrc-sam 0755 0 0
# /bin directory
dir /bin 0755 0 0
file /bin/busybox /root/pre-compiled-buildroot/root_fs/root/busybox-1.9.0/_install/bin/busybox 755 0 0
slink /bin/cat /bin/busybox 0755 0 0
slink /bin/echo /bin/busybox 0755 0 0
slink /bin/loadkmap /bin/busybox 0755 0 0
slink /bin/mknod /bin/busybox 0755 0 0
slink /bin/mount /bin/busybox 0755 0 0
slink /bin/mdev /bin/busybox 0755 0 0
slink /bin/reboot /bin/busybox 0755 0 0
slink /bin/sh /bin/busybox 0755 0 0
slink /bin/sleep /bin/busybox 0755 0 0
slink /bin/switch_root /bin/busybox 0755 0 0
slink /bin/umount /bin/busybox 0755 0 0
# /sbin directory
dir /sbin 0750 0 0
file /sbin/cryptsetup ../initramfs/cryptsetup-1.0.6 0755 0 0
file /sbin/lvm /root/pre-compiled-buildroot/root_fs/sbin/lvm.static 0755 0 0
slink /sbin/vgchange /sbin/lvm 0755 0 0
slink /sbin/vgscan /sbin/lvm 0755 0 0
#/etc directory
dir /etc 0755 0 0
dir /etc/lvm 0755 0 0
file /etc/lvm/lvm.conf /etc/lvm/lvm.conf 0644 0 0
file /etc/fr.keymap ../initramfs/fr.keymap 0644 0 0
# Newroot
dir /newroot 0700 0 0
Note: Si vous voulez faire joujou avec dmcrypt j'sais pas quoi, n'oubliez pas de faire basculer le layout de votre clavier, à celui de votre choix avant de rentrer votre passphrase, sinon ça ne marchera pas!
Compilez votre noyau, installez l'image dans /boot, et tester votre nouvelle installe. Bon ça ne marchera pas forcément parfaitement du premier coup, mais on arrive en fait très très vite/facilement à quelque chose d'utilisable, et ce malgré l'apparente pauvreté de doc pour nous aider. C'est tout simplement, comme dit plus haut, que c'est en fait bien plus simple que ce qu'on pourrait croire...
Voili-voilou, j'éspère que ça aidera

Au pire, je rôde toujours de temps à autre par ici, donc n'hésitez pas à demander