[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[debian-users:25781] create local deb (Re: ワープロ (HancomWord))
佐野@浜松です。
In <y5avgt0p4i6.fsf@xxxxxxxxxxxxxxxxxxxx>,
on "Tue, 5 Dec 2000 01:10:06 +0900', I wrote:
> インストーラパッケージまで作ってしまうような元気は無いので、
> 自前で作る (maint-guide-ja 参照) or 上記のようにパッケージ化せずに
> インストールする、のどちらかで試してみてください。
とりあえず動かすだけなら前回のように tar ball を展開して自分で
リンクを張る、でもいいのですが、数年間使ったりするようなものだと、
削除しようと思ったころには /bin/pidof -> /sbin/pidof のリンクの
ことなど忘れてしまっているということがありがちです。
また、せっかくパッケージ管理システムを使っているのだから、
できればパッケージにして使いたい、という人もいるでしょう。
ということで、今度はバイナリオンリーな rpm をローカル専用の deb に
変換して使う際の手順について書いてみます。
Debian についての紹介では、rpm なパッケージでも alien 使えば問題無い
ということが良く言われています。実際、alien でそのままインストール
できる rpm もいくつかあると思いますが、今回の hancomword のように
そのまま alien でインストールするとパッケージが前提としているコマンド
の場所が違っていてうまく動かない、ということもあります。
(いい悪いで言えば特定の環境、バージョンに依存するような作り方を
するのは感心しないとも言えますが、それはここでは置いておきます。)
ということで、まず alien -g で rpm を展開してみようとしたのですが、、、
$ pwd
/Test/test/hancomword/chk
$ ls ..
chk hancomword-5.0-jpn.i386.rpm hancomword-5.0-jpn.i386.tgz
$ mkdir alien
$ cd alien
$ sudo alien -g ../../hancomword-5.0-jpn.i386.rpm
Password:
-- Examining ../../hancomword-5.0-jpn.i386.rpm
-- Unpacking ../../hancomword-5.0-jpn.i386.rpm
177895 blocks
----/usr/local/HancomOffice
Moving unpacked files into /usr/local/HancomOffice
mv: `.//usr/local/HancomOffice/usr' は、`usr' のサブディレクトリなので、
そこには移動できません。
alien: Error moving unpacked files into the default prefix directory
となってエラーで止まります。
これでちゃんと展開できるようなら、もっと簡単なんですが、とりあえず
今回は別の方法を試してみることにします。
まず、前回使った tgz と rpm の内容を比較してみます。
$ cd ..
$ mkdir tarball
$ mkdir rpmtree
$ cd tarball && tar -xvzf ../../hancomword-5.0-jpn.i386.tgz
$ cd ../rpmtree && rpm2cpio ../../hancomword-5.0-jpn.i386.rpm |cpio -i --make-dir
177895 blocks
$ ls
tmp usr
$ ls usr/hwpx/
app drv font help lib readme shlib ttf
$ ls ../tarball/hwpx/
app drv font help lib readme shlib ttf
$ diff -r ../tarball/hwpx/ usr/hwpx/
$ du -s ../tarball/hwpx/ usr/hwpx/
90508 ../tarball/hwpx
90508 usr/hwpx
$ ls ../tarball/
hwpx
$ ls usr/
bin hwpx share
$ ls tmp/
hcoffice
$ ls -R tmp/
tmp/:
hcoffice
tmp/hcoffice:
hcdirectory hwpx x-hwp.kdelnk
tmp/hcoffice/hwpx:
HancomShell.desktop HancomWordR5.desktop hnchelp.desktop hncsys.desktop
HancomShell.kdelnk HancomWordR5.kdelnk hnchelp.kdelnk hncsys.kdelnk
ここまでで、tar ball には rpm の usr/hwpx に相当する部分のみが
収録されていることがわかります。
rpm には他にも tmp/ 以下の KDE 関連設定ファイルらしきものや、
usr/bin と usr/share 以下のファイルなど tar ball には用意されて
いないものが含まれているらしいので、deb の元データとして rpm を
使うことにします。
まずはパッケージツリーの準備
$ mv rpmtree/ hancomword-5.0jp
$ pwd
/Test/test/hancomword/chk
$ cd hancomword-5.0jp/
deb パッケージ用設定ファイルの準備
$ dh_make
Type of package: single binary, multiple binary, or library? [s/m/l] s
(とりあえず s でいい)
Maintainer name : Taketoshi Sano
Email-Address : sano@debian.org
Date : Wed, 6 Dec 2000 20:37:54 +0900
Package Name : hancomword
Version : 5.0jp
Type of Package : Single
Hit <enter> to confirm:
(エンターキー入力)
Currently there is no top level Makefile. This may require additional tuning.
Done. Please edit the files in the debian/ subdirectory now. You should also
check that the hancomword Makefiles install into $DESTDIR and not in / .
これで debian/ ディレクトリ以下にパッケージ情報ファイルが
いろいろ作成されます。
$ ls
debian tmp usr
$ cd debian/
$ ls
README.Debian dirs ex.doc-base.package postrm.ex
changelog docs init.d.ex preinst.ex
control emacsen-install.ex manpage.1.ex prerm.ex
copyright emacsen-remove.ex menu.ex rules
cron.d.ex emacsen-startup.ex postinst.ex watch.ex
まず不要なものを削除します。
$ rm cron.d.ex emacsen-* ex.doc-base.package init.d.ex \
manpage.1.ex menu.ex postinst.ex postrm.ex preinst.ex prerm.ex watch.ex
$ ls
README.Debian changelog control copyright dirs docs rules
内容チェック
$ cat README.Debian
hancomword for Debian
----------------------
<possible notes regarding this package - if none, delete this file>
-- Taketoshi Sano <sano@debian.org>, Wed, 6 Dec 2000 20:37:54 +0900
正式なパッケージの場合はちゃんと書いておくべきでしょうが、
とりあえず使えればいいというレベルでのローカル専用のパッケージ化
なので、バッサリ削除しちゃいます。
$ rm README.Debian
次に copyright ファイル。
$ cat copyright
This package was debianized by Taketoshi Sano <sano@debian.org> on
Wed, 6 Dec 2000 20:37:54 +0900.
It was downloaded from <fill in ftp site>
Upstream Author(s): <put author(s) name and email here>
Copyright:
<Must follow here>
正式な Debian パッケージならもちろんここもきっちり書かないと
いけません。が、ローカル専用ということでこれも削除します。
$ rm copyright
これで、かなり整理されてきました。
$ ls
changelog control dirs docs rules
$ cat changelog
hancomword (5.0jp-1) unstable; urgency=low
* Initial Release.
-- Taketoshi Sano <sano@debian.org> Wed, 6 Dec 2000 20:37:54 +0900
Local variables:
mode: debian-changelog
End:
これはそのままにしておいて大丈夫でしょう。
$ cat dirs
usr/bin
usr/sbin
$ rm dirs
$ cat docs
$ rm docs
どっちも今回は不要ということにして削除します。
$ ls
changelog control rules
ポリシー的には copyright ファイルが必須ですが、
ローカルオンリーの外部に配布しないパッケージということで
今回はパッケージ作成のために技術的に必要となる上記 3 ファイル
だけにします。
$ ls ..
debian tmp usr
$ ls ../usr/
bin hwpx share
$ ls ../usr/bin
HancomWord
$ ls ../usr/hwpx/
app drv font help lib readme shlib ttf
$ ls ../usr/share/
icons
ここでパッケージ構成を考えておきます。usr 以下はそのままコピーすれば
良いですが、tmp 以下は KDE 関連の設定ファイルらしいので、これは
とりあえず usr/doc/hancomword/ 以下に入れるようにします。
(woody なら usr/share/doc/hancomword/ 以下のほうが良いですが、
potato なので)
あと、動作に必要なリンク (/sbin/pidof -> /bin/pidof) も設定しないと
いけません。
これらを rules ファイルの中で実行させるようにします。
$ vi rules control
編集結果は以下。
$ cat rules
#!/usr/bin/make -f
# Sample debian/rules that uses debhelper.
# GNU copyright 1997 to 1999 by Joey Hess.
# Uncomment this to turn on verbose mode.
#export DH_VERBOSE=1
# This is the debhelper compatability version to use.
export DH_COMPAT=1
build: build-stamp
build-stamp:
dh_testdir
touch build-stamp
clean:
dh_testdir
dh_testroot
rm -f build-stamp
dh_clean
install: build
dh_testdir
dh_testroot
dh_clean -k
# Add here commands to install the package into debian/tmp.
if [ ! -d `pwd`/debian/tmp ]; then fakeroot mkdir `pwd`/debian/tmp; fi
fakeroot cp --archive usr `pwd`/debian/tmp/
if [ ! -d `pwd`/debian/tmp/usr/doc/hancomword ]; \
then fakeroot mkdir -p `pwd`/debian/tmp/usr/doc/hancomword; fi
fakeroot cp --archive tmp/hcoffice `pwd`/debian/tmp/usr/doc/hancomword/
cd `pwd`/debian/tmp/ && fakeroot mkdir sbin
cd `pwd`/debian/tmp/sbin/ && fakeroot ln -s ../bin/pidof .
# Build architecture-independent files here.
binary-indep: build install
# We have nothing to do by default.
# Build architecture-dependent files here.
binary-arch: build install
# dh_testversion
dh_testdir
dh_testroot
dh_installdocs
dh_installchangelogs
dh_link
dh_strip
dh_compress
dh_fixperms
# You may want to make some executables suid here.
dh_installdeb
# dh_shlibdeps
dh_gencontrol
dh_md5sums
dh_builddeb
binary: binary-indep binary-arch
.PHONY: build clean binary-indep binary-arch binary install
追加したのは
# Add here commands to install the package into debian/tmp.
if [ ! -d `pwd`/debian/tmp ]; then fakeroot mkdir `pwd`/debian/tmp; fi
fakeroot cp --archive usr `pwd`/debian/tmp/
if [ ! -d `pwd`/debian/tmp/usr/doc/hancomword ]; \
then fakeroot mkdir -p `pwd`/debian/tmp/usr/doc/hancomword; fi
fakeroot cp --archive tmp/hcoffice `pwd`/debian/tmp/usr/doc/hancomword/
cd `pwd`/debian/tmp/ && fakeroot mkdir sbin
cd `pwd`/debian/tmp/sbin/ && fakeroot ln -s ../bin/pidof .
この部分だけで、あとは不要な行を削除しただけです。
$ cat control
Source: hancomword
Section: misc
Priority: extra
Maintainer: nobody <nobody@nowhere>
Standards-Version: 3.0.1
Package: hancomword
Architecture: i386
Depends: libc6
Description: a commercial word processor application
An office software provided by HanCom Linux.
ここは Section, Priority, Maintainer, Description を
適当に記載します。
で、ここまでくればビルド実行。
(あとで気がついたけど、前回書いたように usr/hwpx/shlib/kill_all
の中で kill command を実行しているところに 2>/dev/null を追加
しておいたほうが良かったですね。このままだと起動時に余計なエラー
メッセージが出ます。)
$ LANG=C dpkg-buildpackage -rfakeroot -us -uc
いろいろメッセージが出ますが、最終的には以下のパッケージが
得られます。
(実際にはここまでくるのに rules や control の部分でいろいろ
試行錯誤してますが、それは省略)
$ dpkg -I ../*.deb
新形式 debian パッケージ、バージョン 2.0。
サイズ 49420484 バイト: コントロールアーカイブ = 12206 バイト。
258 バイト, 10 行 control
30763 バイト, 446 行 md5sums
265 バイト, 8 行 * postinst #!/bin/sh
198 バイト, 6 行 * prerm #!/bin/sh
Package: hancomword
Version: 5.0jp-1
Section: misc
Priority: extra
Architecture: i386
Depends: libc6
Installed-Size: 89736
Maintainer: nobody <nobody@nowhere>
Description: a commercial word processor application
An office software provided by HanCom Linux.
あとはこれを dpkg -i でインストールするだけ。
以上、alien で扱いきれないバイナリオンリーな rpm (のひとつ) を
ローカルで deb 化してインストールする際の手順でした。参考まで。
--
# (わたしのおうちは浜松市、「夜のお菓子」で有名さ。)
<kgh12351@xxxxxxxxxxx> : Taketoshi Sano (佐野 武俊)