平衡点
2009/09/28
_ Adobe Reader 9.1 on Debian unstable
Adobe Reader 9.1 (日本語版)を Debian unstable で使えるようになるまでのメモ.
latex-beamer で Jobs の Keynote スライド風のグラデーション背景を作ってみた訳ですが, evince で表示すると縞々表示になってしまって.
(´・ω・`)
多分, スクリーンに写した場合には気にならない縞々なんだろうけれど.
以下は Debian unstable, amd64 版の場合の話. i386 なら特に問題無いんじゃないかな(知らんけれど).嵌り所は, non-free なソフトウェアにありがちな「i386版しか提供されていません」って奴です.
毎度毎度の無保証です. ツッコミ修正大歓迎.
方法その1: chroot
...ヘタレです.
i386 の chroot 環境を作っておいて, そこに Adobe Reader を install する.chroot 環境については以前書いたけれど, 日本語では例えば
- Etch/Sidの上にSarge環境を作る方法…kmuto さんのドキュメント
- schroot を使って sid の下で lenny を飼う…私が以前書いたヤツ
なんかを参考に.
schroot で i386 の acroread を動かす wrapper を書いておいてごまかす.例えば
#!/bin/sh schroot -p -c lenny-i386 /usr/bin/acroread "$@" 1>/dev/null 2>&1
とか. これを PATH の通った所においておくと良いと思うよ
方法その 2: ia32-apt-get
amd64 の環境で i386 のライブラリを使うために ia32-apt-get というパッケージがあります. まだ開発途中なので, 使っていると色々嵌ると思いますが嵌るのが楽しいんですよねー.
ia32-apt-get
まず導入. のっけから ia32-libs とぶつかりますがおもむろに消します(自己責任で).
$ sudo aptitude install ia32-apt-get
debconf の出す質問で「Libraries」と「All」という選択肢が出ます.
これは 32bit 版のライブラリだけを使うのか, 32bit 版の全てのパッケージを使うのかって選択です. ここでは「Libraries」のみを install します.
続いて sources.list の設定です. /usr/share/ia32-apt-get/convert-all-sources.list を使って/etc/apt/sources.list を i386 版と amd64 版に分割します.現状 convert-all-sources.list は /etc/ia32-apt/sources.list を見ていて/etc/apt/sources.list を見てくれません.
ここでは /etc/ia32-apt/sources.list を /etc/apt/sources.list の symlink にします.
$ sudo -s # cd /etc/ia32-apt/ # rm sources.list # ln -s /etc/apt/sources.list .
その後で /etc/apt/sources.list を書きかえます. これまでの指定に加えて [arch=ARCH] という指定が使えるようになっています.例えば
deb [arch=amd64] http://ftp.jp.debian.org/debian/ sid main non-free contrib deb-src [arch=amd64] http://ftp.jp.debian.org/debian/ sid main non-free contrib
とかです. 上の例ではあんまり意味が無いですが apt-line で提供されているのが i386 版のみ, とかの場合には [arch=i386] とか書いておくと良いと思います.
その後で
$ sudo /usr/share/ia32-apt-get/convert-all-sources.list
とすると
$ ls -R /etc/ia32-apt/ /etc/ia32-apt: amd64/ i386/ sources.list@ sources.list.d/ /etc/ia32-apt/amd64: sources.list sources.list.d/ /etc/ia32-apt/amd64/sources.list.d: /etc/ia32-apt/i386: sources.list sources.list.d/ /etc/ia32-apt/i386/sources.list.d: /etc/ia32-apt/sources.list.d: ia32-apt-get.amd64.list ia32-apt-get.i386.list
と sources.list が i386, amd64 用にできます.最後に, 場合によっては i386 版の方が build が速いこともあるので, 半端な状態になって困らないようにするために pinning もしておくと良いと思います.
force-architecture で AdobeReader を install
dpkg -i に --force-architecture をつけると, ARCH の違うパッケージも導入できます. 動作保証はありませんが...
$ sudo dpkg -i --force-architecture AdbeRdr9.1.2-1_i386linux_jpn.deb
これで導入されたので動かしてみます.
$ /usr/bin/acroread /opt/Adobe/Reader9/Reader/intellinux/bin/acroread: error while loading shared libraries: libgdk_pixbuf_xlib-2.0.so.0: cannot open shared object file: No such file or directory
というわけで, libgdk_pixbuf_xlib-2.0.so.0 が無いので動作しません.libgdk_pixbuf_xlib-2.0.so.0 を提供している Debian パッケージは何かと言うと...
$ locate libgdk_pixbuf_xlib-2.0.so.0 /usr/lib/libgdk_pixbuf_xlib-2.0.so.0 /usr/lib/libgdk_pixbuf_xlib-2.0.so.0.1800.0 $ dlocate /usr/lib/libgdk_pixbuf_xlib-2.0.so.0 libgtk2.0-0:/usr/lib/libgdk_pixbuf_xlib-2.0.so.0.1800.0 libgtk2.0-0:/usr/lib/libgdk_pixbuf_xlib-2.0.so.0
というわけで, libgtk2.0-0 です. このi386版を導入します.
$ sudo -s # ia32-apt-get update # ia32-apt-get install ia32-libgtk2.0-0
パッケージ名の頭にある ia32-が肝です. ia32-apt-get を使ってi386 版のパッケージを導入する時には頭に ia32- をつけておきます.parsechangelog で warning が出ますが, とりあえず気にせずに導入しておきます.
同様の事をくりかえしましたが, PDF ファイルの表示に必要だったのは
- ia32-libgtk2.0-0
- ia32-libxml2
の二つ(とこれらが依存するライブラリ群)でした.
まとめ
amd64 な sid 環境で i386 版のパッケージしか提供されていない場合にどうするのか,について簡単に書きました.
手間はかかりますが, 動作が安心なのは chroot の作成だと思います. 手法としては枯れていますし…ia32-apt-get は, chroot ほど面倒ではないものの, まだ枯れていないので偶に嵌るかと思います. ですが, chroot 環境は特にいらないので多少楽かもしれません.
ちなみに現時点では acroread で日本語入力ができません./usr/lib32/gtk-2.0/2.10.0/immodule-files.d とかををゴニョゴニョすれば良いんだろう, とか思ってますがそんな気力はありませんので.
あと plugin (nppdf.so) を消しておかないと悲しくなりますよ. nspluginwrapper とか使って消しておくと良いかと思います.
追加
9.1 から, また日本語のゴシック体フォント同梱されなくなってますね.9.1 のフォントパックは
にあります.
なんだかなぁ... evince で綺麗にグラデーションが表示できれば問題無いんだが, 調べる気力がありません. むーん.