プレシードを使用して仮想マシンをデプロイすると、プレシードで指定されたホスト名が無視され、代わりにDNSサーバーのホスト名が使用されることに気付きました。
Ubuntu Serverマシンは以下を使用してデプロイされます。
virt-install \
--name custom-name \
--initrd-inject /some-path/preseed.cfg \
--extra-args "preseed/file=preseed.cfg" \
...
Preseedファイルには、特に次の行が含まれます(custom-name
2行目の値):
...
d-i netcfg/disable_dhcp boolean true
...
d-i netcfg/get_hostname string custom-name
d-i netcfg/get_domain string pelicandd.com
d-i netcfg/get_ipaddress string 192.168.1.35
...
一方、DNSサーバーには両方のAレコードが含まれています。
demo IN A 192.168.1.35
およびPTRレコード:
35 IN PTR demo.example.com.
マシンが作成されると、/etc/hostname
に含まれるもの:
demo
そして/etc/hosts
に含まれるもの:
127.0.0.1 localhost
192.168.1.35 demo.example.com demo
展開プロセスが情報を取得するためにDNSサーバーにアクセスするという事実に特に満足していません。時間がかかるだけでなく、状況によっては、DNSサーバーがダウンしている可能性があります(展開されているのはDNSサーバー自体である場合など)。
インストーラがDNSにアクセスして、Preseedですでに利用可能な情報を取得できないようにするには、Preseedで何を指定する必要がありますか?
RTFMが役立ちました。 Debianのpreseedの例 から:
# Any hostname and domain names assigned from dhcp take precedence over
# values set here. However, setting the values still prevents the questions
# from being shown, even if values come from dhcp.
d-i netcfg/get_hostname string unassigned-hostname
d-i netcfg/get_domain string unassigned-domain
# If you want to force a hostname, regardless of what either the DHCP
# server returns or what the reverse DNS entry for the IP is, uncomment
# and adjust the following line.
#d-i netcfg/hostname string somehost
つまり、netcfg/get_hostname
は無関係です。その唯一の目的は、インストーラーがそもそも質問をしないようにすることです。
実際、netcfg/hostname
の値を設定すると、DNS PTRレコードを無視して、/etc/hostname
と/etc/hosts
の両方にプレシードで指定された値が含まれます。