スナップパッケージとは何ですか?
スナップパッケージとは、必要な依存関係やライブラリをすべて含む自己完結型のアプリケーションパッケー ジで、依存関係の問題を気にすることなく、アプリケーションのインストールや更新を簡単に行うことができ ます。
なぜスナップパッケージを使用するのか?
スナップパッケージを使用することには、いくつかの利点があります。
-
スナップパッケージはインストールやアップデートが簡単です。スナップパッケージのインストールやアップデートは簡単で、1つのコマンドでインストールでき、スナップはバックグラウンドで自動的にアップデートされます。
-
スナップは安全でセキュアです。スナップは安全です。すべての依存関係がスナップパッケージに含まれているため、依存関係の衝突の危険はありません。また、スナップはシステムの他の部分から分離されているので、あなたのデータやシステム上の他のアプリケーションにアクセスすることはできません。
-
スナップに対応しているLinuxディストリビューションであれば、好きなアプリを インストールすることができます。
LinuxにSnapdをインストールする
Snapdは、スナップのインストールと使用を可能にするデーモンであり、Snapcraftを使用する前 にインストールする必要があります。Snapdをインストールすると、snap
というコマンドラインインタフェース(CLI)ツールもインス トールされます。このツールを使って、スナップを管理することができます。
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フラグは、
snapに
classic`コンファインメントモードを使用するように指示します。Snapcraftはより新しい、より制限の多いconfinementモードをまだサポートしていないので、このフラグは必須です。
sudo snap install snapcraft --classic
Snapcraftがインストールされていることをバージョン番号で確認します。
snapcraft --version
Snapcraftを使用してSnapパッケージをビルドする
次に、Snapcraftを使用してアプリケーションのスナップ パッケージを作成します。このチュートリアルでは、基本的なhello-worldスナップ、つまり実行時に「Hello, world!」と表示されるシンプルなスナップを作成します。このチュートリアルを完了した後、同じプロセスを適用して、独自のアプリケーション用のスナップを作成します。
簡単のために、以下の手順では、Ubuntuでスナップを作成する手順を説明します。他のLinuxディストロでも、同じ手順を適用することができます。スナップのプロジェクトを開始する
まず、スナップ用のプロジェクト・ディレクトリを作成します。このディレクトリはプロジェクトの作業ディレクトリになり、プロジェクトファイルを整理するのに役立ちます。
-
- 以下のコマンドを実行して、“hello “という名前のプロジェクトディレクトリを作成します。
mkdir -p ~/mysnaps/hello
pフラグは
mkdir コマンドに、まだ存在しない親ディレクトリを作成するように指示します。この場合、
mysnaps`ディレクトリが存在しなければ作成されます。このディレクトリの中に将来のスナップを置くことができます。
-
- 新たに作成したプロジェクトディレクトリに移動し、
init
コマンドでプロジェクトを初期化し、プロジェクトディレクトリに “snapcraft.yaml “という名前のファイルを作成します。この “snapcraft.yaml “ファイルは、後でスナップの設定に使用することができます。
- 新たに作成したプロジェクトディレクトリに移動し、
cd ~/mysnaps/hello
snapcraft init
3. プロジェクトのディレクトリをグラフィカルに表示する tree
コマンドを使用して、プロジェクトの構造を確認します。
tree -a
以下のような出力が表示されます。
トップレベル・メタデータの追加
Snapcraftには、スナップパッケージを説明するために使用できる多くのメタデータが用意されています。このチュートリアルでは、すべてのスナップに必要な基本情報をいくつか追加します。
-
- お好きなテキストエディタで「snapcraft.yaml」ファイルを開きます。このチュートリアルでは、nanoを使用しました。
sudo nano snapcraft.yaml
- プレースホルダーの行を削除し、以下の内容で置き換えます。
名前: hello
ベース: core18
バージョン: '2.10'
概要: GNU Hello、"hello world" スナップ
の説明を参照してください。|
GNU hello はフレンドリーな挨拶を表示します。
等級: devel
コンファインメント: devmode
ここで、スナップの情報を変更しました。core18ベースは、Ubuntu Core 18をベースにしたスナップをビルドすることをSnapcraftに通知します。confinement: devmode
メタデータは、Snapcraftに、開発やテストに便利な制約のないスナップを構築することを伝えます。
アプリケーションの公開
-
- 「snapcraft.yaml」ファイルのconfinementフィールドの後に、次の行を追加します。ここでは、パッケージ化するアプリケーションを指定します。
apps:
hello:
コマンド: bin/hello
この場合、アプリはhello
1つだけです。command` 行は、スナップのインストール時に実行するバイナリをSnapcraftに指示します。
パーツの追加
- 新しい行に、次の
parts
コマンドを追加します。
パーツを追加します。
gnu-hello:
ソース: http://ftp.gnu.org/gnu/hello/hello-2.10.tar.gz
プラグイン: autotools
これはSnapcraftに、どのソフトウェアをスナップパッケージに含めるかを指示します。
このhello-worldスナップをビルドするには、GNU Helloのソースコードをダウンロードし、 autotool
プラグインを使って、ソースからアプリケーションをビルドする必要があります。
-
- この時点で、snapcraft.yaml ファイルは以下のようなファイルになっています。次のステップに進む前に、snapcraft.yamlファイルを保存して閉じます。
スナップ・パッケージの構築
スナップの定義ができたので、いよいよビルドします。スナップパッケージをビルドするには、以下のコマンドを実行します。
snapcraft
システムに “multipass “がインストールされていない場合は、“multipass “をインストールするように指示されます。Snapcraftはmultipassを使用して、仮想マシン内でスナップを構築するための分離された環境を作成します。yと入力し、Enter
を押して続行します。
Snapパッケージのテスト
スナップパッケージが動作しているかどうかをテストするために、以下のコマンドを実行します。
sudo snap install --devmode hello_2.10_amd64.snap
devmodeフラグは
snapに
devmode` でスナップをインストールすることを指示します。
こんにちは
次のような出力が表示されますが、これは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によるものです。