GNU/Linux >> Belajar Linux >  >> Linux

Bagaimana membangun sebuah Flatpak

Dahulu kala, distribusi Linux mengirimkan sistem operasi bersama dengan semua perangkat lunak yang tersedia untuk itu. Tidak ada konsep perangkat lunak "pihak ketiga" karena semuanya adalah bagian dari distribusi. Aplikasi tidak begitu banyak terinstal karena diaktifkan dari repositori perangkat lunak besar yang Anda dapatkan di salah satu dari banyak floppy disk atau, kemudian, CD yang Anda beli atau unduh.

Ini berkembang menjadi sesuatu yang bahkan lebih nyaman karena internet ada di mana-mana, dan konsep yang sekarang disebut "toko aplikasi" lahir. Tentu saja, distribusi Linux cenderung menyebutnya repositori perangkat lunak atau cukup repo singkatnya, dengan beberapa variasi untuk “pencitraan merek”, seperti Pusat Perangkat Lunak Ubuntu atau, dengan minimalis khas GNOME, cukup Perangkat Lunak .

Model ini bekerja dengan baik ketika perangkat lunak open source masih baru dan jumlah aplikasi open source adalah angka daripada teoretis nomor. Di dunia GitLab dan GitHub dan Bitbucket saat ini (dan masih banyak lagi), hampir tidak mungkin untuk menghitung jumlah proyek sumber terbuka, apalagi mengemasnya dalam repositori. Tidak ada distribusi Linux saat ini, bahkan Debian dan grup pengelola paketnya yang tangguh, dapat mengklaim atau berharap memiliki paket untuk setiap proyek sumber terbuka yang dapat diinstal.

Tentu saja, paket Linux tidak harus dalam repositori untuk dapat diinstal. Setiap programmer dapat mengemas perangkat lunak mereka dan mendistribusikannya dari situs web mereka sendiri. Namun, karena repositori dipandang sebagai bagian integral dari distribusi, tidak ada format pengemasan universal, yang berarti bahwa seorang programmer harus memutuskan apakah akan merilis .deb atau .rpm , atau skrip build AUR, atau paket Nix atau Guix, atau skrip Homebrew, atau hanya .tgz yang sebagian besar generik arsip untuk /opt . Ini luar biasa bagi pengembang yang hidup dan menghirup Linux setiap hari, apalagi bagi pengembang yang hanya mencoba melakukan upaya terbaik untuk mendukung target sumber terbuka dan gratis.

Mengapa Flatpak?

Proyek Flatpak menyediakan format pengemasan universal bersama dengan sarana distribusi yang terdesentralisasi, plus portabilitas, dan sandbox.

  • Universal Instal sistem Flatpak, dan Anda dapat menjalankan Flatpaks, terlepas dari distribusi Anda. Tidak diperlukan daemon atau systemd. Flatpak yang sama berjalan di Fedora, Ubuntu, Mageia, Pop OS, Arch, Slackware, dan banyak lagi.
  • Terdesentralisasi Pengembang dapat membuat dan menandatangani paket dan repositori Flatpak mereka sendiri. Tidak ada tempat penyimpanan petisi untuk mendapatkan paket yang disertakan.
  • Portabilitas Jika Anda memiliki Flatpak di sistem Anda dan ingin memberikannya kepada teman agar mereka dapat menjalankan aplikasi yang sama, Anda dapat mengekspor Flatpak ke thumbdrive USB.
  • Dikotak pasir Flatpaks menggunakan model berbasis wadah, memungkinkan beberapa versi perpustakaan dan aplikasi ada di satu sistem. Ya, Anda dapat dengan mudah menginstal versi terbaru aplikasi untuk menguji sambil mempertahankan versi lama yang Anda andalkan.

Membangun Flatpak

Untuk membangun Flatpak, Anda harus terlebih dahulu menginstal Flatpak (subsistem yang memungkinkan Anda menggunakan paket Flatpak) dan aplikasi pembuat Flatpak.

Di Fedora, CentOS, RHEL, dan sejenisnya:

$ sudo dnf install flatpak flatpak-builder

Di Debian, Ubuntu, dan sejenisnya:

$ sudo apt install flatpak flatpak-builder

Anda juga harus menginstal alat pengembangan yang diperlukan untuk membangun aplikasi yang Anda kemas. Secara alami mengembangkan aplikasi yang sekarang Anda kemas, Anda mungkin sudah menginstal lingkungan pengembangan, jadi Anda mungkin tidak menyadari bahwa komponen ini diperlukan, tetapi jika Anda mulai membangun Flatpaks dengan Jenkins atau dari dalam wadah, maka Anda harus memastikan bahwa alat pembangunan Anda adalah bagian dari rantai alat Anda.

Untuk contoh build pertama, artikel ini mengasumsikan bahwa aplikasi Anda menggunakan GNU Autotools, tetapi Flatpak sendiri mendukung sistem build lain, seperti cmake , cmake-ninja , meson , ant , serta perintah khusus (simple membangun sistem, dalam terminologi Flatpak, tetapi ini tidak berarti bahwa pembangunan itu sendiri sebenarnya sederhana).

Direktori proyek

Tidak seperti infrastruktur pembangunan RPM yang ketat, Flatpak tidak memaksakan struktur direktori proyek. Saya lebih suka membuat direktori proyek berdasarkan dist paket perangkat lunak, tetapi tidak ada alasan teknis Anda tidak dapat mengintegrasikan proses pembuatan Flatpak Anda dengan direktori sumber Anda. Secara teknis lebih mudah untuk membuat Flatpak dari dist your Anda paket, dan ini juga demo yang lebih mudah, jadi itulah model yang digunakan artikel ini. Siapkan direktori proyek untuk GNU Hello, yang berfungsi sebagai Flatpak pertama Anda:

$ mkdir hello_flatpak
$ mkdir src

Unduh sumber Anda yang dapat didistribusikan. Untuk contoh ini, kode sumber terletak di 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

Manifes

Terminal Linux

  • 7 emulator terminal teratas untuk Linux
  • 10 alat baris perintah untuk analisis data di Linux
  • Unduh Sekarang:lembar contekan SSH
  • Lembar contekan perintah Linux tingkat lanjut
  • Tutorial baris perintah Linux

Flatpak ditentukan oleh manifes, yang menjelaskan cara membangun dan menginstal aplikasi yang dikirimkannya. Manifes bersifat atomik dan dapat direproduksi. Flatpak ada dalam wadah “sandbox”, jadi manifesnya didasarkan pada lingkungan yang sebagian besar kosong dengan panggilan direktori root /app .

Dua atribut pertama adalah ID aplikasi yang Anda kemas dan perintah yang diberikan olehnya. ID aplikasi harus unik untuk aplikasi yang Anda kemas. Cara kanonik untuk merumuskan ID unik adalah dengan menggunakan nilai triplet yang terdiri dari entitas yang bertanggung jawab atas kode yang diikuti dengan nama aplikasi, seperti org.gnu.Hello . Perintah yang diberikan oleh aplikasi adalah apa pun yang Anda ketik ke terminal untuk menjalankan aplikasi. Ini tidak berarti bahwa aplikasi dimaksudkan untuk dijalankan dari terminal, bukan dari .desktop file di menu Aktivitas atau Aplikasi.

Dalam file bernama org.gnu.Hello.yaml , masukkan teks ini:

id: org.gnu.Hello
command: hello

Manifes dapat ditulis dalam YAML atau JSON. Artikel ini menggunakan YAML.

Selanjutnya, Anda harus mendefinisikan setiap “modul” yang dikirimkan oleh paket Flatpak ini. Anda dapat menganggap modul sebagai dependensi atau komponen. Untuk GNU Hello, hanya ada satu modul:GNU Hello. Aplikasi yang lebih kompleks mungkin memerlukan perpustakaan khusus atau aplikasi lain secara keseluruhan.

modules:
  - name: hello
    buildsystem: autotools
    no-autogen: true
    sources:
      - type: archive
        path: src/hello-2.10.tar.gz

buildsystem value mengidentifikasi bagaimana Flatpak harus membangun modul. Setiap modul dapat menggunakan sistem pembangunannya sendiri, sehingga satu Flatpak dapat memiliki beberapa sistem pembangunan yang ditentukan.

no-autogen value memberitahu Flatpak untuk tidak menjalankan perintah setup untuk autotools , yang tidak diperlukan karena kode sumber GNU Hello adalah produk dari make dist . Jika kode yang Anda buat tidak dalam bentuk yang mudah dibuat, Anda mungkin perlu menginstal autogen dan autoconf untuk menyiapkan sumber autotools . Opsi ini tidak berlaku sama sekali untuk proyek yang tidak menggunakan autotools .

type value memberi tahu Flatpak bahwa kode sumber ada dalam arsip, yang memicu tugas pengarsipan yang diperlukan sebelum membangun. path menunjuk ke kode sumber. Dalam contoh ini, sumbernya ada di src direktori pada mesin build lokal Anda, tetapi Anda dapat mendefinisikan sumber sebagai lokasi jarak jauh:

modules:
  - name: hello
    buildsystem: autotools
    no-autogen: true
    sources:
      - type: archive
        url: https://ftp.gnu.org/gnu/hello/hello-2.10.tar.gz

Terakhir, Anda harus menentukan platform yang diperlukan untuk menjalankan dan membangun aplikasi. Pengelola Flatpak menyediakan runtime dan SDK yang menyertakan pustaka umum, termasuk freedesktop , gnome , dan kde . Persyaratan dasarnya adalah freedesk runtime dan SDK, meskipun ini mungkin digantikan oleh GNOME atau KDE, tergantung pada apa yang perlu dijalankan oleh kode Anda. Untuk contoh Hello GNU ini, hanya dasar-dasar yang diperlukan.

runtime: org.freedesktop.Platform
runtime-version: '18.08'
sdk: org.freedesktop.Sdk

Seluruh manifes flatpak 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

Membangun Flatpak

Sekarang setelah paket didefinisikan, Anda dapat membangunnya. Proses build meminta Flatpak-builder untuk mengurai manifes dan menyelesaikan setiap persyaratan:ini memastikan bahwa Platform dan SDK yang diperlukan tersedia (jika tidak, Anda harus menginstalnya dengan flatpak perintah), itu membuka arsip kode sumber, dan mengeksekusi buildsystem ditentukan.

Perintah untuk memulai:

$ flatpak-builder build-dir org.gnu.Hello.yaml

Direktori build-dir dibuat jika belum ada. Nama build-dir adalah sewenang-wenang; Anda bisa menyebutnya build atau bld atau penguin , dan Anda dapat memiliki lebih dari satu tujuan pembangunan di direktori proyek yang sama. Namun, istilah build-dir adalah nilai yang sering digunakan dalam dokumentasi, jadi menggunakannya sebagai nilai literal dapat membantu.

Menguji aplikasi Anda

Anda dapat menguji aplikasi Anda sebelum atau sesudah dibangun dengan menjalankan perintah build bersama dengan --run pilihan, dan mengakhiri perintah dengan perintah yang disediakan oleh Flatpak:

$ flatpak-builder --run build-dir \
org.gnu.Hello.yaml hello
Hello, world!

Mengemas aplikasi GUI dengan Flatpak

Mengemas hello world yang sederhana dan mandiri aplikasi sepele, dan untungnya mengemas aplikasi GUI tidak jauh lebih sulit. Aplikasi yang paling sulit untuk dikemas adalah yang tidak bergantung pada pustaka dan kerangka kerja umum (dalam konteks pengemasan, "umum" berarti apa saja tidak sudah dikemas oleh orang lain). Komunitas Flatpak menyediakan SDK dan Ekstensi SDK untuk banyak komponen yang mungkin harus Anda kemas sendiri. Misalnya, saat mengemas implementasi Java murni dari pdftk , saya menggunakan ekstensi OpenJDK SDK yang saya temukan di repositori Flatpak Github:

runtime: org.freedesktop.Platform
runtime-version: '18.08'
sdk: org.freedesktop.Sdk
sdk-extensions:
 - org.freedesktop.Sdk.Extension.openjdk11

Komunitas Flatpak melakukan banyak pekerjaan pada fondasi yang diperlukan untuk menjalankan aplikasi agar proses pengemasan menjadi mudah bagi pengembang. Misalnya, game Kblocks dari komunitas KDE membutuhkan platform KDE untuk dijalankan, dan itu sudah tersedia dari Flatpak. libkdegames tambahan library tidak disertakan, tetapi menambahkannya dengan mudah ke daftar modules sebagai kblocks sendiri.

Berikut manifes untuk game 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

Seperti yang Anda lihat, manifesnya masih lurus ke depan dan relatif intuitif. Sistem pembangunannya berbeda, dan waktu proses serta SDK mengarah ke KDE, bukan Freedesktop, tetapi struktur dan persyaratannya pada dasarnya sama.

Karena ini adalah aplikasi GUI, ada beberapa opsi baru yang diperlukan. Pertama, perlu ikon agar ketika terdaftar di menu Aktivitas atau Aplikasi, terlihat bagus dan mudah dikenali. Kblocks menyertakan ikon di sumbernya, tetapi nama file yang diekspor oleh Flatpak harus diawali dengan menggunakan ID aplikasi (seperti org.kde.Kblocks.desktop ). Cara termudah untuk melakukannya adalah dengan mengganti nama file secara langsung di sumber aplikasi, yang dapat dilakukan Flatpak untuk Anda selama Anda menyertakan arahan ini dalam manifes Anda:

rename-icon: kblocks

Ciri unik lain dari aplikasi GUI adalah bahwa mereka sering memerlukan integrasi dengan layanan desktop umum, seperti server grafis (X11 atau Wayland) itu sendiri, server suara seperti Pulse Audio, dan subsistem Komunikasi Antar Proses (IPC).

Untuk Kblock, persyaratannya adalah:

finish-args:
- --share=ipc
- --socket=x11
- --socket=wayland
- --socket=pulseaudio
- --device=dri
- --filesystem=xdg-config/kdeglobals:ro

Inilah manifes final yang lengkap, menggunakan URL untuk sumber sehingga Anda dapat mencobanya di sistem Anda sendiri dengan mudah:

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

Untuk membangun aplikasi, Anda harus menginstal KDE Platform dan SDK Flatpaks (versi 5.13 saat tulisan ini dibuat). Setelah aplikasi dibuat, Anda dapat menjalankannya menggunakan --run metode, tetapi untuk melihat ikon aplikasi, Anda harus menginstalnya.

Mendistribusikan dan memasang Flatpak yang telah Anda buat

Mendistribusikan flatpak terjadi melalui repositori.

Anda dapat mencantumkan aplikasi Anda di Flathub.org, situs web komunitas yang dimaksudkan sebagai secara teknis lokasi terdesentralisasi (tetapi pusat dalam semangat) untuk Flatpaks. Untuk mengirimkan Flatpak Anda, tempatkan manifes Anda ke dalam repositori Git dan kirimkan permintaan tarik di Github.

Sebagai alternatif, Anda dapat membuat repositori Anda sendiri menggunakan flatpak build-export perintah.

Anda juga dapat menginstal secara lokal:

$ flatpak-builder --force-clean --install build-dir org.kde.Kblocks.yaml

Setelah terinstal, buka menu Aktivitas atau Aplikasi Anda dan cari Kblocks.

Pelajari lebih lanjut

Situs dokumentasi Flatpak memiliki panduan yang baik untuk membangun Flatpak pertama Anda. Layak dibaca bahkan jika Anda telah mengikuti artikel ini. Selain itu, dokumen memberikan detail tentang Platform dan SDK apa yang tersedia.

Bagi mereka yang senang belajar dari contoh, ada manifes untuk setiap aplikasi tersedia di Flathub.

Sumber daya untuk membangun dan menggunakan Flatpaks berlimpah, dan Flatpak, bersama dengan container dan aplikasi sandbox, bisa dibilang merupakan masa depan, jadi kenali mereka, mulailah mengintegrasikannya dengan pipeline Jenkins Anda, dan nikmati pengemasan aplikasi Linux yang mudah dan universal.


Linux
  1. Cara membuat paket rpm

  2. Cara Menginstal Dan Menggunakan Flatpak Di Linux

  3. Bagaimana cara menyalin file dari dockerfile ke host?

  1. Cara Menginstal Go di CentOS 8

  2. Cara Membangun Server Dev Pribadi di Pi Raspberry $5

  3. Bagaimana Mengelola Izin Flatpak Secara Grafis Menggunakan Flatseal

  1. Cara Membangun Server Minecraft di CentOS 7 Anda

  2. Cara Menginstal Flatpak di CentOS 8

  3. Cara Memasang Dropbox di Centos 8