web-dev-qa-db-fra.com

Google Compute Engine: comment définir le nom d'hôte de manière permanente?

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?

13
Michael Schmidt

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: hostnamename__

13
Adrián

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. 

10
Oorweeg

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.

5
Boyan

Besoin de supprimer le fichier /etc/dhcp/dhclient.d/google_hostname.sh

3
Sergey Safarov

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
3
Noa

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 )

2
HipHopServers

J'ai eu la chance de définir le nom d'hôte sur GCE sous CentOS. Source: desantolo.com

  1. Cliquez sur EDIT sur votre instance
  2. Aller à la section "Métadonnées personnalisées"
  3. Ajoutez hostname + your.hostname.tld (remplacez "your.hostname.tld" par votre nom d'hôte actuel)
  4. exécuter curl --silent "http://metadata.google.internal/computeMetadata/v1/instance/attributes/hostname" -H "Metadata-Flavor: Google"
  5. lancez Sudo env EDITOR=nano crontab -e pour éditer la crontab
  6. ajouter la ligne @reboot hostname $(curl --silent "http://metadata.google.internal/computeMetadata/v1/instance/attributes/hostname" -H "Metadata-Flavor: Google")
  7. Sur votre clavier Ctrl + X
  8. Sur votre clavier, tapez Y
  9. Sur votre clavier, tapez Enter
  10. exécuter reboot
  11. après le redémarrage du système, exécutez hostname et voyez si vos modifications sont appliquées

Bonne chance!

1
vjd

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.

1
Adam

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.

0
David Garrana

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)

0
Sirui Sun

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.

0
Michael Hampton

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!

0
Neeraj Kumar

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.

0
tgwaste