RPM Oluşturmak 06 February 08, Wednesday @ 13:09

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.

  1. 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.

  1. 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


  1. 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


  1. 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 

Comments

Post a comment (max. 3000 character)

Your name: Comment:
Number of remaining characters: