¿Fundamento para cambiar de upstart a systemd?

28

El cambio más grande que viene con Ubuntu 15.04 es el cambio de upstart a systemd como predeterminado para administrar el arranque y el inicio del servicio del sistema.

¿Alguien podría explicar adecuadamente a un usuario no técnico cómo y si esto nos afecta en absoluto? ¿Y por qué es importante?

Nikos Grigoriadis
fuente

Respuestas:

29

Los usuarios legos no deberían notar ningún cambio, por diseño. Es un sistema init, no es algo con lo que los usuarios interactúan tradicionalmente. Debería reemplazar por completo la funcionalidad proporcionada por Upstart, y hacer algunas cosas adicionales, pero la única vez que un usuario no técnico verá esto es cuando sale mal.

Los usuarios, administradores de sistemas y desarrolladores que han estado usando y desarrollando activamente para Upstart son las personas que necesitan abordar las cosas. Hay un documento de migración en Ubuntu Wiki para ayudar a los desarrolladores a convertir sus scripts de inicio, pero los usuarios y los sysops pueden seguir usando Upstart al seguir con 14.04 (que es compatible hasta 2019).

La razón y la justificación del cambio realmente no fueron del lado de Ubuntu. Canonical estaba bastante contento con Upstart (su proyecto), pero muchos usuarios de Debian querían pasar a un motor de inicio moderno para obtener una mejor concurrencia en el arranque y una mejor funcionalidad de monitoreo en todos los servicios.

Eso significó una pelea entre varias opciones (los fundamentos) y systemd finalmente ganó.

Canonical se unió a Debian porque es más fácil y probablemente el mejor. Llegan a abandonar un proyecto y no luchan río arriba. También nos pone en línea con otras distribuciones (Red Hat, Fedora, etc.) que también se están moviendo a systemd. Más enfoque y menos duplicación de esfuerzos.

tl; dr Para una persona no técnica, esto no debería afectarlo en absoluto. Para Ubuntu debería significar menos trabajo y un mejor sistema de inicio.

Oli
fuente
18

¿Alguien podría explicar adecuadamente a un usuario no técnico cómo y si esto nos afecta en absoluto?

En teoría, esto no debería afectar al usuario final no técnico que no se involucra en el meollo del funcionamiento del sistema. En la práctica, hay muchas cosas que vas a ver.

Aquí hay una lista incompleta:

  • Si tenía software adicional que utilizaba archivos de definición de trabajo para iniciar programas, dejarán de funcionar. Tendrá que instalar (y posiblemente escribir, pero más comúnmente solo quitar a alguien que ya ha escrito) los archivos de la unidad de servicio systemd . Ejemplo: https://askubuntu.com/questions/613785
  • Varios supuestos de diseño de los desarrolladores de systemd acerca de cosas como la administración de energía dan como resultado valores predeterminados que están en desacuerdo con lo que podría estar acostumbrado. Los desarrolladores de systemd tienen ideas muy definidas sobre lo que debería suceder en respuesta a los interruptores de tapa en las computadoras portátiles , por ejemplo.
  • Si está utilizando el controlador de pantalla exclusivo de nvidia, existen varias decisiones de diseño en systemd que lo afectan. Ejemplo: https://askubuntu.com/questions/613773
  • No es realmente relevante cuando viene desde el inicio, ya que los usuarios de Ubuntu han tenido una página manual que les dice esto desde hace algunos años, pero lo menciono para los usuarios que no son Ubuntu que podrían leer esto: Otros usuarios de sistemas operativos Linux que vienen de System 5 init+ rcson mordidos por el hecho de que systemd solo es compatible con el Sistema 5 rc. Al igual que el sistema inicial, y de hecho la mayoría de los otros sistemas, profesa y suministra, no hay compatibilidad con el Sistema 5 inity su archivo de configuración /etc/inittab.

    Entonces, las personas que siguieron los consejos de los 30 años de personas que aconsejaron "Bueno, puedes editar esto en /etc/inittab...", o las personas que usan softwares que siguieron ese consejo ahora tienen softwares que no comienzan con bootstrap. Ejemplo: https://unix.stackexchange.com/a/196197/5132

  • No puede acceder al modo de usuario único a través del shutdowncomando systemd , como podría hacerlo con los shutdowncomandos anteriores . Aparte del hecho de que se llama modo de rescate en la jerga systemd, el modo de rescate no se considera un estado apagado en la visión del mundo systemd. Es considerado como un estado en ejecución . shutdown nowApagará la máquina. Es systemctl rescuealcanzar el modo de usuario único en el mundo systemd. Más información: https://unix.stackexchange.com/a/196471/5132
  • Además de ese último tema: si aún no ha descartado la idea de los niveles de ejecución , ahora es el momento de hacerlo. Lectura adicional: https://unix.stackexchange.com/a/196014/5132
  • Tendrá que tener cuidado al seguir los consejos generales de systemd encontrados por la exploración aleatoria de WWW, porque "sabe" que "todo es systemd ahora". Verás personas hablando sobre la ejecución de comandos con la --useropción de systemctl. Eso no se aplica a Ubuntu (todavía). upstart y systemd difieren significativamente en esta área, y la versión 15 de Ubuntu todavía usa el inicio por sesión de upstart en lugar de una instancia de systemd por usuario . Entonces https://superuser.com/a/860598/38062 no se aplicará, por ejemplo. ☺
JdeBP
fuente
6

Como otros ya han señalado aquí, en teoría, esto no debería afectar al usuario final no técnico, y en teoría no hay diferencia entre teoría y práctica, pero en la práctica sí.

Aclaración

Creo que pocas cosas publicadas aquí necesitan alguna aclaración:

Es un sistema init, no es algo con lo que los usuarios interactúan tradicionalmente.

Fue el caso con SysV init y con Upstart, pero ya no es el caso con systemd. Hace muchas cosas con las que los usuarios interactúan tradicionalmente:


Debería reemplazar por completo la funcionalidad proporcionada por Upstart, y hacer algunas cosas adicionales

Dos cosas para aclarar: primero sobre reemplazar completamente Upstart:

No hay scripts de inicio de SysV

Uno de los problemas que tiene la gente con systemd es que no ejecuta scripts de inicio SysV. Entonces, hay un ejemplo de que no reemplaza completamente la funcionalidad proporcionada por Upstart.

Esto es algo en lo que podríamos confiar durante más de 30 años y, tradicionalmente, usted escribió scripts de inicio SysV para una portabilidad máxima sin repetirse (escribiendo múltiples versiones de los mismos scripts), lo cual ya no es el caso.

Esto no debería ser un problema cuando se usan solo paquetes de repositorios oficiales porque presumiblemente todos los paquetes que solían tener sysV init o Upstart necesitarían reescribirse sus scripts antes de empaquetarse.

Solo será un problema para las personas que utilicen algún software personalizado o de terceros que tenga sus scripts de inicio escritos para SysV init o para Upstart y que necesitarán reescribir los scripts de inicio antes de actualizar a un sistema con systemd (u obtener el advenedizo instalado, que también es una opción , o migrar a un sistema que no usa systemd).

Hay systemd-sysv-generator que se supone que traduce automáticamente los scripts de inicio de SysV a scripts de systemd, pero hay algunos errores y una larga lista de incompatibilidades explícitas .

Ahora, la segunda aclaración: sobre esas pocas cosas adicionales:

Pocas cosas extra

Esas "pocas cosas adicionales" que cubrirá systemd, de acuerdo con una Perspectiva para systemd, lo que se ha logrado y la presentación de Lies Ahead de Lennart Poettering en 2014 en GNOME.asia, son las siguientes:

  • sistema init
  • registro de diario
  • gestión de inicio de sesión
  • gestión de dispositivos
  • gestión de archivos temporales y volátiles
  • registro en formato binario
  • retroiluminación guardar / restaurar
  • rfkill guardar / restaurar
  • diagrama de arranque
  • leer por adelantado
  • configuración de almacenamiento encriptado
  • Descubrimiento de partición EFI / GPT
  • registro de máquina virtual / contenedor
  • gestión de contenedores
  • gestión de nombre de host
  • gestión local
  • gestión del tiempo
  • manejo aleatorio de semillas
  • gestión de variables sysctl
  • gestión de la consola
  • introspección
  • descubrimiento automático
  • conecta y reproduce
  • administración de redes
  • systemd-networkd
  • Caché de DNS
  • respondedor mDNS
  • Respondedor LLMNR
  • Verificación DNSSEC
  • IPC en el núcleo
  • kdbus
  • sd-bus
  • sincronización horaria con NTP
  • systemd-timesyncd
  • integración con contenedores
  • sandboxing de servicios
  • sandboxing de aplicaciones
  • Formato de imagen del sistema operativo
  • Formato de imagen de contenedor
  • Formato de imagen de la aplicación
  • GPT con autodescubrimiento
  • Sistemas sin estado
  • sistemas instanciables
  • restablecimiento de fábrica
  • inicialización de nodo y actualizaciones
  • integración con la nube
  • gestión de servicios entre nodos
  • Imágenes del sistema operativo verificables hasta el firmware
  • Carga de arranque
  • Construyendo el sistema operativo de próxima generación de Internet Unificando diferencias sin sentido entre distribuciones

Volviendo a: "Es un sistema de inicio, no es algo con lo que los usuarios interactúen tradicionalmente". - Hay que señalar que el sistema init es solo un elemento en esa lista.


Y finalmente, lo último que me gustaría comentar:

[L] a vez que un usuario no técnico verá esto es cuando sale mal.

Oh, que alivio. :)

Cambios

Los cambios más notables para los usuarios finales (que no sean los propios scripts) es iniciar y detener servicios y usar comandos como:

que ya no funciona como se esperaba. Por ejemplo, nohupes un comando POSIX para asegurarse de que el proceso siga ejecutándose después de cerrar sesión en su sesión. Ya no funciona en systemd. Además, los programas como screeny tmuxdeben invocarse de una manera especial o de lo contrario los procesos que ejecuta con ellos se eliminarán (aunque no lograr que se eliminen esos procesos suele ser la razón principal de ejecutar screen o tmux en primer lugar).

Esto no es un error, es una opción de diseño, por lo que no es probable que se solucione en el futuro. Esto es lo que Lennart Poettering ha dicho sobre este tema:

En mi opinión, en realidad era bastante extraño para UNIX que, de forma predeterminada, permitiera que el código de usuario arbitrario permaneciera sin restricciones después del cierre de sesión. Se ha discutido desde hace mucho tiempo entre muchas personas del sistema operativo, que esto debería ser posible, pero ciertamente no debería ser el predeterminado, pero hasta ahora nadie se atrevió a cambiar el interruptor para pasar de un valor predeterminado a una opción. No limpiar las sesiones de los usuarios después del cierre de sesión no solo es feo y algo hackeo, sino también un problema de seguridad. systemd 230 ahora finalmente activó el interruptor y finalmente, por defecto, limpia todo correctamente cuando el usuario cierra la sesión.

Para más información ver:

Corriendo screen

  • advenedizo: screen
  • systemd: systemd-run --user --scope screen

(Nota: el comportamiento de "upstart" anterior es realmente cualquier cosa excepto systemd, esto no es específico de upstart)

Comenzando trabajo foo:

  • advenedizo: start foo
  • systemd: systemctl start foo

Detener el trabajo foo:

  • advenedizo: stop foo
  • systemd: systemctl stop foo

Reiniciar el trabajo foo:

  • advenedizo: restart foo
  • systemd: systemctl restart foo

Listado de trabajos con su estado:

  • advenedizo: initctl list
  • systemd: systemctl status

(Consulte mi respuesta a ¿Cuáles son los pros / contras de Upstart y systemd? Para obtener más detalles que están fuera del alcance de esta pregunta).

Registros

También hay una gran diferencia en el manejo de los registros porque, a diferencia de la tradición de Unix, los registros de systemd se almacenan en archivos binarios en un formato personalizado, por lo que en lugar de:

cat /var/log/upstart/foo.log
tail -f /var/log/upstart/foo.log

necesita usar comandos especiales para acceder a sus registros:

sudo journalctl -u foo
sudo journalctl -u foo -f

Controversias

La introducción de systemd primero a Debian y luego a Ubuntu no estuvo exenta de controversias y una gran oposición, como es sabido por cualquiera que haya escrito uno de los siguientes artículos:

La posición oficial de Debian en systemd y la controversia resultante condujo a la declaración de Exodus en 2014 y terminó con la renuncia de Ian Jackson .

Nacieron las iniciativas Init Freedom , Without-Systemd.org y Systemd-Free.org , con mucha discusión en Hacker News .

Otras lecturas

rsp
fuente
Estás poniendo mi respuesta en un contexto diferente. Systemd es más que un sistema de inicio, pero esta pregunta se refería a upstart → systemd y esa decisión ... No "¿Cuáles son todas las cosas que reemplaza systemd?"
Oli