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/tan