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

2021-05-05

Fedora Silverblue と Toolbox (2)

2014年に Red Hat 社が発表した Project Atomic [1] は、コンテナ向け OS を開発する取り組みでしたが、2018 年に CoreOS を買収したことでプロジェクト名が Fedora CoreOS へと変わりました [2]。デスクトップ用途の OS への応用として公開された Fedora Atomic Workstation は、Fedora Silverblue とブランド名を変えて Fedora 29(2018 年 10 月 30 日リリース)から Fedora Workstation の変種 (varianbt) として加えられました。

Fedora Silverblue は immutable(変更されない = read only)なデスクトップ用途の OS で、コンテナを中心としたワークフローのサポートを目的としています。Fedora Silverbllue は下記の構成になっています。

  • rpm-ostree
    • OSTree は、ファイルシステムツリー(= OS 環境)を管理するツールです。このファイルシステムは起動可能で immutable(変更されない = read only)です。ファイルシステムツリーのイメージは Git のような使い方でバージョン管理をすることができます。
    • OSTree と、rpm によるパッケージ管理機能を組み合わせたシステムが rpm-ostree です。rpm-ostree は OSTree による OS イメージの管理と rpm によるパッケージ管理を併せ持つので、ハイブリッドシステムと呼ばれています。
  • Flatpak
    • Flatpak とは、Linux デスクトップ向けのソフトウェアデプロイメント・パッケージ管理・アプリケーション仮想化(アプリケーション・コンテナ)を行うユーティリティです。
  • Toolbox
    • Fedora Toolbox は開発者のためにユーザーアカウント単位でコンテナ環境を提供するコマンドラインツールです。

Fedora Silverblue および rpm-ostree については、本ブログで既に紹介しています [3]。Fedora Silverblue は Fedora Workstation の未来だと考えて動向をウォッチしていますが、現時点では正式な Fedora のエディションにはなっていません。次期 Fedora 35 の ChangeSet が出来つつありますが、現時点では Fedora Silverblue に関連するような記述はありません。

Toolbox についても、過去記事 [4] で詳しく紹介しました。なお、rpm-ostree 以外、Flatpak と Toolbox は、他の Fedora でも利用できます。

今回のトピックは Toolbox を使って RHEL のコンテナイメージを扱う方法の紹介です。動作環境は下記の通りです。

Fedora Silverblue 34 x86_64
- toolbox-0.0.99.1-1
Fedora Silverblue 34 のデスクトップ画面

今回は Fedora Silverblue で Toolbox を使っていますが、Fedora Workstation / Server でも Toolbox を利用できます。

Toolbox で RHEL コンテナを扱う

4 月 27 日に Fedora 34 がリリースされたと同時に、Fedora Magazine のサイトで下記の記事が掲載されました。

Toolbox のセクションで Fedora 上に RHEL 環境を作成する方法が紹介されていましたので、早速、確認してみました。そろそろ RHEL 8.4 がリリースされる時期ですが、ブログ執筆時点ではまだリリースされていないので、RHEL 8.3 のコンテナを読み込んでみます。

[bitwalk@silverblue ~]$ toolbox create --distro rhel --release 8.3
Image required to create toolbox container.
Download registry.access.redhat.com/ubi8/ubi:8.3 (500MB)? [y/N]: y
Created container: rhel-toolbox-8.3
Enter with: toolbox enter rhel-toolbox-8.3
[bitwalk@silverblue ~]$ toolbox list
CONTAINER ID  CONTAINER NAME    CREATED            STATUS   IMAGE NAME
13919c108d2a  rhel-toolbox-8.3  About an hour ago  running  registry.access.redhat.com/ubi8/ubi:8.3
[bitwalk@silverblue ~]$ 

以下のようにして RHEL 8.3 のコンテナに入ります。

[bitwalk@silverblue ~]$ toolbox enter rhel-toolbox-8.3

Welcome to the Toolbox; a container where you can install and run
all your tools.

 - Use DNF in the usual manner to install command line tools.
 - To create a new tools container, run 'toolbox create'.

For more information, see the documentation.

[bitwalk@toolbox ~]$ 

行の先頭の は、Toolbox のコンテナ内であることを示しています。

デフォルトでは、ルート権限が必要な時に sudo が使えないので su(パスワード無し)でルートになります。

[bitwalk@toolbox ~]$ su

Welcome to the Toolbox; a container where you can install and run
all your tools.

 - Use DNF in the usual manner to install command line tools.
 - To create a new tools container, run 'toolbox create'.

For more information, see the documentation.

[root@toolbox bitwalk]# 

試しになにかパッケージをインストールしてみます。

[root@toolbox bitwalk]# dnf install redhat-lsb-core
Failed to set locale, defaulting to C.UTF-8
Updating Subscription Management repositories.
Unable to read consumer identity

This system is not registered to Red Hat Subscription Management. You can use subscription-manager to register.

Last metadata expiration check: 0:02:48 ago on Wed May  5 19:43:43 2021.
Dependencies resolved.
================================================================================
 Package                   Arch   Version                 Repository       Size
================================================================================
Installing:
 redhat-lsb-core           x86_64 4.1-47.el8              ubi-8-appstream  45 k
Installing dependencies:
 at                        x86_64 3.1.20-11.el8           ubi-8-baseos     81 k
 avahi-libs                x86_64 0.7-19.el8              ubi-8-baseos     63 k
   :
   :
 util-linux-user           x86_64 2.32.1-24.el8           ubi-8-baseos     99 k

Transaction Summary
================================================================================
Install  43 Packages

Total download size: 26 M
Installed size: 90 M
Is this ok [y/N]: y
Downloading Packages:
(1/43): patch-2.7.6-11.el8.x86_64.rpm           648 kB/s | 138 kB     00:00    
(2/43): cronie-1.5.2-4.el8.x86_64.rpm           503 kB/s | 119 kB     00:00    
   :
   :
(43/43): cups-client-2.2.6-38.el8.x86_64.rpm    129 kB/s | 169 kB     00:01    
--------------------------------------------------------------------------------
Total                                           2.3 MB/s |  26 MB     00:11     
Running transaction check
Transaction check succeeded.
Running transaction test
Transaction test succeeded.
Running transaction
  Preparing        :                                                        1/1 
  Installing       : nspr-4.25.0-2.el8_2.x86_64                            1/43 
  Running scriptlet: nspr-4.25.0-2.el8_2.x86_64                            1/43 
  Installing       : nss-util-3.53.1-17.el8_3.x86_64                       2/43 
   :
   :
  Verifying        : nss-3.53.1-17.el8_3.x86_64                           43/43 
Installed products updated.

Installed:
  at-3.1.20-11.el8.x86_64                                                       
  avahi-libs-0.7-19.el8.x86_64                                                  
   :
   :
  util-linux-user-2.32.1-24.el8.x86_64                                          

Complete!
[root@toolbox bitwalk]# exit
exit
[bitwalk@toolbox ~]$ lsb_release -a
LSB Version:	:core-4.1-amd64:core-4.1-noarch
Distributor ID:	RedHatEnterprise
Description:	Red Hat Enterprise Linux release 8.3 (Ootpa)
Release:	8.3
Codename:	Ootpa
[bitwalk@toolbox ~]$ 

パッケージのインストールはできますが、登録されていない旨のメッセージが表示されていますので、セキュリティなどパッケージの更新をするにはサブスクリプションの登録が必要になるようです。自分の場合、Red Hat Developer Subscription for Individuals のサブスクリプションを利用していますが、Toolbox の使い捨てコンテナで作業する分には、面倒なので登録しません。

RHEL で使用する予定のソフトウェアを Fedora 上で開発、あるいは RHEL で動作するかの動作検証をしたい場合に便利です。

Toolbox コマンド

Toolbox のコマンドの概略をまとめました。正式リリースまでまだまだ長い Toolbox のバージョン 0.0.99 ですが、それでもいつの間にかコマンドオプションが増えています。Docker のコマンドを使ったことがあれば容易に理解できると思います。

Toolbox コマンド概略
コマンド 説  明
toolbox create [--distro DISTRO | -d DISTRO] [--image NAME | -i NAME] [--release RELEASE | -r RELEASE] [CONTAINER]
  ツールボックスコンテナを作成します。デフォルトでは、ホストのバージョンと同じ Fedora のイメージをダウンロードします。オプションなしで使用すると、toolbox create は自動的に作成するコンテナに名前を付けます。
toolbox enter [--distro DISTRO | -d DISTRO] [--release RELEASE | -r RELEASE] [CONTAINER]
  toolbox のコンテナを対話的に使用するために入ります。オプションを指定せずに使用すると、デフォルトのコンテナを開きます。
toolbox run [--container NAME | -c NAME] [--distro DISTRO | -d DISTRO] [--release RELEASE | -r RELEASE] [COMMAND]
  toolbox のコンテナに入らずにコマンドを実行します。オプションなしで使用すると、デフォルトのコンテナに対してコマンドを実行します。
toolbox list [--containers | -c] [--images | -i]
  ローカルにある toolbox のイメージとコンテナの一覧を表示します。
toolbox rm [--all] [--force] [CONTAINER...]
  toolbox のコンテナを削除します。--force オプションを付けると、実行中であってもコンテナを削除します。
toolbox rmi [--all] [--force] [IMAGE...]
  toolbox のイメージを削除します。
toolbox init-container --home HOME --home-link --media-link --mnt-link --monitor-host --shell SHELL --uid UID --user USER
  新たに作成した実行中のコンテナを初期化します。
toolbox help [COMMAND]
  コマンドのヘルプを表示します。

参考サイト

  1. An overview of Project Atomic [LWN.net] [2018-02-21]
  2. Container Linuxの後継となる新たなコンテナ向けOS「Fedora CoreOS」 | さくらのナレッジ [2020-01-09]
  3. bitWalk's: Linux ディストロ探訪(10) 〜 Fedora Silverblue 〜 [2019-11-24]
  4. bitWalk's: Fedora Silverblue と Toolbox [2020-11-03]

 

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

2020-11-20

Toolbox で Debian のコンテナイメージを利用

本ブログの過去記事 [1] において、Endless OS で Fedora Toolbox が利用できることを紹介しました。Fedora Toolbox は、開発者のためにユーザーアカウント単位でコンテナ環境を提供するコマンドラインツールです。残念なことに、Debian 派生の Endless OS であるのに、収録されている Toolbox で利用できるデフォルトのコンテナは古い Fedora のイメージになっています。できれば Endless OS のコンテナイメージを利用したいところなのですが公開されていません。せめて Debian のイメージを利用したいところです。

Endless OS 3.9 のデスクトップ画面

Fedora Toolbox は OCI の仕様に準拠したコンテナイメージを利用できることになっています。しかし Debian の Docker イメージを利用しようとしたところ、Toolbox の既知の問題に手こずったので、備忘録としてまとめました。

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

Endless OS 3.9.0 x86_64
 » toolbox 0.0.13-1endless2bem1

Toolbox で Debian のコンテナイメージを読み込む

デフォルトは Fedora 29

コンテナイメージを指定しないで作成すると、デフォルトのイメージである Fedora 29 がダウンロードされます。

bitwalk@endless:~$ toolbox create
Image required to create toolbox container.
Download registry.fedoraproject.org/f29/fedora-toolbox:29 (500MB)? [y/N]: y
Created container: fedora-toolbox-29
Enter with: toolbox enter
bitwalk@endless:~$ 

最後のメッセージの通りにタイプするとコンテナに入ります。

bitwalk@endless:~$ toolbox enter

Welcome to the Toolbox; a container where you can install and run
all your tools.

 - To create a new tools container, run 'toolbox create'.

bitwalk@toolbox:~$ 

コンテナから抜けるには exit とタイプします。

bitwalk@toolbox:~$ exit
logout
bitwalk@endless:~$ 

toolbox list で確認すると、ダウンロードしたイメージと起動しているコンテナを確認できます。

bitwalk@endless:~$ toolbox list
Images created by toolbox
IMAGE ID      IMAGE NAME                                        CREATED
4a6adf1f2a96  registry.fedoraproject.org/f29/fedora-toolbox:29  12 months ago
Containers created by toolbox
CONTAINER ID  CONTAINER NAME     CREATED         STATUS             IMAGE NAME
d71cad18afc0  fedora-toolbox-29  57 seconds ago  Up 45 seconds ago  registry.fedoraproject.org/f29/fedora-toolbox:29

指定した OCI コンテナの使用(マニュアル通りのやり方)

Docker の Debian イメージをダウンロードするには、例えば以下のようにします。

bitwalk@endless:~$ toolbox create -c sid --image docker.io/debian:sid
Image required to create toolbox container.
Download docker.io/debian:sid (500MB)? [y/N]: y
Created container: sid
Enter with: toolbox enter --container sid
bitwalk@endless:~$ 

イメージをダウンロードして、一見デフォルトと同じに動いているようですが…、コンテナに入れません。

bitwalk@endless:~$ toolbox enter --container sid
bitwalk@endless:~$

toolbox list で確認すると、コンテナだけ確認できますが起動していません。

bitwalk@endless:~$ toolbox list
Containers created by toolbox
CONTAINER ID  CONTAINER NAME  CREATED         STATUS                     IMAGE NAME
7ac8f5b0bfea  sid             32 seconds ago  Exited (1) 16 seconds ago  docker.io/library/debian:sid
bitwalk@endless:~$

参考サイト [2] によると、どうやら Toolbox 側の問題のようです。このサイトで示されている解決方法は、本ブログ記事を書いている時点では再現できなかったので他の方法を試しました。

Toolbox 用のコンテナイメージを Podman で準備

参考サイト [3] の方法でうまくいきましたので、この方法を紹介します。

Podman を使ってローカルでビルドしたイメージを Toolbox に使用する方法です。Podman はデーモンを使いませんが、コマンドは Docker と同じです。詳細は参考サイト [4] をご覧になってください。

Dockerfile は日本語環境を考慮して下記のようにしました。

Dockerfile

次のようにしてビルドします。

bitwalk@endless:~$ podman build -t debian-toolbox -f Dockerfile
STEP 1: FROM docker.io/library/debian:unstable
Getting image source signatures
Copying blob 2422b4e1b957 done
Copying config 782bdf782a done
Writing manifest to image destination
Storing signatures
STEP 2: ENV NAME=debian-toolbox VERSION=unstable
...
(途中省略)
...
STEP 16: CMD /bin/sh
STEP 17: COMMIT debian-toolbox
6227795b04f6567a210b9684db4539553117178b61cde8ca1aa27526877d429c
bitwalk@endless:~$ podman images
REPOSITORY                 TAG        IMAGE ID       CREATED         SIZE
localhost/debian-toolbox   latest     6227795b04f6   2 minutes ago   185 MB
docker.io/library/debian   unstable   782bdf782a6a   2 days ago      132 MB
bitwalk@endless:~$ 

ビルドしたローカルのイメージから toolbox create コマンドでコンテナを生成します。toolbox list コマンドでコンテナが生成されていることを確認します。

bitwalk@endless:~$ toolbox create -i localhost/debian-toolbox:latest
Created container: debian-toolbox-latest
Enter with: toolbox enter --container debian-toolbox-latest
bitwalk@endless:~$ toolbox list
Images created by toolbox
IMAGE ID      IMAGE NAME                       CREATED
6227795b04f6  localhost/debian-toolbox:latest  9 minutes ago
Containers created by toolbox
CONTAINER ID  CONTAINER NAME         CREATED             STATUS   IMAGE NAME
11e287f6d185  debian-toolbox-latest  About a minute ago  Created  localhost/debian-toolbox:latest

toolbox create コマンドを実行したときに出力された上記メッセージに従ってコンテナに入ります。

bitwalk@endless:~$ toolbox enter --container debian-toolbox-latest
bitwalk@toolbox:~$ ls
Dockerfile  ダウンロード  ドキュメント  ビデオ  ピクチャ  ミュージック
bitwalk@toolbox:~$

Fedora Silverblue 33 の場合

ちなみに、Fedora Silverblue 33 で Debian を利用する場合はどうか、同じように確認しました。

Fedora Silverblue 33 のデスクトップ画面

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

Fedora Silverblue 33 x86_64
 » toolbox-0.0.97-1.fc33.x86_64

以下のように、マニュアル通りのやり方で Debian の Docker イメージを持ってきてコンテナを利用することができました。toolbox のバージョンが上がっているので、Endless OS に収録されている Toolbox にあった問題は既に対処されているようです。

[bitwalk@localhost ~]$ toolbox create -c sid --image docker.io/debian:sid
Image required to create toolbox container.
Download docker.io/debian:sid (500MB)? [y/N]: y
Created container: sid
Enter with: toolbox enter sid
[bitwalk@localhost ~]$ toolbox enter sid
⬢[bitwalk@toolbox ~]$ ls
''$'\343\203\200\343\202\246\343\203\263\343\203\255\343\203\274\343\203\211'
''$'\343\203\206\343\203\263\343\203\227\343\203\254\343\203\274\343\203\210'
''$'\343\203\207\343\202\271\343\202\257\343\203\210\343\203\203\343\203\227'
''$'\343\203\211\343\202\255\343\203\245\343\203\241\343\203\263\343\203\210'
''$'\343\203\223\343\203\207\343\202\252'
''$'\345\205\254\351\226\213'
''$'\347\224\273\345\203\217'
''$'\351\237\263\346\245\275'
⬢[bitwalk@toolbox ~]$ exit
logout
[bitwalk@localhost ~]$

ただし、ロケール関係の設定がされておらず文字化けするので追加の設定が必要になります。

まとめ

Ensless OS に収録されている toolbox が古いバージョンで不具合があったため、却っていろいろ調べることができました。😅

参考サイト

  1. bitWalk's: Endless OS と Toolbox [2020-11-19]
  2. Setting up Debian containers on Fedora Silverblue - Base-Art [2020-06-13]
  3. A quick guide to podman and toolbox in Debian (and maybe Ubuntu) - DEV [2020-02-02]
  4. DockerユーザーのためのPodmanとBuildahの紹介 - 赤帽エンジニアブログ [2020-07-16]

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

2020-11-19

Endless OS と Toolbox

Endless OS 3.9.0 が 11 月 9 日にリリースされました [1]。Endless OS は Debian から派生した Linux ディストリビューションですが、他の多くの ディストリビューションと異なり、システムは OSTree で、アプリケーションは Flatpak で管理されます。

今回のリリースがどんなものか確認するため、仮想マシン (GNOME Boxes) にインストールしました。

Endless OS 3.9 のデスクトップ画面

Endless OS のインストールについては、本ブログの過去記事 [2] を参照してください。

OSTree と dpkg

OSTree は OS のファイルシステムツリーを管理するツールで、ファイルシステムツリーのイメージを Git のような使い方でバージョン管理をすることができます。そのため、Endless OS が Debian から派生したディストロだからと言っても、Debian の deb 形式のパッケージを扱えるとは夢にも思わず、コマンドを試してみたこともありませんでした。

今回、念のため試してみたら出来ました! dpkg コマンドも apt コマンドも存在していたのです。😮

物は試しと、使いそうもないフォントを選んで apt コマンドで削除したり、新しいフォントをインストールしようとしましたが、immutable な OS ですから、それはさすがにできませんでした。

bitwalk@endless:~$ dpkg -l | grep font
ii  eos-extra-fonts                       1.4.0+dev201.9b4afab-23bem1                 amd64        extra fonts for EndlessOS
ii  fontconfig                            2.13.1-2endless1bem1                        amd64        generic font configuration library - support binaries
...
(途中省略)
...
ii  fonts-thai-tlwg                       1:0.7.1-1bem1                               all          Thai fonts maintained by TLWG (metapackage)
ii  fonts-tlwg-garuda                     1:0.7.1-1bem1                               all          Thai Garuda font (dependency package)
ii  fonts-tlwg-garuda-ttf                 1:0.7.1-1bem1                               all          Thai Garuda TrueType font
...
(途中省略)
...
ii  ttf-femkeklaver                       1.0-1build1bem2                             all          simple handwriting font
bitwalk@endless:~$ apt remove fonts-tlwg-garuda
E: ロックファイル /var/lib/dpkg/lock-frontend をオープンできません - open (13: 許可がありません)
E: Unable to acquire the dpkg frontend lock (/var/lib/dpkg/lock-frontend), are you root?
bitwalk@endless:~$ sudo apt remove fonts-tlwg-garuda
[sudo] bitwalk のパスワード:
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています... 完了
以下のパッケージは「削除」されます:
  eos-core eos-core-amd64 fonts-thai-tlwg fonts-tlwg-garuda
アップグレード: 0 個、新規インストール: 0 個、削除: 4 個、保留: 0 個。
この操作後に 182 kB のディスク容量が解放されます。
W: 読み込み専用のロックファイル /var/lib/dpkg/lock-frontend にロックは使用しません
W: 読み込み専用のロックファイル /var/lib/dpkg/lock にロックは使用しません
続行しますか? [Y/n] y
dpkg: エラー: unable to access the dpkg database directory /var/lib/dpkg: 読み込み専用ファイルシステムです
E: 子プロセス dpkg --set-selections がエラーコード (2) を返しました
E: Couldn't record the approved state changes as dpkg selection states
bitwalk@endless:~$ cd ダウンロード
bitwalk@endless:~/ダウンロード$ sudo apt install ./fonts-ubuntu_0.83-4_all.deb
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています
状態情報を読み取っています... 完了
注意、'./fonts-ubuntu_0.83-4_all.deb' の代わりに 'fonts-ubuntu' を選択します
以下のパッケージが新たにインストールされます:
  fonts-ubuntu
アップグレード: 0 個、新規インストール: 1 個、削除: 0 個、保留: 0 個。
1,397 kB 中 0 B のアーカイブを取得する必要があります。
この操作後に追加で 4,201 kB のディスク容量が消費されます。
取得:1 /sysroot/home/bitwalk/ダウンロード/fonts-ubuntu_0.83-4_all.deb fonts-ubuntu all 0.83-4 [1,397 kB]
dpkg: エラー: unable to access the dpkg database directory /var/lib/dpkg: 読み込み専用ファイルシステムです
W: 読み込み専用のロックファイル /var/lib/dpkg/lock-frontend にロックは使用しません
W: 読み込み専用のロックファイル /var/lib/dpkg/lock にロックは使用しません
N: ファイル '/sysroot/home/bitwalk/ダウンロード/fonts-ubuntu_0.83-4_all.deb' がユーザ '_apt' からアクセスできないため、 ダウンロードは root でサンドボックスを通さずに行われます。 - pkgAcquire::Run (13: 許可がありません)
E: Sub-process /usr/bin/dpkg returned an error code (2)
bitwalk@endless:~/ダウンロード$bitwalk@endless:~$

ただ、元の OS の構成は deb パッケージで組まれているということを確認できました。

Toolbox

ひょっとして Toolbox も Fedora と同様に使えるのかと思い確認したところ、こちらもありました。😮

toolbox create で作成されるデフォルトのコンテナは、ちょっと古い Fedora のイメージですが、これで開発環境を揃えられます。

bitwalk@endless:~$ dpkg -l | grep toolbox
ii  toolbox                               0.0.13-1endless2bem1                        amd64        Unprivileged development environment
bitwalk@endless:~$ toolbox create
Image required to create toolbox container.
Download registry.fedoraproject.org/f29/fedora-toolbox:29 (500MB)? [y/N]: y
Created container: fedora-toolbox-29
Enter with: toolbox enter
bitwalk@endless:~$ toolbox enter

Welcome to the Toolbox; a container where you can install and run
all your tools.

 - To create a new tools container, run 'toolbox create'.

bitwalk@toolbox:~$ 
bitwalk@toolbox:~$ sudo dnf update

We trust you have received the usual lecture from the local System
Administrator. It usually boils down to these three things:

    #1) Respect the privacy of others.
    #2) Think before you type.
    #3) With great power comes great responsibility.

Failed to set locale, defaulting to C.UTF-8
Fedora Modular 29 - x86_64                      308 kB/s | 1.5 MB     00:04
Fedora Modular 29 - x86_64 - Updates            425 kB/s | 2.1 MB     00:05
Fedora 29 - x86_64 - Updates                    2.2 MB/s |  30 MB     00:13
Fedora 29 - x86_64                              3.0 MB/s |  62 MB     00:21
Last metadata expiration check: 0:00:01 ago on Thu Nov 19 10:14:34 2020.
Dependencies resolved.
================================================================================
 Package                   Arch   Version                         Repo     Size
================================================================================
...
(途中省略)
...

Complete!
bitwalk@toolbox:~$

Toolbox については、本ブログの過去記事 [3] を参照してください。

まとめ

OSTree を利用した immutable な OS は、まだマイナーかもしれませんが、なにしろ書き換えができない OS なのですから、今後、強固なセキュリティを誇る OS として普及していくことが予想されます。個人的には、思うように開発環境を準備できなければ面白くないと思っていましたが、Toolbox の利用でそれも解消です。

Debian ベースの OS 上で Fedora の開発環境を作るのはなんだか変な感じです。ただ、あくまでもデフォルトで Fedora のコンテナが使われるだけで、Debian のイメージも利用できるようです [4]

参考サイト

  1. Release | Endless OS 3.9.0 - english / releases - Endless Community [2020-11-09]
  2. bitWalk's: Linux ディストロ探訪(13) 〜 Endless OS 〜 [2020-04-11]
  3. bitWalk's: Fedora Silverblue と Toolbox [2020-11-03]
  4. Setting up Debian containers on Fedora Silverblue - Base-Art [2020-06-13]

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

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

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