Cara membuat pakej rpm
- 4846
- 1133
- Jerome Quitzon
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
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
, manakalarpm
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 manarpm
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:- Mengekstrak kod sumber program yang kami mahu pakai ke dalam
Builddir
direktori - Beralih ke direktori yang diekstrak
- Menetapkan kebenaran fail yang sesuai di dalamnya
- Mengekstrak kod sumber program yang kami mahu pakai ke dalam
- The
%make_build
Makro digunakan di%Membina
bahagian spesifikasi, dan pada dasarnya menjalankanbuat
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 larianbuat pemasangan
denganDestdir
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