Guest User

Untitled

a guest
Apr 20th, 2012
140
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Bash 9.64 KB | None | 0 0
  1. #!/bin/bash
  2.  
  3. echo "# script PARA USUARIOS DO UBUNTU 11.10 baixa e compila kernel tudo automaticamente CRIADO PELOS USUÁRIOS DO FORUM UBUNTU BR:
  4. # http://ubuntuforum-br.org/index.php/topic,29799.3960.html
  5. #
  6. #
  7. # Com ele você compila o kernel, independente da versão (caso ela esteja disponível)
  8. # Escolhe os patchs do con kolivas
  9. # Adiciona os patchs da equipe do ubuntu
  10. # Altera as flags do compilador para melhor performance
  11. #
  12. ################################################################################################";
  13.  
  14.  
  15. # @Todo:
  16. #   * Verificar a existencia do arquivo de configuração do compilador e carregar as opções
  17. #   * Se ele não configurou alguma opção no arquivo de configuração, mostre um erro ou peça para ele configurar
  18. #       * Verificar a quantidade de patchs do con colivas para aquele kernel existente e exibir ao usuário (verifica se existe patchs como o bfs e pergunta se que usá-lo)
  19. #       * Dar a opção de usar um patch alternativo (passando o link do .patch)
  20. #       * Perguntar se deseja rodar o make menuconfig
  21. #
  22.  
  23.  
  24. #############
  25. # Funções
  26. #############
  27.  
  28. ###### Úteis
  29. ## Validação Sim/não
  30. function valida {
  31.     read opcao
  32.     if [ "$opcao" == "s" ]; then
  33.         return 0
  34.     else
  35.         return 1
  36.     fi
  37. }
  38.  
  39. ###### Sistema
  40. ## Função pra ler as configurações, caso exista um arquivo, leia-o e use suas configurações
  41. ## Se não existir, coloque algumas opções por padrão.
  42.  
  43. function init {
  44.     #Essa função inicia o sistema, começamos verificando se ele tem o arquivo de configuração, se tiver entendesse que deve prosseguir a configuração
  45.     if [ -d "config.json" ]; then
  46.         #Nada implementado ainda
  47.                 #confirmar
  48.                 echo ".."
  49.     else
  50.         #Se ela não existe usa essas aí:
  51.         kernel=3.3
  52.         patchkernel=3.3.2
  53.         ubuntu_patchs=true
  54.         ck_patchs=false
  55.         ck_patchs_bfs=true
  56.         ck_patchs_dirty=true
  57.         ck_patchs_1000mhz=true
  58.         config_file=$(locate /boot/config-* | sort -r | head -1)
  59.                 localmodcofig=true
  60.                 use_cflags=false
  61.                 arquivos=( "arch/x86/boot/compressed/Makefile" "arch/x86/boot/Makefile" "arch/x86/kernel/acpi/realmode/Makefile" "arch/x86/Kconfig.cpu" "arch/x86/Makefile" "arch/x86/Makefile_32.cpu")
  62.         #arquitetura: amd64 ou i386
  63.         arqt=$(dpkg --print-architecture)
  64.                 init_config
  65.     fi
  66.         confirmar
  67. }
  68.  
  69. #Funções de configuração
  70. #Init_config();
  71.  
  72. function init_config {
  73.     kernel
  74.     kernelpatch
  75.     if check_avancadas
  76.     then
  77.         patchs_ubuntu
  78.         patchs_ck
  79.         check_config
  80.         cflags
  81.         #patch_alternativo
  82.     fi
  83. }
  84.  
  85. #kernel
  86. function kernel {
  87.     #versão do kernel a ser compilado
  88.     echo "Digite a versão do kernel a ser compilada (Exemplo: 3.3, 3.2, 2.6)"
  89.     read kernel
  90.     if ! [[ "$kernel" =~ ^[0-9]+([.][0-9]+)?$ ]] ;  then
  91.        echo "Erro: Versão inválida. Digite apenas pontos e números. Não digite a versão inteira, ao invés de 3.2.3, digite apenas 3.2";
  92.        kernel
  93.     fi
  94. }
  95.  
  96. #Kernelpatch
  97. function kernelpatch {
  98.     #patch de atualização
  99.     echo "Digite o patch de atualização desejado para a versão (Exemplo: $kernel.3, $kernel.4 )"
  100.     read patchkernel
  101.     if ! [[ "$patchkernel" =~ $kernel([.][0-9]+)?$ ]] ;  then
  102.        echo "Erro: Versão inválida. Digite apenas pontos e números. A versão do patch deve equivaler a versão do kernel escolhida.";
  103.        kernelpatch
  104.     fi
  105. }
  106.  
  107. #check_avancadas
  108. function check_avancadas {
  109.     #patch ck
  110.     echo "Você deseja ver as opções avançadas de configuração? [s/n]"
  111.     if valida
  112.     then
  113.         return 0
  114.     else
  115.         return 1
  116.     fi
  117. }
  118.  
  119. ##Avançadas
  120. #Patchs do ubuntu
  121. function patchs_ubuntu {
  122.     echo "Deseja usar os patchs da equipe do Ubuntu? [s/n]"
  123.     if valida
  124.     then
  125.         ubuntu_patchs=true
  126.     else
  127.         ubuntu_patchs=false
  128.     fi
  129. }
  130.  
  131. #ck patchs
  132. function patchs_ck {
  133.     echo "Deseja usar os patchs do Con Kolivas? [s/n]"
  134.     if valida
  135.     then
  136.         ck_patchs=true
  137.         #config_ck_patchs
  138.                 #Desativado, não fiz ainda as funções que verificam quais
  139.                     #patchs especificos o usuário quer
  140.     fi
  141. }
  142.  
  143. #cflags
  144. function cflags {
  145.     echo "Deseja alterar as flags do C? [s/n]"
  146.     if valida
  147.     then
  148.         use_cflags=true
  149.     fi 
  150. }
  151.  
  152. #Arquivo .config
  153. function check_config {
  154.         echo "Escolha o .config que deseja usar"
  155.     echo "[1] Nenhum"
  156.     echo "[2] .config existente na pasta /boot"
  157.     echo "[3] .config do liquorix"
  158.     echo "[4] Desejo especificar o caminho de um .config"
  159.     echo "Qual .config você deseja usar? [1-4]:"
  160.     read opt
  161.     case $opt in
  162.     1)
  163.         echo 'Nenhum .config será usando'
  164.         config_file=false
  165.         ;;
  166.     2)
  167.         echo 'O script irá procurar o .config na pasta /boot'
  168.             config_file=$(locate /boot/config-* | sort -r | head -1)
  169.         ;;
  170.     3)
  171.         echo 'O script irá baixar o .config do site do liquorix'
  172.         config_file="/tmp/kernel-script-config"
  173.         wget -O $config_file "http://liquorix.net/sources/$kernel/config.$arqt"
  174.         ;;
  175.     4)
  176.         echo 'Especifique o caminho:'
  177.         read config_file
  178.         if ! [ -d $config_file ]; then
  179.             echo "Opps, não encontrei o .config no caminho especificado"
  180.         fi
  181.         check_config
  182.         ;;
  183.     *)
  184.         echo 'Opção inválida'
  185.         check_config
  186.         ;;
  187.     esac
  188.         echo "Deseja usar localmodconfig? (Use com muito cuidado) [s/n]"
  189.         if valida
  190.         then
  191.         echo 'localmodconfig será usado'
  192.         localmodcofig=true
  193.         fi
  194. }
  195.  
  196. #function config_ck_patchs {
  197.     #Essa função acessa a página do kolivas e verifica se ele tem patchs pro
  198.     #kernel escolhido, lista eles e pergunta quais quer usar
  199. #}
  200.  
  201. function confirmar {
  202.     echo "Você irá compilar o kernel  $kernel com o patch $kernelpatch"
  203.     [[ $ubuntu_patchs = true ]] && usepatch="" || usepatch="não "
  204.     echo "Você $usepatchirá usar os patchs dos desenvolvedores do ubuntu"
  205.     [[ $ck_patchs = true ]] && usepatch="" || usepatch="não "
  206.     echo "Você $usepatchusará os patchs do con kolivas"
  207.     [[ $use_cflags = true ]] && usepatch="" || usepatch="não "
  208.     echo "Você $usepatchirá alterar as cflags do computador"
  209.     echo "Você irá usar o seguinte arquivo de configuração: $config_file"
  210.     [[ $localmodcofig = true ]] && usepatch="" || usepatch="não "
  211.     echo "Você $usepatchirá usar o localmodconfig"
  212.     echo "Verifique se os dados estão corretos"
  213.     echo "Digite [P para Prosseguir, C para Corrigir ou S para Sair"
  214.     read opt
  215.     case $opt in
  216.         p)
  217.             compilar
  218.             ;;
  219.         c)
  220.             init
  221.             ;;
  222.         s)
  223.             exit 1
  224.             ;;
  225.         *)
  226.             echo "Opção inválida"
  227.             confirmar
  228.     esac
  229. }
  230.  
  231. function cflags {
  232.     sed "s/HOSTCFLAGS/HOSTCFLAGS = -Wall -Wmissing-prototypes -Wstrict-prototypes -0fast -march=native -pipe \n#HOSTCFLAGS/g" Makefile > Makefile2
  233.     mv Makefile2 Makefile
  234.  
  235.     #Aqui eu faço um loop e altero os arquivos, removendo o -march=() por -march=native
  236.     for i in "${arquivos[@]}"
  237.     do
  238.             echo "Aplicando patch no arquivo:"$i
  239.             sed -e 's/-march=\([A-Z0-9a-z]\+\)/-march=native -Ofast/g'  $i > "$i.file_changed"
  240.             mv "$i.file_changed" $i
  241.     done
  242. }
  243.  
  244. function compilar {
  245.  
  246.     if use_cflags
  247.     then
  248.         cflags
  249.     fi
  250.  
  251.     patchck=$kernel-ck1
  252.  
  253.     #sufixo
  254.     ckk=ck1
  255.  
  256.     #CL=CONCURRENCY_LEVEL do processador
  257.     CL=$(grep -c processor /proc/cpuinfo)
  258.     ##################################
  259.  
  260.     sudo apt-get update
  261.     sudo apt-get install kernel-package gcc-4.6 libncurses5 libncurses5-dev build-essential patch -y
  262.  
  263.  
  264.     cd /usr/src
  265.     wget -c http://www.kernel.org/pub/linux/kernel/v3.x/linux-$kernel.tar.bz2
  266.  
  267.  
  268.     sudo tar -jxpvf /usr/src/linux-$kernel.tar.bz2
  269.     sudo mv /usr/src/linux-$kernel /usr/src/linux-$patchkernel-$ckk
  270.  
  271.     wget -c http://www.kernel.org/pub/linux/kernel/v3.x/patch-$patchkernel.bz2
  272.  
  273.     #ubuntu patch
  274.     wget -c http://kernel.ubuntu.com/~kernel-ppa/mainline/v3.3.2-precise/0001-base-packaging.patch
  275.     wget -c http://kernel.ubuntu.com/~kernel-ppa/mainline/v3.3.2-precise/0002-debian-changelog.patch
  276.     wget -c http://kernel.ubuntu.com/~kernel-ppa/mainline/v3.3.2-precise/0003-default-configs.patch
  277.  
  278.     sudo bunzip2 /usr/src/patch-$patchkernel.bz2
  279.     sudo bunzip2 /usr/src/patch-$patchck.bz2
  280.  
  281.     cd /usr/src/linux-$patchkernel-$ckk
  282.    
  283.     sudo patch -p1 < /usr/src/patch-$patchkernel    
  284.     sudo patch -p1 < /usr/src/0001-base-packaging.patch
  285.     sudo patch -p1 < /usr/src/0002-debian-changelog.patch
  286.     sudo patch -p1 < /usr/src/0003-default-configs.patch
  287.  
  288.     if ck_patchs
  289.     then
  290.         wget -c http://ck.kolivas.org/patches/3.0/$kernel/$patchck/patch-$patchck.bz2
  291.         sudo patch -p1 < /usr/src/patch-$patchck
  292.     fi
  293.  
  294.     sudo cp $config_file /usr/src/linux-$patchkernel-$ckk
  295.  
  296.     if localmodcofig
  297.     then
  298.         sudo make localmodconfig
  299.     fi
  300.     #########################
  301.  
  302.     #sudo gedit Makefile  
  303.  
  304.     sleep 3
  305.  
  306.     sudo make menuconfig
  307.  
  308.     sudo sed 's/CONFIG_RTS5139=m/# CONFIG_RTS5139 is not set/g' /usr/src/linux-$patchkernel-$ckk/.config > /usr/src/linux-$patchkernel-$ckk/cc && mv /usr/src/linux-$patchkernel-$ckk/cc /usr/src/linux-$patchkernel-$ckk/.config
  309.  
  310.     ################
  311.  
  312.     sleep 3
  313.  
  314.     #time sudo CONCURRENCY_LEVEL=2 make-kpkg --initrd kernel_image kernel_headers modules_image
  315.  
  316.     time sudo CONCURRENCY_LEVEL=$CL make-kpkg --initrd kernel_image kernel_headers modules_image
  317.  
  318.     cd /usr/src
  319.     sudo dpkg -i linux-image-$patchkernel-$ckk\_$patchkernel-$ckk-10.00.Custom_$arqt.deb linux-headers-$patchkernel-$ckk\_$patchkernel-$ckk-10.00.Custom_$arqt.deb
  320.  
  321.     sleep 3
  322.  
  323.     cd /lib/modules
  324.     sudo mkinitramfs -o /boot/initrd.img-$patchkernel-$ckk $patchkernel-$ckk
  325.     sudo update-grub
  326.  
  327.     sleep 5
  328.     echo 'tudo belezinha'
  329.     exit 0
  330. }
  331.  
  332. init
Advertisement
Add Comment
Please, Sign In to add comment