Skip to content

在 QEMU 使用 Ubuntu Cloud Images

發佈日期:

Cloud Image 是已經預先裝好作業系統的磁碟映像,常常被用來部署作業系統至雲端伺服器。在這篇文章中,我們要用它在虛擬機器中安裝作業系統。

這次我們要在 QEMU-KVM 中裝 Ubuntu 20.04。

為了在雲端部署的方便,一些 Cloud Image 像是 Ubuntu Cloud Image 會在初始化時執行 cloud-init。如果不設定,只照預設值的話,就算知道帳號還是無法登入。所以這篇文章主要要講的是如何手動設定 cloud-init。

1. 下載 Ubuntu Cloud Images

標題為 1. 下載 Ubuntu Cloud Images

Ubuntu Cloud Images 網站,點選 focal/ > current/(也就是這裡),下載最新的 Ubuntu 20.04 image。

如同 Ubuntu 安裝程式一樣,Ubuntu Cloud Images 也有 mirror,在台灣的 mirror 下載通常會比較快。

mirror 列表:

要下載的是這個檔名相對比較短的檔案:
focal-server-cloudimg-amd64.img

如果不是用 QEMU 的話,需要選擇適用自己虛擬機器軟體的格式。

2. 製作供 cloud-init 使用的映像檔

標題為 2. 製作供 cloud-init 使用的映像檔

我們要用 data source NoCloud 來設定 cloud-init。

要使用這個方式的話,需要一個 ISO 檔,它的 volume label(掛載之後顯示的名稱)要是 cidataCIDATA,裡面要包含 2 個檔案:

我們可以用 cloud-localds 指令製作出符合格式的映像檔,當然也可以自己做。

使用 cloud-localds

標題為 使用 cloud-localds

cloud-localds 指令包含在 cloud-utils 套件中,所以要先安裝 cloud-utils:

# Arch Linux
sudo pacman -S cloud-utils
# Ubuntu
sudo apt-get install cloud-image-utils

然後要新增一個檔案記錄要寫入的設定,為了方便,就命名為 user-data.txt 吧。

如果只是要設定密碼,最簡單的設定是:

#cloud-config
password: < 你的密碼 >
chpasswd: { expire: False }
ssh_pwauth: True

這樣的話,登入帳號是 ubuntu,密碼是你設定的密碼。

如果想知道更多設定,可以看文件

然後輸入指令:

cloud-localds seed.iso user-data.txt

這樣就會產生等一下要用的 seed.iso

使用 genisoimage 生成映像檔

標題為 使用 genisoimage 生成映像檔

因為我們的目的是設定密碼,所以主要關注的是 user-data。剛剛提到的 cloud-localds 在製作映像檔時可以自己產生預設的 meta-data 檔,所以不用自己寫。不過如果想要自己做映像檔的話,就要自己寫這個檔案了。如果沒有其他特別需要的話,可以直接使用 cloud-localds 預設產生的 meta-data 檔:

{
"instance-id": "iid-local01"
}

再來跟上面一樣,將設定存為 user-data

#cloud-config
password: < 你的密碼 >
chpasswd: { expire: False }
ssh_pwauth: True

然後將這兩個檔案加入映像檔,指令是:

genisoimage  -output seed.iso -volid cidata -joliet -rock user-data meta-data

原來磁碟映像的磁碟空間只有 2.2 GB,所以在啓動前,可能需要修改磁碟映像的大小:

qemu-img resize focal-server-cloudimg-amd64.img 15G

啓動的方式以 virt-manager 為例,重點是要將 seed.iso 掛載:

virt-install \
  --name ubuntu20.04 \
  --memory 512 \
  --disk focal-server-cloudimg-amd64.img,device=disk,bus=virtio \
  --disk seed.iso,device=cdrom \
  --os-type linux \
  --os-variant ubuntu20.04 \
  --virt-type kvm \
  --graphics none \
  --network network=default,model=virtio \
  --import

使用圖形化介面也可以。先點「建立新的虛擬機」:

然後「匯入既有的磁碟映像」:

選完磁碟映像並設定好 CPU 及記憶體後,在最後一步點選「在安裝前自訂組態」:

先不要開始安裝,按「加入硬體」:

選取剛剛做的 seed.iso,裝置類型是「CDROM 裝置」。

然後才能按「開始安裝」:

結束之後,就可以使用裝好的 Ubuntu 20.04 了。