LXD 2.0 系列(十二):调试,及给 LXD 做贡献
介紹
終于要結(jié)束了!這個(gè)大約一年前開始的這系列文章的最后一篇博文。
如果你從一開始就關(guān)注了這個(gè)系列,你應(yīng)該已經(jīng)使用了 LXD 相當(dāng)長的時(shí)間了,并且非常熟悉它的日常操作和功能。
但如果出現(xiàn)問題怎么辦?你可以做什么來自己跟蹤問題?如果你不能,你應(yīng)該記錄什么信息,以便上游可以跟蹤問題?
如果你想自己解決問題或通過實(shí)現(xiàn)你需要的功能來幫助改善LXD怎么辦?如何構(gòu)建,測試和貢獻(xiàn) LXD 代碼庫?
調(diào)試 LXD 并填寫 bug 報(bào)告
LXD 日志文件
/var/log/lxd/lxd.log:
這是 LXD 日志的主文件。為了避免它快速充滿你的磁盤,默認(rèn)只會(huì)記錄?INFO、WARNING?或者?ERROR?級(jí)別的日志。你可以在 LXD 守護(hù)進(jìn)程中使用?–debug?改變其行為。
/var/log/lxd/CONTAINER/lxc.conf:
每當(dāng)你啟動(dòng)容器時(shí),此文件將更新為傳遞給 LXC 的配置。
這里會(huì)展示容器將如何配置,包括其所有的設(shè)備、綁定掛載等等。
/var/log/lxd/CONTAINER/forkexec.log:
這個(gè)文件包含 LXC 命令執(zhí)行失敗時(shí)產(chǎn)生的錯(cuò)誤。這個(gè)情況是非常罕見的,因?yàn)?LXD 通常會(huì)在發(fā)生之前處理大多數(shù)錯(cuò)誤。
/var/log/lxd/CONTAINER/forkstart.log:
這個(gè)文件包含 LXC 在啟動(dòng)容器時(shí)的錯(cuò)誤信息。含 LXC 命令執(zhí)行失敗時(shí)產(chǎn)生的錯(cuò)誤。
CRIU 日志 (對(duì)于實(shí)時(shí)遷移)
如果使用 CRIU 進(jìn)行容器實(shí)時(shí)遷移或?qū)崟r(shí)快照,則每次生成 CRIU 轉(zhuǎn)儲(chǔ)或恢復(fù)轉(zhuǎn)儲(chǔ)時(shí)都會(huì)記錄額外的日志文件。
這些日志也可以在?/var/log/lxd/CONTAINER/?中找到,并且有時(shí)間戳,以便你可以找到與你最近的操作所匹配的那些日志。它們包含 CRIU 轉(zhuǎn)儲(chǔ)和恢復(fù)的所有內(nèi)容的詳細(xì)記錄,并且比典型的遷移/快照錯(cuò)誤消息更容器理解。
LXD 調(diào)試消息
如上所述,你可以使用?-debug?選項(xiàng)將守護(hù)進(jìn)程切換為執(zhí)行調(diào)試日志記錄。另一種方法是連接到守護(hù)進(jìn)程的事件接口,它將顯示所有日志條目,而不管配置的日志級(jí)別(即使是遠(yuǎn)程工作)。
舉例說,對(duì)于?lxc init ubuntu:16.04?xen?來說,
lxd.log?會(huì)是這樣:
而?lxc monitor –type=logging?會(huì)是:
lxc monitor?的格式有點(diǎn)不同于每個(gè)條目都縮合成一行的日志文件,但更重要的是,你可以看到所有?level:dbug?條目。
如何報(bào)告 bug
LXD 的 bug
最好報(bào)告 bug 的地方是?https://github.com/lxc/lxd/issues。確保完整填寫了 bug 報(bào)告模板中的內(nèi)容,這些信息可以節(jié)省我們我們時(shí)間來復(fù)現(xiàn)環(huán)境。
Ubuntu 的 bug
如果你發(fā)現(xiàn) Ubuntu 包本身有問題,無法安裝、升級(jí)或刪除。或者遇到 LXD init 腳本的問題。報(bào)告此類錯(cuò)誤的最好是在 Launchpad 上。
在 Ubuntu 系統(tǒng)上,你可以使用:ubuntu-bug lxd?,它將自動(dòng)包括一些日志文件和包信息供我們查看。
CRIU 的 bug
與 CRIU 相關(guān)的 Bug,你可以通過 CRIU 的錯(cuò)誤輸出發(fā)現(xiàn),你應(yīng)該在 Launchpad 上報(bào)告這些:ubuntu-bug criu
請注意,通過 LXD 使用 CRIU 屬于測試版功能,除非你愿意通過 Canonical 的支持合同付費(fèi)支持,要么可能需要一段時(shí)間才能查看你的錯(cuò)誤報(bào)告。
貢獻(xiàn)給 LXD
LXD 用?Go?寫成并托管在 Github。我們歡迎任外部的貢獻(xiàn)。為 LXD 貢獻(xiàn)不需要 CLA 或類似的法律協(xié)議簽署,只是通常的開發(fā)者所有權(quán)證書(Signed-off-by:?行)。
在我們的問題追蹤器工具中,我們列有許多潛在的功能需求,新的貢獻(xiàn)者可以以此作為良好的起點(diǎn)。通常最好在開始處理代碼先發(fā)出 issue,這樣每個(gè)人都知道你正在做這項(xiàng)工作,以便我們可以提供一些早期反饋。
從源碼源碼構(gòu)建 LXD
這里有上游的維護(hù)說明:https://github.com/lxc/lxd#building-from-source
你需要在 Github 上 fork 上游倉庫,然后將你的更改推送到你的分支。我們建議每天 rebase 上游的 LXD,因?yàn)槲覀儍A向于定期合并更改。
運(yùn)行測試套件
LXD 維護(hù)了兩套測試集,單元測試和集成測試。你可以用下面的命令測試所有:
要只運(yùn)行單元測試,使用:
要運(yùn)行集成測試,使用:
后者支持相當(dāng)多的環(huán)境變量來測試各種存儲(chǔ)后端、禁用網(wǎng)絡(luò)測試、使用 ramdisk 或只是調(diào)整日志輸出。其中一些是:
- LXD_BACKEND:btrfs、dir、lvm?或?zfs” 之一(默認(rèn)為?dir) ??
運(yùn)行 LXD 存儲(chǔ)驅(qū)動(dòng)程序相關(guān)的所有測試。 - LXD_CONCURRENT:true?或?false(默認(rèn)為?false) ??
這啟用一些額外的并發(fā)測試。 - LXD_DEBUG:true?或?false(默認(rèn)為?false) ??
記錄所有 shell 命令,并在調(diào)試模式下運(yùn)行所有?? LXD 命令。 - LXD_INSPECT:true?或?false(默認(rèn)為?false) ??
測試程序會(huì)在故障時(shí)掛起,以便你可以檢查環(huán)境。 - LXD_LOGS:將所有?LXD?日志文件轉(zhuǎn)儲(chǔ)到的目錄(默認(rèn)為 “”) ??
所有生成的 LXD 守護(hù)進(jìn)程的?logs?目錄將被復(fù)制到此路徑。 - LXD_OFFLINE:true?或?false(默認(rèn)為?false) ??
禁用任何依賴于外部網(wǎng)絡(luò)連接的測試。 - LXD_TEST_IMAGE: unified 格式的 LXD 鏡像的路徑(默認(rèn)為 “”) ??
可以使用自定義測試鏡像,而不是默認(rèn)的最小 busybox 鏡像。 - LXD_TMPFS:true?或?false(默認(rèn)為?false) ??
在?tmpfs?安裝中運(yùn)行整個(gè)測試套件,這會(huì)使用相當(dāng)多的內(nèi)存,但會(huì)使測試速度明顯更快。 - LXD_VERBOSE:true?或?false(默認(rèn)為?false) ??
不太極端的?LXD_DEBUG?版本。shell 命令仍然會(huì)記錄,但?-debug?不會(huì)傳遞給 LXC 命令,LXD 守護(hù)進(jìn)程只能使用?-verbose?運(yùn)行。
測試程序?qū)⒃趯?shí)際運(yùn)行之前提醒你任何缺失的依賴項(xiàng)。在相當(dāng)快的機(jī)器上運(yùn)行該測試可在 10 分鐘內(nèi)完成。
原文發(fā)布時(shí)間為:2017-03-09
本文來自云棲社區(qū)合作伙伴“Linux中國”
總結(jié)
以上是生活随笔為你收集整理的LXD 2.0 系列(十二):调试,及给 LXD 做贡献的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 移动端类似IOS的滚动年月控件(需要jQ
- 下一篇: 老男孩IT教育38期面授班 学员邢伟的决