Paket yöneticilerinin neden kilit dosyalarına ihtiyacı var?


10

dpkgkullanımda bir kilit dosyası ( /var/lib/dpkg/lock) kullanır.

  • Bu kilit dosyalarına neden ihtiyaç var?
  • Neden birden fazla örnek mümkün değil?

Dpkg kurulumları yapar. Bu, çatışmalardan kaçınmak için bir güvenlik modudur. Aynı anda sadece bir kurulum.
albfan

Yanıtlar:


15

Bu bir ... Değil dpkg sorun (düzenlememin başlığı önerildiği gibi). Aksine, bu her paket yöneticisinin (farkında olduğum) yaptığı bir şeydir; ve iyi bir nedenle. Yine de, neden kafa karıştırıcı olabileceğini anlıyorum.

Paket yöneticileri kurulu paketlerin bilgilerini izlemek için veritabanlarına güvenir. Birden çok kullanıcı aynı anda bir veritabanına yazmaya çalışırsa, verileri bozma şansı yüksektir (bu da sisteme gerçekten zarar verir).

Sonuç olarak, birçok (tümü?) Paket yöneticisi veritabanının yazıldığını bildirmek için bir kilit dosyasına güvenir , bu nedenle başka bir istemcinin bunu yapmasına izin verilmemelidir.


Akıllı paket yöneticilerinin, bir isteğin ne zaman salt okunur olduğunu belirleyebileceğini ve veritabanını kilitlemesinin gerekmeyebileceğini unutmayın. Sonuç olarak; bazı eylemlerin diğerlerinin olmayacağı yerlerde eşzamanlı olarak yürütülebilmesi mümkündür.


2
Ben portage ve paludis (Gentoo'nun paket yöneticileri) paralel olarak çalışabileceğini düşünüyorum, eğer kilitleri kullanıyorsa, yüklü listeye paketler eklerken bunu sadece kısaca yapar.
Vality

Gentoo'nun paket yöneticilerine bir göz atacağım ve kısa sürede cevabımı güncelleyeceğim.
HalosGhost

Bu konuda güncel bilgi bulamıyorum; ama en azından bir süre, hem paludis hem de portage kilit dosyalarını kullandı. Bu yaygın bir stratejidir, çünkü veri bozulmasını önlemenin tek güvenli yollarından biridir; Portage veya paludis hala böyle bir yöntem kullanmazsa şaşırırdım.
HalosGhost

1
Ah, doğru görünüyorsunuz, ancak bu kilitlerin kapsamı farklıdır, sadece paket dizinini (kullanılabilir paketlerin kaybolması) güncellerken kullanılırlar, aslında paketleri yüklemek salt okunur bir işlemdir ve bu nedenle kilidi çağırmaz. Ancak, evet, ne demek istediğini anlıyorum, stratejinin çok yaygın olduğu mantıklı.
Vality

9

Kilit dosyası, birden çok örneğin paralel yürütülmesini önlemek için kullanılır .

Bu bir paket yöneticileri için neden önemlidir?

Paket yöneticisi - üst düzey görünümden - sabit diske karmaşık değişiklikler uygulayan bir programdır .

Değişiklikler bir adımda (“atomik”) yapılamaz , bu nedenle birden fazla adım vardır; adımların çoğu önceki adımların sonucuna bağlıdır.

Bu nedenle, paket yöneticisinin her adımı yürütmeden önce sabit diski analiz etmesi veya bir kez analiz etmesi ve uyguladığı değişiklikleri takip etmesi gerekir. İlk seçenek son derece yavaştır. İkincisi, başka hiçbir örneğin değişiklik yapmamasını gerektirir.

Ortaya çıkabilecek başka birçok sorun var.

Öyle imkansız değil paralel olarak çalışabilir bir paket yöneticisini uygulamak, ancak oluyor değer çok olsun karmaşık . Olduğu gibi, ne kadar karmaşık olduğunu hayal bile edemezsiniz. Gerçekten mi.


2

dkpg(ve rpmglobal alanda, paketler birbiri ile çakışabilir (örneğin demekse içine paketleri yükleyerek ve diğer birçok geleneksel paket yöneticiler) çalışma Ave Bher ikisi de yüklemek, çünkü aynı anda yüklenemez /usr/lib/libfoo.so). Paket yöneticileri, sistemi tutarlı bir durumda tutmak için bu tür çakışmaları tespit etmeli ve bu tür kurulum taleplerini reddetmelidir. Paket yöneticisinin aynı anda çalışan birden çok örneğinin olması çok karmaşık ve hataya açık olacaktır.

Çakışmasız paket yöneticileri (örn. Http://0install.net ) birden fazla paketin paralel olarak kurulmasına izin verebilir ve bunu yapabilir ve kilit dosyalarına ihtiyaç duymaz ( A/libfoo.sove B/libfoo.sofarklı dizinlere gider).


1 Aynı anda hem mevcut hem de sistemde mevcut olma anlamında ve aynı anda indirilip sisteme eklenmesi anlamında paraleldir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.