Ubuntu Weekly Topics

2014年12月12日号 “Snappy” Ubuntu Core・Ubuntu Make・UWN#395

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

Snappy Ubuntu Core

「aptやyumはもう古い」という時代がやってくるかもしれません。12月9日に,⁠Snappy Ubuntu Core」と呼ばれる新しいUbuntuファミリーが発表されました

Snappy Ubuntu Coreは,既存のUbuntu Core注1に相当する「ミニマムな」Ubuntuで,Ubuntu Touch用に開発された新世代のパッケージシステムを採用した「クラウド環境やコンテナ環境を前提にした」OSです。このプロジェクトはきわめて野心的なチャレンジで,Linux環境のありかたを大きく変化させる可能性を秘めています。

注1
Ubuntu Coreはtarballで配布されるUbuntuのファイルシステムで,⁠apt-getだけが動作する状態のUbuntuから,カーネル関連のファイルを除いたもの」に相当します。Debianのdeboostrapを走らせた後のファイルシステムとおおむね同じものです。Ubuntu Coreを利用する場合,このイメージにカーネル関連ファイルを追加してブートローダーをセットアップする必要があります。⁠snappy⁠なUbuntu Coreとは異なり,たいていの一般ユーザーが利用するシナリオはあまり考慮されておらず,組み込み開発やVPS・IaaS/PaaSのOSとして,あるいは学習者がUbuntuの仕組みを把握するために利用するためのものです。

Snappy Ubuntu Coreの特徴は次の点です。

  • OSコア部分と,アプリケーションを動かすためのファイルシステムが完全に隔離されている。
  • OSコア部分は読み込み専用だが,任意にイメージを差し替えることでアップデートが可能。
  • 現状ではapt/debパッケージは利用できない。
  • 「snappy packages」と呼ばれる新しいパッケージ形式を採用し,アプリケーションの管理は「アプリケーションをまるごとコンテナに封印した」バイナリイメージをダウンロードして展開するだけ。
  • アプリケーションはそれぞれが完全に独立しつつ共存可能になっており(いわゆるside by side)⁠お互いに影響を及ぼさない。
  • Docker等がもたらした「1アプリケーション1コンテナ」モデルに近いが,完全なコンテナとは異なり,OSコア部分は共有できるようになっている。
  • いつでも,⁠前に正常に動いていた状態」にロールバックできる。

これらの特徴から分かるように,Snappy Ubuntu Coreは,AndroidやiOSのような,システムとアプリケーションを分離した環境です。

基本構造はUbuntu Touchと多くを共有しており,既存のものよりもさらに簡単にアプリケーションをインストールできるという特徴を持っています。いわゆるクラウド環境だけでなく,一般的なデスクトップやサーバー環境にも適用でき,⁠Linuxの管理」という概念を大きく変化させる可能性を秘めたデザインとなっています。

現在はアルファ~ベータフェーズで,インストール済みの環境をKVMイメージをダウンロードするか,Microsoft Azure上のインスタンスを使うもしくはuvtoolを用いてセットアップすることでテストできます。ごく近い将来に,AWS等の各種パブリッククラウド上で動作するテスト用イメージが提供される予定です。

“snappy⁠Ubuntu Coreは大きく分けてふたつのテクノロジー,⁠snappy packagesと呼ばれる新しいパッケージング」「snap可能なルートファイルシステム」で構成されています。⁠snappy⁠も二重の意味で用いられており,単純に「手軽な」⁠高速な」という意味では解釈しきれないものとなっています。順に見ていきましょう。

まずひとつめの技術的アプローチが,⁠snappy packages」です。これはUbuntu Phoneで利用されるClick Packageの発展系です。

snappy packagesは原則として,OS領域とは別の/appsディレクトリにインストールされ,各種データ類も専用のディレクトリに保存されます。Androidの/systemと/dataの使い分けに似たモデルとなっています。依存するライブラリ類も,ごく基本的なもの以外はアプリケーションごとに準備する設計となっており,他のアプリケーションが管理する空間には原則としてアクセスできません。

また,DockerやLXCのイメージをそのまま「アプリケーションのパッケージ」として扱えるようになっており,⁠OSとしての基本機能を提供するシステム領域」と,⁠アプリケーションごとのデータ領域」という空間を持っているイメージです。

おおむねAndroidのアプリケーションに近い設計を採用している点がポイントで,隔離にはuid/gidベースのパーミッションではなく,AppArmorを用いてカーネルレベルで強制する仕組みです。

これにより,各種アプリケーションの「snapshot」的なイメージを入手することで,手軽に動作させることができます。これが一つ目の「snappy」です。

もうひとつの技術的アプローチは,安全性を担保するための「ルートファイルシステムの二重化」です。⁠snappy⁠Ubuntu Coreは「OSのコア部分は単純にダウンロードしてきて展開するだけ」という仕組みなので,⁠なにかの問題でブート不能なイメージが展開されてしまい,システムが起動できなくなる」という問題も同時に抱え込みます。アップデータを完璧に検証するのも一つの方法ではありますが,精神論や人的チェックだけではとても実用はできないので,なんらかの保険が必要になります。

ルートファイルシステムが読み込み専用でない(=通常の)環境であれば,アップデータを部分的にロールバックしたり,問題のある箇所を修正して対応することができます。しかし,ルートファイルシステムが読み込み専用だとどうにも打つ手がありません。ルートファイルシステムを導入する仕組みまで壊れてしまう可能性があるからです。これではアップデータの適用が一種の肝試しになってしまうため,⁠snappy” Ubuntu Coreではルートファイルシステムを二重化し,交互に利用するという仕組みが搭載されています。

これを理解するためには,Snappy Ubuntu Coreのファイルシステムレイアウトを把握する必要があります。Snappy Ubuntu Coreは,次の3つのパーティションで構成されています。

  • "system-a":OS領域その1(原則として読込専用)
  • "system-b":OS領域その2(原則として読込専用)
  • "writable":アプリケーション&データ(書込可能)

system-aとsystem-bは一種の双子構成で,原則として同じイメージが配置されます。通常は片方だけが「アクティブ」になり,システムはこの環境でブートします。そして,アップデートを行う場合はどちらか片方だけを更新します。更新したシステムになにか問題があれば予備になっていた側を「アクティブ」に変更します注2)⁠こうすることで,少なくともシステム上にひとつは「起動可能なはずの」OS領域が保存され,何か問題があっても対処できるようになります。

これが二つ目の⁠snappy⁠の意味で,⁠いつでも簡単にスイッチできる」環境を意味すると考えられます。

注2
いわゆる「Blue Green Deployment」として知られるテクニックです。要するにアプライアンスのたぐいや,スイッチ・ルーター,あるいは「二重化BIOS」搭載マザーボード等で採用されている「何かあったら予備側で起動する」機能と同じようなものを,Linuxシステムで実現したものです。

……ここまで見てきたように,⁠snappy⁠環境は非常に「現代的」な設計で,古典的なLinux/Unixのデザインから,大きく離れたものとなっています。

スマートフォンやタブレット用OSに近いデザイン思想を持っている点がポイントで,既存のLinux環境における,⁠システム管理者がパッケージシステムを用いて,ユーザーが利用できる環境」をデザインするという発想を捨ててしまい,コンテナや仮想アプライアンスに近い,⁠ディストリビューターがアプリケーション実行環境を整える」という考え方を採用しています。

現時点では「snappyな」Ubuntu Coreが提供されているだけですが,Ubuntu PhoneやJuju,LXDといったUbuntuファミリーの統合を考えると(+「snappyな」環境を前提にしたエコシステムの構築が順調に進めば)⁠⁠snappyな」Ubuntu DesktopやUbuntu Serverが登場する可能性もあります。

進歩の仕方によってはUbuntuだけでなく,さまざまなLinuxディストリビューションに影響を与える可能性もあり,楽しみな技術が登場したと言えそうです。⁠snappy⁠環境に興味を持った場合,開発者向けのドキュメントを参照してください。

“Ubuntu Make”

「Ubuntu上で,開発者向けツールを簡単にセットアップできる」ツール,Ubuntu Developer Tools Center(UDTC)の名前が変更になりました。

新しい名前はUbuntu Makeです。現時点ではリブランドに近く,中身の変化はありません。

著者プロフィール

吉田史(よしだふみひと)

Ubuntu Japanese Team Member株式会社創夢所属。システム管理を中心にWindows/PC Unixを併用している。Ubuntu Japanese Teamではパッケージサーバの管理や翻訳などの作業を担当。

コメント

コメントの記入