Synopsis: Bu belge, Mageia Linux için uygulama paketlerinin hazırlanmasında kısa ve özet bir rehber olması amacıyla hazırlanmıştır. Burada; RPM paketlerinin oluşturulması doğaldır ki, Mageia Linux' a göre anlatılmıştır. Ancak, diğer RPM temelli dağıtımlar için paket hazırlamak isteyenlere yardımcı olabilecek bilgiler vermektedir. RPM paketlerinin oluşturulması, dikkat isteyen ve belirli kurallara bağlı olan bir işlemdir. Çeşitli uygulamaların ama özellikle kütüphanelerin sistemde yer alış biçimi ve derlenme özellikleri çeşitli kurallarla sıkı sıkıya bağlıdır. Bu kuralların varlığı, paketlerin bir standarda tabi olmasını, dolayısıyla sistemin kararlılığını bozmayacak yapıda olmalarını sağlamak içindir. RPM paketlerini oluşturacak olanların bu kurallara uymaları çok önemlidir. Bu makalede paketleme konusunda rehberlik etmek amacıyla özet olarak yazılmıştır. Bu nedenle paketleme kuralları ve diğer önemli konular bu makaleye alınmamıştır. Bu konular için Paketleme sayfasındaki bağlantıları takip etmeniz yararlı olacaktır. |
Warning! RPM paketlerini kök kullanıcı olarak derlemek oldukça tehlikeli bir iştir. Sisteminiz çökebilir. Paketleme işlemi mutlaka normal kullanıcı olarak gerçekleştirilmelidir! |
Contents
- 1 Ön Söz
- 2 Temel Bilgi
- 3 Öncelikli İşlemler
- 4 Paket Oluşturma
- 5 Bir RPM Paketini Denetlemek
- 6 Kurulum Öncesi (Pre-installation) ve Kurulum Sonrası (Post-installation) Betikleri
- 7 RPM Dosya Tetikleyicileri
- 8 Daha fazla makro
- 9 Urpmi ve rpmdrake ile etkileşime girmek
- 10 RPM paketlemede bir başka yol : checkinstall
- 11 Yararlı Dış Bağlantılar
- 12 Kaynak
Ön Söz
Bu makale hazırlanırken; okuyucunun "linux kullanımını bilen", temel komutlarına, linux dizin yapısına aşina olan ve en azından yazılım kurmak için rpm kullanmış bir kişi olduğu varsayılmıştır.
Bu makalede Mageia Linux için gerek src.rpm paketlerinden gerekse uygulamanın kendi kaynak kodlarından RPM paketi oluşturma işlemleri anlatılmaktadır.
RPM temelde üç şeyi ifade eder:
- paketleri kurmak veya kaldırmak için tasarlanmış bir uygulama;
- rpm uygulaması tarafından oluşturulan paketlerin (kaynak veya ikili) biçimi;
- Uygulamanın nasıl kurulacağını veya kaldırılacağını açıklayan bir dosya ile beraber uygulamanın kaynak kodu veya ikili çalıştırılabilir dosya içeren paket.
Kullanıcı açısından rpm
uygulaması, rpm paketleri üzerinde çalışan bir uygulamadır. Pek çok işlevi yanında temel işlevleri:
- bağımlılıkları denetleyerek paketi kurmak veya kaldırmak,
- bir paketi kurarken, uygulamanın kullanıma hazır hale getirilmesi için gerekli işlemleri yapmak,
- bir pakete ait olup da kazara silinmiş dosyaları yeniden yüklemek,
- bir paketin önceden kurulmuş olup olmadığını denetlemek,
- belli bir dosya ile ilgili paketi bulmak v.b.
Geliştiriciler açısından ise, rpm uygulaması verilen işletim sistemi platformunda uygulamanın kurulabilmesi için gerekli tüm dosya ve bilgileri tek bir rpm paketi içine yerleştiren bir paketleyicidir.
Kaynak kodlarını içeren ( .src.rpm ) ve ikili ( .<işlemci_mimarisi>.rpm ) paketleri iyi anlamak gereklidir.
İlki, adından da tahmin edebileceğiniz gibi, özgün yazılım kaynak kodlarını ve uygulamanın yapılandırılmasını, derlenmesini ve kurulmasını sağlayan her türlü ek dosyayı ve yamaları (varsa) içerir. Ayrıca, rpm paketinin oluşturulması için zorunlu olan; gerekli yamaların uygulanmasını, kaynak kodların derlenmesi için gerekli işlemleri, hangi yamaların yapılacağını, dosyaların kurulumda hangi dizine yerleşeceğini ve diğer talimatları barındıran .spec dosyasını barındırır.
İkincisi ise derlenmiş ve kuruluma hazır ikili dosyaları ve belgeler, simgeler, yapılandırma dosyaları v.b. dosyaları içerir. Ayrıca, dosyaların doğru dizinlere yerleştirilmesini sağlar ve uygulamanın düzgün biçimde çalıştırılabilmesi için gerekli işlemleri yapar.
Temel Bilgi
Asıl olarak RPM Red Hat Linux için geliştirilmişse de diğer dağıtımlarda da (Mageia, Suse, gibi) ; kullanılmaktadır.
Özgün RPM kaynak kodlarına buradan ulaşabilirsiniz.
Warning! Şu anda iki farklı geliştirici grubu tarafından geliştirilmesi süren iki farklı RPM uygulaması vardır. İlki Red Hat bünyesinde geliştirilen RPM diğeri ise Red Hat' in eski çalışanlarından olup şirketten ayrılan eski bir rpm geliştiricisi olan Jeff Johnson ve ekibince geliştirilen RPM5 projeleridir. Mageia Linux diğer pek çok dağıtım gibi (OpenSuse, Fedora v.b.) Red Hat' in geliştirdiği rpm uygulamasını kullanmaktadır. |
Mageia Linux için oluşturacağınız rpm
paketleri diğer dağıtımlarla uyumlu olmayacaktır. Çünkü hem Mageia Linux hem de diğer dağıtımların kendine özgü yapılandırmaları vardır.
Kavramlar
- Makro (rpm macro) : RPM .spec dosyalarında kullanılan temel değişkenlerdir. Bunlar bir dizini (%{_datadir} : /usr/share); bir komutu (%{__rm} : /usr/bin/rm) veya bir ufak betiği (%{configure}) ifade ederler. Böylece; .spec dosyası RPM tarafından işlenirken, makronun ifade ettiği değer yerinde kullanılır. Makrolar, Mageia Linux işletim sisteminde
/etc/rpm/macros.d
dizini içinde yer alan dosyalarda tanımlanmışlardır.
Makrolar, rpm paketlerinde belirli bir standartı sağlamak için kullanılırlar. Böylece farklı bilgisayarlara kurulan rpm paketleri kendilerinden beklenen amacı doğru biçimde yerine getirirler. Ayrıca, makrolar vasıtasıyla, pek çok işlem hızlı ve basit biçimde yerine getirilir.
Note:%setupmakrosu .spec dosyalarının olmazsa olmaz makrosudur. Bu makro, makalenin devamında anlatılacağı üzere, varsa eski derleme dizinini siler, yeni bir derleme dizini oluşturur, kaynak arşivi derleme dizinine açar ve kabuk ortamında derleme dizinine giriş yapar. .spec dosyasında sadece %setup satırı yazmamız bu işlemler için yeterlidir. Makro kullanmasaydık, örneğin abc-1.2 uygulamasını paketlemek için .spec dosyamıza şunları yazmak zorunda kalacaktık: cd ~rpm/BUILD rm -rf abc-1.2 gzip -dc ~rpm/SOURCES/abc-1.2.tar.gz | tar -xvvf - if [ $? -ne 0 ]; then exit $? fi cd abc-1.2 cd ~rpm/BUILD/abc-1.2 chown -R root.root . chmod -R a+rX,g-w,o-w . |
- Kaynak arşiv (source archive): Paketlenecek uygulamanın kaynak kodlarının yer aldığı dosyaları barındıran ve genellikle tar.bz2 veya tar.gz biçimindeki sıkıştırılmış dosyalardır.
- Yama (patch) :Bir uygulamanın belirli özelliklerini değiştirmek veya bir hatayı düzeltmek için
patch
veyadiff
araçları ile oluşturulan fark dosyalarıdır. Özgün uygulama kaynak kodları ile değiştirilmiş kaynak kodları arasındaki farkları .diff veya .patch uzantılı dosyalara yazılır. Bu yamalar paketlenirken aşağıda anlatıldığı biçimde uygulanarak istenen sonuç elde edilmiş olur.
Öncelikli İşlemler
Gerekli paketleri sisteminize kurun
Şu paketler sisteminizde kurulu olmalıdır:
rpm
: Mageia Linux için yamalanmış Red Hat paket yönetim sistemirpm-build
: Paketleri derlemek için gerekli betikleri bulunduran paketleme uygulamasıspec-helper
: Paket boyutunu çeşitli işlemlerle ufaltan bir uygulamalibtool
: Paylaşılmış kütüphaneler oluşturmak için gerekli bir uygulamarpmlint
: Oluşturulan rpm paketlerini ve src.rpm paketlerini hatalara karşı denetleyen bir araç.
Gerekli dizinleri oluşturun
Paketlerin derlenebilmesi için rpm, bazı dizinlerin ev dizininizde bulunmasına gerek duyar. Bu dizinleri aşağıdaki komutla oluşturabilirsiniz:
mkdir -p ~/rpm/{BUILD,BUILDROOT,RPMS/$ARCH,RPMS/noarch,SOURCES,SRPMS,SPECS,tmp}
Bu komuttaki $ARCH ibaresini paketin kurulacağı işlemci mimarisine göre değiştirin. Temelde, bu ibare i586/x86_64/sparc/alpha/ppc mimarilerinden biridir. Birden fazla mimaride paket oluşturacaksanız her mimari için ayrı bir RPM/$ARCH dizini oluşturmalısınız.
Gerekli dizin yapısının açıklaması:
~/rpm/BUILD
: Kaynak dosyanın açılarak derleneceği dizin~/rpm/BUILDROOT
: Bir kurulumun taklit edileceği dizin~/rpm/RPMS
: Oluşturulan paketlerin yer alacağı alt dizinleri kapsayan dizin.~/rpm/RPMS/i586
: i586 işlemci mimarisine oluşturulan paketlerin yer alacağı dizin.~/rpm/RPMS/x86_64
: AMD64 işlemci mimarisine oluşturulan paketlerin yer alacağı dizin.~/rpm/RPMS/noarch
: İşlemci mimarisinden bağımsız paketlerin yer alacağı dizin.~/rpm/SOURCES
: Kaynak dosyaların (abc.tar.bz2 dosyası,.patch uzantılı yamalar v.b.) bulunduğu dizin.~/rpm/SPECS
: Paket oluşturma işlmei talimatlarını içeren .spec betiğinin bulunduğu dizin.~/rpm/SRPMS
: Paket oluşturma işlemi bittiğinde kaynak rpm (.src.rpm) paketlerinin yer alacağı dizin.~/rpm/tmp
: Paketler derlenirken rpm tarafından oluşturulan geçici dosyalar. Bu dosyalar genellikle .spec dosyalarından ayrıştırılan birer kabuk betiğidir ve hataları görebilmeniz için oldukça yararlıdır.
Not Edin!:~/rpm/RPMS dizini altındaki mimari dizinlerinin var olması zorunludur. Aksi halde paket derleme işlemi hata verir.
|
.rpmmacros dosyasını oluşturun
.rpmmacros yapılandırma dosyası temel yapılandırma dosyası olup ev dizini içerisinde elle oluşturulmalıdır:
Dosya: .rpmmacros
Dosya Konumu: ~/.rpmmacros
%_topdir %(echo $HOME)/rpm %_tmppath %(echo $HOME)/rpm/tmp # Paketlerinizin, kendiliğinden GPG ile imzalanmasını istiyorsanız aşağıdaki satırları kullanın. # 'Mageia' ibaresini kendi GPG imza adınızla değiştirin. # Kendiliğinden imzalanmasını istemiyorsanız daha sonra rpm --resign komutu ile elle #imzalayabilirsiniz. # Paketler, rpm veritabanına kayıtlı bir imza ile imzalanmamışlarsa veya imzasız olduğunda #kurulum sırasında rpm veya paket yöneticiniz uyarı verebilir. # %_signature gpg %_gpg_name Mageia %_gpg_path ~/.gnupg # İsminizi ve e-posta adresinizi aşağıdaki %packager bölümüne yazın. Ayrıca %vendor ile #belirtilen sağlayıcı kısmındaki "Mageia" ibaresini değiştirebilirsiniz. %packager Aınız Soyadınız <e@posta.adresiniz> %distribution Mageia Linux %vendor Mageia # Kendi paket ekinizi kullanmak ve paketlerdeki mdv ibaresini kullanmak istemiyorsanız; # aşağıdaki satırın önündeki # işaretini kaldırarak "foo" ibaresini değiştirin. # Bu durumda wine-1.1.43-1mdv2008.0.i586.rpm biçimindeki paket ismi # wine-1.1.43-1foo2008.0.i586.rpm biçiminde olur. #%distsuffix foo
Warning! %optflags parametresini bu dosyada belirtmeyin; çünkü sistem geneli bir değer /usr/lib/rpm/manbo/rpmrc dosyasında yer almaktadır. |
Paket Oluşturma
Kaynak RPM paketinden oluşturma
Bu seçenek, bir yazılımın dağıtım için önceden paketlenmiş olması halinde söz konusudur.
Not Edin!: Peki neden zaten paketlenmiş olan bir yazılımı yeniden paketleyesiniz ki?
|
Mageia Linux' un kaynak RPM paketleri, Mageia Linux için güncelleme veri kaynağı olarak kullandığınız herhangi bir yansıdaki SRPMS dizini altında bulunur.
Kaynak rpm paketini bilgisayarınıza indirdiğinizde şu komutla dosyanın daha önceden oluşturduğunuz rpm
dizinine kurulmasını sağlayın:
$ rpm -ivh paket_adı.src.rpm |
{{note|
$ rpm -ivh firefox3.6-ext-mozzemberek-0.1.5-3mvt2010.0.src.rpm |
$ cd ~/rpm |
Gördüğümüz üzere kaynak RPM paketimizin içindekiler önceden oluşturmuş olduğumuz rpm
dizinindeki alt dizinlere açıldı. Bu alt dizinlere baktığımızda; yazılımın kaynak arşivinin (mozzemberek-0.1.5.tar.gz) ve pakette kullanılan yamaların (install_dir.patch ile FF-3.6-compability.patch), SOURCES
alt dizininde; firefox-ext-mozzemberek.spec doyasının ise SPECS
alt dizininde yer aldığını görüyoruz. Böylece, .spec dosyasını inceleyerek üzerinde değişiklik yapabileceğimiz gibi kaynak kodlarını inceleyerek yamalar hazırlayabiliriz.
Gerek spec dosyası gerekse kaynak kodlarla işimiz bittiğinde paketi oluşturmak için aşağıdaki komutu veririz:
$ rpmbuild -ba firefox-ext-mozzemberek.spec |
Not Edin!: RPM paketi oluşturmak ile ilgili eski yazılarda, yukarıdaki komutun 'rpm -ba olarak kullanıldığını görebilirsiniz. Rpm uygulamasının eski sürümlerinde olan bu özellik; yeni sürümlerde bulunmamaktadır. Paket oluşturmak için artık rpmbuild komutu kullanılmaktadır. |
$ cd ~/rpm/SPECS |
~/rpm/SPECS rpmbuild -ba firefox-ext-mozzemberek.spec |
Paketin oluşturulması tamamlandıktan sonra yukarıdaki örnekte de görebileceğiniz gibi ~/rpm/RPMS/x86_64
dizini içerisinde paketimiz oluşturuldu. Ayrıca, paketimizin kaynak paket dosyası da ~/rpm/SRPMS
dizininde oluşturuldu.
Not Edin!: Bir rpm paketinin oluşturulması zaman alıcı bir işlemdir. Çünkü kaynak kodlar açılacak, varsa yamalar uygulanacak, kodlar derlenecek ve paket haline getirilecektir. Özellikle, çekirdek (kernel) paketlerinin oluşturulması, makinenizin işlemci ve bellek özelliklerine göre birkaç saat alabilir. |
Bir kaynak RPM paketi üzerinde hiçbir değişiklik yapmadan yeniden derleme yapmak isterseniz aşağıdaki komutu kullanabilirsiniz; bu durumda yeni bir src.rpm paketi oluşturulmaz:
$ rpmbuild --rebuild firefox3.6-ext-mozzemberek-0.1.5-3mvt2010.0.src.rpm |
- Bakınız: RPM-BUILD Komutları
Not Edin!: Mageia Linux paketlerinin .spec> ve kaynak kod dosyalarını svn deposunda da bulabilirsiniz. |
Özgün kaynak arşivinden (tar arşivi) oluşturma
Sourceforge veya [KDE-Look] sitalerinden birinde işinize yarayacak bir uygulama bulduğunuzu ve bu uygulamanın Mageia Linux rpm paketlerinin bulunmadığını düşünelim. Bu uygulamayı paketleyerek, hem sisteminizde düzgün bir kurulum yapma hem de bu paketi başkalarıyla paylaşarak onların da sistemlerine düzgün ve zahmetsiz kurulum yapma imkanı elde etmelerini sağlarsınız.
Uygulamanın tar ile arşivlenmiş kaynak arşivini indirin ve SOURCES
dizinine koyun.
Ön denetlemeler
- Lisans
- GPL lisansından başka bir çok farklı lisans ile lisanslanımış uygulamalar bugün internetten edinilebilmektedir. Bu açıdan, uygulamanın lisansının üzerinde özgürce işlem yapabileceğiniz (mesela kaynak kodu yamalayabileceğiniz) ve özgürce başkalarına dağıtabileceğiniz bir lisans türü olduğundan emin olun. Mageia Linux için kabul edilebilir lisans türleri için ingilizce olan Mageia Lisans Politikası sayfasına bakın.
- Tar Arşivi
- RPM paketlerinde, başka kullanıcıların da paket üzerinde çalışabilmelerini sağlamak amacıyla kaynak arşivleri özgün biçimde tutulur. Üzerlerinde herhangi bir değişiklik yamalar ile yapılır. Mümkünse kaynak arşivin bziplenmiş tar arşivi kullanılır:.tar.bz2. Uygulamanın sitesinden bu biçimdeki kaynak arşivinin indirilmesi önerilir. Yamalar (
diff
aracılığı ile oluşturulan .patch veya .diff uzantılı metin dosyaları) veya herhangi bir metin biçimindeki (yapılandırma dosyaları, betikler v.b.) olduğu gibi; yani sıkıştırılmadan kullanılır.
SPEC Dosyası
İşte geldik! Bu bölüm, makalemizin en önemli bölümüdür. SPEC dosyası, RPM için gerekli tüm bilgi ve komutları içerir. Spec dosyası en iyi anlaşılması gereken dosyadır.Bu nedenle başlı başına bir yazı konusudur. Lütfen RPM SPEC Dosyası makalesini inceleyin.
Derleme
Spec dosyanız hazır olduğunda, derin bir nefes alın ve şu komutu verin:
$ rpmbuild -ba paket_adı.spec |
Bu komuta --clean anahtarını da ekleyerek ~rpm/BUILD
dizini içindeki dosyaların, paket oluşturulduktan sonra kendiliğinden silinmesini sağlayabilirsiniz.
Paket oluşturma işlemi sonunda iki sonuç elde edersiniz:
- 0.01% ihtimalle: + exit 0 çıktısını komut satırında görürsünüz.
Tebrikler, paketi oluşturdunuz!
- 99.99% ihtimalle: başka çıktıları komut satırında görürsünüz ve mutlaka bir hata var demektir.
Siz ikinci ihtimalle karşılaşanlardansanız, üzülmeyin. Bu sizin bir uzaylı olmadığınıza kanıttır! Çok daha fazla belge okuyarak, SPEC dosyasını yeniden gözden geçirerek, bilenlere sorarak, başka paketlerin spec dosylarını inceleyerek öğrenmenin tam da zamanı gelmiş demektir.!
Bir RPM Paketini Denetlemek
Bu konu için ayrıca Mageia Hata Takip sistemini de incelemeniz önerilir.
Temel Denetlemeler
Gerçekleştirilecek ilk adımlar şunlardır:
- RPM paketleri doğru dizinler içinde oluşturulmuş mu? (
~/rpm/SRPMS/
ve~/rpm/RPMS/{i586,x86_64,noarch}/
dizinleri içinde mi?) - Aşağıdaki komut ile elde edilen bilgiler doğru mu?
$ rpm -qlivp --changelog paket_adı.(src.)rpm |
Paketi Hatalar Karşı Denetlemek
Bir sonraki adımda rpmlint aracını kullanarak paketimizi hatalara karşı ve rpm kurallarına uygunluğu açısından denetlemeliyiz. rpmlint aracını şu şekilde kullanırız:
$ rpmlint paket_adı.<archtype>.rpm |
Rpmlint bize hataları ve rpm paketleme kurallarına aykırı durumları bildirecektir. Daha ayrıntılı bilgi için rpmlint' i -i anahtarı ile kullanın. Hem oluşturduğumuz rpm hem de src.rpm paketlerini bu şekilde denetleyin.
Kurulum Denetimi
Tercihen, paketi oluşturduğumuz bilgisayar başka; bir bilgisayarda paketinizi kurun veya kurulu olan resmi paket yerine yükseltme yapın. Bu aşamada şu hususları denetleyin:
- Beklenilen tüm dosyalar, beklenilen doğru dizinlerde ve beklenilen doğru sahiplik/izinlerle oluşturuldu mu?
- Kurulumda öngörülen değişiklikler sisteme doğru olarak uygulandı mı?
- Tüm ikili dosalar çalıştırılabilir durumda mı? Paket ile gelen belgeler erişilebilir durumda mı?
Kurulum Öncesi (Pre-installation) ve Kurulum Sonrası (Post-installation) Betikleri
Temeller
RPM paket biçim, aslında basit bir paket yönetiminden (sisteme paket içeriğini kopyalamaktan) çok daha fazlasını sunar.
Bir paketleyiciye büyük bir yetenk de sunar: kurulum öncesi ve kurulm sonrası betikleri. Bu betikler, paketin kurulumu sonrasında ve paketin kaldırılması sonrasında işletilecek bir kaç satır kod hazırlama imkanı sunarlar.
Bu betikler tüm sh
kabuğu kodlarını çalıştırabilirler.
Dört temel betik vardır:
Not Edin!: Bu betiklerin hiç biri kullanıcı ile etkileşimli olmamalı; yani kullanıcıdan bir girdi beklememelidir. |
- %pre - Bu betik paket sisteme kurulmadan hemen önce çalıştırılır.
- %post - Bu betik paketin sisteme kurulmasından hemen sonra çalıştırılır.
- %preun - Bu betik paketin sistemden kaldırılmasından hemen önce çalıştırılır.
- %postun - Bu betik paketin sistemden kaldırılmasından hemen sonra çalıştırılır.
Bu betikler ile sayısız işlemin yapılması sağlanabilir. Unutulmaması gereken, paketin kurulacağı sisteme zarar vermeyecek biçimde yazılmış olmalarıdır. Bu betikler örneğin:
- Paketle kurulan uygulamanın belirli zamanlarda kendiliğinden çalışabilmesi için
cron
görevi tanımlamakta, chkconfig
çalıştırılması suretiyle, paketin içerdiği artsürecin (daemon) her sistem açılışında çalıştırılması,- ...
gibi işlemler için kullanılır.
Yükseltme işlemini yapmak
RPM paket yönetim sisteminde bir paket kolayca yükseltilebilir/güncellenebilir. Ancak bu işlem, basit bir paket kurma/kaldırmadan daha karmaşık bir işlemdir. Buradaki temel sorun, güncelleme yapan paketin %postun betiği eski sürümlü paketin %post betiğinden sonra çalışması ve sonucunda tüm %post betik işlemlerinin kaybolmasıdır.
Bir eylemin sadece ilk kurulumda gerçekleşmesinden ve yükseltme/güncellemelerde gerçekleştirilmemesinden emin olmak, genellikle yararlıdır. Benzer şekilde, bir eylemin gerçekleşmesinin sadece sistemden kaldırma sırasında gerçekleştirilmesi ancak yükseltmede yapılmaması da önemlidir. Bu durum, rpm işleyişinde %pre, %preun, %post ve %postun betikelri ile öntanımlı olarak sağlanmaktadır.
Yeni bir rpm paketi kurulduğunda 1 değeri yeni rpm paketinin %pre betiğine ve 1 değeri de yeni rpm paketinin %post betiğine geçirilir. Bir paket yükseltildiğinde 2 değeri yeni rpm paketinin %pre betiğine ve 2 değeri de yeni rpm paketinin %post betiğine geçirilirken; 1 değeri eski rpm paketinin %preun betiğine ve 1 değeri de eski rpm paketinin %postun betiğine geçirilir.
Parametre \ Betik | %pre | %post | %preun | %postun |
---|---|---|---|---|
İlk kez kurulum için | 1 | 1 | N/C | N/C |
Bir yükseltme/güncelleme için | 2 | 2 | 1 | 1 |
Bir sistemden kaldırma için | N/C | N/C | 0 | 0 |
Bu sayede, paketleyicinin değişik işlemlerde (yükseltme veya kaldırma) betiklerini farklı biçimde çalıştırması sağlanmış olur.
- Kurulum betiklerinde ( %post, %pre ), $1 "1" değerine eşitse bu bir ilk kez kurulumdur; bir yükseltme değildir.
- Kaldırma betiklerinde ( %postun, %preun ) $1 "0" değerine eşitse bu bir kaldırma işlemidir; başka bir değere eşitse bu ya bir yükseltme ya da aynı paketin yeniden kuruluma zorlanması işlemidir.
Bu durumun denetlenmesi için şu "if" sh kabuğu işleci kullanılır:
%postun if [ $1 = 0 ]; then // kaldırmalara özgü işlemleri gerçekleştir. fi if [ $1 = 1 ]; then // yükseltmelere özgü işlemleri gerçekleştir. fi
RPM Dosya Tetikleyicileri
"%post -p /sbin/ldconfig" veya "%update_menus" gibi tekrarlanan işlemler için RPM Dosya Tetikleyicileri kullanılarak daha temiz bir spec dosyası oluşturulur.
Daha fazla makro
- Info sayfalarını sisteme yerleştirmek:
%post %__install_info %{name}.info %preun %__install_info %{name}.info
- Menüleri düzenlemek:
%post %{update_menus} %postun %{clean_menus}
- Yerelleştirme dosyalarını temiz bir biçimde sistemde oluşturmak:
- %install bölümünde aşağıdaki makro eklenir:
%find_lang %{name}
- %files bölümünde aşağıdaki makro kullanılır:
%files -f %{name}.lang
- Sistem önyükleme betikleri (Initscript) makroları. Kendine ait sistem önyükleme betiği (
/etc/init.d
dizinindeki betikler) sunan paketler kurulurken chkconfig --add .. benzeri bir komut ile sistem önyükleme komutlarına yerleştirilmesi gerekir. Oysa ki yükseltmelerde bu tarz bir komut yürütülmez ve üstelik önceki var olan betik kaldırılmadan önce durdurulmalı ve yeni betik çalıştırılmalıdır. Bu tarz işlemlerin yükünden önyükleme makroları ile kurtuluruz:
%post %_post_service <Sistem_önyükleme_betiği-adı> %preun %_preun_service <Sistem_önyükleme_betiği-adı>
- Hayalet dosyaları işlemek. Çoğunlukla oyunlarda olmak üzere, paketler bazen gerçekte olmayan dosyalara gereksinim duyarlar. Bu aşamada imdadımıza hayalet dosyalar yetişir:
%install (...) mkdir -p $RPM_BUILD_ROOT/var/lib/games touch $RPM_BUILD_ROOT/var/lib/games/methanescores %post %create_ghostfile /var/lib/games/powermanga.hi root games 664 (...) %files %attr(664, root, games) %ghost /var/lib/games/powermanga.hi
%create_ghostfile makrosunun açılımı şu biçimdedir:
if [ ! -f /var/lib/games/powermanga.hi ]; then touch /var/lib/games/powermanga.hi chown root.games /var/lib/games/powermanga.hi chmod 664 /var/lib/games/powermanga.hi fi
- .desktop / MIME türü haritaları ilişkilendirmesi : XDG menü sistemi bir uygulama ve bir MIME türü arasında .desktop dosyaları ile ilişkilendirme yapmayı olanaklı kılmaktadır. Sisteme bu tip bir .desktop dosyası kuruluyorsa/kaldırılıyorsa,
update-desktop-database
aracı mutlaka çalıştırılmalıdır:
%post %update_desktop_database %postun %clean_desktop_database
- Freedesktop.org MIME türü veritabanı : Sistemde kurulu tüm MIME tiplerinin listelendiği veritabanı da MIME ile ilgili her paket kurulumunda/kaldırılmasında güncellenmelidir :
%post %update_mime_database %postun %clean_mime_database
- Simge ön belleği :
/usr/share/icons/hicolor
dizinine (veya diğer freedesktop simge teması dizinlerine, mesela/usr/share/icons/gnome
veya/usr/share/icons/crystalsvg
) kurulacak/kaldırılacak simgeleri barındıran tüm paketler mutlaka simge önbelleğini güncellemelidir.(/usr/share/icons
,/usr/share/icons/mini
veya/usr/share/icons/large
dizinlerine kurulacak diğer simgeler için böyle bir mecburiyet yoktur) :
... %file ... %{_iconsdir}/hicolor/* %{_iconsdir}/crystalsvg/* .... %post %update_icon_cache hicolor %update_icon_cache crystalsvg %postun %update_icon_cache hicolor %update_icon_cache crystalsvg
- GConf şema kaydı : GNOME GConf şemaları (schema) mutlaka şağıdaki makrolar kullanılarak kurulur/kaldırılır :
... # Her şema anahtarı, /etc/gconf/schemas/<anahtar_adı>.schemas dosyası ile bağlantılı olmalıdır. %define schemas apps_gnome_settings_daemon_default_editordesktop_gnome_font_rendering desktop_gnome_peripherals_keyboard_xkb fontilus themus %post %post_install_gconf_schemas %{schemas} %preun %preun_uninstall_gconf_schemas %{schemas}
- Scrollkeeper veritabanı güncelleme: scrollkeeper veritabanı (docbook biçimli belgeleri fihristlemede kullanılır.) mutlaka bir .omf dosyası kurulur/kaldırılırken güncellenmelidir:
... %post %update_scrollkeeper %postun %clean_scrollkeeper
Urpmi ve rpmdrake ile etkileşime girmek
Bazen, paket kurulumu öncesinde veya sonrasında kullanıcıyı belirli hususlarda uyarmak veya bilgilendirmek gereklidir.rpmdrake-2.1.3-11mdk
ve üst rpm sürümleri bu işlevi desteklemektedir: RPM; README.install.urpmi, README.update.urpmi veya README.urpmi adlarındaki dosyaları kendiliğinden aramakta ve bu dosya içeriğini görüntülemektedir.
README.install.urpmi dosyası sadece paketler kurulurken; README.update.urpmi dosyası sadece paketler yükseltilirken; README.urpmi dosyası ise her iki durumda da görüntülenir.
RPM paketlemede bir başka yol : checkinstall
Kişisel kullanım için RPM paketi oluşturmanın belki de en kolay yolu checkinstall
kullanmaktır.
- Paketlenecek kaynak arşiv açılarak alışılmış
$ ./configure && make |
adımları uygulanır.
- Bundan sonra ise make install adımı yerine kök olarak checkinstall uygulanır.
- Bu durumda uygulanacak adımlar şöyle olacaktır:
$ ./configure && make |
# checkinstall |
- Adım adım checkinstall soruları cevaplanarak RPM paketi oluşturulması sağlanabilir. Checkinstall ayrıca oluşturulan RPM paketinin kendiliğinden sisteme kurulmasını da sağlayacaktır.
Warning! Başkaları ile paylaşacağınız RPM paketlerini mutlaka yukarıda uzunca anlatılan usulüne uygun olarak oluşturun! |
Yararlı Dış Bağlantılar
İngilizce Bağlantılar
- IBM tarafından hazırlanmış bir makale
- Rpm oluşturma ile ilgili Red Hat dergisinde yayınlanmış bir makale
- GuruLabs tarafından hazırlanmış pdf biçimindeki rehber
- fedoraproject.org sistesinde yayınlanan Red Hat RPM Rehberi
Türkçe Bağlantılar
- Mandriva Türkiye yöneticilerinden Tanju TAŞÇILAR' ın web sitesindeki paketleme makalesi. Her ne kadar eski bir yazı da olsa oldukça yararlı bir makaledir.
- Enixma dergisi sayıları:
Kaynak
Hazırlayan= Atilla Öntaş