ArkoseはLXCを用いたサンドボックス環境を簡単に作成できるツールです。Arkoseを使うと、既存の環境に変更を加えることなく、アプリケーションのインストールしたり、実際に動作を試すことができます。
そこで今回は、このArkoseの使い方を紹介します。
Arkoseとは
Arkoseは、LXC(Linux Containers)と呼ばれる仮想化技術を用いた、CanonicalのStephane Graberが開発しているデスクトップアプリケーション用のサンドボックスツールです。
Ubuntuには数多くのデスクトップアプリケーションが存在し、ソフトウェアセンターを使えばそれらを簡単にインストールすることができます。しかしながら、そのアプリケーションが本当に目的に適ったものかどうかは実際にインストールして試してみる他ありません。試してやはり必要ないとなったときに、アンインストールすることで、できるだけインストール前の環境に戻したいというのが人情です。
幸いDebian/Ubuntuの強力なパッケージ管理システムとポリシーに従った公式リポジトリのパッケージを使っている限り、アンインストールするだけでインストールする前の環境に戻すことができます。ただし非公式リポジトリのパッケージをインストールしたり、Debianパッケージになっていないソフトウェアをインストールする場合はこの限りではありません。そもそもテストが終わるまでは本番環境へのインストール自体を避けたいという考え方もあるかもしれません。
Arkoseを使うと、アプリケーションのインストール、実行、アンインストールまでを本番とは独立した環境で行えます。
同様のことはVirtualBoxやKVMといった仮想マシンを使うことでも実現可能ではあるものの、これらはまず最初にテスト用の仮想マシンの準備が必要です。また、LXCは他の仮想化技術と比べてオーバーヘッドが小さく、実環境とほぼ同じ速度でアプリケーションを実行できるというメリットがあります。ユーザーランド部分もできる限り既存のものを流用するため、ディスクスペース的にも優しい作りになっています。
ただし、LXCはその仕組み上、仮想環境のゲストとホストが同じカーネルプロセスを使うことになります。このため、異なるカーネルでしか動作しないアプリケーションをテストすることはできません。LXC単体でなら、Ubuntu上に他のOS(のユーザーランド部分)をインストールするような作業も可能ではあるのですが、そのためにはいろいろとプラットフォーム固有の設定を行う必要があります。
ArkoseはあくまでUbuntu上でアプリケーションをテストするためのツールだと思っておいた方が良いでしょう。
ちなみに、ArkoseはほぼすべてがPythonを使って作成されています。PythonでLXCを操作したい場合はArkoseのコードを参考にすると良いかもしれません。
Arkoseを使ったアプリケーションの起動
まずはArkoseをインストールします。
arkose-guiは、アプリケーションの起動や権限の設定をグラフィカルに行えるGUIツールです。上記以外にもArkoseのツールとして、Nautilusから右クリックで特定のスクリプトをサンドボックスで実行できるarkose-nautilusが存在しますが、こちらはまだGNOME 3への対応が終わっていません。
GUIアプリケーションを動作させるためには、DBusまわりの環境変数を設定するために、インストール後に一度ログアウトして再度ログインする必要があります。
実際に端末からArkose越しにGeditを起動してみましょう。
"-n"オプションはサンドボックスからネットワークを使用することを示すフラグです。GUIアプリケーションの場合は、XやDBUSなどでネットワークを使う必要があるため、このオプションは必須と考えて差し支えありません。"-c"オプションの後ろで、実際に起動するコマンドを指定しています。
図1では普通に起動したGeditとArkoseで起動したGeditを並べてみました。見た目にはメニュー意外ほとんど違いはありませんが、実際に動作させてみるとWindow間のタブの移動ができなくなっていることがわかります。なお、メニューも同じにする(UbuntuのGlobalMenuを使う)には、DBusの設定が必要です。
仮想環境のイメージや設定ファイル、ディレクトリは"~/.arkose/"に生成される一時ディレクトリに保存されます。そのため、例えばサンドボックス内で新たなファイルを生成した場合は、必要に応じてこのディレクトリから取り出すことができます。ちなみに、ホームディレクトリも同じように一時ディレクトリにCopy-on-Write(COW)で生成されますが、"-h"オプションをつけることで既存のホームディレクトリをそのまま流用することもできます。
Arkoseのプロファイル
特定のディレクトリはCOWで、特定のディレクトリは直接アクセスといったような、柔軟な設定を行いたい場合があるかもしれません。Arkoseの場合はプロファイルを作成することで実現可能です。
すでにいくつかのプロファイルサンプルが/usr/share/arkose/wrapper-profilesに用意されています。プロファイルを指定してArkoseを起動するには以下のコマンドを実行してください。
確認画面はその場で一時的に編集可能です。各設定項目の内容はソースコードなどを参考にしてください。
gedit.confはDBusの設定も行っているため、arkose-wrapper-guiから起動したGeditのメニューは、GlobalMenuに統合された状態で表示されます。
シェル環境をArkoseで起動する
以下のようにArkoseでシェルを起動すれば、簡単に一時的な実験環境を用意できます。
この環境であれば、好きなアプリケーションをインストールし放題です。シェルをexitすると実験環境でインストールされたすべてのアプリケーションが破棄された状態に戻ります。
まとめ
このように、Arkoseを使うとお手軽に実験環境を構築できます。面倒なchroot環境の構築や、ネットワークの設定、果てはDBusの設定まですべてArkoseとLXCがうまくやってくれるので、複雑なことをしない限りユーザーは特別な知識なく、本番環境と同じように実験環境を使用できるのです。
現在開発中のPresiceでは、アプリケーション開発などでこのArkoseの利用をさらに推し進めるべく、様々な案が提案されています。