Comment définir le nom d'hôte d'une instance dans GCE de manière permanente? Je peux le configurer via le nom d'hôte, mais après le redémarrage, il est à nouveau parti.
J'ai essayé de nourrir dans les métadonnées (nom d'hôte: f.q.d.n), mais cela n'a pas fait le travail. Mais cela devrait fonctionner via les métadonnées ( https://github.com/GoogleCloudPlatform/compute-image-packages/tree/master/google-startup-scripts ).
Quelqu'un a une idée?
Le moyen le plus simple d'y parvenir est de créer un script simple et c'est ce que j'ai fait.
J'ai stocké le nom d'hôte dans les métadonnées de l'instance, puis je le récupère à chaque redémarrage du système afin de définir le nom d'hôte à l'aide d'un travail cron.
$ gcloud compute instances add-metadata <instance> --metadata hostname=<new_hostname>
$ Sudo crontab -e
Et c’est la ligne qui doit être ajoutée dans crontab
@reboot hostname $(curl --silent "http://metadata.google.internal/computeMetadata/v1/instance/attributes/hostname" -H "Metadata-Flavor: Google")
Après ces étapes, chaque fois que vous redémarrez votre instance, le nom d’hôte <new_hostname>
. Sera affiché à l’invite ou à l’aide de la commande suivante: hostname
name__
Modifier rc.local
Sudo nano /etc/rc.local
Ajoutez votre ligne sous le reste:
hostname *your.hostname.com*
Assurez-vous d'exécuter ce qui suit après pour que le script soit exécuté
chmod +x /etc/rc.d/rc.local
Redémarrez et gagnez.
Ce n'est pas possible S'il vous plaît jeter un oeil à cette réponse. Le article suivant explique que le "nom d'hôte" fait partie des entrées de métadonnées par défaut et qu'il n'est pas possible de modifier manuellement les paires de métadonnées par défaut. En tant que tel, vous devrez utiliser un script ou quelque chose d'autre pour changer le nom d'hôte à chaque redémarrage du système. Sinon, il sera automatiquement resynchronisé avec le serveur de métadonnées à chaque redémarrage.
Vous trouverez des informations sur les scripts de démarrage de GCE dans cet article . Vous pouvez visiter celui-ci pour plus d’informations sur la façon d’appliquer le script à une instance.
Besoin de supprimer le fichier /etc/dhcp/dhclient.d/google_hostname.sh
Vous pouvez également créer un script de démarrage simple pour effectuer les tâches suivantes:
$ gcloud compute instances add-metadata <instance-name> --zone <instance-zone> --metadata startup-script='#! /bin/bash
hostname <hostname>'
Notez que si vous avez déjà un script de démarrage, vous devez ajouter la commande ci-dessous au script de démarrage existant, sinon vous devrez remplacer tout le script de démarrage:
$ hostname instance-name
Si quelqu'un trouve que cette solution ne fonctionne pas pour eux sur l'instance GCS. Ensuite, je vous suggère d'utiliser les points d'ancrage décrits par le support technique de Google.
En fait, certaines distributions Linux telles que CentOS et Debian utilisent le script Dhclient-script pour configurer les paramètres réseau de la machine . Ce script est appelé de temps en temps par dhclient qui est Client de protocole de configuration d'hôte dynamique et fournit un moyen de configurer Une ou plusieurs interfaces réseau à l'aide du protocole DHCP, Protocole BOOTP. , ou si ces protocoles échouent, en attribuant statiquement une adresse .
Le texte suivant est une citation de la page de manuel (manuel) de Dhclient-script:
Une fois tous les traitements terminés,/usr/sbin/dhclient-script Recherche la présence d’un fichier exécutable /Etc/dhcp/dhclient-exit-hooks, qui, le cas échéant, est appelé à l’aide de la commande ´.´ commande. Le statut de sortie de Dhclient-script sera transmis à dhclient-exit-hooks dans la variable shell exit_status et sera toujours égal à zéro Si le script a réussi à la tâche pour laquelle il a été appelé. Le reste de l’environnement tel que décrit précédemment Pour dhclient-enter-hooks est également présent. Le script/etc/dhcp/dhclient-exit-hooks peut modifier la validité de Exit_status pour modifier le statut de sortie de dhclient-script.
Cela dit, en jetant un coup d'œil à l'extrait de code de Dhclient-script, nous pouvons voir que le script vérifie l'existence d'un script Exécutable/etc/dhcp/dhclient-up-hooks et tous les scripts du répertoire /etc/dhcp/dhclient-exit-hooks.d/.
ETCDIR="/etc/dhcp" 193 exit_with_hooks() { 194 exit_status="${1}" 195 196 if [ -x ${ETCDIR}/dhclient-exit-hooks ]; then 197 . ${ETCDIR}/dhclient-exit-hooks 198 fi 199 200 if [ -d ${ETCDIR}/dhclient-exit-hooks.d ]; then 201 for f in ${ETCDIR}/dhclient-exit-hooks.d/*.sh ; do 202 if [ -x ${f} ]; then 203 . ${f}204 fi 205 done 206 fi 207 208 exit ${exit_status}209 }
Par conséquent, afin de modifier le nom d'hôte de votre machine VM Linux, vous pouvez Créer un script personnalisé avec l'extension .sh et le placer dans /Etc/dhcp/dhclient-exit -hooks.d/répertoire. Si ce répertoire n'existe pas , Vous pouvez le créer. Le contenu du script personnalisé sera:
hostname YourFQDN.sh
>
assurez-vous de rendre ce nouveau fichier .sh exécutable:
chmod +x YourFQDN.sh
Source: ( https://groups.google.com/d/msg/gce-discussion/olG_nXZ-Jaw/Y9HMl4mlBwAJ )
J'ai eu la chance de définir le nom d'hôte sur GCE sous CentOS. Source: desantolo.com
hostname
+ your.hostname.tld
(remplacez "your.hostname.tld" par votre nom d'hôte actuel)curl --silent "http://metadata.google.internal/computeMetadata/v1/instance/attributes/hostname" -H "Metadata-Flavor: Google"
Sudo env EDITOR=nano crontab -e
pour éditer la crontab@reboot hostname $(curl --silent "http://metadata.google.internal/computeMetadata/v1/instance/attributes/hostname" -H "Metadata-Flavor: Google")
Ctrl
+ X
Y
Enter
reboot
hostname
et voyez si vos modifications sont appliquéesBonne chance!
Testé sur Debian.
La dhclient
définit le nom d'hôte à l'aide de DHCP
Vous pouvez remplacer cela en créant un script de raccordement personnalisé dans /etc/dhcp/dhclient-exit-hooks.d/custom_set_hostname
qui lirait le nom d'hôte à partir de /etc/hostname
:
if [ -f "/etc/hostname" ]; then
new_Host_name=$(cat /etc/hostname)
fi
Le script doit avoir l'autorisation d'exécuter.
Il est important de définir la variable new_Host_name
et de ne pas appeler la commande hostname
directement car tout appel à la commande hostname
sera remplacé par un autre hook ou par le dhclient-script
qui utilise cette variable.
Solution non-cron/metadata/script.
Modifiez /etc/dhclient-(network-interface).conf ou créez-en un s'il n'existe pas.
Exemple:
Sudo nano /etc/dhclient-eth0.conf
Ajoutez ensuite la ligne suivante en remplaçant le nom de domaine complet souhaité entre les guillemets:
supersede Host-name "hostname.domain-name";
Persiste entre les redémarrages et nomhôte et nomhôte -f fonctionne comme prévu.
Lors de la création d'une machine virtuelle, vous pouvez spécifier un nom d'hôte FQDN personnalisé en tant que paramètre facultatif. Cette fonctionnalité est actuellement en version bêta.
$ gcloud beta compute instances create INSTANCE_NAME --hostname example.hostname
Cela devrait fonctionner sur tous les systèmes d’exploitation et éviter ainsi le recours à des scripts de solution de contournement. Plus d’informations dans docs .
- Sirui (chef de produit, Google Compute Engine)
Dans mes machines virtuelles CentOS, j'ai constaté que le script /etc/dhcp/dhclient.d/google_hostname.sh
, installé par le RPM google-compute-engine
, changeait en fait le nom d'hôte. Cela se produit lorsque l'instance obtient son adresse IP lors du démarrage.
Bien que ce ne soit pas la solution à long terme que je souhaite vraiment, pour l'instant j'ai simplement supprimé ce script. Le nom d'hôte que j'ai défini avec hostnamectl
persiste maintenant après un redémarrage.
Le script est susceptible de se trouver exactement au même endroit dans les machines virtuelles Debian/Ubuntu, mais bien sûr, je ne les exécute pas.
Vous pouvez faire quelque chose pour y parvenir, comme je l’ai fait. Il suffit de faire:
Sudo chattr +i /etc/hosts
Cette commande crée en fait le fichier "(i) mmutable", ce qui signifie que même root ne peut pas le changer (à moins que root ne chattr -i/etc/hosts d'abord, bien sûr).
Comme ci-dessus, vous pouvez annuler cela avec Sudo chattr -i/etc/hosts
Acclamation!
Je ne suis pas sûr de comprendre la réponse d'Adrián. Cela semble excessivement complexe puisque vous devez exécuter un script à chaque démarrage, pourquoi ne pas utiliser simplement le nom d'hôte?
vi /etc/rc.local
ajouter:
nomhôte votre_nomhôte
c'est tout. testé et fonctionnel. pas besoin de jouer avec les métadonnées et autres.