ปลดล็อก Zypper อย่างปลอดภัยบน SUSE Linux Enterprise

หาก SUSE Linux Enterprise แจ้งว่า Zypper ถูกล็อกโดยกระบวนการอื่น ให้รอให้การอัปเดตซอฟต์แวร์ การดำเนินการแพ็กเกจ YaST หรือการบำรุงรักษาอัตโนมัติที่กำลังทำงานอยู่เสร็จสิ้นก่อน ตรวจสอบว่ากระบวนการจัดการแพ็กเกจใดเป็นเจ้าของงานนั้นก่อนที่จะหยุดอะไรก็ตาม หากไม่มีการดำเนินการแพ็กเกจใด ๆ และการล็อกยังคงอยู่ ให้ตรวจสอบสถานะที่ค้างอยู่โดยไม่ต้องลบไฟล์ล็อกโดยพลการ จากนั้นลองใช้งาน Zypper อีกครั้ง การล็อกแพ็กเกจที่สร้างขึ้นด้วย YaST zypper addlockเป็นปัญหาที่แตกต่างออกไปและต้องการวิธีแก้ไขที่แตกต่างกัน

“ถูกล็อกโดยกระบวนการอื่น” หมายความว่าอย่างไร?

Zypper และเครื่องมือจัดการแพ็กเกจพื้นฐานจะปกป้องการทำธุรกรรมแพ็กเกจจากการเปลี่ยนแปลงที่ซ้ำซ้อน การรีเฟรช แพทช์ การติดตั้ง งานซอฟต์แวร์ YaST หรือการอัปเดตตามกำหนดเวลาอาจป้องกันการทำธุรกรรมครั้งที่สองได้ชั่วคราว กลไกการล็อกนี้เป็นกลไกการประสานงาน การปลดล็อกในขณะที่ RPM หรือ Zypper ยังคงเปลี่ยนแปลงแพ็กเกจอยู่อาจทำให้ฐานข้อมูลแพ็กเกจหรือระบบอยู่ในสถานะที่ไม่สอดคล้องกัน

ความแตกต่างที่ได้รับการยืนยัน:การล็อกกระบวนการจะป้องกันการดำเนินการแพ็กเกจพร้อมกัน ในขณะที่การล็อกแพ็กเกจจะป้องกันไม่ให้แพ็กเกจที่ระบุชื่อถูกเลือกสำหรับการติดตั้ง อัปเกรด หรือลบ เอกสารของ SUSE อธิบายการล็อกแพ็กเกจว่าเป็นคุณสมบัติแยกต่างหากคู่มือการบรรจุภัณฑ์ RPM ของ SUSE อธิบายการล็อกแพ็กเกจของ Zypperหากข้อผิดพลาดระบุถึงกระบวนการอื่นหรือบอกว่าตัวจัดการแพ็กเกจกำลังยุ่งอยู่ ให้เริ่มต้นด้วยการตรวจสอบกระบวนการด้านล่าง หากระบุว่าแพ็กเกจใดแพ็กเกจหนึ่งถูกล็อกหรือถูกยกเว้น ให้เรียกใช้sudo zypper locksและตรวจสอบกฎแพ็กเกจที่แสดงแทน

1. ตรวจสอบว่าการดำเนินการแพ็กเกจยังคงทำงานอยู่หรือไม่

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

ps -eo pid,ppid,etime,stat,cmd | grep -E '[z]ypper|[r]pm|packagekit|YaST|yast'

มองหา task ของ Zypper, RPM, YaST หรือ PackageKit ที่แท้จริง แล้วจดบันทึก PID, เวลาที่ใช้ไป และคำสั่ง นิพจน์ grep จะหลีกเลี่ยงการจับคู่คำสั่งค้นหาโดยตรงสำหรับ Zypper และ RPM รายการกระบวนการเป็นเพียงภาพรวม ดังนั้นหากผลลัพธ์ไม่ชัดเจน ให้ลองทำซ้ำหลังจากรอสักครู่ ตัวอย่างด้านล่างเป็นมุมมองเทอร์มินัลที่แสดงให้เห็น ไม่ใช่รายงานจากเครื่องจริง

รายการกระบวนการในเทอร์มินัลแสดงกระบวนการรีเฟรช Zypper และกระบวนการ RPM
ตรวจสอบชื่อกระบวนการ, PID และระยะเวลาที่ผ่านไปก่อนตัดสินใจว่าตัวจัดการแพ็กเกจยังทำงานอยู่หรือไม่

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

2. ตรวจสอบบริการจัดการซอฟต์แวร์และงานบำรุงรักษา

การติดตั้งบนเดสก์ท็อปอาจใช้ PackageKit ในขณะที่เซิร์ฟเวอร์แบบจัดการอาจทำการอัปเดตตามกำหนดเวลาผ่านตัวจับเวลา systemd หรือ SUSE Manager ตรวจสอบเฉพาะบริการที่มีอยู่บนโฮสต์ของคุณเท่านั้น:

systemctl status packagekit
systemctl list-timers --all

หากไม่มี PackageKit ระบบ systemd จะแจ้งว่าไม่พบอุปกรณ์ดังกล่าว ซึ่งไม่ได้หมายความว่า Zypper เสียหาย หากเปิดใช้งานอยู่ ให้ตรวจสอบรายการบันทึกการทำงานล่าสุดและยืนยันว่าไม่มีการติดตั้งหรืออัปเดตใด ๆ กำลังดำเนินการอยู่ก่อนที่จะพิจารณาหยุดการทำงาน

sudo journalctl -u packagekit --since "30 minutes ago"

เมื่อการดำเนินการ PackageKit ที่ได้รับการยืนยันเสร็จสิ้นแล้ว แต่บริการยังคงทำงานอยู่และกำลังบล็อก Zypper ให้ประสานงานกับบุคคลหรือระบบอัตโนมัติที่จัดการการอัปเดต ในโฮสต์ที่จำเป็นต้องหยุดบริการ ให้ใช้คำสั่ง `packagekit.json` sudo systemctl stop packagekitจากนั้นตรวจสอบด้วยsystemctl status packagekitคำสั่ง `packagekit.json` อย่าปิดใช้งานบริการหรือหยุดตัวจับเวลาการอัปเดตที่ไม่เกี่ยวข้องเพื่อเป็นการแก้ไขปัญหาทั่วไป ชื่อและกำหนดการอัปเดตขึ้นอยู่กับส่วนประกอบที่ติดตั้งในระบบและนโยบายการจัดการ

คำสั่ง Systemctl status view แสดงว่า PackageKit ไม่ทำงาน
ใช้สถานะการบริการและบันทึกการทำงานเพื่อตรวจสอบว่า PackageKit กำลังดำเนินการเกี่ยวกับแพ็กเกจอยู่หรือไม่ ก่อนที่จะหยุดการทำงาน

3. หากไม่มีเจ้าของใช้งานอยู่ ให้ตรวจสอบล็อคที่ค้างอยู่ด้วยความปลอดภัย

ไฟล์ล็อกที่ค้างอยู่สามารถเกิดขึ้นได้หลังจากเซสชันถูกขัดจังหวะ การรีบูต หรือภารกิจการจัดการล้มเหลว แต่การมีอยู่ของไฟล์ล็อกเพียงอย่างเดียวไม่ได้ระบุสาเหตุ เอกสารสำหรับผู้ใช้ของ SUSE ไม่ได้ให้คำแนะนำสากลในการลบไฟล์ล็อกสำหรับทุกเวอร์ชันและการกำหนดค่าของ SLES ควรหลีกเลี่ยงคำสั่งต่างๆ เช่น คำสั่งrmที่ใช้กับเส้นทางที่คาดเดา และอย่าใช้kill -9กับ PID ที่ไม่รู้จัก ไฟล์ล็อกสามารถถูกสร้างขึ้นใหม่หรือถูกแทนที่ได้ในขณะที่ธุรกรรมกำลังทำงานอยู่ และการลบไฟล์ล็อกไม่ได้หยุดกระบวนการที่เป็นเจ้าของธุรกรรมนั้น

ตรวจสอบรายการกระบวนการอีกครั้ง ตรวจสอบบันทึกบริการที่เกี่ยวข้อง และตรวจสอบให้แน่ใจว่าไม่มีการดำเนินการแพ็กเกจใด ๆ กำลังดำเนินการอยู่ หากคุณสามารถระบุไฟล์ PID หรือเส้นทางล็อกที่ล้าสมัยได้ ให้ตรวจสอบเจ้าของไฟล์และยืนยันกับขั้นตอนที่ระบุไว้สำหรับแพ็คเกจบริการ SLES หรือคำแนะนำการสนับสนุนที่แน่นอนก่อนที่จะเปลี่ยนแปลง สำหรับระบบที่ใช้งานจริง ให้บันทึกข้อผิดพลาดและบันทึกอย่างละเอียด และปฏิบัติตามกระบวนการสนับสนุน SUSE ขององค์กรของคุณ นี่คือจุดที่รายละเอียดเฉพาะที่มีความสำคัญ: ข้อความแสดงข้อผิดพลาด แพ็คเกจบริการ SLES เครื่องมือเดสก์ท็อปที่ติดตั้ง และเอเจนต์การจัดการ อาจเปลี่ยนแปลงการดำเนินการกู้คืนที่ถูกต้องได้

4. ลองใช้ Zypper อีกครั้งและตรวจสอบรายการธุรกรรม

เมื่อการดำเนินการที่แข่งขันเสร็จสิ้นแล้ว ให้รีเฟรชข้อมูลเมตาของที่เก็บข้อมูล:

sudo zypper refresh

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

sudo zypper patch --dry-run

ตรวจสอบแพ็กเกจและการดำเนินการในผลลัพธ์ การทดสอบแบบจำลอง (Dry run) คือการตรวจสอบการวางแผน ซึ่งจะไม่ติดตั้งการอัปเดตที่ระบุไว้ เมื่อคาดว่าจะมีการนำเสนอข้อเสนอและช่วงเวลาการบำรุงรักษาของคุณอนุญาต ให้เรียกใช้คำสั่งดังกล่าวsudo zypper patchเอกสาร SUSE SLES 15 SP7 ครอบคลุมการจัดการซอฟต์แวร์ผ่านบรรทัดคำสั่ง รวมถึงการติดตั้งและถอนการติดตั้งซอฟต์แวร์ พฤติกรรมของคำสั่งและตัวเลือกที่มีให้ใช้งานอาจแตกต่างกันไปในแต่ละเวอร์ชัน โปรดดูเอกสารการจัดการซอฟต์แวร์ SLES 15 SP7และ ข้อมูลอ้างอิง Zypper ของ SUSE

เทอร์มินัลแสดงผลการรีเฟรชด้วยคำสั่ง sudo zypper สำเร็จ
หลังจากงานที่แข่งขันกันสิ้นสุดลง ให้รีเฟรชข้อมูลเมตาของที่เก็บข้อมูลเพื่อยืนยันว่า Zypper สามารถดำเนินการต่อได้
หน้าต่างเทอร์มินัลแสดงการทดสอบการทำงานของ Zypper patch โดยไม่มีการเปลี่ยนแปลงใดๆ
ดูตัวอย่างการอัปเดตและตรวจสอบการเปลี่ยนแปลงที่เสนอ ก่อนทำการอัปเดต

ข้อสันนิษฐานทั่วไปที่ควรหลีกเลี่ยง

  • “การล็อกนั้นล้าสมัยอยู่เสมอ”ข้อความนี้ไม่สามารถยืนยันได้ อาจเป็นข้อความจากการอัปเดตจริง ตรวจสอบกระบวนการทำงานและบันทึกต่างๆ ก่อน
  • “การล็อกแพ็กเกจและการล็อกกระบวนการนั้นเหมือนกัน” แต่ความจริงแล้วมันเป็นการควบคุมที่แยกจากกัน ควรใช้zypper locksเมื่อมีการล็อกแพ็กเกจที่ระบุชื่อไว้อย่างชัดเจนเท่านั้น ห้ามลบกฎของแพ็กเกจเพื่อล้างธุรกรรมที่กำลังทำงานอยู่
  • “การลบไฟล์ล็อกจะแก้ไขปัญหาให้กับเจ้าของไฟล์”แต่จะไม่ยุติกระบวนการที่กำลังทำงานอยู่หรือทำให้ธุรกรรมเสร็จสมบูรณ์อย่างปลอดภัย ต้องระบุเจ้าของไฟล์ก่อน และใช้คำแนะนำเฉพาะรุ่นสำหรับสถานะที่ค้างอยู่
  • “การรีสตาร์ทเซิร์ฟเวอร์คือวิธีแก้ไขปัญหาปกติ”การรีบูตอาจขัดจังหวะการเปลี่ยนแปลงแพ็กเกจ และไม่ควรทำเพียงเพราะเกิดข้อผิดพลาด ควรใช้การรีบูตเฉพาะเมื่อขั้นตอนการบำรุงรักษาหรือคำแนะนำจากฝ่ายสนับสนุนกำหนดไว้เท่านั้น

ตรวจสอบการแก้ไข

ปัญหาจะได้รับการแก้ไขเมื่อsudo zypper refreshกระบวนการเสร็จสมบูรณ์โดยไม่มีข้อผิดพลาดเกี่ยวกับการล็อก และสามารถเรียกใช้คำสั่งที่ต้องการได้ สำหรับการแก้ไข ให้ตรวจสอบsudo zypper patch --dry-runและยืนยันการดำเนินการที่เสนอไว้ก่อนที่จะนำไปใช้ หากการล็อกกลับมาอีกครั้ง ให้บันทึกข้อผิดพลาดที่แน่นอน รายการกระบวนการ สถานะบริการที่เกี่ยวข้อง เอาต์พุตบันทึกเหตุการณ์ล่าสุด และเวอร์ชัน SLES จากนั้นตรวจสอบกระบวนการหรือเครื่องมือการจัดการที่ทำให้เกิดการล็อกขึ้นอีกครั้ง แทนที่จะลบสถานะการล็อกซ้ำๆ

ฝากความเห็น

ตั้งค่า DM-Multipath บน SLES 15 เพื่อให้ได้เส้นทาง SAN ที่เชื่อถือได้

ตั้งค่า DM-Multipath บน SLES 15 เพื่อให้ได้เส้นทาง SAN ที่เชื่อถือได้

เตรียมเส้นทาง SCSI SAN เปิดใช้งาน multipathd ตรวจสอบค่าเริ่มต้นของฮาร์ดแวร์ของ SUSE และตรวจสอบแผนที่อุปกรณ์ที่เสถียรโดยไม่ต้องเดาการตั้งค่าอาร์เรย์

ปลดล็อก Zypper อย่างปลอดภัยบน SUSE Linux Enterprise

ปลดล็อก Zypper อย่างปลอดภัยบน SUSE Linux Enterprise

ค้นหาโปรเซสที่กำลังล็อกแพ็กเกจของ Zypper อยู่ แยกแยะความขัดแย้งของโปรเซสออกจากแพ็กเกจที่ถูกล็อก และลองอัปเดตอีกครั้งโดยไม่ต้องลบไฟล์ล็อกโดยไม่รู้สาเหตุ

สร้างคลัสเตอร์ SLES 15 HA ที่รองรับด้วย Fencing First

สร้างคลัสเตอร์ SLES 15 HA ที่รองรับด้วย Fencing First

ลงทะเบียน SLE HA, บูตสแตรปโหนด SLES 15 จากนั้นเพิ่มการป้องกัน, โควรัม และทรัพยากรบริการที่ผ่านการทดสอบก่อนที่จะพึ่งพาการสลับระบบเมื่อเกิดข้อผิดพลาด

SLES Zypper HTTP 500: ค้นหาแหล่งเก็บข้อมูลที่ล้มเหลว

SLES Zypper HTTP 500: ค้นหาแหล่งเก็บข้อมูลที่ล้มเหลว

ตรวจสอบหาสาเหตุของข้อผิดพลาดในการรีเฟรชของ Zypper ว่ามาจาก SUSE, RMT หรืออุปกรณ์ปลายทางของบุคคลที่สาม จากนั้นใช้การแก้ไขปัญหาฝั่งเซิร์ฟเวอร์หรือแคชที่ถูกต้องโดยไม่ต้องปิดใช้งานการอัปเดตที่จำเป็น

พื้นที่พูลบางของ SLES ไม่เพียงพอ: ขยาย LVM อย่างปลอดภัยและกู้คืนการเขียน

พื้นที่พูลบางของ SLES ไม่เพียงพอ: ขยาย LVM อย่างปลอดภัยและกู้คืนการเขียน

แก้ไขข้อผิดพลาดเกี่ยวกับพื้นที่ thin-pool ของ SUSE LVM โดยการตรวจสอบการใช้งานข้อมูลและเมตาเดต้า ขยายพูลอย่างปลอดภัย และป้องกันการหยุดทำงานซ้ำซ้อน

เมื่อ SLES Btrfs เข้าสู่โหมดอ่านอย่างเดียว: ตรวจสอบหาสาเหตุก่อนทำการเมานต์ใหม่

เมื่อ SLES Btrfs เข้าสู่โหมดอ่านอย่างเดียว: ตรวจสอบหาสาเหตุก่อนทำการเมานต์ใหม่

ตรวจสอบว่า Btrfs ถูกตั้งค่าเป็นโหมดอ่านอย่างเดียวโดยเจตนา พื้นที่เหลือน้อย หรือกำลังปกป้องข้อมูลหลังเกิดข้อผิดพลาด จากนั้นเลือกวิธีการกู้คืนที่เหมาะสมกับสาเหตุ

ลงทะเบียน SLES 15 กับ SUSE Manager ในเครือข่ายออฟไลน์

ลงทะเบียน SLES 15 กับ SUSE Manager ในเครือข่ายออฟไลน์

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

ทำให้การส่งต่อ X11 ของ YaST ใช้งานได้ผ่าน SSH

ทำให้การส่งต่อ X11 ของ YaST ใช้งานได้ผ่าน SSH

แก้ไขข้อผิดพลาดในการเปิดใช้งาน XIO ของ YaST ผ่าน SSH ตรวจสอบการส่งต่อ X11 และ xauth และสลับไปใช้ส่วนติดต่อ ncurses เมื่อไม่จำเป็นต้องใช้หน้าต่างระยะไกล

ย้อนกลับการอัปเดต SLES ที่ล้มเหลวอย่างปลอดภัยด้วย Snapper

ย้อนกลับการอัปเดต SLES ที่ล้มเหลวอย่างปลอดภัยด้วย Snapper

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

การส่งต่อ Syslog ของ SLES อย่างปลอดภัยด้วย rsyslog และ Mutual TLS

การส่งต่อ Syslog ของ SLES อย่างปลอดภัยด้วย rsyslog และ Mutual TLS

ส่งบันทึกระบบ SLES ไปยังตัวเก็บรวบรวม rsyslog ระยะไกลผ่าน TLS ที่มีการตรวจสอบสิทธิ์ พร้อมด้วยการตรวจสอบใบรับรอง การบัฟเฟอร์เมื่อระบบขัดข้อง และการทดสอบการส่งมอบ