Flatpak は、Linux デスクトップ向けのソフトウェアデプロイメントおよびパッケージ管理を行うユーティリティソフトウェアです。Flatpak でインストールされたアプリケーションは、実行時にホスト環境から隔離(サンドボックス化)されます。
Flatpakは freedesktop.org のプロジェクトとして開始され。以前は xdg-app という名称でした。
Hello World プログラムなんて文字列を表示するだけのプログラムですが、Flarpak のアプリをビルドする基本的な流れを理解するのに役立ちます。下記のサイトで紹介されている「はじめての Flatpak ビルド - Building your first Flatpak」にしたがって、Flatpak パッケージをビルドする流れをまとめました。
使用した OS の環境は下記の通りです。
Fedora Silverblue 32 | x86_64 | |
» flatpak-1.6.5-1.fc32.x86_64 | ||
» flatpak-builder-1.0.10-1.fc32.x86_64 |
準備
まず、今回のパッケージ作成では flathub のリポジトリを利用することを前提としていますので、下記を実行しておきます。
[bitwalk@silverblue ~]$ flatpak remote-add --if-not-exists flathub https://dl.flathub.org/repo/flathub.flatpakrepo
また、Flatpak のパッケージを作成するには flatpak-builder をインストールしておく必要があります。Fedora Silverblue 32 では、既にインストールされていました。
[bitwalk@silverblue ~]$ rpm -qa | grep flatpak flatpak-builder-1.0.10-1.fc32.x86_64 flatpak-selinux-1.6.5-1.fc32.noarch flatpak-1.6.5-1.fc32.x86_64 flatpak-libs-1.6.5-1.fc32.x86_64 flatpak-session-helper-1.6.5-1.fc32.x86_64 [bitwalk@silverblue ~]$
Hello World!
1. ランタイムと、対応する SDK をインストール
Flatpak では、アプリが依存する基本的なライブラリにアクセスするために使用するランタイムを指定する必要があります。また、各ランタイムに対応して、アプリのビルドに必要なヘッダと開発ツールが含まれている SDK, Software Development Kit を利用できます。この SDK は、ランタイムを使うアプリをビルドする際に必要となります。
ここでは、Freedesktop 19.08 のランタイムと SDK を使用します。現在インストールされているパッケージを flatpak list コマンドで確認すると、既に Freedesktop 19.08 のランタイム, org.freedesktop.Platform がインストールされていることを確認できます。
[bitwalk@silverblue ~]$ flatpak list Name Application ID Version Branch Origin Installation Skype com.skype.Client 8.63.0.76 stable flathub system Transmission com.transmissionbt.Transmission stable fedora system WPS Office com.wps.Office 11.1.0.9615 stable flathub system Fedora Media Writer org.fedoraproject.MediaWriter 4.1.4 stable fedora system Platform org.fedoraproject.Platform f32 fedora system Freedesktop Platform org.freedesktop.Platform 19.08.12 19.08 flathub system default org.freedesktop.Platform.GL.default 19.08 flathub system ... (以下省略) ... [bitwalk@silverblue ~]$
Freedesktop 19.08 の SDK, org.freedesktop.Sdk をインストールします。
[bitwalk@silverblue ~]$ flatpak install flathub org.freedesktop.Sdk
Looking for matches…
Similar refs found for ‘org.freedesktop.Sdk’ in remote ‘flathub’ (system):
1) runtime/org.freedesktop.Sdk/x86_64/19.08
2) runtime/org.freedesktop.Sdk/x86_64/18.08
3) runtime/org.freedesktop.Sdk/x86_64/1.6
Which do you want to use (0 to abort)? [0-3]: 1
ID Branch Op Remote Download
1. [✓] org.freedesktop.Sdk.Locale 19.08 i flathub 61.8 kB / 322.4 MB
2. [✓] org.freedesktop.Sdk 19.08 i flathub 386.2 MB / 578.9 MB
Installation complete.
[bitwalk@silverblue ~]$
念の為 flatpak list コマンドで、SDK がインストールされていることを確認します。
[bitwalk@silverblue ~]$ flatpak list Name Application ID Version Branch Origin Installation Skype com.skype.Client 8.63.0.76 stable flathub system Transmission com.transmissionbt.Transmission stable fedora system WPS Office com.wps.Office 11.1.0.9615 stable flathub system Fedora Media Writer org.fedoraproject.MediaWriter 4.1.4 stable fedora system Platform org.fedoraproject.Platform f32 fedora system Freedesktop Platform org.freedesktop.Platform 19.08.12 19.08 flathub system default org.freedesktop.Platform.GL.default 19.08 flathub system Intel org.freedesktop.Platform.VAAPI.Intel 19.08 flathub system openh264 org.freedesktop.Platform.openh264 2.1.0 2.0 flathub system Freedesktop SDK org.freedesktop.Sdk 19.08.12 19.08 flathub system ... (以下省略) ... [bitwalk@silverblue ~]$
以下の作業は、あらかじめ準備しておいたプロジェクトフォルダ, $HOME/Projects/hello_flatpak 内で行うことにします。
- フォルダ名に、「プロジェクト」のように日本語名を使ったところ、ビルドのテストなどで不具合を確認しました。今のところ、'Projects' のように ASCII のアルファベットを使用した方が無難です。
[bitwalk@silverblue ~]$ cd Projects/hello_flatpak
[bitwalk@silverblue hello_flatpak]$
2. アプリの作成
今回作成するアプリは、文字列を出力するだけのシンプルなスクリプトです。
#!/bin/sh echo "こんにちは、世界!, from a sandbox"
適当なテキストエディタを使って、上記スクリプトをコピーして hello.sh として保存します。
[bitwalk@silverblue hello_flatpak]$ vi hello.sh [bitwalk@silverblue hello_flatpak]$ ls hello.sh [bitwalk@silverblue hello_flatpak]$ sh ./hello.sh こんにちは、世界!, from a sandbox [bitwalk@silverblue hello_flatpak]$
3. マニフェストの追加
Flatpak のアプリは、アプリの基本情報とビルド方法が記載されているマニフェストを使用してビルドされます。hello world アプリ (hello.sh) と同じディレクトリに下記の内容のマニフェストを保存します。
app-id: org.flatpak.Hello runtime: org.freedesktop.Platform runtime-version: '19.08' sdk: org.freedesktop.Sdk command: hello.sh modules: - name: hello buildsystem: simple build-commands: - install -D hello.sh /app/bin/hello.sh sources: - type: file path: hello.sh
適当なテキストエディタで、上記内容のマニフェスト org.flatpak.Hello.yml を作成します。
[bitwalk@silverblue hello_flatpak]$ vi org.flatpak.Hello.yml [bitwalk@silverblue hello_flatpak]$ ls hello.sh org.flatpak.Hello.yml [bitwalk@silverblue hello_flatpak]$
4. アプリのビルド
アプリとマニフェスト準備できたので、flatpak-builder コマンドで出力先 build-dir を指定してビルドします。
[bitwalk@silverblue hello_flatpak]$ flatpak-builder build-dir org.flatpak.Hello.yml Downloading sources Initializing build dir Committing stage init to cache Starting build of org.flatpak.Hello ======================================================================== Building module hello in /var/home/bitwalk/Projects/hello_flatpak/.flatpak-builder/build/hello-1 ======================================================================== Running: install -D hello.sh /app/bin/hello.sh Committing stage build-hello to cache Cleaning up Committing stage cleanup to cache Finishing app Please review the exported files and the metadata Committing stage finish to cache Pruning cache [bitwalk@silverblue hello_flatpak]$ ls -a . .. .flatpak-builder build-dir hello.sh org.flatpak.Hello.yml [bitwalk@silverblue hello_flatpak]$
生成されたディレクトリ build-dir の中を少し確認すると以下のようになっています。
[bitwalk@silverblue hello_flatpak]$ ls build-dir export files metadata var [bitwalk@silverblue hello_flatpak]$ ls build-dir/files bin manifest.json [bitwalk@silverblue hello_flatpak]$ ls build-dir/files/bin hello.sh [bitwalk@silverblue hello_flatpak]$
5. ビルドのテスト
ビルドした結果をテストするには、次のようにしてビルド&インストール (build-dir) して flatpak run で確認します。
[bitwalk@silverblue hello_flatpak]$ flatpak remotes Name Options fedora system,oci flathub system [bitwalk@silverblue hello_flatpak]$ flatpak-builder --force-clean --user --install build-dir org.flatpak.Hello.yml Emptying app dir 'build-dir' Downloading sources Starting build of org.flatpak.Hello Cache hit for hello, skipping build Cache hit for cleanup, skipping Cache hit for finish, skipping Everything cached, checking out from cache Exporting org.flatpak.Hello to repo Commit: 8c68d94fc864e2ccab9f41e5e0868e81044a11a713e59cefd59c8651510686e3 Metadata Total: 9 Metadata Written: 2 Content Total: 3 Content Written: 0 Content Bytes Written: 0 (0 bytes) Installing app/org.flatpak.Hello/x86_64/master Pruning cache [bitwalk@silverblue hello_flatpak]$ flatpak remotes Name Options fedora system,oci flathub system hello-origin user,no-enumerate,no-gpg-verify [bitwalk@silverblue hello_flatpak]$ flatpak list --user Name Application ID Version Branch Hello org.flatpak.Hello master [bitwalk@silverblue hello_flatpak]$
flatpak run コマンドで org.flatpak.Hello を実行します。
[bitwalk@silverblue hello_flatpak]$ flatpak run org.flatpak.Hello
こんにちは、世界!, from a sandbox
[bitwalk@silverblue hello_flatpak]$
アプリを実行できることを確認できました。
6. アプリをリポジトリに入れる
アプリを共有したい場合は、名前を付けたリポジトリ(ディレクトリ、この例では repo)にビルドの結果を出力することができます。flatpak-builder に --repo 引数を渡すことで行います。
[bitwalk@silverblue hello_flatpak]$ flatpak-builder --repo=repo --force-clean build-dir org.flatpak.Hello.yml
Emptying app dir 'build-dir'
Downloading sources
Starting build of org.flatpak.Hello
Cache hit for hello, skipping build
Cache hit for cleanup, skipping
Cache hit for finish, skipping
Everything cached, checking out from cache
Exporting org.flatpak.Hello to repo
Commit: 3ae9a852e6b06edfb41889cb0e9477d5af770b221d26542ab9d52758ba6b3d0b
Metadata Total: 9
Metadata Written: 6
Content Total: 3
Content Written: 3
Content Bytes Written: 814 (814 bytes)
Pruning cache
[bitwalk@silverblue hello_flatpak]$
7. アプリのインストール
先ほど作成したリポジトリ repo を Flatpak が管理しているリモートリポジトリのリストに tutorial-repo として追加します。
[bitwalk@silverblue hello_flatpak]$ flatpak --user remote-add --no-gpg-verify tutorial-repo repo [bitwalk@silverblue hello_flatpak]$ ls -a . .. .flatpak-builder build-dir hello.sh org.flatpak.Hello.yml repo [bitwalk@silverblue hello_flatpak]$ flatpak remotes Name Options fedora system,oci flathub system tutorial-repo user,no-gpg-verify hello-origin user,no-enumerate,no-gpg-verify [bitwalk@silverblue hello_flatpak]$
hello world のアプリ org.flatpak.Hello を tutorial-repo にインストールしようとすると、既に(ビルドのテスト用に作成した)hello-origin にインストールされているというエラーが出るので、hello-origin を削除して、もう一度、インストールを実行します。
[bitwalk@silverblue hello_flatpak]$ flatpak --user install tutorial-repo org.flatpak.Hello Looking for matches… error: org.flatpak.Hello/x86_64/master is already installed from remote hello-origin [bitwalk@silverblue hello_flatpak]$ flatpak remote-delete hello-origin The following refs are installed from remote 'hello-origin': 1) app/org.flatpak.Hello/x86_64/master Remove them? [y/n]: y Uninstalling app/org.flatpak.Hello/x86_64/master [bitwalk@silverblue hello_flatpak]$ flatpak --user install tutorial-repo org.flatpak.Hello Looking for matches… ID Branch Op Remote Download 1. [✓] org.flatpak.Hello master i tutorial-repo 1.0 kB / 587 bytes Installation complete. [bitwalk@silverblue hello_flatpak]$ flatpak list --user Name Application ID Version Branch Hello org.flatpak.Hello master [bitwalk@silverblue hello_flatpak]$
この場合、リポジトリとアプリがシステム全体ではなく、ユーザーごとに追加されます。
なお、アプリがビルドされたときに GPG キーが指定されていなかったため、リポジトリは --no-gpg-verify で追加されています。公式リポジトリの場合はプライベートな GPG キーで署名する必要があります。
8. アプリを実行する
以下のコマンドでアプリを実行することができます。
[bitwalk@silverblue hello_flatpak]$ cd ~/ [bitwalk@silverblue ~]$ flatpak run org.flatpak.Hello こんにちは、世界!, from a sandbox [bitwalk@silverblue ~]$
ちなみに、アプリの実体は以下にあります。
[bitwalk@silverblue hello_flatpak]$ ls $HOME/.local/share/flatpak app db exports repo [bitwalk@silverblue hello_flatpak]$ ls $HOME/.local/share/flatpak/app org.flatpak.Hello [bitwalk@silverblue hello_flatpak]$ ls $HOME/.local/share/flatpak/app/org.flatpak.Hello current x86_64 [bitwalk@silverblue hello_flatpak]$ ls $HOME/.local/share/flatpak/app/org.flatpak.Hello/current 5bc54b69d7f13907c34e91558a8e98e866001a0c3307cee361df10a09c6f44d0 active [bitwalk@silverblue hello_flatpak]$ ls $HOME/.local/share/flatpak/app/org.flatpak.Hello/current/active deploy export files metadata [bitwalk@silverblue hello_flatpak]$ ls $HOME/.local/share/flatpak/app/org.flatpak.Hello/current/active/files bin manifest.json [bitwalk@silverblue hello_flatpak]$ ls $HOME/.local/share/flatpak/app/org.flatpak.Hello/current/active/files/bin hello.sh [bitwalk@silverblue hello_flatpak]$
まとめ
シンプルなサンプルで Flatpak パッケージを作成する流れを確認できました。流れは大体判ったものの、具体的なアプリを Flatpak のパッケージにするには、まだまだ覚えなければないないことがありそうです。当面のゴールを、GNOME あるいは GTK+ アプリを Flatpak のパッケージにすることとして、確認できたことをまとめて行く予定です。
なお、本ブログ記事は、経験が浅いテーマを扱っているため、不正確な表現や間違いが多くある可能性があります。気が付いた時点で修正していることをご了承下さい。
参考サイト
にほんブログ村
0 件のコメント:
コメントを投稿