Linux en RAM: debirf way 2018

Linux en RAM: forma debirf


¿Quieres tener una velocidad de disco absoluta hoy en día, no? Revisemos cómo se podría hacer con el control de versiones y la automatización en 2018.


Del moderador: nos llegó un artículo en inglés en el Sandbox. Lo leímos y decidimos publicarlo como un experimento del viernes. ¡No juzgues estrictamente, todos paz y feliz viernes! ¡Unámonos! En resumen, desde el fondo de Aua Hearts.

Registro de cambios:


  • El idioma del artículo está corregido en inglés.
  • repositorio de muestras introducido en github
  • Parámetros de prueba agregados
  • Asciicast añadido

Debe saber antes de ejecutar este tutorial:


  • linux esencial
  • La principal diferencia entre bash y sh (debirf escrito en sh, por lo que recomiendo seguir el estilo)
  • Cómo formatear la clave usb (de cualquier manera)
  • qué controladores son necesarios para su hardware (o puede depurarlo a través de dmesg | lspci)
  • cómo obtener los propósitos de tu tarea a través de la secuencia de comandos

puedes reemplazar:


  • carta usb de /dev/sdb a cualquier otra ( /dev/sdd )
  • directorio de trabajo desde /root/Projects/debirf/ a su elección ( /home/username/Documents/debirf )
  • punto de montaje desde /media/root/8B46-1189 a /media/username/myflashdrive

Pasos para preparar


Son (opcionales) habilitan componentes no libres para la instalación básica. Además, creo que necesitará el repositorio no libre.


  • abra la línea número 107 del archivo /usr/bin/debirf como nano +107 $(which debirf)
  • encontrar la función create_debootstrap
  • buscar línea como local OPTS="
  • add --components main,contrib,non-free entre paréntesis

Para empezar:


Imaginemos, nuestra unidad flash:


  • debe ser rápido, por lo que se recomienda usar la clase 8+, o el arranque llevará suficiente tiempo
  • / dev / sdb
  • formateado
  • montado en /media/root/8B46-1189 .
  • nuestro directorio de trabajo /root/Projects/debirf/

Instalar debirf


 apt-get install -yq debirf mtools genisoimage 

  • mtools necesario para crear iso a través de debirf (no funciona, pero es necesario)
  • Genisoimage necesario para crear iso de trabajo real (opcional)

Prepare el directorio de trabajo de 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 

Y configure /root/Projects/debirf/rescue/debirf.conf


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

Crear LiR


  • Ejecute debirf make . y vete Necesita mucho tiempo, con un mínimo de 15 minutos en el hardware superior.
  • Ejecute debirf makeiso . para crear iso que no funciona (necesario para el archivo grub.cfg)

Probarlo


  • Instalar qemu
    • para linux: apt-get install -yq qemu
    • para macos: brew install qemu
  • decidir qué recursos se asignarán para VM
    • -smp 1 1 núcleo real
    • -m 1G 1G de memoria
  • adicional
    • -nographic lanzará VM en la ventana de terminal actual
    • --enable-kvm habilita la aceleración de hardware
    • -kernel vmlinuz-* permite pasar directamente el kernel
    • -initrd *.cgz acceso directo al archivo .cgz con initramfs
    • -append permite omitir los parámetros del kernel, aquí están los parámetros para ejecutarse sin un shell gráfico

El comando para iniciar la máquina 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 

Muestra de prueba


asciicast


Instale grub en la unidad flash y copie LiR en ella


Le recomiendo que use bios legacy boot y package grub-pc. No probado con UEFI, pero debe funcionar. Las siguientes líneas serán:


  • crear punto de montaje (en sistemas con GUI habilitado, el montaje automático no es necesario)
  • monte la llave usb en el punto de montaje (en sistemas con GUI habilitado el montaje automático no es necesario)
  • instalar grub
  • copiar archivo grub
  • copiar initramfs (sistema)
  • copiar vmlinuz (kernel)
  • desmontar la llave usb
  • eliminar el punto de montaje

 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 

Crear iso de arranque (opcional)


  • descargar isolinux.bin
  • crear archivo de configuración isolinux
  • crear 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/ 

Verificar resultado


  • Instalar el hipervisor QEMU apt-get install -yq qemu
  • ejecute qemu-system-x86_64 -enable-kvm -m 512 -hda /dev/sdb
  • Si el comando anterior falla, elimine -enable-kvm
  • VM se iniciará, arrancado desde la clave usb
  • debe ver dos elementos de menú, diferencia final: consola y serie. Seleccionar primera entrada.
  • en ~ minuto verás muchas líneas. después de que termine - presione enter para ver el mensaje de bienvenida
  • inicio de sesión: root, sin contraseña

Personalízalo: crea un módulo de debirf personalizado


Módulo: script sh ejecutable para ejecutar durante la creación de LiR


  • crear archivo de módulo
  • El orden de los nombres de los archivos es importante. En la network archivos network el archivo de resolución cambiará a resuelto por el sistema, y ​​no puede trabajar con la red;
  • las líneas del 1 al 3 deben estar presentes, la línea 3 debe presentar el nombre del archivo
  • si desea instalar el paquete, use la construcción #DEBIRF_PACKAGE>+
  • si quieres trabajar con rootfs, usa $DEBIRF_ROOT
  • si desea ejecutar el comando en fakeroot, use debirf_exec

Muestra:


 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 

y reemplace la línea con resolved en el archivo de rescate / módulos / red con debirf_exec systemctl enable wpa_supplicant@wlp1s0.service systemd-networkd.service systemd-resolved.service


Bonus: lxc en LiR


módulo de rescate / módulos / 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/es420501/


All Articles