GNU/Linux >> Belajar Linux >  >> Linux

Cara membuat paket RPM Linux

Artikel ini menunjukkan kepada Anda cara mengemas skrip ke dalam file RPM untuk kemudahan instalasi, pembaruan, dan penghapusan dari sistem Linux Anda. Sebelum saya masuk ke detailnya, saya akan menjelaskan apa itu paket RPM, dan bagaimana Anda dapat menginstal, menanyakan, menghapus, dan, yang paling penting, membuatnya sendiri.

Artikel ini mencakup:

  • Apa itu paket RPM.
  • Cara membuat paket RPM.
  • Cara menginstal, membuat kueri, dan menghapus paket RPM.

Apa itu paket RPM?

RPM adalah singkatan dari Pengelola Paket Topi Merah . Ini dikembangkan oleh Red Hat dan terutama digunakan pada sistem operasi Linux berbasis Red Hat (Fedora, CentOS, RHEL, dll.).

Paket RPM menggunakan .rpm ekstensi dan merupakan bundel (kumpulan) file yang berbeda. Ini dapat berisi yang berikut:

  • File biner, juga dikenal sebagai executable (nmap , stat , xattr , ssh , sshd , dan seterusnya).
  • File konfigurasi (sshd.conf , updatedb.conf , logrotate.conf , dll.).
  • File dokumentasi (README , TODO , AUTHOR , dll.).

Nama paket RPM mengikuti format ini:

<name>-<version>-<release>.<arch>.rpm 

Contoh:

bdsync-0.11.1-1.x86_64.rpm 

Beberapa paket juga menyertakan versi singkatan dari distribusi yang dibuat, seperti:

bdsync-0.11.1-1.el8.x86_64.rpm 

[ Anda juga dapat menikmati: Pengelolaan paket Linux dengan YUM dan RPM ]

Cara membuat paket RPM

Anda memerlukan komponen berikut untuk membuat paket RPM:

  • Sebuah workstation atau mesin virtual yang menjalankan distribusi berbasis RPM, seperti RHEL atau Fedora.
  • Perangkat lunak untuk membuat paket.
  • Kode sumber untuk dikemas.
  • File SPEC untuk membuat RPM.

Menginstal perangkat lunak yang diperlukan

Paket-paket berikut perlu diinstal untuk membangun paket RPM:

$ sudo dnf install -y rpmdevtools rpmlint 

Setelah menginstal rpmdevtools , buat pohon file yang Anda butuhkan untuk membuat paket RPM:

$ rpmdev-setuptree 

Anda membangun paket RPM sebagai pengguna normal (bukan root), jadi lingkungan pembangunan Anda ditempatkan ke direktori home Anda. Ini berisi struktur direktori ini:

rpmbuild/
├── BUILD
├── RPMS
├── SOURCES
├── SPECS
└── SRPMS 
  • BUILD direktori digunakan selama proses pembuatan paket RPM. Di sinilah file-file sementara disimpan, dipindahkan, dll.
  • RPMS direktori menampung paket RPM yang dibuat untuk arsitektur dan noarch yang berbeda jika ditentukan dalam .spec file atau selama pembuatan.
  • SUMBER direktori, seperti namanya, menyimpan sumber. Ini bisa berupa skrip sederhana, proyek C kompleks yang perlu dikompilasi, program pra-kompilasi, dll. Biasanya, sumber dikompresi sebagai .tar.gz atau .tgz file.
  • SPEC direktori berisi .spec file. .spec file mendefinisikan bagaimana sebuah paket dibangun. Lebih lanjut tentang itu nanti.
  • SRPMS direktori menyimpan .src.rpm paket. Paket RPM Sumber bukan milik arsitektur atau distribusi. .rpm yang sebenarnya pembuatan paket didasarkan pada .src.rpm paket.

Sebuah .src.rpm paket sangat fleksibel, karena dapat dibangun dan dibangun kembali pada setiap distribusi dan arsitektur berbasis RPM lainnya.

Sekarang Anda akrab dengan isi setiap direktori, jadi sekarang buat skrip sederhana untuk didistribusikan:

$ cat << EOF >> hello.sh
#!/bin/sh
echo "Hello world"
EOF 

Ini membuat skrip shell bernama hello.sh , yang mencetak "Hello world" ke terminal. Sederhana, tapi cukup untuk mendemonstrasikan pengemasan.

Tempatkan skrip di direktori yang ditentukan

Untuk membuat paket untuk skrip Anda, Anda harus meletakkan skrip Anda di direktori yang diharapkan oleh sistem pembangunan RPM. Buat direktori untuk skrip tersebut, menggunakan versi semantik seperti yang dilakukan sebagian besar proyek, lalu pindahkan hello.sh ke dalamnya:

$ mkdir hello-0.0.1
$ mv hello.sh hello-0.0.1 

Sebagian besar kode sumber didistribusikan sebagai arsip, jadi gunakan perintah tar untuk membuat file arsip:

$ tar --create --file hello-0.0.1.tar.gz hello-0.0.1 

Kemudian pindahkan tarball yang baru saja Anda buat ke dalam SOURCES direktori:

$ mv hello-0.0.1.tar.gz SOURCES 

Buat file .spec

Paket RPM didefinisikan oleh .spec mengajukan. Sintaks dari .spec file ketat, tetapi rpmdev dapat membuat file boilerplate untuk Anda:

$ rpmdev-newspec hello 

Ini menghasilkan file bernama hello.spec , yang harus Anda pindahkan ke SPECS direktori. Jalankan tree ~/rpmbuild untuk melihat seperti apa struktur direktori:

/home/tux/rpmbuild/
├── BUILD
├── BUILDROOT
├── RPMS
├── SOURCES
│   └── hello-0.0.1.tar.gz
├── SPECS
│   └── hello.spec
└── SRPMS 

hello.spec yang dihasilkan file memberikan titik awal yang baik, tetapi tidak memiliki informasi spesifik tentang apa yang Anda bangun. .spec . yang dihasilkan file mengasumsikan bahwa saya akan mengkompilasi dan membangun perangkat lunak.

Anda sedang mengemas skrip Bash, jadi ada beberapa penyederhanaan yang dapat Anda lakukan. Misalnya, tidak ada Build proses karena tidak ada kode untuk dikompilasi. Saya telah menambahkan BuildArch:noarch karena paket ini valid untuk 32-bit, 64-bit, Arm, dan arsitektur CPU lainnya yang menjalankan Bash.

Saya juga telah menambahkan Persyaratan:bash sehingga paket memastikan bahwa Bash diinstal. Skrip "hello world" sederhana ini tentu saja berjalan pada shell apa pun, tetapi itu tidak berlaku untuk semua skrip, jadi ini adalah cara yang baik untuk mendemonstrasikan dependensi.

Name:           hello Version:        0.0.1 Release:        1%{?dist} Summary:      A simple hello world script BuildArch:      noarch License:        GPL Source0:        %{name}-%{version}.tar.gz Requires:       bash %description A demo RPM build %prep %setup -q %install rm -rf $RPM_BUILD_ROOT mkdir -p $RPM_BUILD_ROOT/%{_bindir} cp %{name}.sh $RPM_BUILD_ROOT/%{_bindir} %clean rm -rf $RPM_BUILD_ROOT %files %{_bindir}/%{name}.sh %changelog * Sun Nov  18 2020 Valentin Bajrami <[email protected]> - 0.0.1 - First version being packaged

Seperti yang Anda tahu, ada banyak pintasan di .spec file. Mereka disebut makro, dan ada daftar bagus tentang apa yang tersedia di dokumentasi pengemasan Fedora. Penting untuk menggunakan makro di .spec . Anda file. Mereka membantu memastikan konsistensi di semua sistem RPM, membantu Anda menghindari kesalahan dalam nama file dan penomoran versi, dan mempermudah pembaruan .spec file saat Anda merilis versi baru skrip Anda.

Misalnya, Anda harus menentukan dengan tepat file mana yang diinstal di bawah %files bagian. Di sini saya secara eksplisit meletakkan baris berikut:

%files
%{_bindir}/%{name}.sh 

Ini berfungsi karena saya ingin skrip masuk ke %{_bindir} (yang merupakan makro yang diterjemahkan menjadi /usr/bin secara default, tetapi dapat dikonfigurasi ketika pengguna ingin menginstal ke lokasi yang berbeda, seperti /usr/local/bin ). Anda dapat memverifikasi nilai makro dengan menjalankan:

$ rpm --eval '%{_bindir}'
/usr/bin 

Makro berguna lainnya:

  • %{name} nama paket (sebagaimana didefinisikan dalam Nama: lapangan)
  • %{version} versi paket (sebagaimana didefinisikan dalam Versi: lapangan)
  • %{_datadir} data bersama (/usr/sbin secara default)
  • %{_sysconfdir} direktori konfigurasi (/etc secara default)

Memeriksa file .spec yang error (rpmlint)

rpmlint perintah dapat menemukan kesalahan di .spec file:

$ rpmlint ~/rpmbuild/SPECS/hello.spec
SPECS/hello.spec: W: no-%build-section
SPECS/hello.spec: W: invalid-url Source0: hello-0.0.1.tar.gz
0 packages and 1 specfiles checked; 0 errors, 2 warnings. 

Ada 2 kesalahan yang dilaporkan, tetapi keduanya dapat diterima. Tidak ada kode untuk dibuat, jadi tidak perlu %build bagian, dan arsip sumber adalah file lokal dan tidak memiliki URL jaringan.

Semuanya terlihat bagus.

Membangun paket (rpmbuild)

Untuk membangun paket RPM, gunakan rpmbuild memerintah. Sebelumnya dalam tutorial ini, saya menyebutkan perbedaan antara .src.rpm (Paket RPM Sumber) dan .rpm paket.

Untuk membuat .src paket rpm:

$ rpmbuild -bs ~/rpmbuild/SPECS/hello.spec 

Bendera -bs memiliki arti sebagai berikut:

  • -b:membangun
  • -s:sumber

Untuk membuat paket .rpm biner:

$ rpmbuild -bb ~/rpmbuild/SPECS/rm-ssh-offendingkey.spec 

Bendera -bb memiliki arti sebagai berikut:

  • -b:membangun
  • -b:biner

Gunakan -ba untuk membangun keduanya.

Setelah proses build selesai, Anda memiliki struktur direktori berikut:

$ tree ~/rpmbuild/
/home/tux/rpmbuild/
├── BUILD
│   └── hello-0.0.1
│       ├── hello.sh
├── BUILDROOT
├── RPMS
│   └── noarch
│       └── hello-0.0.1-1.el8.noarch.rpm
├── SOURCES
│   └── hello-0.0.1.tar.gz
├── SPECS
│   └── hello.spec
└── SRPMS 

Menginstal paket RPM

Setelah pembuatan paket berhasil, Anda dapat menginstal paket RPM menggunakan dnf perintah:

$ sudo dnf install ~/rpmbuild/RPMS/noarch/hello-0.0.1-1.el8.noarch.rpm 

Itu dapat diinstal secara bergantian dengan rpm perintah langsung:

$ sudo rpm -ivh ~/rpmbuild/RPMS/noarch/hello-0.0.1-1.el8.noarch.rpm 

Verifikasi paket telah diinstal

Untuk memverifikasi bahwa paket telah diinstal dengan benar, jalankan perintah berikut:

$ rpm -qi hello
Name        : hello
Version     : 0.0.1
Release     : 1
Architecture: noarch
Install Date: Mon 09 Nov 2020 01:29:51 AM CET
Group       : Unspecified
Size        : 294
License     : GPL
Signature   : (none)
Source RPM  : hello-0.0.1-1.el8.src.rpm
Build Date  : Mon 09 Nov 2020 01:08:14 AM CET
Build Host  : slimmerAI
Summary     : A simple hello world script
Description : A demo RPM build 

%log perubahan entri paket dapat dilihat juga:

$ rpm -q hello --changelog
* Sun Nov 08 2020 Valentin Bajrami <[email protected]> - 0.1
- First version being packaged 

Lihat apa yang ada di paket RPM

Sangat mudah untuk melihat file mana yang berisi paket RPM:

$ rpm -ql hello
/usr/bin/hello.sh 

Menghapus paket RPM

Menghapus paket dari sistem semudah menginstalnya. Anda dapat menggunakan dnf perintah:

$ sudo dnf remove hello 

Atau rpm perintah langsung:

$ sudo rpm --verbose --erase hello 

Pemikiran terakhir

Dalam dokumen ini, saya membahas dasar-dasar pengemasan, termasuk cara membuat, menginstal, dan menghapus paket RPM dari sistem Anda. .spec file bisa menjadi sangat rumit saat Anda membangun perangkat lunak yang lebih canggih, tetapi Anda dapat membaca contoh nyata di repositori perangkat lunak publik, seperti src.fedoraproject.org, untuk mempelajari lebih lanjut.

[ Kursus online gratis:Ikhtisar teknis Red Hat Enterprise Linux. ] 


Linux
  1. Cara mengemas aplikasi Python untuk Linux

  2. Cara Mendaftar File yang Diinstal Dari Paket RPM atau DEB di Linux

  3. Cara Membuat Script Perintah Linux

  1. Cara Membuat Swap di Linux

  2. Cara membuat layanan Systemd di Linux

  3. Cara membuat file swap di Linux

  1. Cara menggunakan pkgsrc di Linux

  2. Cara membuat paket rpm

  3. Cara memeriksa integritas paket rpm di Linux