Há controvérsias, se você deve ou não compilar o seu
kernel! Alguns vão dizer para você deixar própria distribuição tomar conta do núcleo para você. Outros, irão dizer que é necessário compilar o Kernel na sua máquina.
Eu, particularmente, sempre compilei o meu Kernel, deixando ele o mais leve possível. Porém, existem coisas que você deve saber, a distribuição não oferece mais suporte para o seu novo Kernel, ou seja, quem toma conta é você! Muitos aplicativos poderão não funcionar, como é o caso do Virtualbox do Slackbuilds. Você deve pegar a última versão no site oficial para ter o suporte. Mas, isso é na data de hoje.
Hoje, vamos aprender a fazer uma compilação especial para sua máquina! Nada genérico e sim especial, sua máquina vai gostar. No final, vamos gerar um lindo pacote para o
Slackware, assim você pode instalar/desinstalar quando necessitar.
Como vamos fazer uma "make" especial, você deve pegar todos os dispositivos que você usa normalmente e fazer o processo de inserção. Lembre-se, vamos personalizar um kernel especial para sua máquina que é feito especialmente para sua máquina.
Caso, na compilação, você NÃO utilize um pendrive que você sempre usa, por exemplo, vai acabar que quando ser inserido, ele não irá ser reconhecido e você vai precisar recompilar o kernel com suporte para aquele dispositivo! Legal? haha
O que as distribuições normalmente fazem, é criar um kernel mais genérico que tem suporte a Hardwares e dispositivos mais diversificados. Normalmente, também são compilados em módulos que são chamados pelo kernel quando precisam. Então, muita porcaria vem junto, e isso é desnecessário.
Mão na massa
A primeira coisa a ser feita, é baixar o kernel no site
Kernel.org. Baixe a versão que você desejar, eu normalmente pego a versão Stable, após feito isso, descompacte em
/usr/src/ e crie um link simbólico chamado "linux" (o link simbólico não é obrigatório):
# tar xvf linux-5.4.10.tar.xz -C /usr/src/
# cd /usr/src
# ln -vs linux-5.4.10/ linux
'linux/linux-5.4.10' -> 'linux-5.4.10/'
Se você criou o link simbólico, entre em "linux". Se não, entre no diretório onde está a fonte do
kernel Linux direto. Dentro do diretório, vamos rodar o comando "make mrproper" para fazer uma limpeza e retirar as impurezas antes de iniciar a compilação:
# cd linux
# make mrproper
Feito isso, vamos pegar a configuração dos módulos/drivers que está em execução no momento, note que o suporte, a config em
/proc, deve estar habilitado no Kernel. Caso você rode o comando abaixo e não funcione, copie o ".config" de
/boot.
# zcat /proc/config.gz > .config
O comando "zcat" pega o arquivo comprimido e envia para o STDOUT a saída. Fazendo isto, podemos redirecionar a saída para alguma lugar, no caso ".config".
Vamos verificar quando módulos estão ativos no momento, isto para ter uma base apenas:
# grep =y < .config | wc -l
1843
NOTA: neste ponto, você pode querer rodar o "make olddefconfig". Uma rápida explicação: se você já tiver um arquivo ".config" que foi criado por uma outra versão do Linux, normalmente uma versão mais antiga, você vai precisar atualizar o mesmo.
Temos alguns comandos para isso, o "make oldconfig", de uma forma interativa vai perguntar a você as perguntas correspondentes às novas opções de configuração disponibilizada. Se você não tiver tempo e quer algo rápido, você pode usar a resposta padrão para todas essas perguntas com o "make olddefconfig".
O "make oldnoconfig", assume uma resposta negativa em todas as perguntas.
Mas neste artigo, vamos usar um outro tipo de configuração. :)
Configuração Local
Usar uma configuração local é um bom meio de peneirar seu novo Kernel e existem muitos métodos para isto. Mas, vale ressaltar que estes métodos podem resultar em falhas na questão de não peneirar todos os drivers desnecessários.
Então, mesmo assim, é interessante você fazer uma configuração a mais para conseguir retirar o máximo de módulos e opções desnecessárias do seu novo Kernel. Algumas configurações que eu utilizo:
- localmodconfig: Esta opção compila em módulos e não embutido no kernel.
- localyesconfig: É similar ao "localmodconfig", porém, compila de forma embutida os drivers, etc... ou seja, sem módulos externos
Vamos rodar o "make localmodconfig" para dar aquela peneirada básica no ".config". Note que como estamos pegando um ".config" de uma versão de Kernel diferente, você deve responder algumas perguntas na tela. Vamos também executar o "grep" novamente pra ver quantos módulos estão presentes nessa limpeza:
# make localmodconfig
# grep =y < .config | wc -l
1505
Note que deu uma pequena enxugada, agora chegou a hora de você agir! A compilação do kernel é tentativa e erros, comigo já aconteceu vários e vários
Kernel Panics, é normal! Vou passar alguns comandos para você obter a informação do seu computador.
Informações da máquina
Quando vamos compilar o Kernel, precisamos saber informações da nossa máquina para ter um sucesso mais satisfatório e assim fazer um Kernel bem personalizado à nossa máquina. Existem alguns métodos para obter informações do seu sistema, irei te passar quatro formas de fazer isto e se usadas em conjunto, ficam bem completas.
É interessante você redirecionar as saídas para algum arquivo em texto, para você estudar mais com calma todos os seus componentes necessários.
# lspci -v
# lsusb -v
# lsmod
# cat /proc/cpuinfo | grep 'flags'
Retornando. Ok, feito o processo de busca de drivers necessários, vamos retornar à compilação. Vamos rodar o "make menuconfig", que abrirá uma tela amigável desenhada com NCurses para você fazer uma configuração mais satisfatória.
Agora é com você! Existe uma coisa bem legal que pode ser feita, é alterar o Local version do kernel, você pode por o seu nome, por exemplo, algo tipo "-custom-slackjeff". Outra coisa a ser feita também, é ajustar a compressão do kernel, inicialmente ele vem como LZMA, trocamos para XZ, que além de ser mais rápido, ele comprime melhor.
Meu computador não tem Wireless, ou algo relacionada a rádio amador e nem Bluetooth. O "localmodconfig" deixou escapar algumas coisas. É importante retirar o "lixo". Ficando com 1469 Módulos, no meu caso.
Note que poderia ser enxugado mais ainda! Muito lixo eu deixei passar, mas quanto mais enxugar o negócio, mais a chance de algo der errado. Eu não quero isso, quero apenas um kernel um pouco mais personalizado. Se você necessita de algo extremamente pequeno, pesquise sobre: Linux Kernel Tinification.
# grep =y < .config | wc -l
1469
Agora, ao invés de fazer o meio tradicional, make BzImage etc... Vamos compilar o Kernel e gerar um "pacote.xz", este processo pode demorar um tempo, dependendo da sua máquina, para ir para próxima etapa do empacotamento para o Slackware. Mais opções em "make help".
# make tarxz-pkg -j 4
O tarball será criado no mesmo diretório. Todo nosso Kernel prontinho para fazer fakeroot está neste pacote.
# ls *.xz
linux-5.4.10-custom-slackjeff-x86.tar.xz
Vamos agora fazer o pacote para o Slackware. O processo tradicional que estamos habituados, não vou falar muito sobre, pois já tenho artigo no meu site. Vou criar um diretório em
/tmp chamado "linux" e descompactar o pacote ".xz" lá.
Vamos entrar no diretório e criar um diretório "install":
# mkdir -v /tmp/linux
mkdir: created directory '/tmp/linux'
# tar xvf linux-5.4.10-custom-slackjeff-x86.tar.xz -C /tmp/linux/
# cd /tmp/linux
# mkdir install
Feito isto, vamos gerar um arquivo "slack-desc" dentro do diretório "install" que acabamos de criar e preencher com informações:
# cat <> /install/slack-desc
|-----handy-ruler------------------------------------------------------|
appname: appname (Short description of the application)
appname:
appname: Description of application - this description should be fairly
appname: in-depth; in other words, make it clear what the package does (and
appname: maybe include relevant links and/or instructions if there's room),
appname: but don't get too verbose.
appname: This file can have a maximum of eleven (11) lines of text preceded by
appname: the "appname: " designation.
appname:
appname: It's a good idea to include a link to the application's homepage too.
appname:
EOF
Preenchido todas informações do "slack-desc", vamos gerar o pacote. Note que você deve estar na raiz, onde o kernel está:
/tmp/linux:
# makepkg -l y -c n ../linux-5.4.10-x86_64-1.txz
Feito isto vamos instalar, setar o "lilo.conf", rodar o LILO e reiniciar a máquina:
# installpkg linux-5.4.10-x86_64-1.txz
# nano /etc/lilo.conf
# lilo
Warning: LBA32 addressing assumed
Added Linux *
One warning was issued.
# shutdown -r now
uname -a
Linux darkstar 5.4.10-custom-slackjeff #1 SMP Wed Jan 22 15:44:14 -03 2020 x86_64 AMD FX(tm)-6100 Six-Core Processor AuthenticAMD GNU/Linux
Obrigado e até a próxima.