Saya ingin tahu bagaimana orang-orang menyebarkan porta FreeBSD di lingkungan mereka. Saya berasumsi bahwa kebanyakan orang yang menggunakan FreeBSD memang menggunakan Ports (dan seringkali portupgrade untuk melakukan upgrade dengan binari). Namun saya tertarik pada bagaimana Anda memiliki pengaturan ini, karena saya tidak puas dengan cara kerjanya di versi terbaru. Saya sekarang menjalankan FreeBSD 9.0 dan mengalami masalah.
Saya telah mengatur beberapa hal sebagai berikut:
- / usr / ports dibagi melalui NFS dari satu node (dengan 'portsnap fetch update' setiap malam).
- Setiap node me-mount / usr / ports dengan read-write
- Saya telah menetapkan "WRKDIRPREFIX = / usr / tmp" di /etc/make.conf di semua node
- Saya telah mengkonfigurasi Portsnap untuk menggunakan indeks lokal dengan menambahkan berikut ini ke /usr/local/etc/pkgtools.conf:
ENV['LOCALINDICES'] ||= '/var/db'
ENV['PORTS_INDEX'] ||= ENV['LOCALINDICES'] + '/INDEX.local'
Saya dapat berhasil menjalankan portupgrade -p package
untuk membangun sebuah paket dan kemudian portupgrade -P package
menginstal biner pada node lain.
Namun, kadang-kadang saya menerima masalah berikut: /var/db/INDEX.local:23265:dbm_store failed
Saya tidak dapat memikirkan optimasi lain yang dapat saya lakukan untuk sistem, karena indeks sekarang berada secara lokal, dan satu-satunya hal yang benar-benar diekspor adalah port-tree dan tidak ada yang pernah ditulis di sana dari node.
Jawaban:
Saya tidak pernah puas sepenuhnya dengan sistem port di lingkungan yang besar - Sepertinya Anda perlu menerapkan manajemen eksternal untuk membuatnya berfungsi dengan baik.
Kiat terbaik saya (dalam urutan preferensi naik, solusi "terburuk" ke solusi "terbaik"):
Jika Anda membangun di setiap host, jangan .
Jika Anda harus, jangan lakukan lebih dari NFS dengan mount baca-tulis seperti yang Anda jelaskan: Anda biasanya dapat mempercayai port untuk Melakukan Hal yang Benar dan tidak menginjak pohon port jika Anda memberikan direktori kerja alternatif, tetapi selalu lebih baik untuk aman daripada menyesal: Jalankan mirror CVS / csup lokal dan csup semua host Anda dari kotak itu, lalu buat secara lokal seperti yang Anda lakukan jika mereka adalah mesin individual.
Ya, saya tahu ini berarti memiliki lebih banyak ruang disk pada host dan langkah tambahan. Ini juga hampir dijamin bebas masalah.
Peringatan: Anda mungkin ingin menyinkronkan file konfigurasi paket (rsync atau serupa) dari "host konfigurasi" yang ditunjuk untuk memastikan konsistensi pada setiap mesin (Anda bahkan dapat rsync seluruh port tree jika Anda mau, daripada menggunakan csup pada setiap node).
Gunakan Build Host, buat paket, dan instal itu.
Solusi yang jauh lebih baik daripada membangun di masing-masing mesin: Gunakan host build untuk membuat paket, dan arahkan alat Anda ke paket tersebut.
Ini berarti menjaga build host tetap ada untuk setiap arsitektur yang Anda jalankan (atau kompilasi silang), tetapi pada akhirnya lebih baik untuk mesin target Anda (tidak ada pekerjaan kompilasi besar, jaminan konsistensi)
Gunakan alat manajemen konfigurasi / sistem.
Ini adalah solusi yang saya gunakan - saya membangun image server standar dan menggunakannya di lingkungan saya
radmind
. Anda dapat melakukan hal serupa dengan Wayang atau Koki . Ini memiliki semua keuntungan menggunakan build host (konsistensi, lebih sedikit memuat pada masing-masing server), dan menambahkan manfaat manajemen konfigurasi.Peringatan: Ini hanya berfungsi dengan sangat baik jika mesin Anda "identik" - Artinya Anda dapat menginstal set port yang sama pada semuanya. Ini dapat berfungsi jika Anda memiliki beragam set port, tetapi hal itu secara substansial meningkatkan overhead administrasi.
Penafian: Saya pengelola pelabuhan
sysutils/radmind
. Ya, saya sangat menyukainya sehingga saya mengadopsinya.Semua ini didasarkan pada pengalaman saya mengelola berbagai lingkungan FreeBSD ukuran (mulai dari 1-2 mesin hingga lebih dari 100). Alat Konfigurasi / Sistem Manajemen yang mendorong dan memelihara gambar standar adalah cara terbaik untuk menangani hal ini dalam pengalaman saya.
sumber
Aneh bahwa tidak ada yang menyebutkan ports-mgmt / tinderbox :
Juga beralih ke pkgng sangat menyederhanakan penyebaran paket.
Lihat di github: https://github.com/pkgng/pkgng
sumber
PACKAGEROOT
/PACKAGESITE
dan gunakan radmind atau Puppet / Chef).pkg_delete
harus dijalankan terlebih dahulu dan kemudian instal versi baru. OpenBSD telah menangani ini dengan lebih baik dengan memasukkan opsi pemutakhiran dipkg_add
. Tidak yakin tentang Portupgrade tetapi portmaster dapat bekerja hanya dengan menggunakan INDEX dan bukan pohon port lengkap.Saya telah mengelola 100+ server FreeBSD dengan hanya membagikan / usr read-only melalui NFS yang telah disetel dengan baik, memindahkan basis data paket dari / var ke / usr dan menghubungkannya dengan mereka (tidak terlalu diperlukan tetapi memungkinkan pkg_info dan semacamnya). Mungkin ada satu atau dua file lain yang perlu dipindahkan dalam satu arah atau yang lain dan disinkronkan, tetapi keseluruhan pengaturan membutuhkan waktu sekitar satu jam untuk mencari tahu. Itu bekerja dengan sangat baik. Seandainya saya mengalami masalah penskalaan saya akan menambahkan server NFS tambahan dan membagi beban kerja tetapi tidak pernah muncul. Kinerja tidak pernah menjadi masalah bagi saya (sebenarnya itu hebat) tapi saya kira Anda bisa menempatkan server NFS / usr (atau salinannya) pada md.
sumber
Sayangnya tidak ada yang mendapat solusi yang baik untuk ini. Kemungkinan besar ini disebabkan oleh keterbatasan dalam alat yang mendasari.
Inilah yang saya pikirkan: Saya membatalkan ide untuk mengekspor seluruh port-tree. Sebaliknya, saya menyerah dan meletakkan pohon port penuh pada setiap node. Saya kemudian memasang 'paket' melalui NFS (untuk mengaktifkan distribusi paket).
Saya juga bermaksud untuk menggunakan proxy caching (mungkin Squid) untuk mempercepat proses portnap. Saya menulis posting singkat tentang cara mengatur ini di blog saya.
Referensi:
sumber