Khi nào systemd xác định tên máy chủ tạm thời?


7

Trong RHEL 7.2, systemdkhởi động và xác định tên máy chủ của máy chủ. Nếu /etc/hostnamekhông có sẵn (ví dụ, loại bỏ), và /etc/machine-infolà unavilable, và hạt nhân không được cấu hình với các thông tin đó (tức là, sysctl's kernel.hostname), systemdgán một 'thoáng' hostname cho máy chủ. Câu hỏi là: nó xác định điều này từ đâu?

Các máy chủ ban đầu được đặt tên theo cách này. Sau đó, tôi đã nhân bản máy chủ (đó là VM) và xóa tất cả các tham chiếu đến tên đó. Nhưng sau đó trong quá trình khởi động, rất sớm, nó được đặt theo cách đó.

Nếu tôi khởi động vào rescuemodetôi có thể thấy rằng nó đặt tên máy chủ rất sớm:

[    0.456076] systemd[1]: systemd 208 running in system mode. (+PAM +LIBWRAP +AUDIT +SELINUX +IMA +SYSVINIT +LIBCRYPTSETUP +GCRYPT +AC
L +XZ)
[    0.456664] systemd[1]: Detected virtualization 'kvm'.
[    0.456955] systemd[1]: Running in initial RAM disk.
[    0.458496] systemd[1]: Set hostname to <badhostname.example.com>.
[    0.475394] systemd[1]: Expecting device dev-mapper-vgroot\x2dlvroot.device...

Tại dấu nhắc lệnh, nó được đặt làm tên máy chủ "tạm thời":

# hostnamectl status
Transient hostname: badhostname.mydomain.com
...

Có thể là không phải systemd: Tôi thậm chí còn gặp phải vấn đề này khi sử dụng init=/bin/bash, nhưng systemd đang chạy trong hình ảnh initrd.

  • Nó không được đặt trong grub hoặc bất cứ điều gì.
  • Nó không được cài đặt bởi DHCP vì mạng bị tắt khi khởi động.
  • Nó không phải là bất cứ nơi nào trong hệ thống tập tin:

    # find / \( -path /sys -prune -o -path /proc -prune -o -path /run -prune \) -o -type f -exec grep -ilrF "${HOSTNAME}" {} +
    <some .git files>
    <history files of non-root user>
    

Bằng cách nào đó, kernel hoặc systemd đang xác định tên máy chủ cũ và sử dụng nó như một tạm thời, và tôi hoàn toàn mất phương hướng! . Tôi đã làm một find ... -exec grepkhông có kết quả ngoại trừ /var/log/dmesg. Tôi đang nói với bạn, systemd đã ám ảnh chủ nhà của tôi!

EDIT 2: Lần duy nhất tôi không nhận được là nếu tôi khởi động vào các initramfs được cung cấp. Rõ ràng, các initramfs được tạo ra giữ bí mật bẩn thỉu!


Tôi đã thu hẹp nó xuống còn 3 khả năng: (1) hình ảnh initrd, (2) ngay cả khi không ở chế độ nối mạng, nó sử dụng DHCP để lấy tên máy chủ - có thể trong ma thuật đen, (3).
Otheus

1
Như một bên, sử dụng tốt đẹp của từ "whence." ;)
tự đại diện

Câu trả lời:


6

Nhờ những hiểu biết của Don Crissti và qua quá trình loại bỏ, người ta kết luận rằng thủ phạm là hình ảnh initramfs. Bằng cách nào đó dracutkhi nó xây dựng hình ảnh quyết định bao gồm một phiên bản được lưu trong bộ nhớ cache của tên máy chủ (!?!).

Xây dựng lại fs initrd / initram được trình bày ở đây nhưng tóm lại (vì bạn, độc giả thân yêu có thể không có quyền truy cập), hãy làm

dracut -f -v
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.