2007年12月16日日曜日

pkgsrcでビルドしたfirefoxを別マシンの別ディレクトリにコピーして実行する

あるSolaris8なワークステーションで、Firefox2を実行したかったのですが、処理性能などの理由から、そのワークステーション上でpkgsrcをビルドするのはつらいため、断念。



そこで、別ホストでpkgsrcを使ってビルドしてコピーしようと思ったのですが、あいにくコピー先のワークステーションで管理者権限を持っていないため、/usr/pkg以下にファイルを置くことはできません。



自分で書ける、/usr/pkgとは別のディレクトリにコピーしたのですが、当然ながら、/usr/pkg以下にファイルが置かれていることを前提にしてビルドされたバイナリですから、そのままでは動きません。



とりあえず、あれこれファイルや環境変数をいじくって、なんとか動くようになりました。



firefox起動用のシェルスクリプトは、こんな感じになりました。



#!/bin/sh
#



pkg=(コピー先)/usr/pkg



MOZILLA_FIVE_HOME=${pkg}/lib/firefox
export MOZILLA_FIVE_HOME



LD_LIBRARY_PATH=${pkg}/lib/firefox:${pkg}/lib:${LD_LIBRARY_PATH}
export LD_LIBRARY_PATH



GDK_PIXBUF_MODULEDIR=${pkg}/lib/gtk-2.0/2.10.0/loaders
export GDK_PIXBUF_MODULEDIR



GDK_PIXBUF_MODULE_FILE=${pkg}/libdata/gtk-2.0/gdk-pixbuf.loaders
export GDK_PIXBUF_MODULE_FILE



MRE_HOME=${pkg}/lib/mre/mre-2.0.0.9
export MRE_HOME



FONTCONFIG_FILE=${pkg}/fonts.conf ←ファイル中のパスを書き換える
export FONTCONFIG_FILE



PANGO_RC_FILE=${pkg}/pangorc ←ファイル中のパスを書き換える
export PANGO_RC_FILE



CHARSETALIASDIR=${pkg}/lib
export CHARSETALIASDIR



exec ${pkg}/lib/firefox/firefox-bin "$@"



ファイル名やディレクトリ名にバージョン番号のようなものが書かれているものは、バージョンアップしたときに変わってしまうと思われるので、上記のままで使うことはできません。



fonts.confpangorcの中には、/usr/pkg以下のパスが書かれていたので、適宜、書き換えました。

pangorc
の中身は、



[Pango]
ModuleFiles = どこそこ/pango.modules



となっています。そこで、pango.modulesというファイルをコピーしてきてから、pango.modulesの中に書かれているパスを書き換えました。



あとでgdk-pixbuf.loadersを見たら、これにも/usr/pkg以下のパスが書かれていたのですが、なぜかオリジナルのままでFirefox2は動いています。もしかするとこれも書き換える必要があるかもしれません。





以上をどうやって調べたかっていうと、かなり泥臭い方法でやりました。



  • ○○○というファイルが開けない、みたいなエラーメッセージがでたら、それを参考にする


  • trussコマンドつきでfirefoxを実行して、どのファイルにアクセスしようとして失敗しているか、見てみる


  • バイナリファイルをstringsコマンドで見て、/usr/pkgという文字列を探す。ときには、「grep -R usr/pkg」など


  • ソースコードをgrepしまくって、設定変更できる環境変数がないか、探してみる


こんな泥臭い方法ですが、(FreeBSDの)portsや、pkgsrcは、ソースコードを簡単に見られるので、想像するほど難しくなく、すんなりと見つけられました。



0 件のコメント:

コメントを投稿