サンプルパッケージの作成
snapcraft init
コマンドを使うと,snapcraft.
を生成してくれます。何かパッケージを作るなら,
$ mkdir snaptest && cd snaptest $ snapcraft init Created snap/snapcraft.yaml. Go to https://docs.snapcraft.io/the-snapcraft-format/8337 for more information about the snapcraft.yaml format. $ ls -R .: snap ./snap: snapcraft.yaml
作られたのはsnap/
」
$ cat snap/snapcraft.yaml name: my-snap-name # you probably want to 'snapcraft register <name>' base: core18 # the base snap is the execution environment for this snap version: '0.1' # just for humans, typically '1.2+git' or '1.3.2' summary: Single-line elevator pitch for your amazing snap # 79 char long summary description: | This is my-snap's description. You have a paragraph or two to tell the most important story about your snap. Keep it under 100 words though, we live in tweetspace and your description wants to look good in the snap store. grade: devel # must be 'stable' to release into candidate/stable channels confinement: devmode # use 'strict' once you have the right plugs and slots parts: my-part: # See 'snapcraft plugins' plugin: nil
逐一コメントが入っているので,
name
:パッケージの名前です。ちなみに構築時に作られる仮想マシンも同じ名前になります。小文字の英数字およびハイフンのみ利用可能で,Snap Storeで配布する際は一意である必要があります。 snap find
でマッチするパッケージ名がないか確認しておくと良いでしょう。base
:後述するベースシステムになるsnapパッケージを指定します。version
:パッケージのバージョンです。最大32文字で,YAML的に文字列として認識させるためにシングルクオートでくくることをおすすめします。ちなみに 「git」 を記述すると 「 git describe
」の結果がバージョンになります。 summary
:snap find
時に表示される78文字以内の概要です。description
:snap info
時に表示されるより詳細な説明です。概要だけでなく,そのパッケージの利用方法などを説明することもよくあります。 grade
:そのパッケージの状態を示します。完全な開発版ならdevel
を,一般的に利用できる状態なら stable
を記述します。confinement
:ホストのリソースへのアクセス権限に関する情報を記述します。strict
がsnapの通常状態でリソースへのアクセスが制限され,ユーザーによる許可が必要になります。 classic
はホストのリソースの利用を前提としたパッケージに使われます。classic
を指定するためにはSnap Store側でレビューを受けた上で特別な許可が必要です。devmode
は開発時に使うモードで,原則としてリソースへのアクセスは制限されません。 devmode
ではSnap Store経由の公開はできません。parts
:実際にパッケージをビルドする手順やコンテンツの場所などを記述します。
base snapはそのsnapパッケージが動くベースシステムを提供するsnapパッケージです。snapパッケージは依存関係を原則としてすべてパッケージに内包するシステムですが,
- core20:Ubuntu 20.
04 LTSのパッケージを元に作られたbase snap - core18:Ubuntu 18.
04 LTSのパッケージを元に作られたbase snap - core:Ubuntu 20.
04 LTSのパッケージを元に作られたbase snap - bare:何も提供しないbase snap
core20は2021年2月に正式リリースされたばかりのbase snapです
bareはたとえばすべてのライブラリを静的にリンクした単一のバイナリのみを提供するようなsnapパッケージに使われます。ただ,
具体的なパッケージングの情報はpartsに記載します。partsは辞書形式になっており,
parts:
my-part:
# See 'snapcraft plugins'
plugin: nil
今回の例だと作るのはmy-part
」snapcraft.
の記述が楽になります。
今回はplugin: nil
」
これでsnapcraft.
にいろいろな情報を追記していくことになります。しかしながら,
サンプルパッケージのビルド
snapパッケージのビルドはシンプルで,
$ snapcraft --debug Launching a VM. Launched: snapcraft-my-snap-name (snip) Pulling my-part + snapcraftctl pull Building my-part + snapcraftctl build Staging my-part + snapcraftctl stage Priming my-part + snapcraftctl prime Snapping | Snapped my-snap-name_0.1_amd64.snap
Multipassをインストールしていないと,
- ビルド用の仮想マシンを作成・
起動する - ローカルの環境を仮想マシンにsshfsでマウントする
snap/
の記述に従ってビルドを実施するsnapcraft. yaml - ビルドした成果物をひとつのSquashFSにまとめる
- snapパッケージの完成
- 仮想マシンのシャットダウン
パッケージファイルはパッケージ名_バージョン名_アーキテクチャー.snap
」
「--debug
」snap/
を変更した上で,snapcraft
コマンドを実行したらビルドを継続してくれます。何がおかしいかをトライアンドエラーで調べたい際に便利です。