Đặt chính xác tên máy chủ - Fedora 20 trên Amazon EC2


11

Bối cảnh

Tôi có một hình ảnh đám mây Fedora 20 chạy trên Amazon EC2 (từ đó được gọi là "ví dụ"). Và tôi có một số điều không chắc chắn về việc liên tục đặt tên máy chủ của nó.

Mục tiêu

Trong trường hợp này, giả sử tôi muốn đặt tên máy chủ của cá thể thành penpen.homelinux.org . (Tên này cũng sẽ được đăng ký tại DynDNS ddclient, nhưng đó là một khía cạnh khác mà chúng tôi không quan tâm ở đây.)

Tên máy chủ dĩ nhiên có thể được đặt thủ công sau khi khởi động hoàn tất (sử dụng hostnamectlgiữa những người khác). Nhưng chúng tôi muốn có tên máy chủ chính xác được đặt trước lần đăng nhập đầu tiên.

Theo truyền thống, để cấu hình liên tục tên máy chủ, người ta sẽ sửa đổi nội dung của /etc/hostname. Thật không may, điều này không làm việc ở đây.

Hành vi hệ thống mặc định

Theo mặc định, thể hiện đặt tên máy chủ của nó thành tên EC2 nội bộ. Sau khi khởi động, chúng ta có thể xem tất cả các vị trí nhỏ khác nhau mang lại tên máy chủ và chúng ta tìm thấy:

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

Vì vậy, hãy thử viết vào / etc / hostname ...

Nếu một người viết tên máy chủ mong muốn /etc/hostname, thay đổi này sẽ bị mất một lần nữa ở lần khởi động tiếp theo. Hãy xem xét quá trình khởi động, được thực hiện bởi systemd.

Chạy ví dụ

Viết rorororoor.homelinux.orgđến /etc/hostname, sau đó khởi động lại.

Sử dụng journald chúng tôi tìm thấy (Lưu ý rằng các dòng nhật ký không hoàn toàn theo thứ tự theo thời gian):

Quá trình khởi động bắt đầu với tên máy chủ là localhost sau đó chuyển root, tại đó tên máy chủ trở thành 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.

Chúng tôi thấy rằng systemdđặt tên máy chủ thành rorororoor.homelinux.org , rõ ràng là thành công khi cột máy chủ của nhật ký thay đổi. Một số lỗi được đưa ra, có thể là do hostnamectlkhông thể liên hệ với DBus tại thời điểm này.

Tôi không chắc ai đã đặt tên ở đây; một số phần nội bộ của systemd? Dù sao, tiếp tục thông qua tạp chí, chúng tôi thấy rằng tên máy chủ được đặt lại thành tên nội bộ EC2 khá sớm:

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)

Cài đặt tên máy chủ ở đây được thực hiện thông qua đơn vị "systemd-hostnamed". "Tệp đơn vị" cho "systemd-hostnamed" là /usr/lib/systemd/system/systemd-hostnamed.servicevà chứa:

[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

Chương trình được gọi ở trên /usr/lib/systemd/systemd-hostnamedthực sự là một nhị phân (TẠI SAO!). Tuy nhiên mã nguồn có thể được tìm thấy.

Vấn đề là chúng tôi đã quay lại tại ip-10-164-65-105.ec2.iternal

LÀM GÌ?

Câu trả lời:


11

Bạn cần làm hai việc (nhưng chỉ thực hiện một trong số đó):

  1. Đặt tên máy chủ trong /etc/hostname.
  2. Chỉnh sửa /etc/cloud/cloud.cfgvà đặt preserve_hostnamethành True. (Bạn cũng có thể chuyển tùy chọn này bằng dữ liệu người dùng của mình.)

Bước thứ hai là bắt buộc vì Fedora sử dụng cloud-initđể đưa dữ liệu người dùng từ môi trường EC2 để cung cấp thể hiện và cloud-initcần phải nói rằng tên máy chủ nên tồn tại.


TẤT CẢ QUYỀN. Tôi sẽ thử nó ngay lập tức.
David Tonhofer

1
Giữ lấy, đây là cái gì? Ok, YAML ( vi.wikipedia.org/wiki/YAML ). Vì vậy, theo scalehorizontally.com/2013/02/24/int sinhtion- to- cloud-init Tôi thêm " reserved_hostname : true" tại toplevel. ... Đúng là nó hoạt động.
David Tonhofer

Đúng, đó chỉ là YAML cũ.
Michael Hampton

Tất cả những gì thử và sai. Ồ tốt, tôi đã học được khá nhiều. Cảm ơn.
David Tonhofer

Cảm ơn, điều này hoạt động trên CentOS 7.3 - không có bước thứ hai, tên máy chủ bị ghi đè bởi cloud-init khi khởi động lại. Đối với bước đầu tiên, tôi đã sử dụng sudo hostnamectl set-hostname --static myhost.example.com, viết /etc/hostnamelà tốt.
RichVel

2

Một tùy chọn khác là đặt tên máy chủ thông qua dữ liệu người dùng

ví dụ

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

Điều này sẽ đặt tên máy chủ khi khởi động, tuy nhiên tôi không chắc liệu điều đó có luôn xảy ra trước lần đăng nhập đầu tiên không.


1

Có vẻ như câu trả lời là trong trang mannamectl hiện có 3 tên máy chủ, tên máy chủ tĩnh, tạm thời và khá.

Để đặt tên máy chủ tĩnh mà tôi nghĩ là tên bạn muốn,

hostnamectl --static set-hostname somehost.tld

Bạn có thể đặt tất cả chúng giống nhau với

hostnamectl set-hostname somehost.tld

Đúng, nhưng ... tôi nhận ra rằng tôi nên làm rõ hơn những gì tập tin đơn vị của tôi làm; nó đặt giữa những cái khác, tên máy chủ tĩnh và tạm thời bằng cách sử dụng "hostnamectl"; điều này hoạt động nhưng có vẻ như "cấu hình lớn" cho những gì tôi muốn đạt được. Sửa văn bản ...
David Tonhofer

@DavidTonhofer: Tôi bối rối. Có những từ bị mất trong câu hỏi của bạn nhưng có vẻ như làm rõ cách tôi đặt tên máy chủ trên hệ thống F20 của mình. Có lẽ nếu bạn xóa tất cả các thông báo và chỉ hỏi một câu hỏi đơn giản ...
user9517

Hmmm ... bạn có thể có một điểm. tốt, tôi biết làm thế nào để đặt tên máy chủ Nhưng làm cách nào để đặt đúng trên hình ảnh Amazon EC2 khi khởi động?
David Tonhofer

1

Giải quyết bằng cách sử dụng một tệp đơn vị bổ sung

Những điều sau đây không thực sự hoạt động:

Tạo một tệp đơn vị hệ thống /usr/lib/systemd/system/penpen-naming.servicesẽ được bắt đầu sau systemd-hostnamed.service(và có thể chỉ sau dbus.service).

(Tôi đã phải thực hiện im lặng một vài thử nghiệm để tìm ra "đúng chỗ" để systemdsẽ không đơn giản tắt đơn vị mới Lưu ý rằng bạn có thể vẽ đồ thị đồ thị phụ thuộc tập tin đơn vị với vì "một chu kỳ đã được phát hiện". systemd-analyze dot, Mà tạo ra một "dấu chấm "Tập tin được chuyển đến dotchương trình " graphviz " , nhưng kết quả chỉ là một biểu đồ khó hiểu, trừ khi bạn tiền xử lý nó)

Nội dung của tập tin đơn vị /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

Kích hoạt nó bằng cách sử dụng systemctl enable penpen-naming

Không gì /usr/local/toolbox/setting_hostnames/penpenlàm gì? Nếu viết penpen.homelinux.org vào /etc/hostname. Nhưng điều đó thực sự là không đủ, người ta cũng phải đặt tên máy chủ bằng cách sử dụng hostnamectl.

Ngay cả khi đó, thiết bị phải được chạy muộn (After=default.target)đến mức vỏ đăng nhập vẫn hiển thị tên máy chủ nội bộ EC2. Và vẫn còn vấn đề kết nối với DBus.

Vì vậy, đây không phải là một giải pháp tốt, hoặc ít nhất nó cần một bản sửa lỗi cho "vị trí trong cây phụ thuộc tệp đơn vị" và "cái quái gì đang xảy ra với dbus"

Tên máy chủ sau này là:

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

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.