dpkg
menggunakan file kunci ( /var/lib/dpkg/lock
), saat digunakan.
- Mengapa kunci-kunci ini dibutuhkan?
- Mengapa beberapa kejadian tidak memungkinkan?
dpkg
lock
concurrency
akisoal
sumber
sumber
Jawaban:
Ini bukan
dpkg
masalah khusus (seperti yang disarankan judul edit saya). Sebaliknya, ini adalah sesuatu yang dilakukan oleh setiap manajer paket (yang saya sadari); dan untuk alasan yang bagus. Padahal, saya mengerti mengapa ini mungkin membingungkan.Manajer paket mengandalkan database untuk melacak informasi untuk paket yang diinstal. Jika banyak pengguna mencoba menulis ke database pada saat yang sama, ia memiliki peluang besar untuk merusak data (yang akan benar-benar kacau dengan sistem).
Akibatnya, banyak (semua?) Manajer paket mengandalkan lockfile untuk memberi sinyal bahwa database sedang ditulis, sehingga klien lain tidak boleh melakukannya.
Perhatikan bahwa manajer paket cerdas mungkin dapat menentukan kapan permintaan hanya-baca dan mungkin tidak perlu mengunci basis data. Hasil dari; adalah mungkin untuk beberapa tindakan untuk dapat dijalankan secara bersamaan di mana orang lain tidak akan melakukannya.
sumber
File kunci digunakan untuk mencegah eksekusi paralel dari beberapa instance.
Mengapa ini penting untuk manajer paket?
Manajer paket - dari tampilan tingkat tinggi - adalah program yang menerapkan perubahan kompleks pada hard disk.
Perubahan tidak dapat dilakukan dalam satu langkah ("atom"), jadi ada beberapa langkah; banyak langkah tergantung pada hasil langkah sebelumnya.
Jadi, manajer paket perlu menganalisis hard disk sebelum menjalankan setiap langkah, atau hanya menganalisisnya satu kali dan melacak perubahan yang diterapkannya sendiri. Opsi pertama sangat lambat. Yang kedua mensyaratkan bahwa tidak ada instance lain yang membuat perubahan.
Ada banyak masalah lain yang bisa muncul.
Bukan tidak mungkin untuk mengimplementasikan manajer paket yang dapat bekerja secara paralel, tetapi terlalu rumit untuk menjadi layak . Seperti dalam, Anda tidak bisa membayangkan betapa rumitnya. Betulkah.
sumber
dkpg
(danrpm
sebagian besar manajer paket tradisional lainnya) bekerja dengan menginstal paket ke ruang global, yang berarti bahwa paket dapat saling bertentangan (misalnyaA
danB
tidak dapat diinstal pada saat yang sama, karena mereka berdua menginstal/usr/lib/libfoo.so
). Manajer paket harus mendeteksi konflik seperti itu dan menolak permintaan instalasi tersebut untuk menjaga sistem dalam kondisi yang konsisten. Memiliki beberapa instance pengelola paket yang berjalan pada saat yang sama akan sangat rumit dan rawan kesalahan.Manajer paket bebas konflik (mis. Http://0install.net ) dapat dan memang memungkinkan beberapa paket diinstal secara paralel¹, dan tidak perlu file kunci (
A/libfoo.so
danB/libfoo.so
akan masuk ke direktori yang berbeda).1 Paralel baik dalam arti hadir dan tersedia pada sistem pada saat yang sama, dan dalam arti sedang diunduh dan ditambahkan ke sistem secara bersamaan.
sumber