RPM Oluşturmak
.src.rpm'den RPM Mandrake İçin RPM Oluşturmak Tarball'dan RPM - muhasebeci

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

Tarball'dan RPM - gerbv

Buraya kadar kendimizden bir şey katmadan hazır spec dosyasını ve zaten işleme hazır paketi kullandık. Şimdi gerçekten kendi spec dosyamızı oluşturarak bir RPM oluşturacağız. Örnek olarak iki programı ele alacağız. İlki gerbv programı. Bu programın Mandrake Linux için hazırlanmış rpm paketi yok. İşe gerbv-1.0.0.tar.gz dosyasını indirmekle başlıyoruz. Ardından klasik kaynaktan kurulum yöntemini kullanarak ./configure, make ve make install aşamaları ile programımızı hatasız olarak kurup deniyoruz. Bu aşamayı başarıyla geçtiğimizde artık programın RPM paketini oluşturabiliriz.

Mandrake Linux bu durumlar için örnek bir spec dosyası sunuyor. Bu dosyayı gerbv.spec olarak kopyalayıp SPECS dizinimize yerleştirdikten sonra üzerinde gerekli değişiklikleri yaparak programımıza uygun hale getireceğiz.

%define name    gerbv
%define version 1.0.0
%define release 1mdk

# Macros for in the menu-file.
%define section Office/Drawing
%define title   Gerbv

%define Summary GPL gerber files viewer

Summary:        %Summary
Name:           %name
Version:        %version
Release:        %release
License:        GPL
Group:          Office
URL:            http://gerbv.sourceforge.net
Packager:       Tanju TASCILAR <tanju@elektronist.com>

Source0:        %name-%version.tar.bz2
Source1:        %name-icons.tar.bz2

BuildRoot:      %_tmppath/%name-buildroot

BuildRequires:	gtk+2-devel
Requires:       gtk+2

%description
Gerber Viewer (gerbv) is a viewer for Gerber files. Gerber files
are generated from PCB CAD system and sent to PCB manufacturers
as basis for the manufacturing process. 

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

%build
%configure
%make

%install
rm -rf %buildroot
%makeinstall

# Menu
mkdir -p %buildroot/%_menudir
cat > %buildroot/%_menudir/%name << EOF
?package(%name): \
command="%_bindir/%name" \
needs="X11" \
icon="%name.png" \
section="Office/Drawing" \
title="%title" \
longtitle="%Summary"
EOF

# icon
%__install -D -m 644 %{name}48.png %buildroot/%_liconsdir/%name.png
%__install -D -m 644 %{name}32.png %buildroot/%_iconsdir/%name.png
%__install -D -m 644 %{name}16.png %buildroot/%_miconsdir/%name.png

# Macro for locales
# If your rpm does not need this you can remove it.  Also change
# ``%files -f %name.lang'' to ``%files'' below.
%find_lang %name

%post
%update_menus

%postun
%clean_menus

%clean
rm -rf %buildroot

%files -f %name.lang

%defattr(0755, root, root, 0755)
%_bindir/*
%defattr(0644, root, root, 0755)

%doc COPYING README INSTALL AUTHORS

%_menudir/*

%_miconsdir/*
%_iconsdir/*
%_liconsdir/*

%changelog

* Tue May 25 2004  Stefan Petersen  

- src/draw_amacro.c: Now aperture macros handles exposures properly,
  so some thermals can be drawn properly. Inspired by discussion with
  Dimitri.

İlk şekil olarak spec dosyamızı yukardaki gibi değiştiriyoruz. (Bu dosya oluşabilecek hataları göstermek için bilerek farklı ve eksiktir.)

Spec dosyası oluşturulduktan sonra Mandrake Linux kurallarına uygun olarak yapacağımız başka hazırlıklar bulunmakta. Öncelikle kullandığınız dosya .tar.gz uzantılı ve gzip sistemi ile sıkıştırılmış. Mandrake Linux daha fazla sıkıştırma sağlayan bzip formatını kullanır. Bunun için .tar.gz dosyamızı bzip sıkıştırma yöntemine çevirerek gerbv-1.0.0.tar.bz2 şekline getirmemiz gerekiyor. Mandrake Linux'ta bunu iki kolay şekilde yapabiliriz. İlki grafik ortamda. Konqueror ile kurulum sırasında .tar.gz dosyasını açtığımız ve kurulum yaptığımız dizinin üzerine sağ tıklayıp Eylemler -> bziplenmiş tar Arşivi Oluştur seçeneğini kullanarak. İkincisi ise yine Mandrake Linux'un bzme yardımcısını kullanarak bu sefer konsolda

[tanju@gezgin gerbv]$ bzme gerbv-1.0.0.tar.gz
Compressing gerbv-1.0.0.tar.gz ... => gerbv-1.0.0.tar.bz2 (1016kb => 808kb)

komutu ile. Ancak ilkinde .tar.gz dosyası kalırken ikincisinde bunun silindiğine dikkat etmek gerekir. Ayrıca eğer bu dizinden klasik yöntemle kurulum yapmış isek oluşan binary dosyalar da kurulum dizinlerinde bulunacaktır. Bunu önlemek için kurulum sırasında .tar.gz dosyasının açıldığı gerbv-1.0.0 dizininde make distclean komutunu kullanmamız gerekir. Bu gerbv-1.0.0.tar.bz2 dosyasını rpm dizinlerinden SOURCES dizinine kopyalıyoruz.

Önceki aumix örneğimizde sistemde bulunan bir ikonu kullanmıştık. Burada kendi ikonumuzu kullanacağız. Bunun için gerbv-1.0.0.tar.gz paketinde olmasa da önceki sürümlerden 0.15 sürümünde bulunan gerbv48.png resmini kullanacağız. Bunun için gerbv-icons adlı bir dizin oluşturup gerbv48.png dosyasını oraya kopyalıyoruz. Ardından bu 48x48 boyutlarındaki ikonun 32x32 ve 16x16 olanlarını oluşturmamız gerekiyor. Bunu gimp gibi bir programla da yapabiliriz ama konsoldan da kolayca yaparız.

[tanju@gezgin gerbv-icons]$ ls
gerbv48.png
[tanju@gezgin gerbv-icons]$ convert -resize 32x32 gerbv48.png gerbv32.png
[tanju@gezgin gerbv-icons]$ convert -resize 16x16 gerbv48.png gerbv16.png
[tanju@gezgin gerbv-icons]$ ls
gerbv16.png  gerbv32.png  gerbv48.png
[tanju@gezgin gerbv-icons]$ tar cjf gerbv-icons.tar.bz2 *png
[tanju@gezgin gerbv-icons]$ ls
gerbv16.png  gerbv32.png  gerbv48.png  gerbv-icons.tar.bz2
[tanju@gezgin gerbv-icons]$

Oluşan gerbv-icons.tar.bz2 dosyasını da SOURCES dizinine kopyalıyoruz.

Hazırlıklarımız tamam olduğuna göre işleme başlayabiliriz. Kolay olsun diye SPECS dizininde konsolu açıyoruz ve aşağıdaki komut ile RPM oluşturma işlemini başlatıyoruz...

[tanju@gezgin SPECS]$ rpm -ba gerbv.spec

Sonunda normal olarak hata mesajlarıyla karşılaşıyoruz.

/bin/sh ../mkinstalldirs /usr/share/gerbv/scheme
mkdir /usr/share/gerbv
mkdir: `/usr/share/gerbv' dizini oluşturulamıyor: Permission denied
mkdir /usr/share/gerbv/scheme
mkdir: `/usr/share/gerbv/scheme' dizini oluşturulamıyor: No such file or directory
make[2]: *** [install-dist_scmdataDATA] Hata 1
make[2]: Leaving directory `/home/tanju/rpm/BUILD/gerbv-1.0.0/src'
make[1]: *** [install-am] Hata 2
make[1]: Leaving directory `/home/tanju/rpm/BUILD/gerbv-1.0.0/src'
make: *** [install-recursive] Hata 1
hata: /home/tanju/rpm/tmp/rpm-tmp.88966 çıkışında hata (%install)


RPM derleme hataları:
    /home/tanju/rpm/tmp/rpm-tmp.88966 çıkışında hata (%install)
[tanju@gezgin SPECS]$

Bu gibi durumlarla karşılaşmanız çok normal. Ne yazık ki program gelişiricileri eğer kendisi RPM oluşturmayı da denemedi ise bu gibi şeylerle ilgilenmiyorlar ve sorunları çözmek RPM oluşturucuya düşüyor. Burada sorun src/Makefile.am dosyasında yer alan automake-autoconf kurallarına uymayan dist_scmdata_DATA = init.scm satırından kaynaklanıyor. Normal kaynaktan kurulum sisteminde bu sorun ortaya çıkmadığı halde kuraldışılığından dolayı yapay root yerine sistemde gerçek yerinde /usr/share/gerbv/scheme dizinini oluşturmaya çalışırken hata elde ediliyor. Kaynaktan kurulumu incelediğimizde init.scm dosyasının bu dizine kopyalandığını görüyoruz. Aslında bu sorunu çözmenin birden fazla çözümü olabilir ama burada birini uygulayacağız.

Önce klasik kurulumu yaptığımız ve buradan .tar.bz2 dosyasını oluşturduğumuz dizinde bulunan src/Makefile.am dosyasında dist_scmdata_DATA = init.scm satırının başına # koyarak satırı açıklama haline getiriyoruz. Ardından kurulum dizini olan gerbv-1.0.0 dizininde autamake komutunu kullanıyoruz ve sonucun src/Makefile.in dosyasına geçmesini sağlıyoruz. Ardından gerbv-1.0.0 dizinini tekrar .tar.bz2 haline getirerek oluşan dosyayı SOURCES alanına kopyalıyoruz. Bundan sonra rpm kurulumunda init.scm dosyasının yerine yerleştirilmesi için gereken satırları ekleyeceğiz.

Dikkat edilirse kaynaktan kurulum sırasında programın /usr/local altına kurulduğunu görürüz. Ancak Mandrake Linux programları /usr dizini altına kurar. Bu nedenle de elle yapacağımız işlemde init.scm dosyasının /usr/local/share/gerbv/scheme dizini yerine /usr/share/gerbv/scheme dizinine kopyalanmasını ayarlamalıyız. gerbv.spec dosyasında makeinstall bölümünün altına aşağıdaki satırları ekliyoruz. Bu satırlar ile _datadir değişkeni ile belirli /usr/share dizini altına name yani gerbv dizini oluşturuluyor. Ardından bunun altında da scheme dizini oluşturuluyor ve src/init.scm dosyası buraya kopyalanıyor.

%makeinstall

mkdir $RPM_BUILD_ROOT/%_datadir/%name
mkdir $RPM_BUILD_ROOT/%_datadir/%name/scheme
cp src/init.scm $RPM_BUILD_ROOT/%_datadir/%name/scheme/

Veya bu üç satır yerine, aynı anlama gelen ama makroları kullanarak işlemi otomatik yapan aşağıdaki değişikliği yapıyoruz. Böyle bir işlem ile kullandığımız install makrosu mkdir/cp ikilisinin aksine bize kullanıcı hakları ve özellikleri üzerinde kontrol olanağı da sağlıyor.

%makeinstall

%__install -D -m 755 src/init.scm %buil