Advertisement
Guest User

kernel.sh

a guest
Apr 22nd, 2012
179
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Bash 14.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çao 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.                     vsname=precise
  54.                     ubuntu_patchs=true
  55.     #               ck_patchs=true
  56.     #               ck_patchs_bfs=true
  57.     #               ck_patchs_dirty=true
  58.     #               ck_patchs_1000mhz=true
  59.                     config_file=$(locate /boot/config-* | sort -r | head -1)
  60.                     localmodcofig=true
  61.                     use_cflags=false
  62.                     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")
  63.                     #arquitetura: amd64 ou i386
  64.                     arqt=$(dpkg --print-architecture)
  65.                     init_config
  66.             fi
  67.             confirmar
  68.     }
  69.      
  70.     #Funções de configuração
  71.     #Init_config();
  72.      
  73.     function init_config {
  74.         kernel
  75.         kernelpatch
  76.         vsname
  77.         if check_avancadas
  78.         then
  79.             patchs_ubuntu
  80.             patchs_ck
  81.             check_config
  82.             cflags
  83.             #patch_alternativo
  84.         fi
  85.     }
  86.      
  87.     #kernel
  88.     function kernel {
  89.             #versão do kernel a ser compilado
  90.             echo "Digite a versão do kernel a ser compilada (versão disponivel: 3.3)"
  91.             read kernel
  92.             if ! [[ "$kernel" =~ ^[0-9]+([.][0-9]+)?$ ]] ;  then
  93.                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";
  94.                kernel
  95.             fi
  96.     }
  97.      
  98.     #Kernelpatch
  99.     function kernelpatch {
  100.             #patch de atualização
  101.             echo "Digite o patch de atualização desejado para a versão (ex: $kernel.2 )"
  102.             read patchkernel
  103.             if ! [[ "$patchkernel" =~ $kernel([.][0-9]+)?$ ]] ;  then
  104.                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.";
  105.                kernelpatch
  106.             fi
  107.     }
  108.      
  109.     #nome da versão
  110.     function vsname {
  111.             #versão do kernel a ser compilado
  112.             echo "Digite o apelido da versão do ubuntu usado (versão disponivel: precise)"
  113.             read vsname
  114.             if ! [[ "$vsname" =~ ^[a-z]+([.][a-z]+)?$ ]] ;  then
  115.                echo "Erro: Nome inválido.";
  116.                vsname
  117.             fi
  118.     }
  119.      
  120.      
  121.     #check_avancadas
  122.     function check_avancadas {
  123.             #patch ck
  124.             echo "Você deseja ver as opções avançadas de configuração? [s/n]"
  125.             if valida
  126.             then
  127.                     return 0
  128.             else
  129.                     return 1
  130.             fi
  131.     }
  132.      
  133.     ##Avançadas
  134.     #Patchs do ubuntu
  135.     function patchs_ubuntu {
  136.             echo "Deseja usar os patchs da equipe do Ubuntu? [s/n]"
  137.             if valida
  138.             then
  139.                     ubuntu_patchs=true
  140.             else
  141.                     ubuntu_patchs=false
  142.             fi
  143.     }
  144.      
  145.     #ck patchs
  146.     function patchs_ck {
  147.             echo "Deseja usar os patchs do Con Kolivas? [s/n]"
  148.             if valida
  149.             then
  150.                     ck_patchs=true
  151.                     #config_ck_patchs
  152.                     #Desativado, não fiz ainda as funções que verificam quais
  153.                         #patchs especificos o usuário quer
  154.             fi
  155.     }
  156.      
  157.     #cflags
  158.     function cflags {
  159.             echo "Deseja alterar as flags do C? [s/n]"
  160.             if valida
  161.             then
  162.                     use_cflags=true
  163.             fi    
  164.     }
  165.      
  166.     #Arquivo .config
  167.     function check_config {
  168.             echo "Escolha o .config que deseja usar"
  169.             echo "[1] Nenhum"
  170.             echo "[2] .config existente na pasta /boot"
  171.             echo "[3] .config do liquorix"
  172.             echo "[4] Desejo especificar o caminho de um .config"
  173.             echo "Qual .config você deseja usar? [1-4]:"
  174.             read opt
  175.             case $opt in
  176.             1)
  177.                 echo 'Nenhum .config será usando'
  178.                 config_file=false
  179.                 ;;
  180.             2)
  181.                 echo 'O script irá procurar o .config na pasta /boot'
  182.                 config_file=$(locate /boot/config-* | sort -r | head -1)
  183.                 ;;
  184.             3)
  185.                 echo 'O script irá baixar o .config do site do liquorix'
  186.                 config_file="/tmp/kernel-script-config"
  187.                 wget -O $config_file "http://liquorix.net/sources/$kernel/config.$arqt"
  188.                 ;;
  189.             4)
  190.                 echo 'Especifique o caminho:'
  191.                     read config_file
  192.                     if ! [ -d $config_file ]; then
  193.                             echo "Opps, não encontrei o .config no caminho especificado"
  194.                     fi
  195.                     check_config
  196.                 ;;
  197.             *)
  198.                 echo 'Opção inválida'
  199.                 check_config
  200.                 ;;
  201.             esac
  202.             echo "Deseja usar localmodconfig? (Use com muito cuidado) [s/n]"
  203.             if valida
  204.             then
  205.                 echo 'localmodconfig será usado'
  206.                 localmodcofig=true
  207.             fi
  208.     }
  209.      
  210.     #function config_ck_patchs {
  211.         #Essa função acessa a página do kolivas e verifica se ele tem patchs pro
  212.         #kernel escolhido, lista eles e pergunta quais quer usar
  213.     #}
  214.      
  215.     function confirmar {
  216.         echo "Você irá compilar o kernel  $kernel com o patch $kernelpatch"
  217.         [[ $ubuntu_patchs = true ]] && usepatch="" || usepatch="não "
  218.         echo "Você $usepatchirá usar os patchs dos desenvolvedores do ubuntu"
  219.         [[ $ck_patchs = true ]] && usepatch="" || usepatch="não "
  220.         echo "Você $usepatchusará os patchs do con kolivas"
  221.         [[ $use_cflags = true ]] && usepatch="" || usepatch="não "
  222.         echo "Você $usepatchirá alterar as cflags do computador"
  223.         echo "Você irá usar o seguinte arquivo de configuração: $config_file"
  224.         [[ $localmodcofig = true ]] && usepatch="" || usepatch="não "
  225.         echo "Você $usepatchirá usar o localmodconfig"
  226.         echo "Verifique se os dados estão corretos"
  227.         echo "Digite [P para Prosseguir, C para Corrigir ou S para Sair"
  228.         read opt
  229.         case $opt in
  230.             p)
  231.                 compilar
  232.                 ;;
  233.             c)
  234.                 init
  235.                 ;;
  236.             s)
  237.                 exit 1
  238.                 ;;
  239.             *)
  240.                 echo "Opção inválida"
  241.                 confirmar
  242.         esac
  243.     }
  244.      
  245.     function cflags {
  246.         sed "s/HOSTCFLAGS/HOSTCFLAGS = -Wall -Wmissing-prototypes -Wstrict-prototypes -0fast -march=native -pipe \n#HOSTCFLAGS/g" Makefile > Makefile2
  247.         mv Makefile2 Makefile
  248.      
  249.         #Aqui eu faço um loop e altero os arquivos, removendo o -march=() por -march=native
  250.         for i in "${arquivos[@]}"
  251.         do
  252.                 echo "Aplicando patch no arquivo:"$i
  253.                 sed -e 's/-march=\([A-Z0-9a-z]\+\)/-march=native -Ofast/g'  $i > "$i.file_changed"
  254.                 mv "$i.file_changed" $i
  255.         done
  256.     }
  257.      
  258.     function compilar {
  259.      
  260.         if use_cflags
  261.         then
  262.             cflags
  263.         fi
  264.      
  265.         patchck=$kernel-ck1
  266.      
  267.         #sufixo
  268.         ckk=ck1
  269.      
  270.         #CL=CONCURRENCY_LEVEL do processador
  271.         CL=$(grep -c processor /proc/cpuinfo)
  272.         ##################################
  273.      
  274.         sudo apt-get update
  275.         sudo apt-get install kernel-package gcc-4.6 libncurses5 libncurses5-dev build-essential patch -y
  276.      
  277.      
  278.         cd /usr/src
  279.         wget -c http://www.kernel.org/pub/linux/kernel/v3.x/linux-$kernel.tar.bz2
  280.      
  281.      
  282.         sudo tar -jxpvf /usr/src/linux-$kernel.tar.bz2
  283.         sudo mv /usr/src/linux-$kernel /usr/src/linux-$patchkernel-$ckk
  284.      
  285.         wget -c http://www.kernel.org/pub/linux/kernel/v3.x/patch-$patchkernel.bz2
  286.      
  287.         #ubuntu patch
  288.         wget -c http://kernel.ubuntu.com/~kernel-ppa/mainline/v$patchkernel-$vsname/0001-base-packaging.patch
  289.         wget -c http://kernel.ubuntu.com/~kernel-ppa/mainline/v$patchkernel-$vsname/0002-debian-changelog.patch
  290.         wget -c http://kernel.ubuntu.com/~kernel-ppa/mainline/v$patchkernel-$vsname/0003-default-configs.patch
  291.      
  292.         #ck
  293.         wget -c http://ck.kolivas.org/patches/3.0/$kernel/$patchck/patch-$patchck.bz2
  294.         sudo bunzip2 /usr/src/patch-$patchck.bz2
  295.      
  296.         sudo bunzip2 /usr/src/patch-$patchkernel.bz2
  297.         sudo bunzip2 /usr/src/patch-$patchck.bz2
  298.      
  299.         cd /usr/src/linux-$patchkernel-$ckk
  300.        
  301.         sudo patch -p1 < /usr/src/patch-$patchkernel
  302.         sudo patch -p1 < /usr/src/patch-$patchck    
  303.         sudo patch -p1 < /usr/src/0001-base-packaging.patch
  304.         sudo patch -p1 < /usr/src/0002-debian-changelog.patch
  305.         sudo patch -p1 < /usr/src/0003-default-configs.patch
  306.      
  307.     #    if ck_patchs
  308.     #    then
  309.     #        cd /usr/src
  310.     #        wget -c http://ck.kolivas.org/patches/3.0/$kernel/$patchck/patch-$patchck.bz2
  311.     #        sudo bunzip2 /usr/src/patch-$patchck.bz2
  312.     #        cd /usr/src/linux-$patchkernel-$ckk
  313.     #        sudo patch -p1 < /usr/src/patch-$patchck
  314.     #    fi
  315.      
  316.         sudo cp $config_file /usr/src/linux-$patchkernel-$ckk
  317.      
  318.         if localmodcofig
  319.         then
  320.             sudo make localmodconfig
  321.         fi
  322.         #########################
  323.      
  324.         #sudo gedit Makefile  
  325.      
  326.         sleep 3
  327.      
  328.         sudo make menuconfig
  329.      
  330.         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
  331.      
  332.      
  333.         sleep 3
  334.      
  335.      
  336.     ######################################################
  337.     ############ script do Stivekx #######################
  338.      
  339.     #!/bin/bash
  340.      
  341.     #Script para automatizar a mudança das flags na hora de compilar o kernel.
  342.     #Mais informações sobre como compilar o kernel para seu processador:
  343.     #http://ubuntuforum-br.org/index.php/topic,81718.0.html
  344.      
  345.     #Modo de usar:
  346.     #Após baixar o kernel, descompactar, criar um link simbólico para ele no /usr/src/linux:
  347.     # cd /usr/src/linux    
  348.     # sudo su
  349.     # chmod +x script.sh
  350.     # ./script.sh
  351.     #O script deve ser executado como root. Recomendo que use sudo su - e rode o script ao invés de sudo sh script.sh
  352.      
  353.      
  354.     #Script criado por André Steinn
  355.      
  356.     #Aqui é a lista de arquivos que ele vai dar replace no -march= por -march=native. Você pode mudar essa lista de arquivos passando a lista pela opção a e separados pro virgula
  357.     #e.g.: ./script.sh -a arch/x86/boot/compressed/Makefile,arch/x86/boot/Makefile,arquivo1,arquivo2,arquivo3
  358.      
  359.     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")
  360.      
  361.     #Aqui eu verifico se a pessoa passou algum argumento na hora de executar o script
  362.     while getopts ":a:c" opt; do
  363.       case $opt in
  364.         a)
  365.           echo "Você setou uma lista de arquivos personalizada: $OPTARG" >&2
  366.             IFS=',' read -ra arquivos <<< "$OPTARG"
  367.           ;;
  368.         \?)
  369.           echo "Opção inválida: -$OPTARG" >&2
  370.           exit 1
  371.           ;;
  372.       esac
  373.     done
  374.      
  375.     #Aqui eu faço um loop e altero os arquivos, removendo o -march=() por -march=native
  376.     for i in "${arquivos[@]}"
  377.     do
  378.             echo "Path no arquivo:"$i
  379.             sed -e 's/-march=\([A-Z0-9a-z]\+\)/-march=native -Ofast/g'  $i > "$i.file_changed"
  380.             mv "$i.file_changed" $i
  381.     done
  382.      
  383.      
  384.      
  385.     ################################################
  386.      
  387.     sleep 3
  388.      
  389.      
  390.      
  391.     ####
  392.         #time sudo CONCURRENCY_LEVEL=2 make-kpkg --initrd kernel_image kernel_headers modules_image
  393.      
  394.         time sudo CONCURRENCY_LEVEL=$CL make-kpkg --initrd kernel_image kernel_headers modules_image
  395.      
  396.         cd /usr/src
  397.         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
  398.      
  399.         sleep 3
  400.      
  401.         cd /lib/modules
  402.         sudo mkinitramfs -o /boot/initrd.img-$patchkernel-$ckk $patchkernel-$ckk
  403.         sudo update-grub
  404.      
  405.         sleep 5
  406.         echo 'tudo belezinha'
  407.         exit 0
  408.     }
  409.      
  410.     init
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement