How-To :: Empacotamento de kernel no Debian (definitivo)


Dessa vez e em definitivo encerrarei o assunto sobre empacotamento de kernel no Debian, visto que encontrei a solução para após empacotá-lo com o kernel-package e utilizá-lo em qualquer sistema com estrutura de pacotes compatíveis, além disso, em exemplos práticos demonstrarei a criação de módulos para o VirtualBox e driver de vídeo da Nvidia

Debian Wheezy 7.8 + Kernel 3.19.3 + VirtualBox & driver Nvidia 340.76
Debian Wheezy 7.8 + Kernel 3.19.3 + VirtualBox & driver Nvidia 340.76

Observações

O problema se dava quando antes de começar o empacotamento ou nomeávamos a pasta com os sources do kernel para somente linux, às vezes até criando link simbólico ou como frequentemente mantendo-a com o mesmo nome, exemplo: linux-3.19.3.

Acontece que se ao término do processo de empacotamento instalássemos o novo kernel, tudo ocorreria bem, isso porque a pasta onde o mesmo foi compilado ainda estava lá, mas bastava tentar instalar os debs gerados pelo processo numa outra distro com estrutura de pacotes equivalente, sempre que os headers do kernel era necessário, como exemplo mais comum pro caso do VirtualBox, drivers de vídeo, etc, o processo terminava em erro, visto que os links simbólicos da pasta lib/modules/versão-do-kernel/build e lib/modules/versão-do-kernel/source apontavam para aquela pasta falada no parágrafo anterior, ou seja, onde o mesmo foi compilado, pasta essa que após o processo ocupa no mínimo uns 2GBs de espaço em disco, portanto, um desperdício de espaço!.

Daí alguém poderia dizer porque não instalar os debs e após o processo recriar os links simbólicos apontando para a real localização dos headers, algo como isto:

# ln -sf /usr/src/linux-headers-3.19.3-edps /lib/modules/3.19.3-edps/build
# ln -sf /usr/src/linux-headers-3.19.3-edps /lib/modules/3.19.3-edps/source

Sim, isso funcionaria!

Este slideshow necessita de JavaScript.

Mas a solução que trago aqui resolverá todos os problemas futuros, tendo em vista que já irá junto com os pacotes, ou seja, renomearemos a pasta de sources tal como ficará após a instalação dos headers, exemplo, se utilizarei a opção –append-to-version=-edps do comando make-kpkg, a pasta terá como nome: linux-headers-$versão-$opção_append, tipo: linux-headers-3.19.3-edps:

Espero ter sido claro, abaixo todos os processos serão detalhados.

Download, empacotamento e instalação

Caso não estejam instalados, instale os pacotes necessários para o empacotamento:

$ sudo apt-get update
$ sudo apt-get install build-essential dkms
$ sudo apt-get --no-install-recommends install kernel-package

Baixe a versão mais recente do kernel com:

$ wget --no-check-certificate https://www.kernel.org/$(wget -qO- --no-check-certificate https://www.kernel.org | grep tar | head -n1 | cut -d\" -f2)

Descompacte-o:

$ tar xf linux-3.19.3.tar.xz

Renomeie a pasta seguindo o padrão: linux-headers-versão_do_kernel-opção-do-make-kpkg, em meu exemplo usarei -lqx como referência ao Kernel Liquorix de onde baixei a config do kernel, logo:

$ mv -v linux-3.19.3 linux-headers-3.19.3-lqx

Mova a pasta linux-headers-3.19.3-lqx para /usr/src:

$ sudo mv linux-headers-3.19.3-lqx /usr/src/

Baixe e mova a config do kernel para /usr/src/linux-headers-3.19.3-lqx:

$ wget http://liquorix.net/sources/3.19/config.amd64     ### para máquinas amd64
$ wget http://liquorix.net/sources/3.19/config.i386-pae     ### para máquinas 686/PAE
$ wget http://liquorix.net/sources/3.19/config.i386     ### para máquinas i386/i486
$ sudo cp -av config.i386-pae /usr/src/linux-headers-3.19.3-lqx/.config

O passo acima é opcional, a partir desse ponto você pode torna-se root e pode usar a config do kernel atual com:

$ su
# cd /usr/src/linux-headers-3.19.3-lqx/
# make oldconfig

Ou siga o mesmo roteiro que eu… comecemos por corrigir uma falha já antiga do kernel-package:

$ su
# cd /usr/src/linux-headers-3.19.3-lqx/
# mkdir Documentation/lguest
# echo all: >> Documentation/lguest/Makefile

Edite o arquivo /etc/kernel-pkg.conf, inserindo nos campos maintainer e email, seu nome e email, algo do tipo:

maintainer := zé-do-brejo
email := zedobrejo@unknownmail.com

Daí, compile e empacote o novo kernel assim:

em máquinas single-core.

# fakeroot make-kpkg --initrd --append-to-version=-lqx --revision=1.0 kernel_image kernel_headers

em máquinas multi-core.

# INSTALL_MOD_STRIP=1 CONCURRENCY_LEVEL=5 fakeroot make-kpkg --initrd --append-to-version=-lqx --revision=1.0 kernel_image kernel_headers

* onde a opção CONCURRENCY_LEVEL=5 equivale a um processador Quad-Core, então se você possui um Athlon FX 6300 (6 cores) deverá por CONCURRENCY_LEVEL=7, ou seja, nº de cores do processador + 1.

* acho importante usar as opções –append-to-version= e –revision=, pois permitem deixar os nomes dos pacotes de forma mais uniforme e não com um excesso de 10.00.Custom, etc.

OK, se o processo foi concluído com sucesso, saia da pasta de compilação (a tal linux-headers-3.19.3-lqx), remova a mesma e instale os novos arquivos .deb criados na pasta /usr/src:

# cd ..
# rm -rf linux-headers-3.19.3-lqx
# dpkg -i ../linux-image-3.19.3-lqx_1.0_i386.deb ../linux-headers-3.19.3-lqx_1.0_i386.deb 

Notem que ao instalar os pacotes uma pasta com o nome (linux-headers-3.19.3-lqx) da que você acabou de remover será criada e se quiser, verifique se os links simbólicos presentes em /lib/modules/3.19.3-lqx apontam para a mesma:

# ls -la /lib/modules/3.19.3-lqx/build
# ls -la /lib/modules/3.19.3-lqx/source

Este slideshow necessita de JavaScript.

log:

Qui Abr 02 19:31:29 edps@debian:~$ ls -la /lib/modules/3.19.3-lqx/build
lrwxrwxrwx 1 root root 33 Abr  2 14:46 /lib/modules/3.19.3-lqx/build -> /usr/src/linux-headers-3.19.3-lqx
Qui Abr 02 19:32:58 edps@debian:~$ ls -la /lib/modules/3.19.3-lqx/source
lrwxrwxrwx 1 root root 33 Abr  2 14:46 /lib/modules/3.19.3-lqx/source -> /usr/src/linux-headers-3.19.3-lqx
Qui Abr 02 19:33:00 edps@debian:~$ 

Reinicie o PC e veja se tudo ocorreu bem.

VirtualBox

Caso usem o VirtualBox, aproveite para recriar os módulos para o kernel corrente:

# /etc/init.d/vboxdrv setup     ### VirtualBox da Oraclels -la /lib/modules/3.19.3-lqx/build
# dpkg-reconfigure virtualbox-dkms     ### VirtualBox provido pelo Debian

Este slideshow necessita de JavaScript.

Nvidia

Os drivers da Nvidia providos pelo Debian tem certa incompatibilidade histórica com kernel mais atuais, assim, até tentei instalá-los tanto no Jessie como no Wheezy e em ambos terminou em erro:

Este slideshow necessita de JavaScript.

A solução encontrada foi baixar o driver disponibilizado pela NVIDIA em:

http://www.nvidia.com.br/download/driverResults.aspx/81779/br

Por o driver nouveau na blacklist do arquivo /etc/modprobe.d/blacklist-nouveau.conf:

blacklist nouveau
blacklist lbm-nouveau
options nouveau modeset=0
alias nouveau off
alias lbm-nouveau off
adicionando o driver nouveau na blacklist, requer reinício do sistema.
adicionando o driver nouveau na blacklist, requer reinício do sistema.

Reiniciar o PC pelo recovery-mode do GRUB, acessar a pasta onde encontra-se o driver, dar-lhe permissão de execução e executá-lo:

# chmod +x NVIDIA-Linux-x86-340.76.run 
# ./NVIDIA-Linux-x86-340.76.run 

As imagens abaixo foram tiradas durante a instalação do driver no Debian Jessie, assim que tiver algo melhor, postarei em seu lugar:

Este slideshow necessita de JavaScript.

E ao final do processo se desejar modifique o arquivo /etc/X11/xorg.conf:

# nano /etc/X11/xorg.conf

O arquivo gerado pelo instalador da Nvidia e modificado por mim no Debian Jessie ficou assim:

Section "ServerLayout"
    Identifier     "Layout0"
    Screen      0  "Screen0"
EndSection

Section "Monitor"
    Identifier     "Monitor0"
    VendorName     "Unknown"
    ModelName      "Unknown"
    HorizSync       28.0 - 33.0
    VertRefresh     43.0 - 72.0
    Option         "DPMS"
EndSection

Section "Device"
    Identifier     "Device0"
    Driver         "nvidia"
    VendorName     "NVIDIA Corporation"
EndSection

Section "Screen"
    Identifier     "Screen0"
    Device         "Device0"
    Monitor        "Monitor0"
    DefaultDepth    24
    SubSection     "Display"
        Depth       24
    EndSubSection
EndSection

Screenshots sobre tudo o que foi visto aqui e o novo XFCE 4.12 podem ser vistas no link abaixo:

Screenshot :: XFCE 4.12 no Debian Jessie

Enfim, acho que encontrei a solução definitiva para empacotamento de kernel no Debian com o kernel-package, e tendo dito isto, não mais escreverei a esse respeito.

IntÉ!

How-To :: Empacotamento de kernel no Debian (definitivo)

10 comentários sobre “How-To :: Empacotamento de kernel no Debian (definitivo)

  1. Anderson Gentil disse:

    Parabéns pelo belo texto.
    Fiquei com Duas dúvidas caso possa responder.

    Primeira:

    Utilizei a opção do make oldconfig. Porém para que serve em especifico esta opção sugerida para vc, pergunto pois não conheço esta falha.

    “Ou siga o mesmo roteiro que eu… comecemos por corrigir uma falha já antiga do kernel-package:
    $ su
    # cd /usr/src/linux-headers-3.19.3-lqx/
    # mkdir Documentation/lguest
    # echo all: >> Documentation/lguest/Makefile”

    Segunda:
    Qual seria a função do fakeroot na compilação?

    Curtir

    1. Se estiver logado como root (como era o meu caso) o fakeroot não tem função nenhuma, na verdade ele pode ser usado como usu[ario normal apenas para criar os pacotes:

      http://newbiedoc.sourceforge.net/tutorials/kernel-pkg/build-kernel-pkg.html.en

      Quanto a falha (não sei se já foi corrigida), mas o processo de empacotamento sempre era interrompido, acho que vi essa solução numa dica no VOL, na época a solução era usar uma versão anterior do kernel-package ou executar os 2 comandos acima.

      Curtir

  2. mcnd2 disse:

    No comando para compilar e empacotar, ficou faltando o underline ‘ _ ‘.

    # fakeroot make-kpkg –initrd –append-to-version=-mcnd2 –revision=1.0 kernel_image kernel_headers

    Sem eles o comando volta com erro de targets!

    Meu desktop esta no momento nesse processo…

    Curtir

    1. Opa brother, obrigado por comentar, mas no texto os comandos estão certos (na parte referente aos comandos) mas o único erro que há é no texto:

      * acho importante usar as opções –append-to-version= e –revision=, pois permitem deixar os nomes dos pacotes de forma mais uniforme e não com um excesso de 10.00.Custom, etc.

      Pois o WOrdpress como os dois traços e inventa um travessão, o certo seria:

      * acho importante usar as opções (dois_traços-aqui)append-to-version= e (dois_traços-aqui)revision=, pois permitem deixar os nomes dos pacotes de forma mais uniforme e não com um excesso de 10.00.Custom, etc.

      Curtir

  3. mcnd2 disse:

    Ok. Mais então, o ‘ – ‘ (underline) fica entre o kernel e image/headers (kernel_image / kernel_headers)…

    Ainda ‘tô’ no processo de compilação… numa máquina modesta de 10 anos atrás, rs… vou ali dormi um pouco… ZZZZZZZzzzzzzzzZZZZZZZZZzzzzzzzzzZZZZZZZzzzzz…

    Curtir

    1. entre kernel_image e kernel_headers é underline mesmo ( _ ).

      os ( — ), ou seja: dois traços que falei é nas opções, o WordPress substitui por um travessão ( como se os dois traços fossem juntos ).

      Curtir

      1. mcnd2 disse:

        … entendi o qi]ue você explicou, logo, onde citei é que esta faltando o _ (underline) para o comando não dar erro de targets e começar a compilar o kernel…

        Curtir

  4. mcnd2 disse:

    Depois de feito o upgrade do Wheezy para o Jessie, foi hora de colocar um novo kernel. Depois de longas 5 horas de compilação… Kernel novo funcionando numa boa…

    mcnd2@Debian: [~]
    >>> $ uname -a
    Linux Debian 4.0.1-mcnd2 #1 SMP Wed Apr 29 21:22:18 BRT 2015 i686 GNU/Linux
    mcnd2@Debian: [~]
    >>> $ cat /etc/os-release
    PRETTY_NAME=”Debian GNU/Linux 8 (jessie)”
    NAME=”Debian GNU/Linux”
    VERSION_ID=”8″
    VERSION=”8 (jessie)”
    ID=debian
    HOME_URL=”http://www.debian.org/”
    SUPPORT_URL=”http://www.debian.org/support/”
    BUG_REPORT_URL=”https://bugs.debian.org/”
    mcnd2@Debian: [~]
    >>> $ ls -l /boot/
    total 78428
    -rw-r–r– 1 root root 110922 Set 23 2012 config-2.6.32-5-486
    -rw-r–r– 1 root root 111135 Set 23 2012 config-2.6.32-5-686
    -rw-r–r– 1 root root 162250 Abr 24 16:21 config-3.16.0-4-686-pae
    -rw-r–r– 1 root root 134796 Abr 24 20:21 config-3.2.0-4-686-pae
    -rw-r–r– 1 root root 145002 Abr 29 20:43 config-4.0.1-mcnd2
    drwxr-xr-x 3 root root 4096 Abr 27 20:12 extlinux
    drwxr-xr-x 5 root root 12288 Abr 30 19:57 grub
    -rw-r–r– 1 root root 8839917 Set 24 2012 initrd.img-2.6.32-5-486
    -rw-r–r– 1 root root 9102570 Nov 15 2012 initrd.img-2.6.32-5-686
    -rw-r–r– 1 root root 15351809 Abr 29 18:29 initrd.img-3.16.0-4-686-pae
    -rw-r–r– 1 root root 11610433 Abr 29 01:13 initrd.img-3.2.0-4-686-pae
    -rw-r–r– 1 root root 13060779 Abr 30 01:46 initrd.img-4.0.1-mcnd2
    -rw-r–r– 1 root root 1249897 Set 23 2012 System.map-2.6.32-5-486
    -rw-r–r– 1 root root 1295399 Set 23 2012 System.map-2.6.32-5-686
    -rw-r–r– 1 root root 2093146 Abr 24 16:21 System.map-3.16.0-4-686-pae
    -rw-r–r– 1 root root 1670044 Abr 24 20:21 System.map-3.2.0-4-686-pae
    -rw——- 1 root root 1964027 Abr 30 01:25 System.map-4.0.1-mcnd2
    -rw-r–r– 1 root root 2192736 Set 23 2012 vmlinuz-2.6.32-5-486
    -rw-r–r– 1 root root 2301536 Set 23 2012 vmlinuz-2.6.32-5-686
    -rw-r–r– 1 root root 3006288 Abr 24 16:21 vmlinuz-3.16.0-4-686-pae
    -rw-r–r– 1 root root 2700800 Abr 24 20:20 vmlinuz-3.2.0-4-686-pae
    -rw——- 1 root root 3142000 Abr 30 01:25 vmlinuz-4.0.1-mcnd2
    mcnd2@Debian: [~]
    >>> $

    Curtir

    1. Só ficaram faltando as minhas cervejas! rsrs

      Sério, cê tem que remover essa porrada de kernels que tu tem aí brother, 2.6.32-5-486, 2.6.32-5-686, 3.2.0-4-686-pae.

      Deixa só o 3.16.0-4-686-pae e esse novo.

      Curtir

      1. mcnd2 disse:

        Como ainda estou a testar o sistema com o novo, por enquanto eles ainda estão ai, logo exterminarei com eles, rs…

        E as cervejas… vamos apreciar umas mesmoa, kkkk… a conta no bar ta em dia, rs!.

        Vlw…

        Curtir

Deixe um comentário