Canivete Suíço – Criando um LiveCD Debian Customizado
Neste artigo, vou documentar os procedimentos que utilizei para criar um LiveCD personalizado do Gnu/Linux Debian.
Utilizei um sistema Gnu/Linux Mint 20.2 (uma) de 64 bits para construir um LiveCD Debian 11 (Bullseye) de 64 bits que pode ser inicializado a partir de um dispositivo USB (Pendrive) ou de uma antiga mídia de CD ou DVD.
O LiveCD gerado através deste artigo pode ser carregado tanto em uma BIOS em modo Legacy ou em formato UEFI/EFI.
Antes de continuar, gostaria de salientar que escrevi este artigo para fins pessoais. Talvez, não seja necessariamente o guia mais rápido ou o melhor artigo para atender suas necessidades. E, certamente, devem existir muitas outras soluções, tutoriais, orientações e métodos para realizar a criação de um LiveCD personalizado.
De qualquer forma, eu espero que esse artigo seja útil para alguém.
Aviso importante: Vou destacar com uma tarja vermelha quando começaremos a dar comandos no ambiente [chroot]. Então, você deve ter cuidado, pois executar alguns desses comandos em seu ambiente local em vez de no [chroot] pode danificar seu sistema.
Então, de antemão, vamos instalar os pacotes necessários na nossa máquina local, para confeccionar o LiveCD:
apt update && apt -y install \ debootstrap \ squashfs-tools \ xorriso \ isolinux \ syslinux-efi \ grub-pc-bin \ grub-efi-amd64-bin \ mtools
Agora, vamos criar um diretório para manipular os arquivos que utilizaremos durante esse artigo:
mkdir -p $HOME/LIVE_BOOT
Agora, precisamos baixar e configurar o ambiente básico do Debian. Vamos usar o bullseye de 64 bits. Consulte a lista de mirrors Debian. Por favor, altere a URL neste comando se houver um mirror que esteja mais perto de você:
debootstrap \ --arch=amd64 \ --variant=minbase \ bullseye \ $HOME/LIVE_BOOT/chroot \ http://ftp.br.debian.org/debian/
Agora, finalmente, vamos fazer o chroot no ambiente Debian que acabamos de configurar:
chroot $HOME/LIVE_BOOT/chroot
A partir daqui, todos os comandos serão executados no ambiente CHROOT
Primeiro, vamos definir o hostname que aparecerá no LiveCD:
echo "debian-live" > /etc/hostname
Agora, vamos ajustar o timezone:
rm /etc/localtime ln -s /usr/share/zoneinfo/America/Sao_Paulo /etc/localtime
Vamos agora configurar a lista de repositórios do nosso LiveCD:
cat > /etc/apt/sources.list << 'EOF' deb http://ftp.br.debian.org/debian/ bullseye main contrib non-free deb-src http://ftp.br.debian.org/debian/ bullseye main contrib non-free deb http://security.debian.org/debian-security bullseye-security main contrib non-free deb-src http://security.debian.org/debian-security bullseye-security main contrib non-free deb http://ftp.br.debian.org/debian/ bullseye-updates main contrib non-free deb-src http://ftp.br.debian.org/debian/ bullseye-updates main contrib non-free EOF
Agora, precisamos instalar o Kernel e os pacotes necessários:
apt update && \ apt install --no-install-recommends -y \ linux-image-amd64 \ live-boot \ systemd-sysv
Agora, eu vou instalar os pacotes que julgo útil para o meu “canivete suíço”. Aqui vocês podem incluir ou remover pacotes conforme suas necessidades. É importante rodar o “apt clean” após a instalação para economizar espaço. Eu gosto de utilizar o parâmetro “–no-install-recommends” para evitar a instalação de pacotes desnecessários.
Leia o artigo Reduce Debian para obter dicas sobre como reduzir o tamanho da distro, caso o tamanho for importante e você quiser uma instalação mínima e compacta. Observe que algumas distros como Alpine Linux, Tiny Core e Puppy Linux são especificamente otimizadas para ocupar um espaço pequeno.
Embora este artigo resulte em uma distro relativamente pequena, gerar um LiveCD com poucos MBs exige um esforço adicional não abordado aqui:
apt install --no-install-recommends -y \ net-tools ssh vim htop screen aptitude isc-dhcp-client util-linux \ cifs-utils p7zip p7zip-full p7zip-rar rar nano ntfs-3g lvm2 pppoeconf \ unrar unrar-free wget zip unzip sshpass nfs-common rsyslog rsync \ samba pure-ftpd apache2 mc telnet tcpdump nfs-server mlocate \ nmap traceroute openssl iptables whois cryptsetup ncdu \ fdisk iputils-ping dnsutils locales ntpdate && apt clean
Agora vamos definir a senha de root, pois o root será o único usuário neste ambiente por padrão, mas você pode adicionar outros usuários, caso deseje:
passwd root
Agora, vamos limpar o histórico de comandos e sair do chroot:
history -c exit
Aqui se encerra a sequência de comandos que devem ser executados no ambiente chroot.
Os comandos abaixo, devem ser executados em sua máquina local, no meu caso (relatado neste artigo), no Linux Mint.
Vamos criar os diretórios que irão conter os arquivos de ambiente e arquivos temporários:
mkdir -p $HOME/LIVE_BOOT/{staging/{EFI/boot,boot/grub/x86_64-efi,isolinux,live},tmp}
Precisamos agora compactar o ambiente chroot em um sistema de arquivos Squash:
mksquashfs \ $HOME/LIVE_BOOT/chroot \ $HOME/LIVE_BOOT/staging/live/filesystem.squashfs \ -e boot
Agora, vamos copiar o kernel e o initramfs de dentro do chroot para o diretório do LiveCD:
cp $HOME/LIVE_BOOT/chroot/boot/vmlinuz-* \ $HOME/LIVE_BOOT/staging/live/vmlinuz && \ cp $HOME/LIVE_BOOT/chroot/boot/initrd.img-* \ $HOME/LIVE_BOOT/staging/live/initrd
Vamos então criar um menu de inicialização ISOLINUX (Syslinux). Este menu será exibido quando a distro for carregada em uma BIOS em modo Legacy:
cat <<'EOF' >$HOME/LIVE_BOOT/staging/isolinux/isolinux.cfg UI vesamenu.c32 MENU TITLE Boot Menu DEFAULT linux TIMEOUT 600 MENU RESOLUTION 640 480 MENU COLOR border 30;44 #40ffffff #a0000000 std MENU COLOR title 1;36;44 #9033ccff #a0000000 std MENU COLOR sel 7;37;40 #e0ffffff #20ffffff all MENU COLOR unsel 37;44 #50ffffff #a0000000 std MENU COLOR help 37;40 #c0ffffff #a0000000 std MENU COLOR timeout_msg 37;40 #80ffffff #00000000 std MENU COLOR timeout 1;37;40 #c0ffffff #00000000 std MENU COLOR msg07 37;40 #90ffffff #a0000000 std MENU COLOR tabmsg 31;40 #30ffffff #00000000 std LABEL linux MENU LABEL Debian Live [BIOS/ISOLINUX] MENU DEFAULT KERNEL /live/vmlinuz APPEND initrd=/live/initrd boot=live LABEL linux MENU LABEL Debian Live [BIOS/ISOLINUX] (nomodeset) MENU DEFAULT KERNEL /live/vmlinuz APPEND initrd=/live/initrd boot=live nomodeset EOF
Agora, vamos criar o menu de boot compatível com o modo EFI/UEFI:
cat <<'EOF' >$HOME/LIVE_BOOT/staging/boot/grub/grub.cfg search --set=root --file /DEBIAN_CUSTOM set default="0" set timeout=30 # If X has issues finding screens, experiment with/without nomodeset. menuentry "Debian Live [EFI/GRUB]" { linux ($root)/live/vmlinuz boot=live initrd ($root)/live/initrd } menuentry "Debian Live [EFI/GRUB] (nomodeset)" { linux ($root)/live/vmlinuz boot=live nomodeset initrd ($root)/live/initrd } EOF
Ainda precisamos criar uma terceira configuração de boot. Esta configuração será um arquivo que estará embutido no GRUB na partição EFI. Isso chama a raiz do sistema e carrega a configuração do GRUB a partir dela:
cat <<'EOF' >$HOME/LIVE_BOOT/tmp/grub-standalone.cfg search --set=root --file /DEBIAN_CUSTOM set prefix=($root)/boot/grub/ configfile /boot/grub/grub.cfg EOF
Vamos agora criar um arquivo em “staging” chamado “DEBIAN_CUSTOM”. Este arquivo será usado para ajudar o GRUB a descobrir qual dispositivo contém nosso sistema de arquivos:
touch $HOME/LIVE_BOOT/staging/DEBIAN_CUSTOM
Precisamos agora copiar os arquivos necessários de inicialização para BIOS Legacy para o diretório do LiveCD:
cp /usr/lib/ISOLINUX/isolinux.bin "${HOME}/LIVE_BOOT/staging/isolinux/" && \ cp /usr/lib/syslinux/modules/bios/* "${HOME}/LIVE_BOOT/staging/isolinux/"
Agora, para o modo UEFI/EFI:
cp -r /usr/lib/grub/x86_64-efi/* "${HOME}/LIVE_BOOT/staging/boot/grub/x86_64-efi/"
Vamos criar uma imagem inicializável para o GRUB EFI:
grub-mkstandalone \ --format=x86_64-efi \ --output=$HOME/LIVE_BOOT/tmp/bootx64.efi \ --locales="" \ --fonts="" \ "boot/grub/grub.cfg=$HOME/LIVE_BOOT/tmp/grub-standalone.cfg"
Agora, criaremos uma imagem de disco de inicialização FAT16 UEFI contendo o carregador de inicialização EFI. Observe o uso dos comandos “mmd” e “mcopy” para copiar nosso carregador de boot UEFI (bootx64.efi):
(cd $HOME/LIVE_BOOT/staging/EFI/boot && \ dd if=/dev/zero of=efiboot.img bs=1M count=20 && \ mkfs.vfat efiboot.img && \ mmd -i efiboot.img efi efi/boot && \ mcopy -vi efiboot.img $HOME/LIVE_BOOT/tmp/bootx64.efi ::efi/boot/ )
Agora, FINALMENTE, vamos criar o nosso arquivo ISO:
xorriso \ -as mkisofs \ -iso-level 3 \ -o "${HOME}/LIVE_BOOT/debian-custom-$(date +%Y-%m-%d).iso" \ -full-iso9660-filenames \ -volid "DEBIAN_CUSTOM" \ -isohybrid-mbr /usr/lib/ISOLINUX/isohdpfx.bin \ -eltorito-boot \ isolinux/isolinux.bin \ -no-emul-boot \ -boot-load-size 4 \ -boot-info-table \ --eltorito-catalog isolinux/isolinux.cat \ -eltorito-alt-boot \ -e /EFI/boot/efiboot.img \ -no-emul-boot \ -isohybrid-gpt-basdat \ -append_partition 2 0xef ${HOME}/LIVE_BOOT/staging/EFI/boot/efiboot.img \ "${HOME}/LIVE_BOOT/staging"
Pronto! Agora você pode usar o Gravador de Imagem USB da sua distro ou softwares como o YUMI, Rufus e etc. Sugiro que primeiro faça o teste utilizando o VirtualBox.
Esse artigo foi útil? Colabore com o nosso site para podermos continuar dando mais dicas como essa!
Formas de doação:
- Boleto / Cartão de crédito: https//bit.ly/AprendendoLinux
- Pix: [email protected]
- PicPay: @henrique_fagundes
- PayPal: [email protected]
- Bitcoin: bc1qtnn5z058htzy799dslwrpjcdpm0vuta3vrj28l
Favorecido: Luiz Henrique Marques Fagundes