ข้อผิดพลาด “Could not get lock /var/lib/dpkg/lock-frontend” มักหมายความว่ามีกระบวนการจัดการแพ็กเกจอื่นกำลังทำงานอยู่แล้ว รอจนกว่ากระบวนการนั้นเสร็จสิ้น ระบุตัวกระบวนการหากยังไม่หายไป จากนั้นจึงค่อยแก้ไขการตั้งค่าแพ็กเกจที่หยุดชะงัก การลบไฟล์ล็อกไม่ใช่วิธีแก้ไขที่ปลอดภัย
APT เป็นเครื่องมือจัดการแพ็กเกจของ Ubuntu ซึ่งdpkgทำหน้าที่ติดตั้งและกำหนดค่าแพ็กเกจในระดับล่าง โดยใช้ตัวล็อกเพื่อป้องกันไม่ให้สองการกระทำเปลี่ยนแปลงสถานะของแพ็กเกจพร้อมกัน ไฟล์ล็อกอาจยังคงอยู่ในดิสก์ระหว่างการทำงานปกติ ดังนั้นการมีอยู่ของไฟล์ล็อกไม่ได้หมายความว่าไฟล์นั้นหมดอายุแล้ว
1. ให้เวลาโปรแกรมอัปเดตของ Ubuntu ทำงานจนเสร็จสิ้น
ก่อนอื่น ให้ปิดโปรแกรมหรือแอปพลิเคชันอื่นๆ ที่คุณเริ่มไว้ เช่น คำสั่งในเทอร์มินัล โปรแกรมอัปเดตซอฟต์แวร์ หรือการติดตั้งแอปจากแอปสโตร์ หากมีหน้าต่างแจ้งเตือนการอัปเดตเปิดอยู่ ให้รอให้การอัปเดตเสร็จสิ้นก่อนที่จะเริ่มaptคำสั่งที่สอง ในระบบปฏิบัติการ Ubuntu บนเดสก์ท็อป บริการอัปเดตเบื้องหลังอาจกำลังทำงานอยู่เช่นกัน
ตรวจสอบบริการ systemd ที่เกี่ยวข้องและรอสักครู่หากมีบริการใดทำงานอยู่:
systemctl status apt-daily.service apt-daily-upgrade.service
หน่วยเหล่านี้อาจไม่ทำงานแม้ว่าส่วนหน้าของแพ็กเกจอื่นจะเป็นเจ้าของล็อกอยู่ ดังนั้นควรตรวจสอบกระบวนการโดยใช้ล็อกที่ถูกต้องด้วย อย่าเริ่มคำสั่งติดตั้งหรืออัปเกรดเพิ่มเติมในขณะที่การดำเนินการปัจจุบันกำลังทำงานอยู่
ข้อความแจ้งการล็อกจะระบุชื่อทรัพยากรที่กำลังใช้งาน และอาจรวมถึงรหัสกระบวนการเพื่อตรวจสอบเพิ่มเติม
2. ระบุว่าใครเป็นผู้ถือครองการควบคุมส่วนหน้า (frontend lock)
ใช้fuserคำสั่งนี้เพื่อแสดงกระบวนการที่กำลังเข้าถึงล็อก จากนั้นตรวจสอบ PID ที่คำสั่งนี้รายงาน:
sudo fuser -v /var/lib/dpkg/lock-frontend
ps -fp 2468
แทนที่2468ด้วย PID จริงจากผลลัพธ์ของคุณ ชื่อกระบวนการเช่นapt, apt-get, dpkg, หรือบริการอัปเดต แสดงว่าอาจยังมีการดำเนินการเกี่ยวกับแพ็กเกจอยู่ หากคุณต้องการดูรายการกระบวนการที่กว้างขึ้น ให้เรียกใช้คำสั่ง:
ps -eo pid,etime,cmd | grep -E '[a]pt|[d]pkg'
อย่าคิดว่ากระบวนการหยุดชะงักเพียงเพราะไม่มีความคืบหน้าให้เห็น การดาวน์โหลดแพ็กเกจ สคริปต์ของผู้ดูแลระบบ และการรีสตาร์ทบริการอาจใช้เวลา หากเป็นการอัปเดตที่คุณเริ่มในเทอร์มินัลอื่น ให้กลับไปที่เทอร์มินัลนั้นและปล่อยให้มันเสร็จสิ้น หากโปรแกรมอัปเดตแบบกราฟิกเป็นเจ้าของ ให้ใช้แอปพลิเคชันนั้นเพื่อยกเลิกหรือปิดการทำงานตามปกติ
ใช้ PID และชื่อคำสั่งที่รายงานมาเพื่อแยกแยะตัวอัปเดตที่กำลังทำงานอยู่กับคำสั่งที่คุณพยายามเรียกใช้
3. จัดการกับกรณีที่เครื่องติดขัดอย่างระมัดระวัง
หากกระบวนการดังกล่าวเป็นการอัปเดตอัตโนมัติ โปรดตรวจสอบสถานะและบันทึกก่อนที่จะเข้าไปแทรกแซง:
systemctl status apt-daily-upgrade.service
sudo journalctl -u apt-daily-upgrade.service -b --no-pager
เมื่อบริการกำลังดำเนินการอยู่ ให้ปล่อยมันไว้ หากคุณพบคำสั่งแพ็กเกจที่คุณเรียกใช้เองและเห็นได้ชัดว่ามันค้างอยู่ ให้ขัดจังหวะมันหนึ่งครั้งจากเทอร์มินัลของมันเองด้วยคำสั่งCtrl+Cและรอจนกว่ามันจะกลับไปยังเชลล์ อย่าใช้คำสั่งkill -9, killall dpkg, หรือลบไฟล์ภายใต้/var/lib/dpkg; การหยุดสคริปต์แพ็กเกจอย่างกะทันหันอาจทำให้แพ็กเกจถูกแตกไฟล์แต่ยังไม่ได้กำหนดค่า
หากกระบวนการสิ้นสุดลงแล้ว แต่การดำเนินการแพ็กเกจถูกขัดจังหวะ การรีบูตเครื่องเป็นวิธีที่เหมาะสมในการล้างงานที่ค้างอยู่ในพื้นที่ผู้ใช้ หลังจากรีสตาร์ทแล้ว ตรวจสอบให้แน่ใจว่าไม่มีโปรแกรมอัปเดตซอฟต์แวร์หรืองานติดตั้งใด ๆ กำลังทำงานอยู่ก่อนดำเนินการต่อ หากบริการใดค้างอยู่ซ้ำ ๆ ให้ใช้เอาต์พุตบันทึกเพื่อวินิจฉัยบริการนั้นแทนที่จะลบไฟล์ล็อกซ้ำ ๆ
การที่บริการ apt-daily-upgrade ทำงานอยู่ เป็นเหตุผลที่ควรจะรอและตรวจสอบความคืบหน้า ไม่ใช่เหตุผลในการปลดล็อกบริการนั้น
4. สถานะแพ็คเกจการซ่อมแซมหลังจากปลดล็อกแล้ว
เมื่อไม่มีตัวจัดการแพ็กเกจใดใช้ตัวล็อกอยู่ ให้ดำเนินการกำหนดค่าแพ็กเกจที่ค้างอยู่ให้เสร็จสมบูรณ์:
sudo dpkg --configure -a
ขั้นตอนนี้จะกำหนดค่าแพ็กเกจที่ถูกแตกไฟล์แล้วแต่ยังติดตั้งไม่สมบูรณ์ หากพบปัญหาเกี่ยวกับความซ้ำซ้อน ให้ขอให้ APT แก้ไขปัญหาเหล่านั้น:
sudo apt-get -f install
อ่านรายละเอียดการเปลี่ยนแปลงที่เสนออย่างละเอียดก่อนยืนยัน อย่าเพิ่ม-yรายการใดๆ ในระหว่างการแก้ไขปัญหา: ข้อความแจ้งเตือนนี้จะช่วยให้คุณตรวจสอบว่า APT วางแผนที่จะลบหรือเปลี่ยนแปลงแพ็กเกจโดยไม่คาดคิดหรือไม่ หลังจากที่การซ่อมแซมเสร็จสิ้นแล้ว ให้รีเฟรชรายการแพ็กเกจและลองทำตามขั้นตอนเดิมอีกครั้ง
sudo apt-get update
sudo apt-get install PACKAGE_NAME
แทนที่PACKAGE_NAMEด้วยแพ็กเกจที่คุณต้องการติดตั้งคู่มือAPT-get-f ของ Ubuntu อธิบายถึงวิธีการแก้ไขปัญหาการพึ่งพาแพ็กเกจที่เสียหาย และคู่มือ dpkgอธิบายถึงขั้นตอนการกำหนดค่าแพ็กเกจ หาก APT ยังคงรายงานว่ามีการล็อก ให้ตรวจสอบกระบวนการซ้ำอีกครั้ง อาจมีการเริ่มต้นงานติดตั้งแพ็กเกจที่สองในระหว่างนั้น
หลังจากปลดล็อกแล้ว ให้กำหนดค่าแพ็กเกจที่รอการดำเนินการ และตรวจสอบว่า APT สามารถอ่านสถานะแพ็กเกจที่สอดคล้องกันได้
ตรวจสอบว่าการซ่อมแซมสำเร็จแล้ว
การแก้ไขจะเสร็จสมบูรณ์เมื่อคำสั่งติดตั้งหรืออัปเดตดั้งเดิมทำงานได้โดยไม่มีข้อผิดพลาดเกี่ยวกับการล็อกsudo dpkg --configure -aออกจากโปรแกรมโดยไม่มีความล้มเหลวในการกำหนดค่าที่ค้างอยู่ และsudo apt-get checkรายงานว่าไม่มีการพึ่งพาที่เสียหาย หากการล็อกกลับมาอีกครั้ง แสดงว่ายังมีกระบวนการอื่นที่กำลังใช้งานการล็อกอยู่ ให้ระบุกระบวนการนั้นก่อนดำเนินการต่อไป
คู่มือ Noble ฉบับปัจจุบันของ Ubuntu อธิบายคำสั่งแพ็กเกจข้างต้นไว้แล้ว ระยะเวลาการทำงานของบริการและชื่อกระบวนการจะแตกต่างกันไปตามรุ่นของ Ubuntu และเครื่องมือแพ็กเกจเดสก์ท็อปที่ติดตั้ง แต่กฎหลักยังคงเหมือนเดิม: รอให้เจ้าของล็อกเสร็จสิ้น จากนั้นซ่อมแซม dpkg หากการดำเนินการก่อนหน้านี้ถูกขัดจังหวะ
สำหรับข้อมูลอ้างอิงคำสั่ง โปรดดูคู่มือ apt-get ของ Ubuntuและคู่มือ dpkg ของ Ubuntu