dpkg
ใช้ไฟล์ล็อค ( /var/lib/dpkg/lock
) เมื่อใช้งาน
- เหตุใดจึงต้องล็อคไฟล์เหล่านี้
- เหตุใดจึงเป็นไปไม่ได้หลายกรณี
dpkg
ใช้ไฟล์ล็อค ( /var/lib/dpkg/lock
) เมื่อใช้งาน
คำตอบ:
นี่ไม่ใช่dpkg
ปัญหาเฉพาะ (ตามชื่อเรื่องที่ฉันแนะนำ) แต่นี่เป็นสิ่งที่ผู้จัดการแพคเกจทุกคน (ซึ่งฉันรู้) ทำ; และด้วยเหตุผลที่ดี แม้ว่าฉันจะเข้าใจว่าทำไมมันอาจทำให้เกิดความสับสน
ผู้จัดการแพ็คเกจพึ่งพาฐานข้อมูลเพื่อติดตามข้อมูลสำหรับแพ็คเกจที่ติดตั้ง หากผู้ใช้หลายคนพยายามที่จะเขียนไปยังฐานข้อมูลในเวลาเดียวกันก็มีโอกาสสูงที่จะเกิดความเสียหายของข้อมูล
เป็นผลให้ตัวจัดการแพ็กเกจ (all?) จำนวนมากพึ่งพาlockfileเพื่อส่งสัญญาณว่าฐานข้อมูลกำลังถูกเขียนไปดังนั้นไคลเอ็นต์อื่นไม่ควรได้รับอนุญาตให้ทำเช่นนั้น
โปรดทราบว่าตัวจัดการแพคเกจอัจฉริยะอาจสามารถกำหนดได้ว่าเมื่อใดที่คำขอนั้นเป็นแบบอ่านอย่างเดียวและอาจไม่จำเป็นต้องล็อคฐานข้อมูล ผลที่ตามมา; มีความเป็นไปได้ที่การกระทำบางอย่างจะสามารถทำงานพร้อมกันได้โดยไม่ทำอะไรเลย
ไฟล์ล็อคถูกใช้เพื่อป้องกันการเรียกใช้หลายอินสแตนซ์ แบบขนาน
ทำไมสิ่งนี้สำคัญสำหรับผู้จัดการแพ็คเกจ?
ตัวจัดการแพ็คเกจ - จากมุมมองระดับสูง - เป็นโปรแกรมที่ใช้การเปลี่ยนแปลงที่ซับซ้อนกับฮาร์ดดิสก์
การเปลี่ยนแปลงไม่สามารถทำได้ในขั้นตอนเดียว (“ อะตอมมิก”) ดังนั้นจึงมีหลายขั้นตอน; หลายขั้นตอนขึ้นอยู่กับผลลัพธ์ของขั้นตอนก่อนหน้า
ดังนั้นตัวจัดการแพคเกจจำเป็นต้องวิเคราะห์ฮาร์ดดิสก์ก่อนที่จะดำเนินการแต่ละขั้นตอนหรือเพียงแค่วิเคราะห์มันครั้งเดียวและติดตามการเปลี่ยนแปลงที่นำไปใช้เอง ตัวเลือกแรกช้ามาก ที่สองต้องการว่าไม่มีอินสแตนซ์อื่นทำการเปลี่ยนแปลง
มีปัญหาอื่น ๆ อีกมากมายที่อาจปรากฏขึ้น
มันเป็นไปไม่ได้ที่จะใช้จัดการแพคเกจที่สามารถทำงานในแบบคู่ขนาน แต่มันซับซ้อนเกินไปที่จะคุ้มค่า ในขณะที่คุณไม่สามารถจินตนาการได้ว่าซับซ้อน จริงๆ.
dkpg
(และrpm
และผู้จัดการบรรจุภัณฑ์ดั้งเดิมส่วนใหญ่) ทำงานโดยการติดตั้งแพคเกจลงในพื้นที่ทั่วโลกซึ่งหมายความว่าแพคเกจสามารถขัดแย้งกัน (เช่นA
และB
ไม่สามารถติดตั้งได้ในเวลาเดียวกันเพราะทั้งคู่ติดตั้ง/usr/lib/libfoo.so
) ผู้จัดการแพคเกจจะต้องตรวจสอบความขัดแย้งดังกล่าวและปฏิเสธคำขอติดตั้งดังกล่าวเพื่อให้ระบบอยู่ในสถานะที่สอดคล้องกัน การมีตัวจัดการแพคเกจหลายอินสแตนซ์ทำงานพร้อมกันจะซับซ้อนและเกิดข้อผิดพลาดได้ง่าย
ผู้จัดการแพคเกจที่ปราศจากความขัดแย้ง (เช่นhttp://0install.net ) สามารถและอนุญาตให้ติดตั้งหลายแพคเกจในแบบขนาน¹และไม่จำเป็นต้องล็อคไฟล์ ( A/libfoo.so
และB/libfoo.so
จะไปในไดเรกทอรีอื่น)
1 ขนานทั้งในแง่ของการมีอยู่และพร้อมใช้งานบนระบบในเวลาเดียวกันและในแง่ของการดาวน์โหลดและเพิ่มไปยังระบบพร้อมกัน