試験運用中なLinux備忘録・旧記事

はてなダイアリーで公開していた2007年5月-2015年3月の記事を保存しています。

Adobe AIR 1.5のインストール(準備とインストーラ関係)

(2015/1/8)GNU/Linux向けのAdobe AIRは廃止され、本記事の内容も古い内容となっている。

Adobe社が提供するAIR(Adobe Integrated Runtime)というランタイムパッケージを利用した「AIRアプリケーション」では、既存のWeb技術を織り交ぜたクロスプラットフォームなデスクトップアプリケーションを作成することができる。
このランタイムと開発ツール(SDK)が2008年12月にGNU/Linuxに対応し、色々なAIRアプリケーションがGNU/Linux(の内、特定のアーキテクチャ上)で実行できるようになっている。

  1. 対応アーキテクチャと必須パッケージ
  2. インストーラについて
    1. 一時ディレクトリからファイルを取り出して配置してみるテスト

対応アーキテクチャと必須パッケージ

2009/1/5の時点では、GNU/LinuxAIRx86_32版のみの提供となっている。x86_64版のGNU/Linux上では、必要なパッケージについてx86_32版のものを用意することで利用が可能となる。
最低限必要なパッケージは正確には分からないが、x86_32版のGTK+ 2(Mandriva Linux 2009.0では「libgtk+2.0_0」)とlibnss3は確実に必要。それだけではインストーラのウィンドウが出ず、インストーラを起動した端末は操作できない(動作はしている)という状態になることがあるが、x86_32版XULRunner(Mandriva Linux 2009.0ではパッケージ名「libxulrunner1.9」)まで入れると動作した。
その他、RPMパッケージを作成するためのパッケージ「rpm-build」も必要。これがないと

「管理者によってインストールが禁止...」のエラーになった。
更に、一般ユーザでグラフィカルログインしている状態でインストールしたい場合、「gksu」のパッケージも必要。x86_64版Mandriva Linuxでは「x86_64版Mandriva Linuxにおいてgksuが使えない問題とその対処」の問題があるため、修正が必要。
一方、x86_64版のUbuntu Intrepid(8.10)で試したところ、.binファイルを実行可能にしてもうまく実行されず、端末から実行してみると

$ ./AdobeAIRInstaller.bin
bash: ./AdobeAIRInstaller.bin: No such file or directory

となってしまった。
これだけではどうしていいのか分からなかったが、x86_32版各種ライブラリを提供する「ia32-libs」パッケージをインストールしたところ、この問題は解決し、AIRのインストールも最後まで行けた。これだけでインストールできてしまったのが驚きだが
http://web.archive.org/web/20090122062413/http://kb.adobe.com/selfservice/viewContent.do?externalId=kb408084
などを見ると、過去のOSバージョンでは面倒だったのかもしれない。この「ia32-libs」という一枚岩的なパッケージは、必要なx86_32版パッケージが中に含まれていないと非常に厄介なのだが、AIRは使えるようで安心。Ubuntu 8.10の時点では「ia32-libs」にはSDL、libglade、Qt4、JACKのライブラリ、ALSAのPulseAudioプラグインなどもあり、品揃えは充実してきているが、gtkglextなど、入っていないものもある。*1
なお、x86_64版Debian/Ubuntuでは、AIRアプリケーションのインストールがそのままでは正常に動作しない。対処方法は別記事で扱う。

インストーラについて

公式サイトからダウンロードしたファイルAdobeAIRInstaller.binは独自のインストーラになっていて、一般ユーザで実行した場合、gksuが使用されて管理者として認証後インストールされる。

最初のダイアログ・使用許諾契約書

インストール中

インストール完了
このインストーラではRPMdebというパッケージ管理システムを使用していて、RPMもしくはdeb形式をパッケージ管理システムに用いていないディストリではインストールできない。ただし、別の方法でAIRアプリケーションの実行をすることは可能で、詳しくは別記事にて扱う。

一時ディレクトリからファイルを取り出して配置してみるテスト
このファイルは/tmp/の下のディレクトリ(air-xxxxxx)に内容を展開するのだが、そこからファイルを取り出して配置しても、正常に動かないファイル(後述)があった。その実験を行っていたときに作成したのが以下のスクリプトで、インストーラが起動した後、最初のダイアログが出ているときに実行すると/tmp/air15.tar.bz2にまとめる(ディレクトリ構成を正確に再現するものではない)。

#! /bin/sh

OUTFILE=/tmp/air15.tar.bz2
PREFIX=/usr
if [ -d /usr/lib32 ]; then
  # x86_64 Debian/Ubuntu/Gentoo etc.
  LIB=lib32
else
  LIB=lib
fi
if [ $(ls -ld /tmp/air.* | wc -l) -ne 1 ]; then
  die "number of tempdirs must be 1."
fi
D=/tmp/air15-d
S=$(ls -d /tmp/air.*)
cd "${S}/"
rm "${D}" -fr
mkdir "${D}/"{etc,opt} "${D}/${PREFIX}/"{bin,${LIB}} "${D}/${PREFIX}/share/"{applications,mime/packages} -p
cp -a "${S}/Certs/etc/opt" "${D}/etc/"
cp -a "${S}/Certs/usr/bin/aucm" "${D}/${PREFIX}/bin/"
cp -a "${S}/Certs/usr/lib/libadobecertstore.so" "${D}/${PREFIX}/${LIB}/"
mkdir "${D}/var/opt/Adobe AIR/Shared/Adobe/AIR/Updater/" -p
for x in 16 22 24 32 48 64 128; do
  mkdir "${D}/${PREFIX}/share/icons/hicolor/${x}x${x}" "${D}/${PREFIX}/share/icons/gnome/${x}x${x}/mimetypes/" -p
  cp -a "${S}/build/opt/Adobe AIR/Versions/1.0/Resources/support/icons/${x}x${x}/"*.png "${D}/${PREFIX}/share/icons/hicolor/${x}x${x}/"
  cp -a "${S}/build/opt/Adobe AIR/Versions/1.0/Resources/support/icons/${x}x${x}/"*.png "${D}/${PREFIX}/share/icons/gnome/${x}x${x}/"
  cp -a "${S}/build/opt/Adobe AIR/Versions/1.0/Resources/support/icons/${x}x${x}/"/air.png "${D}/${PREFIX}/share/icons/gnome/${x}x${x}/mimetypes/gnome-mime-application-vnd.adobe.air-application-installer-package+zip.png"
done
cp -a "${S}/build/opt/Adobe AIR/Versions/1.0/Resources/support/AdobeAIR.desktop" "${D}/${PREFIX}/share/applications/AdobeAIR-application-vnd.adobe.air-application-installer-package+zip.desktop"
cp -a "${S}/build/opt/Adobe AIR/Versions/1.0/Resources/support/AdobeAIR.xml" "${D}/${PREFIX}/share/mime/packages/"
cp -a "${S}/build/opt/Adobe AIR/" "${D}/opt/"
rm "${D}/opt/Adobe AIR/Versions/1.0/Resources/support/" -fr
cd "${D}/"
rm "${OUTFILE}" -f
tar jcvf "${OUTFILE}" --owner=root --group=root .
rm "${D}" -fr

上記スクリプトでまとめたファイルを展開しただけで動かなかったファイルというのは/opt/Adobe AIR/Versions/1.0/airappinstallerで、端末には

unexpected error: TypeError: Error #1009

と出ていた。インストーラを使用して正常に動作する状態を作り、色々試してみたところ、この/opt/Adobe AIR/Versions/1.0/airappinstallerは(Mandriva上では)/var/lib/rpm/以下のデータベースファイルを開いている?ようで、インストーラによってAIRをインストールした後の状態のデータベースがあれば起動するが、入っていない状態のデータベースで起動するか、このディレクトリのファイルを名前変更すると「Error #1009」で落ちるようだ。というわけで、パッケージ管理システムまで深く入り込んでいることが分かったため、インストーラを直接使用しないインストール方法でAIRアプリケーションのインストーラを使用することはかなり困難と思われる(なくても実際にはあまり困らない?)。
AIRはディストリによっては何の問題もなくインストールでき(Mandriva 2009.0とUbuntu 8.10・ともにx86_64版)、アンインストールも、メニュー(「アクセサリ」や「ツール」)の「Adobe AIR Uninstaller」(一般ユーザではインストール時と同様にgksuが使用される)か

$ sudo "/opt/Adobe AIR/Versions/1.0/Resources/Adobe AIR Updater" -arp:uninstall

などで行えるのだが、結構厄介なインストーラという印象。

*1:話が多少脱線しているが、個人的には、x86_64版のDebianあるいはUbuntuが将来使えるものかどうかに大きく影響するため、ia32-libsの構成パッケージは気になる