openEuler是一個開源、免費的Linux發行版平臺,將經過開放的社區形式與全球的開發者共同構建一個開放、多元和架構包容的軟件生態體系。同時,openEuler也是一個創新的平臺,鼓勵任何人在該平臺上提出新想法、開拓新思路、實踐新方案。html
安裝界面:linux
openEuler的官方網站: https://openeuler.org/ios
repo 下載地址: https://repo.openeuler.orggit
文檔手冊:https://openeuler.org/zh/docs/20.03_LTS/docs/Releasenotes/release_notes.htmlgithub
說明:golang
openEuler 創新版本(非LTS)openEuler LTS版本版本定位構築開發者生態,新特性活躍,版本演進快支持合做夥伴構築商業發行版發佈週期0.5年2年維護週期0.5年4年 or more質量標準低,對標fedora質量要求中,對標centos質量要求關鍵工做新特性、bugfix、CVE、升級選型等有限特性、bugfix、CVE對應分支當前無,下一個版本openEuler-20.09最新分支openEuler-20.03LTSweb
openEuler構建模型:docker
版本如何構建:centos
說明:安全
名字說明備註碼雲 openuler Group這個組織下存放的都是由openEuler社區發起的原生項目,至關於一個一個的上游社區。例如isula、atune項目。https://gitee.com/openeuler碼雲 src-openeuler Group這裏存放的是以rpm 源碼形式的代碼。每一個倉庫源碼均可以直接構建rpm二進制。https://gitee.com/src-openeulerOBSopen build service,opensuse發佈的一套開源構建系統,相似於koji、yacto等。https://build.openeuler.orghttps://openbuildservice.orgjenkinsCI/CD,持續集成平臺,主要用於門禁任務、版本構建任務調度等http://114.116.250.98/repo用於歸檔發佈的交付件及yum 軟件源。https://repo.openeuler.org/
最直觀的方式是訪問openEuler官方repo,看看發佈件。
發佈件構建工具Repo歸檔地址ISO:Dvd ISO 、Debuginfo ISOEverything ISOSource ISOmkdvdiso(待開源)、 kiwihttp://repo.openeuler.org/openEuler-20.03-LTS/ISOQcow2鏡像CreateImage(待開源)http://repo.openeuler.org/openEuler-20.03-LTS/docker_img容器鏡像kiwihttp://repo.openeuler.org/openEuler-20.03-LTS/virtual_machine_imgLiveCD ? …
另一種方式,就是訪問openEuler OBS上的構建工程,能夠知道每一個版本里包含哪些軟件,當前的構建狀態是啥樣的。
版本OBS工程說明約束地址master主幹openEuler:Factory(新包引入)新軟件加入,首先引入到openEuler軟件工場,master分支代碼構建rpm,不會集成到iso或repo中https://build.openeuler.org/project/show/openEuler:Factory openEuler:Mainline主線工程,master分支代碼裏面涉及的包都會隨着openEuler的版本發佈https://build.openeuler.org/project/show/openEuler:MainlineLTS版本openEuler:20.03:LTSLTS版本構建工程,openeuler-20.03-LTS分支代碼 https://build.openeuler.org/project/show/openEuler:20.03:LTS20.09版本(未拉分支)--- ---
openeuler源碼倉庫管理:
groupopeneulersrc-openeuler定位代碼倉、原生社區軟件包倉、製品倉內容openEuler發起的原生項目spec rpm格式歸檔的軟件包倉庫URLhttps://gitee.com/openeulerhttps://gitee.com/src-openeuler倉庫數量50+2500+代碼管理源碼樹src rpm格式關係是src-openeuler的上游社區
當前openEuler 軟件的管理是以sig組來承載,全部的軟件惟一的歸屬於某個sig。經過sigs.yaml文件,你能夠查詢到該軟件屬於哪一個sig,並經過sigs專有歸檔目你能夠查詢對應的maintainer。只有對應的maintainer纔有對應倉庫代碼合入權限。
openeuler/community倉庫下,如下三個文件比較重要:
sig/sigs.yaml 管理和維護各sig下維護的軟件包,劃分sig管理的軟件包範圍。
repository/openeuler.yaml openeuler下維護的軟件包倉庫信息。
repository/src-openeuler.yaml) src-openeuler下維護的軟件包倉庫信息。
經過修改這幾個文件,來新增、刪除軟件包倉庫,來給相應的軟件包劃分sig,從而實現sig的owner對軟件包的權限管理。
SIG就是Special Interest Group的縮寫,openEuler社區按照不一樣的SIG來組織,以便於更好的管理和改善工做流程。
openEuler SIG 維護策略
上圖是openEuler社區開發指引圖。
說明:
全景圖中涉及的規範:
階段動做規範或指導引入
指導:《如何申請SIG》 --待輸出--
規範:《軟件包引入和退出要求》指導:《openEuler加包指導》 --待輸出--
規範:《軟件包打包規範》開發&維護
規範:《軟件包升級選型規範》 --待輸出--
指導:《軟件包打包規範》
規範:《軟件包打包規範》指導:《如何提交PR、發起檢視及合入驗證》 --待輸出--
規範:《openEuler漏洞處理流程》規範:《openEuler漏洞嚴重性評估》指導:《如何申請CVE、漏洞上報》
規範:《openEuler軟件包隨版本發佈規範》 --待輸出--指導:《如何將軟件包加入openEuler發佈版本》--待輸出--
規範:《安全漏洞處理和發佈流程》退出
規範:《軟件包引入和退出要求》
第一步,開源並不意味者爲所欲爲,簽署CLA:「貢獻者許可協議」是第一步,閱讀並遵照openEuler社區的行爲守則;
第二步,從瞭解、安裝、使用、測試openEuler開始,積極反饋問題和建議,相關的文檔和手冊,以及相關的資訊能夠幫助你更加深刻的瞭解openEuler。
第三步,開發者熟悉社區的開發流程後——《貢獻者指南》,能夠基於本身感興趣的項目和軟件,在碼雲上openEuler對應的項目提交本身的貢獻。
建議:
包括但不限於:
結合前面的開發者全景圖,能夠分解成如下動做:
當你提交一個PR的時候,就意味您已經開始給社區貢獻代碼了。請參考openEuler社區PR提交指導 與 碼雲PR提交流程。
注意事項:
/lgtm
來給出ok的意見。/approve
的評論會觸發robot自動合入,若是存在衝突,你須要提早解決衝突。git commit --amend; git push -f
來在同一個PR更新PR。檢視代碼:
openEuler是一個開放的社區,咱們但願全部參與社區的人都能成爲活躍的檢視者。能夠參考社區成員,該文檔描述了不一樣貢獻者的角色職責。
對於貢獻者,爲了使您的提交更容易被接受,您須要:
對於檢視者,強烈建議本着行爲準則,超越自我,相互尊重和促進協做。《補丁審覈的柔和藝術》一文中提出了一系列檢視的重點,說明代碼檢視的活動也但願可以促進新的貢獻者積極參與,而不會使貢獻者一開始就被細微的錯誤淹沒,因此檢視的時候,能夠重點關注包括:
注意:若是您的PR請求沒有引發足夠的關注,能夠在SIG的郵件列表或dev@openeuler.org求助。
這裏是一個可供參考的示例。
stateDiagram
[*] --> 查找sig列表
查找sig列表 --> 加入SIG : 已存在
查找sig列表 --> 按模板提交PR : 不存在
按模板提交PR --> 訂閱郵件,申請議題
訂閱郵件,申請議題 --> TC評審
TC評審 --> 合入PR : 評審經過
TC評審 --> 按模板提交PR : 不經過
合入PR --> [*]
加入SIG --> [*]
SIG列表: gitee.com/openeuler/community/tree/master/sig
TC郵件列表:gitee.com/openeuler/community/tree/master/zh/technical-committee
PR模板: gitee.com/openeuler/community/tree/master/sig/sig-template
提交示例: gitee.com/openeuler/community/pulls/398
找到您感興趣的SIG或項目
找到您感興趣的SIG組,能夠幫助您在正確的地方提出問題,並獲得更快的社區響應。
README.md
文件中,能夠找到該項目所屬的SIG信息、交流方式、成員和聯繫方式等。若是上述兩種方式都定位不到您感興趣的SIG,您能夠向community@openeuler.org發求助郵件。建議您在郵件列表內用「【開發過程疑問】」做爲標題,在內容中寫出你尋找的SIG或項目的特徵,咱們會爲您提供幫助。
肯定好你要建立小組後,能夠按照模板建立一個新的sig目錄,並提交 PR 到 community倉庫,並在TC例會上申請議題(訂閱tc@openeuler.org,並關注議題收集的郵件),通過你們一致贊成後,合入PR,就表明sig創立成功。
這裏是一個PR提交創立sig-golang的具體例子,包括sig的raodmap、職責、管理的倉庫(也許是從別的sig中移交過來)、聯繫方式和maintainer等信息。
stateDiagram
[*] --> 查找軟件
查找軟件 --> [*] : 已存在
查找軟件 --> 引入軟件 : 不存在
引入軟件 --> 肯定所屬SIG
肯定所屬SIG --> SIG是否存在
SIG是否存在 --> 建立SIG興趣小組 :不存在
SIG是否存在 --> 對應SIG下添加倉庫 :存在
對應SIG下添加倉庫 --> 評審合入
評審合入 --> [*]
當前發現openEuler社區缺乏你須要的軟件時,你能夠嘗試動手爲社區貢獻軟件包。這裏再也不贅述OS是如何由linux軟件包組成的,以及如何製做一個rpm包。這裏着重講解貢獻軟件包的流程。
這兩片文章幫助你瞭解obs的基本使用。如何使用 openEuler OBS - (一)介紹 和如何使用 openEuler OBS - (二)與gitee的聯動
OBS是Open Build Service 的簡寫(官方網址:https://openbuildservice.org/),
本來是做爲發行版openSUSE專用的rpm打包的平臺,後續擴展爲面向多發行版、多架構、多格式的打包發佈平臺。
與koji的不一樣
與koji只管理包(包括源碼包與二進制包)倉庫不一樣,OBS同時管理着源碼與包兩個倉庫。koji是從一個包編譯完成後開始接手,根據包的NVR(Name-Version-Release)肯定包的位置,在編譯驗證後入庫保存。而OBS是從源碼階段開始管理,它擁有本身的包版本標記與changelog日誌。OBS能夠像git同樣保存源碼的歷史版本,對源碼進行分支管理。並生成各版本的二進制包與源碼包。
換句話說,OBS能夠同時實現koji和git的功能。 > OBS接受源碼的格式與git廣泛的保存格式並不相同,因此OBS沒法徹底取代git。
OBS能夠生成rpm、deb等格式的包,而koji只適用於rpm格式。
方便測試框架、構建工程調用。
安裝osc
osc是OBS的命令行程序,您能夠在這裏 ,選擇本身的系統版本,添加軟件源到自身包管理器中。
這裏以Fedora30爲例:
將文件http://download.opensuse.org/repositories/openSUSE:/Tools/Fedora_30/openSUSE:Tools.repo
另存到/etc/yum.repo.d/中。 > 須要root權限。
執行 dnf install osc
命令安裝osc。
配置openEuler的OBS
有不少方法能夠將osc連接至openEuler外網的OBS:
osc
命令時添加參數: -A http://openeuler-build.huawei.com/
alias iosc="osc -A http://openeuler-build.huawei.com/"
home
目錄下的osc配置文件:vi ~/.oscrc
,並寫入如下內容:註冊OBS帳號
打開 http://openeuler-build.huawei.com/,點擊右上角「Sign Up」,註冊本身喜歡的賬號。
註冊完成後,從新回到上面網址。點擊右上角的「Login」,用新帳戶登陸。系統會在註冊時自動建立一個以「home:用戶名」爲格式命名的Home Project。
後續須要郵箱向infra@openEuler.org申請。
osc help 是幫助指南。相似git命令。
List Existing Content on the Server
osc ls #list projects
osc ls Apache #list packages in a project
osc ls Apache flood #list files of package of a project
Checkout Content
osc co Apache # entire project
osc co Apache flood # a package
osc co Apache flood flood.spec # single file
Update a Working Ddirectory
osc up
osc up [directory]
osc up * # from within a project dir, update all packages
osc up # from within a project dir, update all packages AND check out all newly added packages
Upload Changed Content
osc ci # current dir
osc ci [file1] [file2] # only specific files
osc ci [dir1] [dir2] ... # multiple packages
osc ci -m "updated foobar" # specify a commit message
Check the Commit Log
osc log
Show the status (which files have been changed locally)
osc st
osc st [directory]
If an update cannot be merged automatically, a file is in 'C' (conflict) state, and conflicts are marked with special lines. After manually resolving the problem, use osc resolved *FILE*
.
Mark files to be Added or Removed on the Next Checkin
osc add foo
osc rm foo
Add all New Files in Local Copy and Removes all Disappeared files
osc addremove
Generate a diff to view the changes
osc diff [file]
Show the Build Results of the Package
osc results
osc results [platform]
Show the Log File of a Package
(you need to be inside a package directory)
osc buildlog [platform] [arch]
在本地機器上構建
osc build [platform] [arch] [specfile] [--clean|--noinit|...]
以abuild用戶進入chroot環境,方便調試
osc chroot [platform] [arch]
配置Project
兩種方法:網頁操做、命令行操做
在obs主頁點擊右上角
依次進入 Home Project -> Repositories -> Add from a Distribution 。
按上圖所示填寫基礎配置,並在Name欄填寫喜歡的名字。
在選擇後後退至Repositories界面,能夠看到以下圖所示的環境:
執行命令: osc meta prj -e [project名]
,會看到相似以下文本:
其中, 1. repository標籤爲倉庫標籤, 可添加此項添加編譯時的基礎環境 2. Path標籤爲可用包路徑標籤, 需手動添加發行版包路徑。如須要額外依賴, 也能夠單獨添加。 3. Arch標籤爲編譯架構, 可同時添加多個。
例如:
`
xml
<repository name="openEuler_selfbuild_BaseOS_beiyong_aarch64">
<path project="openEuler:selfbuild:BaseOS" repository="mainline_standard_aarch64"/>
<path project="openEuler:selfbuild:BaseOS" repository="standard_aarch64"/> //此爲額外添加依賴
<arch>aarch64</arch>
<arch>armv7l</arch> //此爲多架構選項
</repository>
`
新建包
進入Project目錄: cd [project名]
新建Package: osc mkpac [package名]
進入Package目錄並將下載源碼以【tar包、全部patch、spec文件、其餘source文件】格式放置:
向新建立的package中添加以上文件: osc add *
將更改上傳至服務器: osc commit
在這裏能夠註明本次上傳的簡短介紹,用:wq
保存並退出
以後就能夠在網頁上等待編譯並查看結果了。
查看包狀態與下載包
您能夠在Project與Package主頁右側看到當前編譯狀態
finished
表示在某個系統平臺執行編譯連接、安裝檢查的過程結束succeeded
狀態爲編譯成功failed
爲編譯失敗,您能夠點擊查看日誌您能夠點擊_編譯平臺 -> Go to download repository_ 到達編譯倉庫,得到此Project的repo源與全部編譯成功的package。
更新包
進入project文件夾: cd [project名]
更新本地代碼爲最新代碼: osc up
進入package目錄,使用 osc add
命令將新文件添加到package,修改spec文件後使用osc commit
命令上傳新版本。
分爲兩部分:
Source Services 相關
Source Services 是用於以可靠方式驗證,生成或修改源的工具。它們被設計爲最小的工具,而且能夠按照經典UNIX設計的強大思想進行組合。
源服務就像是系統中的函數,咱們能夠經過運行腳本調用它;而腳本就是Package中的_service文件。
建立使用源服務的Package
編輯_service文件
最基礎的_service文件將會以下所示:
<services>
<service name="tar_scm">
<param name="scm">git</param>
<param name="url">git://github.com/cs2c-fu/hi.git</param>
</service>
<service name="recompress" mode="buildtime">
<param name="compression">xz</param>
<param name="file">*.tar</param>
</service>
<service name="set_version" mode="buildtime"/>
</services>
最外層爲標記,在
內則爲一個個函數,而
則爲``函數的參數。
爲了實現「利用源服務直接獲取git源碼並編譯成包」這個目標,
咱們的_service應該相似於這樣(如下格式請根據具體狀況選擇合適的順序):
<services>
<service name="tar_scm">
<param name="scm">git</param>
<param name="filename">helloworld</param>
<param name="url">git://github.com/cs2c-fu/hi.git</param>
<param name="versionprefix">VERSION.git</param>
</service>
<service name="extract_file">
<param name="archive">.</param>
<param name="files">/.spec /.patch</param>
</service>
<service name="recompress" mode="buildtime">
<param name="compression">xz</param>
<param name="file">*.tar</param>
</service>
<service name="set_version" mode="buildtime"/>
</services>
下面將對所需的服務逐一進行介紹:
第一個服務:tar_scm
tar_scm 會將連接 url 中的倉庫下載下來並打包爲 tar 文件,文件包命名格式爲:
[Name]-[Version].[commit_timestamp].tar
其中,[commit_timestamp]爲 commit 十六進制時間戳。
可選參數:
在OBS官方服務器中, tar_scm 服務因爲在空間利用率上表現不佳, 已被 obs_scm、tar 服務取代,但openEuler的外網OBS暫時還不支持obs_scm,因此這裏選擇 tar_scm 。
詳見: 連接
第二個服務:extract_file
extract_file 能夠從tar包中提取文件, 具體須要提取什麼文件取決於git倉庫中的文件格式。
通常來講咱們能夠將打包須要的內容分爲四大類:
對於git倉庫來講,通常會將全部文件放到倉庫的根目錄。
此時咱們須要將spec文件、patch文件、源文件提取出來, 源碼則留在tar包中等待以後的服務將其壓縮打包。
對於OBS倉庫來講,爲了方便OBS系統使用,人們已經對源碼進行壓縮打包。
此時咱們須要將全部文件提取出來並省略以後的壓縮打包環節。
參數:
第三個服務:recompress
recompress 會對指定文件進行壓縮
參數:
第四個服務:set_version
會將spec文件中的Version替換爲obs_scm時的
[Version].[commit_timestamp]
spec文件中能夠以
helloworld-%{version}.tar.xz
格式定位源碼包。
等待編譯完成
因爲使用源服務獲取源碼,因此編譯時須要額外過程與時間。
當狀態顯示爲 blocked 時, 代表源服務正在運行。當源服務運行完畢時會正常開始打包過程。
個人參考案例:連接
Source Services 在實際場景中的應用
在oVirt-SIG組中,咱們應用了源服務實現代碼由git到OBS的同步。
首先,咱們在git倉庫中以:spec文件、patch文件、 源碼tar包** 的格式上傳並管理源碼。
在OBS系統中創建對應包並以一下格式定義_service文件:
<services>
<service name="tar_scm">
<param name="scm">git</param>
<param name="filename">ioprocess</param>
<param name="url">https://gitee.com/openkylin/i...</param>
</service>
<service name="extract_file">
<param name="archive">.</param>
<param name="files">/</param>
</service>
</services>
因爲咱們已經很好的在git倉庫中設置了存儲格式, 此時咱們只需將全部文件下載並提取便可。
在這以後,OBS系統會幫助咱們完成編譯與打包的環節。
在寫此文時,OBS系統還不支持gitee格式的webhook,因此如下內容爲使用github倉庫實現。
obs能夠建立令牌(token),當令牌被觸發時,OBS會運行源服務。
將網址與令牌添加到git倉庫的webhook列表中,就能夠在git倉庫中實現觸發源服務,進而更新OBS中的包版本。
具體步驟:
建立專屬包的OBS Token(OBS令牌):
osc token --create <PROJECT> <PACKAGE>
命令將生成僅對Project/Package生效的token。
osc token
能夠查看當前生效的令牌列表。osc token --delete
能夠刪除令牌打開git倉庫網址(以github爲例):
打開倉庫 -> Setting -> Webhooks
點擊左上方的 Add webhook 。
在 Payload URL中以:
http://openeuler-build.huawei...;令牌ID>
爲格式填入。
在 Secret 中填入令牌祕匙,按需求選擇trigger類型, 保證Webhook爲Active狀態。
以後點擊 Add webhook 即成功實現。
可嘗試觸發trigger以驗證成果。
添加小助手 openEuler,加入openEuler交流羣
更多內容,敬請關注openEuler公衆號