Linux na RAM: debirf way 2018

Linux na RAM: maneira debirf


Você quer ter velocidade absoluta de disco hoje em dia, não é? Vamos revisar como isso poderia ser feito com versão e automação em 2018.


Do moderador: um artigo em inglês chegou até nós na Sandbox. Lemos e decidimos publicá-lo como um experimento de sexta-feira. Não julgue estritamente, todos paz e feliz sexta-feira! Vamos nos unir! Em suma, Do fundo dos corações de Aua.

Changelog:


  • O idioma do artigo é corrigido em inglês
  • repositório de amostra introduzido no github
  • Adicionados parâmetros de teste
  • asciicast adicionado

Você deve saber antes de executar este tutorial:


  • linux essencial
  • a principal diferença entre bash e sh (debirf escrito em sh, por isso recomendo seguir o estilo)
  • como formatar a chave usb (de qualquer forma)
  • quais drivers são necessários para o seu hardware (ou você pode depurá-lo via dmesg | lspci)
  • como obter os objetivos da sua tarefa através do script

você pode substituir:


  • carta usb de /dev/sdb para qualquer outro ( /dev/sdd )
  • diretório de trabalho de /root/Projects/debirf/ à sua escolha ( /home/username/Documents/debirf )
  • ponto de montagem de /media/root/8B46-1189 para /media/username/myflashdrive

Passos para a preparação


Eles são (opcionais) ativam componentes não livres para instalação básica. Além disso, acho que você precisará do repositório não-livre.


  • abra o número de linha 107 do arquivo /usr/bin/debirf como nano +107 $(which debirf)
  • função find create_debootstrap
  • encontre uma linha como local OPTS="
  • add --components main,contrib,non-free entre parênteses

Até o início:


Vamos imaginar, nossa unidade flash:


  • deve ser rápido, por isso é recomendável usar a classe 8+ ou a inicialização levará tempo suficiente
  • / dev / sdb
  • formatado
  • montado em /media/root/8B46-1189 .
  • nosso diretório de trabalho /root/Projects/debirf/

Instalar debirf


 apt-get install -yq debirf mtools genisoimage 

  • mtools necessários para criar iso via debirf (não funcionando, mas necessário)
  • genisoimage necessário para criar iso de trabalho real (opcional)

Preparar o diretório de trabalho 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 

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

Criar LiR


  • Execute o debirf make . e vá embora. É preciso muito tempo, no mínimo 15 minutos, no hardware superior.
  • Execute debirf makeiso . para criar iso não funcionando (necessário para o arquivo grub.cfg)

Teste


  • Instalar qemu
    • para linux: apt-get install -yq qemu
    • para macos: brew install qemu
  • decidir quais recursos serão alocados para VM
    • -smp 1 1 kernel real
    • -m 1G 1G de memória
  • adicionais
    • -nographic lançará VM na janela atual do terminal
    • --enable-kvm permite aceleração de hardware
    • -kernel vmlinuz-* permite passar diretamente o kernel
    • -initrd *.cgz acesso direto ao arquivo .cgz com o initramfs
    • -append permite ignorar os parâmetros do kernel, eis os parâmetros para executar sem um shell gráfico

O comando para iniciar a 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 

Amostra de teste


asciicast


Instale o grub na unidade flash e copie o LiR nele


Eu recomendo que você use bios legacy boot e empacote o grub-pc. Não testado com UEFI, mas deve funcionar. As próximas linhas serão:


  • criar ponto de montagem (em sistemas com GUI habilitados para montagem automática, não é necessário)
  • mount chave usb para o ponto de montagem (em sistemas com interface gráfica do usuário ativada, não é necessária a montagem automática)
  • instalar grub
  • copiar arquivo grub
  • copiar initramfs (sistema)
  • copiar vmlinuz (kernel)
  • desmontar chave usb
  • remover ponto de montagem

 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 

Criar iso inicializável (opcional)


  • download isolinux.bin
  • criar arquivo de configuração isolinux
  • criar 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


  • Instale o hypervisor QEMU apt-get install -yq qemu
  • execute qemu-system-x86_64 -enable-kvm -m 512 -hda /dev/sdb
  • se o comando anterior falhar, remova -enable-kvm
  • A VM será iniciada, inicializada a partir da chave usb
  • você deve ver dois itens de menu, diferença no final: console e serial. Selecione a primeira entrada.
  • em ~ minuto você verá muitas linhas. após o término - pressione enter para ver a mensagem de boas-vindas
  • login: root, sem senha

Personalize-o: Crie um módulo debirf personalizado


Module - script sh executável para execução durante a criação de LiR


  • criar arquivo de módulo
  • a ordem dos nomes dos arquivos é importante. Na network arquivos network o arquivo de resolução será alterado para o resolvido pelo sistema e você não poderá trabalhar com a rede;
  • as linhas de 1 a 3 devem estar presentes, a linha 3 deve apresentar o nome do arquivo
  • se você deseja instalar o pacote - use a construção #DEBIRF_PACKAGE>+
  • se você quiser trabalhar com rootfs - use $DEBIRF_ROOT
  • se você deseja executar o comando no fakeroot - use debirf_exec

Amostra:


 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 

e substitua a linha com resolved no arquivo rescue / modules / network com debirf_exec systemctl enable wpa_supplicant@wlp1s0.service systemd-networkd.service systemd-resolved.service


Bônus: lxc no LiR


resgate de módulo / modules / 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/pt420501/


All Articles