第654回 ではsnapパッケージの基本的な話を紹介しました。今回はGUIアプリケーションをsnapパッケージ化する際の手順について、ひとつずつ具体的に説明していきましょう。
snapパッケージの際に気をつけるべきこと
snapパッケージを作る際は、まず次のようなことがらに気をつける必要があります。
GUIアプリケーションか、CLIアプリケーションか
システムファイルにアクセスする必要があるかどうか
サードパーティのカーネルモジュールが必要かどうか
パッケージ化対象のパッケージフォーマットは何か
snapパッケージはGUIアプリケーションか、CLIアプリケーションか で考えるべきことが大きく変わります。第654回でも説明したようにsnapパッケージは「依存するほとんどすべてのソフトウェアをパッケージの中に内包する」仕組みのフォーマットです。GUIアプリケーションは、やれGTKだ、やれQtだ、とさまざまなライブラリが必要になるため、それをすべてパッケージに同梱してしまうととても大きなサイズになってしまうのです。よってGUI向けのツールキットに関してはSnapcraft Extentions という形で、外部のsnapパッケージのリソースを活用できる仕組みが備わっています。
GUIアプリケーションをsnapパッケージにする場合は、まずどのツールキットとextensionを使うかを検討しなくてはなりません。逆にCLIアプリケーションに関しては、必要最低限のリソース・ライブラリだけで済むことも多いでしょう。
2番目の「システムファイルにアクセスする必要があるかどうか」 については、いわゆるシステム上の「/usr/lib
」や「/etc
」やデバイスファイルなどの、ホスト上のファイルへのアクセスが必要かどうかとなります。snapパッケージはDockerなどと同じようにホストからは独立したファイルシステムの中で動作します。このためホストのファイルやディレクトリへはアクセスできません。唯一の例外はホームディレクトリです。それ以外のファイルやディレクトリにアクセスしたいなら、classic confinement なパッケージとして作らなくてはなりません。classicパッケージは、Snap Storeで公開する前に人間によるレビューを受ける必要があります。なお、ファイルによっては、適切なinterface を利用すればアクセスできます。
3番目の「サードパーティのカーネルモジュールが必要かどうか」 では、VirtualBoxのようにDKMSを使ってカーネルモジュールをビルド・ロードするようなソフトウェアかどうかを確認しています。原則としてこのような対応が必要なパッケージは、snap化には向いていません[1] 。これはsnapパッケージからたとえばカーネルモジュールは従来の方法でパッケージ化しておいて、そのモジュールパッケージがインストールされているなら、snapパッケージ側の挙動を変えるみたいな実装です。そういった実装も可能ではあるものの、そこまでするならsnapパッケージ化する意味は薄くなってくるでしょう。
ここまではホストのリソースへのアクセスの話でしたが、4番目の「パッケージ化対象のパッケージフォーマットは何か」 は、パッケージングの話です。snapパッケージの元となるデータは、単なるソースアーカイブから、debファイル、pipやcargoでインストールできるものに至るまで、さまざまなデータフォーマットやビルド方法が存在します。そこでsnapパッケージのビルドツールであるsnapcraftでは、「 snapcraft plugins 」という名前で、さまざまな言語のパッケージング方法をサポートしています。元データのフォーマットがわかっているなら、どのプラグインを使うかをあらかじめ決めておくと、snapパッケージの作成を省力化できます。
上記を自問自答した上で、まずはsnapパッケージ化の是非 を検討すると良いでしょう。残念ながら世にあるソフトウェアのすべてがsnapパッケージに適しているわけではありません。むしろ従来のパッケージが向いているケースのほうが絶対数は多いかもしれません。snapと競合するFlatpakやAppImage、場合によってはDockerイメージを使えば楽にパッケージングできるケースもあるでしょう。
snapパッケージはあくまで「ソフトウェアの開発者が楽にパッケージングできる」 ことが主題のはずなので、「 なんかうまくいかない」と思ったら無理に使おうとせず、是非他の方法も試してみてください。
「Thorium Reader」をsnapパッケージ化するための検討
さて、今回は第634回の「クロスプラットフォームで動作するEPUBリーダー『Thorium Reader』 」で紹介されたEPUBリーダーをsnapパッケージ化してみましょう。まずは先ほどの条件を見直してみます。
GUIかCLIか:GUIアプリケーション
システムファイルにアクセスする必要があるかどうか:不要
サードパーティのカーネルモジュールが必要かどうか:不要
パッケージフォーマットは何か:debもしくはnpm
2については、とりあえずEPUBリーダーとして基本的な機能を動かすだけなら、不要となります。EPUBファイルもXDG_CONFIG_HOME
(~/snap/<パッケージ名>/<バージョン>/.config
)に保存するため、ホームディレクトリの他のディレクトリへのアクセス権もなくても動きます。ただしEPUB内の動画の再生など、特別なことをする場合は必要になるかもしれません。そのあたりは今後動作確認しながら検討することにします。パッケージを作る際は「最低限の機能を動かす上において」という前提で確認すると良いでしょう。
4については、今回はThoriumが配布しているdebパッケージからsnapパッケージを作ることにします。将来的にはnpmやソースコードから作る形にしても良いでしょう。
それでは実際にパッケージ化を進めていきます。第654回 でも説明したように、snapパッケージを作るためにはいくつかのツールをインストールしておく必要があります。最低限、次のコマンドを実行すれば大丈夫です。
$ sudo snap install snapcraft --classic
$ sudo snap install multipass
ベースのYAMLファイルを作成する
snapパッケージはYAMLファイルによってそのメタデータを管理しています。ベースのYAMLファイルはsnapcraft
コマンドで生成可能です。
$ mkdir thorium-reader-snap && cd $_
$ snapcraft init
作られるのは「snap/snapcraft.yaml
」だけです。今回はひたすらこのファイルを編集していきます。
まずはパッケージ名を決めましょう。 もちろん、パッケージ名を付けなくてもテストビルドは可能です。しかしながら、ビルド時にMultipassがビルド用の小さな仮想マシンを作成する際に、仮想マシンの名前がパッケージの名前で作られてしまうのです。よって先にパッケージ名を決めておいたほうが効率的です。
snapパッケージの名前は、そのまま「snap find
」コマンドなどで検索したときに表示される名前になります。Snap Store で公開することを考えると、他のパッケージと名前がかぶってはいけません。良い名前を思いついたら、「 snap info パッケージ名
」ですでに存在しないか確認しておきましょう。
ちなみにsnapパッケージはソフトウェアの開発者がパッケージング・管理することが理想です。つまりソフトウェアのソースコードリポジトリに「snap/snapcraft.yaml
」が存在し、ソフトウェアのCIのフックに合わせて自動的に新しいパッケージが作成・公開されるようになることを期待しています[2] 。
[2] snapcraftやSnap Storeにはそのための仕組みが用意されています。ソフトウェア開発者にパッケージングも期待していることは、原則としてディストリビューション側にパッケージメンテナーがいる従来のパッケージングと異なる考え方のひとつです。
つまりあるソフトウェアのsnapパッケージを作る際は、そのソフトウェア名と一致するパッケージ名をオフィシャルの開発者のために残しておくほうが良いでしょう。サードパーティが別名でパッケージングする際には、「 ソフトウェア名-snap
」や「snap-ソフトウェア名
」とか「ソフトウェア名-機能
」なんて名前を付けるケースをちらほら見かけます。
今回は「Thorium Reader」なんで「thorium-reader-snap」という名前を使うことにしました。名前の他にもいくつか基本情報を更新した結果が次のようになります。
name: thorium-reader-snap
base: core20
version: '0.1'
license: BSD-3-Clause
summary: EPUB reader based on the Readium Toolkit
description: |
Thorium Reader is an easy to use EPUB reading application for cross
platforms.
This is unofficial re-packing of the debian package provided by EDRLab.
grade: devel
confinement: devmode
parts:
my-part:
plugin: nil
name
以外だとversion
やgrade
以下はそのままで、summary
やdescription
はオフィシャルの紹介を参考に、それらしい説明を付けておきました。license
も公式サイトや配布しているパッケージの情報を元に付けています。SPDX なフォーマットに合致するものがあればそれを使いましょう。未設定だとプロプライエタリ扱いになります。
ポイントはbase
をcore20
にしていることです。core20(Ubuntu Core 20)は先月リリースされたばかりの新しいUbuntu Coreです(Ubuntu Weekly Topics 2021年2月5日号 ) 。新規にパッケージングをするならより新しいUbuntu 20.04 LTSベースのcore20を使いたいところではあるものの、core20はリリースされたばかりでまだ周辺のプラグイン等が一部足りていません[3] 。将来的にsnapcraftが生成するテンプレートがcore20に変わるまでは、core18を使うほうが無難です。
しかしながらThorium Readerの公式サイト によると、理由は不明なもののLinux版を動かすためには「glibc 2.28以降」との記載があります。Ubuntu 18.04 LTSがglibc 2.27、Ubuntu 20.04 LTSがglibc 2.31なので、今回はcore20を使うことにしました。
さらに、この時点でGitリポジトリ化しておけば、今後の修正内容の履歴の管理が楽になります。もちろんGit以外のバージョン管理ツールを使ってもかまいません。
$ git init
$ git add -A
$ git commit -am "Initial snapping"
試しにこのままビルドしてみましょう。
$ snapcraft --debug
(中略)
Pulling my-part
+ snapcraftctl pull
Building my-part
+ snapcraftctl build
Staging my-part
+ snapcraftctl stage
Priming my-part
+ snapcraftctl prime
Snapping |
Snapped thorium-reader-snap_0.1_amd64.snap
さっそくパッケージが作られましたね。今はまだ何もしない空のパッケージです。ここから中身を追加していくとにします。
Debファイルをsnapパッケージに変換する
前項でパッケージの名前が決まり、最初のビルドが成功しました。そこで次はDebianパッケージをそのままsnapパッケージ化する方法を学びましょう。
パッケージの構築に必要なpartsを記述する
Thorium ReaderはLinux向けのバイナリとしてdebパッケージを提供しています。今回はこのdebパッケージをそのまま流用することにします。修正するのはparts
の部分です。
parts:
thorium-reader:
source: https://github.com/edrlab/thorium-reader/releases/download/v1.6.0/EDRLab.ThoriumReader_1.6.0_amd64.deb
source-type: deb
plugin: dump
parts
はパッケージをビルドする際に必要なコンポーネントや手順を記述する領域 です。ソースコードはどこにあるのか、どうやって取得・展開・ビルドするのか、ビルドや実行に必要なパッケージは何か、などを記述します。複数のコンポーネントからなるパッケージなら、そのコンポーネントの数だけpart(s)
を記述します[4] 。
[4] parts
は複数形で、個々のコンポーネントは本来ならpart
と呼ぶべきです。YAML上はparts
は連想配列になっているために複数形を使っています。このあたりを説明時に自然に区別するのは難しいので、ここでは単複関係なくparts
と呼ぶことにします。他のYAMLフィールドも同様です。
上記の例だと「thorium-reader
」という名前のparts
が記述されています。この名前は任意の文字列を指定可能です。今回はすでにバイナリ化されているパッケージをそのまま利用するため、parts
はひとつで十分です。たとえばthorium-readerをビルドするためには、特定のライブラリをビルドする必要がある場合などは、その数だけparts
の中身が増えていくことになるでしょう。
さて、parts
の個々のコンポーネントには一般的に「source
」や「plugin
」を書くことになります。source
はそのままデータのURLを書きます。ネットワーク上のデータだけでなく、ローカルのファイルパスも指定可能です。今回はGitHubのリリースページにあるファイルを指定しました。source-type
でそのファイルをどう展開するかを記述します。たとえばsource
にGitリポジトリを、soruce-type
に「git」を指定して、さらにsource-tag
でリリースタグを指定するような運用も可能です。
plugin
がそのデータをどう利用するかのテンプレートとなります。最初に設定されていた「nil
」はデータに対して「何もしない」プラグインです。たとえばソースデータがなくただ任意のパッケージをsnapパッケージに取り込んでおきたいときや、source
を展開後に手作業で必要なデータのみをsnapパッケージ内部にコピーしたい場合に利用します。どのプラグインでも扱いづらいパッケージを作る時に役に立つでしょう。
今回は「dump
」プラグインを使用します。これはsource
を展開したデータがそのままsnapパッケージのツリーに取り込まれるプラグインです。他にも特定のディレクトリツリーをそのまま取り込みたい場合などに利用します。
プラグインに関しては「snapcraft help プラグイン名
」で簡単な説明を確認できます。
まずはこの状態でビルドしてみましょう。
$ snapcraft --debug
(中略)
Pulling thorium-reader
+ snapcraftctl pull
Downloading 'EDRLab.ThoriumReader_1.6.0_amd64.deb'
Building thorium-reader
+ snapcraftctl build
+ cp --archive --link --no-dereference . /root/parts/thorium-reader/install
Staging thorium-reader
+ snapcraftctl stage
Priming thorium-reader
+ snapcraftctl prime
This part is missing libraries that cannot be satisfied with any available stage-packages known to snapcraft:
- libX11-xcb.so.1
- libX11.so.6
(中略)
- libxcb.so.1
- libxkbcommon.so.0
These dependencies can be satisfied via additional parts or content sharing. Consider validating configured filesets if this dependency was built.
Snapping |
Snapped thorium-reader-snap_0.1_amd64.snap
ビルドログにいろいろな情報が出てくるようになりました。
pull
フェーズでsource
に指定したファイルをダウンロードしています
build
フェーズで展開したファイルをそのままコピーしています
stage
フェーズでは表面上は特に何もしていません
prime
フェーズでsnapパッケージのツリーを作る際にいくつか警告が出ています
最後の警告は実際にインストールされるバイナリを精査して、本来snapパッケージに同梱されるべきライブラリをリストアップしてくれています。これらは本来はparts
のstage-packages
に記述すべきです。
しかしながらデスクトップアプリケーションに関しては、最低限必要な項目が「エクステンション」としてまとまっています。そこでこれらを解決する前に、先に「apps
」についての記述を説明しましょう。
ユーザーに見せる部分となるappsを記述する
parts
は「何をsnapパッケージに同梱するか」を記述しています。これにより構築されたパッケージツリーの中で、「どんなふうにユーザーにパッケージの中身を見せるか」 を記述するのがapps
です。
サンプルパッケージの段階ではapps
は存在しませんでした。このため、snapパッケージをインストールしてもユーザーは直接そのパッケージの中身を見るしかできません。具体的にはThorium本体を起動しようとすると、「 /snap/thorium-reader-snap/current/opt/Thorium/thorium
」みたいな感じで実行する必要がでてくるのです。
これでは不便ですし、そもそもこのままだとローカルのデスクトップ環境と連携できないため、Thorium Reader本体は起動できません。たとえば先ほどのメッセージにあったように必要なライブラリが足りない結果、「 Not found」のようなエラーメッセージが表示されるでしょう。
Thorium ReaderのようなGUIアプリケーションについては、このあたりの諸々をパッケージングを行う人ごとに解決するのは大変なので、あらかじめ仕組みが用意されています。それがSnapcraft Extensions です。これは別の設定済みのsnapパッケージを他のsnapパッケージからも流用できる仕組みです。
GUIアプリケーションを作るなら、snapcraftのデスクトップアプリケーションのドキュメント を一通り確認した上で、どのエクステンションを使うか決めると良いでしょう。特にsnapパッケージで日本語入力を行えるようにしたいのなら、これらのエクステンションの利用は必須だと考えてください。
今回は次のような記述をsnap/snapcraft.yaml
に追加します。
compression: lzo
apps:
thorium:
command: opt/Thorium/thorium
extensions: [gnome-3-38]
snapパッケージの圧縮方法をxzからlzoに変更しました
アプリケーション名として「thorium
」を使います
opt/Thorium/thorium
をユーザーから見えるようにしました
エクステンションとしてgnome-3-38 を利用します
apps
を指定することで、そのアプリケーション名のシンボリックリンクが/snap/bin/
以下に作られます。Ubuntuだと環境変数PATH
に/snap/bin/
が入っているので、そのコマンドをそのまま実行できるようになるわけです。commandはそのアプリケーション名が実行されたときに呼び出すコマンドです。たとえばコマンドを実行する前に事前準備が必要なら、command
に何かスクリプトを指定したり、command-chain
で複数のコマンドを指定することになります。
大事なのがextensions
です。何を指定するかは「サポートされているエクステンション一覧 」を参照してください。GTKアプリケーションなら、今ならgnome-3-34
を指定することになります。しかしながら今回はcore20を使っています。core20はまだ開発中のgnome-3-38
しかサポートしていません。そこで今回はgnome-3-38
を指定することにしました[5] 。
[5] 厳密にはThorium ReaderはElectronアプリケーションなので、GTKに依存する必要はありません。ただしdebパッケージとして配布しているバイナリはGTKに依存していたため、gnome-3-38
エクステンションを使っています。
ここまで記述できたらもう一度ビルドしてみましょう。ちなみに開発中のエクステンションを使用するために「--enable-experimental-extensions
」オプションが必要になっています。
$ snapcraft --debug --enable-experimental-extensions
(中略)
*EXPERIMENTAL* extensions enabled.
*EXPERIMENTAL* extension 'gnome-3-38' enabled.
(中略)
Building gnome-3-38-extension
(後略)
gnome-3-38
に関するログがいろいろ追加されていますね。
たとえば「less thorium-reader-snap_0.1_amd64.snap
」を実行すると、どんなファイルがインストールされるか確認できます。
snapパッケージのテストと修正
さて、必要最低限の設定はできたので作ったsnapパッケージをインストールしてみましょう。
$ sudo snap install thorium-reader-snap_0.1_amd64.snap --dangerous --devmode
thorium-reader-snap 0.1 installed
まず第654回でも紹介したように、ローカルで作ったsnapパッケージは未署名な状態です。そのためインストールするなら「--dangerous
」が必要です。さらに今回はconfinement
をdevmode
にしているため、「 --devmode
」も必要になります。
インストール中「Autoconnect…」みたいなメッセージが表示されたかもしれません。これはsnapパッケージのリソース管理である「interface」に接続したときのメッセージです。GUIアプリケーションだとたとえば、X Window SystemやD-Busまわりの接続が必要です。これらはapps
の中で個別に記載する必要があるのですが、エクステンションを利用すると最低限必要なものは自動的に設定してくれます。
実際に接続されたinterfaceを確認してみましょう。
$ snap connections thorium-reader-snap
Interface Plug Slot Notes
content[gnome-3-38-2004] thorium-reader-snap:gnome-3-38-2004 gnome-3-38-2004:gnome-3-38-2004 -
content[gtk-3-themes] thorium-reader-snap:gtk-3-themes gtk-common-themes:gtk-3-themes -
content[icon-themes] thorium-reader-snap:icon-themes gtk-common-themes:icon-themes -
content[sound-themes] thorium-reader-snap:sound-themes gtk-common-themes:sound-themes -
desktop thorium-reader-snap:desktop :desktop -
desktop-legacy thorium-reader-snap:desktop-legacy :desktop-legacy -
gsettings thorium-reader-snap:gsettings :gsettings -
opengl thorium-reader-snap:opengl :opengl -
wayland thorium-reader-snap:wayland - -
x11 thorium-reader-snap:x11 :x11 -
試したマシンはX11セッションで起動しているため、WaylandのSlotは空になっていますが、他は問題なく繋がっているようです。
次にThoriumを起動してみます。ちなみにapps
の名前がsnapパッケージ名と一致している場合は、snapパッケージ名がそのままコマンド名になります。そうでない場合は、「 snapパッケージ名.app名」の名前になります。今回はsnapパッケージ名が「thorium-reader-snap
」で、app名が「thorium
」なので「thorium-reader-snap.thorium
」がコマンド名となります。
ちょっと長いですね。今回はGUIアプリケーションでありCLIから直接起動することはあまりないため、気にしないことにします。どうしても短縮したいなら「snap alias thorium-reader-snap.thorium thorium
」のようにエイリアスを作ってしまうと良いでしょう。
まずは起動してみましょう。
$ thorium-reader-snap.thorium
/snap/thorium-reader-snap/x1/opt/Thorium/thorium: error while loading shared libraries: libnss3.so: cannot open shared object file: No such file or directory
「libnss3.so
がない」と言われてしまいましたね。実はオリジナルのThorium Readerのdebパッケージはデスクトップ関係だけでなく、libnss3
も依存関係に書いてありました。デスクトップ関係は一通りgnome-3-38
エクステンション経由で利用できるのですが、libnss3.so
は明示的にsnapパッケージに取り込む必要があるようです。
ところでエクステンションを追加する前には足りないライブラリが表示されていましたが、追加後はlibnss3.so
が足りないにも関わらず、その旨が表示されなかったことに疑問を感じるかもしれません。必要ライブラリの精査はprime
フェーズで行われます。エクステンション追加後の再ビルドでは、エクステンション関連の各フェーズは実行されるものの、元のパッケージは状態が変わっていないので再実行されません。実際のログを見てみると次のようにスキップされていることがわかるはずです。
Skipping prime thorium-reader (already ran)
各フェーズを再実行したい場合は、一度「snapcraft clean
」してからビルドしてください。正式にパッケージを公開する際にも「cleanしてからビルド」は試しておいたほうがいいでしょう[6] 。
さて、今回はparts
にstage-package
を追加してそこにlibnss3
をリストアップしましょう。他にも必要なものがあるならこのように記述してください。
parts:
thorium-reader:
source: https://github.com/edrlab/thorium-reader/releases/download/v1.6.0/EDRLab.ThoriumReader_1.6.0_amd64.deb
source-type: deb
plugin: dump
stage-packages:
- libnss3
もう一度パッケージをビルドし直して、再インストールしてください。再インストールの際に明示的にアンインストールする必要はありません。
$ snapcraft --debug --enable-experimental-extensions
$ sudo snap install thorium-reader-snap_0.1_amd64.snap --dangerous --devmode
thorium-reader-snap 0.1 installed
$ thorium-reader-snap.thorium
無事に起動できました。
図1 日本語もきちんと表示されているし、日本語入力も可能
EPUBファイルは右上の「+」マークからディレクトリツリーをたどることで追加可能ですし、ウィンドウへのファイルのドラッグアンドドロップでも追加できます。これは現在は「--devmode
」を使うことで、リソースへのアクセス権が制限されていないことが理由です。
図2 EPUBファイルを表示している状態。画像や検索、目次の表示も問題ない
ちなみに表示しているのは大好評発売中の『うぶんちゅ! まがじん ざっぱ~ん♪ vol.11 』です。
図3 本文の日本語検索も可能。ちなみに本棚では書名による検索も可能だが、完全一致でないとマッチしない
snapパッケージ版のThorium Readerに登録したEPUBファイルは「~/snap/thorium-reader-snap/リビジョン/.config/EDRLab.ThoriumReader/publications/
」以下に保存されます。「 リビジョン」はsnapパッケージのビルド番号です。
これで最低限のsnapパッケージの作り方を把握できました。
デスクトップファイルのインストール
GUIアプリケーションはデスクトップファイルを作っておくと、GUIシェルから検索・起動できて便利です。Thorium Readerにはすでにデスクトップファイルが存在するので、それを利用することにしましょう。
apps:
thorium:
command: opt/Thorium/thorium
extensions: [gnome-3-38]
desktop: usr/share/applications/thorium.desktop
parts:
thorium-reader:
source: https://github.com/edrlab/thorium-reader/releases/download/v1.6.0/EDRLab.ThoriumReader_1.6.0_amd64.deb
source-type: deb
plugin: dump
override-build: |
snapcraftctl build
sed -i 's|Icon=.*|Icon=/usr/share/icons/hicolor/0x0/apps/thorium.png|g' \
$SNAPCRAFT_PART_INSTALL/usr/share/applications/thorium.desktop
stage-packages:
- libnss3
追加したのはapps
のdeskotop
フィールドと、parts
のoverride-build
です。
snapパッケージではデスクトップファイルがあるなら、そのパスをdesktop
フィールドに記述するだけで、snapパッケージインストール時に自動的に登録されます。
本来はこれだけでいいのですが、問題は「アイコン」です。デスクトップファイルのアイコンは適切な場所にインストールされないと参照できません。今回は参照先をオリジナルのシンボル名からフルパスに変更して回避しています。
override-build
はbuild
フェーズの処理を上書きするためのフィールドです。あらかじめsnapcraftctl build
を呼び出して通常のbuild
フェーズを実施した上で、build
によって展開されたthorium.desktop
を上書き変更しています。
再度ビルドし、snapパッケージを再インストールしてみましょう。GNOME ShellのDashからThorium Readerを検索・起動できるようになったはずです。
最後に今回作成した、「 snap/snapcraft.yaml
」を表示しておきます。
name: thorium-reader-snap
base: core20
version: '0.1'
license: BSD-3-Clause
summary: EPUB reader based on the Readium Toolkit
description: |
Thorium Reader is an easy to use EPUB reading application for cross
platforms.
This is unofficial re-packing of the debian package provided by EDRLab.
grade: devel
confinement: devmode
compression: lzo
apps:
thorium:
command: opt/Thorium/thorium
extensions: [gnome-3-38]
desktop: usr/share/applications/thorium.desktop
parts:
thorium-reader:
source: https://github.com/edrlab/thorium-reader/releases/download/v1.6.0/EDRLab.ThoriumReader_1.6.0_amd64.deb
source-type: deb
plugin: dump
override-build: |
snapcraftctl build
sed -i 's|Icon=.*|Icon=/usr/share/icons/hicolor/0x0/apps/thorium.png|g' \
$SNAPCRAFT_PART_INSTALL/usr/share/applications/thorium.desktop
stage-packages:
- libnss3
Snap Storeで公開するためには、さらに「confinement: devmode
」を「confinement: strict
」に変更しなくてはなりません。strictモードではさまざまなリソースのアクセスが制限されるため、Thorium Readerがうまくうごくようになるためにさらにいくつかの修正が必要になります。
次回以降でstrictモード化する際の手順を紹介する予定です。