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: 5.267 ]

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

ZRAM (Compressed RAM) no Debian

Instalando o navegador Opera no Arch Linux

Chakra GNU/Linux

Compilação, empacotamento, instalação e configuração do WINE-dev

Módulos CPAN no Debian e distros GNU/Linux em geral

Leitura recomendada

Compilação comentada do kernel

Como instalar o bootsplash no Debian 3.1 Sarge a partir do zero

Que tal criar uma mini-distro em 1 disquete?

Compilando kernel 2.6 no Slackware 11

Compilando um kernel Linux

  
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 removido 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 removido 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

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts