Fedora'da GNU Merhaba Dünya RPM Paketi Nasıl Oluşturulur


RPM (RPM Paket Yöneticisinin özyinelemeli kısaltması), Linux için ücretsiz ve açık kaynaklı bir paket yönetim sistemidir. Başlangıçta Red Hat Linux'ta kullanılmak üzere oluşturulmuş olmasına rağmen artık CentOS, Fedora ve gibi birçok Linux dağıtımında kullanılmaktadır. >OpenSuse. Daha da önemlisi, RPM adı paket yöneticisi programını ifade eder ve .rpm bir dosya biçimidir.

Bu makalede, basit bir kaynak ve ikili yazılım paketlerinin, örneğin Fedora Linux'ta GNU “Merhaba Dünya” RPM paketinin nasıl kolayca oluşturulacağını gösteren RPM dosyalarının yazılmasını açıklayacağız. güçlü > dağılım. Önceden hazırlanmış RPM paketleri ve Ücretsiz Açık Kaynak Yazılım oluşturma süreci hakkında temel bilgilere sahip olduğunuzu varsayıyoruz.

Geliştirme Araçlarını Fedora'ya yükleyin

RPM oluşturmak için gerekli araçları yüklemek üzere aşağıdaki komutu çalıştırarak Fedora Linux'ta geliştirme ortamını kurarak başlayalım.

sudo dnf install fedora-packager @development-tools

Daha sonra, ayrıcalıklı olmayan hesabınızı aşağıdaki gibi 'sahte' grubuna ekleyin (tecmint'i gerçek kullanıcı adınızla değiştirin). Bu, derleme prosedürünü temiz bir chroot'ta test etmenize olanak sağlayacaktır.

sudo usermod -a -G mock tecmint

Şimdi ~/rpmbuild dizininizde bir RPM yapısı oluşturun ve aşağıdaki komutları kullanarak yapıyı doğrulayın. Proje kaynak kodunu, RPM yapılandırma dosyalarını ve ikili paketleri içeren alt dizinlerin bir listesini gösterecektir.

rpmdev-setuptree
tree ~/rpmbuild/

Her dizinin ne anlama geldiği aşağıda açıklanmıştır:

  1. BUILD – paketler oluşturulduğunda çeşitli %buildroot dizinlerini saklar.
  2. RPMS – Mimarinin alt dizinlerindeki ikili RPM'leri içerecektir.
  3. KAYNAKLAR – sıkıştırılmış kaynak arşivlerini ve tüm yamaları saklar; rpmbuild komutunun onları arayacağı yer burasıdır.
  4. SPECS – SPEC dosyalarını saklar.
  5. SRPMS – İkili RPM yerine Kaynak RPM'yi saklar.

Bir “Merhaba Dünya” RPM'si Oluşturmak

Bu adımda, paketlediğimiz Merhaba Dünya projesinin kaynak kodunu ("yukarı akış" kaynağı olarak da bilinir) ~/rpmbuild/SOURCE 'a indirmeniz gerekir. dizini aşağıdaki wget komutuyla oluşturun.

cd ~/rpmbuild/SOURCES
wget http://ftp.gnu.org/gnu/hello/hello-2.10.tar.gz -P ~/rpmbuild/SOURCES

Daha sonra, ~/rpmbuild/SPECS.spec dosyası kullanarak RPM paketini yapılandıralım (bu durumda onu hello.spec olarak adlandıralım). > dizini, rpmdev-newspec programını kullanarak.

cd ~/rpmbuild/SPECS
rpmdev-newspec hello
ls

Daha sonra favori düzenleyicinizi kullanarak hello.spec dosyasını açın.

vim hello.spec

Varsayılan şablon şöyle görünmelidir:

Name:           hello
Version:
Release:        1%{?dist}
Summary:

License:
URL:
Source0:

BuildRequires:
Requires:

%description

%prep
%autosetup

%build
%configure
%make_build

%install
rm -rf $RPM_BUILD_ROOT
%make_install

%files
%license add-license-file-here
%doc add-docs-here

%changelog
* Tue May 28 2019 Aaron Kili

Bir .spec dosyasındaki varsayılan parametreleri kısaca açıklayalım:

  • Ad – pakete bir ad ayarlamak için kullanılır.
  • Sürüm – yukarı yönde yansıtılmalıdır.
  • Yayınlama – Fedora'da çalıştığınız sayılar.
  • Özet – paketin tek satırlık kısa bir açıklamasıdır; rpmlint şikayetlerini önlemek için ilk harf büyük harf olmalıdır.
  • Lisans – kaynak dosyaları ve/veya LİSANS dosyalarını inceleyerek ve/veya yazarlarla konuşarak yazılımın Lisans durumunu kontrol edin.
  • URL – yazılım paketinin ana sayfasını belirtir.
  • Kaynak0 – kaynak dosyalarını belirtir. Doğrudan bir URL veya yazılımın sıkıştırılmış kaynak kodunun yolu olabilir.
  • BuildRequires – yazılımı oluşturmak için gereken bağımlılıkları belirtir.
  • Gerektirir – yazılımı çalıştırmak için gereken bağımlılıkları belirtir.
  • %prep – rpm paketini oluşturmaya yönelik ortamı oluşturmak için kullanılır.
  • %build – kaynak kodlarını derlemek ve oluşturmak için kullanılır.
  • %install – bu, programları yüklemek için kullanılır. Ortaya çıkan dosyayı derleme işleminden BUILDROOT dizinine kopyalamak için gereken komutları listeler.
  • %files – bu bölüm, paket tarafından sağlanan ve sisteme yüklenecek dosyaları listeler.
  • %changelog – özellikle temel yukarı akış kaynağının üstünde güvenlik ve hata düzeltme ekleri varsa, RPM'nin hazırlanmasına yönelik çalışmaları saklamalıdır. hello.spec dosyası oluşturulurken otomatik olarak oluşturulur. Değişiklik günlüğü verileri genellikle rpm --changelog -q ile görüntülenir.

Şimdi .spec dosyanızı düzenleyin ve gösterildiği gibi değişiklikleri yapın.

Name:           hello
Version:        2.10
Release:        1%{?dist}
Summary:        The "Hello World" program from GNU

License:        GPLv3+
URL:            http://ftp.gnu.org/gnu/%{name}
Source0:        http://ftp.gnu.org/gnu/%{name}/%{name}-%{version}.tar.gz

BuildRequires: gettext
      
Requires(post): info
Requires(preun): info

%description 
The "Hello World" program package 

%prep
%autosetup

%build
%configure
make %{make_build}

%install
%make_install
%find_lang %{name}
rm -f %{buildroot}/%{_infodir}/dir

%post
/sbin/install-info %{_infodir}/%{name}.info %{_infodir}/dir || :

%preun
if [ $1 = 0 ] ; then
/sbin/install-info --delete %{_infodir}/%{name}.info %{_infodir}/dir || :
fi

%files -f %{name}.lang
%{_mandir}/man1/hello.1.*
%{_infodir}/hello.info.*
%{_bindir}/hello

%doc AUTHORS ChangeLog NEWS README THANKS TODO
%license COPYING

%changelog
* Tue May 28 2019 Aaron Kili

Yukarıdaki dosyada henüz açıklanmayan bazı yeni parametreler kullandığımızı fark edeceksiniz. Bunlara makrolar adı verilir ve paketler için kurulum yollarını ayarlamak amacıyla RPM tarafından tanımlanan sistem çağrılarını oluşturmak için kullanılır. Bu nedenle, genellikle bu yolları spesifikasyon dosyalarına sabit kodlamamak, tutarlılık için aynı makroları kullanmak tercih edilir.

Aşağıda, tanımları ve varsayılan değerleriyle birlikte RPM derlemesi ve dizin makroları yer almaktadır:

  • %{make_build – spesifikasyon dosyasının %build bölümünde kullanılır, make komutunu çalıştırır.
  • %{name – paket veya dizin adını tanımlar.
  • %{buildroot – %{_buildrootdir}/%{name}-%{version}-%{release}.%{_arch}, $BUILDROOT ile aynı
  • %{_infodir – %{_datarootdir}/info, varsayılan: /usr/share/info
  • %{_mandir – %{_datarootdir}/man, varsayılan: /usr/share/man
  • %{_bindir – %{_exec_prefix}/bin, varsayılan: /usr/bin

Bu makrolara ilişkin değerleri /usr/lib/rpm/platform/*/macros'da bulabileceğinizi veya Paketleme Yönergeleri:RPM Makroları'na başvurabileceğinizi unutmayın.

RPM Paketini Oluşturma

Kaynak, ikili ve hata ayıklama paketlerini oluşturmak için aşağıdaki rpmbuild komutunu çalıştırın.

rpmbuild -ba hello.spec

Oluşturma işleminden sonra, kaynak RPM'ler ve ikili RPM'ler sırasıyla ../SRPMS/ ve ../RPMS/ dizinlerinde oluşturulacaktır. Oluşturulan spesifikasyon dosyasının ve RPM dosyalarının RPM tasarım kurallarına uygunluğunu kontrol etmek ve sağlamak için rpmlint programını kullanabilirsiniz:

rpmlint hello.spec ../SRPMS/hello* ../RPMS/*/hello*

Yukarıdaki ekran görüntüsünde gösterildiği gibi herhangi bir hata varsa, devam etmeden önce bunları düzeltin.

Son olarak, Fedora sınırlı derleme ortamında paket derlemesinin başarılı olup olmayacağını kontrol etmek için sahte programı kullanın.

mock --verbose ../SRPMS/hello-2.10-1.fc29.src.rpm

Daha fazla bilgi için Fedora belgelerine bakın: RPM Paketleri Oluşturma.

Bu kadar! Bu yazımızda Fedora sisteminizi basit bir kaynak ve ikili yazılım paketi oluşturacak şekilde nasıl yükseltebileceğinizi anlattık. Ayrıca GUN Hello Word RPM paketinin nasıl oluşturulacağını da gösterdik. Her türlü soru veya yorumunuz için bize ulaşmak için aşağıdaki geri bildirim formunu kullanın.