Bienbenido a este post.
"ADVERTENCIA: ESTO PODRIA DANAR TU SISTEMA SI ALGO SALE MAL PODRIA NO SUBIR JAMAS" Na, solo podria no subir el entorno grafico, pero para que eso suceda, es si usan drivers privativos. Al final del post, recomiendo que hacer en ese caso.
Aqui, aprenderás como parchear el kernel vanilla o kernel salido del horno,
"el oficial" para aprovechar las bondades del parches que elijas utilizar.
Este tutorial, va dirigido principalmente para la gente que usa
Archlinux, aunque en teoría debería funcionar en cualquier distro, ya que el método de compilación, será el tradicional, el que funciona en todos lados, solo que dependiendo de la distro, el metodo para configurar el grub2 podria cambiar un poco.
En este post voy hacer uso del parche de
Con Kolivas "-ck", porque sencillamente aporta algo que me gusta mucho y es el
BFS "Brain Fuck Scheduler" que en español vendría siendo como (
el mas duro xD), un chiste, jajajaj, pero hace bien su trabajo.
Nota: por cierto, voy a trabajar todo por la consola, así que no voy a usar para nada el mouse. Esto no es motivo de asustarse, ya que el proceso es bastante sencillo y te aportara grandes dotes de satisfacion el haber aprendido algo nuevo.
Iniciamos con ubicarnos en tu directorio personal
cd ~ . Ese comando, nos lleva directamente al directorio personal o bien, donde tengas suficiente espacio para descargar y descomprimir el kernel.
Creamos una nueva carpeta, preferiblemente con el nombre de
kernelbuild.
mkdir kernelbuild
Entramos en esa carpeta con "
cd kernelbuild", en nuestro caso.
Ahora digiten esto en su terminal, o bien, usen el mouse para copiar y luego pegar en la terminal, ya que asi se ahorran algunos segundos digitando todo eso a mano xD. Al momento de realizar este tutorial la versión del kernel es la
4.8.0.
curl -O https://cdn.kernel.org/pub/linux/kernel/v4.x/linux-4.8.tar.xz
Empezara a descargar el kernel
Una vez finalizada la descarga,
descomprimimos el kernel con el siguiente comando:
tar -xvJf linux-4.8.tar.xz
Iniciara el proceso de descomprensión del kernel.
Nuestro kernel descomprimiendo los archivos de la fuentes.
Ahora descargamos
el parche de
Con Kolivas, para luego aplicarlo al kernel.
curl -O http://ck.kolivas.org/patches/4.0/4.8/4.8-ck1/patch-4.8-ck1.xz
Terminado la descarga, descomprimimos el archivo con:
xz -d patch-4.8-ck1.xz
Crearemos un directorio con el mismo nombre que tenga el parche y movemos el parche dentro de ese directorio, seria de la siguiente manera:
Pero antes, cambiamos el nombre del archivo, para poder copiar el parche al directorio:
mv -v patch-4.8-ck1 patch-4.8-ck1a
mkdir patch-4.8-ck1 --> mv -v patch-4.8-ck1/patch-4.8-ck1
Comprobamos que todo quedo bien con:
ls -l patch-4.8-ck1/
Debería mostrarnos el nombre del parche igual que el directorio.
Nota: el nombre del parche, debería ser igual al nombre del directorio que contiene el parche, en esta ocasión se me paso no agregar "-" al nombre del parche antes del numero de versión.
Ahora nos situamos en el directorio de las fuentes del kernel, o sea, donde estan todas las carpetas y archivos del mismo y desde aquí aplicaremos el parche con el siguiente comando:
patch -p1 <../patch-4.8-ck1/patch-4.8-ck1
Luego de aplicar el parche, ha de quedar mas o menos como se ve en la imagen:
Ahora para comprobar que es cierto, miramos el archivo
Makefile, que
esta en la raíz del kernel. Con nano, vi o vim pueden visualizarlo. Tal como se ve en el sombreado, eso indica que el parche fue aplicado con éxito.
Bien haremos algunos cambios, antes de iniciar la compilación. Primero, en el directorio de las fuentes del kernel, nos vamos al directorio
"arch/x86" y aquí editaremos el archivo
Makefile.
En mi caso tengo un procesador Intel buscamos la flags que tiene por nombre
march=core2 -mtune=generic.
Esta dos variables la cambiaremos por
native, o sea, debe quedar de la siguiente manera:
Comprueben que todo quedo bien, y luego guarden los cambios hechos.
Con esto ganaremos una mejor optimización del kernel para nuestro sistema o mas bien, es donde le decimos, que use las capacidades de nuestro sistema y sera automaticamente elegido y que luego se vera en el menú del kernel seleccionado, de acuerdo a lo que la variable native le diga.
Ahora, entra en juego un programa que nos quitara muchos dolores de cabeza a la hora de estar manejando los módulos que tiene el sistema cargado, ganaremos tiempo y dinero xD, pues solo compilando los modulos para tu sistema, la compilación del kernel, se acelera mucho, ya que no tiene que compilar, los 3000 y tantos modulos que tiene.
Modprobed-db, este es el programa del que les hablo.
Descárguenlo de esta pagina:
https://github.com/graysky2/modprobed-db
Luego lo instalan en su sistema.
Si tienen Archlinux, con
yaourt -S modprobed-db
será mas que suficiente para que se instale.
Lo siento por la gente de Ubuntu y derivados, pero no puedo confirmar que funcione el programa, ya que ahora mismo no tengo medios para probar ese programa.
Aunque, afortunadamente hay una forma manual de hacer esto, y es haciendo uso de un programa que trae el mismo kernel.
Lo malo de esto, es que no se guarda una base de datos, tal como lo hace modprobed-db. Lo importante es que funciona, pero necesitaras tener todos tus dispositivos conectados y funcionando, o sea, que el modulo este cargado, para que el script lo detecte y no haya problemas con estar adivinando.
Haciendo uso de modprobed-db, en mi sistema tengo actualmente 113 módulos cargados, de 155 guardados en su base de datos.
En la siguiente imagen, hago una llamada con el programa para que cargues los módulos que tiene guardados en su base de datos, si antes tenia 113 cargados, ahora el sistema, ve 152, porque uno de una tarjeta de red usb, que tengo que instalar manualmente y el otro probablemente sea de los módulos de nvidia, que serán instalados, una vez el kernel este compilado eh instalado.
Ahora tipeamos
make localmodconfig
Esto nos va generar el archivo
.config necesario para compilar el kernel con los módulos de tu sistema. A todo lo que aparezcan luego de hacer el comando anterior, simplemente aprieten la tecla Enter, sin cambiar nada, a menos que sepas lo que vas a cambiar.
Después que termine todo eso, pueden comprobar que todo esta correcto con este comando.
cat .config | grep =m | wc -l
En mi caso, salieron 190 módulos.
Ahora, para saber los módulos que tienes el sistema actualmente sin hacer uso de modprobed-db, tipiamos en la consola:
scripts/kconfig/streamline_config.pl > nombre-cualquiera
Esto generara el archivo
config con los módulos de tu sistema. En mi caso, como ya comente, algunos módulos no fueron posibles obtenerlos, por lo que tendré que instalar manualmente mas tarde y es de una wifi-usb-card.
Para comprobar que los módulos están ahí, recontamos otra vez con
cat el nombre que le pusieron al archivo | grep =m | wc -l
En mi caso, aparecieron 148 módulos.
Nota: la diferencia de modulos, se debe a que con uno hace uso de una base de datos con modulos guardados y en el otro, solo aparecen los modulos reales que el sistema detecta que estan siendo usandos por el kernel. No es para alarmarse tanto.
Ahora si, ya estamos listo para iniciar a configurar algunas cosas dentro del menú de configuración del kernel.
Tipiamos en la consola
make nconfig
Es el configuador del kernel mas moderno para la consola.
Debería salir el menú, tal como se muestra en la imagen:
Lo primero, es movernos a
General Setup y comprobar que
"BFS cpu sheduler", este presente y marcado.
Presionamos la tecla del teclado atrás o izquierda
← y seleccionamos la opción
Processor type and features --> y comprobamos que el de tu sistema este presente ahí. En mi caso, como tengo un procesador Intel de la gama core2duo, la opción seria así
Processor family (Core 2/newer Xeon)
Si tu equipo no es un servidor dedicado, en esas mismas opciones, baja mas abajo
↓ para encontrarte con la opción
Timer frequency (1000 Hz) Comprobamos que este en
1000 Hz
, aunque el parche automáticamente lo configura a esa velocidad. Con esto obtendremos mejor respuestas de dispositivos de entrada, tal como un joystick o un teclado midi, si te dedicas a la música.
Es tiempo de iniciar, hagan un
make -j`nproc`
y empezara el proceso.
Nota: Fijarse bien, en el comando de arriba
make -j`nproc`,
las comillas van pegadas de -j.
Nota2: Si quieren saber el tiempo que tomara compilando el kernel, agreguen al inicio del comando anterior,
time.
Ahora que esta compilando, pueden hacer otra cosa en lo que termina o para los mas curiosos, quedarse mirando ahí todo el proceso de compilación.
Y aquí termina el proceso de compilación
Como usuario con privilegios o root, hacemos un
make modules_install
Luego de instalado los módulos
Como usuario con privilegios o root, copiamos el archvo del kernel, que esta ubicado en el directorio de
arch/x86_64/boot/bzImage
/boot/vmlinuz-linux-cualquier-nombre, por ejemplo
"vmlinuz-linux-speed31" En mi caso quedo como,
vmlinuz-linux-speed31 Nota: en mi caso, el kernel es 64 bits, para los usuarios de 32bits, el archivo deberia de estar en /arch/x86/boot/bzImage
Ahora, nos movemos al directorio
"/etc/mkinitcpio.d/"Como siempre, ejecutamos estas acciones como usuario con privilegios o root.
Aquí, copiamos el archivo
linux.preset
y le ponemos de nombre como
linux-speed31.preset
cp -v linux.preset linux-speed31.preset
Ahora con vi, nano o vim, editamos el archivo creado como root o usuario con privilegios y cambiaremos algunas variables.
Las variables serán:All_kver="/boot/vmlinuz-linux" la cambiamos por "/boot/vmlinuz-linux-speed31"
default_image="/boot/initramfs-linux.img" la cambiamos por "/boot/initramfs-linux-speed31.img"
fallback_image="/boot/initramfs-linux-fallback.img" la cambiamos por "/boot/initramfs-linux-speed31-fallback.img"
Nota: Las comillas dobles "" no van en las variables de arriba.
Todo, debería quedar mas o menos como la imagen:
Guardamos los cambios y salimos del programa.
A continuación, construiremos la imágenes del kernel nuevo y de paso, será instalado en el sistema.
Otra vez, como usuario con privilegios o root, tipiar este comando:
mkinitcpio -p linux-spee31
presionamos enter y empezara el proceso.
"linux-speed31" es el nombre que le pusimos al archivo del kernel
"vmlinuz-linux-speed31" y que será instalado en el sistema, por el esquema del archivo
linux-speed31.preset que acabamos de editar.
Imagen del proceso de reconstrucción: Ahora, paso final, hacer que grub reconozca nuestro nuevo kernel.
Nota: antes de este proceso, recomiendo hacer un copia del archivo
grub.cfgNuevamente como root, tipear
grub-mkconfig -o /boot/grub/grub.cfg
y el programa iniciara el reconocimiento de los kernels que tengas instalado en tu sistema y serán agregados a la línea del cargador.
Imagen del proceso
Comprobamos que el kernel efectivamente se ha instalado y que grub lo ha agregado a su menú.
Efectivamente ya esta agregado.
Como agregado, aqui una imagen de presentacion final de la entrada de nuestro nuevo kernel en los menu del grub2.
Y aqui, nuestro kernel trabajando en el sistema.
Nota final:Como paso final, para los usuarios que tienen alguna grafica nVidia y hacen uso de los drivers privativos, tienen que instalar el programa dkms y a través de yaourt, instalar el programa nvidia-dkms que le reconstruirá el modulo necesario para que la tarjeta de video funcione con su custom kernel.