sábado, 21 de maio de 2011

Shell Script para Recompilar kernel do linux apartir do Kenell.org usando o ubuntu 10.04 amd64

Testei apenas no notebook com o ubuntu 10.04 generic versão 64 bits

Basta baixar o seguinte shell script e mandar ele ser executado com o /bin/bash
https://cid-9654f940db7bb11a.photos.live.com/self.aspx/algunsShellScriptsPublicos/tCompilarKernel.sh

Dei um:
/bin/bash /home/$USER/Download/tCompilarKernel.sh
no terminal (lembrando que para abrir o terminal, basta pressionar simultaneamente as teclas (Ctrl+Alt+t))
E compilei o Kernel
Apenas lembrando que o script foi desenvolvido com base naas informações apresentadas em:

https://cid-9654f940db7bb11a.photos.live.com/self.aspx/algunsShellScriptsPublicos/Recompilando-o-Kernel-no-Ubuntu-Linux-9.04.html(http://www.vivaolinux.com.br/artigo/Recompilando-o-Kernel-no-Ubuntu-Linux-9.04)

https://cid-9654f940db7bb11a.photos.live.com/self.aspx/algunsShellScriptsPublicos/Recompilando-o-Kernel-no-Ubuntu-Linux-9.04%5E_PARTE2.html(http://www.vivaolinux.com.br/artigo/Recompilando-o-Kernel-no-Ubuntu-Linux-9.04?pagina=2)

Na verdade foram seguidos rigorosamente todos os passos mencionados nessas páginas.
O arquivo para shell script para desinstalar o kernel pode ser baixado em:
https://cid-9654f940db7bb11a.photos.live.com/self.aspx/algunsShellScriptsPublicos/desinstalarKernelCompilado.sh
Para desinstalar basta dar um:
/bin/bash /home/$USER/Download/desinstalarKernelCompilado.sh
no terminal
Todos esses arquivos podem ser baixados compactados em tar.gz em:
https://cid-9654f940db7bb11a.photos.live.com/self.aspx/algunsShellScriptsPublicos/compilarKenellinux.tar.gz

Apenas explicando um pouquinho como alterar o shell script tCompilarKernel.sh
para compilar o seu kernel desejado, bem como ajustar adequadamente o arquivo desinstalarKernelCompilado.sh
para desinstalar o kernel desejado:

Primeiramente, antes de tudo acesse

http://kernel.org/
para saber qual é a última versão estável do kernel (núcleo) do linux

Passo 2:
Abra os arquivos /home/$USER/Download/tCompilarKernel.sh e /usr/bin/gedit /home/$USER/Download/desinstalarKernelCompilado.sh
Você pode abri-los no terminal com o gedit utilizando-se dos comandos:

/usr/bin/gedit /home/$USER/Download/tCompilarKernel.sh

/usr/bin/gedit /home/$USER/Download/desinstalarKernelCompilado.sh

A variável "versao_Kernel1" é a versão com 3 caracteres, no caso do script 2.6
um caracter para o "2", 1 para o "." e 1 para o "6", totalizando 3 caracteres.
A variável "versao_Kernel2parte" é a segunda parte da versão do kernel, por exemplo
nesse shell script do jeito que está deseja-se baixar o kernel: 2.6.39, logo ela é a parte da versão que vêm depois do "2.6", no nosso caso 39
A variável "idDMKernell" são os caracteres em caixa baixa (em letras minúsculas) que serão inseridos no nome do kernel (Aparecerão no GRUB, quando reiniciar o computador )
A variável "tipoDMCustomizacao", dependerá da máquina onde está compilando o kernel, eu tive que esperar o comando
"sudo fakeroot make-kpkg --initrd ..."
para saber o .deb que gerado, são os últimos caracteres gerados antes do ".deb" e depois do útimo ponto ".", antes do ".deb"
Na variável "linkExatoDoKernel" não é aconselhável editar, pois ela está apenas montando o url para poder baixar o kernel
"TITULO_DO_SCRIPT" é o título que aparecerá logo no começo assim que é executado o shell script
E "diretorioOndeEstaOKernel" utilizei apenas para guardar a localização onde baixei o arquivo para poder compilar o kernel, é aconselhável não mexer também nela.

Uma característica interessante nesse shell script é que ele "imprime" ("mostra na console"), o tempo que demora para compilar (faz isso utilizando o comando "time" ), também explica o que está fazendo, através de mensagens na console

Já o shell script desinstalar, possui as mesmas variável, com as mesmas finalidades,

o comando "cd /usr/src/" serve apenas para "chegar" até a pasta onde estão os .debs
da instalação do kernel compilado

Em ambos os scripts usei funções, para demonstrar o uso de funções em shell script

Uma dica para realmente ver quanto tempo demorou a compilação comente a linha no script:
'echo2 "sudo shutdown -r now";'
'sudo shutdown -r now'

Apenas para se ter uma idéia:
real 110m38.292s
user 110m58.760s
sys 15m39.770s

São os tempos totais de execução do script de compilação

Esse tempo:
real 106m58.319s
user 108m59.410s
sys 15m18.770s
Apenas para executar o comando:
sudo fakeroot make-kpkg --initrd --append-to-version=-kernel$idDMKernell$versao_Kernel1.$versao_Kernel2parte kernel_image kernel_headers
Isso em um Intel Core 2 Quad CPU Q8200 @ 2.33 GHz, com 4 GB de RAM DDR2
1 Hora e 51 minutos, praticamente duas horas inteiras ...!
Agora imagine no notebook que têm 1/4 dessa capacidade ???

Apenas mais um detalhe importante a mencionar, quando colocamos algum valor na variável idDMKernell, os drivers proprietários, não são reconhecidos automaticamente, por exemplo nesse core quad não é reconhecida a placa de vídeo devido ao simples "dm" no nome do kernel


Os conteúdos dos shells scripts /usr/bin/gedit /home/$USER/Download/desinstalarKernelCompilado.sh e /home/$USER/Download/tCompilarKernel.sh são respectivamente:
============================================================================================
#!/bin/bash
versao_Kernel1="2.6";
versao_Kernel2parte="39";
diretorioOndeEstaOKernel="";
tipoDMCustomizacao="Custom_amd64.deb";
idDMKernell="dm";
function principal2(){
echo -e "\n cd /usr/src/ \n" ;
cd /usr/src/ ;
echo -e "\n sudo dpkg -r linux-headers-$versao_Kernel1.$versao_Kernel2parte-kernel$idDMKernell$versao_Kernel1.$versao_Kernel2parte \n\n";
sudo dpkg -r linux-headers-$versao_Kernel1.$versao_Kernel2parte-kernel$idDMKernell$versao_Kernel1.$versao_Kernel2parte
echo -e "\n sudo dpkg -r linux-image-$versao_Kernel1.$versao_Kernel2parte-kernel$idDMKernell$versao_Kernel1.$versao_Kernel2parte \n\n"
sudo dpkg -r linux-image-$versao_Kernel1.$versao_Kernel2parte-kernel$idDMKernell$versao_Kernel1.$versao_Kernel2parte

}

time principal2

============================================================================================
============================================================================================
#!/bin/bash
versao_Kernel1="2.6";
versao_Kernel2parte="39";
diretorioOndeEstaOKernel="";
idDMKernell="dm";
tipoDMCustomizacao="Custom_amd64.deb";
linkExatoDoKernel="http://www.kernel.org/pub/linux/kernel/v$versao_Kernel1/linux-$versao_Kernel1.$versao_Kernel2parte.tar.bz2";
TITULO_DO_SCRIPT=" Shell Script para compilação do kernel do linux";
function Executa_e_mostra_o_comando2(){


echo -e "\n\n Executado o comando: \n $1 \n Ai acima. \n\n";
echo -e "\n \n $2 \n \n";
}
function Executa_e_mostra_o_comando1(){
Executa_e_mostra_o_comando2 "$1" "`$1`" ;
}
function Executa_e_mostra_o_comando1ComoSudo(){
Executa_e_mostra_o_comando1 "sudo $1" ;
}
function apenas_mostra_o_comando2(){ echo -e "\n\n Executado o comando: \n $1 \n\n"; }
function echo2(){

echo -e "\n\n $1 \n\n";

}
function echo2(){ echo -e "\n\n $1 \n\n"; }

function echoCLR2(){ clear; clear; clear ;echo -e "\n\n $1 \n\n"; }
function echoLinha2(){ echo -e "=========================================================================================="; }
function echoLinha1(){ echo -e "__________________________________________________________________________________________"; }
function echoLinha1t(){ echo -e "------------------------------------------------------------------------------------------"; }
function echoHead(){
echoCLR2 "`echoLinha2`" ;
date;
echo2 "$TITULO_DO_SCRIPT";
echo2 "`echoLinha1`";

}
function creditos2(){
echo2 "Shell Script desenvolvido por Danilo Matias, sendo bem sincero; o importante é que faça bom proveito, sem licença sem uso, sem cachaça nenhuma \n
Fiz ele copiando os dados da página:
\n http://www.vivaolinux.com.br/artigo/Recompilando-o-Kernel-no-Ubuntu-Linux-9.04
\n
Se desejar ver: de um: \n
firefox http://www.vivaolinux.com.br/artigo/Recompilando-o-Kernel-no-Ubuntu-Linux-9.04 \n
Mas chega de lorota, vamos executar o shellscript \n Vou abrir em referência ao autor
";
firefox http://www.vivaolinux.com.br/artigo/Recompilando-o-Kernel-no-Ubuntu-Linux-9.04

}
function passo1(){

echo2 "Fiz este passo-a-passo pois achei muito complicados todos os artigos que eu vi para realizar esta tarefa. A distribuição Linux utilizada foi o Ubuntu 9.04, mas pode ser utilizado também no Debian. Siga os passos rigorosamente e com cuidado! \n\n Fiz este passo-a-passo pois achei muito complicados todos os artigos que eu vi para realizar esta tarefa. A distribuição Linux utilizada foi o Ubuntu 9.04, mas pode ser utilizado também no Debian. Siga os passos rigorosamente e com cuidado! \n O kernel é o coração do sistema, é sempre bom estar com ele atualizado, pois as novas versões sempre trazem novidades e correções. \n Neste artigo farei um passo-a-passo de como recompilar seu kernel no Linux Ubuntu 9.04 ou Debian. Recompilar o kernel é um processo demorado e que exige muita paciência, mas não é difícil e sim trabalhoso! \n Siga os passos à risca e saíra tudo certinho. \n
A distro utilizada foi o Ubuntu 9.04 32 bits. A versão mais atual do kernel (no momento em que estou escrevendo este artigo) e que eu vou utilizar nesse artigo é a 2.6.29.2. \n Preparando a compilação \n Baixe o kernel de sua preferência no site: http://kernel.org \n
Os estáveis terminam com um número par os instáveis com um ímpar (o arquivo tem aproximadamente 50 MB). \n

Extraia em uma pasta qualquer, dando um duplo clique e clicando em extrair ou vá até a pasta onde está o arquivo e extraia através do comando:
\n No meu caso, como coloquei na variável: linkExatoDoKernel , que é composta de versao_Kernel1, que é a versão do kernel, no caso: $versao_Kernel1 , e versao_Kernel2parte, que é o número da versão que completa,
no caso é: $versao_Kernel2parte, ou seja a versão exata é: $versao_Kernel1.$versao_Kernel2parte, o que me permite montar a variável para baixar o kernel: linkExatoDoKernel, que no caso é: \n $linkExatoDoKernel
\n\n Passo: 1\n\n Baixando a versão do kernel: \n $versao_Kernel1.$versao_Kernel2parte ";
diretorioOndeEstaOKernel=$PWD;
Executa_e_mostra_o_comando1 "wget -c $linkExatoDoKernel" ;
}
function passo2(){
local descompctar4="linux-$versao_Kernel1.$versao_Kernel2parte.tar.bz2";
local descompctar3="tar xjfv $descompctar4";
echo " Passo: 2";
echo2 " Descompactar o kernel: $versao_Kernel1.$versao_Kernel2parte";
Executa_e_mostra_o_comando1 "$descompctar3" ;
}

function passo3(){
echo " Passo: 3";
echo2 "Abra um terminal e logue-se como root: ";
Executa_e_mostra_o_comando1ComoSudo "/bin/sh /bin/sh.old";
Executa_e_mostra_o_comando1ComoSudo "ln -s /bin/bash /bin/sh";

}
function passo4(){
echo " Passo: 4";
echo2 "Instalaremos alguns novos pacotes necessários: "
Executa_e_mostra_o_comando1ComoSudo "apt-get update";
Executa_e_mostra_o_comando1ComoSudo "apt-get install fakeroot kernel-package bzip2 gcc libncurses5-dev wget";
echo2 "Lembra daquela pasta que você extraiu o arquivo do kernel? Então, agora nós vamos copiá-la para a pasta /usr/src, como esta pasta só pode ser alterada pelo root, faremos isso via terminal. \n Vá até a pasta onde você extraiu a pasta do kernel.\n Nesse caso: $diretorioOndeEstaOKernel";
Executa_e_mostra_o_comando1 "cd $diretorioOndeEstaOKernel" ;
Executa_e_mostra_o_comando1ComoSudo "mv $diretorioOndeEstaOKernel/linux-$versao_Kernel1.$versao_Kernel2parte /usr/src/" ;
echo2 "Agora vamos criar um link (atalho) para a pasta o kernel. Vá até a pasta /usr/src: "
echo "cd /usr/src/" ;
cd /usr/src/ ;
echo2 "E crie o link:"
echo -e "\n sudo ln -s linux-$versao_Kernel1.$versao_Kernel2parte linux \n " ;
sudo ln -s linux-$versao_Kernel1.$versao_Kernel2parte linux
echo -e "\n Agora vamos \"entrar\" no link:\n " ;
echo -e "\n cd /usr/src/linux/ \n" ;
cd /usr/src/linux/ ;
echo -e "\n Salvando a configuração do nosso kernel atual para depois aproveitá-la: \n" ;
echo2 "sudo cp /boot/config-$(uname -r) ./.config" ;
sudo cp /boot/config-`uname -r` ./.config
echo2 "Chegamos na parte legal! Vamos configurar nosso kernel de acordo com nossas necessidades (talvez a maior vantagem do software open source)" ;
echo2 "Na próxima etapa: \n [Parte opcional] Se você quiser aproveitar a configuração do seu kernel atual o momento é esse! Acesse a opção "Load an Alternate Configuration File", dê OK e escolha o arquivo que a gente salvou anteriormente. \n Se o seu kernel anterior já estava otimizado para sua máquina e você quer apenas atualizar seu kernel, simplesmente dê ESC e escolha "Save". Caso contrário modifique as configurações no menu conforme suas necessidades. O menu é bem intuitivo, bastando para marcar um módulo para instalação, ir até ele e digitar "y" ou "n" para não instalar, ou ainda "m" para deixar como módulo e você carregá-lo somente quando for necessário. Na internet há várias dicas para configurá-lo. \n Depois de tudo feito aperte ESC e escolha Save. \n Feito isso você pode passar para a próxima página! " ;
echo2 "sudo make menuconfig" ;
sudo make menuconfig ;
echo2 "Agora vamos à compilação propriamente dita" ;
echo2 "sudo make-kpkg clean " ;
sudo make-kpkg clean ;
echo2 " Mostrando quanto tempo efetivamente demora para compilar o kernel \n time sudo fakeroot make-kpkg --initrd --append-to-version=-kernel$idDMKernell$versao_Kernel1.$versao_Kernel2parte kernel_image kernel_headers " ;
time sudo fakeroot make-kpkg --initrd --append-to-version=-kernel$idDMKernell$versao_Kernel1.$versao_Kernel2parte kernel_image kernel_headers
}
function passo5(){
echo2 "Agora que já foi compilado vamos instalar o kernel previamente compilado"
echo2 "cd /usr/src/";
cd /usr/src/ ;
echo2 "sudo dpkg -i linux-image-$versao_Kernel1.$versao_Kernel2parte-kernel$idDMKernell$versao$(echo "_")Kernel1.$versao_Kernel2parte_$versao_Kernel1.$versao_Kernel2parte-kernel$idDMKernell$versao_Kernel1.$versao_Kernel2parte-10.00.$tipoDMCustomizacao";
sudo dpkg -i linux-image-$versao_Kernel1.$versao_Kernel2parte-kernel$idDMKernell$versao_Kernel1.$versao_Kernel2parte$(echo "_")$versao_Kernel1.$versao_Kernel2parte-kernel$idDMKernell$versao_Kernel1.$versao_Kernel2parte-10.00.$tipoDMCustomizacao
echo2 "Espere acabar e vamos para o próximo:";
echo2 "sudo dpkg -i linux-headers-$versao_Kernel1.$versao_Kernel2parte-kernel$idDMKernell$versao_Kernel1.$versao_Kernel2parte$(echo "_")$versao_Kernel1.$versao_Kernel2parte-kernel$idDMKernell$versao_Kernel1.$versao_Kernel2parte-10.00.$tipoDMCustomizacao";
sudo dpkg -i linux-headers-$versao_Kernel1.$versao_Kernel2parte-kernel$idDMKernell$versao_Kernel1.$versao_Kernel2parte$(echo "_")$versao_Kernel1.$versao_Kernel2parte-kernel$idDMKernell$versao_Kernel1.$versao_Kernel2parte-10.00.$tipoDMCustomizacao
echo2 "Após feito isso seu kernel deve estar instalado e pronto para ser usado! \n Após feito isso seu kernel deve estar instalado e pronto para ser usado! \n ";
echo2 "Role o documento para baixo e verifique se foram adicionadas novas entradas com o nome de seu kernel, se sim tudo pronto e vamos reiniciar o computador pra ver como ficou:";
echo2 "Após o computador reiniciar, abra um terminal e digite \"uname -r\" para ver qual a versão do kernel que está rodando, se for a que você instalou, parabéns, você recompilou seu kernel com sucesso! \n Teve um kernel panic? Calma, seu kernel antigo ainda está no grub, basta iniciar por ele e recompilar seu kernel novamente procurando pelo erro que você cometeu. ";
echo2 "sudo shutdown -r now";
sudo shutdown -r now

}
#_________________________________________________________________________________________________________

function principal2(){
echoHead ;
creditos2 ;
passo1 ;
passo2 ;
passo3 ;
passo4 ;
passo5 ;

}

time principal2
============================================================================================

Nenhum comentário: