RedHat: apakah mungkin untuk menginstal paket dalam semacam lingkungan tiruan untuk membangun RPM

10

Apakah ada alat yang memungkinkan untuk menginstal dependecies dari RPM .spec ke lingkungan yang terisolasi? Saya tidak akan menginstal dependensi seperti itu secara global pada sistem dan saya tidak dapat melakukannya karena saya belum mendapatkan root privilege.

Alasannya

Saya ingin membangun paket A yang tergantung pada versi B yang lebih baru (yang tidak dapat diinstal secara global pada sistem).

Saya ingin membangun versi yang lebih baru dari B dan membiarkan membangun alat install B 's -develmenjadi sebuah lingkungan yang terisolasi untuk memberikan semua file yang diperlukan untuk membangun dari A .

Solusi

  • Apakah ada alat untuk melakukan ini?
  • Jika tidak, apa yang harus saya urus ketika mencoba melakukan ini dengan mengatakan chroot?
  • Apakah ini akan menjadi praktik yang buruk?
coba-tangkap-akhirnya
sumber

Jawaban:

8

Ya, alat ini disebut mockdan ada dalam EPEL.

Penggunaan umum:

rpmbuild -bs mypackage.spec
mock -r epel-6-x86_64 mypackage-0.1-1.src.rpm

Ini sebenarnya adalah cara yang disukai untuk membangun RPM, justru karena itu mengisolasi proses dari sistem sehingga ketergantungan yang tidak terduga tidak bisa ditarik.

Anda dapat memodifikasi file /etc/mockuntuk membuatnya menarik dalam paket Anda sendiri, repo pribadi, dll, atau periksa dokumen untuk info tentang cara menambahkan paket ke mocklingkungan chroot secara manual.

Perhatikan bahwa pengguna harus ditambahkan ke mockgrup untuk diizinkan menggunakan mock.

Bukan kebetulan, kojiserver build yang Red Hat menggunakan panggilan mockuntuk membangun setiap paket individu. Jika Anda harus membangun banyak paket setiap saat, mungkin ada baiknya Anda menyiapkan kojiserver pembangun.

Michael Hampton
sumber
Terima kasih Michael. Ini kedengarannya sangat bagus dan saya senang pertanyaan saya tidak sebodoh yang saya kira. ;)
coba-tangkap-akhirnya
3

Saya pikir mencoba untuk membangun paket pada host produksi adalah praktik yang buruk dan berusaha melakukannya tanpa hak akses root lebih rumit daripada membawa mesin build Anda sendiri. Apa yang biasanya saya lakukan adalah sebagai berikut.

  1. Instal VirtualBox atau alat serupa di desktop / laptop Anda
  2. Buat 32/64 VM OS yang Anda gunakan dalam produksi
  3. Instal alat yang biasanya tiruan, rpmbuild, dll
  4. Buat RPM untuk paket dan deps tambahan untuk kedua lengkungan pada VM Anda
  5. Setelah pengujian, dorong RPM ke dalam repo internal Anda untuk didistribusikan ke server Anda
  6. Tes lagi untuk memastikan ketergantungan yang tepat sedang ditarik
  7. Lepaskan melalui manajemen konfigurasi Anda.
Ramin
sumber
Ini akan bekerja Bagaimana ini lebih baik daripada menggunakan tiruan? Saya pikir mengolok-olok akan lebih mudah, tetapi saya curiga hal yang sama terjadi.
emory
Saya tidak punya masalah dengan mock dan saya percaya bahwa hampir semua dokumen "bagaimana membuat rpm" sudah Anda instal. Namun tanpa akses root, saya tidak yakin bagaimana OP akan menambahkan akun mereka ke grup tiruan, memasang tiruan, dan sebagainya. Juga memiliki VM build clean membantu menghindari ketergantungan aneh yang tidak sengaja ditambahkan ke paket.
Ramin
Poin luar biasa. Saya gagal mempertimbangkan itu. Dengan pemikiran itu, saya pikir ini adalah jawaban yang benar.
emory
@emory berdasarkan umpan balik Anda, saya menjelaskan mengapa saya pikir membangun VM adalah solusi yang lebih baik secara keseluruhan yang menurut saya membuat jawaban yang lebih baik. Terima kasih telah mendorong saya. :-)
Ramin
@Ramin dalam situasi saya (di tempat kerja) Saya hanya pengguna . Sistem ini adalah sistem build khusus dan, jika semua pengembang di host itu memiliki hak akses root, kotak itu tidak akan boot setelah 1 minggu. ;) Jadi menggunakan alat seperti Mock adalah hal yang tepat untuk digunakan! Menyiapkan VM juga merupakan ide yang bagus jika dapat dibuat otomatis. Saya pikir Vagrant (saya belum mengujinya) adalah alat yang tepat untuk itu.
coba-tangkap-akhirnya