
Ironic是一個(gè)OpenStack項目,它提供裸機(而不是虛擬機)。
一個(gè)稱(chēng)為Ironic Python Agent(IPA)的工具用于控制和配置這些物理節點(diǎn),執行擦除機器和將鏡像寫(xiě)入磁盤(pán)等任務(wù)。這是通過(guò)引導自定義的Linux內核和運行IPA并連接到Ironic Conductor的initramfs鏡像來(lái)完成的。
Ironic項目通過(guò)Disk Image Builder支持幾個(gè)不同的鏡像構建器,包括CoreOS、TinyCore等。
然而,這些鏡像構建器都有限制,例如,它們需要root權限,它們的大小都是幾百兆字節(除了TinyCore)。TinyCore的缺點(diǎn)之一是硬件支持有限,雖然它不在生產(chǎn)中使用,但它被用于OpenStack門(mén)控測試(在具有大約300MB RAM的虛擬機中啟動(dòng))。
大型部署鏡像意味著(zhù)節點(diǎn)的配置時(shí)間較長(cháng),因此筆者開(kāi)始創(chuàng )建一個(gè)小型、可定制的鏡像,以解決其他現有鏡像的問(wèn)題。
Buildroot
筆者選擇使用Buildroot,這是一個(gè)大家都認為易于使用的、構建嵌入式Linux鏡像的工具。
到目前為止,它作為一個(gè)概念驗證是相當成功的。
Linux內核是2MB
壓縮的initramfs映像是25MB
通過(guò)OpenStack Ironic門(mén)控測試
高度可定制(多虧了Buildroot)
可以通過(guò)menuconfig系統進(jìn)行定制,類(lèi)似于Linux內核。

Buildroot menuconfig
源代碼
用于構建鏡像的所有源代碼都位于ipa-buildroot存儲庫中筆者的GitHub帳戶(hù)(https://github.com/csmart/ipa-buildroot)上。筆者還寫(xiě)了一些文檔,用于引導你完成整個(gè)構建和定制過(guò)程。
ipa-buildroot存儲庫包含IPA特定的Buildroot配置,并跟蹤Git子模塊中的上游Buildroot。通過(guò)使用上游Buildroot和外部存儲庫,IPA Buildroot配置作為常規Buildroot構建的選項出現。

在Buildroot 默認配置列表中的IPA
Buildroot將編譯內核和initramfs,然后發(fā)布構建腳本克隆Ironic Python Agent存儲庫并為目標創(chuàng )建Python Wheels。
以下最終鏡像將在。/output/images下找到:
- bzImage(內核)
- rootfs.cpio.xz(ramdisk)
- rootfs.iso9660(ISO鏡像)
這些文件可以上傳到Glance與Ironic一起使用。
自定義
Buildroot允許你自定義構建參數、目標initramfs和Linux內核。這樣做也很簡(jiǎn)單,每次運行make時(shí),它會(huì )回到你離開(kāi)的地方,重新創(chuàng )建你的鏡像。

該構建腳本直接獲取Ironic Python Agent,使得構建高度靈活地獲取要使用的確切版本。你可以通過(guò)在Buildroot的menuconfig中自定義設置來(lái)指定Ironic Python Agent和需求存儲庫的位置和分支。

設置Ironic Python Agent和Requirement位置、Git版本
筆者從頭開(kāi)始(使用tinyconfig)創(chuàng )建了內核配置,并故意努力實(shí)現平衡大小和功能。應該在大多數基于Intel的計算機(BIOS和UEFI)上引導,但對硬盤(pán)和以太網(wǎng)控制器等硬件的支持被故意限制。我們的目標是從小開(kāi)始,再根據需要增加更多支持,因此可能需要修改才能在你的硬件上工作。
使用imagebuild腳本自動(dòng)構建
手動(dòng)進(jìn)行構建是很好的,因為它有助于了解拼接過(guò)程,但是手動(dòng)涉及的更多。
Ionic Python Agent(IPA)repo有一些鏡像創(chuàng )建腳本,這使得構建CoreOS和TinyCore鏡像非常簡(jiǎn)單。筆者現在提供一些補丁,來(lái)增加對創(chuàng )建Buildroot鏡像的支持。
這些補丁包含幾個(gè)腳本,其中包括手動(dòng)構建方法和一個(gè)Makefile來(lái)將它們整合在一起。只有install-deps.sh腳本需要root權限,而且如果它檢測到?jīng)]有依賴(lài)關(guān)系,其他所有Buildroot任務(wù)將作為非特權用戶(hù)運行。這是Buildroot方法的一大優(yōu)點(diǎn)!
再次強調,筆者已經(jīng)在repo中包含了文檔(https://github.com/csmart/ironic-python-agent/tree/buildroot/imagebuild/buildroot#buildroot-ironic-python-agent),所以請參閱有關(guān)如何構建和自定義鏡像的更多細節。但總的來(lái)說(shuō),做這個(gè)是很簡(jiǎn)單的:

這些操作將自動(dòng)執行以下任務(wù):
- 獲取Buildroot Git存儲庫
- 加載默認的IPA Buildroot配置
- 下載并驗證所有源代碼
- 構建工具鏈
使用工具鏈構建:
- 系統庫和軟件包
- Linux內核
- 用于IPA和依賴(lài)關(guān)系的Python Wheels
創(chuàng )建內核、initramfs和ISO鏡像
默認配置指向上游IPA Git存儲庫,但是你可以將其更改為指向任何你喜歡的repo和提交。 例如,如果你正在處理IPA,你可以將Buildroot指向當地的Git repo,然后構建并引導該鏡像進(jìn)行測試。
幫助
- 要查看可用的Makefile目標,只需運行幫助目標:
- make help
如果你輸入-help選項,那么shell腳本也可以提供幫助:
