2011年10月17日 星期一

osc (open build service command-line tool) 工作流程

目前 gcin 已經收錄在 M17N 計劃中
現在打算將他更新到 1.7.0
0. 您應該先註冊一個 obs 帳號,要安裝 osc ,請用
# zypper in osc

1. 先在自己的電腦上建立一個工作目錄,例如:work
$ mkdir work
$ cd work

2. 建立 M17N 計劃中 gcin 套件的分支,這個動作會在您的家計劃(home project)中
新增一個子計劃
$ osc branch M17N gcin
A working copy of the branched package can be checked out with:
osc co home:swyear:branches:M17N/gcin

上面的命令會回應分支套件已在您的子計劃(本例即為 home:swyear:branches:M17N/gcin)
依照上面的命令可以將此套件分支取回
3. 將套件分支抓到自己的電腦上
$ osc co home:swyear:branches:M17N/gcin
A home:swyear:branches:M17N/gcin
A home:swyear:branches:M17N/gcin/baselibs.conf
A home:swyear:branches:M17N/gcin/configure146p12.diff
A home:swyear:branches:M17N/gcin/gcin-1.6.9.tar.bz2
A home:swyear:branches:M17N/gcin/gcin-README.suse
A home:swyear:branches:M17N/gcin/gcin.changes
A home:swyear:branches:M17N/gcin/gcin.spec
A home:swyear:branches:M17N/gcin/gcin_scripts_modify-XIM_103.diff
A home:swyear:branches:M17N/gcin/gtk-im-path1697.diff
A home:swyear:branches:M17N/gcin/gtk3-path.diff
A home:swyear:branches:M17N/gcin/gtkimcontextgcin.c.diff
A home:swyear:branches:M17N/gcin/icon_path.diff
A home:swyear:branches:M17N/gcin/qt4_Makefile.diff
A home:swyear:branches:M17N/gcin/xim.d-gcin
A home:swyear:branches:M17N/gcin/xim.gcin.suse.template
At revision 21f47550a3618e8f0507b430b0d575c7.

這些檔案現在會在您工作目錄下,您就可以開始進行修改了
4. 進入 gcin 目錄中
$ cd home:swyear:branches:M17N/gcin/

5. 下載新版 gcin
$ wget http://www.csie.nctu.edu.tw/~cp76/gcin/download/gcin-1.7.0.tar.xz

6. 解開後,重新打包成 tar.bz2 的格式(這是為了支援較舊版本)
$ tar -Jxf gcin-1.7.0.tar.xz
$ tar -jcf gcin-1.7.0.tar.bz2 gcin-1.7.0

7. 我們要的就是 gcin-1.7.0.tar.bz2,把過程中產生的多餘東西移除,
順便也將舊的 1.6.9 原始碼移除
$ rm -r gcin-1.7.0 gcin-1.7.0.tar.xz gcin-1.6.9.tar.bz2

8. 將新增的加入,不見的移除(在套件原始碼中)
$ osc ar
A gcin-1.7.0.tar.bz2
D gcin-1.6.9.tar.bz2

上面顯示在本機電腦的變更(還沒上傳)
9. 修改 gcin.spec 檔,將版本號由 1.6.9 改成 1.7.0
如果新版和舊版差不了太多,沒動到原有的補釘,應該就沒什麼問題了
10. 編輯 changelog
$ osc vc

預設的編輯器是 vi(m),按 i 開始編輯,編輯完按 Esc,輸入 :wq 儲存離開
這些內容會存在 [套件名稱].change 的檔案
11. 接下來我們要將這些東西送回 open build service 您的家計劃的子計劃中編譯打包
所以您的電腦裡不需要有什麼一堆 devel 的套件
$ osc ci

這命令會用預設的編輯器(vim)顯示您編輯的 changelog 以及所作的變更,
像是新增刪除了哪些檔案,修改哪些內容...
檢查看看有沒有遺漏的,一樣用 :wq 離開,
就會開始傳送到 obs://home:swyear:branches:M17N/gcin
並且在 obs 上開始建構套件
12. 您可以用 osc bl 觀看建構的過程紀錄
$ osc bl
Valid arguments for this package are:

openSUSE_11.3 x86_64
openSUSE_11.3 i586
openSUSE_11.4 x86_64
openSUSE_11.4 i586
openSUSE_Factory x86_64
openSUSE_Factory i586
openSUSE_Tumbleweed i586
openSUSE_Tumbleweed x86_64
SLE_10 i586
SLE_10 x86_64
SLE_11 x86_64
SLE_11 i586
Missing arguments

因為 M17N 預設的套件庫繁多,您要指定一個來看
上面那些就是您可以選的,如果您要看 openSUSE_11.4 x86_64 的 build log
$ osc bl openSUSE_11.4 x86_64

這樣就可以看到在跑了(或跑完了)
如果沒問題,最後會是類似下面這樣:
...省略
build15 finished "build gcin.spec" at Mon Oct 17 16:25:43 UTC 2011.

[ 234.273275] SysRq : Power Off
[ 235.689372] Power down.
build_ extracting built packages...
gcin-1.7.0.0-3.1.x86_64.rpm
gcin-anthy-module-1.7.0.0-3.1.x86_64.rpm
gcin-branding-upstream-1.7.0.0-3.1.x86_64.rpm
gcin-chewing-module-1.7.0.0-3.1.x86_64.rpm
gcin-gtk3-immodule-1.7.0.0-3.1.x86_64.rpm
gcin-qt3-immodule-1.7.0.0-3.1.x86_64.rpm
gcin-qt4-immodule-1.7.0.0-3.1.x86_64.rpm
gcin-1.7.0.0-3.1.src.rpm

這就表示 OK 了
其他版本也請您檢查一下,
用瀏覽器連上 OBS 網站去看應該比較快

您也可以在上面網頁中找到下載連結,將編譯完成的檔案下載回來安裝測試
所以即使您不想回傳到原來的套件庫,您也可以用這種方法來自己修改套件
真的還蠻方便的
13. 如果情況沒這麼順利,從 build log 中找出問題所在,
在自己的電腦上修改--上傳--檢查,直到完成。
14. 一直搞不定怎麼辦:
基本上你作的是都是在您的電腦上,上傳也是在家計劃中,所以...
沒差,沒完成就沒完成,無法回傳到 M17N 而已
15. 最後我們要提出上傳到 M17N 的要求
$ osc sr
created request id 88249

這樣就會將您的要求送到 M17N 的維護者,靜候維護者檢視
如果接受的話就沒問題了,若被打回票,通常會告訴您理由
再修改吧
16. obs 用法您可以參考 obs --help
我其實也沒和他很熟...囧
openSUSE wiki 上也有一些說明,自行搜尋一下吧

沒有留言: