Caso seja do seu interesse, veja aqui como baixar, compilar e empacotar um kernel em sistemas
Debian-based.
Como já dito na introdução, a distro em teste será o
Devuan AscII 2.0, mas poderia ser qualquer outra: BunsenLabs, Mx
Linux, antiX, LMDE ou mesmo o próprio Debian, quem sabe até mesmo os *buntus.
Requerimentos
O principal requerimento é que o seu sistema esteja atualizado, logo:
# apt-get update
# apt-get upgrade
Ou:
# apt-get dist-upgrade
Pacotes
Abaixo, vejam quais pacotes são necessários, seja para compilar ou mesmo para a criação de módulos diversos (nesse caso, entra o DKMS justamente para isso).
Atente também para o pacote
kernel-package, será ele o responsável pelo empacotamento. Poderá ocorrer que em alguns sistemas o mesmo não esteja disponível para instalação, se for esse o caso, deixarei logo abaixo uma forma alternativa para sua instalação:
# apt-get install build-essential cpp dkms g++ gcc fakeroot flex bison make libfl-dev libncurses5-dev libssl-dev module-assistant
# apt-get --no-install-recommends install kernel-package
NOTA-1: a opção "--no-install-recommends" foi inserida para que não seja necessário baixar quase 1 GB de dados não essenciais a esse propósito. Com ela, talvez você baixe apenas uns 2MBs!
NOTA-2: diferentemente do Debian puro, o Devuan em seu sistema padrão com XFCE vem bem capenga de pacotes -dev.
Caso você não consiga baixar e instalar o kernel-package, segue a solução que, por sua vez, pedirá mais pacotes!
# apt-get update
# apt-get install dpkg-dev devscripts equivs packaging-dev
NOTA: em meu blog, existe um artigo já antigo que trata sobre deixar um Debian mais completo para compilação e empacotamento:
Baixando os sources...
dget -x -u http://deb.debian.org/debian/pool/main/k/kernel-package/kernel-package_13.018+nmu1~bpo9+1.dsc
NOTA: o comando é mesmo o " dget ", utilitário constante do pacote devscripts.
Entrando no diretório de trabalho...
cd kernel-package-13.018+nmu1~bpo9+1/
Criando e instalando o meta-pacote de dependências...
mk-build-deps -s sudo -i
sudo apt-get -f install
Compilando e empacotando...
dpkg-buildpackage -us -uc -b -tc
Instalando os novos pacotes...
sudo dpkg -i ../kernel-common_13.018+nmu1~bpo9+1_all.deb ../kernel-package_13.018+nmu1~bpo9+1_all.deb
sudo apt-get -f install
Removendo o meta-pacote de dependências...
sudo apt-get --purge remove kernel-package-build-deps -y
sudo apt-get autoremove --purge
Preparação
Comece por editar o arquivo
/etc/kernel-pkg.conf, deixando-o mais ou menos assim:
maintainer := zé-do-brejo-da-silvasauro
email := zedobrejo@unknownmail.com
Como visto, basta inserir seu nome e seu email, caso não queira por nada, simplesmente ignore!
Kernel
Caso haja uma nova versão no momento da publicação deste artigo, você pode baixá-la diretamente em:
Kernel.org, ou apenas ajustando a versão nos códigos abaixo. Por hora, segue o download da versão mais atual, a 5.0.12:
# wget -c -nv https://cdn.kernel.org/pub/linux/kernel/v5.x/linux-5.0.12.tar.xz
Ou:
# curl -C - -L -O https://cdn.kernel.org/pub/linux/kernel/v5.x/linux-5.0.12.tar.xz
Descompacte os sources do kernel em
/usr/src:
# tar xvf linux-5.0.12.tar.xz -C /usr/src/
Entre no diretório raiz (/usr/src), é claro:
# cd /usr/src
Renomeie a pasta expandida de "linux-5.0.12" para "linux-headers-5.0.12-NOME_QUALQUER", aqui usei "edps" exemplo:
# mv linux-5.0.10 linux-headers-5.0.10-edps
NOTA: o motivo para isto, está citado no artigo original que publiquei em meu blog, cujo conteúdo é basicamente o mesmo deste, porém com algumas informações a mais, por exemplo, no que trata dos links simbólicos "build" e "source" constantes do diretório
/lib/modules/versão-do-kernel:
Voltando...
Entre no diretório de trabalho, se fez tudo certo até aqui, será o "linux-headers-5.0.12-NOME_QUALQUER", usarei o meu nickname como exemplo daqui por diante:
# cd linux-headers-5.0.12-edps/
Execute o comando abaixo para utilizar a config atual como padrão e tecle
Enter quando solicitado:
# make oldconfig
Se quiser um kernel mais enxuto, com apenas os módulos em uso (o que tornará mais rápida a compilação, use):
# make localmodconfig
NOTA: eu nunca cheguei a empacotar um kernel compilando assim, de tão rápido que é o processo, mas por outro lado fica a preocupação acerca do arquivo initrd, caso resolva fazer assim, segue o passo para criar o initrd (se necessário).
Se for este o seu caso e não ocorrer a criação do initrd após a instalação dos pacotes, execute o comando abaixo:
# mkinitramfs -o /boot/initrd.img-5.0.12-edps /lib/modules/5.0.12-edps
Simples assim!
Tá tudo muito bom, tudo muito bem, chegamos a parte de corrigir um bug histórico do kernel-package:
# mkdir Documentation/lguest
# echo all: >> Documentation/lguest/Makefile
Compilação e Empacotamento
NOTA: observe que no comando abaixo, você deve substituir "edps" pelo nome dado a pasta (/usr/src/linux-headers-5.0.12-NOME_QUALQUER), do contrário, os links simbólicos já citados ficarão quebrados (mas nada que você não possa resolver manualmente).
Visando otimizar o processo de compilação e empacotamento, sendo o meu PC um six-Core (6 Cores, 6 threads), acrescentarei + 1 no comando abaixo, logo, se souber o que rola por debaixo do capô de seu PC, beleza, do contrário, tente assim:
grep -c processor /proc/cpuinfo
Ou, somente um:
lscpu
Agora vejamos o comando para o meu six-Core (ajuste de acordo):
# INSTALL_MOD_STRIP=1 CONCURRENCY_LEVEL=7 fakeroot make-kpkg --initrd --append-to-version=-edps --revision=1.0 kernel_image kernel_headers
Mas, poderia ser somente:
# make-kpkg --initrd --append-to-version=-edps --revision=1.0 kernel_image kernel_headers
Para mais, veja:
make-kpkg --help
man make-kpkg
Se tudo der certo, ao final do processo vocês terão dois pacotes ".deb" em
/usr/src, restará então sair do diretório de trabalho, removê-lo (sim, removê-lo porque o conteúdo desta pasta estará presente no pacote ".deb": linux-headers-5.0.12-edps_1.0_amd64.deb) e instalar os pacotes:
# cd ..
# rm -rf linux-headers-5.0.12-edps
# dpkg -i *.deb
Ou, instalando individualmente:
# dpkg -i linux-image-5.0.12-edps_1.0_amd64.deb
# dpkg -i linux-headers-5.0.12-edps_1.0_amd64.deb
Alguns comandos foram executados sem necessidade, apenas para demonstrar que não houve a quebra do APT e a versão atual do Kernel, tamanho dos pacotes, etc.
Após o primeiro boot, segue a shot do neofetch:
Conclusão
Além do aprendizado, acho que é bem válido compilar e empacotar pelos seguintes motivos:
1. Você poderá deixar o seu sistema bem limpo com um simples:
# apt-get --purge remove linux-image-5.0.12-edps linux-headers-5.0.12-edps
2. Poderá também manter um kernel alternativo ao disponível, visto que esse não substitui o Kernel padrão.
3. Poderá testar configurações diversas, alguns exemplos:
A config padrão do Slackware -current é excelente no suporte a hardwares!
4. Em que se pese os fatos favoráveis, em oposição a isso, também deve-se levar em conta a longa espera de todo o processo, o que levará alguns a dizerem que poderão utilizar "n" kernels das mais variadas distros. Sim, você pode! O que aqui está exposto não é regra.
Aqui concluo e desde já agradeço aos que tiveram paciência em ler este artigo.
IntÈ!