Cloud Image 是已經預先裝好作業系統的磁碟映像,常常被用來部署作業系統至雲端伺服器。在這篇文章中,我們要用它在虛擬機器中安裝作業系統。
這次我們要在 QEMU-KVM 中裝 Ubuntu 20.04。
為了在雲端部署的方便,一些 Cloud Image 像是 Ubuntu Cloud Image 會在初始化時執行 cloud-init。如果不設定,只照預設值的話,就算知道帳號還是無法登入。所以這篇文章主要要講的是如何手動設定 cloud-init。
1. 下載 Ubuntu Cloud Images
到 Ubuntu Cloud Images 網站,點選 focal/ > current/(也就是這裡),下載最新的 Ubuntu 20.04 image。
要下載的是這個檔名相對比較短的檔案:
focal-server-cloudimg-amd64.img
。
如果不是用 QEMU 的話,需要選擇適用自己虛擬機器軟體的格式。
2. 製作供 cloud-init 使用的映像檔
我們要用 data source NoCloud
來設定 cloud-init。
要使用這個方式的話,需要一個 ISO 檔,它的 volume label(掛載之後顯示的名稱)要是 cidata
或 CIDATA
,裡面要包含 2 個檔案:
- meta-data
- user-data
我們可以用 cloud-localds 指令製作出符合格式的映像檔,當然也可以自己做。
使用 cloud-localds
cloud-localds 指令包含在 cloud-utils 套件中,所以要先安裝 cloud-utils:
然後要新增一個檔案記錄要寫入的設定,為了方便,就命名為 user-data.txt
吧。
如果只是要設定密碼,最簡單的設定是:
這樣的話,登入帳號是 ubuntu,密碼是你設定的密碼。
如果想知道更多設定,可以看文件。
然後輸入指令:
這樣就會產生等一下要用的 seed.iso
。
使用 genisoimage 生成映像檔
因為我們的目的是設定密碼,所以主要關注的是 user-data。剛剛提到的 cloud-localds 在製作映像檔時可以自己產生預設的 meta-data 檔,所以不用自己寫。不過如果想要自己做映像檔的話,就要自己寫這個檔案了。如果沒有其他特別需要的話,可以直接使用 cloud-localds 預設產生的 meta-data 檔:
再來跟上面一樣,將設定存為 user-data
:
然後將這兩個檔案加入映像檔,指令是:
啓動磁碟映像
原來磁碟映像的磁碟空間只有 2.2 GB,所以在啓動前,可能需要修改磁碟映像的大小:
啓動的方式以 virt-manager 為例,重點是要將 seed.iso
掛載:
使用圖形化介面也可以。先點「建立新的虛擬機」:
然後「匯入既有的磁碟映像」:
選完磁碟映像並設定好 CPU 及記憶體後,在最後一步點選「在安裝前自訂組態」:
先不要開始安裝,按「加入硬體」:
選取剛剛做的 seed.iso
,裝置類型是「CDROM 裝置」。
然後才能按「開始安裝」:
結束之後,就可以使用裝好的 Ubuntu 20.04 了。