Genel bakış
Eğer zaten GNU/Linux sistemlere aşina iseniz, yolunuzu kolaylıkla bulacaksınız, eğer değilseniz, temel kavramlardan başlamamız gerekecek.
OpenWrt'nin gömülü cihazları hedef alan bir GNU/Linux dağıtımı (veya ing. kıs. distro) olduğunu okumuş olabilirsiniz.
Bir GNU/Linux “dağıtımı”, kullanıcı ihtiyaçlarına uyarlanmış bir GNU/Linux işletim sistemi oluşturmak üzere bir Linux çekirdeği beraberinde paketler oluşturup bakımlarını yapan bir projedir.
Bir “paket” bir program, bir kütüphane veya bazı betikler eşliğinde yapılandırma dosyaları ve işletim sistemine dahil etmeye yarayan bilgileri içeren bir sıkıştırılmış arşivdir. Bu paketler bir “paket yöneticisi (OpenWrt'de opkg); paketleri indirme/açma/yükleme/kaldırma işlerini yapan bir program ile idare edilirler.
Bu durumda, bir OpenWrt bellenimi Linux çekirdeği üzerinde paketler toplayarak oluşturulur.
Her bir paket ayrıca derlenir ve hepsi olduğunda, gerekli paketler, daha sonra cihaz belleniminde sıkıştırılmış-salt-okunur squashfs bölümü olacak bir geçici dizine “yüklenirler”.
Çekirdek bir paket olarak ele alınırken, bellenim imajlarına her bir cihazın önyükleyicisinin beklediği özel şekilde eklenir. Böylece üretici bellenimini önyükleyicinin kendisine dokunmadan (ki bu tehlikelidir ve her zaman mümkün değildir) değiştirebilirsin.
İnşa sürecinin son adımı bilfiil bellenim dosyası oluşturmaktır, OpenWrt yüklemek veya yükseltmek için kullanılan dosya.
Bu dosya genellikle cihazın dahili flaş belleğine olduğu gibi yazılmaya hazır bir bellek imajıdır. IRC veya e-posta listelerinde, pek çok geliştirici tarafından sadece imaj diye anıldığını görebilirsiniz.
Bir paket nasıl derlenir
Eğer bir paketin Makefile1) dosyasına bakarsan, (örn. busybox'ınki), farkedeceksin ki derleneceği kaynakların resmi indirme bağlantısı, bu indirmenin bütünlüğünü doğrulamak için SHA256 özeti, üst projenin kullanılacak versiyon numarası ve OpenWrt değişikliklerini belirten sürüm numarası içerir. Bazı paketlerde çekip inşa etmek üzere kaynak kodu versiyonunu tanımlamak için versiyon numarası olarak git katkısı özeti, zaman damgası veya başka bir ifade kullanılır. Genellikle resmi sürümlerden kaynak kodları olan arşivleri önceliklendirirler, ama bazı üst projeler buna her zaman sahip değildir.
Her paketin patches dizininde kaynak koda, indirdikten sonra ve derlemeden önce uygulanacak yamaları bulacaksın: busybox'ın **patches** dizini Yapılandırma dosyaları için veya bazen uci bütünleştirmesi için başka dizinler de vardır.
Çekirdeğin Makefile'ı biraz daha karmaşıktır, ama hâlâ cihaza bağlı olarak aynı çekirdek sürümünü çekmek için aynı yapıyı kullandığını görebilirsin. Örnek Linux Makefile
Her paket OpenWrt'nin, yine paketler olarark ele alınan kendi araç zincirince derlenir (kaynak dizininde /toolchain ve /tools'a bakın), böylece aynı versiyon için aynı kaynaklardan indirileceklerinden her zaman, diğer herkesle aynı derleyicilere/aletlere sahip olacaksın.
make
komutunu çalıştırdığında OpenWrt inşa sistemi önce OpenWrt'nin alet-zincirini derlemek için senin sisteminin var olan inşa altyapısını kullanacak, ve sonra bunları paketleri derlemek için kullanacaktır. Aynı zamanda bunun, oldukça rahatsız edici ve görece karmaşık olan, kullanıcının çapraz-derleme araç-zincirini kurma işini gerektirmeme yararı vardır.
Paket besileri
OpenWrt'ye yükleyebildiğiniz tüm paketler OpenWrt projesinin sahipliğinde değildir, aslında çoğu paket değildir.
OpenWrt'nin ana deposundaki tüm paketlerin bakımı doğrudan öz geliştiricilerce idare edilmektedir, ve bu paketler önemli ve hatta OpenWrt bellenimin temel bileşenleri veya inşa sisteminin temel parçalarıdırlar. paket besileri toplulukça bakılan ek paketleri içeren kaynak kod depolarıdır, ve her paketin kendi bakıcısı vardır. Bu OpenWrt'nin github'daki ana deposu: https://github.com/openwrt/openwrt
Bunlar resmi paket besileri:
“resmi besiler” olarak, oradaki paketler resmi indirme sunucusunca derlenir ve sunulurlar, ama teknik olarak OpenWrt sahipliğinde değillerdir, topluluk bakımındadırlar. “paket besisi” sistemi kendi özel besilerinizi kendi özel bellenim imajınıza kolayca eklemenizi sağlamak üzere tasarlanmıştır, ama tabi ki onları derlemeniz ve kendi sunucunuzda barındırmanız gerekecektir.
Eğer burada indirme sunucusundaki yapılı paketlere bakarsanız (bu canlı bir OpenWrt sistemde opkg'nin paket indirmek için kullandığı aynı sunucudur), https://downloads.openwrt.org/releases/21.02.1/packages/x86_64/, besi adına göre bölünmüşlerdir, “base”(temel) içindeki paketler ana depodan gelirler, ve aynı zamanda ana depodan hedef-özgül dizinlerde bulunan paketleri alırsınız, örneğin burada https://downloads.openwrt.org/releases/21.02.1/packages/x86_64/packages/ gördüğünüz çoğunlukla kmod-* ve diğer sürücülerdir.
Paket versiyonları
Yukarıda söylediğim gibi, paket Makefile'larda üst kaynak versiyonlarını (büyük versiyon) gösteren PKG_VERSION etiketleri vardır ve OpenWrt tarafındaki değişiklikleri göstermek için kullanılan PKG_RELEASE'leri (küçük versiyon) vardır. Eğer versiyonunu 123-1 olarak listeleyen bir paket görürseniz, onun büyük versiyonu 123 ve küçük versiyonu 1'dir.
Bazı paketler büyük versiyon olarak zaman damgası veya git katkısı özeti kullanırlar, ve hala küçük versiyonları vardır, örneğin 2016-09-21-42ad5367-1 için 2016-09-21 zaman damgası, 42ad5367 git katkı özeti ve sondaki 1 de küçük sürüm numarasıdır.
Tüm kullanılan versiyonları paketler tablosunun ilk sayfasında görebilirsiniz.
Veya veya paket indirme dizininde Package.manifest dosyasını tarayarak: https://downloads.openwrt.org/releases/21.02.1/packages/mips_24kc/base/Packages.manifest
Tekrarlanabilir inşalar
Yukarıdaki sistemin çoğu tekrarlanabilir inşalara olanak sağlar. Kaynak arşivlerinin veya katkılarının özetleri veya zaman damgaları paketlerin git depolarındaki (ana depo veya topluluk paketi besileri) Makefile'larında yazılıdır, dosyanın tüm değişiklik geçmişini git ile görebilirsiniz.
Kaynak kod arşivlerinin depolandığı bir zula sunucusu var çünkü bu, inşa botlarının üst indirme sunucularını zorlamasından daha elverişlidir ve eğer üst sunucular ortadan kaybolursa diye yedektir. Bu kaynak kodlar inşa botlarınca kullanıldıklarından, onları kullanan sürümler desteklendikleri sürece zula sunucusunda saklamalıdır.
Kaynak kod zula sunucusu: https://sources.openwrt.org/