educatica!

educación, informática y demás

Sistemas duales, Sistemas operativos, Ubuntu 18.04

Caso práctico. Configurando Grub

Nos encontramos en un sistema dual donde tenemos instalado Windows y una distribución de GNU/Linux, en concreto Ubuntu. Queremos configurar el gestor de arranque Grub para que muestre menos opciones en el menú de arranque y que por defecto entre lance Windows esperando por defecto 20 segundos a la elección del usuario.

Si pulsamos sobre la opción Opciones avanzadas para Ubuntu nos muestra más opciones de arranque.

Opciones avanzadas para Ubuntu

Queremos dejar el menú de arranque lo más simple posible para evitar posibles situaciones de anómalas.

Obteniendo información del arranque

Vamos a echar un vistazo a las entradas de menú que existen en el ficheo de configuración de grub.

Entradas de menú del fichero de configuración de grub

En nuestro caso tenemos cuatro entradas y dos entradas en un submenu. Podemos echar un vistazo desde un editor de texto para comprobarlo.

También podemos aprovechar para ver las secciones que tenemos en el fichero, aunque esto sea meramente informativo y algo que podemos comprobar echando un vistazo al directorio /etc/grub.d.

Vamos a echar un vistazo al fichero README

Sabemos que los ficheros contenidos en este directorio son scripts que al ejecutarse generarán porciones de configuración que se añadirán en el fichero de configuración de grub. Estos fichero se ejecutarán en orden y uno a uno al ejecutar la herramienta grub-mkconfig. Por tanto, lo que tenemos que hacer para conseguir que solo se muestren las opciones que buscamos es modificar y/o quitar (quitar ejecución también vale) los ficheros de este directorio.

Siguiendo esta lógica, vamos a quitar las opciones relacionadas con memtest.

Ahora, para que esta nueva configuración surta efecto, tenemos que generar de nuevo el fichero de configuración de grub con estos cambios. Para ello, ejecutamos el comando update-grub, que se encargará de generar el fichero de configuración y actualizar la configuración de grub.

Con esto, vemos que ya no aparecen las entradas de memtest en el fichero de configuración de grub.

Podríamos reiniciar el sistema para ver si este cambio ha surtido el efecto esperado.

El siguiente paso será quitar las opciones avanzadas. Pero, si echamos de nuevo un vistazo a los ficheros que generan la configuración de grub, no hay ninguno qu ese dedique en exclusiva a opciones avanzadas. No nos queda más remedio que editar el fichero de configuración de los sistemas Linux y modificarlo.

Sin embargo, antes de modificar este fichero, vamos a crear una copia de seguridad del fichero que nos permita recuperarlo en caso necesario.

Como no sabemos como está configurado, deberíamos buscar en la ayuda de la aplicación como se configura esta entrada. Nosotros, que ya tenemos ciertos conocimientos sobre sistema, vamos a echar un vistazo a su contenido para tratar de aprender como funciona, practicando un poco los conocimientos que tenemos sobre GNU/Linux.

Si nos fijamos se trata de un script, como ya nos indicó el fichero README.

Hay una función que se llama linux_entry que se utiliza para generar entradas de tipo linux.


Esta función tiene toda la pinta de crear una entrada de menú de un sistema operativo GNU/Linux. Podríamos analizarla para ver que es lo que hace realmente.

Echando un vistazo nos encontramos con que en una parte del cuerpo de la función se muestra en pantalla menuentry, así que vamos a buscar esta cadena en el fichero.

Viendo el código, según estamos buscando las entradas menuentry nos encontramos con esta cadena: «submenu». Además, más abajo, aparece «gnulinux-advanced-«. De hecho, vamos a buscar la cadena submenu en el fichero de configuración de grub.

Si queremos quitar las opciones avanzadas de Ubuntu eso es lo que tenemos que buscar: submenu.

Vamos a buscar en el código más cadenas de texto «submenu» a ver qué encontramos.

Solo si se cumplen las condiciones del if se ejecutará el comando echo que generará el submenu. Podríamos dejarnos llevar por las prisas y borrar directamente esta parte del código. Pero esta no es la solución.

Vamos a analizar las condiciones del if.

Hay dos condiciones que utilizan el comando test en su forma de corchetes. Se deben cumplir las dos condiciones, puesto que hay un AND entre los dos comandos test.

Vaamos a ver la primera de ellas. La primera condición se cumplirá si x y el valor de la variable is_top_level es igual a xtrue. Es decir, como en ambas partes de la igualdad tenemos una x inicial, se cumplirá si lo que almacena la variable is_top_level es igual a true.

¿Por qué se utiliza esa x?. Esa x se utiliza para evitar un error de sintáxis en caso de que una variable esté vacía.

Vamos a analizar la segunda condición. En esta segunda condición se comprueba que el valor de la variable GRUB_DISABLE_SUBMENU sea distinto de y. Si nos fijamos en el nombre de la variable, nos damos cuenta de que esta variable sirve para determinar si se crean submenus, como el que queremos quitar, o no.

Por tanto, para quitar las opciones avanzadas tan solo tendríamos que establecer esta variable a y.

Esta variable al ser una variable de configuración general de grub, deberíamos establecerla en el fichero /etc/default/grub.

Primero buscaría en el fichero si existe la declaración de la variable GRUB_DISABLE_SUBMENU. No está en el fichero, así que la declaramos en la parte superior como el resto de variables.

Ya que estamos en el fichero de configuración general de grub, vamos a cambiar la opción por defecto a la 1 (la segunda opción) y el tiempo de espera a 20.

Como nos indica el comentario inicial, vamos a realizar un update-grub para que se apliquen los cambios realizados.

Antes de reiniciar para comprobar que funciona como queremos, vamos a echar un vistazo a la cadena menuentry en el fichero de configuración.

Quedan las opciones de recuperación. Vamos a quitar esta opción también O:)

Vamos a utilizar la herramienta de búsqueda para encontrar las cadenas recovery. La primera coincidencia del fichero nos lleva a una variable.

La variable ubuntu_recovery tiene toda la pinta de controlar si se genera opción de recuperación o no. Así que vamos a buscarla en código a ver cómo afecta.

Según podemos ver la variable afecta cuando vale 1 y cuando vale 0. Como con valor 1, que habitualmente se interpreta como true, nos muestra la opción de recuperación, vamos a establecerla a 0.

Vamos a dejar la variable anterior a su valor y vamos a establecer la variable GRUB_DISABLE_RECOVERY a true.

En el fichero /etc/default/grub buscamos la variable y nos la encontramos comentada y con un comenario encima que indica que la descomentemos para deshabilitar la generación de entradas de recuperación.

Ejecutamos update-grub y reiniciamos.

Todo esta en el manual…

El proceso que hemos llevado a cabo en este caso práctico tenía como finalidad mostrar cómo funciona por dentro Grub comprobando y analizando el código de algunos de los scripts que generan las entradas de menú.

El objetivo, por tanto, era practicar análisis de scripts y configurar grub en base a la información obtenida.

Sin embargo, las dos variables que se han modificado finalmente para obtener los resultados deseados aparecen en la documentación de grub.

Si consultamos el sitio web con la documentación oficial de GNU Grub, en la sección 6.1 Simple configuration handling, tenemos información de las variables de configuración disponibles.

Deja un comentario

Tema creado por Anders Norén