Linux im RAM: Debirf Way 2018

Linux im RAM: debirf Weg


Möchten Sie heutzutage eine absolute Festplattengeschwindigkeit haben, nicht wahr? Lassen Sie uns überarbeiten, wie dies mit der Versionierung und Automatisierung im Jahr 2018 geschehen könnte.


Vom Moderator: Ein Artikel in englischer Sprache kam zu uns in die Sandbox. Wir haben es gelesen und beschlossen, es als Freitagsexperiment zu veröffentlichen. Beurteilen Sie nicht streng, alle Frieden und einen schönen Freitag! Lass uns zusammen kommen! Kurz gesagt, From the Bottom of Aua Hearts.

Changelog:


  • Die Sprache des Artikels ist in Englisch korrigiert
  • Beispiel-Repository bei github eingeführt
  • Testparameter hinzugefügt
  • Asciicast hinzugefügt

Sie müssen wissen, bevor Sie dieses Tutorial ausführen:


  • Linux unerlässlich
  • der Hauptunterschied zwischen bash und sh (debirf auf sh geschrieben, daher empfehle ich, dem Stil zu folgen)
  • wie man USB-Schlüssel formatiert (in irgendeiner Weise)
  • Welche Treiber werden für Ihre Hardware benötigt (oder Sie können sie über dmesg | lspci debuggen)?
  • wie Sie Ihre Aufgaben über das Scripting erreichen

Sie können ersetzen:


  • USB-Brief von /dev/sdb an einen anderen ( /dev/sdd )
  • Arbeitsverzeichnis von /root/Projects/debirf/ zu Ihrer Wahl ( /home/username/Documents/debirf )
  • Mountpoint von /media/root/8B46-1189 nach /media/username/myflashdrive

Schritte zur Vorbereitung


Sie ermöglichen (optional) nicht freie Komponenten für die Grundinstallation. Außerdem benötigen Sie meines Erachtens das nicht freie Repository.


  • offene Zeile Nummer 107 der Datei /usr/bin/debirf wie nano +107 $(which debirf)
  • create_debootstrap
  • finde Zeile wie local OPTS="
  • add --components main,contrib,non-free in Klammern

Bis zum Start:


Stellen wir uns unser Flash-Laufwerk vor:


  • muss schnell sein, daher wird empfohlen, die Klasse 8+ zu verwenden, da das Booten sonst genügend Zeit in Anspruch nimmt
  • / dev / sdb
  • formatiert
  • gemountet unter /media/root/8B46-1189 .
  • unser Arbeitsverzeichnis /root/Projects/debirf/

Installieren Sie debirf


 apt-get install -yq debirf mtools genisoimage 

  • mtools benötigt zum erstellen von iso via debirf (funktioniert nicht, wird aber benötigt)
  • Genisoimage benötigt, um echte Arbeits-ISO zu erstellen (optional)

Bereiten Sie das debirf-Arbeitsverzeichnis vor


 mkdir -p /root/Projects/debirf tar xzf /usr/share/doc/debirf/example-profiles/rescue.tgz -C /root/Projects/debirf cd /root/Projects/debirf/rescue 

Und konfigurieren Sie /root/Projects/debirf/rescue/debirf.conf


 DEBIRF_LABEL="debirf-rescue" DEBIRF_SUITE=stretch DEBIRF_DISTRO=debian DEBIRF_MIRROR=http://ftp.ru.debian.org/debian/ 

LiR erstellen


  • Führen Sie debirf make . und geh weg. Es benötigt viel Zeit, mindestens 15 Minuten auf der Top-Hardware.
  • Führen Sie debirf makeiso . zum Erstellen einer nicht funktionierenden ISO (wird für die Datei grub.cfg benötigt)

Testen Sie es


  • Installieren Sie qemu
    • für Linux: apt-get install -yq qemu
    • für macos: brew install qemu
  • Entscheiden Sie, welche Ressourcen für die VM zugewiesen werden sollen
    • -smp 1 1 echter Kernel
    • -m 1G 1G Speicher
  • zusätzlich
    • -nographic startet die VM im aktuellen Terminalfenster
    • --enable-kvm ermöglicht die Hardwarebeschleunigung
    • -kernel vmlinuz-* erlaube den Kernel direkt zu übergeben
    • -initrd *.cgz direkter Zugriff auf die .cgz-Datei mit initramfs
    • -append ermöglicht die Umgehung von Kernel-Parametern. Hier sind die Parameter für die Ausführung ohne grafische Shell

Der Befehl zum Starten der virtuellen Maschine:


 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 

Testprobe


Asciicast


Installieren Sie grub auf dem Flash-Laufwerk und kopieren Sie LiR darauf


Ich empfehle Ihnen, BIOS Legacy Boot und Package Grub-PC zu verwenden. Nicht mit UEFI getestet, muss aber funktionieren. Die nächsten Zeilen werden ausgeführt:


  • Erstellen Sie einen Mount-Punkt (auf GUI-basierten Systemen, für die die automatische Mount aktiviert ist, ist dies nicht erforderlich)
  • Mount-USB-Schlüssel zum Mount-Punkt mounten (auf GUI-basierten Systemen, die die automatische Mount-Funktion aktivieren, wird sie nicht benötigt)
  • Grub installieren
  • Grub-Datei kopieren
  • Kopieren Sie initramfs (System)
  • kopiere vmlinuz (Kernel)
  • USB-Schlüssel aushängen
  • Montagepunkt entfernen

 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 

Erstellen Sie eine bootfähige ISO (optional)


  • Laden Sie isolinux.bin herunter
  • Erstellen Sie eine Isolinux-Konfigurationsdatei
  • Iso erstellen

 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/ 

Ergebnis überprüfen


  • Installieren Sie den QEMU-Hypervisor apt-get install -yq qemu
  • Führen Sie qemu-system-x86_64 -enable-kvm -m 512 -hda /dev/sdb
  • Wenn der vorherige Befehl fehlschlägt, entfernen Sie -enable-kvm
  • Die VM wird gestartet und vom USB-Schlüssel gestartet
  • Sie müssen zwei Menüpunkte sehen, Unterschied am Ende: Konsole und seriell. Wählen Sie den ersten Eintrag.
  • In ~ Minute sehen Sie viele Zeilen. Nach dem Ende drücken Sie die Eingabetaste, um die Begrüßungsnachricht anzuzeigen
  • Login: root, kein Passwort

Anpassen: Erstellen Sie ein benutzerdefiniertes Debirf-Modul


Modul - ausführbares sh-Skript zur Ausführung während der LiR-Erstellung


  • Moduldatei erstellen
  • Die Reihenfolge der Dateinamen ist wichtig. Im Dateinetzwerk network die Auflösungsdatei in die vom System aufgelöste Datei geändert, und Sie können nicht mit dem Netzwerk arbeiten.
  • Zeilen von 1 bis 3 müssen vorhanden sein, Zeile 3 muss den Dateinamen enthalten
  • Wenn Sie das Paket installieren möchten, verwenden Sie die Konstruktion #DEBIRF_PACKAGE>+
  • Wenn Sie mit rootfs arbeiten möchten, verwenden Sie $DEBIRF_ROOT
  • Wenn Sie den Befehl in fakeroot debirf_exec möchten, verwenden Sie debirf_exec

Beispiel:


 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 

und ersetzen Sie die Zeile durch resolved in der Datei Rescue / Module / Netzwerk debirf_exec systemctl enable wpa_supplicant@wlp1s0.service systemd-networkd.service systemd-resolved.service durch debirf_exec systemctl enable wpa_supplicant@wlp1s0.service systemd-networkd.service systemd-resolved.service


Bonus: lxc auf LiR


Modulrettung / Module / 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/de420501/


All Articles