segunda-feira, 7 de abril de 2025

Criar entrada (menuentry) ISO no Grub


INTRODUÇÃO

Como criar uma entrada ISO no Grub.

Nível intermediário.

   Na sequência temos os comandos e os arquivos necessários para as configurações.

   O Grub (Grand Unified Bootloader) é um bootloader, ou seja, um carregador de inicialização.

   Isso é tudo o que você precisa saber sobre o Grub no momento, pois o Grub não é o escopo do artigo, o escopo é como criar uma entrada (menuentry) no arquivo /etc/Grub/40_custom, porém, primeiro segue uma explicação necessária sobre o processo de inicialização do Linux.

   O binário do kernel do UNIX é chamado UNIX. Quando o kernel, em tempos antanhos, passou a ter suporte para memória virtual foi renomeado para "vmunix". O "vmlinuz" é derivado de "Virtual Memory LINUx gZip". O Kernel Linux, compactado geralmente com uma extensão z, gz, ou xz como é hoje, passou a se chamar "vmlinuz" e continua até hoje, mesmo tendo, algumas vezes, outra extensão. O "vmlinuz" é um arquivo compactado e inicializável do Kernel Linux, porém, não é apenas um arquivo compactado, ele tem um descompactador embutido no código, além de outras coisas.

   O initrd (Initial ramDisk - Disco RAM Inicial) fornece a capacidade de carregar um disco RAM pelo carregador de inicialização. Este disco RAM inicial pode então ser montado como um sistema de arquivos raiz temporário e pode ser executado a partir dele. Depois, um novo sistema de arquivos raiz pode ser montado a partir de um dispositivo diferente. A raiz anterior (do initrd) é então movida para um diretório e pode ser desmontado posteriormente.

   Grosso modo, o initrd é uma porção de diversos arquivos/ferramentas/módulos, cada qual com sua função, por exemplo, a ferramenta insmod está incluída no initrd, e esse conjunto é juntado nesse pacote chamado initrd que é também um sistema de arquivos temporário carregado na memória RAM durante o processo de inicialização do Linux para que o Kernel possa montar o sistema de arquivos raiz real (aquele que você escolhe durante o particionamento na instalação do sistema, seja ext4, Btrfs, etc.

   Apesar de que cada distribuição tem sua própria maneira de lidar com isso, geralmente é feito desta maneira no Linux, pois até os nomes do "vmlinuz" e "initrd" podem variar.

   O initrd.img é um link simbólico para o initrd que é carregado pelo bootloader junto com a imagem do kernel e é essencial para o processo de inicialização que os sistemas Linux modernos usam. O initrd serve como um sistema de arquivos raiz provisório até que o sistema de arquivos raiz real seja montado. Por isso, às vezes, quando aparece aquela mensagem "you need to load the kernel first - você precisa carregar o kernel primeiro" é porque o "vmlinuz" (o kernel) não foi encontrado ou a assinatura é inválida ou está corrompido, etc. O bootloader (no caso, o Grub) não encontrou o kernel para carregar e montar.

   O processo de inicialização se dá, resumidamente, da seguinte maneira:

   Quando você liga o computador, o BIOS da placa-mãe procura um bootloader (como o Grub, se houver) que, por sua vez, carrega o vmlinuz e o initrd na memória. Isso acontece após você escolher um sistema no menu do Grub ou após o sistema padrão configurado carregar automaticamente;
   A rotina programada no vmlinuz descompacta o kernel na memória;
   Depois da descompactação o controle é passado para o Kernel que então monta o initrd como seu sistema de arquivos raiz inicial temporário;
   O initrd assume o controle e carrega os módulos necessários que são cruciais para que o Kernel acesse o hardware para montar o sistema de arquivos real (ext4, NFS, Btrfs, etc);
Então o Kernel carrega os drivers necessários e depois que os drivers foram carregados, o Kernel monta o sistema de arquivos raiz real e continua o processo de inicialização.

   Fiz essa breve explicação para entendermos o processo de inicialização necessário para criarmos as entradas para as imagens iso no Grub e também evitar os avisos de erro durante a inicialização do Linux, como, por exemplo: "você precisa carregar o kernel primeiro", "memória insuficiente - out of memory", "Invalid magic number", "servidor não encontrado", etc.

   O erro "you need to load the kernel first - você precisa carregar o kernel primeiro" geralmente significa que tem algum parâmetro errado em relação aos caminhos para o vmlinuz. Em caso de Live pelo pendrive pode significar também que o Secure Boot e/ou o TPM estão habilitados, a imagem está corrompida, etc. Este é um erro bastante genérico que, para solucioná-lo, você deve ir pelo processo de eliminação.

   O erro "memória insuficiente - out of memory" é auto-explicativo, porém, em caso de ISO carregada na RAM a partir do disco pode significar que não tem espaço suficiente na RAM ou, caso a ISO tenha sido colocada na partição /boot (não recomendado) pode significar que não tem espaço suficiente na partição /boot para descompactar os arquivos.

   O erro "Invalid magic number" geralmente significa algum erro de verificação do hash (não necessariamente imagem corrompida, somente o hash) ou, em último caso, a imagem está mesmo corrompida. Essa mensagem "número mágico inválido" provavelmente foi uma brincadeira dos desenvolvedores, como os "poderes de super-vaca" do aptitude. O erro "servidor não encontrado" geralmente significa que algum caminho para a imagem foi digitado errado, o hdx,x está errado, o computador está sem internet, a imagem não conseguiu conexão com a internet, etc.

   A causa desses erros podem variar, procurei dar em linhas gerais de acordo com a mensagem e com a experiência.

   Passados os prolegômenos, vamos colocar a mão no mouse!

COMEÇANDO

   Faça o download da imagem ISO (Live ou não) da sua distribuição preferida, por exemplo, em /home/seu_usuario/Downloads ou outra pasta de sua escolha. Extraia os arquivos clicando com o botão direito na pasta > Extrair aqui ou algo parecido.

   Será feita a extração dos arquivos, pois uma imagem iso é, grosso modo, um arquivo compactado.


Imagem iso e sua pasta com os arquivos extraídos.


   Entre na pasta, por exemplo, debian-live-12.10.0-amd64-gnome, dentro encontrará a pasta "live". Entre na pasta live. Dentro encontrará os arquivos "vmlinuz-6.1.0-32-amd64" e "initrd.img-6.1.0-32-amd64". O número 6.1.0-32 é a versão do Kernel Linux da versão 12.10.0 do Debian.

   No Ubuntu os arquivos vmlinuz e initrd.img estão na pasta "casper". Isso muda de acordo com a distribuição, então você terá de descompactar a imagem iso e procurar nas pastas os dois arquivos vmlinuz-alguma_versão e initrd.img-alguma_versão.

  Até aqui o processo é tranquilo, aliás, veremos que o processo todo é fácil, um pouco trabalhoso, mas é fácil, além disso, você fará uma única vez e durará um bom tempo até você trocar de imagem iso. Depois de estar de posse das informações necessárias pode deletar a pasta descompactada, caso quiser.

   De posse dessas informações, vamos começar.

   Abra o terminal e atualize o sistema e instale/atualize para o Grub2, caso quiser, senão somente atualize o sistema (aqui é o Debian, você dê os comandos referentes ao teu sistema):

$ sudo apt update
$ sudo aptitude safe-upgrade
$ sudo apt install grub2

   Abra o terminal e entre no arquivo /etc/grub.d/40_custom (este arquivo é o arquivo correto a ser alterado). Esse arquivo está presente na esmagadora maioria das distribuições Linux que usam o Grub. Caso você não encontrar na sua distribuição, procure na internet qual o arquivo equivalente. Esse processo descrito aqui foi feito no Debian.

Entrando no arquivo /etc/grud.d/40_custom

# vim /etc/grub.d/40_custom
ou
# nano /etc/grub.d/40_custom

   Para editar no vim pressione a tecla Insert, faça a alteração > Esc > para salvar e sair Shift + :, solte o Shift e digite wq ficando assim no canto inferior esquerdo :wq > Enter. Não pressione a tecla +, é somente a tecla Shift e a tecla : (dois pontos). Para salvar sem sair no vim digite somente w e dê enter.
   Para salvar no nano pressione ctrl+o (letra o) e dê Enter; para sair ctrl+x.

Sempre depois de alterar o arquivo /etc/grub.d/40_custom execute:
$ sudo update-grub
ou o comando equivalente da sua distribuição.
Sem atualizar o Grub não terão efeito as alterações no arquivo.
Reinicie e teste.

Visão do interior do arquivo sem as configurações.

   O arquivo 40_custom é o arquivo indicado para se fazer as entradas que aparecerão no menu do Grub na inicialização, sendo que depois de atualizar o Grub com update-grub ou outro comando relativo, essas informações serão gravadas no arquivo /boot/grub/grub.cfg. Junto com o arquivo /etc/default/grub, esses três são os arquivos principais do Grub, porém, somente faça alterações no /etc/default/grub e no /etc/grub.d/40_custom.

   NÃO altere o arquivo /boot/grub/grub.cfg.

   Na sequência do artigo tem as configurações do /etc/grub.d/40_custom para usar com várias distribuições. Como exemplo vamos analisar as seguintes linhas acrescentadas no arquivo original após a última linha:

menuentry 'Debian 12.10.0 LIVE RAM' {
insmod ext2
set isofile='/debina/Downloads/debian-live-12.10.0-amd64-xfce.iso'
rmmod tpm
loopback loop (hd1,6)$isofile
echo 'Loading Linux Live ...'
linux (loop)/live/vmlinuz-6.1.0-32-amd64 boot=live findiso=$isofile components locales=pt_BR.UTF-8 keyboard-model=pc105 keyboard-layouts=br toram
echo 'Loading initial ramdisk ...'
initrd (loop)/live/initrd.img-6.1.0-32-amd64
}


Abaixo o conteúdo está numerado como exemplo para maiores explicações.

1- menuentry 'Debian 12.10.0 LIVE' {
2- insmod ext2
3- set isofile='/debina/Downloads/debian-live-12.10.0-amd64-xfce.iso'
4- rmmod tpm
5- loopback loop (hd1,6)$isofile
6- echo 'Loading Linux Live ...'
7- linux (loop)/live/vmlinuz-6.1.0-32-amd64 boot=live findiso=$isofile components locales=pt_BR.UTF-8 keyboard-model=pc105 keyboard-layouts=br toram
8- echo 'Loading initial ramdisk ...'
9- initrd (loop)/live/initrd.img-6.1.0-32-amd64
10- }

   Na linha 1, menuentry, você pode colocar o que quiser entre as aspas, e abrimos a chave. Pode colocar aspas duplas ou simples, escolha uma e padronize no arquivo todo, sugiro aspas simples.

   Na segunda linha (linha 2) não altere, pois estamos carregando o módulo do sistema ext2 que é o sistema de arquivos temporário. Não se preocupe, esse ext2 tem nada a ver com o  sistema de arquivos que você escolhe quando particiona um Linux. Ele é somente para carregar o sistema de arquivos provisório, aliás, ele é o sistema de arquivos temporário.

   Na linha 3 estamos setando a variável "isofile" com o caminho para a imagem iso. No caminho coloque somente a partir do nome do usuário, não acrescente /home no começo. Não aconselho a colocar a iso na partição /boot, pois ocupa um espaço desnecessário, além do que a partição /boot não é própria para isso, coloque onde tenha espaço para isso.

   Na linha 4 chamamos o módulo "rmmod" para desabilitar o famigerado tpm do BIOS, caso tiver. Lembram, no começo, que o initrd chama os módulos quando acionado na inicialização.

   Na linha 5 fazemos um "loopback loop" (loop de retorno) que nada mais é do que fazer o dispositivo chamado "device" corresponder ao conteúdo da imagem do sistema de arquivos no arquivo, ou seja, lê a imagem indicada no caminho, descompacta e carrega ela passando-a como ramDisk para o Kernel. "Dispositivo" (device) aqui pode ser qualquer coisa relacionada ao computador, seja hardware (dispositivo físico) ou software (dispositivo virtual).

  Veja, tirado das páginas do manual do Grub (links ao final):
"No entanto, o próprio SO deve ser capaz de encontrar sua raiz. Isso geralmente envolve a execução de um programa de espaço do usuário antes que a raiz real seja descoberta. Isso é obtido pelo GRUB carregando uma pequena imagem especialmente feita e passando-a como ramdisk para o kernel."
"'device' é uma unidade especificada na sintaxe GRUB (consulte Sintaxe do dispositivo ) e 'file' é um arquivo do sistema operacional, que normalmente é um arquivo de dispositivo."

   A parte (hd1,6) da linha 5 veremos adiante o que você tem de colocar ali.

   A parte $isofile da linha 5 chama a variável isofile onde armazenamos o caminho para a imagem iso. Caso quiser pode chamar de $fileiso, $arquiviso, etc.

   Na linha 6 damos um "echo", ou seja, é um comando presente em várias linguagens de programação que exibe uma mensagem que você verá no Grub durante a inicialização do sistema.

   Na linha 7 chamamos o vmlinuz desejado, no caso, o live, e configuramos alguns parâmetros opcionais como o locale para fins de horário e o layout do teclado para fins de podermos digitar sem ter de adivinhar onde foi parar a barra, o ponto de interrogação, etc. Esses parâmetros são opcionais, algumas distribuições em suas imagens ISOs Live já oferecem essas opções ao inicializar a iso Live.

IMPORTANTE:
O parâmetro "toram" ao final da linha 7 indica que é para carregar a imagem live na memória ram.

   Mais adiante veremos que é interessante colocar duas entradas iguais, uma sem o parâmetro toram (to ram - para a ram) ao final e outra com o parâmetro, assim podemos escolher no menu do Grub.

   Colocando na RAM o carregamento e a execução, o sistema live tem um desempenho melhor, porém, caso você tiver pouca RAM física não é aconselhável, então faça as duas entradas iguais, somente uma sem toram e a outra com, pois não custa nada e você pode testar qual fica melhor e eliminar uma depois.

   Na linha 8 damos outro "echo".

   Na linha 9 chamamos o initrd. Na linha 10 fechamos as chaves com chave de ouro!

   O número de linhas para cada entrada (menuentry) pode ser diferente, esse número de 10 linhas não é fixo, vai de acordo com cada distribuição e configurações, mas é tranquilo.

Sempre depois de alterar o arquivo /etc/grub.d/40_custom execute:
$ sudo update-grub
ou o comando equivalente da sua distribuição.
Sem atualizar o Grub não terão efeito as alterações no arquivo.
Reinicie e teste.

   Agora veremos o que colocar em (hd1,6).

   Essa linha 5, já explicada, também indica o disco físico onde está armazenada a imagem iso, por isso segue a seqüência (hdX,X)$isofile: primeiro o disco, depois o caminho para a imagem, o que é lógico. Caso você colocar o disco/caminho errado o Grub emitirá a mensagem de "erro: arquivo '/caminho/para/iso' não encontrado". Em distribuições como o Arch você pode, em vez de hd0,1 colocar o UUID, como veremos adiante.

Erro de "você precisa carregar o kernel primeiro".

   Abra o terminal e execute

$ lsblk
e logo depois
$ sudo fdisk -l

Na saída dos comandos vemos as partições e os discos.

   Repare que tem sda, sdb, etc.

   O hd0 é o dispositivo sda, hd1 é o sdb e assim por diante. Apesar de que o Grub não liga muito para isso, ele prefere seguir o UUID, mas nesse caso podemos confiar. No caso em tela vemos que a partição /home está em sdb6, então a linha ficou com hd1,6. Lembrando que você colocará ali a partição onde está a imagem ISO, no meu caso a imagem está na /home.

   O número após a vírgula você vê na saída dos comandos. O hd começa em 0 e a partição começa em 1. /dev/sda é o disco 0, /dev/sdb significa o disco 1, o disco 2 é o /dev/sdc e assim por diante. A partição começa em 1 e como é sdb6 então colocamos 6.

   Para confirmar entre no arquivo /boot/grub/grub.cfg no modo somente leitura (cat /boot/grub/grub.cfg ou como usário digite nano /boot/grub/grub.cfg sem sudo) e procure na seção do menuentry do Kernel instalado na máquina uma linha iniciada com "set root", provavelmente será "set root='hd1,msdos1'" ou algo parecido. Daí vemos que, neste caso, confirmou que é hd1. Caso estiver hd0 ou outro, veja se coincide com as saídas dos comandos.


Somente veja o conteúdo do arquivo /boot/grub/grub.cfg, não altere.
Dica:
Caso tiver discrepância entre as informações teste a inicialização primeiro com hd0 e depois com hd1, etc, até não dar mais erro de "arquivo não encontrado", pois, às vezes, o Grub se perde na numeração porque o GRUB não distingue IDE de SCSI, por isso para o Grub os dois são hdx,x.

   Porém, para o kernel Linux:

/dev/hda refere-se ao primeiro disco rígido IDE;
/dev/sda refere-se ao primeiro disco rígido SCSI ou SATA;
/dev/nvme0n1 refere-se ao primeiro SSD NVMe;
/dev/nvme1n1 refere-se ao segundo SSD NVMe.

   Na saída do comando fdisk -l também podemos ver se é gpt ou mbr e podemos ver o identificador do disco, no caso, o UUID, aquele numerozão. Para ser mais específico pode se executar:

$ sudo fdisk -l /dev/sda

$ sudo fdisl -l /dev/sdb

e assim para todos os dispositivos.

Sempre depois de alterar o arquivo /etc/grub.d/40_custom execute:
$ sudo update-grub
ou o comando equivalente da sua distribuição.
Sem atualizar o Grub não terão efeito as alterações no arquivo.
Reinicie e teste.

   No Fedora, CentOS, RHEL, openSUSE, o comando geralmente é:

$ sudo grub2-mkconfig -o /boot/grub2/grub.cfg

No Debian e derivados (Ubuntu, Linux Mint, Kali, etc) pode usar:

$ sudo update-grub

ou

$ sudo grub-mkconfig -o /boot/grub/grub.cfg

   Agora que destrinchamos o processo de elaborar entradas (menuentry) no arquivo /etc/grub.d/40_custom vamos ver as entradas de algumas distribuições.

CONTEÚDO FINAL DO ARQUIVO

   Deixo aqui o conteúdo completo de como ficou o arquivo /etc/grub.d/40_custom (você pode colocar somente uma entrada de acordo com a sua distribuição, para reparos, caso dê alguma coisa errada com o sistema... ou você faça besteira, o que é mais provável de acontecer).

#!/bin/sh
exec tail -n +3 $0
# This file provides an easy way to add custom menu entries.  Simply type the
# menu entries you want to add after this comment.  Be careful not to change
# the 'exec tail' line above.
#probe -u $root --set=rootuuid
#set imgdevpath="/dev/disk/by-uuid/$rootuuid"

menuentry 'Debian 12.10.0 LIVE XFCE RAM' {
insmod ext2
rmmod tpm
set isofile='/debina/Downloads/debian-live-12.10.0-amd64-xfce.iso'
loopback loop (hd1,6)$isofile
        echo    'Loading Debian Live xfce RAM ...'
linux (loop)/live/vmlinuz-6.1.0-32-amd64 boot=live findiso=$isofile toram components locales=pt_BR.UTF-8 keyboard-model=pc105 keyboard-layouts=br
echo    'Loading initial ramdisk RAM ...'
initrd (loop)/live/initrd.img-6.1.0-32-amd64
}
menuentry 'Debian 12.10.0 LIVE GNOME RAM' {
        insmod ext2
        rmmod tpm
        set isofile='/debina/Downloads/debian-live-12.10.0-amd64-gnome.iso'
        loopback loop (hd1,6)$isofile
        echo    'Loading Debian Live gnome RAM ...'
        linux (loop)/live/vmlinuz-6.1.0-32-amd64 boot=live findiso=$isofile toram components locales=pt_BR.UTF-8 keyboard-model=pc105 keyboard-layouts=br 
        echo    'Loading initial ramdisk RAM ...'
        initrd (loop)/live/initrd.img-6.1.0-32-amd64
}
menuentry 'Fedora-KDE 41 Live RAM' {
rmmod tpm
load_video
set gfxpayload=keep
insmod gzio
insmod part_gpt
insmod chain
insmod ext2
# root=live:/dev/sr0 console=ttyS0,9600
        set isofile='/debina/Downloads/Fedora-KDE-Live-x86_64-41-1.4.iso'
        loopback loop (hd1,6)$isofile
        echo    'Loading Fedora Live ...'
        linux (loop)/images/pxeboot/vmlinuz root=live:CDLABEL=Fedora-KDE-Live-41-1-4 rd.live.image verbose iso-scan/filename=$isofile #acpi=off noprompt noeject dis_ucode_ldr toram components locales=pt_BR.UTF-8 keyboard-model=pc105 keyboard-layouts=br
        echo    'Loading initial ramdisk ...'
        initrd (loop)/images/pxeboot/initrd.img
}
menuentry 'Arch Linux-2025 RAM' {
insmod ext2
rmmod tpm
set isofile='/debina/Downloads/archlinux-2025.03.01-x86_64.iso'
loopback loop (hd1,6)$isofile
echo 'Loading Arch Linux-2025 Live ...'
# linux (loop)/arch/boot/x86_64/vmlinuz-linux boot=x86_64 iso-scan/filename=$isofile noprompt noeject dis_ucode_ldr toram components locales=pt_BR.UTF-8 keyboard-model=pc105 keyboard-layouts=br
linux (loop)/arch/boot/x86_64/vmlinuz-linux archisolabel=ARCH_202503 img_dev=/dev/sdb6 img_loop=$isofile earlymodules=loop toram
echo 'Loading initial ramdisk ...'
initrd (loop)/arch/boot/x86_64/initramfs-linux.img
}
menuentry 'OpenSuse Leap' {
        rmmod tpm
        load_video
        set gfxpayload=keep
set gfxmode=auto
        insmod gzio
        insmod part_gpt
        insmod chain
        insmod ext2
        set isofile='/debina/Downloads/openSUSE-Leap-15.6-DVD-x86_64-Media.iso'
        loopback loop (hd1,6)$isofile
        echo 'Loading OpenSuse-2025 Live ...'
        linux (loop)/boot/x86_64/loader/linux boot=isolinux iso-scan/filename=$isofile toram
        echo 'Loading initial ramdisk ...'
        initrd (loop)/boot/x86_64/loader/initrd
}
menuentry 'Kali-Linux LIVE RAM' {
        insmod ext2
        rmmod tpm
        set isofile='/debina/Downloads/kali-linux-2024.4-live-amd64.iso'
        loopback loop (hd1,6)$isofile
        echo 'Loading Kali-Linux Live ...'
        linux (loop)/live/vmlinuz-6.11.2-amd64 boot=live findiso=$isofile toram components locales=pt_BR.UTF-8 keyboard-model=pc105 keyboard-layouts=br
        echo 'Loading initial ramdisk ...'
        initrd (loop)/live/initrd.img-6.11.2-amd64
}
menuentry 'Ubuntu LIVE RAM' {
        insmod ext2
        rmmod tpm
        set isofile='/debina/Downloads/ubuntu-24.04.2-desktop-amd64.iso'
        loopback loop (hd1,6)$isofile
        echo 'Loading Ubuntu Live ...'
        linux (loop)/casper/vmlinuz boot=casper iso-scan/filename=$isofile noprompt noeject toram components locales=pt_BR.UTF-8 keyboard-model=pc105 keyboard-layouts=br
        echo 'Loading initial ramdisk ...'
        initrd (loop)/casper/initrd
}
menuentry 'Linux Mint LIVE RAM' {
        insmod ext2
        rmmod tpm
        set isofile='/debina/Downloads/linuxmint-22.1-cinnamon-64bit.iso'
        loopback loop (hd1,6)$isofile
        echo 'Loading Linux Mint Live ...'
        linux (loop)/casper/vmlinuz boot=casper iso-scan/filename=$isofile noprompt noeject toram components locales=pt_BR.UTF-8 keyboard-model=pc105 keyboard-layouts=br
        echo 'Loading initial ramdisk ...'
        initrd (loop)/casper/initrd.lz
}


Sempre depois de alterar o arquivo /etc/grub.d/40_custom execute:
$ sudo update-grub
ou o comando equivalente da sua distribuição. Sem atualizar o Grub não terão efeito as alterações no arquivo. Reinicie e teste.

Estas duas linhas comentadas logo abaixo do início do arquivo:

#probe -u $root --set=rootuuid
#set imgdevpath="/dev/disk/by-uuid/$rootuuid"

servem mais para o Arch como configuração para o Grub encontrar-se pelo UUID do disco, porém, na configuração acima não foi preciso utilizá-las, é somente para o caso de colocar somente uma única entrada para o Arch. O Arch e o openSUSE não tem distribuições LIVE oficiais. Aquelas entradas ali são para instalação das ISOs oficiais desses sistemas. Para colocar na RAM basta acrescentar o parâmetro "toram".

Alguns parâmetros extras em algumas entradas como, por exemplo, do Fedora e/ou do openSUSE

load_video
set gfxpayload=keep
insmod gzio
insmod part_gpt
insmod chain

você encontra dentro da pasta da imagem ISO descompactada, procure nas pastas pelo arquivo de texto grub.cfg e abra-o com seu editor de texto preferido que você encontrará as entradas (menuentry) padrões das configurações que vem na própria ISO.

   Esses parâmetros extras às vezes são necessários para uma boa execução do sistema Live a partir do disco.

   Parâmetros obrigatórios como "root=live:CDLABEL=Fedora-KDE-Live-41-1-4 rd.live.image" do Fedora e "archisolabel=ARCH_202503" do Arch você também encontra nesse arquivo grub.cfg dentro da pasta descompactada.

   Esses parâmetros são o LABEL que é necessário em algumas distribuições, por isso se faz necessário descompactar a ISO e procurar o arquivo grub.cfg.

   A cada nova ISO com uma nova versão da distribuição você deve refazer a entrada no Grub com esses novos parâmetros, pois eles podem mudar a cada nova versão da distribuição.
   Repare que algumas entradas tem iso-scan/filename=$isofile e outras findiso=$isofile, pelo que testei é indiferente, mas pode acontecer que alguma distribuição tenha esse parâmetro fixo por padrão, pois não testei com todas e nem teria como.

   O parâmetro boot=isolinux, boot=live, etc, é necessário em algumas distribuições e em outras não, verifique o arquivo grub.cfg dentro da pasta descompactada. No Arch e no Fedora, por exemplo, não tem tal parâmetro.

   Perceba que, com exceção do openSUSE, esse parâmetro "boot=" refere-se à pasta onde está o arquivo vmlinuz ou parecido, no Debian é a pasta "live", no Ubuntu é a pasta "casper", etc. No openSUSE é boot=isolinux. Lembrando que o openSUSE e o Arch não tem imagens ISO Live oficiais, as imagens que utilizei são imagens ISO para instalação do sistema, baixadas nos sites oficiais.

   Seguem abaixo o consumo da RAM com ISOs carregadas na memória RAM e no disco.

Tela do Debian com Gnome Live executado pelo disco.


Vemos o Debian com Gnome ocupando ~5GB na RAM.


Vemos o Debian com XFCE Live executado pelo disco.


Vemos o Debian com Xfce ocupando ~4GB na RAM.


Vemos o Debian com Xfce executado pelo disco, sem ser carregado direto na RAM, ocupando ~1GB na RAM.

   Lembrando que basta retirar o parâmetro "toram" que a ISO não será toda carregada na memória RAM, mas somente o necessário, o restante será executado/lido do disco físico.

   Em caso de formatação e reparo completo do sistema é aconselhado colocar a imagem toda na RAM, mesmo que você particionou a /home separadamente e não a formatará, pois a instalação completa do sistema mexerá na tabela de partições.

CONCLUSÃO

Mint com Mate ocupando ~4GB na RAM.


Fedora Live rodando do disco.


Arch com ISO rodando do disco.


Vários erros quando você não especifica o caminho correto no arquivo 40_custom.


Menu do Grub com todas as entradas (menuentry).

   Talvez você tenha de adaptar alguma coisa de acordo com a sua distribuição, pois aqui foi utilizado o Debian, porém, basta você entrar na pasta descompactada da ISO e procurar os dois arquivos "vmlinuz" e "initrd" ou algo parecido, como vimos neste artigo, os nomes desses arquivos podem mudar, mas sempre terá linuz(x) e initrd(.img) para procurar.

   Procure dentro da pasta descompactada da ISO as informações relevantes para colocar dentro das entradas (menuentry) de acordo com a sua distribuição. De acordo com as mensagens de erro você vai descobrindo se colocou o caminho errado para a imagem ISO, se colocou o hdx,x errado, etc, e assim vai arredondando o script no arquivo /etc/gub.d/40_custom.

Sempre depois de alterar o arquivo /etc/grub.d/40_custom execute:
$ sudo update-grub
ou o comando equivalente da sua distribuição.
Sem atualizar o Grub não terão efeito as alterações no arquivo.
Reinicie e teste.

Referências




domingo, 6 de abril de 2025

Instalar MySQL no Debian


Segue "totorial":

Atualizando o sistema:
$ sudo apt update
$ sudo aptitude safe-upgrade

Instalando dependências:
$ sudo apt install libaio1 wget curl apt-transport-https

Para ver a instalação da tua distribuição:
https://dev.mysql.com/doc/refman/8.4/en/linux-installation.html

Adicionando o repositório (no lugar de x coloque o número da versão):
$ sudo wget https://dev.mysql.com/get/mysql-apt-config_x
.x.xx-x_all.deb

Por exemplo:
$ sudo wget https://dev.mysql.com/get/mysql-apt-config_0.8.33-1_all.deb

Veja ou faça o download da versão mais recente em Download do MySQL

Para o Debian:

Instalando (no lugar do x coloque o número da versão baixada):
$ sudo dpkg -i mysql-apt-config_x.x.xx-x_all.deb

Por exemplo:
$ sudo dpkg -i mysql-apt-config_0.8.33-1_all.deb

Na janela gráfica deixe as opções marcadas ou escolha, se você souber o que está fazendo > enter > enter > tab > OK > enter.

$ sudo apt update  <<< essa etapa é obrigatória para atualizar a lista de repositórios cujo adicionamos

Reconfigurando:
$ sudo dpkg-reconfigure mysql-apt-config

Deixe as opções marcadas ou escolha... > enter > enter > tab > OK > enter.

File '/usr/share/keyrings/mysql-apt-config.gpg' exists. Overwrite? (y/N) y

$ sudo apt update <<< importante para atualizar lista de repositórios.
$ sudo apt install mysql-server

maseque@debina:~$ sudo apt install mysql-server
Lendo listas de pacotes... Pronto
Construindo árvore de dependências... Pronto
Lendo informação de estado... Pronto
The following additional packages will be installed:
libmecab2 mecab-ipadic mecab-ipadic-utf8 mecab-utils mysql-client
mysql-community-client mysql-community-client-core
mysql-community-client-plugins mysql-community-server
mysql-community-server-core
Os NOVOS pacotes a seguir serão instalados:
libmecab2 mecab-ipadic mecab-ipadic-utf8 mecab-utils mysql-client
mysql-community-client mysql-community-client-core
mysql-community-client-plugins mysql-community-server
mysql-community-server-core mysql-server
0 pacotes atualizados, 11 pacotes novos instalados, 0 a serem removidos e 1 não atualizados.
É preciso baixar 42,3 MB de arquivos.
Depois desta operação, 358 MB adicionais de espaço em disco serão usados.
Você quer continuar? [S/n] S


Parangolé, parangolé... monte de letras, números e símbolos estranhos... etc etc etc...

Terminará assim:

done!
update-alternatives: a usar /var/lib/mecab/dic/ipadic-utf8 para disponibilizar /
var/lib/mecab/dic/debian (mecab-dictionary) em modo auto
Configurando mysql-community-client (8.0.36-1debian12) ...
Configurando mysql-client (8.0.36-1debian12) ...
Configurando mysql-community-server (8.0.36-1debian12) ...
update-alternatives: a usar /etc/mysql/mysql.cnf para disponibilizar /etc/mysql/
my.cnf (my.cnf) em modo auto
Created symlink /etc/systemd/system/multi-user.target.wants/mysql.service → /lib
/systemd/system/mysql.service.
Configurando mysql-server (8.0.36-1debian12) ...
A processar 'triggers' para man-db (2.11.2-2) ...
A processar 'triggers' para libc-bin (2.36-9+deb12u4) ...

maseque@debina:~$

Acessando:

maseque@debina:~$ mysql -u root -p
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 8
Server version: 8.4.4 MySQL Community Server - GPL

Copyright (c) 2000, 2025, Oracle and/or its affiliates.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> 

Para sair digite \q > enter.

Para saber a verão use o comando acima, pois a partir da versão 8.4 se você digitar "mysql -v" dará o seguinte erro:

$ mysql -v
ERROR 1524 (HY000): Plugin 'mysql_native_password' is not loaded

Ou

$ sudo mysql -v
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)

Segundo a página oficial do MySQL, o plugin 'mysql_native_password' está obsoleto desde o MySQL 8.0.34, desabilitado por padrão no MySQL 8.4 e será removido no MySQL 9.0.0.

Note

The mysql_native_password authentication plugin is deprecated as of MySQL 8.0.34, disabled by default in MySQL 8.4, and removed as of MySQL 9.0.0.


  • Tentativas de criar uma nova conta de usuário ou alterar uma conta de usuário existente identificada com mysql_native_password também falham e emitem um erro.

    mysql> CREATE USER userxx@localhost IDENTIFIED WITH 'mysql_native_password'; ERROR 1524 (HY000): Plugin 'mysql_native_password' is not loaded mysql> ALTER USER userxy@localhost IDENTIFIED WITH 'mysql_native_password'; ERROR 1524 (HY000): Plugin 'mysql_native_password' is not loaded
Não habilite o plugin!


Referências

https://www.vivaolinux.com.br/dica/Instalar-MySQL-no-Debian-12/
https://dev.mysql.com/doc/mysql-installation-excerpt/8.3/en/linux-installation-debian.html












quinta-feira, 3 de abril de 2025

Como Saber o Range de um IP Público?


Primeiro você vai nesse site:


e ali você vê a procedência do IP.

Como exemplo aparece logo seu próprio IP na caixa de pesquisa.
Vamos usar como exemplo o IP 208.152.100.10 e veremos que é dos EUA.

Daí você vai nesse Whois:


e joga o IP ali e procura no resultado:

NetRange: 208.138.176.0 - 208.157.143.255
CIDR: 208.156.0.0/16, 208.152.0.0/14, 208.157.128.0/20, 208.140.0.0/14, 208.139.0.0/16, 208.144.0.0/13, 208.157.0.0/17, 208.138.176.0/20, 208.138.192.0/18

Pode ir direto no Whois no Brasil do registro.br:


ali dirá que o IP não está alocado no Brasil e indicará o Whois mundial.

Para entender melhor como funcionam os IPs com seus ranges, use este site:


e verá que o range depende da máscara de rede e é o Adminastror da Rede quem decide.

quarta-feira, 2 de abril de 2025

Atualizar para o VIM 9.1 no Debian

O VIM91 baixado do site oficial e instalado desta maneira atualizará o VIM.

Baixe o vim aqui:
https://tracker.debian.org/pkg/vim

Clique no número da versão em link azul (a versão vai sendo atualizada, por isso coloquei XXXX):
A new upstream version is available: 9.1.XXXX

Atualize e instale as dependências necessárias:
$ sudo apt update
$ sudo apt install libncurses-dev ncurses-doc

Entre na pasta onde baixou e descompacte:
$ tar -xf vim-9.1.1279.tar.gz  <<< no momento era essa versão, mas pode ter sido atualizada.
$ cd vim-9.1.1279
$ sudo ./configure
$ sudo make
$ sudo make install
$ sudo apt update


Saia do terminal:
$ exit
Abra o terminal e execute:
$ vim
Veja que estará na versão 9.1.1279.

E confirme:
$ vim --version
VIM - Vi IMproved 9.1 (2024 Jan 02, compiled Apr  8 2025 22:46:05)
Correções incluídas: 1-1279
Compilado por aristotles@xpto
...



E não precisa se preocupar, esse vim 9.1 atualizará automaticamente.

segunda-feira, 3 de março de 2025

Quer Ficar Mais Inteligente?

   Quer ficar mais inteligente?
   Comece a ler!
   Ler o quê?
   Leia de tudo!
   O "leia de tudo" refere-se às leituras importantes. Comece pelo clássicos.
   Não indicarei nenhum livro aqui, pois isso faz parte do processo.

    O "leia de tudo" não significa colocar 3 ou 4 livros abertos ao mesmo tempo na sua frente e ler uma página de um, uma página de outro, página de aqueloutro, etc.
   Pode-se perfeitamente começar a ler um livro e, depois de algumas páginas, perder o interesse momentaneamente, marcá-lo na página em que se está para ler depois e partir para outro livro.
   Coloquei momentaneamente com acento porque rejeito as reformas ortográficas.
    Outra coisa importantíssima é estar municiado de um dicionário antes até de se começar a ler.
    Qual dicionário?

   Qualquer um. Sugiro ter uns 3 ou 4 em casa, um de cada autor. Quando um não te satisfaz, consulte o outro. Hoje existem dicionários eletrônicos que facilitam a consulta, mas tenha tanto eletrônico quanto em papel. Isto servirá até mesmo para você comparar um dicionário com o outro, pois o dicionário é o obrigatório necessário durante uma leitura, porém, não é o determinante em questão de interpretação, mas é o básico obrigatório sem o qual não se chega a uma boa interpretação de um texto!
   Para se poder interpretar um texto (texto é escrito, discurso é falado) tem de se ter um bom vocabulário e um bom vocabulário vem mais da palavra escrita do que da palavra falada.
   No dicionário é que estão os significados e sentidos das palavras e para se poder interpretar um texto escrito deve-se saber tais significados e sentidos, o que é óbvio, porém, nem sempre o óbvio o é para todos.
   Por exemplo, a palavra "municiado" utilizada anteriormente.
   No dicionário procuramos por "municiar", pois "municiado" não consta porque é a forma nominal do particípio do verbo "municiar":

n verbo
transitivo direto
1 prover de munição(ões)
Ex.: m. as tropas
transitivo direto
2 Derivação: por extensão de sentido.
prover do que é necessário; abastecer, guarnecer
Obs.: f. geral pref. e menos us.: municionar
Ex.: solicitaram grande quantidade de comida para m. a despensa do cargueiro


   Utilizei "municiado" no sentido de "prover munição"?
   Óbvio que não.
   Certamente utilizei municiado no sentido de "abastecer", "guarnecer" de palavras a sua leitura.
   Muitas vezes acreditamos que sabemos o significado e/ou os sentidos das palavras, mas não sabemos, e daí vem o principal problema na interpretação de um texto.
   Lembrando que há uma diferença entre "significado" e "definição", o que não vem ao caso, pois é um texto curto, não um livro.
   Porém:
   significado: "relação de reconhecimento, de apreço; valor, importância, significação, significância"
   definição: "ato ou efeito de definir(-se), delimitação exata, estabelecimento de limites"

   Lembrando também que, em qualquer dicionário, a primeira explicação em palavras encontrada logo após a palavra procurada é o significado e é genérico (significado genérico é redundância porque todo significado, neste sentido linguístico, é genérico).
   Alguns dicionários são numerados, sendo a explicação número 1 o significado e as outras (2, 3, 4, etc) são os sentidos nos quais podemos empregar o termo, no caso, a palavra. Lembrando que existe diferença entre termo e palavra.
   Julgo que o leitor já soubesse de tudo isso que escrevi anteriormente, pois é óbvio, é apodítico, é auto-evidente, mas utilizei como introdução e, como já dito, o óbvio muitas vezes em tempos de estupidez mundial, não o é para todos.

   A questão é que a Língua e a Linguagem são convenções estabelecidas pelo ser humano!
   Lembrando que Língua é a língua Portuguesa, a língua Inglesa, a língua Alemã, idiomas, dialetos, etc.
   A Linguagem engloba a Língua, a Linguagem é o Geral e a Língua é um dos particulares da Linguagem ou, caso preferir, a Linguagem é o Todo e a Língua é uma das Partes que compõe a Linguagem.
   Aí já entramos em Aristóteles - o Geral e os Particulares -, sendo que não precisamos nos aprofundarmos tanto assim, senão daqui a pouco retornaremos aos pré-socráticos.
   Precisamente ao tempo atual, vemos a importância do ato de ler.
   O Ser Humano se comunica através da Linguagem, mais precisamente, através da palavra (falada e/ou escrita).
   Você mesmo que está lendo estas laudas, sabe que existiu um filósofo chamado Aristóteles porque ele deixou textos escritos, senão você nunca teria ouvido falar no filósofo grego Aristóteles.
   Podemos argumentar sobre Sócrates que não deixou nenhum texto escrito porque era avesso à escrita - ele mesmo disse isso -, ele acreditava no conhecimento por presença.
   Contudo, caso Platão, Aristófanes e Xenofonte não tivessem deixado escritos sobre Sócrates nunca teríamos ouvido falar dele.
   Isso vale para todo e qualquer autor que já morreu: caso ele ou alguém ligado a ele não tivesse deixado textos escritos sobre ele, você sequer saberia que ele tinha existido na história da humanidade.
   Por exemplo, você já ouviu falar sobre ou leu alguma obra de Eurimaco de Tebas?
   Ele foi o maior filósofo da estória da humanidade no sentido de que foi preceptor de Sócrates, Platão e Aristóteles, veio antes dos pré-socráticos e é citado por Avicena, Leibniz, Marx em vários de seus escritos além de ser citado por vários outros filósofos de renome no planeta inteiro (a lista é grande), ou seja, foi o único que influenciou as filosofias ocidentais e orientais, influenciou a filosofia no mundo inteiro.
   Caso nunca tenha ouvido falar nele, não se preocupe, eu inventei esse nome: "Eurimaco de Tebas". Eurimaco foi um personagem menor da Odisséia de Homero e Tebas foi uma cidade da Grécia antiga, por isso você nunca ouvi falar nele nem dele, talvez até tenha existido um Eurimaco de Tebas, mas vá saber.
   Foi para demonstrar que, caso não tenha obras escritas por/sobre você, seu nome não será lembrado na história.
   Essa é a importância da Palavra Escrita e, por conseguinte, do ato da leitura.

   Não podemos estabelecer uma hierarquia entre a Palavra Falada e a Palavra Escrita, as duas tem importância igual e por isso mesmo o equilíbrio é necessário.
   Uma Nação onde há um desequilíbrio entre as Palavras Falada e Escrita é uma Nação estúpida (lembrando que Estupidez é burrice extrema).
   Sabemos que a Linguagem está diretamente ligada à Inteligência, mas nunca é demais repetir essa afirmação, apesar da sua obviedade.
   Sabemos também que a memória do Ser Humano é falha e esta obviedade também nunca é demais repetir.
   A Palavra Escrita nos serve de apoio à memória, pois aumentamos nosso vocabulário para lembrarmos de não repetir os mesmos erros. Podemos encontrar novos erros para cometer, mas, com o tempo, a incidência diminui, o que também é óbvio, em resumo: quando você lembra do passado mais você vive o presente e previne-se no futuro.

   Caso eu tivesse escrito a última oração com "previne-se DO futuro" daria a idéia de que o futuro é ruim e temos de nos "prevenir" dele. A Língua Portuguesa Brasileira tem dessas coisas, uma simples letra muda a semântica inteira da frase.

   Caso você, na sua vida, fala mais do que lê e escreve ou vice-versa, corrija esse desequilíbrio, assim ficará mais inteligente, o que também é óbvio.