Jump to content

Arch build system (Türkçe)

From ArchWiki

Arch derleme sistemi (ABS), yazılımları kaynak koddan derlemek ve paketlemek için kullanılan bir sistemdir. pacman ikili paket yönetimi için özelleşmiş bir Arch aracı iken, Arch derleme sistemi kaynak kodları kurulabilir .pkg.tar.zst paketleri halinde derlemek için kullanılan bir araçlar bütünüdür.

Arch derleme sistemi, kaynak koddan yazılım derleme sürecini otomatikleştiren *BSD'deki ports yapısına benzetilebilir. Sistem; verilen bir yazılımı indirmek, arşivden çıkarmak, yamamak, derlemek ve kurmak için bir port kullanır. Bir port, kullanıcının bilgisayarında bulunan, kurulacak yazılımın adını taşıyan ve yazılımı kaynak koddan derleyip kurmak için gerekli talimatları içeren birkaç dosyadan ibaret küçük bir dizindir. Bu durum, yazılım kurmayı ilgili port dizini içinde sadece make veya make install clean yazmak kadar basit hale getirir.

Arch derleme sistemi de benzer bir konsepte dayanır. Arch Linux'ta bulunan her paket için bir git deposu koleksiyonundan oluşur. Her depo bir PKGBUILD dosyası (ve bazen diğer dosyaları) içerir; yazılımın kaynak kodunu veya ikili dosyasını (binary) barındırmaz. Bir dizin içinde makepkg çalıştırılarak yazılım kaynakları indirilir, yazılım derlenir ve ardından derleme dizini içinde paketlenir. Sonrasında paketi kurmak için pacman kullanabilirsiniz.

Araç Zinciri

Arch derleme sistemi, kaynak koddan paket derleme sürecinde kullanılan birkaç bileşeni ve aracı içerir ve bunlara dayanır:

Depo (Repository)
Tüm resmi paketleri derlemek için gereken dosyaları içeren ancak paketlerin kendisini veya yazılımın kaynak dosyalarını barındırmayan dizin yapısıdır. gitlab.archlinux.org üzerinde barındırılan Git depoları biçiminde sunulur. Daha fazla bilgi için Depo yapısı bölümüne bakın.
PKGBUILD
Derleme ve paketleme talimatlarıyla birlikte kaynak kodun URL'sini içeren bir Bash betiğidir.
makepkg
PKGBUILD dosyalarını okuyan, kaynakları otomatik olarak indiren, derleyen ve makepkg.conf içindeki PKGEXT dizisine göre bir .pkg.tar* oluşturan bir kabuk komut aracıdır. makepkg aracını, Arch User Repository (AUR) veya üçüncü taraf kaynaklardan kendi özel paketlerinizi yapmak için de kullanabilirsiniz. Daha fazla bilgi için Paket oluşturma sayfasına bakın.
pacman
pacman tamamen bağımsızdır ancak derlenen paketleri kurmak, kaldırmak ve bağımlılıkları getirmek için ya makepkg tarafından ya da manuel olarak çağrılması zorunludur.
devtools pkgctl
devtools(7), resmi depo paketlerini derlemek ve sürdürmek için Arch Linux dağıtımına yönelik araçlardır. pkgctl(1), Arch Linux paketlerini kaynak depolarından derlemeye ve bunları ikili (binary) depolara yayınlamaya yardımcı olan üst düzey bir araçtır.
AUR
Arch Kullanıcı Deposu (Arch User Repository), resmi PKGBUILD dosyaları deposundan ayrıdır ancak AUR'daki paketler aynı araçlar kullanılarak derlenebilir. Resmi bir Arch paketi olarak mevcut olmayan yazılımlar için kullanıcılar tarafından katkıda bulunulmuş binlerce PKGBUILD dosyası içerir. Resmi Arch ağacının dışında bir paket derlemeniz gerekiyorsa, bunun AUR'da bulunma olasılığı çok yüksektir.
Warning Resmi PKGBUILD dosyaları, paketlerin temiz bir chroot içinde derlendiğini varsayar. Kirli bir derleme sisteminde yazılım derlemek, çalışma zamanında başarısızlığa veya beklenmedik davranışlara neden olabilir; çünkü derleme sistemi bağımlılıkları dinamik olarak algılarsa sonuç, derleme sisteminde hangi paketlerin mevcut olduğuna bağlı kalır.

Depo yapısı

Her paketin, Arch Linux GitLab örneği üzerindeki archlinux/packaging/packages ad alanında kendi kaynak deposu bulunur. Her depo, PKGBUILD dosyasını ve resmi derlemelerde kullanılan dosyaları içerir. Ayrıca geliştiriciler tarafından derleme süreci için kullanılan bazı dosyalar da burada bulunabilir.

Örneğin, acl için ağaç yapısı şu şekildedir:

acl
├── keys
│   └── pgp
│       ├── 259B3792B3D6D319212CC4DCD5BF9FEB0313653A.asc
│       ├── 600CD204FBCEA418BD2CA74F154343260542DF34.asc
│       └── B902B5271325F892AC251AD441633B9FE837F581.asc
├── PKGBUILD
└── .SRCINFO

Paketin kaynak kodu dizinde mevcut değildir. Bunun yerine PKGBUILD dosyası, paket derlendiğinde kaynak kodu indirecek bir URL içerir.

Resmi bir paket derlendiğinde, öncelikle resmi depolardan birinde (core, extra, multilib veya bazı test depolarında) yayınlanır. Bu depolar ikilidir (binary) ve GitLab üzerinde barındırılmaz, bunun yerine yansılar tarafından sunulur.

Kullanım senaryoları

Arch derleme sistemi, kaynak koddan derleme ile ilgili belirli görevleri otomatikleştirir. Kullanım senaryoları şunlardır:

  • Bir paketi derlemenizi veya yeniden derlemenizi gerektiren herhangi bir durum.
  • Geliştiriciler ve paketleyiciler tarafından Arch Linux için resmi ikili paketlerin derlenmesi.
  • Henüz bir paketi bulunmayan yazılımların kaynak kodundan yeni paketler yapılması ve kurulması (bakınız Paket oluşturma).
  • Mevcut paketleri ihtiyaçlarınıza göre özelleştirmek (örneğin seçenekleri etkinleştirmek veya devre dışı bırakmak, yamamak).
  • Tüm sisteminizi kendi derleyici bayraklarınızı kullanarak "FreeBSD tarzı" yeniden derlemek.
  • Kendi özel çekirdeğinizi temiz bir şekilde derlemek ve kurmak (bakınız Çekirdek derleme).
  • Çekirdek modüllerinin özel bir çekirdekle çalışmasını sağlamak.
  • PKGBUILD dosyasındaki sürüm numarasını düzenleyerek bir Arch paketinin daha yeni, daha eski, beta veya geliştirme sürümünü kolayca derlemek ve kurmak.

Kullanım

PKGBUILD kaynağını alma

Belirli bir paketi kaynak koddan derlemek için gereken PKGBUILD dosyasını elde etmek için, ya pkgctl aracını kullanabilir ya da doğrudan Git kullanabilirsiniz.

pkgctl aracını kullanma

Ön koşul olarak, devtools paketini kurun. pkgctl, Arch Linux paketleri için kaynak dosyalarının derlenmesiyle çalışmaya yardımcı olan bir araçtır.

pkgctl kullanarak pkgname paketi için en son derleme dosyalarını içeren git deposunu klonlamak için aşağıdaki komut kullanılır:

$ pkgctl repo clone pkgbase
Tip Bu işlem varsayılan olarak SSH üzerinden klonlama yapar, bu nedenle Arch GitLab hesabınızda bir SSH anahtarı ayarlamadıysanız HTTPS üzerinden klonlamanız gerekir: pkgctl repo clone --protocol=https pkgbase.

Buradaki derleme kaynak dosyalarının, muhtemelen anahtarlar gibi diğer birkaç gerekli dosyayla birlikte PKGBUILD dosyasına atıfta bulunduğunu unutmayın. Yani bunlar, Arch Linux derleme sistemi için gerekli olan temel dosyalardır. Paketi yazan ekip tarafından oluşturulan C veya Python dosyaları gibi paketin kendi kaynak dosyalarını ifade etmez.

Bu size yalnızca mevcut kaynak derleme dosyalarını değil, aynı zamanda önceki sürümlerini de sağlayacaktır. Dahası, paketin daha eski bir sürümünü kontrol etmek (checkout) veya özel değişiklikleri takip etmek için diğer tüm git komutlarını kullanabilirsiniz.

Bir paketin belirli bir sürümünü almak istiyorsanız aşağıdakine benzer bir şey kullanabilirsiniz:

$ pkgctl repo clone --switch="2:1.19.5-1" go

Daha fazla bilgi edinmek ve mevcut diğer komutları görmek için pkgctl-repo-clone(1) sayfasını okuyun.

Doğrudan git kullanma

Bir paketi klonlamak için aşağıdaki git komutunu kullanın:

$ git clone https://gitlab.archlinux.org/archlinux/packaging/packages/pkgname.git

Örneğin, Apache derleme dosyalarını kopyalamak için:

$ git clone https://gitlab.archlinux.org/archlinux/packaging/packages/apache.git

Paketi derleme

Klonladığınız PKGBUILD dosyalarından paket derlemek için makepkg aracını makepkg#Yapılandırma bölümünde açıklandığı gibi yapılandırın.

Ardından, değiştirmek istediğiniz PKGBUILD dosyasını içeren dizini yeni bir konuma kopyalayın. İstediğiniz değişiklikleri orada yapın ve yeni paketi oluşturup kurmak için makepkg#Kullanım bölümünde açıklandığı gibi orada makepkg aracını kullanın.

İpuçları ve püf noktaları

Değiştirilmiş paketleri koruma

Sistemi pacman ile güncellemek, değiştirilmiş bir paketin yerine resmi depolardaki aynı isimli paketi getirecektir. Bunu önlemek için aşağıdaki talimatlara bakın.

PKGBUILD dosyasına bir grup dizisi (group array) ekleyin ve paketi modified adlı bir gruba dahil edin.

PKGBUILD
groups=('modified')

Bu grubu /etc/pacman.conf dosyasındaki IgnoreGroup bölümüne ekleyin.

/etc/pacman.conf
IgnoreGroup = modified

Bir sistem güncellemesi sırasında resmi depolarda yeni sürümler mevcutsa, pacman bu güncellemenin IgnoreGroup bölümünde olması nedeniyle atlandığına dair bir not yazdırır. Bu noktada, kısmi yükseltmelerden kaçınmak için değiştirilen paket yeniden derlenmelidir.