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
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!
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
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
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:
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
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:
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É!
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?
CurtirCurtir
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.
CurtirCurtir
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…
CurtirCurtir
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.
CurtirCurtir
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…
CurtirCurtir
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 ).
CurtirCurtir
… 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…
CurtirCurtir
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: [~]
>>> $
…
CurtirCurtir
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.
CurtirCurtir
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…
CurtirCurtir