Belki sizlerin de başına gelmiştir - tabii ki her zaman için haklı nedenlerden dolayı ;) - bazen bir üreticinin rpm’lerinin üzerinde ufak tefek değişiklik yapmak zorunluluğunu hissedebilirsiniz.
Eğer söz konusu ticari bir uygulamanın paketi ise %99.9 olasılıkla SRPM dosyalarına veya kaynak kodlarına erişiminiz olmayacaktır. Hoş, erişiminiz olsa bile bir RPM’i kendiniz tekrar paketlemeye çalıştığınızda hiç de hoş olmayan bir çok süprizle karşılaşmanız muhtemel.
Şimdi karşılaştığım gerçek bir problem üzerinden yazımıza konu olan rpmrebuild programının kullanımını ve ne gibi faydaları olduğunu açılklamaya çalışalım.
Bir müşterimiz için geliştirdiğimiz platformun merkezi loglama ihtiyacını Syslog-NG ile karşılama yoluna gittik. Açık kaynaklı bu projenin ticari versiyonunu kullanan muşterimize üretici Balabit firmasında premium edition olarak etiketlenmiş yeni bir rpm ulaştı.
Balabit firmasının müşterimize gönderdiği rpm kurulum bittikten sonra syslog servisinin yerine kendisini yani syslog-ng servisini ekliyor. Buraya kadar bir sorun yok fakat kurulumun son aşamasında rpm’in post install scriptinde syslog servisini durdurup syslog-ng servisini başlatıyor.
Geliştirilen platformun mimarisi gereği syslog-ng servisinin platform tarafindan talep edilene kadar çalıştırılmaması loglamanın local syslog servisi tarafından yapılması gerekiyor. Kaldi ki syslog-ng servisinin konfigurasyonu daha ilerki bir aşamada platformun değişik bileşenleri tarafından tamamlanacak.
Balabit firması açısından önemsiz bir problem olmakla birlikte müşterimizin, dolayısıyla bizim başımız bu sorundan dolayı oldukça ağrıdı. Sadece post installation scriptini değiştirebilsek yani syslog servisinin durdurulup syslog-ng servislerinin başlatıldığı iki satırı rpm’den çıkarabilirsen sorunumuz çözülecek, müşterimiz de biz de gayet mutlu olacaktık.
Bu noktada internette yaptığımız araştırmalar sonucunda rpmrebuild isimli programı bulduk. rpmrebuild aracılığıyla binary bir rpm paketinin içindeki dosyaları değiştirebilir, yeni dosya ekleyebilir, varolan dosyaları silebilir ve hatta rpm’in elinizde olmadığı durumlarda rpm veritabanı aracılığıyla ilgili rpm’in spec dosyasını tekrar oluşturabilirsiniz. Uzun lafın kısası İsviçre çakısı gibi bir uygulama. :)
[sogua00@aliontl901 ~]$ rpmrebuild -n --edit-post -p syslog-ng-premium-edition-2.1.4-1.x86_64.rpm
warning: syslog-ng-premium-edition-2.1.4-1.x86_64.rpm: Header V3 DSA signature: NOKEY, key ID f5297614
warning: syslog-ng-premium-edition-2.1.4-1.x86_64.rpm: Header V3 DSA signature: NOKEY, key ID f5297614
warning: syslog-ng-premium-edition-2.1.4-1.x86_64.rpm: Header V3 DSA signature: NOKEY, key ID f5297614
warning: syslog-ng-premium-edition-2.1.4-1.x86_64.rpm: Header V3 DSA signature: NOKEY, key ID f5297614
warning: syslog-ng-premium-edition-2.1.4-1.x86_64.rpm: Header V3 DSA signature: NOKEY, key ID f5297614
warning: syslog-ng-premium-edition-2.1.4-1.x86_64.rpm: Header V3 DSA signature: NOKEY, key ID f5297614
warning: syslog-ng-premium-edition-2.1.4-1.x86_64.rpm: Header V3 DSA signature: NOKEY, key ID f5297614
warning: syslog-ng-premium-edition-2.1.4-1.x86_64.rpm: Header V3 DSA signature: NOKEY, key ID f5297614
warning: syslog-ng-premium-edition-2.1.4-1.x86_64.rpm: Header V3 DSA signature: NOKEY, key ID f5297614
warning: syslog-ng-premium-edition-2.1.4-1.x86_64.rpm: Header V3 DSA signature: NOKEY, key ID f5297614
warning: syslog-ng-premium-edition-2.1.4-1.x86_64.rpm: Header V3 DSA signature: NOKEY, key ID f5297614
warning: syslog-ng-premium-edition-2.1.4-1.x86_64.rpm: Header V3 DSA signature: NOKEY, key ID f5297614
warning: syslog-ng-premium-edition-2.1.4-1.x86_64.rpm: Header V3 DSA signature: NOKEY, key ID f5297614
warning: syslog-ng-premium-edition-2.1.4-1.x86_64.rpm: Header V3 DSA signature: NOKEY, key ID f5297614
Do you want to continue ? (y/N) y
Processing files: syslog-ng-premium-edition-2.1.4-1
Wrote: /home/sogua00/rpmbuild/RPMS/x86_64/syslog-ng-premium-edition-2.1.4-1.x86_64.rpm
result: /x86_64/syslog-ng-premium-edition-2.1.4-1.x86_64.rpm
Yukarıdaki komut satırı ve ekran çıktısı üzerinden rpmrebuild komutunun çalışmasını incelemeye çalışalım. Öncelikle kullanılan parametreler bakalım
-p kaynak olarak bu parametreyı takip eden paket dosyasının kullanılacağını belirtir. Eğer bu parametreyi belirtmezseniz belirtmiş olduğunuz rpm’in sisteminize kurulu olduğunu varsayıp sistem veritabanını kullanamaya çalışacaktır.
-n rpm paketini değiştirdikten veya yeniden oluşturduktan sonra test kurulumu yapmamasını belirtir. Genelde rpm’leri oluşturduğunuz ortamlar ile kurulum gerçekleşeceği ortamlar birbirleriyle alakasız yapılandırmaya sahiptir.
–edit-post post install scriptini değiştireceğimizi ifade eder.
Yukarıdaki komutu çalıştırdığınızda rpmrebuild syslog-ng-premium-edition-2.1.4-1.x86_64.rpm isimli rpm dosyasini okuyup post install scriptini standart editörünüzde açacak. (Bizim sistemimiz için vi). vi aracılığıyla post install scriptinde istediğimiz değişikliği gerçekleştirip vi editöründen çıktığımızda rpmrebuild işleme devam edip etmek istemediğimizi soracak. Eğer onay verirseniz macro tanımlarınız doğrultusunda rpmbuild dizininize değiştirilmiş rpm dosyasını kaydedecek.
Programın birçok özelligi ve kullanabileceğiniz birçok seçeneği var. Fedora 8 ve sonrasında standart fedora depolarından rpmrebuild paketini temin etmek mümkün.
Aşağıdaki makalelerden ve programın sitesinden ve man sayfalarından daha detaylı bilgi edinebilirsiniz.
http://rpmrebuild.sourceforge.net/
http://www.redhatmagazine.com/2007/12/04/hacking-rpms-with-rpmrebuild/
http://www.linux.com/feature/62262
İyi çalışmalar.