GNU/Linux >> Linux の 問題 >  >> Linux

Flatpakの作り方

ずっと前に、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プロジェクトは、分散型の配布手段に加えて、移植性とサンドボックス化に加えて、ユニバーサルパッケージ形式を提供します。

  • ユニバーサル 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を使用して実行できます。 メソッドですが、アプリケーションアイコンを表示するには、それをインストールする必要があります。

作成したFlatpakの配布とインストール

フラットパックの配布はリポジトリを通じて行われます。

技術的にという意味のコミュニティウェブサイトである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アプリのパッケージ化をお楽しみください。


Linux
  1. LinuxでFlatpakをインストールして使用する方法

  2. Flatsealを使用してFlatpakのアクセス許可をグラフィカルに管理する方法

  3. dockerfile からホストにファイルをコピーする方法は?

  1. rpmパッケージをビルドする方法

  2. CentOS8にGoをインストールする方法

  3. 5ドルのRaspberryPiでパーソナル開発サーバーを構築する方法

  1. CentOS7でMinecraftサーバーを構築する方法

  2. CentOS8にFlatpakをインストールする方法

  3. Centos8にDropboxをインストールする方法