diary/Kojima

・docbook-xml

btrfs-progs の最新版(3.19rc2)をビルドしようとすると、バイナリのビルドは通るもののマニュアル等のドキュメントを作るためのasciidocが無い。

それでは、とasciidoc-8.6.9をビルドしようとすると、

...
python a2x.py -f manpage doc/asciidoc.1.txt
a2x: ERROR: "xmllint" --nonet --noout --valid "/tmp/build/doc/asciidoc.1.xml"  
returned non-zero exit status 4
make: *** [doc/asciidoc.1] エラー 1

なんてエラーになる。

具体的にどんなエラーになっているのだろう、、とエラーを起したコマンドを手動で実行してみたらこんな感じ。

$ xmllint --nonet --noout --valid /tmp/build/doc/asciidoc.1.xml
I/O error : Attempt to load network entity http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd
/tmp/build/doc/asciidoc.1.xml:2: warning: failed to load external entity "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd"
D DocBook XML V4.5//EN" "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd"
                                                                               ^
/tmp/build/doc/asciidoc.1.xml:5: validity error : Validation failed: no DTD found !
<refentry lang="en">

これってdocbook-xml-4.5 の定義が読めてないことだよなぁ、、と、パッケージを漁って /usr/share/xml/docbook/schema/4.5/catalog.xml の定義を見なおすと、

<?xml version="1.0"?>
<!DOCTYPE catalog PUBLIC "-//OASIS//DTD Entity Resolution XML Catalog V1.0//EN" "http://www.oasis-open.org/committees/entity/release/1.0/catalog.dtd">
<catalog xmlns="urn:oasis:names:tc:entity:xmlns:xml:catalog">
  <delegatePublic publicIdStartString="-//OASIS//DTD DocBook XML V4.1.2//EN" catalog="file:///usr/share/xml/docbook/schema/4.1.2/catalog.xml"/>
  <delegatePublic publicIdStartString="-//OASIS//DTD DocBook CALS Table Model V4.1.2//EN" catalog="file:///usr/share/xml/docbook/schema/4.1.2/catalog.xml"/>
...
  <delegatePublic publicIdStartString="-//OASIS//ENTITIES DocBook Character Entities V4.4//EN" catalog="file:///usr/share/xml/docbook/schema4.4/catalog.xml"/>
  <public publicId="-//OASIS//ENTITIES DocBook Character Entities V4.5//EN" uri="./dtd/dbcentx.mod"/>
</catalog>

みたいになっていて、4.1.2から4.4までの定義はあるものの、4.5の定義は無さそう。

あれれ、、と思って、docbook-xml-4.4 等を遡ってしらべてみても、それぞれ一つ前のバージョンの定義までしか登録されていない。

なぜだろう、、とこのあたりをパッケージ化するときに参考にしたBLFSの手順を確認してみると、libxml2のxmlcatalogにパッチがあたっている。

このxmlcatalogが今回問題になっているカタログファイルを作るためのツールなので、 こいつか、、と思ってlibxml2を再ビルドし、カタログファイルを作り直してみると、

$ less /usr/share/xml/docbook/schema/4.5/catalog.xml 
<?xml version="1.0"?>
<!DOCTYPE catalog PUBLIC "-//OASIS//DTD Entity Resolution XML Catalog V1.0//EN" "http://www.oasis-open.org/committees/entity/release/1.0/catalog.dtd">
<catalog xmlns="urn:oasis:names:tc:entity:xmlns:xml:catalog">
  <public publicId="-//OASIS//DTD DocBook XML V4.5//EN" uri="./dtd/docbookx.dtd"/>
  <system systemId="http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" uri="./dtd/docbookx.dtd"/>
  <system systemId="http://docbook.org/xml/4.5/docbookx.dtd" uri="./dtd/docbookx.dtd"/>
  <public publicId="-//OASIS//DTD DocBook CALS Table Model V4.5//EN" uri="./dtd/calstblx.dtd"/>
  <public publicId="-//OASIS//ELEMENTS DocBook XML HTML Tables V4.5//EN" uri="./dtd/htmltblx.mod"/>
  <public publicId="-//OASIS//DTD XML Exchange Table Model 19990315//EN" uri="./dtd/soextblx.dtd"/>
...
</catalog>

みたいに、docbook-xmlそれぞれのバージョンの定義しか含まないcatalog.xmlが生成された。やはり、libxml2 の xmlcatalog がバグっていたのが原因だったらしい。

これなら大丈夫かな、と asciidoc をビルドしてみると、今度は問題なくビルドが完了し、asciidoc を使って btrfs-3.19rc2 もマニュアルページが生成できた。

とりあえず、これらのパッケージは更新しておくつもりだけど、docbook-xml-XXX よりも先に libxml2 を更新して xmlcatalog を直しておかないと正しい catalog.xml が生成できないのは悩ましいところ。

現状の get_pkginfo コマンドは、新しいパッケージを拾ってきてアップデートする機能はあるものの、アップデートの順番までは管理できないから、手動でアップデートしてもらうために __no_install に登録しておくかな?



トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2021-12-17 (金) 16:35:42