sábado, 18 de mayo de 2013

Compilar kernel netbook 3.9.2 en paquetes deb


He actualizado el script y ahora muchas de las acciones se realizan automáticamente, como la descarga de las fuentes del kernel y la comprobación de errores en cada paso de la ejecución del script. Aquí lo pego:
#!/bin/bash
###################################################################################
# This work is licensed under a Creative Commons Reconocimiento-NoComercial 3.0 Unported License.
# http://creativecommons.org/licenses/by-nc/3.0/deed.es_ES
# Creado por Paulo Lira Gutiérrez (enriquelira948@gmail.com)
# Actualizado por lighta (lightaisme@gmail.com)
# Se concede permiso para copiar, distribuir y/o modificar este programa siempre 
# y cuando se cite al autor y la fuente de http://kernel-netbook.blogspot.com
# y según los términos de la GNU General Public License, Versión 3 o cualquiera
# posterior publicada por la Free Software Foundation.

# Este script construye paquetes .deb del kernel netbook, con ayuda del repositorio de 'dieghen89'.
#Uso:
#Si no desea realizar el paso de descargar el repositorio de Github, deberá de descargarse la configuración del archivo config situado en:
# https://github.com/dieghen89/kernel-netbook/blob/master/config y copiarlo en una nueva carpeta llamada kernel-netbook dentro de la carpeta personal.
#Además, deberá de descargarse el código fuente de la versión del kernel a construir (en una carpeta llamada $DIR dentro de la carpeta personal), debe de coincidir con la versión del archivo de configuración (.config).

YELLOW="\033[1;33m"
ENDCOLOR="\033[0m"
RED="\033[0;31m"
if [ $USER != root ]; then
  echo -e $RED"Error: debes ser root"
  echo -e $YELLOW"Saliendo..."$ENDCOLOR
  exit 0
fi
echo -e $YELLOW"Comprobando conexión a Internet..."$ENDCOLOR
ping www.google.com -c 3 >/dev/null 2>&1
if [ $? = 0 ]; then
 echo -e $YELLOW"Si hay conexión a internet"$ENDCOLOR
 else
 echo -e $RED"No se ha podido establecer una conexión a internet"$ENDCOLOR
 exit
fi
echo -e $YELLOW"Instalando dependencias..."$ENDCOLOR
sudo apt-get install git w3m zenity build-essential gcc libncurses5-dev gxmessage fakeroot
######################################################ACTUALIZACIÓN DEL REPOSITORIO##############################################
echo -e $YELLOW"Actualizando repositorio de kernel-netbook"$ENDCOLOR
if [ -d $HOME/kernel-netbook ]; then
 cd ~/kernel-netbook
 git pull https://github.com/dieghen89/kernel-netbook.git
else
     echo -e $YELLOW"\tDebug, Creando directorio kernel-netbook"$ENDCOLOR 
 git clone https://github.com/dieghen89/kernel-netbook.git $HOME/kernel-netbook
 cd $HOME/kernel-netbook 
fi
VERSION_CONFIG=$(cat $HOME/kernel-netbook/config | head -3 |tail -1 | grep -o '[0123456789.]*' | head -3 |tail -1)
#####################################DESCARGA DE LAS FUENTES DEL KERNEL####################################################################
PRINCIPAL=3.x
#VERSION=$(w3m -dump http://kernel.org/kdist/finger_banner | head -2 |tail -1 | awk '{ print $11 }')
VERSION=$(w3m -dump http://kernel.org/kdist/finger_banner | grep 'The latest stable '[0123456789.]*'' | head -1 | awk '{ print $11 }')
echo -e $YELLOW"La ultima version en kernel.org es la  $VERSION"$ENDCOLOR
sleep 5
LINUX_VERSION_TAR=linux-$VERSION_CONFIG.tar.bz2
echo -e $YELLOW"Buscando $LINUX_VERSION_TAR en la carpeta personal "$ENDCOLOR
BUSQUEDA=$(find $HOME -name $LINUX_VERSION_TAR | grep -o linux-'[0123456789.]*'.tar.bz2)
DIR=$(find $HOME -name $LINUX_VERSION_TAR | grep  linux-'[0123456789.]*'.tar.bz2 | sed "s/linux-[0123456789.]*.tar.bz2//")
if [ "$BUSQUEDA" = "$LINUX_VERSION_TAR" ]; then
 echo -e $YELLOW"El directorio donde se encontraron las fuentes es $DIR"$ENDCOLOR
 sleep 5
 cd $DIR
 echo -e $YELLOW"Listando archivos .tar.bz2 en $DIR..."$ENDCOLOR
 ls $LINUX_VERSION_TAR
  if [  $? = 0 ]; then
   echo -e "Se encontraron las fuentes del kernel"
   else
   echo -e $RED"No se encontraron las fuentes del kernel"$ENDCOLOR
   exit
  fi
 else
 echo -e $YELLOW"No se encontraron las fuentes, necesita descargalas"$ENDCOLOR
 sleep 2
 gxmessage -center -geometry 600×400 -title “linux-$VERSION_CONFIG” -buttons Si:1,No:2 -default Si -wrap “Versión del kernel de linux: $VERSION. ¿Desea descargarla?”
 case $? in
 1) 
 rm  linux*.tar.bz2 >/dev/null 2>&1 
 DISPLAY=:0.0 notify-send -i $HOME/.icons/linux.xpm "Versión del kernel: $VERSION_CONFIG" "Descargando desde kernel.org..."
 echo -e $YELLOW"Descargando desde kernel.org a la carpeta `pwd`..."$ENDCOLOR
 sleep 10
 
 wget -c ftp://ftp.kernel.org/pub/linux/kernel/v${PRINCIPAL}/linux-${VERSION_CONFIG}.tar.bz2
 #DISPLAY=:0.0 notify-send -i $HOME/.icons/kernel-check.xpm "Version del kernel de linux $VERSION_CONFIG" "Descargado con éxito"
 sleep 5
 ;;
 2) ;;
 esac
fi

###########################################FIN DE DESCARGA DE LAS FUENTES DEL KERNEL#######################################################
DIR=$(find $HOME -name $LINUX_VERSION_TAR | grep  linux-'[0123456789.]*'.tar.bz2 | sed "s/linux-[0123456789.]*.tar.bz2//")
echo -e $YELLOW"La versión del archivo de configuración kernel-netbook/config es la $VERSION_CONFIG"$ENDCOLOR
sleep 4
cd $DIR
LINUX_VERSION=linux-$VERSION_CONFIG
LISTAR=$(ls *.tar.bz2)
VERSION_LISTADO=$(ls *.tar.bz2 | grep -o '[0123456789.]*'| head -1 | sed 's/.$//g')
if [ $VERSION_CONFIG = $VERSION_LISTADO ]; then
 sleep 3
 sudo cp $DIR/$LISTAR /usr/src/$LISTAR
 cd /usr/src
 sleep 1
 echo -e $YELLOW"Limpiando directorio /usr/src/linux-$VERSION_LISTADO"$ENDCOLOR
 sudo rm -rf /usr/src/linux-$VERSION_LISTADO
 echo -e $YELLOW"Descomprimiendo el código fuente en /usr/src/linux-$VERSION_LISTADO..."$ENDCOLOR
 sleep 2
 sudo tar -xjvf $LISTAR
 echo -e $YELLOW"Borrando archivo $LISTAR..."$ENDCOLOR
 sudo rm $LISTAR
 sleep 2
 echo -e $YELLOW"Creando enlace simbólico hacia carpeta linux-$VERSION_LISTADO..."$ENDCOLOR
 sudo rm -rf linux
 sudo ln -s linux-$VERSION_LISTADO linux
 sleep 2
 cd /usr/src/linux
################################################################################################
#                                         PARCHES                                              #
# ALGUNAS PARTES TOMADAS DEL PKGBUILD DE DIEGUEN89
#https://github.com/dieghen89/kernel-netbook/blob/master/PKGBUILD
 TUX_ON_ICE="n"
 BROADCOM_WL="n"
 UKSM="y"
 LOCALMODCONFIG="n"
 GCONFIG="n"
 INSTALL="n"

### HOW-TO:
#
## >> Details for: TUX_ON_ICE
#  Set it to "n" you you don't want the Tux On Ice support
#
## >> Details for: BROADCOM_WL
#  Set is to "y" if you need the iw module for your wireless card
#
#
#  P.S. this pkgbuild supports the graysky's modprobe_db package
#
#
## >> Details for: UKSM
#  Set it to "y" to enable the testing uKSM patch, more info here:
#  http://kerneldedup.org
#
## >> The previous BFQ_IO_SCHEDULER is useless, read the wiki page in google code
#
##########
 DIR_FUENTE=/usr/src/linux
 _basekernel=3.9
 pkgver=${_basekernel}.2
 pkgrel=1

 #Broadcom-wl:
 broadcom_ver=5.100.82.112
 broadcom="hybrid-portsrc_x86_32-v${broadcom_ver//./_}"
 #BFS: - http://users.on.net/~ckolivas/kernel/ -
 _ckpatchversion=1
 _ckpatchname="patch-${_basekernel}-ck${_ckpatchversion}"
 #BFQ: - http://algo.ing.unimo.it/people/paolo/disk_sched/ -
 _bfqpath="http://www.algogroup.unimo.it/people/paolo/disk_sched/patches/3.9.0-v6r1"
 #TuxOnIce:
 #New official patch
 #_toipatch="tuxonice-for-linux-3.8.0-2013-02-24.patch"
 _toipatch="$HOME/kernel-netbook/toi-3.9.patch"

 #uKSM:
 _uksm="http://kerneldedup.org/download/uksm/0.1.2.2"
 _uksm_name="uksm-0.1.2.2-for-v3.9.ge.1"

 echo -e $YELLOW"Descargando parche BFS..."$ENDCOLOR
 wget http://ck.kolivas.org/patches/3.0/3.9/${_basekernel}-ck${_ckpatchversion}/${_ckpatchname}.bz2
 echo -e $YELLOW"Descargando parche uKSM..."$ENDCOLOR
 wget ${_uksm}/${_uksm_name}.patch
 echo -e $YELLOW"Descargando parche BFQ..."$ENDCOLOR
 wget "${_bfqpath}/0001-block-cgroups-kconfig-build-bits-for-BFQ-v6r1-3.9.patch"
 wget "${_bfqpath}/0002-block-introduce-the-BFQ-v6r1-I-O-sched-for-3.9.patch"
 wget "${_bfqpath}/0003-block-bfq-add-Early-Queue-Merge-EQM-to-BFQ-v6r1-for-3.9.0.patch"
 echo -e $YELLOW"Descargando parche Broadcom..."$ENDCOLOR
 wget http://www.broadcom.com/docs/linux_sta/${broadcom}.tar.gz
 cp $_toipatch $DIR_FUENTE
 cp $HOME/kernel-netbook/linux-recent.patch linux-recent.patch
 cp $HOME/kernel-netbook/license.patch license.patch
 cp $HOME/kernel-netbook/user-ioctl.patch user-ioctl.patch

 echo -e $YELLOW"Según su configuración,se aplicarán los parches BFS, BFQ, uKSM y TuxOnIce"$ENDCOLOR
 # --> BFS
 #Adjust localversion
 bzip2 -d patch-3.9-ck1.bz2
 sed -i -e "s/-ck${_ckpatchversion}//g" $DIR_FUENTE/${_ckpatchname}
 patch -Np1 -i $DIR_FUENTE/patch-3.9-ck1
  if [ $? = 0 ]; then
   if [ $TUX_ON_ICE = "y" ] ; then
    # --> TOI
    patch -Np1 -i ${_toipatch}
     if [ $? = 0 ]; then
      # --> BFQ
      for patch in $(ls $DIR_FUENTE/000*BFQ*.patch) ; do
      patch -Np1 -i $patch
      done
       if [ $? = 0 ]; then
        # --> uKSM
        if [ $UKSM = "y" ] ; then
        patch -Np1 -i $DIR_FUENTE/${_uksm_name}.patch
        fi
       fi
     fi
   fi
  else
  zenity --error --text="Hubo un error al aplicar los parches"
  exit
  fi
 ##Section: Broadcom-wl
   if [ "${BROADCOM_WL}" == "y" ] ; then
      zenity --info --text="Compilando módulo Broadcom" 
      cp -ar src/wl src/wl_orig
      patch -p1 -N -i linux-recent.patch
      patch -p1 -N -i license.patch
      patch -p1 -N -i user-ioctl.patch
      make -C $DIR_FUENTE/linux-$_basekernel M=`pwd`
      install -D -m 755 wl.ko ${pkgdir}/lib/modules/${_extramodules}/wl.ko
      rm -r src/wl
      mv src/wl_orig src/wl
   fi

 echo -e $YELLOW"Limpiando el árbol del directorio fuente..."$ENDCOLOR
 sudo make mrproper  
#                                      FIN DE PARCHES                                          #
################################################################################################
 echo -e $YELLOW"Copiando fichero kernel-netbook/config como .config"$ENDCOLOR
 sudo cp $HOME/kernel-netbook/config /usr/src/linux/.config
 sleep 6
 if [ $GCONFIG = "y" ] ; then
  echo -e $YELLOW"Iniciando gconfig"$ENDCOLOR
  sudo make gconfig
 fi
 echo -e $YELLOW"Limpiando el kernel..."$ENDCOLOR
 sleep 3
 sudo make-kpkg clean
 if [ ! $? = 0 ]; then
  echo -e $RED"Hubo un error al limpiar el kernel"$ENDCOLOR
  zenity --error --text="Hubo un error al limpiar el kernel"
  exit
 fi

 sleep 3
 if [ $LOCALMODCONFIG = "y" ] ; then
  echo -e $YELLOW"Se están incluyendo los módulos que estén corriendo en este momento"$ENDCOLOR
  sleep 3
  zenity --warning --text="Por favor conecte los periféricos necesarios"
  sleep 10
  sudo make localmodconfig
  echo -e $YELLOW"Ahora puede desconectar los periféricos, se han añadido los módulos necesarios al archivo de configuración"$ENDCOLOR
  sleep 3
 fi
 echo -e $YELLOW"Asegúrese que se haya añadido el archivo .config"$ENDCOLOR
 cat /usr/src/linux/.config | grep CONFIG_MATOM
 sleep 3
 echo -e $YELLOW"Copiando fichero .config a Ubuntu One"$ENDCOLOR
 sudo cp /usr/src/linux/.config $HOME/"Ubuntu One"/kernel-netbook/kernel-netbook-$VERSION_LISTADO
 echo -e $YELLOW"Compilando el kernel..."$ENDCOLOR
 rm "$DIR"linux*.deb >/dev/null 2>&1
 sudo make-kpkg -j2 --initrd linux_headers linux_image

 if [ ! $? = 0 ]; then
  echo -e $RED"Hubo un error al construir el kernel, saliendo..."$ENDCOLOR
  zenity --error --text="Hubo un error al construir el kernel"
  exit 0
 fi
 sleep 3
 echo -e $YELLOW"Se construyó existosamente el kernel-netbook"$ENDCOLOR
 notify-send "kernel-netbook-$VERSION_CONFIG" "Se construyó existosamente el kernel-netbook"
 cd ..
 FILENAME=$(ls linux-image-$VERSION_CONFIG-netbook_"$VERSION_CONFIG"_i386.deb)
 if [ ! $? = 0 ]; then
  echo -e $RED"linux-image-$VERSION_CONFIG-netbook_"$VERSION_CONFIG"_i386.deb no encontrado, saliendo..."$ENDCOLOR
  exit 0
 fi
 FILENAME=$(ls linux-headers-$VERSION_CONFIG-netbook_"$VERSION_CONFIG"_i386.deb)
 if [ ! $? = 0 ]; then
  echo -e $RED"linux-headers-$VERSION_CONFIG-netbook_"$VERSION_CONFIG"_i386.deb no encontrado, saliendo..."$ENDCOLOR
  exit 0
 fi 
 
 echo -e $YELLOW"Moviendo archivos linux-headers-$VERSION_CONFIG-netbook_"$VERSION_CONFIG"_i386.deb y linux-image-$VERSION_CONFIG-netbook_"$VERSION_CONFIG"_i386.deb a $DIR"$ENDCOLOR
 sudo mv /usr/src/linux*.deb $DIR
 echo -e $YELLOW"Cambiando propietario..."$ENDCOLOR
 USUARIO=$(echo ${HOME:6})
 sudo chown $USUARIO "$DIR"linux*.deb 
 cd $DIR
 sleep 5
#######################CAMBIO DE LA DESCRIPCIÓN DEL PAQUETE LINUX-IMAGE####################
 mkdir linux-image-"$VERSION_CONFIG"-netbook_"$VERSION_CONFIG"_i386
 dpkg -x linux-image-"$VERSION_CONFIG"-netbook_"$VERSION_CONFIG"_i386.deb linux-image-"$VERSION_CONFIG"-netbook_"$VERSION_CONFIG"_i386
 dpkg -e linux-image-"$VERSION_CONFIG"-netbook_"$VERSION_CONFIG"_i386.deb linux-image-"$VERSION_CONFIG"-netbook_"$VERSION_CONFIG"_i386/DEBIAN
 cd linux-image-"$VERSION_CONFIG"-netbook_"$VERSION_CONFIG"_i386/DEBIAN
 sed '17,26d' control > $$.tmp && mv $$.tmp control
 sleep 2
 sed "12a Homepage: code.google.com/p/kernel-netbook" control > $$.tmp && mv $$.tmp control 
 echo -e " Static kernel for netbooks with Intel Atom N270/N280/N450/N550/N570 such as eeepc with the add-on of external firmware (broadcom-wl) and patchset (BFS + TOI + BFQ optional) - Only Intel GPU - Give more power to your netbook!.\n ." >> control
 echo -e $YELLOW"Construyendo paquete modificado del archivo de control de linux-image"$ENDCOLOR
 cd $DIR
 fakeroot dpkg -b linux-image-"$VERSION_CONFIG"-netbook_"$VERSION_CONFIG"_i386
 if [ $? = 1 ]; then
  echo -e $YELLOW"Hubo un error al cambiar la descripción del paquete linux-image"$ENDCOLOR
 fi
 sleep 3
#######################CAMBIO DE LA DESCRIPCIÓN DEL PAQUETE LINUX-HEADERS####################
 mkdir linux-headers-"$VERSION_CONFIG"-netbook_"$VERSION_CONFIG"_i386
 dpkg -x linux-headers-"$VERSION_CONFIG"-netbook_"$VERSION_CONFIG"_i386.deb linux-headers-"$VERSION_CONFIG"-netbook_"$VERSION_CONFIG"_i386
 dpkg -e linux-headers-"$VERSION_CONFIG"-netbook_"$VERSION_CONFIG"_i386.deb linux-headers-"$VERSION_CONFIG"-netbook_"$VERSION_CONFIG"_i386/DEBIAN
 cd linux-headers-"$VERSION_CONFIG"-netbook_"$VERSION_CONFIG"_i386/DEBIAN
 sed '16,21d' control > $$.tmp && mv $$.tmp control
 sleep 2
 sed "12a Homepage: code.google.com/p/kernel-netbook" control > $$.tmp && mv $$.tmp control 
 echo -e " Static kernel for netbooks with Intel Atom N270/N280/N450/N550/N570 such as eeepc with the add-on of external firmware (broadcom-wl) and patchset (BFS + TOI + BFQ optional) - Only Intel GPU - Give more power to your netbook!.\n ." >> control
 echo -e $YELLOW"Construyendo paquete modificado del archivo de control de linux-headers"$ENDCOLOR
 cd $DIR
 fakeroot dpkg -b linux-headers-"$VERSION_CONFIG"-netbook_"$VERSION_CONFIG"_i386
 sleep 3
 if [ $? = 1 ]; then
  echo -e $YELLOW"Hubo un error al cambiar la descripción del paquete linux-headers"$ENDCOLOR
 fi
##########################################################################################################
 echo -e $YELLOW"Eliminando archivos innecesarios.."$ENDCOLOR
 sudo rm -rf linux-image-"$VERSION_CONFIG"-netbook_"$VERSION_CONFIG"_i386
 sudo rm -rf linux-headers-"$VERSION_CONFIG"-netbook_"$VERSION_CONFIG"_i386
 sudo rm control *.tmp
  if [ $INSTALL = "y" ] ; then
   echo -e $YELLOW"Instalando linux-image y linux_headers..."$ENDCOLOR
   sudo dpkg -i linux-image-$VERSION_CONFIG-netbook_"$VERSION_CONFIG"_i386.deb linux-headers-$VERSION_CONFIG-netbook_"$VERSION_CONFIG"_i386.deb
  fi
 echo -e $YELLOW"Cambiando propietario..."$ENDCOLOR
 USUARIO=$(echo ${HOME:6})
 sudo chown $USUARIO $DIR
 echo -e $YELLOW"Subiendo linux-image y linux-headers a 4shared..."$ENDCOLOR
 cadaver --rcfile=$HOME/.4shared-kernel
 sleep 5
 sudo rm -rf /usr/src/linux-$VERSION_LISTADO
 sleep 3
 else
 echo -e $RED"Hubo un error: No se encontraron las fuentes O Las versiones difieren, O existe más de un archivo de fuentes"$ENDCOLOR
 sleep 5
 echo -e $YELLOW"Saliendo..."$ENDCOLOR
 exit 0
fi

Descarga: kernel.sh

Pueden descargar el script o copiar y pegar el codigo anterior en su editor favorito (puede ser gedit), guardarlo, y darle permisos de ejecución; seleccionan el archivo guardado, le dan clic derecho >Propiedades > pestaña Permisos y marcan la casilla de "Permitir ejecutar el archivo como un programa". Algunos scripts no contienen la extension .sh pero aún asi siguen funcionando.

Nota: En cualquier momento podría modificar el script para adaptarlo a mis necesidades. Favor de avisar en caso de que los enlaces no funcionen.

No hay comentarios:

Publicar un comentario

Entre todos ayudemos a mejorar linux