它更新速度之快實在令人驚嘆...
但很可惜的,它尚未能進入 Debian 之中。
而有在包 GCIN 的 deb 檔案的阿信大報效國家去了,
有時未能將它及時更新到最新版,
所以興起了自己來包 deb 檔案的念頭。
如果您想要自行包 deb 檔案,
您可以參考以下數篇文章:
Debian 無痛起步法( 線上最新版): 自己動手製作.deb ...
deb 檔案製作
Debian New Maintainers' Guide
Debian新维护人员手册
不過我們這次首重在實作。
首先,安裝以下編輯 Deb 檔案時所需的套件:
- 代碼: 選擇全部
gcc g++ g77 make patch pkg-config dpkg-dev debhelper devscripts dh-make fakeroot lintian
並設定以下環境變數:
- 代碼: 選擇全部
export DEBFULLNAME="Tetralet"
export DEBEMAIL="tetralet@pchome.com.tw"
然後,去 http://www.csie.nctu.edu.tw/~cp76/gcin/ 下載所需的原始程式。
解開後的目錄名稱為 gcin-0.8.3,剛好符合 Debian 的命名規則。
好,進入原始碼目錄中,下達 dh_make:
- 代碼: 選擇全部
dh_make
Type of package: single binary, multiple binary, library, or kernel module?
[s/m/l/k] s
Maintainer name : Tetralet
Email-Address : tetralet@pchome.com.tw
Date : Sun, 27 Feb 2005 09:52:41 +0800
Package Name : gcin
Version : 0.8.3
Type of Package : Single
Hit <enter> to confirm:
Done. Please edit the files in the debian/ subdirectory now. gcin
uses a configure script, so you probably don't have to edit the Makefiles.
由於我們這只是一個簡單的小套件,所以我們在此選擇了 single。
它會在原始碼目錄中新增一個名為 debian 的子目錄,裡面有一些製作 deb 檔案時所需的設定檔。
先稍稍 ./configure 了一下,
我們發現我們還需要 xlibs-dev libgtk2.0-dev 這兩個套件,
所以我們將它們安裝了起來。
接下來,編輯 debian/control,Debian 套件資訊如下:
- 代碼: 選擇全部
Source: gcin
Section: utils
Priority: optional
Maintainer: Tetralet <tetralet@pchome.com.tw>
Build-Depends: debhelper (>= 4.0.0), xlibs-dev, libgtk2.0-dev
Standards-Version: 3.6.1
Package: gcin
Architecture: any
Depends: ${shlibs:Depends}, ${misc:Depends}
Description: A gtk2 based Chinese input server in X11
GCIN is a gtk2 based Chinese input server in X11.
It supports:
* Auto guess the next character you may type.
* Offered a punctuations window for fast input.
* You are able to fix the input window.
* Offered a user friendly setting window.
* Support for UTF-8 input.
.
Home Page: http://www.csie.nctu.edu.tw/~cp76/gcin/
Authors: Edward Liu <cp76@csie.nctu.edu.tw>
這些資訊我想不用太多解釋...
如果您想有一些注意事項想讓使用者知道,
您可以把它寫在 debian/README.Debian 中:
- 代碼: 選擇全部
gcin for Debian
---------------
It is a little script to start GCIN,
you may place it in your X Window starting script, like /etc/X11/xinit/xinitrc:
export LANG=zh_TW.Big5
export LC_ALL=zh_TW.Big5
export XMODIFIERS="@im=gcin"
export GTK_IM_MODULE=gcin
exec /usr/bin/gcin &
You may visit Debian Wiki, http://wiki.debian.org.tw/index.php/gcin for more skills and details.
-- Tetralet <tetralet@pchome.com.tw>, Sun, 27 Feb 2005 09:52:41 +0800
另外,debian/changelog 也是很重要的設定檔,
不過因為這是第一次製作 deb 檔案,
您可能不需要修改它:
- 代碼: 選擇全部
gcin (0.8.3-1) unstable; urgency=low
* Initial Release.
-- Tetralet <tetralet@pchome.com.tw> Sun, 27 Feb 2005 09:52:41 +0800
日後,在版本更新時,您可以用 dch -i 來修改這個檔案。
另外一個重要檔案為 debian/copyright,授權聲明:
- 代碼: 選擇全部
This package was debianized by Tetralet <tetralet@pchome.com.tw> on
Sun, 27 Feb 2005 09:52:41 +0800.
It was downloaded from http://www.csie.nctu.edu.tw/~cp76/gcin/download/
Copyright:
Copyright (C) 2004 Edward Liu
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
as published by the Free Software Foundation; either version 2
of the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
On Debian GNU/Linux systems, the complete text of the GNU General
Public License can be found in `/usr/share/common-licenses/GPL'.
Upstream Author: Edward Liu <cp76@csie.nctu.edu.tw>
License:
GNU LESSER GENERAL PUBLIC LICENSE
Version 2.1, February 1999
Copyright (C) 1991, 1999 Free Software Foundation, Inc.
(下為 GNU LESSER GENERAL PUBLIC LICENSE 全文。故略)
注意到,這個檔案寫的是這個軟體的授權方式,請確認之後再填寫,不要隨便就亂亂寫上去哦!
還有一個可能會用到的檔案,menu。它是用於 menu 套件的。範例:(只是範例,但不適用於 GCIN... 理由後述)
- 代碼: 選擇全部
?package(gcin):needs="X11" section="XShells"\
title="gcin" command="/usr/bin/gcin"\
longtitle="Chinese input server for X Window System with XIM support"\
icon="/usr/share/gcin/gcin.xpm"
因為我們要處理 menu,所以要把 debian/rules 裡的 dh_installmenu 前的註解給去掉。
並且,我們還需要一個安裝到 /usr/share/gcin/gcin.xpm 的小圖示,
而我的做法是將 GCIN 所提供的 gcin-orig.png 轉換成 gcin.xpm,
方法是編輯 debian/rules 如下:(可能需要再安裝 imagemagick 套件)
- 代碼: 選擇全部
# Add here commands to compile the package.
$(MAKE)
convert -resize 32x32 gcin-orig.png debian/gcin.xpm
- 代碼: 選擇全部
$(MAKE) install prefix=$(CURDIR)/debian/gcin/usr
install -m 644 $(CURDIR)/debian/gcin.xpm $(CURDIR)/debian/tmp/usr/share/gcin
這樣子應該就沒問題了。
不過基本上 menu 這個檔案在 GCIN 裡是沒有必要存在的,
因為 GCIN 本身就有處理 menu 的程式碼了,
所以用不著 menu 出場...
不過為了處理 menu,
您必需再產生以下兩個檔案。
postinst:(安裝完成後要執行的 Script)
- 代碼: 選擇全部
#!/bin/sh
set -e
# Automatically added by dh_installmenu
if [ "$1" = "configure" ] && [ -x "`which update-menus 2>/dev/null`" ]; then
update-menus
fi
# End automatically added section
postrm:(移除完成後要執行的 Script)
- 代碼: 選擇全部
#!/bin/sh
set -e
# Automatically added by dh_installmenu
if [ -x "`which update-menus 2>/dev/null`" ]; then update-menus ; fi
# End automatically added section
其實還有一些 GCIN 暫時用不到,用來設定套件的檔案,
如:cron.d、init.d、preinst、prerm 等等,
我們可以參考別的套件的寫法,有需要時再加以編輯。
不過在此講解這些設定檔有點超出本篇的範圍了。
還有一個最最重要的檔案:debian/rules 我們還沒有處理完畢;
它控制了 dpkg-buildpackage 要如何編譯這個套件。
但由於裡面內容實在亂複雜的,
並且 GCIN 使用 ./configure;make;make install 就可以安裝起來了,
所以我們就不要理它了吧...(喂!喂!!)
除了以上所提及的 7 個檔案之外,
其它不需要的可以全數刪除,
只留下 README.Debian changelog control copyright postinst postrm rules 這幾個檔案即可。
好了,接下來,只要下達
- 代碼: 選擇全部
dpkg-buildpackage -rfakeroot
就可以產生 deb 檔案及原始碼的壓縮檔了。
好,等了一會兒,
今天的主角 gcin_0.8.3-1_i386.deb 就現身了,
而它的檔案結構則會出現在 debian/tmp 中。
不過,等等... 為什麼 gcin_0.8.3-1_i386.deb 只有 17K 呢?未免太小了點,
稍稍檢查了一下,發現這個 gcin_0.8.3-1_i386.deb 幾乎是空的。
並且,在 debian/tmp 中幾乎什麼檔案都沒有...
這時,就表示 debian/rules 這個檔案的內容有問題。
所以我們只好想辨法手動修正它了。
以下為 debian/rules 這個檔案中,可能出問題的地方:
- 代碼: 選擇全部
config.status: configure
- 代碼: 選擇全部
build-stamp: config.status
- 代碼: 選擇全部
clean:
- 代碼: 選擇全部
install: build
注意比對 debian/rules 裡 install: build 和 Makefile 裡的 install: 那段的內容,
debian/rules 裡的 install: build:
- 代碼: 選擇全部
$(MAKE) install prefix=$(CURDIR)/debian/gcin/usr
而 Makefile 裡的 install: 的內容是:(請整個檔案一起看)
- 代碼: 選擇全部
bindir=$(DESTDIR)/usr/bin
install -s $(PROGS) $(bindir)
(其它的地方也是類似)
所以我們要把 debian/rules 裡的 install: build 改成:
- 代碼: 選擇全部
$(MAKE) install DESTDIR=$(CURDIR)/debian/tmp
才行。
還有,在 debian/rules 裡的 clean: 那一段也有問題,
我們依 Makefile 的內容,將它改成了:
- 代碼: 選擇全部
-$(MAKE) clean
好了,OK,讓我們重新編譯一次吧:
- 代碼: 選擇全部
fakeroot debian/rules clean
dpkg-buildpackage -rfakeroot
這次應該可以成功了。
如果您擔心在製過 deb 檔案的過程中缺漏了什麼檔案的話,
您可以試著使用:
- 代碼: 選擇全部
make clean
./configure --prefix=/tmp/gcin-0.8.3/debian/gcin/usr/
make
make install
來比較兩者所編譯出來的檔案或目錄結構是否有任何異同。
接下來,還沒完,我們必須檢查這個 gcin_0.8.3-1_i386.deb 是否有什麼潛在問題。
請執行:
- 代碼: 選擇全部
lintian ../gcin_0.8.3-1_i386.deb
W: gcin: binary-without-manpage gcin
W: gcin: binary-without-manpage gcin-setup
W: gcin: binary-without-manpage gcin2tab
W: gcin: binary-without-manpage phoa2d
W: gcin: binary-without-manpage phod2a
W: gcin: binary-without-manpage tsa2d
W: gcin: binary-without-manpage tsd2a
W: gcin: binary-without-manpage tslearn
W: gcin: executable-not-elf-or-script ./usr/share/gcin/script/modify-XIM
W: gcin: executable-not-elf-or-script ./usr/share/icons/gcin.png
E: gcin: sharedobject-in-library-directory-not-actually-a-shlib usr/lib/libgcin-im-client.so
E: gcin: menu-icon-not-in-xpm-format gcin.png
E: gcin: menu-item-creates-new-root-section Chinese /usr/lib/menu/gcin:1
E: gcin: menu-icon-not-in-xpm-format gcin.png
E: gcin: menu-item-creates-new-root-section Chinese /usr/lib/menu/gcin-setup:1
W: gcin: maintainer-not-full-name Tetralet
以上所列出的問題之中,像是缺乏 manpage 等等,
大部份是 GCIN 本身的小問題,所以我們可以偷懶不去理它...
若沒有發現其它的任何問題,那麼可以說是大功告成了,
我們現在就可以用 dpkg 指令,把這個 gcin_0.8.3-1_i386.deb 裝起來試試看了...
_________________
補充 menu 部份,GCIN 用不著...