Ubuntu Weekly Recipe

第443回 再起動なしにカーネルを更新する「Canonical Livepatch Service」

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

Ubuntu Weekly Topicsの2016年10月21日号でも伝えているように,再起動をすることなくカーネルを更新できる「Canonical Livepatch Service」が発表されました。今回はこのサービスの使い方と仕組みについて紹介します。

「Canonical Livepatch Service」とは

「Canonical Livepatch Service」は,カーネルを再起動することなくセキュリティフィックスを適用するサービスです。サービスそのものの概要はTopicsを参照してください。仕組みとしてはKernel 4.0で実装され,Ubuntu 16.04 LTSから有効化されたCONFIG_LIVEPATCHを使っています。

カーネルのLivepatch機能とサービス側の都合により,このサービスを利用するにはいくつかの制約が存在します。

  • Intel/AMDの64ビットアーキテクチャ(amd64)のみ
  • Ubuntu 16.04 LTSの公式カーネル(Linux 4.4)のみ
  • Ubuntuカーネルでいうところのgenericフレーバーとlow latencyフレーバーのみ
  • Ubuntu 16.04 LTSから標準でインストールされるようになったsnapdの2.15以降が必要
  • Canonical Livepatch Serviceサイト(https://livepatch.canonical.com:443)へのアクセス
  • Ubuntu Single Sign Onアカウント(Launchpadなどのアカウント)

snapdが必要なのは,Livepatch Serviceのクライアントをsnapパッケージとして提供しているためです。このクライアントは,デーモンとして常駐し必要に応じてサーバーからパッチモジュールをダウンロードした上で,カーネルに取り込みます。

Livepatchクライアントは,Canoncialの商用サポートサービスであるUbuntu Advantageの機能であり,システム管理ツールでもあるLandscapeの一部として提供されます。そのためクライアントのソースコードは公開されていません。しかしながら使用している仕組みそのものは,もともとのカーネルにも実装されているものですし,Livepatch Serviceから提供するカーネルモジュールのソースコード自体は公開されています。そのため,本サービスを使用しなくても個人のマシンで同等の機能を実現することは可能です※1)。

※1
もちろんテストの量や安定性を考えると,サービスを利用したほうが安全です。またビジネスで使うマシンであればUbuntu Advantageを購入して少しでもCanonicalの懐を潤していただければ,Canonicalの開発リソースが増え,その結果としてコミュニティ側にも恩恵があるはずです。なにとぞよろしくお願いいたします。

またセキュリティパッチそのものは,Livepatch Serviceとは関係なく提供されます。従来通りsudo apt update && sudo apt upgradeの組み合わせで最新のカーネルがインストールされますので,再起動してそのカーネルに切り替えてください。Livepatch Serviceはあくまで,再起動することなくセキュリティパッチを適用できるというサービスです※2)。

※2
Livepatchを利用できないパッチも存在しえます。またカーネル以外のパッケージの更新によって再起動を要求する場合もあります。このためパッケージの更新時にまったく再起動が不要になるというわけではありません。

Livepatch Serviceを使ってみる

まずはLivepatch Serviceをそのまま使ってみましょう。3台までならUbuntu Advantageを購入しなくても利用できます。あらかじめUbuntu Livepatch Serviceのサイトから,利用トークンを入手しておいてください。

図1 Ubuntu userにチェックを入れて,Get your tokenをクリックする

画像

図2 トークンが表示されるので控えておく

画像

次にsnapコマンドを使ってクライアントをインストールします。

$ snap find livepatch
Name                 Version  Developer  Notes  Summary
canonical-livepatch  5        canonical  -      Canonical Livepatch Client
$ sudo snap install canonical-livepatch
(中略)
$ snap list
Name                 Version  Rev  Developer  Notes
canonical-livepatch  5        15   canonical  -
ubuntu-core          16.04.1  423  canonical  -

snapはUbuntu 16.04 LTSから標準でインストールされるようになった,新しいパッケージフォーマットであるsnapを管理するためのコマンドです。snapフォーマットは,必要なソフトウェアをすべてそのパッケージに固めて提供するタイプのフォーマットであり,強制アクセス制御とシステムから独立したファイルツリーによるセキュリティ機構や,最近では言語ごとに存在するパッケージングシステムを流用しやすいパッケージングツールなどが特徴です。同様のアプリケーション配布システムとしてはFlatpakAppImageが存在するものの,どちらかというとCoreOSやRHELのAtomicに近い仕組みを採用しています。

さて,snapでは最小限のルートファイルシステムをubuntu-coreとしてインストールします。個々のsnapパッケージはこのubuntu-coreの上にかぶせる形でルートファイルシステムを構築し,個々のコマンドを実行することになります。snapパッケージはすべて/snapディレクトリ以下に保存されます。

$ ls /snap/
bin  canonical-livepatch  ubuntu-core
$ ls /snap/canonical-livepatch/current/
canonical-livepatch   command-canonical-livepatchd.wrapper  etc   meta  usr
canonical-livepatchd  command-canonical-livepatch.wrapper   keys  sbin
$ ps -fe | grep livepatch
root      1545     1  0 20:05 ?          00:00 /snap/canonical-livepatch/15/canonical-livepatchd
shibata   1587  1217  0 20:05 pts/25     00:00 grep --color=auto livepatch

canonical-livepatchをインストールすると,canonical-livepatchdが立ち上がります。またcanonical-livepatchコマンドを使ってこのデーモンと通信することになります。ちなみに,どちらのコマンドもGo言語で作られているようです。

著者プロフィール

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

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

コメント

コメントの記入