Saltar al contenido

Debian 10 Buster | actualizar-grub | Comando no encontrado

Te recomendamos que revises esta respuesta en un ambiente controlado antes de enviarlo a producción, un saludo.

Solución:

Soluciones (las mejores primero)

  1. su - root en vez de su root – mejor solución (gracias a Rui)
  2. ampliar la ruta del usuario normal en /etc/enviroment o ~/.bashrc o un archivo de configuración similar
  3. llamar a los comandos explícitamente; el uso de esta solución requeriría que uno modifique todos los scripts que llamen a otro comando de sbin (esto no es práctico, sin embargo, hay un ejemplo en la sección de solución de problemas)

Recomendaciones

Esto sucedió porque PATH funciona de una manera realmente extraña (en realidad funciona como se diseñó).

  1. regular user login -> entorno PATH no contiene /usr/sbin => opinión: funciona según lo diseñado, bastante lógico
  2. su root -> derechos de administrador, pero falta el entorno /usr/sbin:/sbin => opinión: funciona según lo diseñado, pero ilógico, porque una cuenta con nivel de acceso raíz debería poder ejecutar comandos desde sbin sin agregar la ruta a los archivos binarios manualmente
  3. su - root -> derechos de administrador, /usr/sbin en la ruta => opinión: funciona según lo diseñado, bastante lógico

Algo más de fondo

Hay dos RUTAS definidas en /etc/login.defs, pero a menos que comience su - o su - root, voy a obtener el ENV_PATH. Sé que esto ha sido diseñado de esta manera, para mantener el entorno del usuario real, pero en este caso único, realmente me sorprende, ¿por qué no agregarlo automáticamente? /usr/sbin y /sbin a la ruta de acceso de un “usuario regular” después de una exitosa su root

# cat /etc/login.defs |grep PATH=
ENV_SUPATH  PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
ENV_PATH    PATH=/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games

Solución de problemas

He encontrado que hay un update-grub mando en /usr/sbin.

# find / -name update-grub
/usr/sbin/update-grub

Lo ejecuté, solo para obtener el siguiente mensaje de error.

# /usr/sbin/update-grub
/usr/sbin/update-grub: 4: exec: grub-mkconfig: not found

Buscado para grub-mkconfig y lo encontré debajo /usr/sbin/grub-mkconfig. Entonces se me ocurrió, vamos a ver cómo el update-grub ¿Se parece el guión?

#cat /usr/sbin/update-grub |grep grub-mkconfig
exec grub-mkconfig -o /boot/grub/grub.cfg "[email protected]"

Modificado /usr/sbin/update-grub para llamar grub-mkconfig por su camino explícito…

exec /usr/sbin/grub-mkconfig -o /boot/grub/grub.cfg "[email protected]"

… entonces llamó update-grub con su ruta explícita y tada, ¡funcionó!

# /usr/sbin/update-grub
Generating grub configuration file ...
Found background image: /usr/share/images/desktop-base/desktop-grub.png
Found linux image: /boot/vmlinuz-4.18.0-2-amd64
Found initrd image: /boot/initrd.img-4.18.0-2-amd64
Found linux image: /boot/vmlinuz-4.16.0-2-amd64
Found initrd image: /boot/initrd.img-4.16.0-2-amd64
done

Conclusión

Esto debe ser algo sobre el PATH

Calificaciones y reseñas

Si piensas que te ha sido de ayuda este artículo, nos gustaría que lo compartas con más programadores de esta manera nos ayudas a difundir nuestro contenido.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *