はじめに
OCI(Oracle Cloud Infrastructure)でComputeサーバ(OracleLinux)を立てていろいろと触っていたところ、
hostsファイル(/etc/hosts)に追記した内容が消えていることに気が付きました。
同じ現象でハマらないようメモを残しておきます。
現象
dummyserver01という名前のサーバを作成し、「dummyserver01.infomart.co.jp」という名前でも内部解決できるようhostsを設定しました。
- 変更後のhosts
172.16.xx.2 他のエントリ
172.16.xx.3 他のエントリ
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
172.16.xx.1 dummyserver01.xxxxx.yyyyy.oraclevcn.com dummyserver01 dummyserver01.infomart.co.jp
- しばらく放置した後のhosts
172.16.xx.2 他のエントリ
172.16.xx.3 他のエントリ
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
172.16.xx.1 dummyserver01.xxxxx.yyyyy.oraclevcn.com dummyserver01
上記のように、他サーバのエントリは変わっていないのですが、
自サーバのエントリに追記した「dummyserver01.infomart.co.jp」が消えてしまっています。
hostsの更新時刻も触った覚えのない時刻になっていました。
変更できないわけではなく、いったんは名前解決できるもののいつの間にか何らかのプロセスによって勝手にロールバックされてしまっているようです。
解決
/etc/oci-hostname.conf
の仕組みによりhostsファイルが上書きされるという仕様だからでした。
/etc/hostsファイルに加えた変更は、DHCPリースの更新やインスタンスの再起動のたびに上書きされます。変更内容をLinuxまたはCentOSインスタンスの/etc/hostsファイルに永続化するには、/etc/oci-hostname.confに次の行を追加します: PRESERVE_HOSTINFO=2。/etc/oci-hostname.confファイルが存在しない場合は作成します。
では現状のoci-hostname.confを見てみましょう。
# This configuration file controls the hostname persistence behavior for Oracle Linux
# compute instance on Oracle Cloud Infrastructure (formerly Baremetal Cloud Services)
# Set PRESERVE_HOSTINFO to one of the following values
# 0 -- default behavior to update hostname, /etc/hosts and /etc/resolv.conf to
# reflect the hostname set during instance creation from the metadata service
# 1 -- preserve user configured hostname across reboots; update /etc/hosts and
# /etc/resolv.conf from the metadata service
# 2 -- preserve user configured hostname across instance reboots; no custom
# changes to /etc/hosts and /etc/resolv.conf from the metadata service,
# but dhclient will still overwrite /etc/resolv.conf
# 3 -- preserve hostname and /etc/hosts entries across instance reboots;
# update /etc/resolv.conf from instance metadata service
PRESERVE_HOSTINFO=0
ファイルを開くとコメントにPRESERVE_HOSTINFOの値の意味が書いてありました。
まとめると以下のことのようです。
値 | ホスト名 | /etc/hosts | /etc/resolv.conf | 備考 |
---|---|---|---|---|
0 | 上書き | 上書き | 上書き | デフォルト |
1 | 変更なし | 上書き | 上書き | |
2 | 変更なし | 変更なし | 変更なし 1 | ドキュメントのおすすめ |
3 | 変更なし | 変更なし | 上書き |
マニュアルの記載に従い、 /etc/oci-hostname.conf
の PRESERVE_HOSTINFO=2
にすると
hostsファイルが巻き戻る現象は治まりました。
設定変更後は再起動などは必要ありませんでした。
-
dhclientの働きによって上書きされることがある ↩