Cara membuat pakej rpm

Cara membuat pakej rpm

RPM adalah pengurus pakej dan format pakej yang digunakan oleh banyak pengagihan Linux seperti Fedora, Red Hat dan Centos, untuk mengurus dan mengedarkan perisian dalam bentuk binari. Dalam tutorial ini kita akan melihat cara membina dan membungkus aplikasi mudah.

Dalam tutorial ini anda akan belajar:

  • Apakah konsep asas di sebalik proses bangunan RPM.
  • Apakah persekitaran binaan.
  • Apa itu spesifikasi.
  • Cara menggunakan makro di dalam spesifikasi.
  • Cara memasang kebergantungan membina.
  • Cara membuat spesifikasi.
  • Cara Membina Pakej RPM.

Keperluan perisian dan konvensyen yang digunakan

Keperluan Perisian dan Konvensyen Talian Perintah Linux
Kategori Keperluan, konvensyen atau versi perisian yang digunakan
Sistem Fedora 29
Perisian N/a
Yang lain Akses istimewa ke sistem linux anda sebagai akar atau melalui sudo Perintah untuk memasang pakej yang diperlukan.
Konvensyen # - Memerlukan arahan Linux yang diberikan untuk dilaksanakan dengan keistimewaan akar sama ada secara langsung sebagai pengguna root atau dengan menggunakan sudo perintah
$ - Memerlukan arahan Linux yang diberikan sebagai pengguna yang tidak layak

Konsep asas RPM

Memasang, membuang, mengemas kini, (dalam satu perkataan, mengurus) perisian adalah tugas penting pada setiap sistem operasi. Apabila pengurus pakej bukan sesuatu, satu -satunya cara untuk memasang program adalah menyusun kod sumbernya, dan meletakkan fail yang dihasilkan di tempat yang sesuai di sistem fail. Mengesan kebergantungan setiap kod adalah sangat sukar dan memakan masa. Kemudian pengurus pakej diperkenalkan, dan semuanya menjadi lebih mudah.

Setiap pengedaran Linux moden mempunyai, pada masa kini, Pengurus Pakejnya: Debian dan Derivatifnya Kegunaan dpkg, manakala
rpm digunakan dalam keluarga red hat pengagihan. Perisian disediakan sebelum ini di bawah bentuk pakej, yang pada dasarnya dimampatkan arkib yang mengandungi metadata mengenai versi perisian, kebergantungannya dan kemungkinan konflik dengan pakej lain.



Dalam tutorial ini, kita akan melihat cara membuat pakej RPM bermula dari kod sumber aplikasi. Permohonan yang akan kami pakai adalah Feh, Penonton imej baris arahan mudah: ia agak kecil dan mempunyai sedikit kebergantungan. Sebelum mula membina pakej pertama kami, terdapat beberapa konsep penting yang harus kita pegang.

Persekitaran membina

Akar pokok persekitaran membina rpm adalah rpmBuild Direktori, yang mengandungi 6 subdirektori: Membina, Buildroot, Rpms, Sumber, Spesifikasi dan SRPMS. Kami akan melihat bagaimana mungkin untuk menjana persekitaran ini dengan melancarkan arahan mudah; Buat masa ini, mari kita sebutkan peranan direktori ini. Berikut adalah perwakilan pokok kerja:

 RPMBuild |- Build |- Buildroot |- RPMS |- Sumber |- Spesifikasi |- SRPMS 

Setiap direktori ini, mempunyai peranan khusus dalam proses bangunan:

  • The Membina Direktori adalah di mana kod sumber program yang kami mahu pakej dibina
  • The Buildroot Direktori adalah di mana fail yang terhasil daripada penyusunan perisian di dalam direktori Build disalin, mencerminkan struktur sistem sasaran di dalam subdirektori dengan pakej MAME:
    Dalam kes kita, binari "feh" yang akan dipasang /usr/bin akan dilaporkan sebagai Buildroot/FEH-3.0-1.FC29.x86_64/usr/bin.
  • The Rpms direktori, adalah di mana rpm Pakej dijana: Setiap rpm akan diletakkan dalam subdirektori
    dinamakan sempena seni bina, atau, Noarch Sekiranya ia bukan seni bina.
  • The Sumber Direktori menjadi tuan rumah kod sumber termampat perisian yang kami ingin pakai, selalunya di bawah bentuk tarball dari fail zip.
  • The Spesifikasi direktori, adalah tempat kami meletakkan .spesifikasi fail dengan arahan untuk membina pakej kami: kami akan menganalisis struktur fail ini dalam seketika.
  • The SRPMS Direktori adalah bersamaan dengan rpms, tetapi untuk sumber RPM. Pakej khas ini mengandungi kod sumber asal aplikasi, patch akhirnya, dan spesifikasi yang digunakan untuk membina pakej.

Fail spec

Fail di mana semua arahan dan maklumat yang diperlukan untuk membina pakej rpm ditakrifkan adalah .spesifikasi fail. Spesifikasi mengandungi, antara perkara lain, membina kebergantungan (perisian yang diperlukan untuk menyusun program yang ingin kami pakai), Ketergantungan Runtime (Perpustakaan yang diperlukan untuk program berjalan dengan betul) dan ommands yang harus dilaksanakan untuk menyusun perisian.



Fail ini disusun oleh dua bahagian makro: a mukadimah dan juga badan. Di setiap bahagian ini, arahan yang berbeza dapat ditentukan. Mari lihat sebahagian daripada mereka. The mukadimah seksyen boleh mengandungi arahan berikut:

    • Nama: Nama asas pakej (ini sepadan dengan nama fail spec)
    • Versi: Versi hulu perisian yang dibungkus
    • Pembebasan: Nombor pelepasan pakej
    • Lesen: Lesen yang digunakan untuk perisian yang ingin kami pakai
    • Url: URL hulu perisian
    • Sumber0: URL langsung atau laluan kod sumber termampat perisian (tarball atau fail zip)
    • Buildarch: Seni bina pakej: jika tiada seni bina ditentukan salah satu sistem tuan rumah akan digunakan
    • Buildrequires: Kebergantungan yang diperlukan untuk membina perisian
    • Memerlukan: Kebergantungan yang diperlukan untuk menjalankan perisian

The badan Bahagian spesifikasi, biasanya mengandungi bahagian berikut:

  • Penerangan %: Penerangan pelbagai baris pilihan perisian yang dibungkus
  • %prep: Perintah yang diperlukan untuk menyediakan kod sumber (contohnya, perintah yang diperlukan untuk mengeluarkan tarball)
  • %Membina: Arahan yang diperlukan untuk membina perisian
  • %Pasang: Arahan yang diperlukan untuk menyalin fail yang dihasilkan dari proses binaan ke Buildroot direktori
  • %fail: Senarai fail yang disediakan oleh pakej, yang akan dipasang pada sistem

Makro

Untuk meringankan pekerjaan kita, di dalam spesifikasi, kita boleh menggunakan beberapa makro yang membolehkan kita merujuk banyak perkara berguna dan melaksanakan tugas tertentu secara automatik. Pertama sekali kita mempunyai Macro direktori rpm yang membolehkan penggunaan dirujuk direktori persekitaran binaan kami; Kita harus selalu menggunakannya dan bukannya laluan langsung:

  • %_ topdir: Makro ini merujuk rpmBuild direktori
  • %_ Builddir: Rujukan Membina Direktori di dalam pokok binaan kami
  • %_ rpmdir: Merujuk jalan Rpms direktori
  • %_ Sourcedir: Makro ini dinilai ke jalan Sumber direktori
  • %_ specdir: Makro yang mewakili jalan Spesifikasi direktori
  • %_ srcrpmdir: Merujuk jalan SRPMS direktori
  • %_ Buildrootdir: Merujuk jalan Buildroot direktori

Macro lain marilah kita merujuk direktori yang paling penting dalam sistem fail mesin kami, sebagai contoh:

  • %_ sysconfigdir: The /dan lain-lain direktori
  • %_ awalan: The /usr direktori
  • %_ bindir: The /usr/bin direktori
  • %_ Mandir: Jalan ke /usr/share/man direktori

Yang di atas, bukan senarai lengkap, tetapi memberi anda idea. Di samping itu, kita juga boleh menggunakan satu set makro yang melaksanakan tugas tertentu. Untuk mengembangkan definisi makro, dan sebagainya untuk melihat kandungannya, kita boleh menggunakan RPM -Eval perintah, yang mengambil makro sebagai hujahnya. Berikut adalah beberapa contoh makro yang sering digunakan:



  • The persediaan % makro, digunakan di %config Bahagian spesifikasi, dan pada dasarnya melakukan tindakan berikut:
    1. Mengekstrak kod sumber program yang kami mahu pakai ke dalam Builddir direktori
    2. Beralih ke direktori yang diekstrak
    3. Menetapkan kebenaran fail yang sesuai di dalamnya
  • The %make_build Makro digunakan di %Membina bahagian spesifikasi, dan pada dasarnya menjalankan buat Perintah dengan set pilihan yang telah ditetapkan, untuk menyusun kod sumber perisian. Jika kita mengembangkannya, kita boleh menyemak arahan yang berjalan:
    $ rpm -Eval "%make_build"/usr/bin/make -o -j4 
  • The %make_install Makro, sebaliknya, digunakan di %Pasang bahagian fail dan larian buat pemasangan dengan Destdir parameter, digunakan untuk mengarahkan arahan untuk memasang fail yang disusun secara relatif ke direktori yang diberikan dan bukannya sistem sebenar /:
    $ rpm --Eval "%make_install"/usr/bin/membuat pemasangan destdir =/home/egdoc/rpmbuild/bangunan/%name-%version-%release.x86_64 install = "/usr/bin/install -p" 

Cara Membuat Pakej RPM Langkah demi Langkah Arahan

Sekarang kita mempelajari konsep asas proses pembinaan pakej, kita dapat melihat bagaimana untuk mewujudkan persekitaran binaan kita dan pakej RPM pertama kita. Mari buat pakej kami.

Pasang kebergantungan membina

Sebagai perkara pertama, kita perlu memasang rpmdevtools, ditambah dengan kebergantungan yang diperlukan untuk membina Feh:

$ sudo dnf pemasangan rpmdevtools gcc membuat imlib2-devel libjpeg-devel libpng-devel libxt-devel libxinerama-devel libexif-devel \ perl-test-command perl-harness libcurl-devel libcurl-devel libcurl-devel libcurl-devel 


Setelah pakej dipasang, kami dapat menjana persekitaran binaan kami. Apa yang perlu kita lakukan ialah melancarkan arahan berikut:

$ rpmdev-setuptree

Pada ketika ini rpmBuild direktori, dan semua subdirektori yang kita lihat sebelum ini, harus dibuat. Langkah seterusnya ialah menulis spesifikasi kami.

Buat spesifikasi

Kami membuat spesifikasi dengan editor teks kegemaran kami, dan menyimpannya di Spesifikasi direktori dengan nama yang sama pakej. Berikut adalah bagaimana spesifikasi minimum kelihatan seperti:

Nama: FEH Versi: 3.0 Siaran: 1%?Dist Ringkasan: Penonton imej baris arahan cepat menggunakan lesen IMLIB2: MIT URL: http: // feh.FinalRewind.org source0: http: // feh.FinalRewind.org/feh-%versi.tar.BZ2 BuildRequires: GCC BuildRequires: Imlib2-Devel BuildRequires: libcurl-devel BuildRequires: libjpeg-devel BuildRequires: libpng-devel BuildRequires: libxt-devel binaan: liBxinerque-devel-devel-devel-devel-devel-devel-devel-devel-devel-devel-devel-devel-devel-devel-devel-devel-devel-devel-devel-devel-devel-devel-devel-devel-devel-devel-devel-devel-devel-devel-devel-devel-devel-devel-devel. Test -Harness %Description Fast Command Line Image Viewer Menggunakan IMLIB2 %Prep %Setup -Q %Build %Make_Build %Pasang %Make_install Prefix = %_ Prefix %Files/usr/bin/feh/usr/lib/debug/debug/debug /usr/bin/feh-3.0-1.FC29.x86_64.Debug/USR/Share/Aplikasi/FEH.desktop/usr/share/doc/feh/pengarang/usr/share/doc/feh/changelog/usr/share/doc/feh/readme.MD/USR/SHARE/DOC/FEH/TODO/USR/SHARE/DOC/FEH/Contoh/Butang/USR/SHARE/DOC/FEH/Contoh/Find-Lowres/USR/SHARE/DOC/FEH/Contoh/KEYS/ usr/share/doc/feh/contoh/tema/usr/share/feh/font/hitam.gaya/usr/share/feh/font/menu.gaya/usr/share/feh/font/yudit.TTF/USR/SHARE/FEH/IMAGE/FEH.PNG/USR/SHARE/FEH/IMAGE/FEH.svg/usr/share/feh/images/menubg_default.png/usr/share/ikon/hicolor/48x48/apps/feh.PNG/USR/SHARE/ICONS/HICOLOR/SCORABLE/APPS/FEH.svg/usr/share/man/man1/feh.1.Gz 

Mari analisisnya. Pertama, kami menetapkan beberapa maklumat asas mengenai perisian yang ingin kami pakai: namanya dan versi hulu, lesennya, lokasi halaman utama projek, dan pautan langsung ke kod sumber tarball, maka kami menyatakan membina kebergantungan menggunakan Buildrequires. Senarai kebergantungan boleh diwakili sebagai ruang atau koma yang dipisahkan dalam senarai, tetapi demi kebolehbacaan kami mengisytiharkan satu kebergantungan setiap baris, mengulangi Buildrequires arahan.



Setelah mengisytiharkan kebergantungan yang diperlukan untuk membina perisian, kami memberikan penerangan ringkas di Penerangan % seksyen, dan daripada diteruskan ke bahagian yang paling penting dari spesifikasi: arahan untuk menyediakan, membina dan memasang perisian, masing -masing di %prep, %Membina dan %Pasang bahagian.

Di dalam %prep seksyen, menyediakan %persediaan -q Makro sudah cukup: seperti yang dikatakan sebelum ini, makro ini akan menjalankan perintah yang diperlukan untuk membongkar tarball sumber dan meletakkan direktori yang diekstrak ke dalam Membina folder.

The %Membina bahagian adalah di mana kami menentukan arahan yang perlu dijalankan untuk membina kod sumber. Malah di sini, semua yang kita gunakan hanyalah %make_build makro, yang menjalankan buat Perintah dengan pilihan yang kita lihat sebelum ini, ke dalam direktori yang menganjurkan kod sumber yang dibongkar aplikasi yang kami mahu pakai.

Di dalam %Pasang seksyen, kami menggunakan makro lain, %make_install, menyediakan juga Awalan parameter, menetapkannya ke %_ awalan, yang akan berkembang menjadi /usr. Perintah yang dihasilkan akan menyebabkan fail yang dihasilkan oleh penyusunan kod sumber, yang akan diletakkan di dalam "akar palsu", yang ditetapkan dengan Destdir parameter yang terkandung dalam makro. Sejak di %make_install Makro, "Destdir" ditetapkan ke /rumah/egdoc/rpmbuild/bangunan/%name-%version-%release.x86_64, Fail akan dipasang di bawah: /rumah/egdoc/rpmbuild/bangunan/%name-%version-%release.x86_64/usr.

Akhirnya, kami menyediakan, di %fail bahagian, senarai fail yang akan dipasang oleh pakej kami. Senarai ini kemudiannya boleh diperiksa dengan menjalankan rpm -qlp/path/to/the/rpm perintah atau, jika pakej sudah dipasang, dengan hanya berjalan RPM -QL Packagename.

Dapatkan sumber dan bina pakej rpm

Sekarang fail spec kami akhirnya siap, kami dapat membina kami rpm. Anda mungkin melihat kami tidak memuat turun sumber tarball "feh" lagi: tidak perlu melakukan ini secara manual, kerana kami boleh menggunakan Spectool Perintah:



$ spectool -g -r ~/rpmbuild/spesifikasi/feh.spesifikasi mendapat http: // feh.FinalRewind.org/feh-3.0.tar.BZ2 ke/rumah/egdoc/rpmbuild/sumber/feh-3.0.tar.BZ2 % Jumlah % Diterima % Xferd Purata Masa Masa Kelajuan Masa Semasa Muat naik DLOAD Jumlah Total yang Dibelan Kiri Kelajuan 100 185 100 185 0 0 898 0-:---:-:--:-:-- -898 100 2057K 100 2057K 0 0 1988k 0 0:00:01 0:00:01-:-:-4191k 

Perintah ini akan memuat turun sumber yang kami rujuk dengan URL di dalam spesifikasi, dalam direktori yang sesuai dengan pokok kerja kami: ~/rpmbuild/sumber. Dengan sumber -sumber yang ada, kami dapat membina RPM kami: yang perlu kami lakukan ialah melancarkan rpmBuild perintah, dan berikan jalan ke spesifikasi. Semasa dilancarkan dengan -bb pilihan, rpmBuild hanya akan membina a pakej binari: Sekiranya kita mahu menjana juga a sumber rpm, kita mesti gunakan -ba Sebaliknya (rujuk Manpage RPMBuild untuk gambaran keseluruhan pilihan kemungkinan).

Satu perkara yang sangat penting untuk diingat adalah bahawa perintah rpmbuild tidak boleh dilancarkan dengan keizinan akar: Apabila berbuat demikian, walaupun kesilapan mudah dalam spesifikasi dapat menghasilkan kesan yang tidak diingini pada sistem kami. Mari jalankan RPMBuild:

$ rpmbuild -bb ~/rpmbuild/spesifikasi/feh.spesifikasi

Output operasi yang dilakukan akan dicetak di skrin, dan, jika semuanya berjalan seperti yang diharapkan, pakej RPM akan dihasilkan di dalam Rpms direktori.

Kesimpulan

Dalam tutorial ini, kami mempelajari konsep asas yang terlibat dalam penciptaan pakej RPM. Kami mempelajari beberapa makro, dan bagaimana membina a .spesifikasi fail, yang mengandungi semua arahan yang diperlukan untuk proses bangunan. Kami juga memberikan contoh sebenar, bangunan dan pembungkusan Feh, Penonton gambar baris arahan mudah. Saya cadangkan anda untuk berunding dengan panduan pembungkusan Red Hat Red.

Tutorial Linux Berkaitan:

  • Pengenalan kepada Automasi, Alat dan Teknik Linux
  • Perkara yang hendak dipasang di Ubuntu 20.04
  • Menguasai Gelung Skrip Bash
  • Mint 20: Lebih baik daripada Ubuntu dan Microsoft Windows?
  • Perkara yang perlu dilakukan setelah memasang ubuntu 20.04 Focal Fossa Linux
  • Cara mengemas kini centos
  • Muat turun linux
  • Ubuntu 20.04 Panduan
  • Cara berhijrah dari Centos ke Almalinux
  • Fail Konfigurasi Linux: 30 teratas yang paling penting