顯示具有 build service 標籤的文章。 顯示所有文章
顯示具有 build service 標籤的文章。 顯示所有文章

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 上也有一些說明,自行搜尋一下吧

2010年7月17日 星期六

安裝完 openSUSE 11.3 之後

這些都是我的習慣性動作,供各位參考
剛安裝完成:
寄件者 openSUSE 11.3

整理一下套件庫,把該新增的該修改的整理一下
寄件者 openSUSE 11.3

習慣上我只留著 Update 會自動重新整理
Debug 和 Source 我都停用
若遇到安裝檔案找不到時
再用 zypper ref 來重新整理
關於套件庫的一些觀念可以參考:
http://help.opensuse.org/ksuseinstall/
新增的套件庫如下:
myrepo.repo
[download.videolan.org-SuSE]
name=VideoLan Repository
enabled=1
autorefresh=0
baseurl=http://download.videolan.org/pub/videolan/vlc/SuSE/11.3/
path=/
type=rpm-md
keeppackages=0

[packman.inode.at-suse]
name=Packman Repository
enabled=1
autorefresh=0
baseurl=http://packman.inode.at/suse/11.3/
path=/
type=rpm-md
keeppackages=0

[subpixel]
name=subpixel
enabled=1
autorefresh=0
baseurl=http://opensuse-community.org/subpixel/openSUSE_11.3
path=/
type=rpm-md
keeppackages=0

[swyear]
name=swyear
enabled=1
autorefresh=0
baseurl=http://download.opensuse.org/repositories/home:/swyear/openSUSE_11.3
path=/
type=rpm-md
keeppackages=0

您可以用
# zypper ar myrepo.repo

來匯入上方的這些套件庫
或直接由網路上匯入:
# zypper ar http://dl.dropbox.com/u/6331820/myrepo.repo

接著開啟軟體管理,會有些自動加入的,就先裝一裝吧
寄件者 openSUSE 11.3

接下來您可以繼續用圖形介面搜尋安裝
但我比較喜歡用命令行

subpixel hinting
在液晶螢幕上讓反鋸齒字型更銳利清晰
若喜歡用點陣字就不必了
這程式可能會和某些特效衝突(以前遇過,忘了)
安裝時有時會要您確認變更廠商(供應商),就是要確認這個程式以後要用這個安裝來源
# zypper in --from subpixel freetype2-feature-subpixel-hinting
正在建立套件庫 'VideoLan Repository' 的快取 [完成]
正在建立套件庫 'Packman Repository' 的快取 [完成]
正在建立套件庫 'subpixel' 的快取 [完成]
正在建立套件庫 'swyear' 的快取 [完成]
正在載入套件庫資料...
讀取已安裝的套件...
正在解決套件相依性...

問題: freetype2-feature-subpixel-hinting-2.4.0-999.subpixel.19.1.i586 需要 libfreetype6 = 2.4.0-999.subpixel.19.1,但無法提供此需求
無法安裝的提供者: libfreetype6-2.4.0-999.subpixel.19.1.i586[subpixel]
解決方案 1:安裝 libfreetype6-2.4.0-999.subpixel.19.1.i586 (並變更廠商)
openSUSE --> obs://10.8.0.1/subpixel
解決方案 2:請勿安裝 freetype2-feature-subpixel-hinting-2.4.0-999.subpixel.19.1.i586
解決方案 3:藉由忽略某些它的相依性破壞 freetype2-feature-subpixel-hinting

使用'數字'選擇上列的解決方法,或取消(使用'c') [1/2/3/c] (c): 1
正在解析相依性...
正在解決套件相依性...

將會安裝下列新的套件:
freetype2-feature-subpixel-hinting

下列套件將會升級:
libfreetype6

下列套件將會變更供應商:
libfreetype6 openSUSE -> obs://10.8.0.1/subpixel


1 套件將升級, 1 新的, 1 將變更供應商.
全部下載大小: 355.0 KiB。 完成操作後,將釋出 120.0 KiB。
要繼續嗎? [y/n/?] (y): y

安裝完後要開啟次像素顯示
KDE 和 GNOME 都有圖形介面可用
寄件者 openSUSE 11.3

寄件者 openSUSE 11.3

若是 LXDE 或其他桌面,可以直接
# ln -s /etc/fonts/conf.avail/10-sub-pixel-rgb.conf /etc/fonts/conf.d/
# fc-cache

在這裡 10-sub-pixel-rgb.conf 要看您的螢幕是用那一種
可能會是 bgr, vrgb 或 vbgr
字型解析度依照您個人喜好調整
KDE 預設只有幾種選擇
若不滿意可以在 $HOME/.Xresources (通常沒這個檔案要自己產生)
自行設定
Xft.dpi: 112.0


libdvdcss
播放 DVD 會用到
# zypper in --from 'VideoLan Repository' libdvdcss
正在載入套件庫資料...
讀取已安裝的套件...
正在解決套件相依性...

將會安裝下列新的套件:
libdvdcss

1 新套件將被安裝.
全部下載大小: 18.0 KiB。 完成操作後,將增加 34.0 KiB 的使用。
要繼續嗎? [y/n/?] (y): y


Chinese
習慣上我會刪除 scim 安裝 gcin
pcmanx-gtk2 是為了方便上 BBS
chinese-fonts-setting 則是我個人的字型設定檔
例如我偏好使用 Droid Sans Fallback 來顯示中文
# zypper in gcin pcmanx-gtk2 chinese-fonts-setting -scim
正在載入套件庫資料...
讀取已安裝的套件...
正在解決套件相依性...

問題: scim-tables-0.5.8-257.1.i586 需要 libscim-1.0.so.8,但無法提供此需求
解決方案 1:下列行動將被執行:
反安裝 scim-tables-0.5.8-257.1.i586
反安裝 plasma-addons-scim-4.4.4-1.3.i586
反安裝 mlterm-scim-2.9.4-7.2.i586
反安裝 scim-bridge-0.4.15-121.1.i586
反安裝 scim-chewing-0.3.3-6.1.i586
反安裝 scim-input-pad-0.1.1-279.1.i586
反安裝 scim-m17n-0.2.2-235.1.i586
反安裝 scim-pinyin-0.5.91.20060705-272.1.i586
反安裝 scim-qtimm-0.9.4-278.1.i586
反安裝 scim-bridge-gtk-0.4.15-121.1.i586
反安裝 scim-bridge-qt-0.4.15-121.1.i586
反安裝 scim-tables-zh-0.5.8-257.1.i586
解決方案 2:保留 scim-1.4.7-174.1.i586
解決方案 3:藉由忽略某些它的相依性破壞 scim-tables

使用'數字'選擇上列的解決方法,或取消(使用'c') [1/2/3/c] (c): 1
正在解析相依性...
正在解決套件相依性...

將會安裝下列新的套件:
chinese-fonts-setting gcin pcmanx-gtk2

下列套件將會被移除:
mlterm-scim plasma-addons-scim scim scim-bridge scim-bridge-gtk
scim-bridge-qt scim-chewing scim-input-pad scim-m17n scim-pinyin scim-qtimm
scim-tables scim-tables-zh

3 新套件將被安裝, 13 將移除.
全部下載大小: 1.6 MiB。 完成操作後,將釋出 15.6 MiB。
要繼續嗎? [y/n/?] (y): y

下面是改用我的黑體字設定
刪除原本的文泉驛正黑體設定
# ln -s /etc/fonts/conf.avail/57-hei.conf /etc/fonts/conf.d/
# rm /etc/fonts/conf.d/57-wqy-zenhei.conf
# fc-cache


multimedia
下面大概是每個 openSUSE 使用者必用的
安裝多媒體支援
這裡是提供 KDE 使用者的
(GNOME 或 LXDE 等其他桌面通常把 gstreamer 相關套件裝上就 OK 了(packman))
# zypper in ffmpeg flash-player libxine1-codecs w32codec-all k3b-codecs lame
正在載入套件庫資料...
讀取已安裝的套件...
'flash-player' 已經安裝。
No update candidate for 'flash-player-10.1.53.64-2.1.1.i586'. The highest available version is already installed.
'libxine1-codecs' 已經安裝。
No update candidate for 'libxine1-codecs-1.1.18.1-2.pm.41.1.i586'. The highest available version is already installed.
正在解決套件相依性...

問題: k3b-codecs-2.0.0-1.pm.2.7.i586 需要 k3b = 2.0.0,但無法提供此需求
無法安裝的提供者: k3b-2.0.0-1.pm.2.7.i586[packman.inode.at-suse]
解決方案 1:安裝 k3b-2.0.0-1.pm.2.7.i586 (並變更廠商)
openSUSE --> http://packman.links2linux.de
解決方案 2:請勿安裝 k3b-codecs-2.0.0-1.pm.2.7.i586
解決方案 3:藉由忽略某些它的相依性破壞 k3b-codecs

使用'數字'選擇上列的解決方法,或取消(使用'c') [1/2/3/c] (c): 1
正在解析相依性...
正在解決套件相依性...

將會安裝下列新的套件:
ffmpeg k3b-codecs lame libavdevice52 libavfilter1 libavformat52 libjack0
libmad0 libstdc++33 libswscale0 w32codec-all

下列套件將會升級:
k3b

下列套件將會變更供應商:
k3b openSUSE -> http://packman.links2linux.de


1 套件將升級, 11 新的, 1 將變更供應商.
全部下載大小: 21.2 MiB。 完成操作後,將增加 51.2 MiB 的使用。
要繼續嗎? [y/n/?] (y): y


java-sun
習慣上還是使用 sun 的 java 比較不會出問題
順便把 openjdk 的移除
# zypper in java-1_6_0-sun-plugin -java-1_6_0-openjdk
正在載入套件庫資料...
讀取已安裝的套件...
正在解決套件相依性...

問題: java-1_6_0-openjdk-plugin-1.6.0.0_b17-7.3.i586 需要 java-1_6_0-openjdk = 1.6.0.0_b17-7.3,但無法提供此需求
解決方案 1:反安裝 java-1_6_0-openjdk-plugin-1.6.0.0_b17-7.3.i586
解決方案 2:保留 java-1_6_0-openjdk-1.6.0.0_b17-7.3.i586
解決方案 3:藉由忽略某些它的相依性破壞 java-1_6_0-openjdk-plugin

使用'數字'選擇上列的解決方法,或取消(使用'c') [1/2/3/c] (c): 1
正在解析相依性...
正在解決套件相依性...

將會安裝下列新的套件:
java-1_6_0-sun java-1_6_0-sun-plugin

下列套件將會被移除:
java-1_6_0-openjdk java-1_6_0-openjdk-plugin

2 新套件將被安裝, 2 將移除.
全部下載大小: 22.5 MiB。 完成操作後,將增加 4.0 MiB 的使用。
要繼續嗎? [y/n/?] (y): y


大部分的人會建議套件庫只要留下 oss, non-oss, update, packman 4個就OK 了
其他套件庫可以移除或停用

剛安裝好通常光碟還在,您可以這時將光碟的優先順序調高(預設都是 99)
例如調成 98 (數字愈小,愈優先使用)
這時來安裝一些其他在光碟中的套件會快速方便許多
例如我要安裝 kernel-devel gcc make 這些東西來安裝 nvidia 驅動程式
您可以參考之前的文章

完成的桌面:
寄件者 openSUSE 11.3


您可能會遇到的問題:
1. 在某些情況下,筆記型電腦的網路仍使用傳統 ifup 方式設定
請在 YaST 中改成 NetworkManager 方式控制
寄件者 openSUSE 11.3

2. 第一次開機 KDE 的 NetworkManager 是壞的,
得再重新登入一次才能連線
3. 觸控板的 Tap (在板上點擊)可能是停用的
請在控制中心啟用
寄件者 openSUSE 11.3

KDE GNOME LXDE 都有圖形介面可用
若無法儲存觸控板設定
試著在進入桌面時自動執行
synclient TapButton1=1 TapButton2=2


推薦網站:
http://omgsuse.com/

提醒:
http://software.opensuse.org 搜尋套件現在會預設排除 home project 和 debug 套件
寄件者 openSUSE 11.3


小技巧:
命令行加入 obs (openSUSE Build Service) 套件庫的簡寫法
zypper ar obs://home:swyear:ibus/openSUSE_11.3 ibus
正在新增套件庫 'ibus' [完成]
已成功新增套件庫 'ibus'
已啟用: 是
自動重新整理: 否
URI: http://download.opensuse.org/repositories/home:/swyear:/ibus/openSUSE_11.3


請參考:
http://opensuse-community.org/Welcome_to_openSUSE-Community.org

2009年7月10日 星期五

osc step by step

osc: openSUSE (build service) commander
是一個 openSUSE Build Service 命令列的客戶端工具
其實我跟他不太熟
但是 http://en.opensuse.org/Build_Service_Tutorial
http://en.opensuse.org/Build_Service/CLI
都有詳盡的說明
裏面有提到,如果您會用 svn 的話,使用 osc 會有賓至如歸的感受
(可惜我和 svn 也不熟)
我現在要依照第一個連結,一步一步跑一次
(我使用 commandline 的方法)
目的是在 M17N:Devel[1] 這個 Project[2] 底下建構 gcin 這個 Package
[註1]M17N (multilingualization) 是 openSUSE 的多國語言化計劃,
裏面蠻多都是關於CJK的,而
M17N:Devel 則是此計劃的測試區,詳情請參考
http://news.opensuse.org/2009/06/18/opensuse-factory-is-now-open/
[註2]Project 是 OBS 的專有名詞,每個申請了 openSUSE Build Service 的人,
都會有一個 home:YOUR-LOGIN-NAME 的 home project。package 就是指在 project 底下建構的套件。

前言請自己看
第一步:登入
先建立一個工作目錄,例如:~/OBS
$ cd ~/OBS
$ osc checkout M17N:Devel

(這個命令可簡化成 osc co ...)
如果您從未用過 osc,將會提示您輸入使用者名稱及密碼(當然是指 OBS 的)
這時候會在您的工作目錄下建立一個 M17N:Devel 的目錄
並且開始將 M17N:Devel project 中的內容抓到這個目錄底下
每個套件(package)就是一個子目錄
因為此計劃中已經有了其他的套件,所以要花一段時間才能完成
若您用自己的 home project,上面命令要改成
$ osc checkout home:YOUR_LOGIN_NAME

完成後,切換到 M17N:Devel 目錄下
$ cd M17N\:Devel/


第二步:建立新套件
我要建立 gcin 套件
$ osc meta pkg -e M17N:Devel gcin

此時會開啟您預設的文字編輯器請您填入
title 標題(請填入該套件的摘要 Summary),description(請填入套件的描述),
url 位址(請填入上游位址)
這樣就可以了
如果您沒有設定 EDITOR 的變數,會用 vim 來編輯
若不習慣用 vim,請在上面命令執行前先執行
$  export EDITOR=kwrite

(請將 kwrite 改成您自己習慣的純文字編輯器)
存檔之後,就會開始傳送資訊到 M17N:Devel
您可以用瀏覽器看到

接著只要執行
$ osc up

您的工作目錄就會從 M17N:Devel 更新
所以您的 M17N:Devel 目錄中也會多了一個 gcin 的目錄
現在切換到 gcin 目錄中
$ cd gcin

將您的 source[3] 通通複製到此
[註3]這裡的 source 其實是指程式的原始碼(通常打包成 tar.gz 或 tar.bz2 格式)、patches(修補)和 spec 檔
這是我的 gcin.spec 檔
#
# spec file for package gcin
#
# Copyright (c) 2009 SUSE LINUX Products GmbH, Nuernberg, Germany.
#
# All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise agreed
# upon. The license for this file, and modifications and additions to the
# file, is the same license as for the pristine package itself (unless the
# license for the pristine package is not an Open Source License, in which
# case the license is the MIT License). An "Open Source License" is a
# license that conforms to the Open Source Definition (Version 1.9)
# published by the Open Source Initiative.

# Please submit bugfixes or comments via http://bugs.opensuse.org/
#

# norootforbuild

%define release 1
%define prefix /usr
%define name gcin
%define version 1.4.6pre8
%define uversion 1.4.6.pre8


Summary: Gcin is a Chinese input method server
Name: %{name}
Version: %{version}
Release: %{release}
License: LGPL
Vendor: Edward Liu
URL: http://hyperrate.com/dir.php?eid=67
Group: System/I18n/Chinese
Source0: gcin-%{uversion}.tar.bz2
Source1: xim.d-gcin
Source2: gcin-README.suse
Source3: xim.gcin.suse.template
Patch0: configure145p2.diff
Patch1: gcin_scripts_modify-XIM_103.diff
Patch2: gcin_desktop_icon_path.diff
Patch3: qt4-im145p2.diff
Patch4: use_small_icons.diff
Patch5: gtk-im-path1437.diff
Patch11: sync_gcin-setup.diff

BuildRoot: %{_builddir}/%{name}-%{uversion}-root

BuildRequires: qt3-devel libjpeg-devel pkgconfig gtk2-devel libqt4-devel update-desktop-files
BuildRequires: chrpath anthy-devel
Requires: gtk2 >= 2.2.4
#Provides: locale(ja;zh)
PreReq: /usr/bin/touch
Docdir: %{prefix}/share/doc/packages

%description
gcin is a Chinese input method server for traditional Chinese.
It features a better GTK user interface.

%package devel
Summary: Gcin development package
Group: Development/Libraries/C and C++
Requires: %{name} = %{version}

%description devel
gcin development package contains the header files for gcin

%prep
%setup -n gcin-%{uversion}
%patch0
%patch1
%patch2
%patch3
%patch4
%patch5

%patch11 -p1

%build

CFLAGS="$RPM_OPT_FLAGS" %configure --prefix=/usr --use_xim='Y' --new_gtk_im='Y' --use_i18n=Y
make

%install

mkdir -p $RPM_BUILD_ROOT/etc/X11/xim.d/
install -m 644 $RPM_SOURCE_DIR/xim.d-gcin $RPM_BUILD_ROOT/etc/X11/xim.d/gcin

DESTDIR=$RPM_BUILD_ROOT make install
%suse_update_desktop_file gcin-setup System SystemSetup
pushd $RPM_BUILD_ROOT/etc/X11/xim.d/
for lang in en zh_TW zh_HK zh_CN zh_SG ; do
mkdir $lang
pushd $lang
ln -s ../gcin 30-gcin
popd
done
popd
chrpath -r /usr/%_lib/gcin ${RPM_BUILD_ROOT}%{_bindir}/gcin
chrpath -r /usr/%_lib/gcin ${RPM_BUILD_ROOT}%{_bindir}/sim2trad

%find_lang %{name}

%clean
rm -rf $RPM_BUILD_ROOT


%files -f %{name}.lang
%defattr(-,root,root)
%doc README.html Changelog.html COPYING AUTHORS
%doc $RPM_SOURCE_DIR/xim.gcin.suse.template
%doc $RPM_SOURCE_DIR/gcin-README.suse
%dir /etc/X11/xim.d/
%dir %{_libdir}/gcin
%dir %{_libdir}/menu
%dir %{_datadir}/control-center-2.0
%dir %{_datadir}/control-center-2.0/capplets
%dir %{_datadir}/gcin
%dir %{_datadir}/gcin/script
%dir %{_datadir}/gcin/table
%config /etc/X11/xim.d/*
%{_bindir}/*
%{_datadir}/gcin/table/*
%{_datadir}/gcin/script/*
%{_datadir}/man/man1/*
%{_datadir}/icons/*
%{_datadir}/pixmaps/gcin.png
%{_datadir}/applications/*
%{_datadir}/control-center-2.0/capplets/*
%{_libdir}/menu/*
%{_libdir}/gtk-2.0/*
%{_libdir}/qt3/plugins/inputmethods/*
%{_libdir}/gcin/*
%{_libdir}/qt4/plugins/inputmethods/im-gcin.so


%files devel
%defattr(-,root,root)
%{_includedir}/*

%post
/sbin/ldconfig
touch var/adm/SuSEconfig/run-gtk

%postun
/sbin/ldconfig
touch var/adm/SuSEconfig/run-gtk


%changelog
* Fri Jul 03 2009 - swyear@gmail.com
- 1.4.6:
- gtab 自動選字時,手動選字的問題。
- gtab shift+字母 改成大寫輸出
- .cin 現在支援 %flag_auto_select_by_phrase 選項,有了這個表示產生的 .gtab 會自動啟用由詞庫自動選字。gcin-setup 中可以強迫開啟or關閉。
- gtab 詞庫自動選字現可以用空白鍵送出編輯區的內容。
- pcmanx 無法顯示編輯區的問題。
- mozilla thunderbird 選單不正常的問題。
- 詞音注音選字時也可以用 mouse 選擇了。
- 如果 gtab 有指定保留大小寫的選項,則 CapsLock 輸入英數的功能自動關閉。
- 左鍵 click tray icon 改成中英切換,因為現在比較少用簡體輸出。有時候沒辦法使用 ctrl-space 切換中英時就可以用。簡體輸出改到右鍵的選單裡。
- GTK 程式 focus out 時現在會自動送出編輯區的內容。QT的程式目前還不行。
- Eclipse double click 會導致空白的問題。
- 在tray icon 按 Shift + 左鍵可以列出所有輸入法的選單。
- 詞音按 [] 輸入「」【】現在不需要按空白鍵。

你可以從上面看到 spec + sources + patches 共有12個檔案
有些是為了配合 openSUSE 輸入法啟動的方式所加的檔案與說明
有些則是因為 gcin 的 configure 和 Makefile 都是"手寫的",
所以要做一些修改來配合實際的路徑
有些則是 OBS 龜毛的要求
因此在我的 gcin 目錄中就必須要有這12個檔案
$ ls
configure145p2.diff gtk-im-path1437.diff
gcin-1.4.6.pre8.tar.bz2 qt4-im145p2.diff
gcin_desktop_icon_path.diff sync_gcin-setup.diff
gcin-README.suse use_small_icons.diff
gcin_scripts_modify-XIM_103.diff xim.d-gcin
gcin.spec xim.gcin.suse.template

然後執行
$ osc add *

將此目錄中所有檔案都加入,下次提交時就會上傳到 M17N:Devel
然後提交
$ osc commit

(或簡化為 osc ci)
會出現一個編輯視窗,請在虛線上方寫一下此次提交的摘要,例如:
First commit to M17N:Devel by swyear
存檔後就會開始上傳提交
當然這也要花上一陣子(甚至更久,因為用ADSL上傳速度通常較慢)

理論上應該進行第三步驟:加套件庫(就是你的套件要在哪個環境建構)
看看你有哪些可用的套件庫
$ osc ls

你會得到數百個
看來還是用 web 介面點一點好了
因為M17N:Devel已經將這方面處理好了,我不必去改它
若是您自己第一次用OBS,你就可能需要自己動手了

第四步驟:在OBS伺服器上開始建構(Build)
其實不必做什麼事,當OBS伺服器偵測到 source 有變化時
就會自動開始建構,當然,得要OBS有空時...
您也可以參考在本機上自行建構(我是不幹的啦)
建構好的套件會自動輸出到
http://download.opensuse.org/repositories/M17N:/Devel/
也就是說,你以後也可以從這個套件庫取得 gcin 了

然後我要寫封信到 opensuse-m17n@opensuse.org
說我新提交了一個新套件 gcin 到 M17N:Devel
介紹一下 gcin 並請大家測試檢查...
不過,現在OBS伺服器都很忙,也不知道何時才會建構完成
今天也太晚了,還是明天再說吧
今天的工作就到此告一段落了

2008年3月16日 星期日

[新聞轉貼]套件包裝日II-2008年4月4/5日

翻譯自 http://news.opensuse.org/2008/03/14/opensuse-packaging-days-ii-april-4th5th-2008/

在為您的最愛發行版本找尋您最愛的軟體套件時遭遇困難了嗎?您是一個應用程式開發者或某計劃的貢獻者,想要學習如何自動化為所有受歡迎的發行版本(包括 openSUSE)提供二位元套件嗎?

使用 openSUSE Build Service,您可以為大部份最受歡迎的發行版本提供套件。不用維護不同的系統來編譯建構套件,您可以享用 openSUSE Build Service 為您帶來的好處,讓他來為您做大部份的工作。

要學習如何操作這個建構平台,在 4 月 4 日和 5 日在 IRC 上加入 openSUSE 社群來淬鍊您的套件建構技術。 Packaging Days II 的活動將在 Freenode 的 #opensuse-buildservice 舉行。社群成員將會隨時待命以提供您支援及回答有關使用建構平台與包裝套件的問題。

找尋更多關於 Packaging Days II 的活動訊息,參考:
http://en.opensuse.org/Packaging/Packaging_Day(英文網頁)
http://zh_tw.opensuse.org/Packaging/Packaging_Days(中文網頁)

2008年3月11日 星期二

使用 openSUSE Build Service (以 LilyTerm 為例)

openSUSE Build Service (OBS) 可以讓您不用真的有機器就可以真的編譯打包套件
不過您得先註冊一個帳戶
先到 http://lilyterm.luna.com.tw/ 下載最新版的 lilyterm-0.7.6.tar.gz
您應該先解開看看裏面的說明
在 INSTALL 中可以看到此套件需要 libgtk2.0-dev 和 libvte-dev
(他們在 SUSE/openSUSE 中相對應的套件則是 gtk2-devel 和 vte-devel,
您可以用套件管理程式查一下就會知道)
安裝方法是直接進入 src/ 中 make 然後 make install
(沒有 configure 檔)

現在登入進入您的 Home Project

在 Build Repositories 旁的 + 按一下,選您要在哪個環境打包套件
包含了 SuSE 10.0 到 openSUSE Factory
Debian Etch
Fedora 6, 7, 8 ,CentOS 5
Mandriva 2006, 2007, 2008
xUbuntu 6.10, 7.04, 7.10

當然要 build deb 就不是像我下面所說的了
請參考 http://en.opensuse.org/Build_Service/Deb_builds
在 Packages 旁邊的 + 上按一下新增套件
填寫名稱和描述,核取下方建立 RPM SPEC 檔的模板

儲存後會自動進入此套件的頁面

把上游的 URL 填一下,然後在 lilyterm.spec 旁的 [Edit] 點一下進行修改

上面就是預設的樣板
將 Name: 改成 lilyterm
Version: 改成 0.7.6
Release: 維持 1
(OBS 會自己加上 release 的數字,如果 build 越多次(不管成功與否)數字就越大)
License: 改成 2-clause BSD-like license, see COPYING
BuildRequires: gtk2-devel vte-devel
加上一行
Source0: %{name}-%{version}.tar.gz
表示原始檔的名稱為 lilyterm-0.7.6.tar.gz (以後我們改 Version: 的地方就可以了)
Group: System/Terminals
Summary: 寫短一點
%description
可以寫長一點
在 %prep 下面加上
%setup 這樣會幫您解壓縮並切換到 %{name}-%{version} (也就是 lilyterm-0.7.6)的目錄下
%build 下面通常是加上 ./configure
不過因為 lilyterm 還沒提供 configure 所以依照 INSTALL 中所述
加上
cd src
make
%install 底下我通常填上 DESTDIR=$RPM_BUILD_ROOT make install
不過 lilyterm 的 Makefile 裏面沒有 DESTDIR 這個變數
而是指定安裝在 libdir 和 datadir 中
bindir = /usr/bin, datadir = /usr/share
而且 Makefile 不是放在 lilyterm-0.7.6 底下
所以要先切到 src 然後在 make 時指定 bindir 和 datadir 到 buildroot 下
還要先建立目錄
所以要改成
mkdir -p $RPM_BUILD_ROOT/usr/bin
mkdir -p $RPM_BUILD_ROOT/usr/share/pixmaps
cd src
make bindir=$RPM_BUILD_ROOT/usr/bin datadir=$RPM_BUILD_ROOT/usr/share install
在 %files 和 %defattr(-,root,root) 底下加上
%doc AUTHORS COPYING ChangeLog NEWS TODO README
雖然有些還是空白,以後總是會補上,所以還是列入文件中
INSTALL 是使用原始碼安裝的說明,對 rpm 安裝就沒用了
依照 Makefile 看來
install: 只會安裝 /usr/bin/lilyterm 和 /usr/share/pixmaps/lilyterm.png
所以在最下面加上
%_bindir/lilyterm
%_datadir/pixmaps/lilyterm.png
有時在這裡不知道有哪些檔案時,就先留白
rpm 會檢查哪些被安裝的檔案沒有被包進來
我們再從 Log 中找出來
最後可以順利 build 的 lilyterm.spec:
Name:           lilyterm
Version: 0.7.6
Release: 1
License: 2-clause BSD-like license, see COPYING
BuildRoot: %{_tmppath}/%{name}-%{version}-build
BuildRequires: gtk2-devel vte-devel
Source0: %{name}-%{version}.tar.gz
Group: System/Terminals
Summary: Ligth-weighted X terminal emulator

%description
A light and easy to use libvte based X Terminal Emulator

%prep
%setup
%build
cd src
make
%install
mkdir -p $RPM_BUILD_ROOT/usr/bin
mkdir -p $RPM_BUILD_ROOT/usr/share/pixmaps
cd src
make bindir=$RPM_BUILD_ROOT/usr/bin datadir=$RPM_BUILD_ROOT/usr/share install

%clean
rm -rf "$RPM_BUILD_ROOT"

%files
%defattr(-,root,root)
%doc AUTHORS COPYING ChangeLog NEWS TODO README
%_bindir/lilyterm
%_datadir/pixmaps/lilyterm.png


儲存後會回到 lilyterm 專案的頁面
然後按一下 [Add File]
上傳 lilyterm-0.7.6.tar.gz

上傳完後不用任何動作
OBS 偵測到變化會就會自行啟動

您可以到 [Build Log] 中看它運作
正如我們在自己的電腦上編譯一樣

您最好保佑能成功,因為每重作一次
OBS 就會重新建立一個虛擬機器(Xen)
加上常常排不到機器
所以...(這就是所謂的用時間換取(磁碟)空間嗎?)
上面的 lilyterm.spec 可以在 openSUSE 10.3 上 build
(這時差不多已經 build 10次了,前面有注意事項的都是代表一次失敗)
(怪自己太肉腳)
但是 10.2, 10.1 ... 其他都不行
+ /bin/mkdir -p /var/tmp
+ /bin/mkdir /var/tmp/lilyterm-0.7.6-build
+ cd lilyterm-0.7.6
+ cd src
+ make -I/opt/gnome/include
gcc -c menu.c `pkg-config --cflags gtk+-2.0`
In file included from menu.c:26:
menu.h:30:21: error: vte/vte.h: No such file or directory
make: *** [all] Error 1
error: Bad exit status from /var/tmp/rpm-tmp.76634 (%build)

因為10.2 之前的版本 vte/vte.h 在 /opt/gnome/include/
不知怎麼傳參數進去
只好改 Makefile 了(亂改一下試試看)
$ cd lilyterm-*/src
$ cp Makefile Makefile-orig

然後修改 Makefile

`pkg-config --cflags gtk+-2.0`

改成
$(CFLAGS) `pkg-config --cflags gtk+-2.0`

增加一個 CFLAGS 的變數
再將 install: 中的敘述依照上面所說修改
增加一個 DESTDIR 的變數
在 lilyterm-* 目錄下建立 diff 檔案
$ diff -uN src/Makefile-orig src/Makefile > Makefile.diff


Makefile.diff
--- src/Makefile-orig    2008-03-07 23:05:25.000000000 +0800
+++ src/Makefile 2008-03-11 09:26:41.000000000 +0800
@@ -4,11 +4,11 @@

.PHONY: all
all: main.h main.c notebook.h notebook.c config.h config.c menu.h menu.c
- gcc -c menu.c `pkg-config --cflags gtk+-2.0`
- gcc -c config.c `pkg-config --cflags gtk+-2.0`
- gcc -DIM_PATCH -c notebook.c `pkg-config --cflags gtk+-2.0`
- gcc $(INCLUDES) -c main.c `pkg-config --cflags gtk+-2.0`
- gcc -o lilyterm main.o notebook.o config.o menu.o `pkg-config --cflags --libs gtk+-2.0 vte`
+ gcc -c menu.c $(CFLAGS) `pkg-config --cflags gtk+-2.0`
+ gcc -c config.c $(CFLAGS) `pkg-config --cflags gtk+-2.0`
+ gcc -DIM_PATCH -c notebook.c $(CFLAGS) `pkg-config --cflags gtk+-2.0`
+ gcc $(INCLUDES) -c main.c $(CFLAGS) `pkg-config --cflags gtk+-2.0`
+ gcc -o lilyterm main.o notebook.o config.o menu.o $(CFLAGS) `pkg-config --cflags --libs gtk+-2.0 vte`
strip lilyterm

.PHONY: no-im-patch
@@ -28,8 +28,10 @@

.PHONY: install
install:
- install lilyterm $(bindir)
- install ../data/lilyterm.png $(datadir)/pixmaps
+ mkdir -p $(DESTDIR)$(bindir)
+ mkdir -p $(DESTDIR)$(datadir)/pixmaps
+ install lilyterm $(DESTDIR)$(bindir)
+ install ../data/lilyterm.png $(DESTDIR)$(datadir)/pixmaps

.PHONY: uninstall
uninstall:


接下來順便修改 lilyterm.desktop 的內容
讓所有的終端機都放在同一個選單目錄中
lilyterm.desktop.diff
--- data/lilyterm.desktop-orig    2008-03-04 15:43:17.000000000 +0800
+++ data/lilyterm.desktop 2008-03-10 17:11:35.000000000 +0800
@@ -9,4 +9,4 @@
Icon=lilyterm
Type=Application
Terminal=false
-Categories=GTK;Utility;TerminalEmulator;
+Categories=System;TerminalEmulator;

將這個兩個檔案傳到 OBS 上,

修改 lilyterm.spec
加上 Patch0: Makefile.diff
Patch1: lilyterm.desktop.diff
在 %setup 下加上 %patch0 和 %patch1
在 %build 部份 make 加上 CFLAGS='-I/opt/gnome/include'
並修改 %install
安裝 lilyterm.desktop
在 %files 中加入 lilyterm.desktop
Name:           lilyterm
Version: 0.7.6
Release: 1
License: 2-clause BSD-like license, see COPYING
BuildRoot: %{_tmppath}/%{name}-%{version}-build
BuildRequires: gtk2-devel vte-devel
Source0: %{name}-%{version}.tar.gz
Patch0: Makefile.diff
Patch1: lilyterm.desktop.diff
Group: System/Terminals
Summary: Ligth-weighted X terminal emulator

%description
A light and easy to use libvte based X Terminal Emulator

%prep
%setup
%patch0
%patch1
%build
cd src
make CFLAGS='-I/opt/gnome/include'
%install
mkdir -p $RPM_BUILD_ROOT/usr/share/applications
install data/lilyterm.desktop $RPM_BUILD_ROOT/usr/share/applications
cd src
make DESTDIR=$RPM_BUILD_ROOT install

%clean
rm -rf "$RPM_BUILD_ROOT"

%files
%defattr(-,root,root)
%doc AUTHORS COPYING ChangeLog NEWS TODO README
%_bindir/lilyterm
%_datadir/pixmaps/lilyterm.png
%_datadir/applications/lilyterm.desktop

如此便可以順利在 10.2 和 10.3 編譯
至於 10.1 和之前版本,則出現下面錯誤
+ cd src
+ make CFLAGS=-I/opt/gnome/include
gcc -c menu.c -I/opt/gnome/include `pkg-config --cflags gtk+-2.0`
gcc -c config.c -I/opt/gnome/include `pkg-config --cflags gtk+-2.0`
gcc -DIM_PATCH -c notebook.c -I/opt/gnome/include `pkg-config --cflags gtk+-2.0`
notebook.c: In function 'edit_page_label_dialog':
notebook.c:213: warning: passing argument 1 of 'gtk_entry_set_text' from incompatible pointer type
gcc -DICONDIR=\"/usr/share/pixmaps\" -c main.c -I/opt/gnome/include `pkg-config --cflags gtk+-2.0`
gcc -o lilyterm main.o notebook.o config.o menu.o -I/opt/gnome/include `pkg-config --cflags --libs gtk+-2.0 vte`
notebook.o: In function `add_page':
notebook.c:(.text+0x25c): undefined reference to `gtk_notebook_set_tab_reorderable'
notebook.c:(.text+0x28d): undefined reference to `gtk_notebook_set_tab_detachable'
collect2: ld returned 1 exit status
make: *** [all] Error 1
error: Bad exit status from /var/tmp/rpm-tmp.7184 (%build)

看起來不是加上編譯參數就能解決的了