x86_64版Debian/UbuntuでAIRアプリケーションがインストールできない場合の対処
(2015/1/8)GNU/Linux向けのAdobe AIRは廃止され、本記事の内容も古い内容となっている。
x86_64版のUbuntu Intrepid(8.10)では、.airファイルを開いてもAIRアプリケーションのインストーラが起動しなかった。端末でxdg-open経由でAIRアプリケーションのインストーラを起動しようとすると
$ xdg-open [.airファイル] Error loading the runtime (libadobecertstore.so: cannot open shared object file: No such file or directory)
システムにインストールされているはずのlibadobecertstore.soが読めていないということが分かった。
これは/usr/lib/libadobecertstore.soとしてインストールされたファイルが/usr/lib64/libadobecertstore.soにある*1せいなのか、x86_32版ライブラリの/usr/lib32/以下にあるように見せかけることで解決した。
具体的には、アプリケーションの実行ダイアログや端末に
gksudo ln -s /usr/lib64/libadobecertstore.so /usr/lib32/
をコピペ後実行し、一般ユーザとして認証するだけ。
使用したバージョン:
- Adobe AIR 1.5
Mandriva Linux向けRPMパッケージの.specファイルにおけるマルチアーキテクチャ向けのファイルの扱いについて
ライブラリのパッケージでは、ものによっては[名前]-configという実行ファイルがインストールされる。これはpkg-configのような働きをするもので
- パッケージ(ライブラリ)がインストールされているかどうか
- このパッケージを利用したアプリケーションをビルドするときにどのようなオプションをコンパイラ/リンカに付けるべきか
などを出力する。pkg-configの場合は、パッケージ側がそういった情報を
- /usr/lib/pkgconfig/ - アーキテクチャはディストリによって異なる
- /usr/lib64/pkgconfig/ - 64bit用
- /usr/lib32/pkgconfig/ - 32bit用・ディストリによってはない
の中の.pcファイルに保存するのだが、従来型の[名前]-configというスクリプトは実行ファイルのディレクトリに入ることになるため、i586版とx86_64版など、複数のアーキテクチャ向けのパッケージを同時に存在させたいときに問題が出る。
そこで、これをうまく処理するための仕組みが用意されていて
http://web.archive.org/web/20081021095417/http://wiki.mandriva.com/en/Policies/Multiarch
を参考にして
- 「%install」の最後に%multiarch_binaries
- 「%files」に%multiarch
を下のように記述することで利用できる。「%files」には%{_bindir}/[名前]-configについても通常通り書いておく。
%define develname %mklibname -d onig (中略) %install %{__rm} %{buildroot} -fr %makeinstall %{__lzma} AUTHORS HISTORY README* doc/* %multiarch_binaries %{buildroot}/%{_bindir}/onig-config (中略) %files -n %{develname} %defattr(-, root, root) %{_bindir}/onig-config %{_includedir}/*.h %{_libdir}/libonig.so %doc doc/* %multiarch %{multiarch_bindir}/onig-config
上は鬼車向けに自前で作成した.specファイルからの抜粋だが、後にMandriva Linux 2009.0には「lib(64)onig*」のパッケージが存在していることが分かったため、お蔵入りとなってしまった*1。
このようにして作成されたRPMパッケージでは、該当ファイルが
(x86_64版の開発ファイルパッケージ) -rwxr-xr-x 1 root root 1384 Jan 8 20:04 ./usr/bin/multiarch-x86_64-linux/onig-config lrwxrwxrwx 1 root root 32 Jan 8 20:04 ./usr/bin/onig-config -> ../../usr/bin/multiarch-dispatch (i586版の開発ファイルパッケージ) -rwxr-xr-x 1 root root 1382 Jan 8 20:05 ./usr/bin/multiarch-i386-linux/onig-config lrwxrwxrwx 1 root root 32 Jan 8 20:05 ./usr/bin/onig-config -> ../../usr/bin/multiarch-dispatch
このように配置される。両方をシステムにインストールして動作を確認すると
$ onig-config --libs -L/usr/lib64 -lonig $ linux32 onig-config --libs -L/usr/lib -lonig
このように、うまく両方を扱えている。