[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 (佐野 武俊)