Rehber LURE (Linux User REpository) ile çoğu dağıtım için paket oluşturmak

GitHub sayfası:

Evet, bu proje ile çoğu dağıtım için dağıtımın kullandığı paket yöneticisine göre paketler oluşturabilirsiniz.
Paketlerin oluşturulma mantığı ise Arch Linux'ta AUR paketleri ve pacman paketleri oluşturulurken kullanılan PKGBUILD mantığında.
LURE ile bir paket oluşturmak için lure.sh dosyası oluşturursunuz ve bu dosyasının yapısı PKGBUILD'e çok benziyor.

Bash:
pkgname=NAME
pkgver=VERSION
pkgrel=1
epoch=
pkgdesc=""
arch=()
url=""
license=('GPL')
groups=()
depends=()
makedepends=()
checkdepends=()
optdepends=()
provides=()
conflicts=()
replaces=()
backup=()
options=()
install=
changelog=
source=("$pkgname-$pkgver.tar.gz"
 "$pkgname-$pkgver.patch")
noextract=()
md5sums=()
validpgpkeys=()

prepare() {
 cd "$pkgname-$pkgver"
 patch -p1 -i "$srcdir/$pkgname-$pkgver.patch"
}

build() {
 cd "$pkgname-$pkgver"
 ./configure --prefix=/usr
 make
}

check() {
 cd "$pkgname-$pkgver"
 make -k check
}

package() {
 cd "$pkgname-$pkgver"
 make DESTDIR="$pkgdir/" install
}

Bash:
name="hello"
version=1.0
release=1
epoch=1
desc="Hello, World! in your terminal."
homepage="https://example.com"
architectures=("all")
licenses="Custom"
provides=("hello")
conflicts=("hello")
maintainer=("Deneme Deneme <deneme at hotmail dot com>")
deps=("bash")
deps_arch=("bash")
deps_debian=("bash")
deps_fedora37=("bash")

package() {
 install -d "$pkgdir/usr/bin/"
 install -Dm755 "$(pwd)/src/hello" -t "$pkgdir/usr/bin/"
}


Şimdi bazı kısımları açıklayalım.
name = Oluşacak paketin adıdır. Örnek: "hello"

version = Paketinizin versiyon numarasıdır. Örnek: 1.0

release = Aynı sürüm içerisinde farklı bir şey yapmak istiyorsak bu sayıyı değiştiririz. Bu sayı tam sayı olmalı. Örnek: 1

2022-12-03_00-18.png


epoch = Paket sürümünü daha yüksek bir sürüme yükseltmeye zorlar. Bu sayı pozitif tam sayı olmalı. Örnek: 0, 1

2022-12-03_00-21.png


desc = Paketin açıklamasının bulunduğu kısımdır. Örnek: "Hello, World! in your terminal."

homepage = Paket ile ilgili web sitenin yer aldığı bölüm. Örnek "abdullah-rgb - Overview"

maintainer = "Bu paketi kim yaptı" sorusuna cevabın bulunduğu yerdir. Paketi kimin oluşturduğu ile alakalı bilgiler vardır. Örnek: "Deneme Deneme <[email protected]>"

architectures = Paketin hangi mimaride çalıştığını belirten kısımdır. Örnek: "amd64, x86_64, arm5, all"

licences = Paket içeriğinin lisansını belirtir. Örnek: "GPLv2, MIT, Custom"

provides = Yüklenen paketin neleri sağladığını belirtir. Örneğin picom-ibhagwan-git paketi picom ve compton paketlerini sağlar.

conflicts = Çakışan paketler bulunur. Örneğin picom ve picom-ibhagwan-git paketi, bunlar birbiri ile çakışır ve sadece birinin kurulu olması gerekir. Bu tarz durumların belirtilmesi için kullanılır.

deps = Depends yani Bağımlılıklar. "Bu paket çalışmak için neye ihtiyaç duyuyor?" sorusuna burada cevap verilir. Örnek: "python"

deps_$distro = $distro kısmında dağıtım özelinde bu bağımlılığın ne olduğunu belirtir. Örneğin Arch Linux'ta Python 3 sürümünün paket adı python iken Debian tarafında python3'tür. Örnek: deps_debian="python3"

build_deps = Eğer paket derlenerek oluşturuluyorsa bu derlenen dosyaların derlenmesi için gereken paketlerin adının bulunduğu bölümdür.

build_deps_$distro = deps_$distro ile aynı mantıkta. Dağıtım özelinde karşılığının ne olduğu belirtilir. Örnek: build_deps_debian="build-essential"

sources = Burayı tam olarak bilmediğimden GitHub tarafındaki örneğini koyuyorum.

checksums = sha256 doğrulaması gerçekleştirir. Eğer doğrulama başarısız olursa işlem iptal edilir ve paket oluşturulmaz. SKIP değeri ile bu doğrulama atlanabilir.

Buraya kadar paket bilgileriydi. Şimdi asıl paketin hazırlanma kısmı var.
Temel olarak 4 tane fonksiyonumuz var. Bunlar version, prepare, build, package. package fonksiyonu olmak zorunda. Diğer fonksiyonlar olmasa da paketleyebilirsiniz.

Version fonksiyonu: Ne işe yaradığına dair tam bir fikrim yok. GitHub sayfasından bakabilirsiniz.

Prepare fonksiyonu: Paket önce inşa edilecekse bu inşa öncesi gerekli hazırlıkların yapıldığı kısımdır. Dosya ve klasörlerin düzenlenmesi, gerekli işlemlerin yapılması gibi aksiyonlar burada yer alır.

Build fonksiyonu: Paket inşa edilecekse buradaki komutlar çalışır.

Package fonksiyonu: Artık paket oluşturulduğunda oluşan dosyalar Linux dosya sisteminde nerelerde yer alacak ise burada belirlenir.

Tamam, güzel. Her şeyi hallettik. Peki bunu nasıl istediğimiz dağıtıma göre paketleyeceğiz?
Örnek kullanım:

Bash:
LURE_DISTRO=debian LURE_PKG_FORMAT=deb lure build lure.sh
LURE_DISTRO=arch LURE_PKG_FORMAT=archlinux lure build lure.sh
LURE_DISTRO=fedora LURE_PKG_FORMAT=rpm lure build lure.sh
LURE_DISTRO=opensuse LURE_PKG_FORMAT=rpm lure build lure.sh

Şeklinde paketleyebilirsiniz.
Ve bu adımlardan sonra paketin oluşmuş olması gerek.

2022-12-03_00-57.png


2022-12-03_00-58.png


Hadi bunları kuralım!

2022-12-03_00-59.png


2022-12-03_01-01.png


Peki, bu çalışıyor mu? Bakalım.

2022-12-03_01-03.png


Acaba paket yöneticisi bu paketlere ne diyor?

2022-12-03_01-13.png


Gördüğünüz gibi durumlar bu şekilde.

Bu içeriği görüntülemek için üçüncü taraf çerezlerini yerleştirmek için izninize ihtiyacımız olacak.
Daha detaylı bilgi için, çerezler sayfamıza bakınız.

Bu video anlamam konusunda bayağı yardımcı oldu. Hem de Türkçe. Bakmak isteyebilirsiniz.

Bir başka rehberde görüşmek üzere!
 
Son düzenleme:

Geri
Yukarı