| RPM Oluşturmak | ||
|---|---|---|
| Sistem Hazırlığı | Mandrake İçin RPM Oluşturmak | Yöntemler |
RPM Oluşturmak - 050112
![]()
Tanju Taşçılar - tanju@elektronist.com
Registered Linux User #283274
Spec Dosyası
RPM paketi oluşturmanın merkezinde, aslında yapılacak işlemlerin listesi olan ve uzantısı genellikle .spec olduğu için specfile adı verilen dosyanın düzenlenme işlemi bulunmaktadır. RPM oluşturmanın kilidi bu dosyanın oluşturulmasıdır diyebiliriz. Burada örnek olarak aumix paketinin spec dosyasını ele alacak ve onun üzerinden açıklamalarımızı yapacağız.
%define version 2.8
%define release 7mdk
Name: aumix
Summary: A GTK+/Ncurses audio mixer
Version: %{version}
Release: %{release}
License: GPL
Group: Sound
BuildRequires: ncurses-devel
BuildRequires: gtk+2-devel
Source0: http://www.jpj.net/~trevor/aumix/%{name}-%{version}.tar.bz2
# mute(1) man page (from debian):
Source1: aumix-mute.1.bz2
Patch0: aumix-2.7-devfs-compliant.patch.bz2
Patch1: aumix-2.8-utf8_vs_gtk2.patch.bz2
Patch2: aumix-2.8-close-dialogs.patch.bz2
URL: http://www.jpj.net/~trevor/aumix.html
Requires: initscripts >= 4.42
BuildRoot: %{_tmppath}/%{name}-%{version}-droot
%description
This is a program for adjusting audio mixers from the command line or scripts,
or interactively at the console or a terminal with a full-screen, ncurses-based
interface or a GTK-based X interface.
%prep
%setup -q
%patch0 -p1 -b .devfs
%patch1 -p1 -b .utf8
%patch2 -p0 -b .dialogs
# (gc) move "xaumix" to "taumix"
perl -pi -e 's|xaumix|taumix|g' doc/{*aumix.1,Makefile.am} src/{Makefile.am,xaumix}
mv doc/xaumix.1 doc/taumix.1
mv src/xaumix src/taumix
aclocal-1.4
automake-1.4 --gnu --include-deps src/Makefile
WANT_AUTOCONF_2_1=1 autoconf
%build
%configure --with-alsa --without-gtk1
%make
%install
rm -rf $RPM_BUILD_ROOT
%makeinstall
# menu entry
mkdir -p %buildroot/%_menudir
cat > %buildroot/%_menudir/%name << EOF
?package(%name): \
command="%_bindir/%name" \
needs="X11" \
icon="sound_section.png" \
section="Multimedia/Sound" \
title="Aumix" \
longtitle="Audio Mixer based on GTK+ and NCurses"
EOF
bzcat %SOURCE1 > $RPM_BUILD_ROOT%_mandir/man1/mute.1
%find_lang %name
%post
%update_menus
%postun
%clean_menus
%clean
rm -rf $RPM_BUILD_ROOT
%files -f %{name}.lang
%defattr(-,root,root)
%doc README TODO NEWS ChangeLog
%_bindir/*
%_mandir/man1/*
%_datadir/%name
%_menudir/*
%changelog
* Wed Jan 28 2004 Abel Cheung |
(Burada changelog kısmının devam eden satırları gösterilmemektedir.)
Bir spec dosyası
%ile başlayan çeşitli anahtar kelimeler içerir. Bunların bir kısmı bölüm başlığı iken bir kısmı da çalıştırılacak scriptlerdir. Kullandıkça bu karmaşık görünen yapıya alışacaksınız. Burada kullanılan makro scriptleri ile ilgili geniş bilgi ve tanımları /usr/lib/rpm/macros dosyasında bulabilirsiniz.
İlk bölümde programın version ve release olarak sürüm bilgileri yer almakta. Başlık olarak adlandırılabilecek bu bölümde dosyanın kalanında kullanılmak üzere değişkenler tanımlanmaktadır. Ayrıca Summary-Özet ile programın kısa bir tarifi yapılmaktadır.
%define version 2.8
%define release 7mdk
Name: aumix
Summary: A GTK+/Ncurses audio mixer
Version: %{version}
Release: %{release} |
Eğer RPM paketinizin Mandrake Linux'ta resmen kullanılmasını hedefliyorsanız GPL lisanslı olmasına dikkat etmeniz gerekir.
License: GPL |
Mandrake Linux'ta program grupları RedHat veya diğer rpm kullanan dağıtımlardan farklıdır. Eğer Mandrake Linux grupları yerine mesela RedHat gruplarını kullanırsanız sisteminizi karıştırmaktan başka bir işe yaramayacaktır. Mandrake Linux program gruplarının listesine buradan ulaşabilirsiniz: MandrakeGroups
Group: Sound |
RPM oluşumu sırasında gösterilen kaynaklar derlenecektir. Aynı kaynaktan kurulum gibi derleme sırasında sistemde kurulu olması gereken paketler burada belirtilmektedir. Bunlar genellikle tarball içinde yer alan ve genellikle INSTALL dosyasında programın geliştiricisi tarafından belirtilen paketler olacaktır. Derleme sırasında özellikle -devel paketlerinin gerekli olduğuna dikkat edilmelidir.
BuildRequires: ncurses-devel BuildRequires: gtk+2-devel |
Bir programın RPM paketi oluşturulması sırasında programın tarball'u dışında başka kaynak ve yama paketleri de kullanılabilir. Kaynak paketleri genellikle Sourcex, yama paketleri de Patchx şeklinde belirtilir. Source0 satırında yer alan URL kullanım sırasında dikkate alınmaz ve
%{name}-%{version}.tar.bz2kısmı kullanılır.
Source0: http://www.jpj.net/~trevor/aumix/%{name}-%{version}.tar.bz2
# mute(1) man page (from debian):
Source1: aumix-mute.1.bz2
Patch0: aumix-2.7-devfs-compliant.patch.bz2
Patch1: aumix-2.8-utf8_vs_gtk2.patch.bz2
Patch2: aumix-2.8-close-dialogs.patch.bz2 |
URL ile GPL lisansına uygun olarak programın kaynak kodlarına erişilecek adres belirtilmelidir.
URL: http://www.jpj.net/~trevor/aumix.html |
Requires satırı ile derleme sırasında gerekmediği halde paket kurulurken veya kurulduktan sonra çalışması için sistemde kurulu olması gereken paketler belirtilir.
Requires: initscripts >= 4.42 |
BuildRoot, RPM oluşturulması sırasında kullanılan 'sahte' root dizinini belirtmek için kullanılır ve önemlidir. Burada geçici alanda sonu paket adı + sürümü + drood uzantısı ile bir dizin içinde çalışılacaktır. İşlemler hatasız bittiğinde ise bu dizin silinir. (clean bölümünde)
BuildRoot: %{_tmppath}/%{name}-%{version}-droot |
Description - Tanım bölümünde programın genişçe bir tanımı yapılır. Burada uluslararası uyum için İngilizce kullanılması daha uygundur.
%description This is a program for adjusting audio mixers from the command line or scripts, or interactively at the console or a terminal with a full-screen, ncurses-based interface or a GTK-based X interface. |
Prep - Hazırlık bölümü rpm kurulumunda gerçek işlemlerin başladığı bölümdür. Önce Sourcex ve Patchx paketleri açılır. Ardından bölümün kalanında varsa bulunan komutlara göre gerekli işlemler yapılır. Örneğimizde xaumix dizini taumix dizinine aktarılıyor. aclocal, automake ve autoconf uygulanıyor.
%prep
%setup -q
%patch0 -p1 -b .devfs
%patch1 -p1 -b .utf8
%patch2 -p0 -b .dialogs
# (gc) move "xaumix" to "taumix"
perl -pi -e 's|xaumix|taumix|g' doc/{*aumix.1,Makefile.am} src/{Makefile.am,xaumix}
mv doc/xaumix.1 doc/taumix.1
mv src/xaumix src/taumix
aclocal-1.4
automake-1.4 --gnu --include-deps src/Makefile
WANT_AUTOCONF_2_1=1 autoconf |
Build bölümünde prep bölümünde açılıp işlenmiş pakete configure ve make işlemleri uygulanıyor.
%build %configure --with-alsa --without-gtk1 %make |
Yeni başlayan install bölümünde
$RPM_BUILD_ROOTdeğişkeni ile belirlenen ve rpm/BUILD dizini altında paket adı ile tanımlı dizine derlenmiş ve işlenmiş paketin sanki normal bir sisteme kurulurmuş gibi kurulumu yapılıyor. Bunun için ilk olarak önceki çalıştırmalardan kalanlar temizleniyor. Ardından da yerleştirme yapılıyor.
%install rm -rf $RPM_BUILD_ROOT %makeinstall |
Mandrake Linux'ta sıradan RPM kullanan dağıtımlardan farklı olarak bir paket kurulduğunda otomatik olarak menü sistemine de giriş yapılır. Mandrake Linux'un menü yapısı Debian'dan alınmıştır. Kurulan programın adı ile burada oluşturulan dosya /usr/lib/menu dizinine yerleştirilerek programın menü sistemine kaydolması sağlanır. Mandrake Linux'ta menü sistemi masaüstü yöneticisinden bağımsız hale getirilmiştir. Genellikle RedHat usulü hazırlanmış paketlerde .desktop uzantılı masaüstü kısayol dosyaları bulunur ve paket kurulduktan sonra bunlar elle kullanılır. Mandrake Linux için buna hiç gerek yoktur. Kurulmuş bir program için masaüstünüze kısayol yerleştirmek istiyorsanız, bunun en kolayı KMenu (veya eşdeğeri) içinden bulunan giriş sürüklenip masaüstüne bırakılarak giriş oluşturmaktır. Bu örnekte sistemde bulunan hazır ikonlardan biri, sound_section.png kullanılmaktadır. Daha sonra göreceğimiz örneklerde başka ikonların kullanımı da anlatılacaktır. Mandrake Linux menü sistemi hakkında daha geniş bilgi için: MandrakeMenu
# menu entry mkdir -p %buildroot/%_menudir cat > %buildroot/%_menudir/%name << EOF ?package(%name): \ command="%_bindir/%name" \ needs="X11" \ icon="sound_section.png" \ section="Multimedia/Sound" \ title="Aumix" \ longtitle="Audio Mixer based on GTK+ and NCurses" EOF |
Burada install sırasında bir yama uygulanmaktadır.
bzcat %SOURCE1 > $RPM_BUILD_ROOT%_mandir/man1/mute.1 |
Bu script ile programın varsa farklı dillerde desteği kurulmaktadır.
%find_lang %name |
Post bölümünde paket sisteme kurulduktan sonra yapılacak işlemler yer alır. Burada kullanılan update_menus scripti ile /usr/lib/menu/program_adı olarak sisteme yerleştirilen menü girişinin menü sistemine eklenmesi sağlanmaktadır. Aynı şekilde postun bölümünde paketin kaldırılmasından sonra yapılacak işlemler yürütülür. Burada clean_menus scripti ile paketin menü sisteminden çıkarılması sağlanmaktadır. Clean bölümünde ise işlemler tamamlandığında geçici dosyaların ve dizinlerin silinmesini sağlar.
%post %update_menus %postun %clean_menus %clean rm -rf $RPM_BUILD_ROOT |
Files bölümü kurulum sırasında sisteme yüklenen dosyaların bir tür listesidir. Sıradan RPM hazırlamada buradaki dosyalar geçici alana kurulanlara bakılarak elle girilirken, Mandrake Linux bu konuda da çeşitli scriptler aracılığı ile kolaylık sağlamaktadır.
%files -f %{name}.lang
%defattr(-,root,root)
%doc README TODO NEWS ChangeLog
%_bindir/*
%_mandir/man1/*
%_datadir/%name
%_menudir/*
|
Spec dosyasında son olarak yer alan bölüm sürümlerde yapılmış değişikliklerin özetini içeren changelog bölümüdür. Burada da Mandrake Linux'un kendi kuralları geçerlidir. Yazılış biçimi örnekte görüldüğü gibi olmalıdır. Aksi halde zaten hata mesajı ile durum bildirilir.
%changelog * Wed Jan 28 2004 Abel Cheung |
Örneğimizdeki aumix programına ait spec dosyasının kısa açıklaması size spec dosyasının içeriği hakkında biraz bilgi vermek içindi. Bu dosyaları hazırlamada ilerlemenin en iyi yolu mevcut spec dosyalarını incelemektir.
| Sistem Hazırlığı | Ön sayfa | Yöntemler |
| Mandrake İçin RPM Oluşturmak |
Bu ve ilişkilendirilmiş yazılar GPL lisansına göre yayınlanmaktadır. Bütün hakları yazarına aittir. Yazarının ismi belirtilerek serbestçe dağıtılabilir ve kullanılabilir. Ancak bunların hiçbiri, hiçbir şekilde ve şartta GPL lisansı haricinde kullanılamaz. Burada yer alanları bulundurmaktan, kullanmaktan veya alıntı yapmaktan dolayı hiçbir sunucu, servis veya protokol, yazı veya içeriği üzerinde hak iddia edemez. info@elektronist.com