Created
January 21, 2018 17:16
-
-
Save sidneiweber/2db9deeb5fa872ec9e212d08d7daf407 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
┌───────────────────────────┐ | |
│Compilação do Kernel Linux │ | |
│Para máquinas locais Debian│ | |
└───────────────────────────┘ | |
Autor: Jefferson Rocha <lrcjefferson@gmail.com.br> | |
Seção: Manual | |
Versão: 1.0 | |
Atualização: 10/01/2018 | |
Homepage: http://www.jeffersonrocha.com.br | |
Licença: MIT | |
────────────────────────────────────────────────────────────────────────────────────── | |
────────┐ | |
ÍNDICE: │ | |
────────┘ | |
0.1.......Compensa compilar o kernel? | |
0.2.......Dependências necessárias | |
1.........Inicio | |
1.1.......Verificando Assinatura (.sign) | |
1.2.......Ajustes | |
1.3.......config | |
1.3.1.....Configuração Local | |
1.3.2.....localmodconfig | |
1.3.3.....localyesconfig | |
1.3.4.....Informações do Sistema | |
2.........config | |
2.1.......Garimpando o .config | |
3.........Compilação | |
3.1.......Processo Final | |
────────────────────────────────────────────────────────────────────────────────────── | |
─────────────────────────────────┐ | |
0.1 COMPENSA COMPILAR O KERNEL?? │ | |
─────────────────────────────────┘ | |
Em pleno século que estamos está pergunta ainda é recorrente nos fóruns e também | |
matuta muita a cabeça da galera. A pergunta é sempre a mesma! compensa compilar | |
o kernel? | |
será que perder horas ira me compensar de alguma forma? | |
"Ahhh será só alguns segundos a mais no meu boot, não vou compilar." | |
Mas você está enganado pequeno gafanhoto, compilar o kernel compensa de algumas | |
formas sim e não apenas no seu boot. | |
Pense comigo! imagine uma casa de médio porte com várias janelas ao redor dela, para | |
exemplificar vamos usar 200 janelas ao total. Penso? você acha que não é muito mais | |
suscetível a roubos que uma casa do mesmo porte com 10 janelas? | |
Mas Jefferson o que janelas tem a ver com o kernel? tem muito a ver, quanto mais | |
módulos e drivers carregados mais a possibilidade de falhas e vulnerabilidades... | |
por isso é de extrema importância você ter um kernel personalizado para sua máquina. | |
Todas distribuições assim como a Emmi, utilizam kernel genérico o objetivo é atingir | |
e ter suporte a praticamente todos hardwares/drivers etc... | |
Então se você usa por exemplo um processador/componentes 'AMD' por que precisaria | |
ter drivers 'INTEL' no seu computador? | |
Porque precisaria ter por exemplo suporte a wifi se seu computador é cabeado. | |
Você precisaria ter suporte a antena de Rádio se você nem sabe o que é isso? | |
Não se preocupe, vamos abordar o assunto mais aprofundado e você vai conseguir | |
criar seu kernel personalizado de uma vez por todas facilmente! | |
Após ler esse documento você vai ver que não é nada difícil! | |
────────────────────────────────────────────────────────────────────────────────────── | |
─────────────────┐ | |
0.2 DEPENDÊNCIAS │ | |
─────────────────┘ | |
build-essential ncurses-dev xz-utils wget | |
────────────────────────────────────────────────────────────────────────────────────── | |
─────────┐ | |
1. INICIO│ | |
─────────┘ | |
Muitas perguntas veem em nosso fórum e email, pedindo um bom tutorial | |
para compilar o kernel Linux. Bom como sabemos a Emmi é baseada no Debian, | |
o que torna este processo muito mais fácil, com alguns comandinhos você já | |
pode compilar o Kernel Linux sem dor de cabeça. | |
Porem você precisa realmente saber o que está fazendo! compilar é fácil, | |
o que complica um pouquinho é que você deve saber exatamente e conhecer bem | |
o seu hardware que estão presentes em seu computador, para um maior desempenho! | |
Mas não se preocupe, para aprender precisamos praticar, então faça sem medo. | |
Vamos lá? | |
Vamos rodar instalar todos pacotes de uma vez, logue-se como root ou utilize | |
o sudo para realizar este procedimento. | |
# apt install build-essential ncurses-dev xz-utils wget | |
Feito este processo vamos baixar o código fonte do Kernel linux, podemos baixar | |
via site (https://www.kernel.org/) ou com o comando wget, neste caso vamos usar | |
o comando wget para melhor ensinamento. | |
Note que a versao que estamos utilizando para esta documentação é a versão 4.14.12 | |
Então não apenas copie e cole e revise para uma melhor didática. | |
$ wget https://cdn.kernel.org/pub/linux/kernel/v4.x/linux-4.14.12.tar.xz | |
Aproveite e baixe a assinatura também para verificação de integridade. | |
$ wget https://cdn.kernel.org/pub/linux/kernel/v4.x/linux-4.14.12.tar.sign | |
────────────────────────────────────────────────────────────────────────────────────── | |
──────────────────────────┐ | |
1.1 VERIFICANDO ASSINATURA│ | |
──────────────────────────┘ | |
Ótimo!! agora vamos verificar a integridade da assinatura, descompacte o | |
arquivo Kernel linux e em seguida utilize o GnuPG para verificação: | |
$ unxz linux-4.14.12.tar.xz | |
e agora vamos verificar a assinatura. | |
$ gpg --verify linux-4.14.12.tar.sign | |
Sáida: | |
gpg: assumindo dados assinados em `linux-4.14.12.tar' | |
gpg: Signature made Sex 05 Jan 2018 12:49:11 -02 using RSA key ID 6092693E | |
gpg: Impossível verificar assinatura: chave pública não encontrada | |
Pegue a "RSA key ID 6092693E" adicione em suas chaves: | |
$ gpg --keyserver hkp://keys.gnupg.net --recv-keys 6092693E | |
Sáida: | |
gpg: requesting key 6092693E from hkp server keys.gnupg.net | |
gpg: key 6092693E: public key "Greg Kroah-Hartman (Linux kernel stable release signing key) <greg@kroah.com>" imported | |
gpg: key 6092693E: public key "Greg Kroah-Hartman <gregkh@linuxfoundation.org>" imported | |
gpg: 3 marginal(s) needed, 1 complete(s) needed, PGP trust model | |
gpg: depth: 0 valid: 1 signed: 0 trust: 0-, 0q, 0n, 0m, 0f, 1u | |
gpg: Número total processado: 2 | |
gpg: importados: 2 (RSA: 2) | |
Agora vamos verificar novamente a assinatura: | |
$ gpg --verify linux-4.14.12.tar.sign | |
Sáida | |
gpg: assumindo dados assinados em `linux-4.14.12.tar' | |
gpg: Signature made Sex 05 Jan 2018 12:49:11 -02 using RSA key ID 6092693E | |
gpg: Good signature from "Greg Kroah-Hartman <gregkh@linuxfoundation.org>" | |
gpg: aka "Greg Kroah-Hartman <gregkh@kernel.org>" | |
gpg: aka "Greg Kroah-Hartman (Linux kernel stable release signing key) <greg@kroah.com>" | |
gpg: AVISO: Esta chave não está certificada com uma assinatura confiável! | |
gpg: Não há indicação de que a assinatura pertence ao dono. | |
Impressão da chave primária: 647F 2865 4894 E3BD 4571 99BE 38DB BDC8 6092 693E | |
Feito! a assinatura bateu, perceba que tem o (Good signature) se caso der (Bad signature) algo está errado! :) | |
────────────────────────────────────────────────────────────────────────────────────── | |
───────────┐ | |
1.2 AJUSTES│ | |
───────────┘ | |
Vamos agora começar a brincadeira de verdade! em meu caso como baixei | |
via wget o kernel, o fonte está no meu home. | |
Então vamos primeiramente extrair o kernel e depois mover para /usr/src, | |
está será a pasta a qual vamos trabalhar. | |
$ unxz linux-4.14.12.tar.xz && tar -xvf linux-4.14.12.tar | |
ou | |
$ tar -xvJf linux-4.14.12.tar.xz | |
*Nota: É mais fácil usar o parâmetro J que chama o xz, não se confuda com 'j' | |
pois é para bzip2. | |
Para maiores informações use o 'man' ou 'tar --help' | |
Agora vamos mover o fonte descompactado para /usr/src em seguida entrar | |
neste diretório. | |
A partir de agora precisamos do Root. | |
# mv linux-4.14.12 /usr/src/ && cd /usr/src | |
Para não precisar todo o diretorio da fonte 'linux-4.14.12' vamos criar um | |
link simbólico chamado 'linux' para facilitar sua manipulação. | |
# ln -sf linux-4.14.12 linux | |
O parâmetro 's' cria um link simbólico o parâmetro 'f' remove os arquivos | |
de destino. | |
Entre agora em 'linux'. | |
# cd linux | |
*** NOTA *** | |
Nos cápitulos seguintes será mostrado uma série de configurações! | |
Caso você não deseja fazer a opção, siga em frente até achar uma que se | |
adapte a sua necessidade. | |
────────────────────────────────────────────────────────────────────────────────────── | |
──────────────────────────┐ | |
1.3 .config │ | |
──────────────────────────┘ | |
Para a nossa necessidade vamos pegar o .config genérico do computador em execução. | |
Ou seja, lá está armazenado alguns módulos já necessários (carregados) para o seu | |
sistema. | |
Para isso vamos copiar essa configuração para dentro da nossa pasta aonde está sendo | |
compilado o nosso kernel. | |
# ls /boot/config* | |
# cp -v /boot/config-huge-4.4.14 /usr/linux/.config | |
***NOTA*** | |
Note que config-huge-4.4.14 pode ter váriações então se adapte a sua realidade! | |
No próximo tópico vamos aprender algumas técnicas para peneirar seu .config antes | |
de começar a realmente o processo! | |
────────────────────────────────────────────────────────────────────────────────────── | |
────────────────────────┐ | |
1.3.1 Configuração Local│ | |
────────────────────────┘ | |
Usar uma configuração local é um bom meio de peneirar seu novo Kernel e existem | |
alguns métodos para isto! | |
Mas vale resaltar 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áximos de módulos e opções desnecessárias do seu novo Kernel. | |
────────────────────────────────────────────────────────────────────────────────────── | |
────────────────────┐ | |
1.3.2 localmodconfig│ | |
────────────────────┘ | |
localmodconfig - Atualize os módulos desativados de configuração atuais | |
não carregados, está opção compila em módulo. | |
────────────────────────────────────────────────────────────────────────────────────── | |
────────────────────┐ | |
1.3.3 localyesconfig│ | |
────────────────────┘ | |
localyesconfig - É similar ao 'localmodconfig' pórem compila de forma embutida | |
no kernel ou seja sem módulos. | |
────────────────────────────────────────────────────────────────────────────────────── | |
────────────────────────────┐ | |
1.3.4 Informações do Sistema│ | |
────────────────────────────┘ | |
Quando vamos compilar o kernel precisamos saber informações da nossa | |
máquina, para ter um sucesso mais satisfátorio e assim fazer um kernel no estilo | |
luva, que caberá certinho para sua máquina. | |
Existe alguns metodos para obter informações do seu sistema, irei te passar 4 | |
formas de se fazer isto, que se usadas em conjuntos ficam bem completas! | |
Então não tenha preguiça! | |
1- lspci | |
2- lsusb | |
3- cpuinfo | |
4- lsmod | |
É interessante você redirecionar as saídas para algum arquivo em texto ou algo | |
do genero, para você estudar mais com calma todos os seus componentes necessários. | |
$ lspci -v | |
$ lsusb -v | |
$ lsmod | |
$ cat /proc/cpuinfo | |
***NOTA*** | |
Você pode usar dois 'v' para ficar mais verboso ainda, ex: lspci -vv | |
Se caso queira redirecionar a saída para um arquivo use '>/diretorio' exemplo: | |
lspci -v > /home/slackjeff/lspci.txt | |
────────────────────────────────────────────────────────────────────────────────────── | |
──────────────────────────┐ | |
2.1 Garimpando o .config │ | |
──────────────────────────┘ | |
Após um breve entendimento sobre como dar uma peneirada no .config vamos começar a | |
nossa brincadeira! Ainda nas pasta /usr/linux siga. | |
Na documentação do Kernel a um pedido para antes de tudo limpar a "Sujeira" | |
do fonte... Para isto rode: | |
# make mrproper | |
Vamos começar a configurar o kernel agora, para isto rode o comando | |
'make menuconfig'. | |
# make menuconfig | |
Saída: | |
HOSTCC scripts/basic/fixdep | |
HOSTCC scripts/kconfig/mconf.o | |
SHIPPED scripts/kconfig/zconf.tab.c | |
SHIPPED scripts/kconfig/zconf.lex.c | |
HOSTCC scripts/kconfig/zconf.tab.o | |
HOSTCC scripts/kconfig/lxdialog/checklist.o | |
HOSTCC scripts/kconfig/lxdialog/util.o | |
HOSTCC scripts/kconfig/lxdialog/inputbox.o | |
HOSTCC scripts/kconfig/lxdialog/textbox.o | |
HOSTCC scripts/kconfig/lxdialog/yesno.o | |
HOSTCC scripts/kconfig/lxdialog/menubox.o | |
HOSTLD scripts/kconfig/mconf | |
scripts/kconfig/mconf Kconfig | |
# | |
# using defaults found in /boot/config-4.10.14emmi | |
# | |
Perceba que acima nesta caixa de dialog está especificando como utilizar | |
o mesmo! Você pode usar o direcional para navegar entre os menus, caso | |
queira alternar para os menus principais (Select, Exit, Help, Save, Load) | |
você pode usar o TAB. | |
Para fazer um selecionamento rápido perceba que os menus Tem uma cor diferente | |
na primeira letra, por exemplo se eu quisesse usar o 'Help' poderia simplesmente | |
aperta a letra 'H' do meu teclado ou 'Save' a letra 'S'. | |
Vamos agora carregar nosso .config, para isso selecione o 'Load' no menu. | |
Irá abrir uma caixa parecida com esta abaixo, dê um < Ok > para prosseguir. | |
┌─────────────────────────────────────────────────────┐ | |
│ Enter the name of the configuration file you wish │ | |
│ to load. Accept the name shown to restore the │ | |
│ configuration you last retrieved. Leave blank to │ | |
│ abort. │ | |
│ ┌─────────────────────────────────────────────────┐ │ | |
│ │.config │ │ | |
│ └─────────────────────────────────────────────────┘ │ | |
├─────────────────────────────────────────────────────┤ | |
│ < Ok > < Help > │ | |
└─────────────────────────────────────────────────────┘ | |
Após ter feita toda configuração Aperta [Save] e um [Exit] para sair do dialog. | |
Pronto agora o seu .config está pronto para receber um dos 2 comandos ditos nos | |
tópicos anteriores (localmodconfig, localyesconfig). | |
Escolha o que mais se adapta a sua situação em nosso caso vamos usar o | |
'localmodconfig'. | |
Nesta primeira jornada vamos rodar o 'localmodconfig' note que caso seu kernel | |
compilado seja maior (VERSÃO) que o .config do kernel generico irá aparecer algumas | |
perguntas leia atenciosamente ou simplesmente tecle [ENTER] para deixar as opções | |
padrões! | |
# localmodconfig | |
Após concluir este passo rode o 'make menuconfig' para abrir o menu de opções do | |
kernel. | |
É de extrema inportância que você faça com calma e vá abrindo opção por opção para | |
enxugar bem o seu kernel sem tirar algo necessário para o bom funcionamento do seu | |
hardware. | |
Caso você está sem muito tempo, pare a configuração, dê um [SAVE] e [QUIT] e | |
retorne outra hora para terminar a configuração. | |
# make menuconfig | |
Após feito o processo de escolhas dê um [SAVE] e [QUIT] e saia, após concluir este | |
processo vá para o próximo tópico, agora vamos começar a compilar. | |
────────────────────────────────────────────────────────────────────────────────────── | |
─────────────┐ | |
2. COMPILAÇÃO│ | |
─────────────┘ | |
Vamos começar a compilação, este procedimento é um pouco demorado! em minha | |
máquina (2gb ram, 1 core) demora em torno de 3 horas e 15 minutos quando estou | |
usando o computador, quando o mesmo está somente fazendo está tarefa o processo | |
diminui em até 20 minutos. | |
Aconselho você a ir tomar um café, dar uma volta com o cachorro! | |
Rode o comando: | |
# make deb-pkg LOCALVERSION=-custom-kernel KDEB_PKGVERSION=-1 | |
Parâmetros utilizados: | |
LOCALVERSION, é nome que voce vai dar ao seu kernel personalizado, por exemplo | |
utilizamos custom-kernel. | |
KDEB_PKGVERSION Usamos como rebuild, no caso quantas vezes esse fonte foi | |
modificado, como é nosso primeiro build utilizamos 1. | |
***NOTA | |
É interessante usar sempre o traço "-" antes do nome do kernel e do build. | |
────────────────────────────────────────────────────────────────────────────────────── | |
──────────────────┐ | |
2.1 PROCESSO FINAL│ | |
──────────────────┘ | |
Feito! após aguardar um bom tempo chegou a hora de instalar, os pacotes estão | |
no diretório acima. | |
# cd .. | |
Rode o comando 'ls' para verificar os arquivos .deb. | |
# ls *.deb | |
Saída: | |
linux-headers-4.14.12_1.CUSTOMIZADO_amd64.deb linux-image-4.14.12_1.CUSTOMIZADO_amd64.deb | |
Vamos instalar. | |
# dpkg -i linux-headers-4.14.12_1.CUSTOMIZADO_amd64.deb | |
# dpkg -i linux-image-4.14.12_1.CUSTOMIZADO_amd64.deb | |
Reinicie a Máquina | |
# shutdown -r now | |
Após a máquina rebootar verifique o seu novo kernel! | |
$ uname -r | |
Parabéns, você acaba de compilar o seu próprio Kernel! ;) | |
────────────────────────────────────────────────────────────────────────────────────── |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment