Linux kullanıcılarının (en azından bir kısmının) görmeye alışkın olduğu bir paket türü vardır: RPM
RPM haline getirilmiş bir paketi kurmak genellikle zor değildir. Paketi hazırlayan kişi ya da kişiler zaten sizin işinizi en kolay şekilde halletmeniz için uğraşmış oluyorlar. Peki biz kendimiz bu paketlerden hazırlamak için ne yapmalıyız?
Aşağıda yazdıklarım adım adım takip edeceğiniz bir kılavuz değildir. Ama RPM paketleri hazırlamak istiyorsanız mutlaka bilmeniz gereken konuları anlatacağım. Detaylarla ilgili aklınıza takılan sorular olursa serdar.tugcu[at]portakalteknoloji.com adresine mail atabilirsiniz.
RPM nedir?
RPM(Rad Hat Package Manager), Red Hat tarafından geliştirilen bir paket yönetim sistemidir. Bu sistem hem sistemdeki paketleri yönetmek, hem de yeni paketler oluşturmak için kullanılabilir. Bu paketler sadece sizin program kurmanızı kolaylaştırmakla kalmaz, aynı zamanda kurduğunuz programın sistem tarafından daha kolay tanınmasını da sağlar.
RPM paketi nasıl kurulur?
RPM paketi kurmak günümüzdeki linux sürümlerinde sadece arayüzle bile yapılabilen bir iştir. Fakat komut satırından kurmak da hiç de zor değildir.
rpm –I [packagename].rpm
Eğer daha önceden kurduğunuz bir paketi yükseltmek istiyorsanız, -U parametresiyle amacınıza ulaşabilirsiniz.
rpm –U [packagename].rpm
Kurulmuş paket nasıl kaldırılır?
Daha önceden kurulan bir paketi kaldırmak oldukça kolay bir iştir. Tek yapmanız gereken –i parametresini kullanmaktır.
rpm –e [packagename].rpm
RPM nasıl oluşturulur?
Geldik işin en önemlli kısımına. RPM nasıl oluşturulur? Öncelikle, RPM paketini oluşturacağınız kodun sorunsuz derlenebilen bir kod olması gerekir. Malum koda sahip olduğunuzu varsayarak devam ediyorum:
Bir RPM paketi oluşturmak istiyorsanız, temel olarak iki şeye ihtiyacınız vardır: kaynak kodları ve paketiniz için yazılmış bir SPEC dosyası. Kaynak kodunuzda bir sorun olmadığından yola çıkarak, SPEC dosyasından işe girişelim.
SPEC dosyası, yazılımınızın nasıl ve nereye kurulacağına, hangi ek özelliklere sahip olması gerektiğine ve buna benzer bilgilere sahip olan dosyadır. SPEC dosyasının alışılan isimlendirme yöntemi şudur:
[isim]-[versiyon]-[sürüm numarası].spec
Yukarıdaki yapı zorunlu olduğunuz bir yapı değildir. Fakat yazılımcılar iyi bilir ki mevcut yazılımınız asla son sürüm değildir. Farklı sürümlerin spec dosyaları arasında kaybolmamanız için bu yapıyı tavsiye ediyorum.
Örnek bir SPEC dosyası şablonu:
Summary: [Yazılımın özetini yapan yazılar]
Name: [Yazılımın ismi]
Version: [versiyonu]
Release: [sürüm]
Copyright: [Genellikle GPL olur ]
Group: [sistemin hangi grubuna gireceği]
Source: [kaynak kodunun yolu]
BuildRoot: [kaynak kodunun derleneceği yol]
%description
[Yazılımla ilgili açıklama burada yapılacaktır]
%prep
%setup -q
%patch -p1 -b .buildroot
%build
make RPM_OPT_FLAGS="$RPM_OPT_FLAGS"
%install
rm -rf $RPM_BUILD_ROOT
mkdir -p $RPM_BUILD_ROOT/usr/bin
mkdir -p $RPM_BUILD_ROOT/usr/man/man1
install -s -m 755 [isim] $RPM_BUILD_ROOT/usr/bin/[isim]
install -m 644 [isim].1 $RPM_BUILD_ROOT/usr/man/man1/[isim].1
%clean
rm -rf $RPM_BUILD_ROOT
%files
%defattr(-,root,root)
%doc README TODO COPYING ChangeLog
/usr/bin/[isim]
/usr/man/man1/[isim]
%changelog
[değişiklik yapılacaksa, açıklamalar burada yazılır]
Header (Başlık) kısmı:
Summary: Paketin tek satırlık açıklaması
Name: RPM paketinin ismi
Version: Versiyon numarası
Release: Sürüm numarası
Copyright: Yazılımın yayın hakkı türü
Group: Paketin dahil olduğu grup
Source: Kaynak kodlarının yolu [ya da ismi]
Patch: Yamayı bulabileceğiniz yer
İlk beş başlığın açıklamaya ihtiyaç duymadığını düşünüyorum. Bu nedenle ilk olarak Group başlığını açıklamaya başlıyorum:
Group:
Programın nereye kurulması gerektiğini belirten başlık. Başlıkların neler olduğunu görmeniz için aşağıdaki tabloya bakınız.
Amusements/Games
Amusements/Graphics
Applications/Archiving
Applications/Communications
Applications/Databases
Applications/Editors
Applications/Emulators
Applications/Engineering
Applications/File
Applications/Internet
Applications/Multimedia
Applications/Productivity
Applications/Publishing
Applications/System
Applications/Text
Development/Debuggers
Development/Languages
Development/Libraries
Development/System
Development/Tools
Documentation
System Environment/Base
System Environment/Daemons
System Environment/Kernel
System Environment/Libraries
System Environment/Shells
User Interface/Desktops
User Interface/X
User Interface/X Hardware Support
Buildroot:
Bu başlık, sizin bir klasörü derleme ve yükleme için kök dizini olarak belirlemenizi sağlar. Bu başlık sizin paketi son yüklemeden önce denemenize izin verir.
%description:
Bu aslında gerçek bir başlık değildir. Yazılımınızın açıklamasını buraya yazmalısınız.
Prep (hazırlık) kısmı:
Bu bölüm, kaynak kodlarının derlemeye hazır hale getirildiği bölümdür. Bu bölümde herşeyi doğru yaparsanız, programınızın ‘make’ komutuna hazır hale gelmesini sağlarsınız.
Burada şunu da belirtmeliyim:
%prep kısmı, temel olarak hazırlık kısmıdır. Dolayısıyla bu kısım sistemi de derlemeye hazır hale getirmenizi sağlayan kısımdır. Dolayısıyla kabuk komutları bu bölümde çalıştırılabilir. Bir sh script yazıp bunu %prep etiketinin altına yerleştirerek çalışmasını sağlayabilirsiniz.
Bu kısımda kullanabileceğiniz bazı makrolar vardır.
Bunlardan ilki %setup makrosudur. Bu makro, kaynak kodlarını açar ve kaynak kodlarının açıldığı dizine gider. %setup makrosuyla birlikte kullanabileceğiniz bazı parametreler de mevcuttur. Bu parametreletden işinize yarayanları eklemek hayatınızı kolaylaştıracaktır.
%patch makrosu da kaynaklarınıza yama eklemenizi sağlar. Bu makro da bazı parametreler alabilir.
Bu makrolardan sonra da yazdığınız sh scriptlerini ekleyebilirsiniz. %build kısmına gelene kadar eklediğiniz herhangi bir satır eğer bir yorum satırı değilse sh vasıtasıyla çalışacağını da unutmayın.
Build:
Burada kullanabileceğiniz herhangi bir makro yoktur. Bir önceki kısımda kaynak kodlarınızı açıp, onların bulunduğu dizine gitmiştiniz. Buraya yazacaklarınız da sh kullanılarak çalıştırılır ve kodunuzun derlenmesini sağlar.
Install:
Bu kısımda da makro kullanımı yoktur. Eğer doğru bir şekilde buraya geldiyseniz, kaynak kodunuz derlenmiş demektir. Buraya yazacağınız satırlar, derlenen kodun yüklenmesini sağlar. Mesela Linux için hazırlanmış yazılımlarda sıkça kullanılan “make install” komutunu çalıştırmak istiyorsanız, burada çalıştırabilirsiniz.
Sistemi temizlemek(Clean):
İşiniz bittiğinde sistemi temizlemek her zaman için iyi bir alışkanlıktır. Bunun için de bu kısma komutlar yazarak istemediğiniz dosyaları ya da klasörleri silebilir, sisteminizi bir sonraki paket kurulumları için temiz hale getirebilirsiniz.
Yukarıda anlatılanlar, RPM paketi yapma konusunda size sadece fikir vermek ve temel bilgi oluşturmak için yazılmıştır. Daha detaylı bilgi edinmek isterseniz bu konuyla ilgili kaynak kitapların ilgili bölümüne başvurmanızı tavsiye ederim. Ayrıca diğer bütün Linux işlerinde olduğu gibi “man” komutunu da unutmamanızı tavsiye ederim. Ayrıca serdar.tugcu[at]portakalteknoloji.com adresinden bana ulaşabilir, sorularınızı gönderebilirsiniz.
Tags: Linux RPM paketi