ずっと前に、Linuxディストリビューションはすべてと一緒にオペレーティングシステムを出荷していました そのために利用可能なソフトウェア。すべてが配布の一部であったため、「サードパーティ」ソフトウェアの概念はありませんでした。アプリケーションは、多くのフロッピーディスクのいずれか、または後で購入またはダウンロードしたCDに保存された、非常に大きなソフトウェアリポジトリから有効化されたため、あまりインストールされていませんでした。
インターネットが普及するにつれ、これはさらに便利なものへと進化し、現在の「アプリストア」のコンセプトが生まれました。もちろん、Linuxディストリビューションはこれをソフトウェアリポジトリと呼ぶ傾向があります。 または単にレポ 略して、 Ubuntu Software Center など、「ブランディング」のバリエーションがいくつかあります。 または、典型的なGNOMEミニマリズムでは、単にソフトウェア 。
このモデルは、オープンソースソフトウェアがまだ目新しいものであり、オープンソースアプリケーションの数が理論的ではなく数であったときに、うまく機能しました。 番号。今日のGitLab、GitHub、Bitbucket(およびその他多数)の世界では、オープンソースプロジェクトの数を数えることはほとんど不可能であり、リポジトリにパッケージ化することははるかに困難です。今日のLinuxディストリビューションは、Debianとその手ごわいパッケージメンテナのグループでさえ、インストール可能なすべてのオープンソースプロジェクトのパッケージを要求したり期待したりすることはできません。
もちろん、Linuxパッケージをインストールできるようにするためにリポジトリにある必要はありません。すべてのプログラマーは、ソフトウェアをパッケージ化して、自分のWebサイトから配布できます。ただし、リポジトリはディストリビューションの不可欠な部分と見なされているため、ユニバーサルパッケージ形式はありません。つまり、プログラマーは .deb
をリリースするかどうかを決定する必要があります。 または.rpm
、またはAURビルドスクリプト、またはNixまたはGuixパッケージ、またはHomebrewスクリプト、またはほとんど一般的な .tgz
/ opt
のアーカイブ 。 Linuxを毎日生きて呼吸している開発者にとっては圧倒的であり、無料のオープンソースターゲットをサポートするために最善を尽くそうとしている開発者にとっては圧倒的です。
Flatpakプロジェクトは、分散型の配布手段に加えて、移植性とサンドボックス化に加えて、ユニバーサルパッケージ形式を提供します。
- ユニバーサル Flatpakシステムをインストールすると、ディストリビューションに関係なくFlatpaksを実行できます。デーモンやsystemdは必要ありません。同じFlatpakがFedora、Ubuntu、Mageia、Pop OS、Arch、Slackwareなどで動作します。
- 分散型 開発者は、独自のFlatpakパッケージとリポジトリを作成して署名できます。パッケージを含めるために請願するためのリポジトリはありません。
- 移植性 システムにFlatpakがあり、同じアプリケーションを実行できるように友人に渡したい場合は、FlatpakをUSBサムドライブにエクスポートできます。
- サンドボックス化 Flatpaksはコンテナベースのモデルを使用しており、1つのシステムに複数のバージョンのライブラリとアプリケーションを存在させることができます。はい。信頼できる古いバージョンを維持しながら、アプリの最新バージョンを簡単にインストールしてテストできます。
Flatpakをビルドするには、最初にFlatpak(Flatpakパッケージを使用できるようにするサブシステム)とFlatpakビルダーアプリケーションをインストールする必要があります。
Fedora、CentOS、RHELなどの場合:
$ sudo dnf install flatpak flatpak-builder
Debian、Ubuntuなどの場合:
$ sudo apt install flatpak flatpak-builder
パッケージ化するアプリケーションのビルドに必要な開発ツールもインストールする必要があります。現在パッケージ化しているアプリケーションの開発の性質上、すでに開発環境がインストールされている可能性があるため、これらのコンポーネントが必要であることに気付かない場合がありますが、Jenkinsを使用して、またはコンテナー内からFlatpaksの構築を開始する場合は、次のことを確認する必要があります。ビルドツールはツールチェーンの一部です。
最初のビルド例では、この記事ではアプリケーションがGNU Autotoolsを使用していることを前提としていますが、Flatpak自体は cmake
などの他のビルドシステムをサポートしています。 、 cmake-ninja
、 meson
、 ant
、およびカスタムコマンド( simple
Flatpakの用語ではビルドシステムですが、これはビルド自体が実際に単純であることを意味するものではありません。
厳密なRPMビルドインフラストラクチャとは異なり、Flatpakはプロジェクトディレクトリ構造を強制しません。 距離に基づいてプロジェクトディレクトリを作成することを好みます ソフトウェアのパッケージですが、代わりにFlatpakビルドプロセスをソースディレクトリに統合できない技術的な理由はありません。 距離からFlatpakを構築する方が技術的に簡単です ただし、パッケージであり、デモも簡単なので、この記事で使用するモデルです。最初のFlatpakとして機能するGNUHelloのプロジェクトディレクトリを設定します:
$ mkdir hello_flatpak
$ mkdir src
配布可能なソースをダウンロードします。この例では、ソースコードは https://ftp.gnu.org/gnu/hello/hello-2.10.tar.gz
にあります。 。
$ cd hello_flatpak
$ wget https://ftp.gnu.org/gnu/hello/hello-2.10.tar.gz
Linuxターミナル
- Linux用の上位7つのターミナルエミュレータ
- Linuxでのデータ分析のための10個のコマンドラインツール
- 今すぐダウンロード:SSHチートシート
- 高度なLinuxコマンドのチートシート
- Linuxコマンドラインチュートリアル
Flatpakは、提供するアプリケーションをビルドおよびインストールする方法を説明するマニフェストによって定義されます。マニフェストはアトミックで再現性があります。ただし、Flatpakは「サンドボックス」コンテナに存在するため、マニフェストは、ルートディレクトリが / app
を呼び出すほとんど空の環境に基づいています。 。
最初の2つの属性は、パッケージ化するアプリケーションのIDとそれによって提供されるコマンドです。アプリケーションIDは、パッケージ化するアプリケーションに固有である必要があります。一意のIDを作成する標準的な方法は、コードを担当するエンティティと、それに続く org.gnu.Hello
などのアプリケーション名で構成されるトリプレット値を使用することです。 。アプリケーションによって提供されるコマンドは、アプリケーションを実行するために端末に入力するものです。これは、アプリケーションが .desktop
ではなくターミナルから実行されることを意図していることを意味するものではありません。 [アクティビティ]または[アプリケーション]メニューのファイル。
org.gnu.Hello.yaml
というファイル内 、次のテキストを入力してください:
id: org.gnu.Hello
command: hello
マニフェストはYAMLまたはJSONで記述できます。この記事ではYAMLを使用しています。
次に、このFlatpakパッケージによって提供される各「モジュール」を定義する必要があります。モジュールは、依存関係またはコンポーネントと考えることができます。 GNU Helloの場合、モジュールはGNUHelloの1つだけです。より複雑なアプリケーションでは、特定のライブラリまたは別のアプリケーションが完全に必要になる場合があります。
modules:
- name: hello
buildsystem: autotools
no-autogen: true
sources:
- type: archive
path: src/hello-2.10.tar.gz
buildsystem
値は、Flatpakがモジュールを構築する方法を識別します。各モジュールは独自のビルドシステムを使用できるため、1つのFlatpakで複数のビルドシステムを定義できます。
no-autogen
valueは、Flatpakに autotools
のセットアップコマンドを実行しないように指示します 、GNUHelloソースコードはmake dist
の製品であるため、これは必要ありません。 。作成しているコードが簡単に作成できる形式でない場合は、 autogen
をインストールする必要があります。 およびautoconf
autotools
のソースを準備します 。このオプションは、 autotools
を使用しないプロジェクトにはまったく適用されません。 。
type
valueは、ソースコードがアーカイブ内にあることをFlatpakに通知します。これにより、ビルドする前に必要なアーカイブ解除タスクがトリガーされます。 path
ソースコードを指します。この例では、ソースは src
に存在します ローカルビルドマシンのディレクトリですが、代わりにソースをリモートロケーションとして定義することもできます:
modules:
- name: hello
buildsystem: autotools
no-autogen: true
sources:
- type: archive
url: https://ftp.gnu.org/gnu/hello/hello-2.10.tar.gz
最後に、アプリケーションの実行とビルドに必要なプラットフォームを定義する必要があります。 Flatpakメンテナは、 freedesktop
を含む一般的なライブラリを含むランタイムとSDKを提供します 、 gnome
、および kde
。基本的な要件はfreedesk
です ランタイムとSDK。ただし、コードを実行する必要があるものに応じて、これはGNOMEまたはKDEに取って代わられる可能性があります。このGNUFelloの例では、基本的なものだけが必要です。
runtime: org.freedesktop.Platform
runtime-version: '18.08'
sdk: org.freedesktop.Sdk
GNU Helloフラットパックマニフェスト全体:
id: org.gnu.Hello
runtime: org.freedesktop.Platform
runtime-version: '18.08'
sdk: org.freedesktop.Sdk
command: hello
modules:
- name: hello
buildsystem: autotools
no-autogen: true
sources:
- type: archive
path: src/hello-2.10.tar.gz
パッケージが定義されたので、それをビルドできます。ビルドプロセスにより、Flatpak-builderはマニフェストを解析し、各要件を解決するように求められます。必要なプラットフォームとSDKが利用可能であることを確認します(利用できない場合は、 flatpak を使用してインストールする必要があります)。コード> コマンド)、ソースコードをアーカイブ解除し、
buildsystem
を実行します。 指定されています。
開始するコマンド:
$ flatpak-builder build-dir org.gnu.Hello.yaml
ディレクトリbuild-dir
まだ存在しない場合は作成されます。名前build-dir
任意です。あなたはそれをbuild
と呼ぶことができます またはbld
またはペンギン
、および同じプロジェクトディレクトリに複数のビルド先を設定できます。ただし、 build-dir
という用語 はドキュメントで頻繁に使用される値であるため、リテラル値として使用すると役立つ場合があります。
-run
と一緒にbuildコマンドを実行することで、ビルドの前後にアプリケーションをテストできます。 オプションを選択し、Flatpakが提供するコマンドでコマンドを終了します:
$ flatpak-builder --run build-dir \
org.gnu.Hello.yaml hello
Hello, world!
Flatpakを使用したGUIアプリのパッケージ化
シンプルな自己完結型のhelloworldをパッケージ化する アプリケーションは簡単で、幸いGUIアプリケーションのパッケージ化はそれほど難しくありません。パッケージ化するのが最も難しいアプリケーションは、共通のライブラリとフレームワークに依存しないアプリケーションです(パッケージ化のコンテキストでは、「共通」とはではないものを意味します。 すでに他の誰かによってパッケージ化されています)。 Flatpakコミュニティは、他の方法では自分でパッケージ化する必要があった可能性のある多くのコンポーネントにSDKとSDK拡張機能を提供します。たとえば、 pdftk
の純粋なJava実装をパッケージ化する場合 、FlatpakGithubリポジトリで見つけたOpenJDKSDK拡張機能を使用しています:
runtime: org.freedesktop.Platform
runtime-version: '18.08'
sdk: org.freedesktop.Sdk
sdk-extensions:
- org.freedesktop.Sdk.Extension.openjdk11
Flatpakコミュニティは、開発者がパッケージングプロセスを簡単に行えるようにするために、アプリケーションの実行に必要な基盤について多くの作業を行っています。たとえば、KDEコミュニティのKblocksゲームを実行するには、KDEプラットフォームが必要です。これは、Flatpakからすでに入手できます。追加のlibkdegames
ライブラリは含まれていませんが、モジュール
のリストに追加するのは簡単です。 kblocks
として
Kblocksゲームのマニフェストは次のとおりです。
id: org.kde.kblocks
command: kblocks
modules:
- buildsystem: cmake-ninja
name: libkdegames
sources:
type: archive
path: src/libkdegames-19.08.2.tar.xz
- buildsystem: cmake-ninja
name: kblocks
sources:
type: archive
path: src/kblocks-19.08.2.tar.xz
runtime: org.kde.Platform
runtime-version: '5.13'
sdk: org.kde.Sdk
ご覧のとおり、マニフェストは依然として単純で比較的直感的です。ビルドシステムは異なり、ランタイムとSDKはFreedesktopではなくKDEを指しますが、構造と要件は基本的に同じです。
ただし、これはGUIアプリケーションであるため、いくつかの新しいオプションが必要です。まず、アイコンが必要です。これにより、[アクティビティ]メニューまたは[アプリケーション]メニューに表示されたときに、見栄えがよくわかりやすくなります。 Kblocksのソースにはアイコンが含まれていますが、Flatpakによってエクスポートされるファイルの名前には、アプリケーションID( org.kde.Kblocks.desktop
など)を使用してプレフィックスを付ける必要があります。 )。これを行う最も簡単な方法は、アプリケーションソースでファイルの名前を直接変更することです。これは、マニフェストにこのディレクティブが含まれている限り、Flatpakで実行できます。
rename-icon: kblocks
GUIアプリケーションのもう1つのユニークな特徴は、グラフィックサーバー(X11またはWayland)自体、Pulse Audioなどのサウンドサーバー、プロセス間通信(IPC)サブシステムなどの一般的なデスクトップサービスとの統合が必要になることが多いことです。
>Kblockの場合、要件は次のとおりです。
finish-args:
- --share=ipc
- --socket=x11
- --socket=wayland
- --socket=pulseaudio
- --device=dri
- --filesystem=xdg-config/kdeglobals:ro
これが最終的な完全なマニフェストです。ソースのURLを使用して、自分のシステムでこれを簡単に試すことができます。
command: kblocks
finish-args:
- --share=ipc
- --socket=x11
- --socket=wayland
- --socket=pulseaudio
- --device=dri
- --filesystem=xdg-config/kdeglobals:ro
id: org.kde.kblocks
modules:
- buildsystem: cmake-ninja
name: libkdegames
sources:
- sha256: 83456cec44502a1f79c0be00c983090e32fd8aea5fec1461fbfbd37b5f8866ac
type: archive
url: https://download.kde.org/stable/applications/19.08.2/src/libkdegames-19.08.2.tar.xz
- buildsystem: cmake-ninja
name: kblocks
sources:
- sha256: 8b52c949e2d446a4ccf81b09818fc90234f2f55d8722c385491ee67e1f2abf93
type: archive
url: https://download.kde.org/stable/applications/19.08.2/src/kblocks-19.08.2.tar.xz
rename-icon: kblocks
runtime: org.kde.Platform
runtime-version: '5.13'
sdk: org.kde.Sdk
アプリケーションをビルドするには、KDEプラットフォームとSDK Flatpaks(この記事の執筆時点ではバージョン5.13)がインストールされている必要があります。アプリケーションがビルドされたら、-run
を使用して実行できます。 メソッドですが、アプリケーションアイコンを表示するには、それをインストールする必要があります。
フラットパックの配布はリポジトリを通じて行われます。
技術的にという意味のコミュニティウェブサイトであるFlathub.orgにアプリを掲載できます。 Flatpaksの分散型(ただし精神的には中央)の場所。 Flatpakを送信するには、マニフェストをGitリポジトリに配置し、Githubでプルリクエストを送信します。
または、 flatpak build-export
を使用して独自のリポジトリを作成することもできます コマンド。
ローカルにインストールすることもできます:
$ flatpak-builder --force-clean --install build-dir org.kde.Kblocks.yaml
インストールしたら、[アクティビティ]または[アプリケーション]メニューを開き、Kblockを検索します。
Flatpakのドキュメントサイトには、最初のFlatpakを構築するための優れたウォークスルーがあります。この記事を読んだとしても、読む価値があります。それに加えて、ドキュメントには、利用可能なプラットフォームとSDKの詳細が記載されています。
例から学ぶことを楽しむ人のために、すべてのアプリケーションのマニフェストがあります Flathubで入手できます。
Flatpaksを構築して使用するためのリソースは豊富にあり、Flatpakは、コンテナーやサンドボックスアプリとともに、間違いなく未来です。そのため、Flatpakに慣れ、Jenkinsパイプラインとの統合を開始し、簡単でユニバーサルなLinuxアプリのパッケージ化をお楽しみください。