Snapパッケージ

これまで3回にわたって、Ubuntu、SUSE Linux Enterprise Server/openSUSE Leap、Red Hat Enterprise Linux/CentOSのパッケージ管理システムについて取り上げてきた。各Linuxディストリビューションで使用しているパッケージ管理システムは異なっているものの、ベースに採用している概念は似ており、コマンドは異なるが操作方法もよく似ていることを説明した。

今回は、別の切り口からSnapというパッケージについて紹介する。パッケージ管理システムとしての名称は「Snappy」というのだが、Snapパッケージという名称のほうが使われているようなので、ここでもSnapパッケージという名称を使う。

  • Snapcraft - The app store for Linux

    Snapcraft - The app store for Linux

Snapパッケージ(Snappy)は、Canonicalが主に開発を支援しているパッケージおよびパッケージ管理システムだ。もともと、Canonicalが手掛けるUbuntuの派生システム間でユニバーサルに使用できるパッケージ管理システムとして設計されたものだが、現在ではUbuntuに限らず、多くのLinuxディストリビューションで使用できるパッケージとなっている。これまでのパッケージ管理システムがLinuxディストリビューションに強く依存しているのと比べ、SnapパッケージはLinuxディストリビューションに依存しないという特徴がある。

つまり、複数のLinuxディストリビューションを管理しているのであれば、Snapはパッケージ管理の手間を減らすことにつながる可能性があるということだ。パッケージのアップデートも自動的に行ってくれるので、うまく行けばほぼ放置でよい。

Snapパッケージの特徴

現在、Linuxディストリビューションが主に採用しているパッケージ管理システムは、全体で1つのまとまりになっている。一部のパッケージだけバージョンアップしたり、一部のパッケージだけバージョンをロールバックしたりといったことは、基本的にはできない。常に全体で最新版へアップデーする、これがこれまでのLinuxのパッケージ管理システムだ。

一方、Snapはパッケージひとつひとつに高い独立性があり、パッケージごとにバージョンを差し戻すということができる。独立性が高いので、Linuxディストリビューションに依存せず、どのディストリビューションでも使用することができる。これがSnapパッケージとそれ以外のパッケージ管理システムの大きな違いだ。

似たようなコンセプトのパッケージ管理システムはTrueOS(旧PC-BSD)のPBIで実現されている。加えて、Snapパッケージには、Canonicalが支援しており、すでに複数の主要Linuxディストリビューションで使用できるという強みがある。

既存のパッケージ管理システムでは、使っていく途中で不要になるパッケージなどが生じるが、Snapパッケージはそういうことがない。また、使っていくうちにライブラリの依存関係で問題が発生することもあるのだが、Snapにはそういったこともない。独立性が高いためパッケージひとつひとつのサイズが大きくなる傾向はあるが、依存関係の問題が少ないのである。

さらに、メタデータのアップデートもパッケージのアップデートも自動的に行われるという特徴がある。Snap経由でインストールしたソフトウェアは、何もしなければ常に最新版になる。手を抜きたい管理者にとって、Snapは渡りに船ということになる。

また、Linux向けのアプリケーションパッケージを開発するベンダーや開発者にとってもSnapは福音となる。これまでのパッケージ管理システムでは、その時のパッケージ管理システムに適合するように新しいパッケージを開発し続けなければならないが、Snapパッケージにはそしたことがない。また、Linuxディストリビューションごとにパッケージを開発する必要もなくなる。Snapパッケージを開発すれば、それで複数のLinuxディストリビューションに対応することになるからだ。

最終的に、Snapパッケージがどこまで普及するかはわからない。この手の技術ははやりすたりが早いからだ。しかし、注目しておいて損のない技術ではないかと思う。

コマンド体系の比較

次に、これまで取り上げてきたコマンドだるyum、zypper、aptとどのような違いがあるかを比べてみよう。パッケージのインストール、アンインストール、検索を行うコマンドを比較すると、次のようになる。この辺りはほとんど同じだ。

Snap RHEL/CentOS SLES Ubuntu
snap install パッケージ名 yum install パッケージ名 zypper install パッケージ名 apt install パッケージ名
snap remove パッケージ名 yum remove パッケージ名 zypper remove パッケージ名 apt remove パッケージ名
snap find パッケージ名 yum search パッケージ名 zypper search パッケージ名 apt search パッケージ名

パッケージをアップデートしたり、不要になったパッケージを削除したりする方法を比較してみると、次のようになる。表の最後の行はパッケージをロールバックする方法だ。

Snap RHEL/CentOS SLES Ubuntu
(自動) yum check-update zypper refresh apt update
snap refresh --list yum check-update zypper list-updates apt list --upgradable
(自動) yum update zypper update apt upgrade
(不要) yum remove $(package-cleanup --leaves) zypper packages --orphaned --unneeded; zypper remove パッケージ名 apt autoremove
snap revert パッケージ名 (なし) (なし) (なし)

上の表からもわかるように、Snapパッケージとそれ以外のパッケージ管理システムはベースとしている概念が異なるため、操作に該当しないものがあることがわかる。

  • snapコマンドの操作例

    snapコマンドの操作例

Snapでは唯一、対象となるLinuxディストリビューションにSnap関係のデーモンとコマンドをインストールする時だけ、対象となるLinuxディストリビューションのパッケージ管理システムを使う。一旦セットアップが完了した後は、snapコマンドで操作を行うことになる。

Snapは採用か否か

Snapパッケージの最も悩ましいポイントは、どのLinuxディストリビューションを使うにしても、結局そのLinuxディストリビューションのパッケージ管理システムとSnapの双方を使う必要があることだ。今のところ、全部Snapで管理できる主要なLinuxディストリビューションは存在していないのだ。

登場した背景を考えると、Snapはしばらく消えることはないだろう。しかし、それぞれのLinuxディストリビューションのパッケージ管理システムを越えて主要な存在になっていくかと言われたら、まだ微妙というのが正直なところではないかと思う。

しかし、試しにこのSnapを使ってみるのは悪くない選択肢ではないだろうか。興味を持ってもらえたら幸いだ。