最近購得一個openwrt書籍《智能路由器開發指南》,作者張永智。
Building a smart router with openwrt
作者網址:http://openwrt.bjbook.net/
作者提供軟件包下載服務,和openwrt代碼搜索引擎,同一網站。
書中所提到的系統使用openwrt 12.09和openwrt 15.05.1介紹。
作者希望通過本書的學習能夠掌握openwrt各種技術的應用,同時在一定程度上可以參考openwrt的技術架構,使自己的職業技能有一個質的提高。
在異步社區http://www.epubit.com.cn/book/onlinechapter/43506有本書前兩章內容,可供參考。
作者在前言中提到了openwrt成功的秘訣,可以學習參考。
可以實現路由器功能的開源軟件很多,為什么只有OpenWrt成功了?OpenWrt軟件成功的關鍵在於3個方面:領導者、基礎設施以及實現軟件的技術。通常領導者是最重要的,因為領導者決定着社區的規則和技術方向,但是每個人都是獨特的而且是無法復制的,因此通常無法借鑒。基礎設施和實現軟件的技術則是可以借鑒的。
OpenWrt社區采用六大基礎設施工具支撐整個社區的運轉,這六大基礎設施工具分別是代碼管理工具Git、郵件列表、自動構建工具buildbot、文檔管理工具WiKi、Trac和技術論壇。
代碼管理工具Git可以跟蹤文件和目錄的歷史信息,包含4個W(Who、When、Why和What),即誰做了修改,什么時間做了修改,為什么修改以及修改的內容是什么。此外,Git還支持分布式代碼倉庫,適合開源軟件項目的跨地域開發,這個工具可以讓每個人看到代碼的變化過程。OpenWrt經過了12年的發展,代碼倉庫還保留了最初的提交記錄。
郵件列表是代碼審查及代碼提交集成的地方,開發人員將修改代碼生成補丁發送給所有的郵件訂閱者,每個人都可以進行代碼評審,核心開發人員看到后會將代碼集成到代碼倉庫中。郵件內容可以永久保存到郵件列表中。郵件列表和普通郵件的主要區別在於訂閱機制和存檔機制,每個人都可以自由訂閱並查看歷史郵件。
自動構建工具buildbot的核心是一個作業調度系統,它會將任務排隊,當提供了任務所需的資源時,執行任務並報告結果。buildbot不僅僅支持持續集成及自動化測試,還支持應用程序的自動化部署和軟件發布的管理。同時在多個平台開發時,通常最后的編譯驗證都是重復的,編譯機器人(buildbot)將這一部分接管過來,每日自動下載代碼進行編譯驗證,並將安裝包上傳到文件服務器上,如果編譯失敗則將用郵件通知感興趣的人。
文檔管理工具WiKi的特點是具有開放性,可以讓任何參與人員非常方便地進行編輯、訪問和搜索。大多數軟件公司的軟件文檔均保存為二進制格式,在經過一段時間和人員流動之后,這些文檔就會成為固定的資料,因為它會被遺落在某個角落而無法找到,而OpenWrt社區的軟件開發文檔和使用手冊均保存到WiKi上。WiKi是一個協同寫作和分享平台,允許所有人修改頁面。WiKi使用簡化的語法來代替復雜的HTML語言,降低了內容維護的門檻。
Trac是一個集成WiKi和問題跟蹤管理系統的項目管理平台,可以幫助開發人員更好地管理軟件開發過程,從而開發出高質量的軟件。任何人都可以使用該系統來提交Bug並查詢當前的進展。Trac采用面向進度的項目管理模型,采用里程碑的方式來組織開發。里程碑是以ticket(問題)來組織的,所有的問題都解決了,就到達了里程碑。但社區並不完全遵從這個標准,因為其開發人員全部是志願者,通常到了一定時間會發布一個版本。
技術論壇是一個技術討論的平台,每個注冊用戶均可發帖參與討論。在開發過程中,每個新版本的說明通過該平台發布。
社區的運轉是通過以上所述的六大基礎設施工具來實現的,我們通過這些工具可以理解到,開源軟件和社區的精髓在於其開放性,任何人員均可以通過網絡自由地獲取其信息並參與其中,這樣可以激勵每個人貢獻出自己的力量,開發人員同時也從社區獲得回報。開源社區的工具大多都是相同的,掌握這些工具可以幫助你深入了解開源社區和OpenWrt。
OpenWrt技術上成功的秘訣在於:統一編譯框架、統一配置接口(Unified Configuration Interface,UCI)、開放的軟件包管理系統及其讀寫分區系統、系統總線ubus和進程管理模塊procd。
- 統一編譯框架使得數千個軟件以相同的方式進行編譯,並且可以在幾十個平台編譯。每個軟件模塊按照相同的步驟進行代碼下載、解壓縮、打補丁、配置、編譯及生成安裝包。
- 統一配置接口使得數千個軟件在幾十個平台上以相同的方式來存取配置數據,配置以統一格式的文本文件進行管理。
- 開放的軟件包管理系統和讀寫分區系統使得軟件管理非常方便,並且能夠方便地處理軟件包的依賴關系。讀寫分區系統可以自由地安裝軟件,而不像大多數專有系統需要全部重新編譯才能安裝新的軟件。
- 系統總線ubus。每個進程均可以注冊到系統總線上進行消息傳遞,並且提供命令行工具來訪問系統總線。
- 進程管理模塊procd。每一個進程交給procd來啟動,並在意外退出之后再次調用。
所有的這些功能並不是一次性設計出來的,而是隨着時間的推進,根據用戶和開發進展逐步發展起來的,每一種技術都有其獨特的價值。
那么怎樣向openwrt提交代碼呢?
參考作者的建議:如何貢獻代碼