GCEでインスタンスのホスト名を永続的に設定するにはどうすればよいですか?ホスト名で設定できますが、再起動すると再び表示されなくなります。
メタデータ(ホスト名:f.q.d.n)をフィードしようとしましたが、それはうまくいきませんでした。しかし、メタデータを介して動作するはずです( https://github.com/GoogleCloudPlatform/compute-image-packages/tree/master/google-startup-scripts )。
誰かアイデアはありますか?
それを実現する最も簡単な方法は、単純なスクリプトを作成することです。それが私が行ったことです。
ホスト名をインスタンスメタデータに保存し、システムが再起動するたびにそれを取得して、cronジョブを使用してホスト名を設定しました。
$ gcloud compute instances add-metadata <instance> --metadata hostname=<new_hostname>
$ Sudo crontab -e
そして、これはcrontabに追加する必要がある行です
@reboot hostname $(curl --silent "http://metadata.google.internal/computeMetadata/v1/instance/attributes/hostname" -H "Metadata-Flavor: Google")
これらの手順の後、インスタンスを再起動するたびに、ホスト名<new_hostname>
。プロンプトまたは次のコマンドで確認できます:hostname
Rc.localを編集する
Sudo nano /etc/rc.local
残りの下に行を追加します。
hostname *your.hostname.com*
スクリプトが実行されるようにするには、必ず以下を実行してください
chmod +x /etc/rc.d/rc.local
再起動、そして利益。
ファイル/etc/dhcp/dhclient.d/google_hostname.shを削除する必要があります
それは不可能です。 この回答をご覧ください。 次の 記事 は、「ホスト名」がデフォルトのメタデータエントリの一部であり、手動でデフォルトを編集することはできないことを説明していますメタデータのペア。そのため、システムを再起動するたびにスクリプトなどを使用してホスト名を変更する必要があります。そうしないと、再起動するたびにメタデータサーバーと自動的に再同期されます。
GCEの起動スクリプトに関する情報は この記事 にあります。スクリプトをインスタンスに適用する方法については、 これにアクセス してください。
簡単な起動スクリプトを作成して、ジョブを実行することもできます。
$ gcloud compute instances add-metadata <instance-name> --zone <instance-zone> --metadata startup-script='#! /bin/bash
hostname <hostname>'
起動スクリプトが既にある場合は、以下の既存の起動スクリプトにコマンドを追加する必要があります。そうしないと、すべての起動スクリプトが置き換えられます。
$ hostname instance-name
CentOSを実行しているGCEでホスト名を設定できて幸運でした。出典: desantolo.com
hostname
+ _your.hostname.tld
_を追加します(「your.hostname.tld」を実際のホスト名に変更しますcurl --silent "http://metadata.google.internal/computeMetadata/v1/instance/attributes/hostname" -H "Metadata-Flavor: Google"
_を実行しますSudo env EDITOR=nano crontab -e
_を実行します@reboot hostname $(curl --silent "http://metadata.google.internal/computeMetadata/v1/instance/attributes/hostname" -H "Metadata-Flavor: Google")
Ctrl
+ X
Y
を押しますEnter
を押しますreboot
を実行しますhostname
を実行して変更が適用されたかどうかを確認します幸運を!
誰かがこのソリューションを見つけた場合、GCSインスタンスでは機能しません。次に、Googleサポートの説明に従って、exitフックを使用することをお勧めします。
実際、CentOSやDebianなどの一部のLinuxディストリビューションでは、dhclient-scriptスクリプトを使用してマシンのネットワークパラメータを構成しています。このスクリプトは、動的なホスト構成プロトコルクライアントであるdhclientによって時々呼び出され、DHCPプロトコル、BOOTPプロトコルを使用して1つ以上のネットワークインターフェイスを構成する手段を提供します。または、これらのプロトコルが失敗した場合は、静的にアドレスを割り当てます。
次のテキストは、dhclient-scriptのman(マニュアル)ページからの引用です。
すべての処理が完了すると、/ usr/sbin/dhclient-scriptは、実行可能な/ etc/dhcp/dhclient-exit-hooksスクリプトが存在するかどうかを確認します。存在する場合は、「。」コマンドを使用して実行されます。 dhclient-scriptの終了ステータスは、exit_statusシェル変数でdhclient-exit-hooksに渡され、スクリプトが呼び出されたタスクでスクリプトが成功した場合は常にゼロになります。 dhclient-enter-hooksについて前に説明した残りの環境も存在します。/etc/dhcp/dhclient-exit-hooksスクリプトは、exit_statusの有効性を変更して、dhclient-scriptの終了ステータスを変更できます。
そうは言っても、dhclient-scriptのコードスニペットを調べると、スクリプトが実行可能な/ etc/dhcp/dhclient-up-hooksスクリプトと/ 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 }
したがって、Linuxのホスト名を変更するには、VMで、.sh拡張子を持つカスタムスクリプトを作成し、/ etc/dhcp/dhclient-exit-hooks.d /ディレクトリに配置できます。このディレクトリが存在しない場合は作成できます。カスタムスクリプトの内容は次のようになります。
hostname YourFQDN.sh
>
この新しい.shファイルを実行可能にしてください。
chmod +x YourFQDN.sh
出典:( https://groups.google.com/d/msg/gce-discussion/olG_nXZ-Jaw/Y9HMl4mlBwAJ )
非cron /メタデータ/スクリプトソリューション。
/etc/dhclientnetwork-interface).confを編集するか、存在しない場合は作成します。
例:
Sudo nano /etc/dhclient-eth0.conf
次に、次の行を追加して、二重引用符の間の目的のFQDNを置き換えます。
supersede Host-name "hostname.domain-name";
再起動と---(hostnameおよびhostname -fの間、意図したとおりに機能します。
VMを作成するときに、オプションのパラメーターとしてカスタムFQDNホスト名を指定できます。この機能は現在ベータ版です。
$ gcloud beta compute instances create INSTANCE_NAME --hostname example.hostname
これはOS全体で機能し、回避策のスクリプトが不要になります。詳細は docs をご覧ください。
-Sirui(製品マネージャー、Google Compute Engine)
Debianでテスト済み。
dhclient
はDHCPを使用してホスト名を設定します
/etc/dhcp/dhclient-exit-hooks.d/custom_set_hostname
からホスト名を読み取る/etc/hostname
でカスタムフックスクリプトを作成することで、これをオーバーライドできます。
if [ -f "/etc/hostname" ]; then
new_Host_name=$(cat /etc/hostname)
fi
スクリプトには実行権限が必要です。
hostname
コマンドへの呼び出しは別のフックまたはnew_Host_name
によってオーバーライドされるため、dhclient-script
変数を設定し、hostname
コマンドを直接呼び出さないことが重要です。この変数
私はアドリアンの答えを理解できません。起動するたびにスクリプトを実行する必要があるため、非常に複雑に見えますが、なぜホスト名を使用しないのですか?
vi /etc/rc.local
追加:
ホスト名your_hostname
それでおしまい。テストされ、動作しています。メタデータなどをいじる必要はありません。
CentOS VMで、/etc/dhcp/dhclient.d/google_hostname.sh
RPMによってインストールされたスクリプトgoogle-compute-engine
が実際にホスト名を変更していることがわかりました。これは、インスタンスが起動中にIPアドレスを取得したときに発生します。
これは私が本当に望んでいる長期的な解決策ではありませんが、今のところ、このスクリプトを削除しただけです。 hostnamectl
で設定したホスト名は、再起動後も保持されます。
スクリプトは、Debian/Ubuntu VMのまったく同じ場所にある可能性がありますが、もちろん私はそれらを実行しません。
私がしたようにこれを達成するためにあなたができるいくつかのハックがあります。ただやる:
Sudo chattr +i /etc/hosts
このコマンドは実際にはファイルを「(i)mmutable」にします。つまり、rootでも変更できません(もちろん、rootが最初にchattr -i/etc/hostsを実行しない限り)。
上記のように、Sudo chattr -i/etc/hostsでこれを元に戻すことができます
応援!