ports
- Adobe Reader 9
PDFを閲覧するアプリケーションはいくつかあります。動作の軽量さから選ぶならAdobe Readerよりも他のアプリケーションを選んだほうが良いと言えます。しかしながら、
Adobe Readerでなければ実装されていない機能などもあり、 Adobe Readerを動かす必要があるシーンがあることもまた事実です。 Ports Collectionに登録されているAdobe Readerの最新版はAdobe Reader 9
(japanese/ acroread9、 print/ acroread9、 print/ acroreadwrapper) です。これまでAdobe Reader 9はデフォルトのFreeBSDカーネルでは動作しませんでした。Ports Collectionに登録されているAdobe ReaderはLinux向けに提供されているものです。Linuxバイナリ互換機能で動作させているわけですが、 スケジューリングに関する処理でLinuxカーネルとFreeBSDカーネルで処理に違いがあり、 この点がトリガになってAdobe Reader 9は起動してもすぐにクラッシュしていました。 問題を解決する方法はいくつかあります。FreeBSDカーネルで該当部分の処理を変更してやればよいのですが、
これは仕組み的に考えて、 本体にマージさせるのがかなり困難と言えます。機能を適用するアプリケーションを限定しsysctl(8)から制御できるようにするなどそれらしい次善策を加えることもできますが、 こうしたパッチをカーネルにマージさせるのは困難でしょう。 こうした問題を解決してAdobe Reader 9を動作させる機能が最新のport
(print/ acroreadwrapper、 japanese/ acroread9、 print/ acroread9) に追加されました。ja-acroread9-9. 4.2が該当します。 Adobe Reader 9を動作させるアイデアそのものは、
先ほど説明したように問題となる部分に変更を加え、 さらに適用する対象をAdobe Readerに限定するというものです。ポイントはその対応をカーネルに直接マージするのではなく、 カーネルモジュールで実現した点にあります。print/ acroreadwrapperをインストールするとlinux_ adobe. ko (/usr/ local/ libexec/ linux_ adobe/ linux_ adobe. ko)というカーネルモジュールがインストールされます。このモジュールが先ほど説明したのと同じ方法で、 Adobe Reader 9が実行された場合に該当する回避処理を実施するようになります。 システム起動時にlinux_
adobeカーネルモジュールが読み込まれるように/etc/ rc. confまたは/etc/ rc. conf. localに次の設定を追加します。 システムを再起動するか、
次のようにservice(8)コマンドを使ってlinux_ adobeカーネルモジュールを読み込みます。 linux_
adobeカーネルモジュールが読み込まれているかどうかは、 次のようにkldstat(8)コマンドで確認できます。 Adobe Reader 9日本語版
(japanese/ acroread9) をインストールすればprint/ acroreadwrapperも依存関係から自動的にインストールされます。システムに合わせてカーネルモジュールをビルドするため、 print/ acroreadwrapperのインストールにはカーネルのソースコードが必要です。/usr/ src/にソースコードを展開しておいてください。 今回の手法は、
FreeBSDでさらに多くのLinuxアプリケーションを動作させるためのテクニックとして参考になります。カーネルに手を加える必要があるようなケースでも、 アプリケーション側からカーネルモジュールを提供することで動作できるようになるためです。カーネルにパッチをマージするのはヘビーなことですが、 Ports Collectionにカーネルモジュールビルドを追加することはさほど難しくありません。 注意:これまでAdobe Reader 9を使っていて不便に感じることはありませんでしたが、
Adobe Reader 9が要求するLinuxカーネルのうちいくつかがFreeBSDカーネルには存在していないため、 利用できないシーンがあることがわかっています。Adobe Reader 9のフルフィーチャーを利用するには、 まず該当する機能をFreeBSDカーネルに実装する必要があります。