自定義 QCOW2 映像檔
virt-customize 是 libguestfs 生態系的離線映像客製化工具,可安裝套件、修改設定與注入 SSH 公鑰。本文示範 QCOW2 格式;離線是指不啟動目標 VM,不代表安裝套件時不需要網路。
使用前提
- 以下範例使用 RHEL 9 x86_64 主機與同架構的 RHEL 9 映像,主機已啟用適用的 BaseOS/AppStream 套件庫。
- 修改前必須完全關閉 VM,且不可與其他工具同時修改同一映像。
- 工具會直接修改指定映像,應先建立工作副本。
- 主機與映像內的套件來源分別管理;RHEL 映像不會自動繼承主機的訂閱。
安裝與準備
在具備可用套件庫的主機安裝工具,並記錄版本:
| |
base.qcow2 是準備好的來源映像,custom.qcow2 必須使用尚未存在的新檔名。以下指令於同一個 Shell 執行,皆修改工作副本。
常用操作
1. 設定 root 密碼
需要密碼登入時才設定。事先安全建立權限為 0600 的密碼檔,第一行放置密碼,且不要納入版本控制:
| |
不要直接使用 password:root;命令列明文密碼可能出現在程序列表與 Shell 歷史中。
2. 執行特定指令
--run-command 在 appliance 的 chroot 環境內執行,不是完整啟動目標 VM。需要正常開機環境的工作,可使用 --firstboot-command。
| |
3. 上傳自訂套件庫
以下假設主機已有有效的 custom.repo,且來源適用於目標 OS、具備必要的存取權限。不要直接覆寫 RHSM 管理的 redhat.repo。
| |
4. 安裝特定套件
使用映像內的套件管理器與套件庫,透過 appliance 連線取得套件。RHEL 須有可用且符合授權的內容來源;若安裝 htop,通常還需要 EPEL。
| |
5. 設定時區
| |
6. 注入 SSH 公鑰
範例中的 admin 必須已存在於映像內。若帳號由 cloud-init 首次開機時建立,應改由 cloud-init 設定金鑰。注入金鑰不會自動放寬 SSH 登入政策。
| |
7. SELinux 與開機驗證
新版工具預設自動處理 SELinux 標籤,通常不必額外指定 --selinux-relabel;現行上游已將它列為相容性空操作,實際行為請查閱安裝版本的手冊。
首次開機可能需要重新標記 SELinux。若使用 cloud-init,還應確認其密碼、SSH 與時區設定是否影響客製化結果。在啟動後的 VM 內檢查:
| |
除上述檢查外,還應實際測試 SSH 登入、所需服務,並確認是否出現 SELinux 拒絕紀錄。