บริบท
ฉันมีภาพเมฆของ Fedora 20 ที่ทำงานบน Amazon EC2 (ต่อจากนี้ไปจะเรียกว่า "อินสแตนซ์") และฉันมีความไม่แน่นอนเกี่ยวกับการตั้งชื่อโฮสต์อย่างต่อเนื่อง
เป้าหมาย
ในกรณีนี้สมมติว่าผมต้องการที่จะตั้งชื่อโฮสต์อินสแตนซ์ที่จะ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
เป็นจริงไบนารี (WHY!) อย่างไรก็ตามสามารถพบซอร์สโค้ดได้
ประเด็นก็คือเรากลับมาที่ip-10-164-65-105.ec2.internal
ทำอะไร?