29 Ocak 2014 Çarşamba

RPM Paketi Oluşturmak

  Merhaba arkadaşlar

  Kısa bir süre önce rpm paketinin nasıl yapılacağını öğrendim.  İlk defa böyle bir işe kalkıştığım için başta çok zorlandım. Ama bir hocamın yardımıyla nasıl yapılacağının mantığını anladım. Daha bu konuda öğrenilecek çok şey var ancak  daha önce hiç paketleme yapmamış arkadaşların ilk paketlemelerini yapabilmesi için anlatablidiğim kadar adım adım anlatacağım.


  1.  Paketleme için gerekli paketi kuruyoruz.
        # yum install rpmdevtools
  2.  Yeni bir kullanıcı oluşturuyoruz ki sistemimizde kurulu olan diğer paketlerin dosyalarına zarar vermeyelim.
        # useradd yeni_kullanici_adi
          # passwd  yeni_kullanici_adi

  3.  Şimdi bu kullanıcıya geçiş yapıyoruz.
       $ su - yeni_kullanici_adi

  4.  Kurduğumuz bu paketin sağladığı bir aracı kullanarak gerekli dizinleri oluşturuyoruz .(Bu işlem mkdir komutu kullanılarakta yapılabilir.)
       $ rpmdev-setuptree

  5. Şimdi bulunduğumuz dizinde neler oluşmuş görelim.
      $ ls
        $ cd rpmbuild
        $ ls
  Görüldüğü üzere rpmbuild dizini ve altında 5 adet dizin oluşmuş. Şimdi adımlara ara verip bu dizinler altında neler tutuluyor onları konuşalım. İlk paketleme için şunları bilmemiz yeterli:

  SOURCE : Paketlenecek olan dosyamızın tar.gz halini bu dizin altına kopyalarız
  SPEC :  .spec uzantılı dosyayı tutar. Bu dosyadan ileriki adımlarda uzunca bahsedeceğiz
  RPMS : En son oluşturduğumuz RPM paketleri bu dizin altında durur.

  6.  Şuan rpmbuild dizini içindeyiz. Yapacağımız paket 1. sürüm olacağı için o sürüm ismini içeren bir dizin oluşturuyoruz ve o dizine geçiyoruz.
        $ mkdir test-1.0
          $ cd test-1.0

  7.  İçinde herhangi birşey olan bir dosya oluşturalım ve bi üst dizine geçelim.
       $ echo "echo \"Merhaba ilk RPM paketi\"" > test.sh
         $ cd ..

  8.  Şimdi oluşturduğumuz dizini arşivleyip sıkıştıralım ve SOURCE dizini altına gönderelim.
       $ tar czvf SOURCES/test-1.0.tar.gz test-1.0/

  9.  Sıra geldi spec dosyasını oluşturmaya. SPEC dizinine geçelim ve bir spec dosyası oluşturalım.
       $ cd SPEC
         $ rpmdev-newspec test.spec

  10.  Şimdi oluşturduğumuz test.spec dosyasını düzenleyelim. Ben vim kullanıyorum isteğiniz bir metin editörünü kullanabilirsiniz.
       $ vim test.spec

  11.  Dosyayı aşağıdaki şekilde düzenleyelim.
###################################################
Name:           test
Version:        1.0
Release:        1%{?dist}
Summary:        Bu bir testtir

Group:          Utilities
License:        GPL
URL:            http://www.linux.com
Source0:        test-1.0.tar.gz
BuildArch:      noarch
BuildRoot:      %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)


#BuildRequires: bash
#Requires:      bash

%description
Bir test dosyasını içeren rpm paketidir.


%prep
%setup -q


%build


%install
rm -rf $RPM_BUILD_ROOT
install -d $RPM_BUILD_ROOT/opt/test
install test.sh $RPM_BUILD_ROOT/opt/test/test.sh


%clean
rm -rf $RPM_BUILD_ROOT


%files
%dir /opt/test
%defattr(-,root,root,-)
/opt/test/test.sh

%post
chmod 755 -R /opt/test

###################################################

Şimdi bu dosyanın bu içeriğini konuşalım.

(Name) kısmına paketimizin ismini yazıyoruz.

(Version) kısmına peketimizin versiyonunu yazıyoruz.

(Summary) kısmına paket hakkında bir cümlelik özet bilgi yazıyoruz

(Group) kısmına paketimizin hangi gruba ait olduğunu yazıyoruz. Applications/Multimedia, Utililies, ... gibi

(Licence) kısmına hangi lisans altında paketlediğimizi belirtiyoruz

(URL) kısmına paketlediğimiz uygulamanın web adresini yazabiliriz.

(Source0) kısmına SOURCE dizini altında kopyaladığımız tar.gz dosyanın ismini yazıyoruz. Eğer birden fazla kaynak kullanılarak paketleme yapacaksak alt alta Source1,Source2... diyerek istediğimiz kadar kaynak belirtebiliriz.

(BuildRequires) kısmına derleme için gereken bağımlılıkları yazarız.

(Requires) kısmına paketlediğimiz bu uygulamanın çalışabilmesi için gerekli bağımlılıkları belirtiriz. İlk Paketleme için bir bağımlılığa ihtiyaç olmadığından ama bu satırı doldurmazsakta hata alacağımızdan sistemimizde var olan herhangi bir programı yazabiliriz. Bu işlemleri bash kabuğunda yaptığımızı varsayarak bash yazdım

(descriptions) kısmına paketimizle ilgili istediğimiz uzunlukta tanımlama yazabiliriz.

(install) kısmı paketimizdeki dosyaların nerelere kopyalanacağını belirlediğimz kısımdır. İkinci satırda dağıtım dışı bir paket olduğundan /opt altına programımızın ismiyle bir dizin oluşturuyoruz. Üçüncü satırda ilk parametre olarak kurulacak dosyanın  adını ikinci parametre olarakta kurulacağı yeri ve oraya hangi isimle kurulacağını belirtiyoruz.

(files) kısmına kurulacak olan her dosya için bu dosyaların bilgisyarımızda nerelerde olacağını belirten bir satır yazıyoruz.

(post) kısmında kurduğumuz dosyaların erişim haklarını belirten bir satır yazdık

  12.  Şuan SPEC dizini içindeyiz. test.spec dosyasını kaydettik şimdi paketi oluşturuyoruz.
        $ rpmbuild -bb -v test.spec

  13. Paketimiz oluştu ve RPMS altına geldi. Bakalım gerçekten orda mı.
        $ cd ..
          $ cd RPMS/noarch
          $ ls

  14. Evet gerçekten orda. O zaman  oluşturduğumuz paketi kuralım ve çalıştıralım.
       # rpm -Uvh test-1.0-1.el6.noarch.rpm
         # /opt/test/test.sh


       Merhaba ilk RPM paketi çıktısını vermiş olması gerekiyor

Umarım anlatabilmişimdir. Baştada dediğim gibi daha öğrenilecek çok şey var. Bi başlangıç yapmış olduk. Umarım faydalı olmuştur. Kolay gelsin :)