ラベル Flatpak の投稿を表示しています。 すべての投稿を表示
ラベル Flatpak の投稿を表示しています。 すべての投稿を表示

2021-07-08

【備忘録】Flatpak と Flathub

Flatpak は、Linux 用のソフトウェアデブロイメントおよびパッケージ管理のためのユーティリティです。Flatpak は、ユーザーがアプリケーションソフトウェアをシステムの他の部分から分離して実行できるサンドボックス環境を提供すると宣伝されています。

Flatpak は、freedesktop.org(旧称:X Desktop Group または XDG)のプロジェクトの一環として開発され、当初は xdg-app と呼ばれていました。

Wikipedia より引用・翻訳、編集

使用している Linux に flatpak パッケージがインストールされていれば、Linux のディストリビューションに依存せずにデスクトップ用アプリをインストールして利用することが出来ます。

自分が使っている Fedora Workstation 34 では、デフォルトで flatpak パッケージがインストールされます。

[bitwalk@fedora-pc ~]$ dnf list flatpak
...
...
インストール済みパッケージ
flatpak.x86_64                       1.10.2-3.fc34                       @fedora
利用可能なパッケージ
flatpak.i686                         1.10.2-3.fc34                       fedora 
[bitwalk@fedora-pc ~]$ 

flatpak パッケージがインストールされていても、利用できる Flatpak 形式のアプリをあまりありません。でも心配は無用です。Flathub というリポジトリを利用すれば、人気のアプリをはじめ、数多くのデスクトップ・アプリを入手、利用できるようになります。

※ Flathub のリポジトリをすぐに利用出来るようになっている Linux ディストリビューションもあるらしいのですが、少なくとも Fedora ではそうなっていません。

Flathub

Flathub は、Flatpak アプリの集中型リポジトリです。人気の高い Linux ディストリビューションにアプリを配布するためのエントリーポイントを提供しています。flatpak パッケージを利用できる主要な Linux ディストリビューション向けに、Flathub のリポジトリを簡単に設定できるように Quick Setup のページが用意されています。

ディストリビューション別に利用できる Quick Setup のページ
Flathub の Linux ディストロ別のセットアップサイト (https://flatpak.org/setup/)

Fedora を例に取って説明します。Fedora のアイコンをクリックすると下記のページが表示されます。

Fedora 用 Quick Setup のページ

青い Flathub repository file ボタンをクリックすると、「flathub.flatpakrepo を開く」のダイアログが表示され、「ソフトウェア」でインストールするか保存するかを尋ねられます。

「flathub.flatpakrepo を開く」のダイアログ

「プログラムで開く (O)」を選択して  OK  ボタンをクリックします。すると下図のような「ソフトウェア」のインストールウィンドウが表示されますので、青い インストール (I) ボタンをクリックしてインストールします。

Flathub リポジトリのインストール

リポジトリ追加時に(管理者権限を持つユーザの、あるいはルートの)パスワード入力が求められました。

Flathub リポジトリのインストール(済)

「ソフトウェア」を再起動して、Flathub リポジトリが追加されていることを確認します。

ソフトウェアリポジトリの確認

Flathub がリポジトリ一覧にあることを確認します。

ソフトウェアリポジトリ一覧

以上で、Flathub にある Flatpak 形式のパッケージを利用できるようになりました。

参考サイト

  1. bitWalk's: Fedora で Flatpak を使う [2019-12-02]

 

ブログランキング・にほんブログ村へ bitWalk's - にほんブログ村 にほんブログ村 IT技術ブログ Linuxへ
にほんブログ村

2020-10-30

【備忘録】Flatpak 版 Google Chrome

Flatpak(旧称:xdg-app)は、Linux デスクトップ向けのソフトウェアデプロイメントおよびパッケージ管理を行うユーティリティソフトウェアです。Flatpak でインストールされたアプリケーションは、実行時にホスト環境から隔離(サンドボックス化)されます。

Wikipedia より引用・編集

Flatpak 版 Google Chrome を試しましたので備忘録としました。

使用した OS は以下の通りです。

Fedora Silverblue 33 x86_64

Flathub

Fedora Silverblue はデスクトップアプリに Flatpak を利用しますが、Fedora の Flatpak リポジトリ registry.fedoraproject.org にはアプリがあまりありません。そこで Flathub という多くの Flatpak アプリが登録されているリポジトリを登録します。参考サイト [1] に主要な Linux ディストロそれぞれでに対してリポジトリの設定方法が紹介されています。Fedora では端末エミュレータ上で下記のようにコマンドを実行します。

[bitwalk@localhost ~]$ flatpak remote-add --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo

Flathub では多くのアプリを利用できるのですが、普段自分が使っているブラウザ Google Chrome が入手できず残念に思っていましたが、探してみると参考サイト [2] (github) に Google Chrome のパッケージがベータ扱いで公開されていました。早速下記のようにリポジトリを登録しました。

[bitwalk@localhost ~]$ flatpak remote-add flathub-beta https://flathub.org/beta-repo/flathub-beta.flatpakrepo

再起動して GNOME Software(ソフトウェア)を開いて、Google Chrome を検索してインストールします。Google Chrome を実行すると、以下の画面が最初に表示されます。

Google Chrome を最初に起動したときの画面

Google アカウントの同期で固まってしまいましたが、なんとか使えるようにしました。が、やはり同期の情報が残らないのか、起動のたびに入力をやり直しています。😭

Google Chrome のバージョンは、確認した時点で 86.0.4240.111 になっており、他の PC に rpm などでインストールされている Google Chrome と同じバージョンでした。

まだ不具合がありますが、Flatpak で特に欲しいと思っていたアプリがとりあえず使えるようになりました。

参考サイト

  1. Flatpak—the future of application distribution
  2. Google Chrome on Flathub-beta - General - Flathub Discourse

ブログランキング・にほんブログ村へ
にほんブログ村

2020-08-14

Flatpak パッケージとデスクトップ・アプリ

Flatpak のパッケージの作り方について、簡単な GTK+ (Vala) の GUI プログラムをデプロイするところまでを、ブログ記事 [1] [2] [3] にまとめました。

これであとは Flatpak のパッケージ作りに専念できるかというと、そうでもありません。例えば GNOME デスクトップでアプリの一覧にインストールしたアプリのアイコンを表示して、これをクリックして起動する方法について触れていないからです。

今回は、その触れていなかったところをテーマとします。

今回のテーマ

GUI アプリを Flatpak パッケージにして、これをインストールして GNOME デスクトップのアプリ一覧からアイコンをクリックして起動できるようにします。

使用した OS の環境は下記の通りです。

Fedora Silverblue 32 x86_64
» flatpak-1.6.5-1.fc32.x86_64
» flatpak-builder-1.0.10-1.fc32.x86_64

できそこないの電卓プログラム

いつまでも Hello World! のようなプログラムをサンプルに使うのも芸がないので、今回は電卓プログラムを用意しました。と言っても、本記事を作っている時点は GUI 部分だけで、電卓機能を実装していません。😅

そんなできそこないのプログラムですが、形だけあればサンプルに使えるので、下記 github に公開しました。後追いで完動するように仕上げます。🙏

そう、今回の Flatpak 用のマニフェストでは、github の上記リポジトリにあるソースを読み込んでビルドします。

マニフェスト

今回のマニフェストは次のとおりです。

com.blogspot.bitwalk.Calculator.yaml

今回は、マニフェストの他に、デスクトップ用のファイル (Calculator.desktop) とアイコン用のイメージファイル (Calculator.svg) を加えています。

サンプルに使う電卓プログラムとは別のリポジトリを github に作ってありますので、下記サイトのリポジトリをクローンするか、zip ファイルをダウンロードして解凍してご利用ください。

  • https://github.com/bitwalk123/com.blogspot.bitwalk.Calculator

GUI アプリをインストールして、デスクトップアプリとして扱うときは desktop ファイルの設定が重要になります。

マニファストでは Calculator.desktop を Flatpak の /app/share/applications/com.blogspot.bitwalk.Calculator.desktop へインストールするように記述しています。

マニフェストは desktop ファイルが参照している、アプリのアイコンとして使用する画像ファイルもインストールするよう記述しています。これは SVG 形式のファイル Calculator.svg で、/app/share/icons/hicolor/scalable/apps/com.blogspot.bitwalk.Calculator.svg へインストールしています。

アイコンには PNG 形式のファイルもアイコンに使用できますが、この場合は、いくつもの画像サイズを用意する必要があります。

Flatpak パッケージのビルドとデプロイ

ここでは、作業ディレクトリ $HOME/Projects/com.blogspot.bitwalk.Calculator 内で作業するものとして説明を進めます。ディレクトリ内は次のようになっています。

[bitwalk@silverblue com.blogspot.bitwalk.Calculator]$ ls
Calculator.desktop  Calculator.svg  README.md  com.blogspot.bitwalk.Calculator.yaml
[bitwalk@silverblue com.blogspot.bitwalk.Calculator]$

作業ディレクトリ内 build-dir にビルド

まず、作業ディレクトリ内 build-dir にビルドします。

[bitwalk@silverblue com.blogspot.bitwalk.Calculator]$ flatpak-builder build-dir com.blogspot.bitwalk.Calculator.yaml
Downloading sources
Initialized empty Git repository in /var/home/bitwalk/Projects/com.blogspot.bitwalk.Calculator/.flatpak-builder/git/https_github.com_bitwalk123_vala-calculator.git-SE6FP0/
Fetching git repo https://github.com/bitwalk123/vala-calculator.git, ref refs/heads/master
...
(途中省略)
...
Initializing build dir
Committing stage init to cache
Starting build of com.blogspot.bitwalk.Calculator
========================================================================
Building module icons in /var/home/bitwalk/Projects/com.blogspot.bitwalk.Calculator/.flatpak-builder/build/icons-1
========================================================================
Running: install -Dm644 Calculator.svg /app/share/icons/hicolor/scalable/apps/com.blogspot.bitwalk.Calculator.svg
Committing stage build-icons to cache
========================================================================
Building module desktop in /var/home/bitwalk/Projects/com.blogspot.bitwalk.Calculator/.flatpak-builder/build/desktop-1
========================================================================
Running: install -Dm644 Calculator.desktop /app/share/applications/com.blogspot.bitwalk.Calculator.desktop
Committing stage build-desktop to cache
========================================================================
Building module calculator in /var/home/bitwalk/Projects/com.blogspot.bitwalk.Calculator/.flatpak-builder/build/calculator-1
========================================================================
Already on 'master'
The Meson build system
Version: 0.53.2
Source dir: /run/build/calculator
Build dir: /run/build/calculator/_flatpak_build
Build type: native build
Project name: Vala Calculator
Project version: 0.1
Appending CFLAGS from environment: '-O2 -g -pipe -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection'
...
(途中省略)
...
Build targets in project: 1

Found ninja-1.9.0 at /usr/bin/ninja
[3/3] Linking target calculator.
[0/1] Installing files.
Installing calculator to /app/bin
...
(途中省略)
...
Committing stage cleanup to cache
Finishing app
Exporting share/applications/com.blogspot.bitwalk.Calculator.desktop
Exporting share/icons/hicolor/scalable/apps/com.blogspot.bitwalk.Calculator.svg
Please review the exported files and the metadata
Committing stage finish to cache
Pruning cache
[bitwalk@silverblue com.blogspot.bitwalk.Calculator]$ 

ビルドの動作確認

動作確認をしておきます。

[bitwalk@silverblue com.blogspot.bitwalk.Calculator]$ flatpak-builder --run build-dir com.blogspot.bitwalk.Calculator.yaml calculator

(calculator:2): dbind-WARNING **: 20:16:14.656: AT-SPI: Error retrieving accessibility bus address: org.freedesktop.DBus.Error.ServiceUnknown: org.freedesktop.DBus.Error.ServiceUnknown
[bitwalk@silverblue com.blogspot.bitwalk.Calculator]$ 
calculator の実行例

ローカル・リポジトリにビルド

ローカル・リポジトリ $HOME/repo に再ビルドします。

[bitwalk@silverblue com.blogspot.bitwalk.Calculator]$ flatpak-builder --repo=$HOME/repo --force-clean build-dir com.blogspot.bitwalk.Calculator.yaml
Emptying app dir 'build-dir'
Downloading sources
Fetching git repo https://github.com/bitwalk123/vala-calculator.git, ref refs/heads/master
remote: Total 0 (delta 0), reused 0 (delta 0), pack-reused 0
Starting build of com.blogspot.bitwalk.Calculator
Cache hit for icons, skipping build
Cache hit for desktop, skipping build
Cache hit for calculator, skipping build
Cache hit for cleanup, skipping
Cache hit for finish, skipping
Everything cached, checking out from cache
Exporting com.blogspot.bitwalk.Calculator to repo
Commit: c4a7566f37a3874b9f13aa2ceff1b221fb3b4601d58397d16bf42d6b0d3c65b9
Metadata Total: 37
Metadata Written: 1
Content Total: 7
Content Written: 0
Content Bytes Written: 0 (0 bytes)
Exporting com.blogspot.bitwalk.Calculator.Debug to repo
Commit: d427ed0b839dd77f98e201efee052c9ab604b7667166a3d78998541d22347932
Metadata Total: 15
Metadata Written: 1
Content Total: 4
Content Written: 0
Content Bytes Written: 0 (0 bytes)
Pruning cache
[bitwalk@silverblue com.blogspot.bitwalk.Calculator]$ 

リモート・リポジトリにインストール(デプロイ)

リモート・リポジトリにインストール(デプロイ)します。

[bitwalk@silverblue com.blogspot.bitwalk.Calculator]$ flatpak --user install bitwalk com.blogspot.bitwalk.Calculator
Looking for matches…

com.blogspot.bitwalk.Calculator permissions:
    ipc                   network               pulseaudio              wayland       x11      dri
    file access [1]       dbus access [2]       bus ownership [3]

    [1] xdg-run/dconf, ~/.config/dconf:ro, ~/.local/share/decsync
    [2] ca.desrt.dconf, org.freedesktop.Notifications, org.freedesktop.secrets, org.gnome.OnlineAccounts
    [3] org.gnome.FeedReader.ArticleView


        ID                                        Branch           Op           Remote            Download
 1. [✓] com.blogspot.bitwalk.Calculator           master           i            bitwalk           1.0 kB / 8.3 kB

Installation complete.
[bitwalk@silverblue com.blogspot.bitwalk.Calculator]$ flatpak list --user
Name               Application ID                         Version        Branch
Calculator         com.blogspot.bitwalk.Calculator                       master
Hello              com.blogspot.bitwalk.Hello                            master
Hello              org.gnu.Hello                                         master
[bitwalk@silverblue com.blogspot.bitwalk.Calculator]$ 

GNOME のアプリ一覧

GNOME デスクトップ画面の「アクティビティ」から「アプリケーションを表示する」を選んで、アプリ一覧を表示させて Calculator のアイコンが表示されていることを確認します。もし表示されていなければ、念の為、再起動して確認してください。アイコンを確認できればそれをクリックしてアプリが起動すれば OK です。

com.blogspot.bitwalk.Calculator インストール後の GNOME のアプリ一覧

以上で、ローカルでデプロイした Flatpak のパッケージをデスクトップ・アプリとして利用できるようになりました。

なお、本ブログで紹介している内容は、github のリポジトリにアップした情報を元に説明しています。そのため、予告無く内容が更新され、本記事の説明と乖離が出てくる可能性があります。

参考サイト

  1. bitWalk's: はじめての Flatpak パッケージ作成 [2020-08-08]
  2. bitWalk's: はじめての Flatpak パッケージ作成 (2) [2020-08-10]
  3. bitWalk's: はじめての Flatpak パッケージ作成 (3) [2020-08-11]

ブログランキング・にほんブログ村へ
にほんブログ村

2020-08-11

はじめての Flatpak パッケージ作成 (3)

Flatpak は、Linux デスクトップ向けのソフトウェアデプロイメントおよびパッケージ管理を行うユーティリティソフトウェアです。Flatpak でインストールされたアプリケーションは、実行時にホスト環境から隔離(サンドボックス化)されます。

Flatpakは freedesktop.org のプロジェクトとして開始され。以前は xdg-app という名称でした。

Wikipedia より引用・編集

いままでブログ記事 [1] [2] で扱った Flatpak へデプロイする hello world のプログラムは、コンソール上で実行するプログラム (CUI) でした。Flatpak はデスクトップ向けソフトウェアを扱っているのですから、GUI プログラムを Flatpak 用のパッケージに作成してみたくなります。そこで、今回のテーマでは GUI プログラムを扱います。

今回のテーマ

Meson を利用してビルドする Vala の GUI プログラム (hello.vala) を、Flatpak のパッケージにします。

使用した OS の環境は下記の通りです。

Fedora Silverblue 32 x86_64
» flatpak-1.6.5-1.fc32.x86_64
» flatpak-builder-1.0.10-1.fc32.x86_64

Meson でビルドする GUI プログラム

Vala プログラムと Meson

Vala のサンプルは以前のブログ記事 [3] をベースにしています。ただし、日本語表示が、最初のビルド後の動作確認時に文字化けした(ただし、デプロイ後の文字化け無し)ので、英語表示に直しています。

src/hello.vala
#!/usr/bin/env vala
using Gtk;

public class HelloWorld : Gtk.Window {

    public HelloWorld () {
        this.destroy.connect (Gtk.main_quit);
        this.title = "Hello, World!";

        this.border_width = 10;
        this.set_default_size (350, 70);
        this.window_position = Gtk.WindowPosition.CENTER;

        var label = new Gtk.Label ("Hello, World!");    
        this.add (label);
    }
}

public static int main (string[] args) {
    Gtk.init (ref args);

    HelloWorld app = new HelloWorld ();
    app.show_all ();
    Gtk.main ();
    return 0;
}

meson.build は以前のブログ記事 [4] で紹介した内容をベースに、インストールの機能を追加しています。

src/meson.build
project('vala sample', 'vala', 'c')

dependencies = [
    dependency('glib-2.0'),
    dependency('gobject-2.0'),
    dependency('gtk+-3.0'),
]

sources = files('hello.vala')

executable('hello', sources, dependencies: dependencies, install: true)

マニフェスト

マニフェストは以下のとおりです。ビルドする Vala のソースファイルと Meson ファイルは、作業ディレクトリ内のディレクトリ src 内に保存するようにしました。

また、Flatpak のサンドボックス内で GUI アプリを実行するにあたって、ホスト環境へのアクセス設定 (Sandbox Permissions [5] ) をする必要がありました。この設定について詳しく語るほどの知識が無いので、後日フォローすることにします。今回は、参考サイト [6] の設定を参考にしました。

com.blogspot.bitwalk.Hello.yaml
id: com.blogspot.bitwalk.Hello
runtime: org.gnome.Platform
runtime-version: '3.36'
sdk: org.gnome.Sdk
command: hello
finish-args:
  - --socket=pulseaudio
  - --socket=x11 
  - --share=ipc
  - --socket=wayland
  - --device=dri
  - --share=network
  - --filesystem=xdg-run/dconf
  - --filesystem=~/.config/dconf:ro
  - --talk-name=ca.desrt.dconf
  - --env=DCONF_USER_CONFIG_DIR=.config/dconf
  - --talk-name=org.gnome.OnlineAccounts
  - --own-name=org.gnome.FeedReader.ArticleView
  - --talk-name=org.freedesktop.Notifications
  - --talk-name=org.freedesktop.secrets
  - --env=DECSYNC_DIR=.local/share/decsync
  - --filesystem=~/.local/share/decsync
modules:
  - name: hello
    buildsystem: meson
    no-autogen: true
    sources:
      - type: dir
        path: src

必要なランタイムと SDK は、org.gnome.Platformorg.freedesktop.Sdk です。インストールされていなければ、flatpak install flathub ... として、あらかじめインストールしておきます。

今回は、$HOME/Projects/com.blogspot.bitwalk.Hello というディレクトリを用意して、ここを作業ディレクトリにしています。サンプルのビルドに使用するファイルとディレクトリの階層構造は下記のようになっています。

com.blogspot.bitwalk.Hello
├── com.blogspot.bitwalk.Hello.yaml
└── src
    ├── hello.vala
    └── meson.build

ビルド

次のようにアプリをビルドします。

[bitwalk@silverblue com.blogspot.bitwalk.Hello]$ flatpak-builder build-dir com.blogspot.bitwalk.Hello.yaml
Downloading sources
Initializing build dir
Committing stage init to cache
Starting build of com.blogspot.bitwalk.Hello
========================================================================
Building module hello in /var/home/bitwalk/Projects/com.blogspot.bitwalk.Hello/.flatpak-builder/build/hello-1
========================================================================
The Meson build system
Version: 0.53.2
Source dir: /run/build/hello
Build dir: /run/build/hello/_flatpak_build
Build type: native build
Project name: vala sample
Project version: undefined
Appending CFLAGS from environment: '-O2 -g -pipe -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection'
Appending LDFLAGS from environment: ['-L/app/lib', '-Wl,-z,relro,-z,now', '-Wl,--as-needed']
Appending CFLAGS from environment: '-O2 -g -pipe -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection'
Appending LDFLAGS from environment: ['-L/app/lib', '-Wl,-z,relro,-z,now', '-Wl,--as-needed']
C compiler for the host machine: ccache cc (gcc 9.2.0 "cc (GCC) 9.2.0")
C linker for the host machine: cc ld.bfd 2.32
Vala compiler for the host machine: valac (valac 0.48.7)
Host machine cpu family: x86_64
Host machine cpu: x86_64
Found pkg-config: /usr/bin/pkg-config (1.6.3)
Run-time dependency glib-2.0 found: YES 2.64.4
Run-time dependency gobject-2.0 found: YES 2.64.4
Run-time dependency gtk+-3.0 found: YES 3.24.21
Build targets in project: 1

Found ninja-1.9.0 at /usr/bin/ninja
[3/3] Linking target hello.
[0/1] Installing files.
Installing hello to /app/bin
compressing debuginfo in: /var/home/bitwalk/Projects/com.blogspot.bitwalk.Hello/.flatpak-builder/rofiles/rofiles-O9PedF/files/bin/hello
processing: /var/home/bitwalk/Projects/com.blogspot.bitwalk.Hello/.flatpak-builder/rofiles/rofiles-O9PedF/files/bin/hello
[30] .debug_aranges compressed -> .zdebug_aranges (320 => 111 34.69%)
[31] .debug_info compressed -> .zdebug_info (19811 => 11521 58.15%)
[32] .debug_abbrev compressed -> .zdebug_abbrev (1527 => 607 39.75%)
[33] .debug_line compressed -> .zdebug_line (2430 => 1141 46.95%)
[34] .debug_str compressed -> .zdebug_str (14787 => 5864 39.66%)
[35] .debug_loc compressed -> .zdebug_loc (1407 => 344 24.45%)
[36] .debug_ranges compressed -> .zdebug_ranges (272 => 93 34.19%)
[39] Updating section string table
stripping /var/home/bitwalk/Projects/com.blogspot.bitwalk.Hello/.flatpak-builder/rofiles/rofiles-O9PedF/files/bin/hello to /var/home/bitwalk/Projects/com.blogspot.bitwalk.Hello/.flatpak-builder/rofiles/rofiles-O9PedF/files/lib/debug/bin/hello.debug
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 com.blogspot.bitwalk.Hello]$ 

動作確認

次のように build-dir を指定して、直接、動作確認します。

[bitwalk@silverblue com.blogspot.bitwalk.Hello]$ flatpak-builder --run build-dir com.blogspot.bitwalk.Hello.yaml hello

(hello:2): dbind-WARNING **: 12:04:27.663: AT-SPI: Error retrieving accessibility bus address: org.freedesktop.DBus.Error.ServiceUnknown: org.freedesktop.DBus.Error.ServiceUnknown
[bitwalk@silverblue com.blogspot.bitwalk.Hello]$ 
localdomain.localhost.Hello の実行例 (1)

警告が出ますが、一応ウィンドウが表示されます。現在の知識では、警告を出ないようにする方法が判りません。ひきつづき調べます。

ローカルリポジトリにビルド

前回 [2] では、複数のプロジェクトで共有できるように、ローカルのリポジトリを $HOME/repo としました。出力先にこのリポジトリを指定して再ビルドします。

[bitwalk@silverblue com.blogspot.bitwalk.Hello]$ flatpak-builder --repo=$HOME/repo --force-clean build-dir com.blogspot.bitwalk.Hello.yaml
Emptying app dir 'build-dir'
Downloading sources
Starting build of com.blogspot.bitwalk.Hello
Cache miss, checking out last cache hit
========================================================================
Building module hello in /var/home/bitwalk/Projects/com.blogspot.bitwalk.Hello/.flatpak-builder/build/hello-1
========================================================================
The Meson build system
...
(途中省略)
...
Content Bytes Written: 32926 (32.9 kB)
Pruning cache
[bitwalk@silverblue com.blogspot.bitwalk.Hello]$ 

アプリのデプロイ(インストール)と実行結果

ビルドした com.blogspot.bitwalk.Hello をインストール(デプロイ)します。

[bitwalk@silverblue com.blogspot.bitwalk.Hello]$ flatpak list --user
Name       Application ID      Version     Branch
Hello      org.gnu.Hello                   master
[bitwalk@silverblue com.blogspot.bitwalk.Hello]$ flatpak --user install bitwalk com.blogspot.bitwalk.Hello
Looking for matches…

com.blogspot.bitwalk.Hello permissions:
    ipc                   network               pulseaudio              wayland       x11      dri
    file access [1]       dbus access [2]       bus ownership [3]

    [1] xdg-run/dconf, ~/.config/dconf:ro, ~/.local/share/decsync
    [2] ca.desrt.dconf, org.freedesktop.Notifications, org.freedesktop.secrets, org.gnome.OnlineAccounts
    [3] org.gnome.FeedReader.ArticleView


        ID                                   Branch          Op          Remote           Download
 1. [✓] com.blogspot.bitwalk.Hello           master          i           bitwalk          1.0 kB / 4.1 kB

Installation complete.
[bitwalk@silverblue com.blogspot.bitwalk.Hello]$ flatpak list --user
Name        Application ID                   Version       Branch
Hello       com.blogspot.bitwalk.Hello                     master
Hello       org.gnu.Hello                                  master
[bitwalk@silverblue com.blogspot.bitwalk.Hello]$ 

実行結果は以下のようになります。今回は警告が出ませんでした。

[bitwalk@silverblue com.blogspot.bitwalk.Hello]$ flatpak run com.blogspot.bitwalk.Hello
localdomain.localhost.Hello の実行例 (2)

まとめ

パッケージ作成のまとめ

今回取り上げた com.blogspot.bitwalk.Hello は次の手順でデプロイしています。

  1. flatpak-builder build-dir com.blogspot.bitwalk.Hello.yaml
    • 作業ディレクトリ build-dir へアプリ com.blogspot.bitwalk.Hello をビルド
  2. flatpak-builder --run build-dir com.blogspot.bitwalk.Hello.yaml hello
    • 作業ディレクトリ build-dir へビルドしたアプリ com.blogspot.bitwalk.Hello の実行
  3. flatpak-builder --repo=$HOME/repo --force-clean build-dir com.blogspot.bitwalk.Hello.yaml
    • ローカルリポジトリ $HOME/repo へアプリ com.blogspot.bitwalk.Hello を再ビルド
  4. flatpak --user remote-add --no-gpg-verify bitwalk $HOME/repo
    • (まだ登録していなければ)ローカルリポジトリ $HOME/repo をシステムのリモート・リポジトリ bitwalk へ追加(登録)
  5. flatpak --user install bitwalk com.blogspot.bitwalk.Hello
    • リモート・リポジトリ bitwalk へ、アプリ com.blogspot.bitwalk.Hello をインストール(デプロイ)

三回に亘って、Flatpak のパッケージの基本的な作り方をまとめました。しかし本格的に利用するには、まだまだ情報が足りません。今後、不定期になりますが更なる情報を調べてまとめて行く予定です。

GNOME でアプリケーションコンテナを利用するというアイデアからはじまった Flatpak(旧称:xdg-app)のプロジェクトですが、他にも Ubuntu の Canonical 社が推進する Snap などの類似技術があるので、将来 Flatpak が主流になるかどうかは判りません。ただ、Fedora Workstation や Silverblue では Flatpak はデフォルトで利用できるようになっているので、Fedora をメインに使っている者としては、まず Flatpak から勉強をはじめています。

参考サイト

  1. bitWalk's: はじめての Flatpak パッケージ作成 [2020-08-08]
  2. bitWalk's: はじめての Flatpak パッケージ作成 (2) [2020-08-10]
  3. bitWalk's: Vala でオブジェクト指向プログラミング [2020-06-22]
  4. bitWalk's: Vala と Meson [2020-06-20]
  5. Sandbox Permissions — Flatpak documentation
  6. Packaging Tutorial :: Fedora Docs Site

ブログランキング・にほんブログ村へ
にほんブログ村

2020-08-10

はじめての Flatpak パッケージ作成 (2)

Flatpak は、Linux デスクトップ向けのソフトウェアデプロイメントおよびパッケージ管理を行うユーティリティソフトウェアです。Flatpak でインストールされたアプリケーションは、実行時にホスト環境から隔離(サンドボックス化)されます。

Flatpakは freedesktop.org のプロジェクトとして開始され。以前は xdg-app という名称でした。

Wikipedia より引用・編集

先日の本ブログ記事 [1] で Flatpak のパッケージの作成方法をまとめましたが、引用した hello world が、文字列を表示するシェルスクリプトだったため、SDK との関わりが見えませんでした。そこで、他に例がないか探したところ、下記のサイトに C プログラムでコンパイルする hello world プログラムを利用した例が紹介されていました。

これを、自分の環境で試してみました。使用した OS の環境は下記の通りです。

Fedora Silverblue 32 x86_64
» flatpak-1.6.5-1.fc32.x86_64
» flatpak-builder-1.0.10-1.fc32.x86_64

GNU Autotools でビルドするプログラム

今回は GNU のサイトで公開されている hello world のプログラムを扱います。このサンプルは、GNU Autotools を用いて C ソースをコンパイルしてビルドします。

今回のテーマ

GNU Autotools を利用してビルドする C のプログラムを、Flatpak のパッケージにします。

マニフェスト

マニフェストは以下のとおりです。

org.gnu.Hello.yml
id: org.gnu.Hello
runtime: org.freedesktop.Platform
runtime-version: '19.08'
sdk: org.freedesktop.Sdk
command: hello
modules:
  - name: hello
    buildsystem: autotools
    no-autogen: true
    sources:
      - type: archive
        url: https://ftp.gnu.org/gnu/hello/hello-2.10.tar.gz
        sha256: 31e066137a962676e89f69d1b65382de95a7ef7d914b8cb956f41ea72e0f516b

ソースはビルド時に公開されているサイトからダウンロードします。ダウンロードするダイルのシェックサム(ハッシュ値)が必要だったので、あらかじめダウンロードして sha256sum で調べました。

必要なランタイムと SDK は、前回 [1] と同じ org.freedesktop.Platformorg.freedesktop.Sdk です。

[bitwalk@silverblue org.gnu.Hello]$ flatpak list | grep Freedesktop
Freedesktop Platform org.freedesktop.Platform 19.08.12 19.08 flathub system
Freedesktop SDK org.freedesktop.Sdk 19.08.12 19.08 flathub system
[bitwalk@silverblue org.gnu.Hello]$ 

今回は、$HOME/Projects/org.gnu.Hello というディレクトリを用意して、ここを作業ディレクトリにしています。ソースはインターネットからダウンロードしますので、ビルドに必要なのは YAML 形式のマニフェスト org.gnu.Hello.yml だけです。

[bitwalk@silverblue org.gnu.Hello]$ ls -a
.  ..  org.gnu.Hello.yml
[bitwalk@silverblue org.gnu.Hello]$ 

ビルド

次のようにアプリをビルドします。

[bitwalk@silverblue org.gnu.Hello]$ flatpak-builder build-dir org.gnu.Hello.yml
Downloading sources
Downloading https://ftp.gnu.org/gnu/hello/hello-2.10.tar.gz
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100  708k  100  708k    0     0   417k      0  0:00:01  0:00:01 --:--:--  417k
Initializing build dir
Committing stage init to cache
Starting build of org.gnu.Hello
========================================================================
Building module hello in /var/home/bitwalk/Projects/org.gnu.Hello/.flatpak-builder/build/hello-1
========================================================================
checking for a BSD-compatible install... /usr/bin/install -c
...
(途中省略)
...
configure: creating ./config.status
config.status: creating Makefile
...
(途中省略)
...
make  all-recursive
make[1]: Entering directory '/run/build/hello'
Making all in po
make[2]: Entering directory '/run/build/hello/po'
...
(途中省略)
...
depbase=`echo src/hello.o | sed 's|[^/]*$|.deps/&|;s|\.o$||'`;\
gcc -DLOCALEDIR=\"/app/share/locale\" -DHAVE_CONFIG_H -I.  -Ilib -I./lib -Isrc -I./src   -O2 -g -pipe -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -MT src/hello.o -MD -MP -MF $depbase.Tpo -c -o src/hello.o src/hello.c &&\
...
(途中省略)
...
make[1]: Leaving directory '/run/build/hello'
make  install-recursive
make[1]: Entering directory '/run/build/hello'
...
(途中省略)
...
stripping /var/home/bitwalk/Projects/org.gnu.Hello/.flatpak-builder/rofiles/rofiles-N1MqOY/files/bin/hello to /var/home/bitwalk/Projects/org.gnu.Hello/.flatpak-builder/rofiles/rofiles-N1MqOY/files/lib/debug/bin/hello.debug
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 org.gnu.Hello]$ 

使用している Fedora Silverblue の OS 環境には、ソフトウェア開発のパッケージをインストールしていませんので、GCC などのコマンドは利用できません。そういうわけで、確かに SDK を利用してビルドしていることが解ります。

動作確認

次のように build-dir を指定して、直接、動作確認します。

[bitwalk@silverblue org.gnu.Hello]$ flatpak-builder --run build-dir org.gnu.Hello.yml hello
Hello, world!
[bitwalk@silverblue org.gnu.Hello]$ 

リポジトリにビルド結果を出力

前回 [1] は、作業ディレクトリ内に repo を指定してレポジトリ内でビルドする例を紹介しましたが、複数のプロジェクトで共有できるように、ローカルのリポジトリを $HOME/repo としました。出力先にこのリポジトリを指定して再コンパイルします。

[bitwalk@silverblue org.gnu.Hello]$ flatpak-builder --repo=$HOME/repo --force-clean build-dir org.gnu.Hello.yml
Emptying app dir 'build-dir'
Downloading sources
Starting build of org.gnu.Hello
...
(途中省略)
...
Content Written: 22
Content Bytes Written: 267072 (267.1 kB)
Pruning cache
[bitwalk@silverblue org.gnu.Hello]$ 

リポジトリの登録

Flatpak のリモート・リポジトリに、$HOME/repobitwalk という名前で登録します。

[bitwalk@silverblue org.gnu.Hello]$ flatpak remotes
Name    Options
fedora  system,oci
flathub system
[bitwalk@silverblue org.gnu.Hello]$ flatpak --user remote-add --no-gpg-verify bitwalk $HOME/repo
[bitwalk@silverblue org.gnu.Hello]$ flatpak remotes
Name    Options
fedora  system,oci
flathub system
bitwalk user,no-gpg-verify
[bitwalk@silverblue org.gnu.Hello]$ 

アプリのデプロイ(インストール)と実行結果

ビルドした org.gnu.Hello をインストール(デプロイ)します。

[bitwalk@silverblue org.gnu.Hello]$ flatpak --user install bitwalk org.gnu.Hello
Looking for matches…


        ID                            Branch          Op         Remote          Download
 1. [✓] org.gnu.Hello.Locale          master          i          bitwalk         1.0 kB / 52.9 kB
 2. [✓] org.gnu.Hello                 master          i          bitwalk         1.0 kB / 25.0 kB

Installation complete.
[bitwalk@silverblue org.gnu.Hello]$ flatpak list --user
Name       Application ID      Version     Branch
Hello      org.gnu.Hello                   master
[bitwalk@silverblue org.gnu.Hello]$ 

実行してみるとビックリです。メッセージがローカライズされています。

[bitwalk@silverblue org.gnu.Hello]$ flatpak run org.gnu.Hello
世界よ、こんにちは!
[bitwalk@silverblue org.gnu.Hello]$ 

世界よ、ですか、なるほど…。🤔

[参考]フツーにビルドしてみた

hello-2.10.tar.gz を解凍して、フツーにビルドしてみました。

上記 Fedora Siliverblue では、通常の開発環境を利用できないので、GNU Autotools などの開発環境を揃えている下記の環境を使っています。

Fedora Workstation 32 x86_64

https://ftp.gnu.org/gnu/hello/ から tar zxvf hello-2.10.tar.gz をダウンロードして解凍します。

[bitwalk@fedora-pc ダウンロード]$ tar zxvf hello-2.10.tar.gz
hello-2.10/
hello-2.10/COPYING
...
(途中省略)
...
hello-2.10/contrib/de_franconian_po.txt
[bitwalk@fedora-pc ダウンロード]$ 

configure を実行して、Makefile を生成します。

[bitwalk@fedora-pc ダウンロード]$ cd hello-2.10
[bitwalk@fedora-pc hello-2.10]$ ls
ABOUT-NLS  ChangeLog    INSTALL      NEWS        README-release  aclocal.m4  configure     doc      m4        po
AUTHORS    ChangeLog.O  Makefile.am  README      THANKS          build-aux   configure.ac  hello.1  maint.mk  src
COPYING    GNUmakefile  Makefile.in  README-dev  TODO            config.in   contrib       lib      man       tests
[bitwalk@fedora-pc hello-2.10]$ ./configure
checking for a BSD-compatible install... /usr/bin/install -c
...
(途中省略)
...
configure: creating ./config.status
config.status: creating Makefile
config.status: creating po/Makefile.in
config.status: creating config.h
config.status: executing depfiles commands
config.status: executing po-directories commands
config.status: creating po/POTFILES
config.status: creating po/Makefile
[bitwalk@fedora-pc hello-2.10]$ 

make とタイプして Makefile に沿ったビルドをします。

[bitwalk@fedora-pc hello-2.10]$ make
rm -f lib/configmake.h-t && \
{ echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
...
(途中省略)
...
mv lib/wctype.h-t lib/wctype.h
make  all-recursive
make[1]: Entering directory '/home/bitwalk/ダウンロード/hello-2.10'
Making all in po
make[2]: Entering directory '/home/bitwalk/ダウンロード/hello-2.10/po'
...
(途中省略)
...
depbase=`echo src/hello.o | sed 's|[^/]*$|.deps/&|;s|\.o$||'`;\
gcc -DLOCALEDIR=\"/usr/local/share/locale\" -DHAVE_CONFIG_H -I.  -Ilib -I./lib -Isrc -I./src   -g -O2 -MT src/hello.o -MD -MP -MF $depbase.Tpo -c -o src/hello.o src/hello.c &&\
mv -f $depbase.Tpo $depbase.Po
gcc  -g -O2   -o hello src/hello.o  ./lib/libhello.a 
rm -f lib/charset.alias-t lib/charset.alias && \
/bin/sh ./lib/config.charset 'x86_64-unknown-linux-gnu' > lib/charset.alias-t && \
mv lib/charset.alias-t lib/charset.alias
rm -f lib/ref-add.sed-t lib/ref-add.sed && \
sed -e '/^#/d' -e 's/@''PACKAGE''@/hello/g' lib/ref-add.sin > lib/ref-add.sed-t && \
mv lib/ref-add.sed-t lib/ref-add.sed
rm -f lib/ref-del.sed-t lib/ref-del.sed && \
sed -e '/^#/d' -e 's/@''PACKAGE''@/hello/g' lib/ref-del.sin > lib/ref-del.sed-t && \
mv lib/ref-del.sed-t lib/ref-del.sed
make[2]: Leaving directory '/home/bitwalk/ダウンロード/hello-2.10'
make[1]: Leaving directory '/home/bitwalk/ダウンロード/hello-2.10'
[bitwalk@fedora-pc hello-2.10]$ 

ここでは、実際に実機のシステムツリー内にインストールするのではなく、パッケージの配布用として DESTDIR にインストール先のルートディレクトリを指定した上で、make install コマンドでインストールします。

[bitwalk@fedora-pc hello-2.10]$ make DESTDIR=$HOME/test install
make  install-recursive
make[1]: Entering directory '/home/bitwalk/ダウンロード/hello-2.10'
Making install in po
make[2]: Entering directory '/home/bitwalk/ダウンロード/hello-2.10/po'
installing bg.gmo as /home/bitwalk/test/usr/local/share/locale/bg/LC_MESSAGES/hello.mo
...
(途中省略)
...
 /usr/bin/mkdir -p '/home/bitwalk/test/usr/local/share/info'
 /usr/bin/install -c -m 644 ./doc/hello.info '/home/bitwalk/test/usr/local/share/info'
 /usr/bin/mkdir -p '/home/bitwalk/test/usr/local/share/man/man1'
 /usr/bin/install -c -m 644 hello.1 '/home/bitwalk/test/usr/local/share/man/man1'
make[3]: Leaving directory '/home/bitwalk/ダウンロード/hello-2.10'
make[2]: Leaving directory '/home/bitwalk/ダウンロード/hello-2.10'
make[1]: Leaving directory '/home/bitwalk/ダウンロード/hello-2.10'
[bitwalk@fedora-pc hello-2.10]$ 

tree コマンドでインストール先を確認しました。

[bitwalk@fedora-pc hello-2.10]$ tree $HOME/test
/home/bitwalk/test
└── usr
    └── local
        ├── bin
        │   └── hello
        └── share
            ├── info
            │   └── hello.info
            ├── locale
            │   ├── bg
            │   │   └── LC_MESSAGES
            │   │       └── hello.mo
...
(途中省略)
...
            │   ├── ja
            │   │   └── LC_MESSAGES
            │   │       └── hello.mo
...
(途中省略)
...
            │   └── zh_TW
            │       └── LC_MESSAGES
            │           └── hello.mo
            └── man
                └── man1
                    └── hello.1

92 directories, 45 files
[bitwalk@fedora-pc hello-2.10]$ 

参考サイト

  1. bitWalk's: はじめての Flatpak パッケージ作成 [2020-08-08]
  2. How to build a Flatpak | Opensource.com

ブログランキング・にほんブログ村へ
にほんブログ村