Ubuntu修改主機名后,重啟自動恢復原來的主機名?
這是因為Ubuntu18.10上,默認安裝並啟動了cloud-init, 需要停止它的四個服務進程,才可以使用傳統的方式修改主機名。
cloud-init: https://cloudinit.readthedocs.io/en/latest/topics/examples.html?highlight=lock-passwd#including-users-and-groups
這是它的官方幫助文檔中的一篇。
配置參數參考: https://www.cnblogs.com/gushiren/p/9511234.html
元數據參考:https://www.cnblogs.com/gushiren/p/9511500.html
使用示例參考: https://www.cnblogs.com/gushiren/p/9511570.html
https://www.cnblogs.com/gushiren/p/9511593.html
cloud-init簡介:
它是為解決雲環境中,對新建虛擬機的初始化配置問題,所提供的一個解決方案,若你的非雲環境,完全可以關閉它。
它能做什么?
它可以通過元數據服務來為批量創建的虛擬機設置主機名,配置創建什么用戶,用戶的密碼,設置root是否能ssh登錄,配置啟動VM時,安裝什么軟件,以及執行什么腳本,甚至磁盤如何分區,分多大,格式化為什么文件系統,是否可自動增長等等,它都可以通過定義配置文件來實現。
它的基本工作原理:
local階段:
首先cloud-init-local 服務在開機時,最先啟動,它會試圖從元數據服務哪里獲取IP的配置信息,若沒有找到IP信息,就設置為dhcp自動獲取IP,需要注意: 元數據服務有很多種,似乎每個廠家的規則還不太相同,這個不是很確定,具體有哪些元數據服務可用,可查看 dpkg-reconfigure cloud-init 這是Ubuntu或Debian系統中的查看方法,其它還需自行查詢。在ubuntu上,默認啟用了所有元數據服務,若你是VMware安裝的Ubuntu虛擬機,那默認將使用本地的元數據服務,即/var/lib/cloud/seed/ 下面的本地磁盤文件來存儲安裝系統時,根據你的設置,自動生成的元數據配置文件信息。
init, config, 和 final階段:
接着根據/etc/cloud/cloud.cfg 定義的,此三個階段分別要執行的任務,其中每個任務都是以模塊(module)形式設置的。
虛擬機啟動時 ,所有定制化項目都可在這三個階段設置,但每個配置項,具體要做什么,就是由metadata(元數據)來決定了。
如: cloud.cfg 中指定了 set_hostname 這個 module,則意味着 cloud-int 會設置 instance(虛擬機) 的主機名,而具體設置成哪個主機名則由 metadata 中 hostname 參數決定。
關於其元數據配置文件:
root@zcf:~# cat /var/lib/cloud/seed/nocloud-net/user-data
#cloud-config #凡是用戶自定義的cloud-init的配置文件,必須以#cloud-config開頭,這是cloud-init識別它的方式。
growpart: {mode: 'off'} #這些配置信息的含義 在上面給出的官方連接中都有介紹,這里就不多說了。
hostname: zcf #另外,在OpenStack中,你創建VM時,可直接在啟動VM時,給其傳遞執行腳本處,寫這些信息,也是可別cloud-init識別的。
locale: en_US.UTF-8
resize_rootfs: false
users:
- gecos: zcf
groups: [adm, cdrom, dip, plugdev, sudo]
lock-passwd: false
name: zcf
passwd: $6$221/i.......m6G/
shell: /bin/bash
非雲環境的Ubuntu主機如何關閉Cloud-init:
systemctl disable cloud-init-local cloud-init cloud-config cloud-final
systemctl stop cloud-init-local cloud-init cloud-config cloud-final