試験運用中なLinux備忘録・旧記事

はてなダイアリーで公開していた2007年5月-2015年3月の記事を保存しています。

lxpanel-0.2.7.2のビルドが通らない(docbook-to-manコマンドが無い)件について

LXDEデスクトップ環境のパネルをインストールしようとしたのだが、下のエラーで止まってしまった。*1

Making all in man
make[2]: Entering directory `/var/tmp/portage/lxde-base/lxpanel-0.2.7.2/work/lxpanel-0.2.7.2/man'
docbook-to-man lxpanel.sgml > lxpanel.1
/bin/sh: docbook-to-man: command not found
make[2]: *** [lxpanel.1] Error 127
make[2]: Leaving directory `/var/tmp/portage/lxde-base/lxpanel-0.2.7.2/work/lxpanel-0.2.7.2/man'
(以下略)

ここで必要になっているdocbook-to-manというコマンドはDebian/Ubuntuでは同名のパッケージになっているのだが、GentooではPortageツリーのどのパッケージで入れられるのかを探したものの見当たらず、最終的には
packages.debian.org/sid/docbook-to-man
にあるdocbook-to-man_2.0.0.orig.tar.gz*2とそのパッチをダウンロードして入れることにした。
下はインストール手順のメモだが、後でebuildを書いたのでGentoo上ではそちらを使用するのが楽。

$ tar zxf [docbook-to-man_2.0.0.orig.tar.gzの場所]
$ cd docbook-to-man-2.0.0.orig/
$ zcat [docbook-to-man_2.0.0-26.diff.gzの場所] | patch -p1
patching file debian/control
patching file debian/changelog
patching file debian/rules
patching file debian/compat
patching file debian/dirs
patching file debian/patches/01-conglomeration.dpatch
patching file debian/patches/03-userinput-font.dpatch
patching file debian/patches/00list
patching file debian/patches/02-arg-req-space.dpatch
patching file debian/copyright
patching file debian/docs
$ for p in debian/patches/*.dpatch; do patch -p1 < ${p}; done
patching file Doc/Makefile
patching file Doc/docbook-to-man.1
patching file Doc/docbook-to-man.sgml
patching file Doc/instant.1
patching file Doc/transpec.1
patching file Instant/general.h
patching file Instant/main.c
patching file Instant/tptregexp/regexp.c
patching file Makefile
patching file Transpec/docbook-to-man.prolog
patching file Transpec/docbook-to-man.ts
patching file Transpec/docbook-to-man.ts-PUSHPOP
patching file Transpec/roff.cmap
patching file Transpec/roff.sdata
patching file ans.patch
patching file cmd/docbook-to-man.sh
patching file Transpec/docbook-to-man.ts
Hunk #1 succeeded at 1218 (offset 22 lines).
patching file Transpec/docbook-to-man.ts
Hunk #1 succeeded at 1930 with fuzz 1 (offset 37 lines).
$ make ROOT=[インストール先接頭辞]
$ sudo make ROOT=[インストール先接頭辞] install

ebuildWindows Live SkyDriveにアップロードした。
http://cid-3f9be5b1cd4a806c.skydrive.live.com/self.aspx/%E5%85%AC%E9%96%8B/Gentoo%20Linux%20ebuild/app-text/docbook-to-man/docbook-to-man-2.0.0.ebuild.txt
なお、Debianのパッチを使用しなかった場合、下のようにコンパイルエラーで停止する。

make[2]: Entering directory `/tmp/work/docbook-to-man-2.0.0.orig/Instant/tptregexp'
gcc -O  -I.    -c -o regexp.o regexp.c
regexp.c: In function 'tpt_regcomp':
regexp.c:199: error: conflicting types for 'malloc'
regexp.c:708:22: error: macro "strchr" requires 2 arguments, but only 1 given
regexp.c: In function 'tpt_regexec':
regexp.c:708: error: 'strchr' redeclared as different kind of symbol
regexp.c:807:22: error: macro "strchr" requires 2 arguments, but only 1 given
make[2]: *** [regexp.o] Error 1
make[2]: Leaving directory `/tmp/work/docbook-to-man-2.0.0.orig/Instant/tptregexp'
make[1]: *** [dotptregexp] Error 2

  1. 関連ツールのインストールメモ
    1. app-text/docbook-sgml-utils-0.6.14が入らない件について
    2. app-text/docbook2Xが動かない件について

関連ツールのインストールメモ

docbook-to-manというコマンドがPortageツリーのどのパッケージで入れられるのかを探していたところでインストールしたパッケージに関する覚え書き。インストール/動作には成功したものの、今回使用することはなかった。

app-text/docbook-sgml-utils-0.6.14が入らない件について
下のようなエラーが出て、入らなかった。

make[2]: Entering directory `/var/tmp/portage/app-text/docbook-sgml-utils-0.6.14/work/docbook-utils-0.6.14/doc/HTML'
SGML_CATALOG_FILES=/etc/sgml/catalog \
	SGML_SEARCH_PATH=../..:../../doc:.. \
		jade -t sgml -i html -d ../../docbook-utils.dsl\#html \
			-V '%use-id-as-filename%' ../../doc/docbook-utils.sgml
SGML_CATALOG_FILES=/etc/sgml/catalog \
	SGML_SEARCH_PATH=../..:../../doc:.. \
		jade -t sgml -i html -d ../../docbook-utils.dsl\#html \
			-V '%use-id-as-filename%' ../../doc/docbook-utils.sgml
jade:/usr/share/sgml/docbook/xml-dtd-4.1.2/ent/iso-amsa.ent:8:19:E: "X21B6" は関数名ではありません
jade:/usr/share/sgml/docbook/xml-dtd-4.1.2/ent/iso-amsa.ent:8:19:E: "X21B6" は関数名ではありません
jade:/usr/share/sgml/docbook/xml-dtd-4.1.2/ent/iso-amsa.ent:9:19:E: "X21B7" は関数名ではありません
(中略)
jade:/usr/share/sgml/docbook/xml-dtd-4.1.2/ent/iso-lat2.ent:124:19:E: "X017D" は
関数名ではありません
jade:/usr/share/sgml/docbook/xml-dtd-4.1.2/ent/iso-lat2.ent:125:17:E: "X017C" は
関数名ではありません
jade:/usr/share/sgml/docbook/xml-dtd-4.1.2/ent/iso-lat2.ent:126:17:E: "X017B" は
関数名ではありません
make[2]: *** [api.html] Error 1
make[2]: *** Waiting for unfinished jobs....
make[2]: *** [backend-spec.html] Error 1
make[2]: Leaving directory `/var/tmp/portage/app-text/docbook-sgml-utils-0.6.14/
work/docbook-utils-0.6.14/doc/HTML'
make[1]: *** [all-recursive] Error 1
make[1]: Leaving directory `/var/tmp/portage/app-text/docbook-sgml-utils-0.6.14/
work/docbook-utils-0.6.14/doc'
make: *** [all-recursive] Error 1

XML版のDTDを読んでいるようだったので全て一時的に消してみることにした。
手元の環境には

$ ls -d /var/db/pkg/app-text/docbook-xml-dtd-*
/var/db/pkg/app-text/docbook-xml-dtd-4.1.2-r6/
/var/db/pkg/app-text/docbook-xml-dtd-4.2-r1/
/var/db/pkg/app-text/docbook-xml-dtd-4.3/
/var/db/pkg/app-text/docbook-xml-dtd-4.4-r1/

4.1.2から4.4までが入っていて、これを全部消した。

$ sudo emerge -aC docbook-xml-dtd

再び実行したところ

$ sudo emerge -av docbook-sgml-utils
(中略)
[ebuild  N    ] app-text/docbook-xml-dtd-4.4-r1
[ebuild  N    ] app-text/docbook-sgml-utils-0.6.14  USE="-tetex"

docbook-xml-dtd-4.4-r1が何故か入ってきたが、結果は

make[2]: Entering directory `/var/tmp/portage/app-text/docbook-sgml-utils-0.6.14/work/docbook-utils-0.6.14/doc/HTML'
SGML_CATALOG_FILES=/etc/sgml/catalog \
	SGML_SEARCH_PATH=../..:../../doc:.. \
		jade -t sgml -i html -d ../../docbook-utils.dsl\#html \
			-V '%use-id-as-filename%' ../../doc/docbook-utils.sgml
SGML_CATALOG_FILES=/etc/sgml/catalog \
	SGML_SEARCH_PATH=../..:../../doc:.. \
		jade -t sgml -i html -d ../../docbook-utils.dsl\#html \
			-V '%use-id-as-filename%' ../../doc/docbook-utils.sgml
jade:/usr/share/sgml/docbook/sgml-dtd-3.1/dbcent.mod:53:65:W: 公開テキスト "ISO 8879:1986//ENTITIES Added Math Symbols: Arrow Relations//EN" に対する一般システム識別子を生成できません
jade:/usr/share/sgml/docbook/sgml-dtd-3.1/dbcent.mod:54:8:E: 実体 "ISOamsa" への参照するシステム識別子を生成できませんでした
jade:/usr/share/sgml/docbook/sgml-dtd-3.1/dbcent.mod:52:0: 実体はここで定義されました
jade:/usr/share/sgml/docbook/sgml-dtd-3.1/dbcent.mod:60:66:W: 公開テキスト "ISO 8879:1986//ENTITIES Added Math Symbols: Binary Operators//EN" に対する一般システム識別子を生成できません
jade:/usr/share/sgml/docbook/sgml-dtd-3.1/dbcent.mod:61:8:E: 実体 "ISOamsb" への参照するシステム識別子を生成できませんでした
jade:/usr/share/sgml/docbook/sgml-dtd-3.1/dbcent.mod:59:0: 実体はここで定義されました
(中略)
jade:/usr/share/sgml/docbook/dsssl-stylesheets-1.79/html/../common/../common/dbl1sr.dsl:2:66:W: 公開テキスト "ISO 8879:1986//ENTITIES Added Latin 2//EN" に対す る一般システム識別子を生成できません
jade:/usr/share/sgml/docbook/dsssl-stylesheets-1.79/html/../common/../common/dbl1sr.dsl:3:5:E: 実体 "lat2" への参照するシステム識別子を生成できませんでした
jade:/usr/share/sgml/docbook/dsssl-stylesheets-1.79/html/../common/../common/dbl1sr.dsl:2:0: 実体はここで定義されました
make[2]: *** [api.html] Error 1
make[2]: *** Waiting for unfinished jobs....
make[2]: *** [backend-spec.html] Error 1
make[2]: Leaving directory `/var/tmp/portage/app-text/docbook-sgml-utils-0.6.14/work/docbook-utils-0.6.14/doc/HTML'
make[1]: *** [all-recursive] Error 1
make[1]: Leaving directory `/var/tmp/portage/app-text/docbook-sgml-utils-0.6.14/work/docbook-utils-0.6.14/doc'
make: *** [all-recursive] Error 1

となってダメだった。
調べたところ、
bugs.gentoo.org/show_bug.cgi?id=184551
で「app-text/sgml-common」の入れ直しの話があったのでやってみた。

$ sudo emerge -av1 sgml-common
(中略)
>>> Original instance of package unmerged safely.
 * Installing Catalogs...
install-catalog: addition of /usr/share/sgml/sgml-iso-entities-8879.1986/catalog in /etc/sgml/sgml-ent.cat
install-catalog: addition of /etc/sgml/sgml-ent.cat in /etc/sgml/catalog
install-catalog: addition of /etc/sgml/sgml-ent.cat in /etc/sgml/sgml-docbook.cat
 * Fixing /etc/sgml/sgml-docbook.cat
 * Fixing /etc/sgml/sgml-ent.cat
 * Fixing /etc/sgml/xml-docbook-4.1.2.cat
 * Fixing /etc/sgml/xml-docbook-4.4.cat
 * Fixing /etc/sgml/openjade-1.3.2.cat
 * Fixing /etc/sgml/sgml-docbook-3.0.cat
 * Fixing /etc/sgml/dsssl-docbook-stylesheets.cat
 * Fixing /etc/sgml/sgml-docbook-4.1.cat
 * Fixing /etc/sgml/sgml-docbook-4.0.cat
 * Fixing /etc/sgml/sgml-docbook-3.1.cat
 * Fixing /etc/sgml/xml-simple-docbook-4.1.2.4.cat
 * Fixing /etc/sgml/xml-simple-docbook-1.0.cat
 * Fixing /etc/sgml/catalog
>>> app-text/sgml-common-0.6.3-r5 merged.

カタログファイルが修正されたのが効いたのか、この後でもう一度docbook-sgml-utilsのインストールを試したところ、無事に入った。
最後に、XML版のDTDを戻しておく。

$ sudo emerge -av "~docbook-xml-dtd-4.1.2" "~docbook-xml-dtd-4.2" "~docbook-xml-dtd-4.3"

app-text/docbook2Xが動かない件について
インストールは済んだのだが、

$ /usr/bin/docbook2man.pl
sh: /usr/bin/db2x_xsltproc: そのようなファイルやディレクトリはありません
sh: /usr/bin/db2x_manxml: そのようなファイルやディレクトリはありません

動作していない。バージョン0.8.8でもダメだった。
上の2つのファイルは、拡張子「.pl」の付いたものが代わりに存在していたので、インストール上の問題。これは
bugs.gentoo.org/show_bug.cgi?id=205703
の「Comment #2」にある修正をebuildに適用(した上でローカルOverlayに配置)することで下のように「入力ファイルが無い」エラーに変わり、使えるようになった。

$ /usr/bin/docbook2x-man
/usr/bin/db2x_xsltproc: you must specify exactly one source document
Empty Stream at /usr/lib64/perl5/vendor_perl/5.8.8/x86_64-linux/XML/LibXML/SAX/Parser.pm line 24

*1:SGML版DocBook文書からマニュアルページに変換する処理。無くてもプログラムの動作には影響しない

*2:本家ページはwww.oasis-open.org/docbook/tools/dtm/