Snapパッケージ

投稿者: | 2018年4月4日

昨日、Buttercup のパッケージを探した時に、拡張子”.snap”のファイルが追加されていることに気が付きました。

見慣れないファイルだったので調べてみました。

Snapパッケージとは

Linuxディストリビューションを問わずに動作するパッケージ形式です。
以前ご紹介した AppImage によく似ています。
サポートされる環境がより広がったという認識で良さそうです。

base on Snappy – Wikipedia

Snappyとはカノニカルが設計・開発したソフトウェアデプロイメントシステムかつパッケージ管理システム。
Snappyのパッケージは ‘Snap’ と呼ばれ、Snapを使うツールは ‘Snapd’ と呼ばれる。Snapは様々なLinuxディストリビューションで動作するので、ディストリビューションの上流のソフトウェアデプロイメントに依存しない。

ソフトウェアにおける “Snap” アプリケーションパッケージは自己完結型であるため、様々なLinuxディストリビューションで動作する。

Snapパッケージ
Snapフォーマットは圧縮された単一のファイルシステムであり、ホストのオペレーティングシステムにより動的にマウントされる。Snapフォーマットには宣言的メタデータも含まれており、これは適切に整形された安全なサンドボックスやコンテナを設定するためSnapシステムにより解釈される。

Snappyと類似の目標を持つシステムには、FlatpakやAppImageがある。

サポートしているディストリビューション

  • Arch Linux
  • Debian
  • Fedora
  • Linux Mint
  • Manjaro Linux
  • openSUSE
  • Solus
  • Ubuntu

全てのディストリビューションが掲載されているわけではありませんが、ニュース「Canonical welcome Spotify as a snap for Linux users | Ubuntu Insights」も出ています。

パッケージ化の仕組み

どのように1つのファイルにパッケージングしているのでしょうか。
SquashFS(スカッシュエフエス)を使い、当該アプリケーションに必要な環境を一つにまとめているようです。

base on What is a snap? – Snaps are universal Linux packages

What is a snap?

  • is a squashFS filesystem containing your app code and a snap.yaml file containing specific metadata. It has a read-only file-system and, once installed, a writable area.
  • is self-contained. It bundles most of the libraries and runtimes it needs and can be updated and reverted without affecting the rest of the system.

snapとは?

  • あなたのアプリケーションコードと特定のメタデータを含むsnap.yamlファイルを含むsquashFSファイルシステムです。これは、読み取り専用のファイルシステムと、一度インストールされると書き込み可能な領域を持ちます。
  • 自己完結型です。ほとんどのライブラリと必要なランタイムがバンドルされ、残りのシステムに影響を与えることなく、更新と復帰が可能です。

※上記ファイルの詳細については「The snap format – Snaps are universal Linux packages」に記載があります

なお、SquashFSは Puppy Linux などのUSBメモリブート対応のディストリビューションで使われています(拡張子”.sfs”)。

base on SquashFS – Wikipedia

SquashFS (.sfs) はLinux向けの 圧縮された読み込み専用ファイルシステムである。
SquashFSのディスク上のフォーマットは十分安定しておりLinuxカーネルのバージョン2.6.29にマージされた。

使い方

  • squashfs-tools
    “squashfs-tools”を導入すると、マウントして中身を閲覧することができます。
  • Snapd
    Snapを利用するために必要なツールが導入されます。

    • 主なコマンド
      “snap”は、パッケージ管理システム”Snappy”のパッケージフォーマットです。

      • snap find {検索}
      • snap list {導入済み一覧表示}
      • snap refresh {指定snapパッケージのアップデート}
      • snap install {導入}
      • snap remove {削除}

※”Snapd”を導入すると、依存関係で”squashfs-tools”もインストールされます