Linux en RAM: debirf way 2018

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 

Et configurez /root/Projects/debirf/rescue/debirf.conf


 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


asciicast


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 #!/bin/sh -e # debirf module: mi # prepare to run on mi notebook # # This script were written by # Eduard Generalov <eduard@generalov.net> # # They are Copyright 2018, and published under the MIT, #DEBIRF_PACKAGE>+firmware-iwlwifi #DEBIRF_PACKAGE>+firmware-misc-nonfree #DEBIRF_PACKAGE>+wpasupplicant echo 'iwlwifi' >> $DEBIRF_ROOT/etc/modules cat << EOF > $DEBIRF_ROOT/etc/wpa_supplicant/wpa_supplicant-wlp1s0.conf ctrl_interface=/run/wpa_supplicant update_config=1 network={ ssid="WiFi_SSID" psk="WIFIPASSWORD" } EOF cat << EOF > $DEBIRF_ROOT/etc/systemd/network/wireless.network [Match] Name=wlp1s0 [Network] DHCP=ipv4 [DHCP] RouteMetric=20 EOF 

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


 #!/bin/sh -e # debirf module: lxc # prepare lxc # # This script were written by # Eduard Generalov <eduard@generalov.net> # # They are Copyright 2018, and published under the MIT, #DEBIRF_PACKAGE>+lxc mkdir -p $DEBIRF_ROOT/root/.ssh/ ssh-keygen -b 2048 -t rsa -f $DEBIRF_ROOT/root/.ssh/id_rsa -q -N "" cp $DEBIRF_ROOT/root/.ssh/id_rsa $DEBIRF_ROOT/root/.ssh/authorized_keys chmod 400 $DEBIRF_ROOT/root/.ssh/authorized_keys debirf_exec systemctl enable lxc-net cat << EOF > $DEBIRF_ROOT/etc/lxc/default.conf lxc.network.type = veth lxc.network.link = lxc lxc.network.name = eth0 lxc.network.flags = up lxc.network.hwaddr = 00:FF:AA:FF:xx:xx lxc.mount.entry=/var/cache/apt var/cache/apt none bind,rw 0 0 lxc.mount.entry = /root/.ssh/ root/.ssh none bind,create=dir 0 0 EOF cat << EOF > $DEBIRF_ROOT/etc/default/lxc-net USE_LXC_BRIDGE="true" LXC_BRIDGE="lxc" LXC_ADDR="10.0.3.1" LXC_NETMASK="255.255.255.0" LXC_NETWORK="10.0.3.0/24" LXC_DHCP_RANGE="10.0.3.2,10.0.3.254" LXC_DHCP_MAX="253" LXC_DHCP_CONFILE="" LXC_DOMAIN="lxc" EOF 

Source: https://habr.com/ru/post/fr420501/


All Articles