Linux dalam RAM: cara debirf 2018

Linux dalam RAM: cara debirf


Apakah Anda ingin memiliki kecepatan disk absolut saat ini, bukan? Mari kita merevisi bagaimana hal itu dapat dilakukan dengan versi dan otomatisasi pada tahun 2018.


Dari moderator: sebuah artikel dalam bahasa Inggris datang kepada kami di Sandbox. Kami membacanya dan memutuskan untuk menerbitkannya sebagai percobaan hari Jumat. Jangan menilai dengan ketat, semua orang damai dan senang Jumat! Ayo datang bersama! Singkatnya, Dari Bawah Hati Aua.

Changelog:


  • Bahasa artikel dikoreksi dalam bahasa Inggris
  • repositori sampel diperkenalkan di github
  • Menambahkan params uji
  • tambah asciicast

Anda harus tahu sebelum menjalankan tutorial ini:


  • linux penting
  • perbedaan utama antara bash dan sh (debirf tertulis di sh, jadi saya sarankan untuk mengikuti style)
  • cara memformat kunci usb (dengan cara apa pun)
  • driver apa yang dibutuhkan untuk perangkat keras Anda (atau Anda dapat men-debug-nya via dmesg | lspci)
  • cara mendapatkan tujuan tugas Anda melalui skrip

Anda dapat mengganti:


  • surat usb dari /dev/sdb ke yang lain ( /dev/sdd )
  • direktori kerja dari /root/Projects/debirf/ ke pilihan Anda ( /home/username/Documents/debirf )
  • mountpoint dari /media/root/8B46-1189 ke /media/username/myflashdrive

Langkah-langkah persiapan


Mereka (opsional) mengaktifkan komponen yang tidak bebas untuk instalasi dasar. Selain itu, saya pikir, Anda akan memerlukan repositori yang tidak bebas.


  • buka baris nomor 107 dari file /usr/bin/debirf seperti nano +107 $(which debirf)
  • temukan fungsi create_debootstrap
  • temukan baris seperti local OPTS="
  • tambahkan --components main,contrib,non-free dalam tanda kurung

Mulai:


Bayangkan, flash drive kami:


  • harus cepat, jadi disarankan untuk menggunakan kelas 8+, atau booting akan memakan waktu yang cukup
  • / dev / sdb
  • dibentuk
  • dipasang di /media/root/8B46-1189 .
  • direktori kerja kami /root/Projects/debirf/

Instal debirf


 apt-get install -yq debirf mtools genisoimage 

  • mtools diperlukan untuk membuat iso melalui debirf (tidak berfungsi, tetapi dibutuhkan)
  • genisoimage diperlukan untuk membuat iso yang berfungsi nyata (opsional)

Mempersiapkan direktori kerja 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 

Dan konfigurasikan /root/Projects/debirf/rescue/debirf.conf


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

Buat LiR


  • Jalankan debirf make . dan pergi. Perlu banyak waktu, minimal 15 menit pada perangkat keras teratas.
  • Jalankan debirf makeiso . untuk membuat iso yang tidak berfungsi (diperlukan untuk file grub.cfg)

Uji itu


  • Instal qemu
    • untuk linux: apt-get install -yq qemu
    • untuk macos: brew install qemu
  • memutuskan sumber daya mana yang akan dialokasikan untuk VM
    • -smp 1 1 kernel sebenarnya
    • -m 1G 1G memori
  • tambahan
    • -nographic akan meluncurkan VM di jendela terminal saat ini
    • --enable-kvm memungkinkan akselerasi perangkat keras
    • -kernel vmlinuz-* izin langsung lewat kernel
    • -initrd *.cgz akses langsung ke file .cgz dengan initramfs
    • -append memungkinkan memotong kernel kernel, berikut adalah parameter untuk berjalan tanpa shell grafis

Perintah untuk memulai mesin virtual:


 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 

Sampel uji


asciicast


Instal grub ke flash drive dan salin LiR di atasnya


Saya sarankan Anda menggunakan boot BIOS legacy dan paket grub-pc. Tidak diuji dengan UEFI, tetapi harus bekerja. Baris selanjutnya akan dilakukan:


  • buat mount point (pada sistem bertenaga GUI diaktifkan auto-mount tidak diperlukan)
  • pasang kunci usb ke titik pemasangan (pada sistem bertenaga GUI diaktifkan, pasang otomatis tidak diperlukan)
  • instal grub
  • salin file grub
  • salin initramfs (sistem)
  • salin vmlinuz (kernel)
  • lepaskan kunci usb
  • hapus mount point

 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 

Buat iso yang dapat di-boot (opsional)


  • unduh isolinux.bin
  • buat file konfigurasi isolinux
  • buat 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/ 

Periksa hasilnya


  • Instal QEMU hypervisor apt-get install -yq qemu
  • jalankan qemu-system-x86_64 -enable-kvm -m 512 -hda /dev/sdb
  • jika perintah sebelumnya gagal, hapus -enable-kvm
  • VM akan dimulai, di-boot dari kunci usb
  • Anda harus melihat dua item menu, perbedaan pada akhirnya: konsol dan serial. Pilih entri pertama.
  • dalam ~ menit Anda akan melihat banyak baris. setelah itu berakhir - tekan enter untuk melihat pesan selamat datang
  • login: root, tanpa kata sandi

Kustomisasi: Buat modul debirf khusus


Modul - skrip sh yang dapat dieksekusi untuk dijalankan selama pembuatan LiR


  • buat file modul
  • urutan nama file itu penting. Dalam network file, file penyelesaian akan diubah menjadi sistem-diselesaikan, dan Anda tidak dapat bekerja dengan jaringan;
  • baris dari 1 hingga 3 harus ada, baris 3 harus menunjukkan nama file
  • jika Anda ingin menginstal paket - gunakan konstruksi #DEBIRF_PACKAGE>+
  • jika Anda ingin bekerja dengan rootfs - gunakan $DEBIRF_ROOT
  • jika Anda ingin menjalankan perintah di fakeroot - gunakan debirf_exec

Sampel:


 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 

dan ganti baris dengan yang resolved dalam file rescue / modul / jaringan dengan debirf_exec systemctl enable wpa_supplicant@wlp1s0.service systemd-networkd.service systemd-resolved.service


Bonus: lxc pada LiR


penyelamatan modul / modul / 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/id420501/


All Articles