Linux in RAM: debirf way 2018

Published on August 17, 2018

Linux in RAM: debirf way 2018

Linux in RAM: debirf way


Möchten Sie heutzutage absolute Festplattengeschwindigkeit haben, nicht wahr? Lassen Sie uns überdenken, wie dies im Jahr 2018 mit Versionierung und Automatisierung geschehen kann.


Vom Moderator: Wir haben einen Artikel in englischer Sprache in der Sandbox erhalten. Wir haben es gelesen und beschlossen, es als Freitagsexperiment zu veröffentlichen. Richten Sie nicht streng, alles Frieden und einen glücklichen Freitag! Lass uns zusammen kommen! Kurz gesagt, vom unteren Rand des Büros bis zu aoua Herzen.

Änderungsprotokoll:


  • Die Sprache des Artikels ist auf Englisch korrigiert
  • Bei github eingeführtes Muster-Repository
  • Testparameter hinzugefügt
  • Asciicast hinzugefügt

Bevor Sie dieses Lernprogramm ausführen, müssen Sie Folgendes wissen:


  • linux essential
  • der Hauptunterschied zwischen bash und sh (debirf ist 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 erlangen können

Sie können ersetzen:


  • usb brief von /dev/sdban irgendetwas anderes ( /dev/sdd)
  • Arbeitsverzeichnis von /root/Projects/debirf/zu Ihrer Wahl ( /home/username/Documents/debirf)
  • Bergungspunkt von /media/root/8B46-1189bis/media/username/myflashdrive

Schritte zur Vorbereitung


Sie sind (optional) ermöglichen nicht-freie Komponenten für die Basisinstallation. Ich denke außerdem, dass Sie das nicht-freie Repository benötigen.


  • offene Zeilennummer 107 der Datei /usr/bin/debirfwienano +107 $(which debirf)
  • Funktion finden create_debootstrap
  • Linie finden wie local OPTS="
  • --components main,contrib,non-freein Klammern hinzufügen

Bis zum Start:


Stellen wir uns vor, unser Flash-Laufwerk:


  • muss schnell sein, daher wird empfohlen, die Klasse 8+ zu verwenden, oder das Booten dauert ausreichend lange
  • / dev / sdb
  • formatiert
  • montiert am /media/root/8B46-1189.
  • unser Arbeitsverzeichnis /root/Projects/debirf/

Installieren Sie debirf


apt-get install -yq debirf mtools genisoimage

  • mtools für das Erstellen von iso über debirf erforderlich (funktioniert nicht, wird aber benötigt)
  • genisoimage für die Erstellung einer echten Arbeits-ISO erforderlich (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


  • Lauf debirf make .und geh weg. Es dauert viel Zeit, bei minimal 15 Minuten auf der Top-Hardware.
  • Ausführen debirf makeiso .zum Erstellen funktioniert nicht iso (für die Datei grub.cfg erforderlich)

Probier es aus


  • Installieren Sie qemu
    • for linux: apt-get install -yq qemu
    • for macos: brew install qemu
  • entscheiden, welche Ressourcen für die VM zugewiesen werden
    • -smp 1 1 echter Kernel
    • -m 1G 1G Speicher
  • zusätzlich
    • -nographic startet VM im aktuellen Terminalfenster
    • --enable-kvm ermöglicht die Hardware-Zuordnung
    • -kernel vmlinuz-* Erlaube direkt den Kernel zu übergeben
    • -initrd *.cgz direkter Zugriff auf .cgz-Datei mit initramfs
    • -append erlaubt die Umgehung von Kernelparams, hier sind die Parameter für den Betrieb 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 das Paket grub-pc zu verwenden. Nicht mit UEFI getestet, muss aber funktionieren. Die nächsten Zeilen werden tun:


  • Einhängepunkt erstellen (bei automatisch aktivierten GUI-Systemen ist dies nicht erforderlich)
  • Mount-USB-Schlüssel zum Mount-Punkt (bei automatisch aktivierten GUI-Systemen ist dies nicht erforderlich)
  • Grub installieren
  • Grub-Datei kopieren
  • Initramfs kopieren (System)
  • vmlinuz (Kernel) kopieren
  • usb key aushängen
  • Einhängepunkt 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

Bootfähige ISO erstellen (optional)


  • download isolinux.bin
  • Isolinux-Konfigurationsdatei erstellen
  • 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/

Überprüfe das Ergebnis


  • Installieren Sie den QEMU-Hypervisor apt-get install -yq qemu
  • Lauf qemu-system-x86_64 -enable-kvm -m 512 -hda /dev/sdb
  • Wenn der vorherige Befehl fehlschlägt, entfernen Sie ihn -enable-kvm
  • VM wird gestartet und vom USB-Schlüssel gebootet
  • Sie müssen zwei Menüpunkte sehen, die sich am Ende unterscheiden: Konsole und seriell. Wählen Sie den ersten Eintrag aus.
  • 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 zum Ausführen während der LiR-Erstellung


  • Moduldatei erstellen
  • Die Reihenfolge der Dateinamen ist wichtig. In networkder Datei wird die auflösende Datei in das vom System aufgelöste geändert, und Sie können nicht mit dem Netzwerk arbeiten.
  • Zeilen von 1 bis 3 müssen vorhanden sein, Zeile 3 muss Dateinamen enthalten
  • Wenn Sie ein Paket installieren möchten - verwenden Sie die Konstruktion #DEBIRF_PACKAGE>+
  • wenn du mit rootfs arbeiten willst - use $DEBIRF_ROOT
  • Wenn Sie den Befehl in fakeroot ausführen möchten - use debirf_exec

Probe:


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 mit resolvedin file rescue / modules / network mitdebirf_exec systemctl enable wpa_supplicant@wlp1s0.service systemd-networkd.service systemd-resolved.service


Bonus: lxc auf LiR


rettung des moduls / 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