Empacotamento de Kernel em Sistemas Debian-Based

Veremos aqui como baixar, compilar e empacotar o kernel mais recente em sistemas Debian-based. A distribuição em teste será o Devuan Ascii 2.0 + Backports. Devuan é um fork do Debian e sua release estável baseia-se no Debian Stretch 9.0.x.

[ Hits: 1.700 ]

Por: edps em 23/05/2019 | Blog: https://edpsblog.wordpress.com/


Mãos à obra!



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
Linux: Empacotamento de Kernel em Sistemas Debian-based.
Linux: Empacotamento de Kernel em Sistemas Debian-based.
Compilando e empacotando...

dpkg-buildpackage -us -uc -b -tc
Linux: Empacotamento de Kernel em Sistemas Debian-based.
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
Linux: Empacotamento de Kernel em Sistemas Debian-based.
Linux: Empacotamento de Kernel em Sistemas Debian-based.
Removendo o meta-pacote de dependências...

sudo apt-get --purge remove kernel-package-build-deps -y
sudo apt-get autoremove --purge
Linux: Empacotamento de Kernel em Sistemas Debian-based.

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
Linux: Empacotamento de Kernel em Sistemas Debian-based.
Linux: Empacotamento de Kernel em Sistemas Debian-based.
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
Linux: Empacotamento de Kernel em Sistemas Debian-based.
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
Linux: Empacotamento de Kernel em Sistemas Debian-based.
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
Linux: Empacotamento de Kernel em Sistemas Debian-based.
Linux: Empacotamento de Kernel em Sistemas Debian-based.
Linux: Empacotamento de Kernel em Sistemas Debian-based.
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:
Linux: Empacotamento de Kernel em Sistemas Debian-based.

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

   

Páginas do artigo
   1. Mãos à obra!
Outros artigos deste autor

Iceweasel 4.0 no Debian Squeeze

ARM, utilização de snapshot de pacotes no Arch Linux

Siduction - Nova distro baseada no Debian SID

Instalação do driver Nvidia no Debian e em distros derivadas

Enlightenment no Debian Squeeze e no Ubuntu

Leitura recomendada

Compilando ou atualizando um kernel Linux

Instalando o kernel 2.6.37 de maneira fácil no Ubuntu 10.10

Kernel 2.6: a instalação mais fácil

Compilando kernel com suporte a POM (path-omatic) e Layer7 no Debian e Slackware

Compilação do Kernel Linux para máquinas locais Debian

  
Comentários
[1] Comentário enviado por sacioz em 23/05/2019 - 14:57h

Muito bom...conciso e sem firulas. Favoritado.

[2] Comentário enviado por rootgerr em 23/05/2019 - 21:15h

Olá brother como sempre excelente artigo, mas encontrei um problema aqui:
"wget -x -u http://deb.debian.org/debian/pool/main/k/kernel-package/kernel-package_13.018+nmu1~bpo9+1.dsc";

essa opção -u trava o procedimento, no man consta apenas "-U" ela é estritamente necessária?, (não tenho costume com debian mas tive que instalar devido a uma impressora que comprei e acabei gostando).
Abraços

[3] Comentário enviado por edps em 23/05/2019 - 21:22h


[1] Comentário enviado por sacioz em 23/05/2019 - 14:57h

Muito bom...conciso e sem firulas. Favoritado.


Obrigado, brother. quando possível veja um próximo comentário meu, pois farei algumas observações.

[4] Comentário enviado por edps em 23/05/2019 - 21:26h


[2] Comentário enviado por rootgerr em 23/05/2019 - 21:15h

Olá brother como sempre excelente artigo, mas encontrei um problema aqui:
"wget -x -u http://deb.debian.org/debian/pool/main/k/kernel-package/kernel-package_13.018+nmu1~bpo9+1.dsc";

essa opção -u trava o procedimento, no man consta apenas "-U" ela é estritamente necessária?, (não tenho costume com debian mas tive que instalar devido a uma impressora que comprei e acabei gostando).
Abraços



Brother, talvez tenha sido erro meu em não citar no artigo, que o comando correto é ( dget ), talvez quem moderou o artigo trocou|corrigiu para wget. Vou solicitar que façam a correção.

Então, fica assim:

$ dget -x -u

Dget é um utilitário presente no pacote devscripts, falando nele até criei um SlackBuild para ele já que sou o mantenedor do dpkg, localepurge, etc no SlackBuilds. Com o " dget " eu posso em meu Slack pegar os sources de qualquer pacote Debian e compilar da forma que quiser.

[5] Comentário enviado por rootgerr em 23/05/2019 - 21:29h


[4] Comentário enviado por edps em 23/05/2019 - 21:26h


[2] Comentário enviado por rootgerr em 23/05/2019 - 21:15h

Olá brother como sempre excelente artigo, mas encontrei um problema aqui:
"wget -x -u http://deb.debian.org/debian/pool/main/k/kernel-package/kernel-package_13.018+nmu1~bpo9+1.dsc";

essa opção -u trava o procedimento, no man consta apenas "-U" ela é estritamente necessária?, (não tenho costume com debian mas tive que instalar devido a uma impressora que comprei e acabei gostando).
Abraços



Brother, talvez tenha sido erro meu em não citar no artigo, que o comando correto é ( dget ), talvez quem moderou o artigo trocou|corrigiu para wget. Vou solicitar que façam a correção.

Então, fica assim:

$ dget -x -u

Dget é um utilitário presente no pacote devscripts, falando nele até criei um SlackBuild para ele já que sou o mantenedor do dpkg, localepurge, etc no SlackBuilds. Com o " dget " eu posso em meu Slack pegar os sources de qualquer pacote Debian e compilar da forma que quiser.

Vlw!


[6] Comentário enviado por izaias em 25/05/2019 - 12:24h


[4] Comentário enviado por edps em 23/05/2019 - 21:26h


[2] Comentário enviado por rootgerr em 23/05/2019 - 21:15h

Olá brother como sempre excelente artigo, mas encontrei um problema aqui:
"wget -x -u http://deb.debian.org/debian/pool/main/k/kernel-package/kernel-package_13.018+nmu1~bpo9+1.dsc";

essa opção -u trava o procedimento, no man consta apenas "-U" ela é estritamente necessária?, (não tenho costume com debian mas tive que instalar devido a uma impressora que comprei e acabei gostando).
Abraços



Brother, talvez tenha sido erro meu em não citar no artigo, que o comando correto é ( dget ), talvez quem moderou o artigo trocou|corrigiu para wget. Vou solicitar que façam a correção.

Então, fica assim:

$ dget -x -u

Dget é um utilitário presente no pacote devscripts, falando nele até criei um SlackBuild para ele já que sou o mantenedor do dpkg, localepurge, etc no SlackBuilds. Com o " dget " eu posso em meu Slack pegar os sources de qualquer pacote Debian e compilar da forma que quiser.


Corrigido!

[7] Comentário enviado por edps em 25/05/2019 - 18:12h


[6] Comentário enviado por izaias em 25/05/2019 - 12:24h
Corrigido!


Thanks nobre @Izaias, ocorre que você deve ter substituido também o outro wget pelo dget rsrs (na parte que baixa os sources do kernel, deixei duas opções... uma com wget e outra com o curl), abaixo seguem correções diversas... (já solicitadas através do Fale Conosco).


1. no campo PACOTES:

# apt-get install build-essential cpp dkms g++ gcc fakeroot flex bison make libelf-dev libfl-dev libncurses5-dev libssl-dev module-assistant
# apt-get --no-install-recommends install kernel-package

* apenas inclui o pacote " libfl-dev "

2. no campo KERNEL:

# wget -c -nv https://cdn.kernel.org/pub/linux/kernel/v5.x/linux-5.0.12.tar.xz

ou simplesmente:

# wget https://cdn.kernel.org/pub/linux/kernel/v5.x/linux-5.0.12.tar.xz

** nesse deve ter ocorrido a troca do correto wget pelo dget.

Thanks muchacho!

[8] Comentário enviado por izaias em 25/05/2019 - 18:20h

Mande e-mail direto pra mim. É mais rápido.

OK. Nem conhecia esse "dget". :)
Quando você explicou sobre, aprendi a concepção.
VLW!

[9] Comentário enviado por Cizordj em 12/06/2019 - 11:35h

Estou compilando em um Debian Buster bem enxuto mesmo, instalado com o net install, é normal a cada apt-get -f install que ele instale 1Gb de coisas? Vi nos seus screenshots só alguns kbytes de download mas no meu chega a 800Mb de coisa para instalar.


<---------------------------------------------------------------->
O seu tempo é o único bem que você não recupera

[10] Comentário enviado por edps em 12/06/2019 - 21:18h


[9] Comentário enviado por Cizordj em 12/06/2019 - 11:35h

Estou compilando em um Debian Buster bem enxuto mesmo, instalado com o net install, é normal a cada apt-get -f install que ele instale 1Gb de coisas? Vi nos seus screenshots só alguns kbytes de download mas no meu chega a 800Mb de coisa para instalar.


&lt;----------------------------------------------------------------&gt;
O seu tempo é o único bem que você não recupera


É que os meus sistemas estão configurados para não instalar pacotes RECOMENDADOS ou SUGERIDOS, dependendo do que eu ver na lista de pacotes recomendados eu instalo manualmente, segue o conteúdo dos arquivos:

/etc/apt/apt.conf.d/04disable-recommends ::

APT::Install-Recommends "0";

/etc/apt/apt.conf.d/05disable-suggests ::

APT::Install-Suggests "0";

/etc/apt/apt.conf ::

APT::Default-Release "ascii-backports";
APT::Get::Purge "1";
APT::Cache-Limit "300000000";
APT::Get::AllowUnauthenticated "0";
APT::Get::AutomaticRemove "1";
APT::Get::HideAutoRemove "0";
// INFO: https://devuan.org/os/documentation/dev1fanboy/migrate-jessie-minimalism
// APT::AutoRemove::RecommendsImportant "false";
Acquire::Queue-Mode "host";
Acquire::Languages "none";
Acquire::PDiffs "1";
Debug::pkgAutoRemove "0";
DPkg::NoTriggers "1";
DPkg::ConfigurePending "1";
DPkg::TriggersPending "1";
DPkg
{
Options {--force-overwrite;}
}
PackageManager::Configure "smart";

As duas primeiras opções poderiam fazer parte do /etc/apt/apt.conf, mas preferi deixá-las separadas das demais.

EM TEMPO:

E sendo Debian Buster/Testing, essa quantidade de dados é normal, na Testing e na Unstable o volume é quase igual, mas bem superior a Stable.

[11] Comentário enviado por Cizordj em 13/06/2019 - 10:08h

Olha muito obrigado pelo artigo, agora consegui compilar o kernel 5.1.9 no Debian. Desculpa pela pergunta i diota mas, é normal o pacote do kernel ser tão pequeno assim? O meu deu 8mb apenas.

Usei o make localmodconfig na hora de compilar.

<---------------------------------------------------------------->
O seu tempo é o único bem que você não recupera

[12] Comentário enviado por edps em 13/06/2019 - 21:58h


[11] Comentário enviado por Cizordj em 13/06/2019 - 10:08h

Olha muito obrigado pelo artigo, agora consegui compilar o kernel 5.1.9 no Debian. Desculpa pela pergunta i diota mas, é normal o pacote do kernel ser tão pequeno assim? O meu deu 8mb apenas.

Usei o make localmodconfig na hora de compilar.

&lt;----------------------------------------------------------------&gt;
O seu tempo é o único bem que você não recupera


Veja o tamanho dos arquivos com um simples du -sh: normalmente é pequeno mesmo, numa compilação completa são quase 4000 módulos, ja usando essa opção é pouco menos de 200!

Para exemplificar, tenho em meu blog uma dica ainda mais atual que esta e onde você pode executar todos os passos como usuário normal, agora compilei usando o make localmodconfig, usando os 6 cores do processador, levou 7 minutos:


dpkg-deb: a compilar o pacote `linux-headers-5.1.9-edps' em `../linux-headers-5.1.9-edps_5.1.9-1_amd64.deb'.
dpkg-deb: a compilar o pacote `linux-libc-dev' em `../linux-libc-dev_5.1.9-1_amd64.deb'.
dpkg-deb: a compilar o pacote `linux-image-5.1.9-edps' em `../linux-image-5.1.9-edps_5.1.9-1_amd64.deb'.
dpkg-deb: a compilar o pacote `linux-image-5.1.9-edps-dbg' em `../linux-image-5.1.9-edps-dbg_5.1.9-1_amd64.deb'.
dpkg-genbuildinfo
dpkg-genchanges >../linux-5.1.9-edps_5.1.9-1_amd64.changes
dpkg-genchanges: info: including full source code in upload
dpkg-source -i.git --after-build linux-5.1.9
dpkg-buildpackage: info: full upload (original source is included)

real 7m41,523s
user 29m41,246s
sys 2m52,544s
edps@mxlinux:~/linux-5.1.9

$ du -sh ../linux-*.deb
11M ../linux-headers-5.1.9-edps_5.1.9-1_amd64.deb
9,5M ../linux-image-5.1.9-edps_5.1.9-1_amd64.deb
114M ../linux-image-5.1.9-edps-dbg_5.1.9-1_amd64.deb
1,0M ../linux-libc-dev_5.1.9-1_amd64.deb
edps@mxlinux:~/linux-5.1.9
$


A dica é essa:

https://edpsblog.wordpress.com/2019/05/26/how-to-empacotamento-do-kernel-no-debian-e-derivados-em-6-...

[13] Comentário enviado por roomik em 18/06/2019 - 18:30h

Muito interessante este artigo amigo, parabéns.

[14] Comentário enviado por edps em 19/06/2019 - 21:22h


ADENDO:

Em relação a informação sobre o arquivo initrd, isto é... se usarmos a opção make localmodconfig ( que torna todo o processo infinitamente mais rápido, gerando arquivos melhores também), informo que também funciona! vejam os tamanho dos arquivos gerados nessa screenshot, dessa vez usando o Mx Linux com o kernel 5.1.9:

https://www.vivaolinux.com.br/screenshot/Xfce-Mx-Linux-com-kernel-enxuto/

Assim, torna-se desnecessário o uso do comando mkinitramfs, em todo caso, serve como alternativa.


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner
Linux banner
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts