Apakah mungkin untuk menetapkan versi paket tertentu, yang bergantung pada paket utama?

10

Kami memiliki lingkungan pengembangan di FreeBSD 10.3. Saya pernah mendengar bahwa FreeBSD mengelola dependensi paket dengan cara itu, yang selalu mencari versi terbaru dari semua paket, yang bergantung pada paket utama. Dan sepertinya itu benar. Jadi, pertanyaan saya adalah:

  1. Apakah ini benar? apakah ada dokumen resmi yang membuktikannya?
  2. Cara terbaik bagaimana mengatasi masalah ini?
Sergius
sumber
7
Saya curiga, Anda dapat menginstal paket versi spesifik yang Anda butuhkan terlebih dahulu, pkg locklalu menginstalnya, dan kemudian menginstal semua yang Anda inginkan.
arrowd
1
Ini juga tergantung pada port / paket apa yang Anda inginkan dan di versi mana. Misalnya Anda dapat memiliki versi python / postgresql / php yang berbeda. Terkadang ada beberapa paket yang tersedia untuk sebuah perangkat lunak, kadang-kadang Anda dapat membangun paket khusus dari port.
Raphael Ahrens
3
Jika Anda menjalankan pembaruan freebsd (atau pkg upugrade) secara membabi buta, ya, ia akan menemukan yang terbaru dan mencoba menginstalnya. Seperti kata panahd, sekarang (sejak 9,2 atau lebih), Anda dapat pkg mengunci <pkg> yang seharusnya melindungi apa yang telah Anda instal dan ketergantungannya dari modifikasi. YMMV.
quadruplebucky

Jawaban:

1

Bagaimana FreeBSD Membangun Paket

Proyek FreeBSD digunakan untuk membangun paket hanya untuk rilis dan kadang-kadang untuk cabang STABLE. Pembangun paket lama menggunakan sistem terdistribusi bernama Portbuild. Itu akan menggunakan sekelompok besar mesin 2GB-4GB yang lebih kecil untuk membangun paket. Ini rawan kesalahan dan lambat, sebagian besar karena mesin yang lebih tua. Pembangunan penuh masih bisa memakan waktu seminggu. Paket hari ini dibangun menggunakan mesin besar tunggal menggunakan Poudriere. (Dari halaman web oleh Brian Drewery ).

Lihat juga: Cara memperbarui campuran paket dan port di FreeBSD

FreeBSD memiliki ABI (dan API) yang berevolusi seperti halnya Solaris dan Windows sementara Linux memiliki ABI yang stabil (stagnan?) Sehingga dengan Linux, binari lama masih akan berjalan pada versi OS yang lebih baru sementara dengan OS non-Linux ini bukan t selalu demikian (terkadang demikian).

Menggunakan pkg lockmasih dapat menyebabkan sakit kepala , sementara itu akan mengunci (menawarkan peringatan) ketika Anda mencoba untuk meningkatkan menggunakannya pkg upgrademasih menganggap bahwa versi nomor yang lebih tinggi lebih baik (diinginkan) dan itu adalah sesuatu yang ingin Anda lakukan - sehingga meminta izin, dan Anda bisa mengizinkan, tetapi itu tidak menjamin hal lain tidak akan rusak. Lihat URL di atas, atau diskusi ini: " Apakah Anda lebih suka FreeBSD untuk mengunci versi paket biner yang didistribusikan melalui pkg untuk versi OS? ".

Jika satu paket terkunci kadang-kadang Anda harus memberikan izin untuk membukanya dan melakukan peningkatan, sementara itu akan bekerja untuk satu paket (dan semua dependensinya) tidak ada jaminan bahwa sesuatu yang lain tidak akan tidak kompatibel dengan perpustakaan baru ( dan karenanya juga perlu ditingkatkan, jika saat ini tersedia).

Blog Brian Drewery: " FreeBSD Journal: Poudriere " berpendapat:

"Berhenti menggunakan portmaster, portupgrade dan port di server Anda dan beralih ke paket.

Menyiapkan paket Anda sendiri dengan Poudriere hanya membutuhkan beberapa menit dan akan menghemat banyak waktu di masa depan.

...

Jika Anda memelihara lebih dari satu sistem FreeBSD dan belum menggunakan paket, Anda harus melakukannya. Saya hanya memelihara 20 server, tetapi membangun port di setiap sistem membutuhkan banyak waktu dan sumber daya yang terbuang untuk mesin produksi. Saat membangun port di beberapa server, sangat mudah untuk mendapatkan opsi atau versinya yang tidak sinkron. Dengan membangun paket sekali pada satu sistem, saya mengurangi beban pada sistem saya, mengurangi jumlah pekerjaan yang harus saya lakukan dan membuat semua sistem saya konsisten. Alih-alih menangani kegagalan yang sama pada setiap sistem, saya hanya perlu menanganinya pada sistem build.

Tapi, halangan ...

Mengapa Anda perlu menyimpang dari paket resmi? Kerangka kerja port menyediakan opsi dukungan untuk port untuk mengubah konfigurasi build-time. Tidak semua aplikasi mendukung konfigurasi run-time. Beberapa aplikasi harus dikompilasi secara berbeda tergantung pada fitur yang diaktifkan. Yang lain memiliki opsi hanya untuk mengurangi jumlah fitur dan dependensi di port default. Untuk administrator server, ini dapat dengan cepat menemukan bahwa beberapa paket default tidak memenuhi persyaratan mereka.

Jadi ...

Ada beberapa cara untuk mendapatkan paket khusus. Pkg mendukung penggunaan beberapa repositori. Dapat diatur untuk menggunakan repositori resmi FreeBSD sebagai primer dan kustom sebagai sekunder. Pkg tidak dibatasi oleh jumlah repositori yang dapat dilacaknya dan mereka dapat disusun kembali berdasarkan prioritas. Masalah dengan beberapa repositori adalah bahwa saat ini sulit untuk dipelihara. Ketika Pkg mendeteksi bahwa paket yang diinstal memiliki opsi atau dependensi berbeda dari repositori yang dilacaknya, paket tersebut akan diinstal ulang dari versi yang berpotensi di mana pun. Anda dapat mengunci paket selama upgrade dengan pkg mengunci PKGNAME dan pkg membuka kunci PKGNAME atau mengikatnya ke repositori tertentu dengan pkg beranotasi -A repositori PKGNAME REPONAME. Ada juga masalah halus menjaga pohon port untuk repositori khusus Anda sinkron dengan paket FreeBSD. Karena paket dibuat dari snapshot port ports yang diambil seminggu sekali, jika repositori khusus Anda tidak cocok, itu dapat menyebabkan konflik. Jauh lebih mudah untuk hanya membangun satu set seluruh paket hanya apa yang Anda butuhkan dengan opsi yang Anda inginkan.

Solusinya:

Poudriere (secara kasar diucapkan poo-dree-year, bahasa Perancis untuk "tong bubuk") ditulis sebagai pengganti Tinderbox yang lebih cepat dan sederhana. Itu ditulis oleh penulis Pkg Baptiste Daroussin dan sekarang sebagian besar dikelola oleh saya bersama dengan Baptiste dan beberapa kontributor lainnya. Ini dengan cepat menjadi pengujian port FreeBSD dan alat pembuatan paket secara de facto Ini adalah alat klaster build resmi dan juga digunakan oleh proyek FreeBSD Ports untuk menguji patch sweeping dalam apa yang disebut "exp-run". Itu ditulis dalam shell POSIX dan perlahan-lahan dipindahkan ke komponen C. Tidak seperti Tinderbox, ia tidak memiliki dependensi dan tidak memerlukan database. Ini telah sangat dioptimalkan untuk menjadi sangat paralel dalam semua operasi. Menggunakan penjara untuk membangun port di lingkungan berpasir dalam kondisi yang sangat ketat. Pembuatan penjara dilakukan sekali dengan perintah sederhana. Selama build, jail dikloning secara otomatis untuk setiap CPU yang digunakan untuk memberikan port tempat yang bersih untuk dibangun.

Menyiapkan repositori Anda sendiri dengan poudriere memungkinkan Anda memiliki fleksibilitas port dan kemudahan pengelolaan paket.

rampok
sumber