jueves, 13 de julio de 2017

rc.local Debian 9 Stretch / Ubuntu 20.04 Actualizado

Hola, se que tiene siglos que no escribo nada.

NOTA: Me dice Google que tengo que poner una nota de las cookies por disposición Europea, yo no cree las cookies y no se que contengan, si las hay son de Google, Así que supongo ustedes sabrán si siguen leyendo o no este artículo.

Con los cambios a Stretch noto unos cambios y se ve que cada vez se impone más systemd en la configuración del sistema. Yo uso mucho el rc.local para ejecutar cosas en el arranque por ejemplo máquinas virtuales con virtualbox.
Que si quiere alguien una explicación de esto, escriban pidiéndolo y con gusto explico como.

Pero en Stretch veo que ni archivo /etc/rc.local existe, hay forma de activarlo y explico a continuación como.

Tal cual se explica aquí me ha funcionado en 4 sistemas 1 de ellos físico y 3 virtuales corriendo Debian 9 Stretch.

Primero copiemos el archivo ejemplo de la siguiente manera (todo lo hago como root)

cp /lib/systemd/system/rc-local.service /etc/systemd/system/rc-local.service

El contenido del archivo es el siguiente: (Pueden crear directo el archivo rc-local.service dentro de /etc/systemd/system con este contenido)

# This file is part of systemd.
 # 
# systemd is free software; you can redistribute it and/or modify it 
# under the terms of the GNU Lesser General Public License as published by 
# the Free Software Foundation; either version 2.1 of the License, or 
# (at your option) any later version. 
# This unit gets pulled automatically into multi-user.target by 
# systemd-rc-local-generator if /etc/rc.local is executable. 
[Unit]
Description=/etc/rc.local Compatibility 
ConditionFileIsExecutable=/etc/rc.local 
#After=network.target 

[Service]
 Type=forking 
ExecStart=/etc/rc.local start 
TimeoutSec=0 
RemainAfterExit=yes 
#GuessMainPID=no 
SysVStartPriority=99 

[Install] 
WantedBy=multi-user.target 

Luego tenemos que hacer un enlace simbólico de esta manera:

 cd /etc/systemd/system/multi-user.target.wants/
 ln -s /etc/systemd/system/rc-local.service rc-local.service 

 ahora creamos el rc.local en etc
vi rc.local 
#!/bin/bash 
:wq 

Importante poner la línea del comentario como si de un bash se tratara, me daba un error hasta que encontré un foro en RedHat donde explicaba que se pusiera esta línea y el error desapareció.

Ahora le damos permisos 755

 chmod 755 rc.local 

por ultimo lo vamos habilitar, ejecutar y verificar el status, debería estar funcionando ahora.

 systemctl enable rc-local.service 
systemctl start rc-local.service 
systemctl status rc-local.service 

Esto es lo que a mí me sale después de hacer estos pasos en las 4 computadoras que explicaba al principio que lo he probado  

● rc-local.service - /etc/rc.local Compatibility 
Loaded: loaded (/lib/systemd/system/rc-local.service; static)
Active: active (exited) since mié 2017-07-12 23:26:02 CDT; 1h 21min ago Process: 815 ExecStart=/etc/rc.local start (code=exited, status=0/SUCCESS) 

jul 12 23:26:02  rc.local[815]: Restarting mysql (via systemctl): mysql.service. 
jul 12 23:26:02  systemd[1]: Started /etc/rc.local Compatibility. 

 Ahora ya podemos colocar nuestros scripts dentro de rc.local recuerden que los scripts tienen que tener permiso de ejecución chmod +x Espero les sirva cualquier duda o comentario, bien recibidos.

TIP en stretch mucha gente se queja que no hay ifconfig para ver su IP cosa que no es necesario por que con ip a s pueden verla hasta siendo usuario sin permisos, y si aun así quieren ifconfig.

apt install net-tools  

 ACTUALIZACION

Lamento mucho la situación pero nunca me notificó que tenia comentarios y estoy muy apenado, ahora que estoy actualizando los veo. Perdón por no contestar antes. Les platico que ahora estoy usando una computadora con ubuntu por que es la única que me acepta el driver de nvidia ni modo :(. Lo bueno es que sigue siendo Debian.

Y necesito esto en la versión 20.04.

Ahora mi archivo de /etc/systemd/system/rc-local.service

Contiene

[Unit]
Description=/etc/rc.local Compatibility
ConditionPathExists=/etc/rc.local

[Service]
Type=forking
ExecStart=/etc/rc.local start
TimeoutSec=0
StandardOutput=tty
RemainAfterExit=yes
SysVStartPriority=99

[Install]
WantedBy=multi-user.target

 

 Esto sigue Vigente

 cd /etc/systemd/system/multi-user.target.wants/
 ln -s /etc/systemd/system/rc-local.service rc-local.service 

Y el archivo /etc/rc.local

Contiene

#!/bin/bash
exit 0

Nota:(En algunos casos debe ser #!/bin/sh -e)

 y claro levantar el servicio

systemctl enable rc-local.service 
systemctl start rc-local.service 
systemctl status rc-local.service


Gracias por su comentarios y espero les sirva esta actualización.




6 comentarios:

  1. Hola Gerardo. Muchas gracias por tu post, me fue de gran ayuda. Aunque el error que comentabas solucionaste con el shebang de bash (#!/bin/bash), creo que se debe al link simbólico que utilizaste en el paso anterior -que es válido sólo en Redhat.
    Yo no utilicé dicho link, y el shebang ordinario del rc.local en Debian (#!/bin/sh -e) me funciona a la perfección.

    Cordiales Saludos.

    ResponderEliminar
    Respuestas
    1. perdón pero hasta ahora veo que tengo comentario nunca me aviso. Estoy actualizando la entrada por su la quieres ver.Y tienes toda la razón con tu comando funciona perfectamente bien.

      Eliminar
  2. Respuestas
    1. con mucho gusto, perdón pero hasta ahora veo que tengo comentario nunca me aviso. Estoy actualizando la entrada por su la quieres ver.

      Eliminar
  3. Hola, seguí todos los pasos acá y otros y no me funcionó la ejecución de los script en rc.local.
    Aparece iniciado el servicio, pero no ejecuta nada con, #!/bin/bash y #!bin/sh y no me funciona.
    Lo hice en un Debian x64 9.9

    Muchas gracias de todos modos, veo que a otros les funciona, no sé si es un Debian a partir de la versión 9.9
    Bye

    ResponderEliminar
    Respuestas
    1. Lamento mucho la situación pero nunca me notificó que tenia comentarios y estoy muy apenado, ahora que estoy actualizando los veo. Perdón por no contestar antes.Pero si quieres ve la actualización y lo requieres aun puedes verlo.

      Eliminar

Flutter 2.10

  Hace unos días google hizo una actualización en flutter. Se gana gran velocidad y hace estable hacer aplicaciones en #Windows . Muy lindo...