web-dev-qa-db-fra.com

Pourquoi un serveur Ubuntu a-t-il graphical.target comme cible systemd par défaut?

Je suis un utilisateur Ubuntu depuis longtemps et au travail, nous avons de nombreux Ubuntu VM serveurs, qui exécutent tous Ubuntu 14.04 LTS pour déployer nos applications Web, bases de données et autres outils. .

J'étudie actuellement Ubuntu 16.04 LTS, desktop et server, afin de pouvoir mettre à niveau nos serveurs de production dans un avenir proche sans causer de problèmes.

Depuis Ubuntu 15.04, init et upstart ont été remplacés par Systemd, aussi j'étudie Systemd.

J'ai remarqué que mon ordinateur de développement exécutant Ubuntu 16.04 Desktop edition avait graphical.target comme cible systemd par défaut, ce qui est logique.

Mais ensuite, j'ai remarqué que le serveur de test exécutant Ubuntu 16.04 Server Edition utilise également graphical.target comme cible systemd par défaut.

$ systemctl get-default
graphical.target

Donc je suis confus. Le serveur n'a pas de couche graphique, alors comment se fait-il que la cible par défaut est graphical.target?

Modifier # 0

Comme suggéré par Rinzwind dans les commentaires, j'ai examiné la cible pour voir si elle était active ou non ...

et la réponse est OUI:

admin@server1604:~$ systemctl get-default
graphical.target

admin@server1604:~$ systemctl status graphical.target
● graphical.target - Graphical Interface
Loaded: loaded (/lib/systemd/system/graphical.target; static; vendor preset: enabled)
Active: active since jeu. 2016-10-13 16:03:18 CEST; 46min ago
Docs: man:systemd.special(7)

oct. 13 16:03:18 fdea systemd[1]: Reached target Graphical Interface.

Donc je suis un peu plus confus.

Modifier # 1

La réponse de Mark Stosberg indique que display-manager.service fait partie de l'arborescence des dépendances de graphical.target sur son propre serveur 16.04, et ajoute qu'aucun gestionnaire d'affichage n'est installé ou en cours d'exécution sur sa machine. J'ai aussi regardé ça, et en effet, sur mon serveur, cette dépendance est là:

admin@server1604:~$ systemctl list-dependencies graphical.target 
graphical.target
● ├─accounts-daemon.service
● ├─Apache2.service
● ├─apport.service
● ├─display-manager.service

...

Et cette cible a un cercle rouge à gauche, où la plupart des autres dépendances ont un vert.

Et cette fois, le résultat est cohérent:

[email protected]:~$ systemctl status display-manager.service 
● display-manager.service
   Loaded: not-found (Reason: No such file or directory)
   Active: inactive (dead)

Mais voici une autre chose étrange: sur mon édition de bureau, le display-manager.service n'est pas une dépendance de graphical.target:

[email protected]:~ $ systemctl list-dependencies graphical.target | grep display
[email protected]:~ $ 

Mais j'ai même trouvé une alternative car je lance Ubuntu-Gnome avec lightdm en remplacement du gestionnaire de fenêtres par défaut:

[email protected]:~ $ systemctl list-dependencies graphical.target | grep lightdm
● ├─lightdm.service
19
Rémi B.

Inspection plus détaillée du premier niveau de dépendance de l’arborescence de la cible graphical.target:

admin@server1604:~$ systemctl list-dependencies graphical.target 
graphical.target
● ├─accounts-daemon.service
● ├─Apache2.service
● ├─apport.service
● ├─display-manager.service              (disabled)
● ├─grub-common.service
● ├─irqbalance.service
● ├─mdadm.service
● ├─ondemand.service
● ├─sysstat.service
● ├─systemd-update-utmp-runlevel.service (disabled)
● ├─ureadahead.service                   (disabled)
● └─multi-user.target

une comparaison avec le premier niveau du multi-user.target:

[email protected]:~$ systemctl list-dependencies multi-user.target
multi-user.target
● ├─Apache2.service
● ├─apport.service
● ├─atd.service
● ├─cron.service
● ├─dbus.service
● ├─grub-common.service
● ├─irqbalance.service
● ├─lxcfs.service
● ├─lxd-containers.service
● ├─mdadm.service
● ├─networking.service
● ├─ondemand.service
● ├─open-vm-tools.service

...

Je remarque que si nous supprimons les cibles désactivées dans l'arborescence graphical.target (display-manager.service, systemd-update-utmp-runlevel.service, ureadahead.service), la quasi-totalité des cibles restantes:

  • Apache2.service
  • apport.service
  • grub-common.service
  • grub-common.service
  • irqbalance.service
  • mdadm.service
  • ondemand.service
  • et sysstat.service

sont déjà inclus dans le premier niveau de l'arbre de dépendance du multi-user.target.

Bien que nous devions demander à nouveau à ce sujet, étant donné que le graphical.target dépend du multi-user.target, il n’est pas nécessaire de disposer de tous ces éléments. Cela semble assez bizarre.

Mais après cette réduction, il reste un service, le accounts-daemon.service, comme Rinzwind a souligné dans son commentaire .

Nous pouvons donc supposer que le graphical.target est nécessaire pour charger le accounts-daemon.service.

Cependant, dans ce cas, c’est encore une fois bizarre, car je pense qu’il serait plus logique de créer une cible dédiée à cet effet, par exemple accounts.target ou tout autre terme correct. Quoi qu'il en soit, les développeurs de Canonical avaient probablement des raisons de penser de la sorte.

Mais je reste curieux de connaître ses raisons.

1
Rémi B.

Malgré le nom de la cible, il n’existe aucun élément graphique sur Ubuntu Server 16.04. Vous pouvez cette commande pour vérifier et comparer avec votre bureau si vous aimez:

systemctl list-dependencies graphical.target 

Sur mon serveur Ubuntu 16.04, je constate que les cibles dépendent de "display-manager.service", mais aucun gestionnaire d'affichage n'est installé ou en cours d'exécution.

Je m'attends à ce que les serveurs Ubuntu soient configurés de cette manière pour une sorte de cohérence, bien que je sois d'accord, c'est déroutant.

9
Mark Stosberg

De la manuel redhat :

Par exemple, l'unité graphical.target, utilisée pour démarrer une session graphique, démarre des services système tels que le gestionnaire d'affichage GNOME (gdm.service) ou le service de comptes (accounts-daemon.service) et active également le mode multi-utilisateur. unité cible. De la même manière, l'unité multi-utilisateurs.target démarre d'autres services système essentiels tels que NetworkManager (NetworkManager.service) ou D-Bus (dbus.service) et active une autre unité cible appelée basic.target.

Il n’est donc pas faux de le définir car il n’active pas le gestionnaire d’affichage lorsque le service qui gère le service d’affichage n’est pas défini.

Pour un serveur, vous pouvez le définir sur multi-user.target mais ce n'est pas nécessaire. On dirait que vous vous retrouvez au niveau 4 si vous le faites et au niveau 5 quand vous ne le faites pas.

Runlevel    Target Units    Description
0   runlevel0.target, poweroff.target   Shut down and power off the system.
1   runlevel1.target, rescue.target     Set up a rescue Shell.
2   runlevel2.target, multi-user.target     Set up a non-graphical multi-user system.
3   runlevel3.target, multi-user.target     Set up a non-graphical multi-user system.
4   runlevel4.target, multi-user.target     Set up a non-graphical multi-user system.
5   runlevel5.target, graphical.target  Set up a graphical multi-user system.
6   runlevel6.target, reboot.target     Shut down and reboot the system. 
8
Rinzwind