RPM Oluşturmak
Diğer Yöntemler Mandrake İçin RPM Oluşturmak Test ve Sonrası

RPM Oluşturmak - 050112
Tanju Taşçılar - tanju@elektronist.com
Registered Linux User #283274

Yamalar

RPM'ini oluşturduğunuz paket size ait değilse, RPM oluşturma sırasında yaptığınız değişiklikleri ayrıca belirtmeniz 'açık kaynak kodlu yazılımlar' için saygılı davranmanın gereğidir. Bunu patch-yama'lar aracılığı ile yaparız. RPM oluşturma sırasında yalnızca hataları düzeltme değil programda da değişiklikler yapabilirsiniz. Bu durumda yamaların kullanılması daha da büyük önem taşır.

Gerbv için yama çözümü

gerbv paketini hazırlarken küçük bir değişiklik yapmıştık. Şimdi bunu yama aracılığı ile uygulayalım. Yamalar için diff programı bulunmaktadır. Diff programı iki dosyayı veya iki dizin altındaki dizin ve programları karşılaştırarak farklılıkları gösteren bir dosya oluşturur. Benzeri bir uygulamayı gendiff komutu ile de yapabiliriz.

Farklılıkları bulmak ve bundan bir yama dosyası oluşturmak için diff programını kullanmadan önce programımızın tam olarak işlenmiş ve RPM oluşturma sorunları olmayan örneğinin yanında orijinal tarball'un açıldığı dizine de ihtiyacımız vardır. Örneğimizde üzerinde çalıştığımız gerbv-1.0.0 dizinini gerbv-1.0.0-patch olarak yeniden isimlendirip. Orijinal gerbv-1.0.0.tar.gz paketini tekrar açıp gerbv-1.0.0 dizinini elde ederiz. Yama dosyasını oluşturmak için:

diff -uNr gerbv-1.0.0 gerbv-1.0.0-patch > gerbv.patch

komutunu kullanırız. Bu komut ile oluşan gerbv.patch dosyasını gerbv.patch.tar.bz2 şeklinde sıkıştırılmış pakete çevirdikten sonra kullanabiliriz.

Bu işlemin biraz daha farklı şeklini gendiff ile yapabiliriz. Bu durumda RPM oluştururken sorun çıkaran src/Makefile.am ve src/Makefile.in dosyalarını değiştirilmemiş (orijinal) halleri ile src/Makefile.am.patch ve src/Makefile.in.patch olarak yeniden kopyalayalım. Hem src/Makefile.am hem de src/Makefile.in dosyalarını dist_scmdata_DATA = init.scm satırının önüne # koyarak değiştirelim. Sonuçta orijinal dosyaların arkasına .patch eki getirmiş ve diğerleri üzerinde gerekli değişiklikleri yapmış olduk. Şimdi gerbv-1.0.0 dizininin bir altında

gendiff gerbv-1.0.0 .patch > gerbv.patch

komutu ile gerbv.patch dosyasını oluşturalım. Bu dosya üzerinde sağ tıklayarak Eylemler -> bziplenmiş tar Arşivi Oluştur seçeneği ile gerbv.patch.tar.bz2 paketini oluşturup bunu SOURCES alanına kopyalayalım. Aynı şekilde orijinal gerbv-1.0.0.tar.gz dosyasının da .tar.bz2 şeklini SOURCES alanına (daha öncekinde değişiklikler yapmıştık) kopyalayalım. Bunun ardından gerbv.spec dosyasında Patch0: içeren satırları ekleyerek aşağıdaki değişiklikleri yapalım.

Source0:        %name-%version.tar.bz2
Source1:        %name-icons.tar.bz2
Patch0:		%name.patch.tar.bz2
%prep
%setup -q
%setup -q -T -D -a1 # unpack icons
%patch0 -p1 -b .patch

RPM'i yeniden oluşturduğumuzda elle yaptığımız değişikliğin yama dosyası ile yapıldığını ve RPM'lerimizin oluşturulduğunu göreceğiz.

Muhasebeci için yama çözümü

Muhasebeci örneğimizde normal olarak karşılaşmayacağımız bazı durumlar var. Bunları bilerek özel durumlara örnek olarak çözüm getirmek için kullanacağız. Muhasebeci'nin ilerki sürümlerinde bu gibi durumlarla karşılaşmayız.

Önce tarball içinde link olarak verilen dosyaları normal dosyalarla değiştirmek için normal dosyaları içeren bir kaynak paketi oluşturacağız. Bunun için (örnek sistemde mevcut olan) /usr/share/automake-1.8 dizininden gerekli dosyaları alıp bir tar.bz2 dosyası oluşturuyoruz.

[tanju@gezgin muhasebeci-pre]$ ls
compile*  COPYING  depcomp*  INSTALL  install-sh*  missing*
[tanju@gezgin muhasebeci-pre]$ tar cjf muhasebeci-fix-links.tar.bz2 *
[tanju@gezgin muhasebeci-pre]$ ls
compile*  depcomp*  install-sh*  muhasebeci-fix-links.tar.bz2
COPYING   INSTALL   missing*

Oluşturduğumuz muhasebeci-fix-links.tar.bz2 dosyasını SOURCES alanına kopyalıyoruz. Ardından muhasebeci.spec dosyasında kaynak dosyaların belirtildiği satırların altına aşağıdaki gibi Source2 satırını ekliyoruz.

Source0:        %name-%version.tar.bz2
Source1:        %name-icons.tar.bz2
Source2:	%name-fix-links.tar.bz2

Bunun açılması için de prep bölümüne -a2 içeren son satırı ekliyoruz.

%prep
%setup -q
%setup -q -T -D -a1 # unpack icons
%setup -q -T -D -a2

Yaptığımız değişikliklerin etkisini görebilmek için orijinal dosyadaki linkleri, üzerinde çalışmalarımızı yaptığımız muhasebeci-0.5.5 dizininde düzelttiğimiz dosyaların üzerine kopyalayıp, işlemi prep bölümünün sonuna kadar yapan parametre olarak -bp kullandığımızda aşağıdaki sonucu elde ediyoruz.

[tanju@gezgin SPECS]$ rpm -bp muhasebeci.spec
%prep icra ediliyor: /bin/sh -e /home/tanju/rpm/tmp/rpm-tmp.7391
+ umask 022
+ cd /home/tanju/rpm/BUILD
+ cd /home/tanju/rpm/BUILD
+ rm -rf muhasebeci-0.5.5
+ /usr/bin/bzip2 -dc /home/tanju/rpm/SOURCES/muhasebeci-0.5.5.tar.bz2
+ tar -xf -
+ STATUS=0
+ '[' 0 -ne 0 ']'
+ cd muhasebeci-0.5.5
+ cd /home/tanju/rpm/BUILD
+ cd muhasebeci-0.5.5
+ /usr/bin/bzip2 -dc /home/tanju/rpm/SOURCES/muhasebeci-icons.tar.bz2
+ tar -xf -
+ STATUS=0
+ '[' 0 -ne 0 ']'
+ cd /home/tanju/rpm/BUILD
+ cd muhasebeci-0.5.5
+ /usr/bin/bzip2 -dc /home/tanju/rpm/SOURCES/muhasebeci-fix-links.tar.bz2
+ tar -xf -
+ STATUS=0
+ '[' 0 -ne 0 ']'
+ exit 0

Görüldüğü gibi üç adet kaynak paketimiz BUILD alanımızda muhasebeci-0.5.5 dizinine açılmış oluyor. Bu dizine bakıp linklerin gerçek dosyalar ile değiştiğini görebilirsiniz.

Orijinal pakette authors, install, news, readme, todo adlı dosyalar hem büyük hem de küçük harfler ile olduğu ve bunların büyük harflerle olanlarının daha uygun olduğu gerekçesi ile küçük olanlarını silmiştik. Orijinal dosyaya dokunmadan bu işi yapmak için spec dosyasında prep bölümüne bunları silen aşağıdaki satırları ekliyoruz.

rm authors
rm install
rm news
rm readme
rm todo

Yapılan işlemin sonucunu denemek için yine bu dosyaları muhasebeci-0.5.5 dizinine kopyalayıp yeniden oluşturduğumuz .tar.bz2 dosyasını SOURCES bölümüne yopyalayıp (Dışarda kalan sıradışı mkinstalldirs dosyasını unutmadan) yukardaki komutu tekrar kullanıp son satırlarda bunu görebiliriz.

+ rm authors
+ rm install
+ rm news
+ rm readme
+ rm todo
+ exit 0

Yine BUILD alanında muhasebeci-0.5.5 dizinine baktığımızda bu dosyaların silinmiş olduğunu görürüz.

RPM içine sistemde gerekli olmayan veya yanlış yerlere yüklenen dosyaları yerleştiren sorunu gidermek için yaptığımız değişikliği ise bir yama dosyası oluşturarak çözmemiz gerekiyor. Değişiklik yaptığımız orijinal Makefile.am ve bu değişiklikten sonra automake uygulayarak değiştirdiğimiz Makefile.in dosyasının orijinalini muhasebeci-0.5.5 dizinine sonları .patch olacak şekilde kopyalıyoruz. Bunlardan bir patch dosyası oluşturmak için gerbv örneğinde olduğu gibi gendiff komutunu kullanarak muhasebeci.patch dosyasını oluşturuyoruz.

[tanju@gezgin muhasebeci]$ gendiff muhasebeci-0.5.5 .patch > muhasebeci.patch

Bunu yine gerbv örneğinde olduğu gibi muhasebeci.patch.tar.bz2 haline getirip SOURCES alanına kopyalıyoruz.

Spec dosyasında kaynaklar altına Patch0 satırını

Source0:        %name-%version.tar.bz2
Source1:        %name-icons.tar.bz2
Source2:	%name-fix-links.tar.bz2
Patch0:		%name.patch.tar.bz2

prep bölümüne de yine patch0 bulunan satırı ekliyoruz.

%prep
%setup -q
%setup -q -T -D -a1 # unpack icons
%setup -q -T -D -a2
rm authors
rm install
rm news
rm readme
rm todo
%patch0 -p1 -b .patch

Sonucu görebilmek için son bir adım olarak Makefile.am ve Makefile.in dosyalarının orijinalleri kalacak şekilde muhasebeci-0.5.5 dizininde değişiklikleri yapıp muhasebeci-0.5.5.tar.bz2 dosyasını yeniden oluşturup SOURCES alanına kopyalıyoruz. Aslında bu durumda artık orijinal dosyayı kullanıyor gibiyiz. Bu durumda RPM oluşturduğumuzda beklenen sonuca varıp muhasebeci-0.5.5-YTLmdk.i586.rpm ve .src.rpm dosyalarımızı elde ederiz.

 


Diğer Yöntemler Ön sayfa Test ve Sonrası
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