Mengapa manajer paket memerlukan file kunci?

10

dpkgmenggunakan file kunci ( /var/lib/dpkg/lock), saat digunakan.

  • Mengapa kunci-kunci ini dibutuhkan?
  • Mengapa beberapa kejadian tidak memungkinkan?
akisoal
sumber
Dpkg melakukan instalasi. Ini adalah mode keamanan untuk menghindari konflik. Hanya satu instalasi pada waktu yang bersamaan.
albfan

Jawaban:

15

Ini bukan dpkgmasalah 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.

HalosGhost
sumber
2
Saya pikir portage dan paludis (manajer paket Gentoo) dapat bekerja secara paralel, jika ia menggunakan kunci sama sekali, itu hanya sebentar ketika menambahkan paket ke daftar yang diinstal.
Vality
Saya akan melihat manajer paket Gentoo dan segera memperbarui jawaban saya.
HalosGhost
Saya tidak dapat menemukan informasi terbaru tentang ini; tapi setidaknya, untuk sementara waktu, baik paludis dan portage menggunakan file kunci. Catatan, ini adalah strategi yang umum karena ini adalah satu-satunya cara aman untuk mencegah korupsi data; Saya akan terkejut jika portage atau paludis masih tidak menggunakan metode seperti itu.
HalosGhost
1
Ah, sepertinya Anda benar, namun ruang lingkup dari kunci-kunci ini berbeda, mereka hanya digunakan ketika memperbarui indeks paket (kehilangan paket yang tersedia), sebenarnya menginstal paket adalah operasi hanya baca dan dengan demikian tidak mengaktifkan kunci. Namun, ya, saya mengerti maksud Anda, masuk akal jika strateginya sangat umum.
Vality
9

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.

Volker Siegel
sumber
2

dkpg(dan rpmsebagian besar manajer paket tradisional lainnya) bekerja dengan menginstal paket ke ruang global, yang berarti bahwa paket dapat saling bertentangan (misalnya Adan Btidak 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.sodan B/libfoo.soakan 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.

Thomas Leonard
sumber