Ana bilgisayar adını doğru ayarlama - Amazon EC2'de Fedora 20


11

bağlam

Amazon EC2 (bundan böyle "örnek" olarak adlandırılır) üzerinde çalışan bir Fedora 20 bulut görüntü var . Ve sürekli onun ana bilgisayar adını ayarlamak konusunda bazı belirsizlikler var.

Hedef

Bu durumda, örneğin ana bilgisayar adını penpen.homelinux.org olarak ayarlamak istediğimi varsayalım . (Bu ad aynı zamanda DynDNS'e kullanılarak da kaydedilecektir ddclient, ancak bu burada ilgilenmediğimiz başka bir özelliktir.)

Ana bilgisayar adı, önyükleme tamamlandıktan sonra manuel olarak ayarlanabilir ( hostnamectldiğerleri arasında kullanılarak ). Ancak, ilk oturum açmadan önce doğru ana bilgisayar adının ayarlanmasını istiyoruz.

Geleneksel olarak, ana bilgisayar adını kalıcı olarak yapılandırmak için, içeriği değiştirilir /etc/hostname. Ne yazık ki bu burada çalışmıyor.

Varsayılan sistem davranışı

Varsayılan olarak, örnek ana makine adını dahili bir EC2 adına ayarlar. Önyüklemeden sonra, ana bilgisayar adını veren tüm küçük farklı yerlere bakabiliriz ve buluruz:

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

Şimdi / etc / hostname yazmayı deneyelim ...

Biri istenen ana bilgisayar adını yazarsa /etc/hostname, bu değişiklik bir sonraki önyüklemede yeniden kaybolur. Tarafından yapılan önyükleme işlemini inceleyelim systemd.

Örnek çalışma

Yaz rorororoor.homelinux.orgiçin /etc/hostname, daha sonra yeniden başlatın.

Journalald'ı kullanarak (Günlük satırlarının tamamen zamana göre sıralı olmadığını unutmayın):

Önyükleme işlemi, localhost olarak hostname ile başlar ve daha sonra root'u değiştirir ve bu noktada hostname rorororoor.homelinux.org olur .

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.

Biz görüyoruz systemdsetleri için ana makine adı rorororoor.homelinux.org , besbelli başarılı olarak günlüğünün konak sütun değişir. Muhtemelen hostnamectlbu noktada DBus ile bağlantı kuramadığı için bazı hatalar yayınlanmaktadır .

Burada isim ayarını kimin yaptığından emin değilim; systemd bazı iç parçası? Her neyse, günlük boyunca devam ederek, ana makine adının yakında EC2 dahili adına ayarlandığını görüyoruz:

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)

Burada ana bilgisayar adı ayarı "systemd-hostnamed" birimi üzerinden yapılır. "Systemd-hostnamed" için "birim dosya" şudur /usr/lib/systemd/system/systemd-hostnamed.serviceve şunları içerir:

[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

Yukarıdakilerin başlattığı program /usr/lib/systemd/systemd-hostnamedaslında bir ikili programdır (NEDEN!). Ancak kaynak kodu bulunabilir.

Mesele şu ki, ip-10-164-65-105.ec2.internal'a geri döndük

NE YAPAR?

Yanıtlar:


11

İki şey yapmanız gerekiyor (ancak bunlardan sadece birini yaptınız):

  1. Ana bilgisayar adını girin /etc/hostname.
  2. Düzen /etc/cloud/cloud.cfgve seti preserve_hostnameiçin True. (Bu seçeneği kullanıcı verilerinizle de aktarabilirsiniz.)

İkinci adım gereklidir, çünkü Fedora cloud-initörneği sağlamak için EC2 ortamından kullanıcı verilerini getirmek için kullanır cloud-initve ana bilgisayar adının devam etmesi gerektiği söylenmelidir.


TAMAM. Hemen deneyeceğim.
David Tonhofer

1
Bekle, bu nedir? Tamam, YAML ( en.wikipedia.org/wiki/YAML ). Yani scalehorizontally.com/2013/02/24/introduction-to-cloud-init göre en üst seviyeye "preserve_hostname: true" ekliyorum. ... Evet, işe yarıyor.
David Tonhofer

Evet, sadece düz eski YAML.
Michael Hampton

Tüm bu deneme yanılma. Oh, çok şey öğrendim. Teşekkürler.
David Tonhofer

Teşekkürler, bu CentOS 7.3 üzerinde çalışır - ikinci adım olmadan, ana bilgisayar adı yeniden başlatma sırasında bulut init tarafından üzerine yazılır. İlk adımda, ben kullanılan sudo hostnamectl set-hostname --static myhost.example.com, yazar hangi /etc/hostnamesıra.
17'de RichVel

2

Başka bir seçenek de ana bilgisayar adını kullanıcı verileri aracılığıyla ayarlamaktır

Örneğin

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

Bu, önyükleme sırasında ana bilgisayar adını ayarlayacaktır, ancak her zaman ilk girişten önce olup olmayacağından emin değilim.


1

Cevabın hostnamectl man sayfasında olduğu gibi, şimdi 3 hostn, statik, geçici ve güzel hostnames var.

İstediğim olduğunu düşündüğüm statik ana bilgisayar adını ayarlamak için,

hostnamectl --static set-hostname somehost.tld

Hepsini aynı olacak şekilde ayarlayabilirsiniz

hostnamectl set-hostname somehost.tld

Doğru, ama ... Birim dosyamın ne yaptığını netleştirmiş olmam gerektiğini fark ettim; "hostnamectl" kullanarak diğerlerinin yanı sıra statik ve geçici ana bilgisayar adlarını belirler; Bu işe yarıyor ama elde etmek istediğim şey için "büyük yapılandırma" gibi görünüyor. Metni düzeltme ...
David Tonhofer

@DavidTonhofer: Kafam karıştı. Sorunuzda kelimeler kayboldu, ancak F20 sistemimdeki ana bilgisayar adını nasıl ayarlayacağım kadar kaybolmuş gibi görünüyor. Belki de tüm
sözleri

Hmmm ... bir noktanız olabilir. ana bilgisayar adını nasıl ayarlayacağımı biliyorum. Ancak önyükleme sırasında bir Amazon EC2 görüntüsüne nasıl düzgün şekilde ayarlayabilirim?
David Tonhofer

1

Ek bir birim dosyası kullanarak çözme

Aşağıdakiler gerçekten işe yaramıyor:

/usr/lib/systemd/system/penpen-naming.serviceSonra systemd-hostnamed.service(ve muhtemelen yalnızca dbus.service) başlatılacak bir sistem birimi dosyası oluşturun .

( systemd"Bir döngü algılandığı için" yeni birimi basit bir şekilde devre dışı bırakmayacak şekilde "doğru yeri" bulmak için birkaç deneme yapmak zorunda kaldım . Birim dosyası bağımlılık grafiğini systemd-analyze dot"nokta" oluşturur "dosya" graphviz " dotprogramına aktarılacak , ancak ön filtrelemediğiniz sürece sonuç sadece büyük bir kafa karıştırıcı grafik olacak)

Birim dosyasının içeriği /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

Düğmesini kullanarak etkinleştirin systemctl enable penpen-naming

Ne yapar /usr/local/toolbox/setting_hostnames/penpen? Yazıyor ise penpen.homelinux.org için /etc/hostname. Ama bu yeterli değil, aynı zamanda ana bilgisayar adını kullanarak ayarlamak gerekir hostnamectl.

O zaman bile, ünite o kadar geç çalıştırılmalıdır ki (After=default.target)giriş kabuğu hala EC2 dahili ana bilgisayar adını gösterir. Ve hala DBus'a bağlanmada sorunlar var.

Yani bu iyi bir çözüm değil, ya da en azından "birim dosya bağımlılığı ağacındaki konum" ve "dbus'la ne oluyor" için bir düzeltmeye ihtiyacı var

Bundan sonraki ana makine adları:

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

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.