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
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
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
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