ホスト名を正しく設定する-Amazon EC2のFedora 20


11

環境

Amazon EC2で実行されているFedora 20クラウドイメージがあります(以降、「インスタンス」と呼ばれます)。また、ホスト名を永続的に設定することについて不確実性があります。

ゴール

この場合、インスタンスのホスト名をpenpen.homelinux.orgに設定したいとしましょう。(この名前はを使用してDynDNSでも登録されますddclientが、それはここでは興味のない別の側面です。)

もちろん、ホスト名はブート完了後に手動で設定できます(hostnamectl特に使用中)。ただし、最初のログインの前に正しいホスト名を設定する必要があります。

従来、ホスト名を永続的に設定するには、の内容を変更します/etc/hostname。残念ながら、これはここでは機能しません。

デフォルトのシステム動作

デフォルトでは、インスタンスはホスト名を内部EC2名に設定します。起動後、ホスト名を生成する小さな場所をすべて確認できます。

Kernel hostname via 'sysctl'                      : ip-10-164-65-105.ec2.internal
Kernel domainname via 'sysctl'                    : (none)
File '/etc/hostname'                              : contains 'ip-10-164-65-105.ec2.internal'
File '/etc/sysconfig/network'                     : exists but has no 'HOSTNAME' line
According to the shell                            : HOSTNAME = ip-10-164-65-105.ec2.internal
Nodename given by 'uname --nodename'              : ip-10-164-65-105.ec2.internal
Hostname ('hostname')                             : ip-10-164-65-105.ec2.internal
Short hostname ('hostname --short')               : ip-10-164-65-105
NIS domain name ('domainname')                    : (none)
YP default domain ('hostname --yp')               : [hostname --yp failed]
DNS domain name ('hostname --domain')             : ec2.internal
Fully qualified hostname ('hostname --fqdn')      : ip-10-164-65-105.ec2.internal
Hostname alias ('hostname --alias')               : 
By IP address ('hostname --ip-address')           : 10.164.65.105
All IPs ('hostname --all-ip-addresses')           : 10.164.65.105 
All FQHNs via IPs ('hostname --all-ip-addresses') : ip-10-164-65-105.ec2.internal 
Static hostname via 'hostnamectl'                 : ip-10-164-65-105.ec2.internal
Transient hostname via 'hostnamectl'              : ip-10-164-65-105.ec2.internal
Pretty hostname via 'hostnamectl'                 : 

/ etc / hostnameに書き込みましょう...

目的のホスト名をに書き込んだ場合/etc/hostname、この変更は次回の起動時に再び失われます。によって実行されるブートプロセスを調べてみましょうsystemd

実行例

書き込みrorororoor.homelinux.org/etc/hostname、再起動します。

journaldを使用すると、ログの行が完全に順序付けられていないことに注意してください:

ブートプロセスはホスト名をlocalhostとして開始し、次にルートを切り替えます。この時点でホスト名はrorororoor.homelinux.orgになります

Dec 26 15:12:08 localhost systemd[1]: Starting Cleanup udevd DB...
Dec 26 15:12:08 localhost systemd[1]: Started Cleanup udevd DB.
Dec 26 15:12:08 localhost systemd[1]: Starting Switch Root.
Dec 26 15:12:08 localhost systemd[1]: Reached target Switch Root.
Dec 26 15:12:08 localhost systemd[1]: Starting Switch Root...
Dec 26 15:12:08 localhost systemd[1]: Switching root.
Dec 26 15:12:08 localhost systemd-journal[67]: Journal stopped
Dec 26 15:12:12 rorororoor.homelinux.org systemd-journal[155]: Runtime journal is using 8.0M
Dec 26 15:12:12 rorororoor.homelinux.org systemd-journal[155]: Runtime journal is using 8.0M
Dec 26 15:12:12 rorororoor.homelinux.org systemd-journald[67]: Received SIGTERM
...........
Dec 26 15:12:12 rorororoor.homelinux.org kernel: SELinux: initialized
Dec 26 15:12:12 rorororoor.homelinux.org systemd-journal[155]: Journal started
Dec 26 15:12:08 rorororoor.homelinux.org systemd-cgroups-agent[128]: Failed to get D-Bus connection: Failed to connect to socket /run/systemd/private: No such file or directory
Dec 26 15:12:10 rorororoor.homelinux.org systemd[1]: systemd 208 running in system mode.
Dec 26 15:12:10 rorororoor.homelinux.org systemd[1]: Detected virtualization 'xen'.
Dec 26 15:12:10 rorororoor.homelinux.org systemd[1]: Set hostname to <rorororoor.homelinux.org>.
Dec 26 15:12:10 rorororoor.homelinux.org systemd[1]: Failed to open private bus connection: Failed to connect to socket /var/run/dbus/system_bus_socket: No such file or directory
Dec 26 15:12:11 rorororoor.homelinux.org systemd[1]: Mounted Debug File System.

私たちは、それを参照systemdセットにホスト名rorororoor.homelinux.org、明らかに成功したとして、ログのホスト列の変更を。おそらくhostnamectlこの時点でDBusに接続できないために、いくつかのエラーが発行されます。

ここで誰が名前を設定するのかわかりません。systemdの内部部分?とにかく、ジャーナルを続行すると、ホスト名がEC2内部名にすぐに戻されることがわかります。

Dec 26 15:12:33 rorororoor.homelinux.org cloud-init[485]: [CLOUDINIT] util.py[DEBUG]: Running command ('resize2fs', '/dev/xvda1') with allowed return codes [0] (shell=False, capture=True)
Dec 26 15:12:33 rorororoor.homelinux.org cloud-init[485]: [CLOUDINIT] cc_resizefs.py[DEBUG]: Resizing took 0.067 seconds
Dec 26 15:12:33 rorororoor.homelinux.org cloud-init[485]: [CLOUDINIT] cc_resizefs.py[DEBUG]: Resized root filesystem (type=ext4, val=True)
Dec 26 15:12:33 rorororoor.homelinux.org cloud-init[485]: [CLOUDINIT] helpers.py[DEBUG]: config-set_hostname already ran (freq=once-per-instance)
Dec 26 15:12:33 rorororoor.homelinux.org cloud-init[485]: [CLOUDINIT] helpers.py[DEBUG]: Running config-update_hostname using lock (<cloudinit.helpers.DummyLock object at 0x2559210>)
Dec 26 15:12:33 rorororoor.homelinux.org cloud-init[485]: [CLOUDINIT] cc_update_hostname.py[DEBUG]: Updating hostname to ip-10-164-65-105.ec2.internal (ip-10-164-65-105)
Dec 26 15:12:33 rorororoor.homelinux.org cloud-init[485]: [CLOUDINIT] util.py[DEBUG]: Running command ['hostname'] with allowed return codes [0] (shell=False, capture=True)
Dec 26 15:12:33 rorororoor.homelinux.org cloud-init[485]: [CLOUDINIT] __init__.py[DEBUG]: Attempting to update hostname to ip-10-164-65-105.ec2.internal in 1 files
Dec 26 15:12:33 rorororoor.homelinux.org cloud-init[485]: [CLOUDINIT] util.py[DEBUG]: Running command ['hostnamectl', 'set-hostname', 'ip-10-164-65-105.ec2.internal'] with allowed return codes [0] (shell=False, capture=True)
Dec 26 15:12:33 rorororoor.homelinux.org dbus-daemon[226]: dbus[226]: [system] Activating via systemd: service name='org.freedesktop.hostname1' unit='dbus-org.freedesktop.hostname1.service'
Dec 26 15:12:33 rorororoor.homelinux.org dbus[226]: [system] Activating via systemd: service name='org.freedesktop.hostname1' unit='dbus-org.freedesktop.hostname1.service'
Dec 26 15:12:34 rorororoor.homelinux.org systemd[1]: Starting Hostname Service...
Dec 26 15:12:34 rorororoor.homelinux.org dbus-daemon[226]: dbus[226]: [system] Successfully activated service 'org.freedesktop.hostname1'
Dec 26 15:12:34 rorororoor.homelinux.org dbus[226]: [system] Successfully activated service 'org.freedesktop.hostname1'
Dec 26 15:12:34 rorororoor.homelinux.org systemd[1]: Started Hostname Service.
Dec 26 15:12:34 rorororoor.homelinux.org systemd-hostnamed[598]: Changed static host name to 'ip-10-164-65-105.ec2.internal'
Dec 26 15:12:34 ip-10-164-65-105.ec2.internal systemd-hostnamed[598]: Changed host name to 'ip-10-164-65-105.ec2.internal'
Dec 26 15:12:34 ip-10-164-65-105.ec2.internal systemd[1]: Started Initial cloud-init job (metadata service crawler).
Dec 26 15:12:34 ip-10-164-65-105.ec2.internal systemd[1]: Starting Cloud-config availability.
Dec 26 15:12:34 ip-10-164-65-105.ec2.internal systemd[1]: Reached target Cloud-config availability.
Dec 26 15:12:34 ip-10-164-65-105.ec2.internal systemd[1]: Starting Apply the settings specified in cloud-config...
Dec 26 15:12:34 ip-10-164-65-105.ec2.internal [485]: [CLOUDINIT] helpers.py[DEBUG]: Running config-update_etc_hosts using lock (<cloudinit.helpers.DummyLock object at 0x2559350>)
Dec 26 15:12:34 ip-10-164-65-105.ec2.internal [485]: [CLOUDINIT] cc_update_etc_hosts.py[DEBUG]: Configuration option 'manage_etc_hosts' is not set, not managing /etc/hosts in module update_etc_hosts
Dec 26 15:12:34 ip-10-164-65-105.ec2.internal [485]: [CLOUDINIT] helpers.py[DEBUG]: config-rsyslog already ran (freq=once-per-instance)
Dec 26 15:12:34 ip-10-164-65-105.ec2.internal [485]: [CLOUDINIT] helpers.py[DEBUG]: config-users-groups already ran (freq=once-per-instance)

ここでのホスト名の設定は、「systemd-hostnamed」ユニットを介して行われます。「systemd-hostnamed」の「ユニットファイル」/usr/lib/systemd/system/systemd-hostnamed.serviceは次のとおりです。

[Unit]
Description=Hostname Service
Documentation=man:systemd-hostnamed.service(8) man:hostname(5) man:machine-info(5)
Documentation=http://www.freedesktop.org/wiki/Software/systemd/hostnamed

[Service]
ExecStart=/usr/lib/systemd/systemd-hostnamed
BusName=org.freedesktop.hostname1
CapabilityBoundingSet=CAP_SYS_ADMIN CAP_DAC_OVERRIDE CAP_SYS_PTRACE

上記で呼び出されるプログラムは、/usr/lib/systemd/systemd-hostnamed実際にはバイナリです(なぜ!)。ただし、ソースコードは見つかります。

ポイントは、ip-10-164-65-105.ec2.internalに戻ったことです。

なに?

回答:


11

次の2つのことを行う必要があります(ただし、そのうちの1つだけを行っています)。

  1. ホスト名をに設定し/etc/hostnameます。
  2. 編集/etc/cloud/cloud.cfgしてに設定preserve_hostnameTrueます。(ユーザーデータと共にこのオプションを渡すこともできます。)

Fedoraはcloud-initインスタンスをプロビジョニングするためにEC2環境からユーザーデータを取り込むために使用cloud-initし、ホスト名を保持する必要があることを通知する必要があるため、2番目の手順が必要です。


大丈夫。すぐに試してみます。
デビッドトンホーファー

1
ちょっと待って、これは何ですか?OK、YAML(en.wikipedia.org/wiki/YAML)。そのため、scalehorizo​​ntally.com / 2013/02/24 / introduction- to -cloud-initによれば、トップレベルに「preserve_hostname:true」を追加します。...はい、動作します。
デビッドトンホーファー

ええ、それは単なる古いYAMLです。
マイケルハンプトン

すべての試行錯誤。まあ、私はかなり多くを学びました。ありがとう。
デビッドトンホーファー

おかげで、これはCentOS 7.3で機能します。2番目の手順を実行しないと、ホスト名は再起動時にcloud-initによって上書きされます。最初のステップでは、を使用sudo hostnamectl set-hostname --static myhost.example.comして書き込み/etc/hostnameも行いました。
リッチベル

2

別のオプションは、ユーザーデータを介してホスト名を設定することです

例えば

#cloud-config
hostname: foo
fqdn: foo.bar.net

これにより、起動時にホスト名が設定されますが、最初のログイン前に常に発生するかどうかはわかりません。


1

答えはhostnamectlのmanページにあり、3つのホスト名、つまり静的ホスト名、一時ホスト名、きれいなホスト名があるようです。

私が望むと思う静的ホスト名を設定するには、

hostnamectl --static set-hostname somehost.tld

あなたはそれらがすべて同じになるように設定することができます

hostnamectl set-hostname somehost.tld

正しいですが、...ユニットファイルが何をするのかを明確にすべきでした。特に、「hostnamectl」を使用して静的および一時ホスト名を設定します。これは機能しますが、私が達成したいことの「大規模な構成」のようです。テキストを修正...
デヴィッドTonhofer

@DavidTonhofer:混乱しています。質問には言葉がありませんが、F20システムでホスト名を設定するにはどうすればよいかがわかります。あなたはすべての言い回しを削除し、ちょうど簡単な質問...尋ねおそらく場合
user9517

うーん...あなたはポイントを持っているかもしれません。まあ、私はホスト名を設定する方法を知っています。しかし、ブート時にAmazon EC2イメージに適切に設定するにはどうすればよいですか?
デビッドトンホーファー

1

追加のユニットファイルを使用して解決する

以下は実際には機能しません:

/usr/lib/systemd/system/penpen-naming.service後に起動するシステムユニットファイルを作成しますsystemd-hostnamed.service(おそらく後にのみdbus.service)。

(私はので、「適切な場所」を見つけるために、いくつかの臨床試験を黙ら実行しなければならなかったsystemdではない、単純な非アクティブ化新ユニット「サイクルが検出されました」のででしょう。あなたとユニットファイルの依存関係グラフをグラフ化できることに注意してくださいsystemd-analyze dot「のドットを作成し、 「graphviz」dotプログラムに渡されるファイルですが、事前にフィルタリングしない限り、結果は大きな混乱を招くグラフになります)

ユニットファイルの内容/usr/lib/systemd/system/penpen-naming.service

[Unit]
Description= *** Hostname becomes 'penpen.homelinux.org' ***
After=default.target 
# After=systemd-hostnamed.service -- NOPE 
# After=dbus.service  -- NOPE

[Service]
Type=oneshot
RemainAfterExit=yes
ExecStart=/usr/local/toolbox/setting_hostnames/penpen

[Install]
WantedBy=multi-user.target

を使用して有効化する systemctl enable penpen-naming

何を/usr/local/toolbox/setting_hostnames/penpenするの?penpen.homelinux.orgをに書き込む場合/etc/hostname。しかし、それだけでは十分ではありませんhostnamectl。また、を使用してホスト名を設定する必要があります。

それでも(After=default.target)、ログインシェルがEC2の内部ホスト名を表示するまで、ユニットを実行する必要があります。また、DBusへの接続にはまだ問題があります。

したがって、これは良い解決策ではありません。または、少なくとも「ユニットファイルの依存関係ツリー内の位置」と「dbusで何が起きているのか」を修正する必要があります。

この後のホスト名は次のとおりです。

Kernel hostname via 'sysctl'                      : penpen.homelinux.org
Kernel domainname via 'sysctl'                    : (none)
File '/etc/hostname'                              : contains 'penpen.homelinux.org'
File '/etc/sysconfig/network'                     : exists but has no 'HOSTNAME' line
According to the shell                            : HOSTNAME = ip-10-164-65-105.ec2.internal
Nodename given by 'uname --nodename'              : penpen.homelinux.org
Hostname ('hostname')                             : penpen.homelinux.org
Short hostname ('hostname --short')               : penpen
NIS domain name ('domainname')                    : (none)
YP default domain ('hostname --yp')               : [hostname --yp failed]
DNS domain name ('hostname --domain')             : homelinux.org
Fully qualified hostname ('hostname --fqdn')      : penpen.homelinux.org
Hostname alias ('hostname --alias')               : 
By IP address ('hostname --ip-address')           : 54.221.0.63
All IPs ('hostname --all-ip-addresses')           : 10.164.65.105 
All FQHNs via IPs ('hostname --all-ip-addresses') : ip-10-164-65-105.ec2.internal 
Static hostname via 'hostnamectl'                 : penpen.homelinux.org
Transient hostname via 'hostnamectl'              : penpen.homelinux.org
Pretty hostname via 'hostnamectl'                 : 

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.