Linux en RAM: façon debirf
Voulez-vous avoir une vitesse de disque absolue de nos jours, n'est-ce pas? Revoyons comment cela pourrait être fait avec la gestion des versions et l'automatisation en 2018.
Du modérateur: un article en anglais nous est parvenu dans le Sandbox. Nous l'avons lu et avons décidé de le publier comme une expérience du vendredi. Ne jugez pas strictement, tout le monde paix et bon vendredi! Rassemblons-nous! En bref, du fond des coeurs Aua.
Journal des modifications:
- La langue de l'article est corrigée en anglais
- exemple de dépôt introduit sur github
- Paramètres de test ajoutés
- asciicast ajouté
Vous devez savoir avant d'exécuter ce didacticiel:
- linux essentiel
- la principale différence entre bash et sh (debirf écrit sur sh, donc je recommande de suivre le style)
- comment formater la clé usb (en aucune façon)
- quels pilotes sont nécessaires pour votre matériel (ou vous pouvez le déboguer via dmesg | lspci)
- comment atteindre vos objectifs de tâche via les scripts
vous pouvez remplacer:
- lettre usb de
/dev/sdb
à tout autre ( /dev/sdd
) - répertoire de travail de
/root/Projects/debirf/
à votre choix ( /home/username/Documents/debirf
) - point de montage de
/media/root/8B46-1189
vers /media/username/myflashdrive
Étapes de préparation
Ils permettent (en option) d'activer des composants non libres pour une installation de base. De plus, je pense que vous aurez besoin du référentiel non libre.
- ligne ouverte numéro 107 du fichier
/usr/bin/debirf
comme nano +107 $(which debirf)
- fonction find
create_debootstrap
- trouver la ligne comme
local OPTS="
- ajouter
--components main,contrib,non-free
entre parenthèses
Jusqu'à commencer:
Imaginons, notre lecteur flash:
- doit être rapide, il est donc recommandé d'utiliser la classe 8+, ou le démarrage prendra suffisamment de temps
- / dev / sdb
- formaté
- monté sur
/media/root/8B46-1189
. - notre répertoire de travail
/root/Projects/debirf/
Installer debirf
apt-get install -yq debirf mtools genisoimage
- mtools nécessaires pour créer iso via debirf (ne fonctionne pas, mais nécessaire)
- genisoimage nécessaire pour créer une véritable iso fonctionnelle (facultatif)
Préparer le répertoire de travail debirf
mkdir -p /root/Projects/debirf tar xzf /usr/share/doc/debirf/example-profiles/rescue.tgz -C /root/Projects/debirf cd /root/Projects/debirf/rescue
DEBIRF_LABEL="debirf-rescue" DEBIRF_SUITE=stretch DEBIRF_DISTRO=debian DEBIRF_MIRROR=http://ftp.ru.debian.org/debian/
Créer LiR
- Exécutez
debirf make .
et partez. Il a besoin de beaucoup de temps, au minimum 15 minutes sur le matériel supérieur. - Exécutez
debirf makeiso .
pour créer iso ne fonctionne pas (nécessaire pour le fichier grub.cfg)
Testez-le
- Installer qemu
- pour linux:
apt-get install -yq qemu
- pour macos:
brew install qemu
- décider quelles ressources seront allouées pour VM
-smp 1
1 vrai noyau-m 1G
mémoire -m 1G
1G
- supplémentaire
-nographic
lancera VM dans la fenêtre de terminal actuelle--enable-kvm
permet l'accélération matérielle-kernel vmlinuz-*
permet de passer directement le noyau-initrd *.cgz
accès direct au fichier .cgz avec initramfs-append
permet de contourner les paramètres du noyau, voici les paramètres pour fonctionner sans shell graphique
La commande pour démarrer la machine virtuelle:
qemu-system-x86_64 --enable-kvm -kernel vmlinuz-* -initrd *.cgz -append "console=tty0 console=ttyS0,115200n8" -m 1G -smp 1 -net nic,vlan=0 -net user -nographic
Échantillon d'essai

Installez grub sur le lecteur flash et copiez LiR dessus
Je vous recommande d'utiliser le démarrage et le package bios legacy grub-pc. Non testé avec UEFI, mais doit fonctionner. Les prochaines lignes seront faites:
- créer un point de montage (sur les systèmes à interface graphique activée, le montage automatique n'est pas nécessaire)
- Montez la clé USB sur le point de montage (sur les systèmes alimentés par une interface graphique, le montage automatique n'est pas nécessaire)
- installer grub
- copier le fichier grub
- copier initramfs (système)
- copier vmlinuz (noyau)
- démonter la clé usb
- supprimer le point de montage
mkdir -p /media/root/8B46-1189 mount /dev/sdb1 /media/root/8B46-1189 grub-install --boot-directory=/media/root/8B46-1189/boot /dev/sdb cp /root/Projects/debirf/rescue/iso/boot/grub/grub.cfg /media/root/8B46-1189/boot/grub/ cp /root/Projects/debirf/rescue/*.cgz /media/root/8B46-1189 cp /root/Projects/debirf/rescue/vmlinuz-* /media/root/8B46-1189 umount /media/root/8B46-1189 rm -rf /media/root/8B46-1189
Créer une iso amorçable (facultatif)
- télécharger isolinux.bin
- créer un fichier de configuration isolinux
- créer iso
mkdir -p rescue/iso/isolinux/ wget -O rescue/iso/isolinux/isolinux.bin 'http://mirror.yandex.ru/centos/7/os/x86_64/isolinux/isolinux.bin' cat << EOF > rescue/iso/isolinux/isolinux.cfg TIMEOUT 5 DEFAULT lir LABEL lir LINUX /vmlinuz-4.9.0-7-amd64 INITRD /debirf-rescue_stretch_4.9.0-7-amd64.cgz EOF genisoimage -b isolinux/isolinux.bin -c isolinux/boot.cat -no-emul-boot -boot-load-size 4 -boot-info-table -l -input-charset default -V LiR -A "Linux in RAM" -o rescue/rescue.iso rescue/iso/
Vérifier le résultat
- Installer l'hyperviseur QEMU
apt-get install -yq qemu
- exécutez
qemu-system-x86_64 -enable-kvm -m 512 -hda /dev/sdb
- si la commande précédente échoue, supprimez
-enable-kvm
- La VM sera démarrée, démarrée à partir de la clé USB
- vous devez voir deux éléments de menu, différence à la fin: console et série. Sélectionnez la première entrée.
- en ~ minute, vous verrez de nombreuses lignes. après la fin - appuyez sur entrée pour voir le message de bienvenue
- connexion: root, pas de mot de passe
Personnalisez-le: Créez un module debirf personnalisé
Module - script sh exécutable à exécuter pendant la création de LiR
- créer un fichier de module
- l'ordre des noms de fichiers est important. Dans le
network
fichiers network
le fichier de résolution sera remplacé par le fichier résolu par le système et vous ne pourrez pas travailler avec le réseau; - les lignes de 1 à 3 doivent être présentes, la ligne 3 doit présenter le nom du fichier
- si vous voulez installer le package - utilisez la construction
#DEBIRF_PACKAGE>+
- si vous voulez travailler avec rootfs - utilisez
$DEBIRF_ROOT
- si vous voulez exécuter la commande dans fakeroot - utilisez
debirf_exec
Échantillon:
cat <<< EOF > rescue/modules/mi
et remplacer la ligne avec resolved
dans le fichier rescue / modules / network avec debirf_exec systemctl enable wpa_supplicant@wlp1s0.service systemd-networkd.service systemd-resolved.service
Bonus: lxc sur LiR
sauvetage de modules / modules / lxc