Ubuntu Weekly Recipe

第392回 Snappy Ubuntu Coreを試してみる

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

Snappyを起動する:AWS編

手元で仮想マシンを立ち上げられないのであれば,クラウドを利用しましょう。AWSの操作はmultiverseにあるec2-api-toolsでもいいのですが,今回はPython製のawscliを使用します注5⁠。

注5)
AWSの進化に対して,Ubuntuの公式リポジトリにあるパッケージはどうしても遅れがちです。用途に合わせてUbuntuパッケージ版を使うか,公式リリース版を使うかを判断する必要があります。もちろんWebインターフェースからでもかまいません。
$ sudo apt-get install python3-pip
$ sudo pip3 install awscli
$ aws configure
AWS Access Key ID [None]: (access key)
AWS Secret Access Key [None]: (secret access key)
Default region name [None]: ap-northeast-1
Default output format [None]: json
$ ssh-keygen -t rsa -f ~/.ssh/snappy-rsa
$ aws ec2 import-key-pair --key-name snappy-key --public-key-material file://~/.ssh/snappy-rsa.pub

今回はPython 3のpipとawcliを使用しています。Python 2環境しかない場合は「python-pip」パッケージをインストールして「pip」コマンドを使用してください。

「access key」「secret access key」の取得法方はAWSのドキュメントを参照してください。ssh-keygenで鍵を作っていますが,既存の鍵を流用してもかまいません。

前述のKVMイメージもそうですが,SnappyのイメージはCloud-initに対応しています。このため設定ファイルをUser Dataとして渡すことで起動時の自動的な追加設定を行えます。今回はSnappyイメージでsshを有効化したいため,次の内容のcloud.cfgファイルを作成します。

#cloud-config
    snappy:
       ssh_enabled: True

最新のstableチャンネルのイメージを検索しましょう。⁠099720109477」はCanonicalのOwner IDです。また,検索が面倒であれば,cloud-images.ubuntu.comの最新イメージリストファイルを参照するという手もあります。

$ aws ec2 describe-images --owners 099720109477 \
    --filters "Name=name,Values=*Snappy-core-stable*"

上記で検索したImageId(ami-6c0a6704の部分)を元に,Snappyインスタンスを起動します。

$ aws ec2 run-instances --image-id ami-6c0a6704 \
  --key-name snappy-key --instance-type m3.medium
  --user-data file://cloud.cfg

出力されるInstanceIdを保存し,インスタンスのPublicDnsNameを取得します。

$ aws ec2 describe-instances --instance-ids InstanceId
$ ssh -i ~/.ssh/snappy-rsa ubuntu@PublicDnsName

Microsoft AzureやGoogle Compute Engineについても,それぞれのツールで最新イメージを検索して,インスタンスを立ち上げるという手順自体は同じです。最新のイメージIDの取得方法はツールに依存しますが,cloud-images.ubuntu.comにはAzure用GCE用のイメージリストのJSONファイルがそれぞれ用意されていますので,そちらを利用するのも良いでしょう。

Snappyをサポートしていないクラウドサービスであっても,QEMUイメージファイルやOVAファイルのインポートをサポートしているのであれば前述のKVM用のQEMUイメージファイルやOVAファイルを使ってSnappyのイメージを起動できる可能性があります。

snappyコマンドの使い方

Snappyシステムの中では「snappyコマンド」を使って,パッケージのインストールや削除,システムのアップデートを行います。従来のAPTシステムは利用できないので注意してください。

システムの状態

まずはinfoサブコマンドでシステムの状態を確認してみましょう。

$ snappy info
release: ubuntu-core/15.04/stable
architecture: amd64
frameworks: webdm
apps:

releaseフィールドは使用しているシステムの状態で,ここでは「ubuntu-coreシステムの15.04リリースのstableチャンネル」を使用していることがわかります。architectureフィールドはそのままの意味です。

frameworksフィールドにはインストールされている「フレームワーク」が,appsフィールドにはインストールされている「アプリケーション」が表示されます。アプリケーションはいわゆるdebパッケージファイルとは異なり,snappy用に作成した「snapパッケージ」としてインストールされたパッケージになります。snapパッケージは,システムとは独立したパスにインストールされ,AppArmorを用いてその実行権限が厳しく制限されています。基本的に異なるアプリケーション間での連携はできません。

アプリケーションが独立して動作するのに対して,フレームワークは複数のアプリケーションにまたがって利用されるライブラリやフレームワークをインストールする際に使われる「特別なアプリケーション」です。そのため,最初からいくつかの権限が与えられた状態でインストールされます。

KVMイメージの場合,最初からwebdmフレームワークがインストールされています。これについては後ほど紹介します。

インストールされているパッケージのバージョンリストはlistサブコマンドで確認できます。

$ snappy list -v
Name          Date       Version Developer
ubuntu-core   2015-09-17 5       ubuntu*
webdm         2015-09-17 0.9     canonical*
generic-amd64 2015-09-17 1.4     canonical*

最後についているアスタリスク(*)「-v」オプションによって表示される「アクティブフラグ」と呼ばれるもので,現在使用しているシステムを意味します。これはどういうことかというと,Snappyシステムは元から複数のシステムパーティションを持っており,システムアップデート時は「使っていないほう」のシステムを更新し,再起動後にそちらに切り替えるようになっているのです。

$ sudo parted /dev/sda print
Model: ATA QEMU HARDDISK (scsi)
Disk /dev/sda: 3900MB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:

Number  Start   End     Size    File system  Name         Flags
 1      4194kB  8389kB  4194kB               grub         bios_grub
 2      8389kB  75.5MB  67.1MB  fat32        system-boot  boot, esp
 3      75.5MB  1149MB  1074MB  ext4         system-a
 4      1149MB  2223MB  1074MB  ext4         system-b
 5      2223MB  3900MB  1677MB  ext4         writable

grubがブートローダーをインストールする領域で,system-bootはUEFIパーティションです。system-aとsystem-bがSnappyのコアシステムをインストールするパーティションになります。system-aとsystem-bは読み込み専用でマウントされます。基本的に稼働中のパーティションの内容を変更することはありません。

writableはユーザーデータやアプリケーション,フレームワークをインストールする領域です。また/etcのような変更が必要な一部のファイルについてもこちらにマウントされます。たとえばフレームワークやアプリケーションは/apps以下にインストールされます。

$ ls -l /apps/webdm/
drwxr-xr-x 6 clickpkg clickpkg 4096 Sep 17 12:51 0.9
lrwxrwxrwx 1 root     ubuntu      3 Oct  4 10:14 current -> 0.9

上記を見るとわかるように,アプリケーションもバージョンごとにインストールされる先が異なります。currentが現在使用中のバージョンへのシンボリックリンクになっているため,新しいバージョンをインストールしたあとも,元のバージョンへ簡単にロールバックできるようになっているのです。

著者プロフィール

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

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