CentOS : Identité des machines, hostnamectl, l’agent facilitateur
I. Présentation
Sur des distributions RedHat antérieures à la version 7 (ainsi que sur des distributions CentOS 6.x), lorsque l’on souhaitait modifier le nom du serveur local, on devait éditer le fichier /etc/sysconfig/network et modifier le champ HOSTNAME :
# vi /etc/sysconfig/network … HOSTNAME=xxxxxxxx
La modification était alors prise en compte lors du redémarrage de la machine. Si l’on souhaitait une modification immédiate, il fallait alors exécuter la commande suivante :
# hostname xxxxxxxx
La vérification s’effectuait alors en utilisant la commande hostname sans argument, et, éventuellement en se déconnectant afin de fermer sa session et en ouvrir une nouvelle :
# hostname xxxxxxxx
II. La commande hostnamectl
Depuis la version CentOS7 et l’apparition de SystemD, il existe une commande hostnamectl fort pratique, pour ce genre de modification. Mais, on dispose alors de trois niveaux de nom de machine :
- Le niveau supérieur, appelé "pretty" hostname, pouvant intégrer tout type de caractères. Il s’agit plus d’une forme descriptive du nom de machine.
- Le niveau intermédiaire, appelé nom de machine statique, permettant d’initialiser le nom de machine pour le noyau, au démarrage.
- Le niveau inférieur, appelé nom de machine "transient" reçu de la configuration réseau.
REMARQUE : dans le cas où la forme statique du nom de machine est déclarée, la forme "transient" n’est alors plus utilisée. C’est généralement ce que l’on fait en déclarant le nom de la machine dès la phase d’installation.
Le nom de machine statique est déclaré dans le fichier /etc/hostname et le nom de machine "pretty" est initialisé dans le fichier /etc/machine-info. Si l’on souhaite interroger son serveur et distinguer les trois catégories de noms, il faut le faire à l’aide de la commande suivante, en précisant l’une des trois directives optionnelles ci-dessous :
# hostnamectl status {--transient|--static|--pretty}
Pour pouvoir modifier le nom d’un serveur, il suffit alors uniquement de remplacer l’option status de l’interrogation précédente, par set-hostname dans la commande. Par défaut, sans spécification particulière, la modification du nom de machine impacte l’ensemble des trois niveaux de nommage.
Si l’on souhaite modifier spécifiquement le nom "pretty", il faut alors le mentionner lors du passage de la commande :
# hostnamectl set-hostname –pretty "Serveur Applicatif"
Cela n’affecte alors que le nom de niveau supérieur, sans impacter le nom statique. Pour s’en assurer, on peut exécuter les commandes suivantes :
# hostnamectl status --pretty Serveur Applicatif # hostnamectl status --static xxxxxxx
ATTENTION : si le nom de machine "pretty" est positionné et que les noms statique et "transient" sont également utilisés, le nom de machine défini sera alors simplifié au regard des règles de nommage. Cela implique que les espaces seront remplacés par des "-" et que les caractères spéciaux seront supprimés. Ainsi, les noms "static" et "pretty" seront toujours en corrélation en respectant les règles de nommage.
Toutefois, cette simplification n’est pas effectuée si les noms "transient" et/ou "static" sont initialisés et que le nom "pretty" n’est pas modifié. Pour réinitialiser le nom de machine à son origine "localhost", par défaut, il suffit d’exécuter la commande suivante :
# hostnamectl ""
III. Conclusion
Il est vrai que cette nouvelle commande hostnamectl (ainsi que d’autres associées à l’environnement SystemD), est vraiment très pratique, car elle permet de mettre à jour rapidement (et sans erreur possible), le nom de machine d’un serveur. De plus, la commande hostnamectl peut interagir avec les conteneurs locaux (option --machine=), ou être pilotée à distance (option --host=). Afin d’identifier de façon nette et précise les machines, on peut même préciser la localisation de ses serveurs, grâce à l’option set-location.