.|.<(+_+)>.|.: Como Demonios Ocultar GRUB 2

jueves, junio 09, 2011

Como Demonios Ocultar GRUB 2

Desde hace unos días he estado trabajando en realizar una Particion Rcovery, tales como las que vienen en las PC de marca en las cuales el fabricante carga en una partición la cual generalmente es oculta una copia ya se por medio de imagen (cosa que no es muy común debido a la licencia del EULA para los OEM), o bien una copia de los archivos de instalación y de los programas que el sistema operativo (Windows en el 99 % de los casos) requiere. Debido a lo anterior, yo queria implementar un gestor de arranque tal y como lo hace GRUB, lo cual no es el problema, el problema comenzo cuando se me ocurrio la brillante idea de ocultar el grub, ya que si deseaba implementar este gestor de arranque en equipos con usuarios que no estan acostumbrados a ver este tipo de pantallas antes de que arranque su sistema operativo, quiza a estos no les agrade esa idea o se asusten; por lo que decidi ocultar el GRUB, cosa que en el GRUB 1, es suammente sencilla ya que basta con agregar la siguiente linea en el archivo menu.lst:

hiddenmenu

Con esa simple linea la falicidad era total y no aparecia el menu del GRUB, en su lugar se mostraba una cuenta regresiva del tiempo que duraba el GRUB en pantalla.

Por otro lado siempre me he preguntado por que cuando algo funciona bien y lo ha hecho por bastante tiempo , alguien tiene que llegar y reescribirlo ?, y no es con el animo de estar en contra de las mejoras, siempre seran bienvenidas, pero hay veces que se intenta mejorar algo que ya es bueno y facil , sin ninguna necesidad aparente (al menos asi lo percibo) con esto me estoy refiriendo al GRUB 2. Y es que desde la aparicion de este nuevo gestor de arranque para Linux y otros sistemas similares, el cual no cayo bien en la gracia de mucha gente por diversas razones (entre ellas a mi); recuerdo que la primera vez que lo encontre fue en Ubuntu 9.10 en donde era una de las "innovaciones" de esta distrubucion de Canonnical; en donde el primer evento de enemistad que tuve con este gestor de arranque fue cuando tuve que recuperar el grub posterior a una instalacion de Windows; ya que a mi gusto era mas facil hacer la restauracion del GRUB en su primera version, ya que tenia su propia consola con la cual uno podia jugar a montar o verificar que particiones contenian algun "bootsector" y de esta forma poder arrancar dicho sistema; pero el GRUB en su version 2 necesita que se monte la particion que contiene el SO que alberga el GRUB (por decirlo de alguna forma), lo cual a mi parecer es bastante mas engorroso, aunque con la practica ya no ha tanto problema, pero lo que realmenete me molesto de este nuevo GRUB es que la edicion del mismo ya no es tan sencilla, ya que en esta version ya no esta el famoso archivo menu.lst, con el cual uno hacia y deshacia las entradas de los SO disponibles, asi como el tiempo de duracion del menu en la pantalla, cambiar los colores y tipografia, en fin todo se hacia en el menu.lst, y pues nos lo quitan, con lo cual yo senti un profundo desprecio contra quien se le haya ocurrido tremenda idea. En fin ahora se crearon entradas un poco extrañas las cuales se van cargando una a una hasta que se crea lo que es el susbtituto del menu.lst que ahora recibe el nombre de grub.cfg (que siendo estricto es lo mismo), el cual  en teoria ya no era editable puesto que solo tiene opciones de lectura inclusive para el root, ahora se supone que todo se tenia que crear en las entradas de configuracion, las cuales volcarian su contenido en el archivo grub,cfg.

La cuestion estaba en que ahora en el archivo /etc/defaultgrub donde se encuentran las variables que controlaban el tiempo que se muestra en el grub en pantalla y cosas por el estilo tambien deberia de albergar (o al menos al parecer en las primeras prresentaciones de este grub si lo hacia) la variable:

HIDDENMENU = True

Pero lamentablemente no se encontraba, por lo que en muchos sitios se proponia agregar esa variable y crear la entrada /etc/grub.d/03_hiddenmenu, en donde teoricamente se tendria que agregar el siguiente codigo:

if [ "x${GRUB_HIDDENMENU}" = "xtrue" ]; then
cat << EOF
to enter the menu... " if sleep --verbos
echo -n "Press ES Ce --interruptible ${GRUB_TIMEOUT} ; then
eout=-1 fi EOF fi
set timeout=${GRUB_TIMEOUT} else set ti
m

Una vez realizado lo anterior, teóricamente tendríamos que actualizar el grub, ya que creamos una nueva entrada 03_hiddenmenu, por lo que usamos:

update-grub2

Despues de hacer las modificaciones pertinentes en la entrada /etc/default/grub respecto al tiempo en donde tenemos:

GRUB_HIDDEN_TIMEOUT=3
GRUB_HIDDEN_TIMEOUT_QUIET=true
GRUB_TIMEOUT="10"
en donde GRUB_HIDDEN_TIMEOUT_QUIET=True es la feliz opcion que nos da la posibilidad de ocultar el GRUB, para lo cual vemos GRUB_HIDDEN_TIMEOUT, que nos da la posibilidad de asignar el tiempo en segundos que el GRUB permanecera oculto, y en caso de presionar la tecla ESC, el menu del GRUB aparecera el tiempo que determine la variable GRUB_TIMEOUT. Hasta aqui todo parece bien y sin ningun problema, pero , al momento de ver los resultados de como quedo el grub al encender la PC, notamos que efectivamente si oculta el GRUB, pero que solo lo hace una vez, es decir, la siguiente vez que se inicia la PC el Grub vuelve a aparecer, lo cual es frustrante.

Despues de estar indagando en diversos foros, encontre esta curiosa nota:

Note to multiple-OS users: If GRUB 2's os-prober identifies additional operating systems while running the /etc/grub.d/30_os-prober script the hidden menu timeout feature is disabled by conditional statements. This also disables the ability to use the SHIFT key to display the menu during boot. Users with multiple operating systems wishing to hide the menu can find script edits on various forums which will allow them to add a hidden timeout feature to the boot sequence (for example: ubuntuforums).

Esta nota hizo que mi odio guardado contra quienes diseñaron el GRUB 2 se incrementara hasta niveles insospechados, ya que aparentemente cuando GRUB detecta que existen instalados mas de un sistema operativo instalado elimina las modificaciones hechas a las variables GRUB_HIDDEN_TIMEOUT_QUIE y GRUB_HIDDEN_TIMEOUT en el archivo /etc/default/grub, comentadas arriba, quiza para evitar que el usuario ppierda de alguna forma el acceso a sus SO si realiza una modificacion inadecuada.

Pues bien cuando parecia que todo seria frustracion, al leer una cuantas entradas mas del foro donde encontre esta nota, resulta que un usuario llamado syntesys, descubrio la forma de eliminar esta especie de restriccion, esta solucion, consistia en editar la entrada /etc/grub.d/30_os_prober y buscar l asiguiente linea (que esta en la linea 28):

if [ "x${found_other_os}" = "x" ] ; then

La cual simplemente hay que comentar, de tal forma que quedara:

# if [ "x${found_other_os}" = "x" ] ; then

Ahora hay que dirigirnos a la linea 62 donde encontraremos el cierre de la condicion IF que inicia en la linea anteriormente mencionada:

if ·

De tal forma que también la tenemos que comentar:

# fi

Lo que se esta haciendo es basicamente deshabilitar la condicion en la que GRUB detecta si existe mas de un sistema operativo, por lo que en caso de que asi sea, realiza las acciones pertinentes a descativarlo; de esta forma la comprobacion se deshabilita y ahora si es posible ocultar el grub.

Este es un tema que se ha abordado en diferentes foros, tanto de Ubuntu, Debian, Arch, entre otras particularmente este foro es de Slackware, con lo cual vemos que es un "problema global" por asi decirlo en el mundo de linux, el cual esta en muchos de estos foros sin resolver y que la mayoria tiene mucho tiempo de haberse planteado, cabe destacar que esta respuesta que encontre no tiene ni 2 semanas a esta fecha de haberse posteado.






No hay comentarios.: