Ubuntu Weekly Recipe

第416回 Scratch 2.0をコンテナの中で動かす

この記事を読むのに必要な時間:およそ 7.5 分

Ubuntuコンテナの作成

Ubuntu 16.04 LTSの32bit(i386)版のコンテナを「scratch」という名前で用意します。16.04にしているのは単にこの先よく使うであろうからというだけで,14.04でもかまいません。また,アーキテクチャがamd64であるシステムでも,i386やarmhfのコンテナを動かすことができます。よって,ここから先の手順はホストのOSやアーキテクチャに関係なく同じ手順となります。

$ lxc launch ubuntu:16.04/i386 scratch
$ lxc exec scratch apt update
$ lxc exec scratch apt full-upgrade
$ lxc exec scratch apt install language-pack-ja
$ lxc exec scratch update-locale LANG=ja_JP.UTF-8

launchサブコマンドは必要であればLXDイメージをダウンロードし,指定した名前でコンテナを作成し,起動します。初回のlaunchでは,サーバーからLXDイメージ(ルートファイルシステムとメタデータ)をダウンロードするためそれなりに時間がかかるはずです。ダウンロードしたデータはキャッシュされるので,以降は同じOS/アーキテクチャであれば比較的短時間で起動します。

execサブコマンドでは,指定したコンテナに対してrootでコマンドを実行します。今回は最初の2つでとりあえず起動したコンテナのパッケージ構成を最新にしています。後者2つで日本語ロケールにしていますが,こちらはなくてもかまいません。もちろんcloud-initなどで自動化することも可能です。

次のようにexecサブコマンドでbashを起動すれば,コンテナ内部でインタラクティブに操作できます。

$ lxc exec scratch /bin/bash

実行コマンドにオプションをつけたい場合は,コンテナ名の後ろに「--」をつけてください。

$ lxc exec scratch -- apt list --upgradable

後ほどssh接続するために,公開鍵も登録しておきましょう。方法としてはホストの公開鍵(~/.ssh/id_rsa.pub)をコンテナの~/.ssh/authorized_keysに記録するか,ホストに登録済みの鍵ファイル(~/.ssh/authrized_keys)を直接コンテナにコピーしてしまうことです。

fileサブコマンドを使うと,コンテナとホスト間のファイルのやり取りが便利になります。ホストからコンテナへファイルを送る場合は次のような書式になります。

$ lxc file push 送るファイルのパス コンテナ名/送り先のパス

authorized_keysをコピーするなら,次のように実行します。

$ lxc file push ~/.ssh/authorized_keys scratch/home/ubuntu/.ssh/

ちなみにUbuntuのコンテナイメージは,最初からsshサーバーが起動しています。既定のユーザー名は「ubuntu」です。

他の方法として,GitHubに登録済みの公開鍵をインポートしてしまうという手もあります。Ubuntuイメージなら最初からssh-import-idコマンドが用意されていますので,次のように実行してください。

$ lxc exec scratch -- ssh-import-id -o /home/ubuntu/.ssh/authorized_keys gh:m-shibata

「gh:GitHub上のユーザー名」「https://api.github.com/users/ユーザー名/keys」にある公開鍵リストを「~/.ssh/authorized_keys」に登録してくれます。

Adobe AIRのインストール

32bitのUbuntu環境ができたので,さっそくAdobe AIRをインストールすることにしましょう。まずは依存するパッケージをインストールすることにします。

$ lxc exec scratch -- apt install -y libatk1.0-0 libc6 libcairo2 \
      libdbus-1-3 libfontconfig1 libfreetype6 libgcc1 libglib2.0-0 \
      libgtk2.0-0 libpango1.0-0 libpng12-0 libstdc++6 libx11-6 \
      libxext6 libxml2 libxrender1 libxslt1.1 libxt6 zlib1g \
      libgnome-keyring0 pulseaudio language-pack-ja fonts-takao
$ lxc exec scratch -- ln -s \
      /usr/lib/i386-linux-gnu/libgnome-keyring.so.0 \
      /usr/lib/libgnome-keyring.so.0
$ lxc exec scratch -- ln -s \
      /usr/lib/i386-linux-gnu/libgnome-keyring.so.0.2.0 \
      /usr/lib/libgnome-keyring.so.0.2.0

Adobe AIRはMultiArchに対応していないため,libgnome-keyringの共有ライブラリのリンクを作成しています。

Adobe AIRはヘッドレスインストールができません。X Window Systemが立ち上がっている必要があります。しかしながらコンテナの中でAdobe AIRのためだけにX Window Systemを立ち上げるのも冗長です。そこでSSHのFowardingX11オプションを使ってX転送することにします。

まずコンテナのIPアドレスを確認した上で,SSH接続しましょう。

$ lxc list scratch
+---------+---------+--------------------------------+------+------------+-----------+
|  NAME   |  STATE  |              IPV4              | IPV6 |    TYPE    | SNAPSHOTS |
+---------+---------+--------------------------------+------+------------+-----------+
| scratch | RUNNING | 10.0.4.1 (lxcbr0)              |      | PERSISTENT | 0         |
|         |         | 10.0.3.154 (eth0)              |      |            |           |
+---------+---------+--------------------------------+------+------------+-----------+

「lxc list」は作成済みのコンテナのリストを表示してくれます。引数にコンテナ名を渡すと,その名前でフィルタリングしてくれます。今回の場合はeth0の方のアドレスを使用します。

$ ssh -X ubuntu@10.0.3.154

もちろんコンテナ側にavahi-daemonをインストールして「scratch.local」を使ってアクセスするという手もあります。

$ lxc exec scratch apt install avahi-daemon
$ ssh -X ubuntu@scratch.local

以下,avahi-daemonが動いている前提で説明します。もし動かさない場合は「scratch.local」をコンテナのIPアドレスに置き換えてください。

以降はコンテナ内部の作業です。まずはAdobe AIRのインストーラーをダウンロードして実行権限をつけます。

$ wget http://airdownload.adobe.com/air/lin/download/2.6/AdobeAIRInstaller.bin
$ chmod +x AdobeAIRInstaller.bin

インストーラーは管理者権限で実行しなくてはならないのですが,Xの転送も必要です。そこで管理者に切り替わった上で,ubuntuユーザーのAuthorizationをマージします。

$ xauth list
scratch/unix:10  MIT-MAGIC-COOKIE-1  4fa5c4d1d6b5b7634a83f80263dbf2af
  => 現在有効なAuthorizationを表示している

$ sudo -i
# xauth merge ~ubuntu/.Xauthority
xauth:  file /root/.Xauthority does not exist

最後のメッセージは「/root/.Xauthority」ファイルがないので,作成したということになります。この状態でX転送されるようになっていますので,Adobe AIRのインストーラーを起動しましょう。

# ~ubuntu/AdobeAIRInstaller.bin

図2 ライセンスの確認画面。問題なければ「I Agree」を押す

画像

 

図3 インストール中。ネットワークの状況によっては数分かかる

画像

 

図4 このダイアログが出たらインストールの完了

画像

 

これでAdobe AIRのインストールは完了しました。なおファイルは「/opt/Adobe AIR」以下にインストールされます。半角空白がパスの中に入っているので,端末から中身を見る場合は気をつけてください。

著者プロフィール

柴田充也(しばたみつや)

Ubuntu Japanese Team Member株式会社 創夢所属。数年前にLaunchpad上でStellariumの翻訳をしたことがきっかけで,Ubuntuの翻訳にも関わるようになりました。