web-dev-qa-db-ja.com

Google Compute Engine:ホスト名を永続的に設定する方法は?

GCEでインスタンスのホスト名を永続的に設定するにはどうすればよいですか?ホスト名で設定できますが、再起動すると再び表示されなくなります。

メタデータ(ホスト名:f.q.d.n)をフィードしようとしましたが、それはうまくいきませんでした。しかし、メタデータを介して動作するはずです( https://github.com/GoogleCloudPlatform/compute-image-packages/tree/master/google-startup-scripts )。

誰かアイデアはありますか?

14
Michael Schmidt

それを実現する最も簡単な方法は、単純なスクリプトを作成することです。それが私が行ったことです。

ホスト名をインスタンスメタデータに保存し、システムが再起動するたびにそれを取得して、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

16
Adrián

Rc.localを編集する

Sudo nano /etc/rc.local 

残りの下に行を追加します。

hostname *your.hostname.com*

スクリプトが実行されるようにするには、必ず以下を実行してください

chmod +x /etc/rc.d/rc.local

再起動、そして利益。

12
Oorweeg

ファイル/etc/dhcp/dhclient.d/google_hostname.shを削除する必要があります

8
Sergey Safarov

それは不可能です。 この回答をご覧ください。 次の 記事 は、「ホスト名」がデフォルトのメタデータエントリの一部であり、手動でデフォルトを編集することはできないことを説明していますメタデータのペア。そのため、システムを再起動するたびにスクリプトなどを使用してホスト名を変更する必要があります。そうしないと、再起動するたびにメタデータサーバーと自動的に再同期されます。

GCEの起動スクリプトに関する情報は この記事 にあります。スクリプトをインスタンスに適用する方法については、 これにアクセス してください。

5
Boyan

簡単な起動スクリプトを作成して、ジョブを実行することもできます。

$ gcloud compute instances add-metadata <instance-name> --zone <instance-zone> --metadata startup-script='#! /bin/bash 
hostname <hostname>'

起動スクリプトが既にある場合は、以下の既存の起動スクリプトにコマンドを追加する必要があります。そうしないと、すべての起動スクリプトが置き換えられます。

$ hostname instance-name
3
Noa

CentOSを実行しているGCEでホスト名を設定できて幸運でした。出典: desantolo.com

  1. インスタンスで[編集]をクリックします
  2. 「カスタムメタデータ」セクションに移動
  3. hostname + _your.hostname.tld_を追加します(「your.hostname.tld」を実際のホスト名に変更します
  4. _curl --silent "http://metadata.google.internal/computeMetadata/v1/instance/attributes/hostname" -H "Metadata-Flavor: Google"_を実行します
  5. crontabを編集するには_Sudo env EDITOR=nano crontab -e_を実行します
  6. 行を追加@reboot hostname $(curl --silent "http://metadata.google.internal/computeMetadata/v1/instance/attributes/hostname" -H "Metadata-Flavor: Google")
  7. キーボード上Ctrl + X
  8. キーボードでYを押します
  9. キーボードでEnterを押します
  10. rebootを実行します
  11. システムの再起動後、hostnameを実行して変更が適用されたかどうかを確認します

幸運を!

2
vjd

誰かがこのソリューションを見つけた場合、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

2
HipHopServers

非cron /メタデータ/スクリプトソリューション。

/etc/dhclientnetwork-interface).confを編集するか、存在しない場合は作成します。

例:

Sudo nano /etc/dhclient-eth0.conf

次に、次の行を追加して、二重引用符の間の目的のFQDNを置き換えます。

supersede Host-name "hostname.domain-name";

再起動と---(hostnameおよびhostname -fの間、意図したとおりに機能します。

1
David Garrana

VMを作成するときに、オプションのパラメーターとしてカスタムFQDNホスト名を指定できます。この機能は現在ベータ版です。

$ gcloud beta compute instances create INSTANCE_NAME --hostname example.hostname

これはOS全体で機能し、回避策のスクリプトが不要になります。詳細は docs をご覧ください。

-Sirui(製品マネージャー、Google Compute Engine)

1
Sirui Sun

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コマンドを直接呼び出さないことが重要です。この変数

1
Adam

私はアドリアンの答えを理解できません。起動するたびにスクリプトを実行する必要があるため、非常に複雑に見えますが、なぜホスト名を使用しないのですか?

vi /etc/rc.local

追加:

ホスト名your_hostname

それでおしまい。テストされ、動作しています。メタデータなどをいじる必要はありません。

1
tgwaste

CentOS VMで、/etc/dhcp/dhclient.d/google_hostname.sh RPMによってインストールされたスクリプトgoogle-compute-engineが実際にホスト名を変更していることがわかりました。これは、インスタンスが起動中にIPアドレスを取得したときに発生します。

これは私が本当に望んでいる長期的な解決策ではありませんが、今のところ、このスクリプトを削除しただけです。 hostnamectlで設定したホスト名は、再起動後も保持されます。

スクリプトは、Debian/Ubuntu VMのまったく同じ場所にある可能性がありますが、もちろん私はそれらを実行しません。

0
Michael Hampton

私がしたようにこれを達成するためにあなたができるいくつかのハックがあります。ただやる:

Sudo chattr +i /etc/hosts

このコマンドは実際にはファイルを「(i)mmutable」にします。つまり、rootでも変更できません(もちろん、rootが最初にchattr -i/etc/hostsを実行しない限り)。

上記のように、Sudo chattr -i/etc/hostsでこれを元に戻すことができます

応援!

0
Neeraj Kumar