Linux のディストリビューションの中には、ソフトウェアを簡単にインストー ルできるものもあれば、かなり難しいものもあることを不思議に思ったことはあ りませんか? その違いは、使用するパッケージの形式によるものです。あるディストリビューションは .deb ファイルを使い、他のディストリビューションは .rpm を使っています。

しかし、どのディストリビューションでも使用できるパッケージ形式があるとしたらどうでしょう。そこで登場するのがSnapcraftです。このチュートリアルでは、Snapcraftをインストールして使用し、Linuxでスナップパッケージを作成およびインストールする方法について説明します。

スナップパッケージとは何ですか?

スナップパッケージとは、必要な依存関係やライブラリをすべて含む自己完結型のアプリケーションパッケー ジで、依存関係の問題を気にすることなく、アプリケーションのインストールや更新を簡単に行うことができ ます。

なぜスナップパッケージを使用するのか?

スナップパッケージを使用することには、いくつかの利点があります。

LinuxにSnapdをインストールする

Snapdは、スナップのインストールと使用を可能にするデーモンであり、Snapcraftを使用する前 にインストールする必要があります。Snapdをインストールすると、snapというコマンドラインインタフェース(CLI)ツールもインス トールされます。このツールを使って、スナップを管理することができます。

UbuntuにSnapdをインストールするには、ターミナルを開いて次のコマンドを入力し、プロンプトが表示されたらユーザパスワードを入力します。

sudo apt update -y && sudo apt install snapd -y

CentOSでは、Snapdをインストールする前に、EPELリポジトリを有効にする必要があります。これを行うには、まずターミナルで次のコマンドを入力します。

sudo dnf install epel-release -y && sudo dnf update -y

次に、以下のコマンドでSnapdをインストールします。プロンプトが表示されたら、sudoユーザのパスワードを入力してください。

sudo dnf install snapd -y

Fedoraの場合、コマンドでインストールします。

sudo dnf install snapd

Arch Linux では、AUR から snapd をインストールします。サードパーティーのパッケージを簡単にインストールするための AUR ヘルパーをチェックしてみてください。

インストールが完了したら、以下のコマンドを実行して snapd.socket systemd ユニットを有効にします。これで、システムが起動したときにSnapdデーモンが自動的に起動するようになります。

sudo systemctl enable --now snapd.socket

/var/lib/snapd/snap" と “/snap” の間にシンボリックリンクを作成し、クラシックスナップのサポートを有効 にします。

sudo ln -s /var/lib/snapd/snap /snap

LinuxシステムにSnapdをインストールしたら、以下のコマンドを実行してSnapdの バージョンを確認します。以下のような出力が表示されます。

snap --version

また、以下のコマンドでSnapdサービスの状態を確認することができます。

sudo systemctl status snapd

Snapcraftのインストール

スナップパッケージを作成する前に、スナップパッケージの構築に使用するツールであるSnapcraftをインストールする必要があります。

LinuxでSnapcraftをインストールするには、以下のコマンドを実行します。classicフラグは、snapclassic`コンファインメントモードを使用するように指示します。Snapcraftはより新しい、より制限の多いconfinementモードをまだサポートしていないので、このフラグは必須です。

sudo snap install snapcraft --classic

Snapcraftがインストールされていることをバージョン番号で確認します。

snapcraft --version

Snapcraftを使用してSnapパッケージをビルドする

次に、Snapcraftを使用してアプリケーションのスナップ パッケージを作成します。このチュートリアルでは、基本的なhello-worldスナップ、つまり実行時に「Hello, world!」と表示されるシンプルなスナップを作成します。このチュートリアルを完了した後、同じプロセスを適用して、独自のアプリケーション用のスナップを作成します。

簡単のために、以下の手順では、Ubuntuでスナップを作成する手順を説明します。他のLinuxディストロでも、同じ手順を適用することができます。

スナップのプロジェクトを開始する

まず、スナップ用のプロジェクト・ディレクトリを作成します。このディレクトリはプロジェクトの作業ディレクトリになり、プロジェクトファイルを整理するのに役立ちます。

    1. 以下のコマンドを実行して、“hello “という名前のプロジェクトディレクトリを作成します。
mkdir -p ~/mysnaps/hello

pフラグはmkdir コマンドに、まだ存在しない親ディレクトリを作成するように指示します。この場合、mysnaps`ディレクトリが存在しなければ作成されます。このディレクトリの中に将来のスナップを置くことができます。

    1. 新たに作成したプロジェクトディレクトリに移動し、initコマンドでプロジェクトを初期化し、プロジェクトディレクトリに “snapcraft.yaml “という名前のファイルを作成します。この “snapcraft.yaml “ファイルは、後でスナップの設定に使用することができます。
cd ~/mysnaps/hello
snapcraft init

3. プロジェクトのディレクトリをグラフィカルに表示する tree コマンドを使用して、プロジェクトの構造を確認します。

tree -a

以下のような出力が表示されます。

トップレベル・メタデータの追加

Snapcraftには、スナップパッケージを説明するために使用できる多くのメタデータが用意されています。このチュートリアルでは、すべてのスナップに必要な基本情報をいくつか追加します。

    1. お好きなテキストエディタで「snapcraft.yaml」ファイルを開きます。このチュートリアルでは、nanoを使用しました。
sudo nano snapcraft.yaml
  1. プレースホルダーの行を削除し、以下の内容で置き換えます。
名前: hello
ベース: core18
バージョン: '2.10'
概要: GNU Hello、"hello world" スナップ
の説明を参照してください。|
  GNU hello はフレンドリーな挨拶を表示します。
等級: devel
コンファインメント: devmode

ここで、スナップの情報を変更しました。core18ベースは、Ubuntu Core 18をベースにしたスナップをビルドすることをSnapcraftに通知します。confinement: devmodeメタデータは、Snapcraftに、開発やテストに便利な制約のないスナップを構築することを伝えます。

アプリケーションの公開

    1. 「snapcraft.yaml」ファイルのconfinementフィールドの後に、次の行を追加します。ここでは、パッケージ化するアプリケーションを指定します。
apps:
 hello:
  コマンド: bin/hello

この場合、アプリはhello1つだけです。command` 行は、スナップのインストール時に実行するバイナリをSnapcraftに指示します。

パーツの追加

  1. 新しい行に、次の parts コマンドを追加します。
パーツを追加します。
  gnu-hello:
    ソース: http://ftp.gnu.org/gnu/hello/hello-2.10.tar.gz
    プラグイン: autotools

これはSnapcraftに、どのソフトウェアをスナップパッケージに含めるかを指示します。

このhello-worldスナップをビルドするには、GNU Helloのソースコードをダウンロードし、 autotoolプラグインを使って、ソースからアプリケーションをビルドする必要があります。

    1. この時点で、snapcraft.yaml ファイルは以下のようなファイルになっています。次のステップに進む前に、snapcraft.yamlファイルを保存して閉じます。

スナップ・パッケージの構築

スナップの定義ができたので、いよいよビルドします。スナップパッケージをビルドするには、以下のコマンドを実行します。

snapcraft

システムに “multipass “がインストールされていない場合は、“multipass “をインストールするように指示されます。Snapcraftはmultipassを使用して、仮想マシン内でスナップを構築するための分離された環境を作成します。yと入力し、Enterを押して続行します。

インターネット接続状況やパソコンのスペックによっては、構築作業に時間がかかる場合があります。ビルドが終了すると、以下のような出力が表示されます。

最後に、プロジェクトディレクトリに「hello_2.10」が作成されていることを確認します。

Snapパッケージのテスト

スナップパッケージが動作しているかどうかをテストするために、以下のコマンドを実行します。

sudo snap install --devmode hello_2.10_amd64.snap

devmodeフラグはsnapdevmode` でスナップをインストールすることを指示します。

次に、以下のコマンドを実行して、hello-worldアプリケーションを実行します。

こんにちは

次のような出力が表示されますが、これはhello-worldスナップが期待通りに動作していることを示します。

hello-worldアプリケーションのバージョンを確認するには、以下のコマンドを実行します。

hello --version

スナップのテスト中に問題が発生した場合は、–debugフラグを使用して、以下のコマンドを実行して、より詳細な情報を取得します。

snapcraft --debug

よくある質問

Snapcraftは安全ですか?

もちろんです! ## Snapcraftは安全ですか?Snapcraftはスナップを作成するための公式ツールです。Ubuntuの開発元であるCanonical社によって開発・保守されています。Snapcraftは安全で信頼性の高いツールですので、ご安心ください。

SnapはDockerのようなものですか?

イエスでもありノーでもあります。SnapとDockerはどちらもコンテナ技術ですが、異なる目的を持ちます。Snapはアプリケーションのパッケージング形式、Dockerはアプリケーションのランタイム環境とお考えください。公式のWordPressとNginxのイメージを使って、WordPressとNginxとPHPをDockerコンテナにセットアップすることはできますが、WordPressサイト用のSnapパッケージを作成することはできません。

apt や apt-get よりも snap の方が良いですか?

それは場合によります。どちらのシステムにも利点と欠点があります。Aptやapt-getは、DebianベースのLinuxディストリビューションにおける伝統的なパッケージマネージャです。長い間存在しており、非常に安定していますが、いくつかの欠点もあります。例えば、apt はバージョニングとロールバックをサポートしていません。一方、Snapはバージョニングとロールバックの両方をサポートしています。そのため、アプリケーションの新バージョンを試したい場合は、Snapが適しています。しかし、安定したシステムを求めるのであれば、aptやapt-getの方が良い選択です。

画像引用:Freepik. すべてのスクリーンショットはNicholas Xuan Nguyenによるものです。

Akira
Akiraは情熱的なゲーマーであり、製品レビュアーです。ゲームをしていないときは、最新のゲーミングアクセサリーを試したり、製品のレビューをしていることが多い。彼の分かりやすいスタイルは、ゲーマーが自分のニーズに最も適した製品を簡単に判断できるようにするものです。また、技術的な問題にも精通しており、その解決方法も知っている。