ทำไมผู้จัดการแพคเกจต้องล็อคไฟล์?


10

dpkgใช้ไฟล์ล็อค ( /var/lib/dpkg/lock) เมื่อใช้งาน

  • เหตุใดจึงต้องล็อคไฟล์เหล่านี้
  • เหตุใดจึงเป็นไปไม่ได้หลายกรณี

Dpkg ทำการติดตั้ง นี่คือโหมดปลอดภัยเพื่อหลีกเลี่ยงความขัดแย้ง ติดตั้งเพียงครั้งเดียวในเวลาเดียวกัน
albfan

คำตอบ:


15

นี่ไม่ใช่dpkgปัญหาเฉพาะ (ตามชื่อเรื่องที่ฉันแนะนำ) แต่นี่เป็นสิ่งที่ผู้จัดการแพคเกจทุกคน (ซึ่งฉันรู้) ทำ; และด้วยเหตุผลที่ดี แม้ว่าฉันจะเข้าใจว่าทำไมมันอาจทำให้เกิดความสับสน

ผู้จัดการแพ็คเกจพึ่งพาฐานข้อมูลเพื่อติดตามข้อมูลสำหรับแพ็คเกจที่ติดตั้ง หากผู้ใช้หลายคนพยายามที่จะเขียนไปยังฐานข้อมูลในเวลาเดียวกันก็มีโอกาสสูงที่จะเกิดความเสียหายของข้อมูล

เป็นผลให้ตัวจัดการแพ็กเกจ (all?) จำนวนมากพึ่งพาlockfileเพื่อส่งสัญญาณว่าฐานข้อมูลกำลังถูกเขียนไปดังนั้นไคลเอ็นต์อื่นไม่ควรได้รับอนุญาตให้ทำเช่นนั้น


โปรดทราบว่าตัวจัดการแพคเกจอัจฉริยะอาจสามารถกำหนดได้ว่าเมื่อใดที่คำขอนั้นเป็นแบบอ่านอย่างเดียวและอาจไม่จำเป็นต้องล็อคฐานข้อมูล ผลที่ตามมา; มีความเป็นไปได้ที่การกระทำบางอย่างจะสามารถทำงานพร้อมกันได้โดยไม่ทำอะไรเลย


2
ฉันคิดว่า portage และ paludis (ผู้จัดการแพ็คเกจของ Gentoo) สามารถทำงานแบบขนานได้หากใช้การล็อกเลยมันจะทำแบบสั้น ๆ เมื่อเพิ่มแพ็คเกจลงในรายการที่ติดตั้งเท่านั้น
Vality

ฉันจะดูที่ผู้จัดการแพ็คเกจของ Gentoo และอัพเดตคำตอบของฉันในไม่ช้า
HalosGhost

ฉันไม่สามารถหาข้อมูลที่เป็นปัจจุบันเกี่ยวกับสิ่งนี้; แต่อย่างน้อยที่สุดหนึ่งทั้ง paludis และ portage ก็ใช้ไฟล์ล็อค โปรดทราบว่านี่เป็นกลยุทธ์ทั่วไปเนื่องจากเป็นวิธีเดียวที่ปลอดภัยในการป้องกันข้อมูลเสียหาย ฉันจะแปลกใจถ้าทั้ง portage หรือ paludis ไม่ได้ใช้วิธีดังกล่าว
HalosGhost

1
ดูเหมือนว่าคุณจะถูกต้องแล้วอย่างไรก็ตามขอบเขตของการล็อคเหล่านี้จะแตกต่างกันพวกเขาจะใช้เฉพาะในการปรับปรุงดัชนีแพคเกจ (แพคเกจที่หายไปพร้อมใช้งาน) จริง ๆ แล้วการติดตั้งแพคเกจเป็นการดำเนินการแบบอ่านอย่างเดียวเท่านั้น อย่างไรก็ตามใช่ฉันเห็นสิ่งที่คุณหมายถึงมันทำให้รู้สึกว่ากลยุทธ์เป็นเรื่องธรรมดา
Vality

9

ไฟล์ล็อคถูกใช้เพื่อป้องกันการเรียกใช้หลายอินสแตนซ์ แบบขนาน

ทำไมสิ่งนี้สำคัญสำหรับผู้จัดการแพ็คเกจ?

ตัวจัดการแพ็คเกจ - จากมุมมองระดับสูง - เป็นโปรแกรมที่ใช้การเปลี่ยนแปลงที่ซับซ้อนกับฮาร์ดดิสก์

การเปลี่ยนแปลงไม่สามารถทำได้ในขั้นตอนเดียว (“ อะตอมมิก”) ดังนั้นจึงมีหลายขั้นตอน; หลายขั้นตอนขึ้นอยู่กับผลลัพธ์ของขั้นตอนก่อนหน้า

ดังนั้นตัวจัดการแพคเกจจำเป็นต้องวิเคราะห์ฮาร์ดดิสก์ก่อนที่จะดำเนินการแต่ละขั้นตอนหรือเพียงแค่วิเคราะห์มันครั้งเดียวและติดตามการเปลี่ยนแปลงที่นำไปใช้เอง ตัวเลือกแรกช้ามาก ที่สองต้องการว่าไม่มีอินสแตนซ์อื่นทำการเปลี่ยนแปลง

มีปัญหาอื่น ๆ อีกมากมายที่อาจปรากฏขึ้น

มันเป็นไปไม่ได้ที่จะใช้จัดการแพคเกจที่สามารถทำงานในแบบคู่ขนาน แต่มันซับซ้อนเกินไปที่จะคุ้มค่า ในขณะที่คุณไม่สามารถจินตนาการได้ว่าซับซ้อน จริงๆ.


2

dkpg(และrpmและผู้จัดการบรรจุภัณฑ์ดั้งเดิมส่วนใหญ่) ทำงานโดยการติดตั้งแพคเกจลงในพื้นที่ทั่วโลกซึ่งหมายความว่าแพคเกจสามารถขัดแย้งกัน (เช่นAและBไม่สามารถติดตั้งได้ในเวลาเดียวกันเพราะทั้งคู่ติดตั้ง/usr/lib/libfoo.so) ผู้จัดการแพคเกจจะต้องตรวจสอบความขัดแย้งดังกล่าวและปฏิเสธคำขอติดตั้งดังกล่าวเพื่อให้ระบบอยู่ในสถานะที่สอดคล้องกัน การมีตัวจัดการแพคเกจหลายอินสแตนซ์ทำงานพร้อมกันจะซับซ้อนและเกิดข้อผิดพลาดได้ง่าย

ผู้จัดการแพคเกจที่ปราศจากความขัดแย้ง (เช่นhttp://0install.net ) สามารถและอนุญาตให้ติดตั้งหลายแพคเกจในแบบขนาน¹และไม่จำเป็นต้องล็อคไฟล์ ( A/libfoo.soและB/libfoo.soจะไปในไดเรกทอรีอื่น)


1 ขนานทั้งในแง่ของการมีอยู่และพร้อมใช้งานบนระบบในเวลาเดียวกันและในแง่ของการดาวน์โหลดและเพิ่มไปยังระบบพร้อมกัน

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.