Computer >> คอมพิวเตอร์ >  >> ระบบ >> Linux

วิธีแก้ไขแพ็คเกจที่ใช้งานไม่ได้ใน Linux

วิธีแก้ไขแพ็คเกจที่ใช้งานไม่ได้ใน Linux

ตัวจัดการแพ็คเกจ Linux เช่น Apt และ DNF นั้นทรงพลังและใช้งานง่ายมาก แต่นั่นไม่ได้หมายความว่าสิ่งต่าง ๆ จะผิดพลาดไม่ได้ ในบางครั้ง การติดตั้งแพ็กเกจอาจผิดพลาด และคุณยังต้องเก็บชิ้นส่วนต่างๆ ตัวจัดการแพ็คเกจมีความสามารถในการแก้ไขแพ็คเกจที่เสียหายและข้ามการอัปเดตที่เสียหายเพื่อให้ระบบของคุณทำงานได้อีกครั้งและหลีกเลี่ยงปัญหาในอนาคต บทความนี้ครอบคลุมวิธีแก้ไขแพ็คเกจที่เสียหายใน Linux

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

แก้ไขแพ็คเกจที่ใช้งานไม่ได้ใน Ubuntu/Mint/Debian

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

วิธีแก้ไขแพ็คเกจที่ใช้งานไม่ได้ใน Linux

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

sudo apt --fix-missing update

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

sudo apt install -f

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

วิธีแก้ไขแพ็คเกจที่ใช้งานไม่ได้ใน Linux

เริ่มต้นด้วยการพยายามบังคับให้ dpkg กำหนดค่าแพ็คเกจที่เสียหายหรือกำหนดค่าบางส่วนใหม่

sudo dpkg --configure -a

หากนั่นไม่สามารถแก้ปัญหาได้ คุณสามารถใช้แนวทางที่เข้มแข็งกว่านี้ได้ เริ่มต้นด้วยการระบุแพ็คเกจที่ dpkg ทำเครื่องหมายว่าจำเป็นต้องติดตั้งใหม่

sudo dpkg -l | grep ^..r

คุณควรเห็นแพ็คเกจที่มีปัญหาที่นั่น ตราบใดที่ไม่มีอะไรที่ดูเหมือนจะไม่อยู่ในนั้น คุณสามารถบังคับเอาแพ็คเกจที่เสียหายออกได้

sudo dpkg --remove --force-remove-reinstreq [package name]

เมื่อ dpkg เสร็จแล้ว ให้ลองล้างด้วย Apt

sudo apt clean
sudo apt update

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

ล็อค DPKG ถาวร

มีปัญหาทั่วไปน้อยกว่ากับการล็อก dpkg ทำให้คุณไม่สามารถทำอะไรได้ ทุกครั้งที่คุณพยายามใช้ Apt หรือ dpkg คุณจะได้รับข้อผิดพลาดว่าแอปพลิเคชั่นอื่นเป็น … เมื่อไม่ใช่

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

sudo rm /var/lib/apt/lists/lock

เพื่อการวัดผลที่ดี ให้ลบการล็อกในแคช

sudo rm /var/cache/apt/archives/lock

การแก้ไขแพ็คเกจที่ใช้งานไม่ได้ใน Fedora/CentOS/RHEL

การแก้ไขแพ็คเกจที่เสียหายใน Fedora/CentOS/RHEL นั้นไม่ค่อยเกิดขึ้น เนื่องจาก yum และ dnf ทำงานได้ดีมากในการตรวจสอบให้แน่ใจว่าแพ็คเกจได้รับการติดตั้งอย่างถูกต้อง อย่างไรก็ตาม บางครั้งสิ่งต่าง ๆ ก็ปะปนกันไปในการใช้แพ็คเกจ คำสั่งที่ต้องทำบนระบบที่ใช้ rpm คือ:

sudo rpm -Va
วิธีแก้ไขแพ็คเกจที่ใช้งานไม่ได้ใน Linux

-V ตัวเลือกนี้ใช้สำหรับตรวจสอบ หมายความว่าจะดำเนินการผ่านและเปรียบเทียบข้อมูลในไฟล์ที่ติดตั้งกับข้อมูลที่จัดเก็บไว้ใน rpm ฐานข้อมูล สิ่งนี้ไม่มีประโยชน์เล็กน้อย เนื่องจากโดยปกติแล้วจะให้รายการไฟล์ยาวๆ แก่คุณ แต่คุณสามารถเริ่มต้นที่ไหนสักแห่งหากคุณมีปัญหากับแอพพลิเคชั่นบางตัว คุณสามารถเรียกใช้ dnf reinstall ในแพ็คเกจที่คุณเห็นในรายการที่อาจสร้างปัญหาให้คุณ

sudo dnf --refresh reinstall PACKAGE_NAME

ซึ่งจะตั้งค่าข้อมูลเมตาทั้งหมดว่าหมดอายุ ดังนั้นจะรวบรวมข้อมูลผ่านที่เก็บทุกแห่งที่คุณเปิดใช้งานและค้นหาเวอร์ชันใหม่ของแพ็คเกจนั้น หากคุณพบว่ามีการขึ้นต่อกันที่เสียหายกับแพ็คเกจนั้น DNF อาจจะบ่นและบอกให้คุณใช้ --skip-broken ธง. นอกจากนี้ยังอาจหมายความว่าคุณไม่มีที่เก็บเฉพาะที่เปิดใช้งานเพื่อดึงการพึ่งพา ดังนั้นคุณอาจต้องค้นคว้าที่นั่น

แก้ไขแพ็คเกจที่เสียหายใน Arch

แม้ว่าตัวจัดการแพ็คเกจของ Arch จะมีความคล้ายคลึงกันมากกับของ Debian แต่ก็เป็นสัตว์ร้ายที่แตกต่างไปจากเดิมอย่างสิ้นเชิง ขั้นตอนแรกในการวินิจฉัยปัญหาของคุณคือตรวจสอบให้แน่ใจว่าที่เก็บข้อมูลเป็นปัจจุบันและพยายามอัปเกรดแบบเต็ม:

sudo pacman -Syu

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

“แพ็คเกจไม่ถูกต้องหรือเสียหาย”

การเปลี่ยนแปลง “pacman.conf” ในลักษณะใดๆ อาจทำให้เกิดปัญหาที่ก่อให้เกิด pacman เพื่อติดฉลากแพ็คเกจว่าเสียหายอย่างไม่ถูกต้อง ผู้ร้ายที่น่าจะเป็นไปได้มากที่สุดที่นี่คือไฟล์บางส่วน (“.part”) ในแคชตัวจัดการแพ็คเกจ และวิธีแก้ไขของคุณคือลบออก:

sudo find /var/cache/pacman/pkg/ -iname "*.part" -delete

มีโอกาสเสมอที่แพ็คเกจที่คุณพยายามติดตั้งจะเสียหายจริง ๆ และไม่ได้ให้ข้อมูลเมตาที่ถูกต้องแก่ Arch ในกรณีนั้น คุณจะต้องรอให้ผู้ดูแลแพ็คเกจอัปเดต หากแพ็คเกจได้รับการติดตั้งในระบบของคุณและทำให้เกิดปัญหาในระหว่างการอัพเกรด ให้ลบออกด้วย:

sudo pacman -Rns [package name]

“ไม่สามารถล็อคฐานข้อมูล”

เช่นเดียวกับ apt ของ Debian ตัวจัดการแพ็คเกจของ Arch จะสร้างไฟล์ล็อคระหว่างการดำเนินการ หากคุณประสบปัญหาไฟฟ้าดับหรือ pacman พบการขัดจังหวะอย่างหนักไม่สามารถถอดล็อคได้ มีโอกาสมากที่จะทิ้งไฟล์ล็อคไว้

ขั้นแรก ให้ตรวจสอบว่ามีกระบวนการบางอย่างในคอมพิวเตอร์ของคุณยังคงใช้ไฟล์อยู่หรือไม่:

sudo fuser /var/lib/pacman/db.lck
วิธีแก้ไขแพ็คเกจที่ใช้งานไม่ได้ใน Linux

ในภาพด้านบน กระบวนการที่มี ID 121497 กำลังใช้การล็อกไฟล์ หากคุณอยากรู้เกี่ยวกับกระบวนการและต้องการข้อมูลเพิ่มเติม ให้ใช้ ps :

ps -p [PID#]
วิธีแก้ไขแพ็คเกจที่ใช้งานไม่ได้ใน Linux

ในกรณีของฉัน อินสแตนซ์ pacman อื่นเป็นเจ้าของไฟล์ล็อค วิธีที่ปลอดภัยที่สุดในการถอดล็อคคือการหยุดกระบวนการนั้นก่อน:

sudo kill [PID#]

เมื่อกระบวนการนี้ตายแล้ว ให้ลบไฟล์ล็อค:

sudo rm /var/lib/pacman/db.lck

คุณพร้อมแล้วที่จะไปตอนนี้!

“ไฟล์ที่ขัดแย้ง/ไฟล์มีอยู่ในระบบไฟล์”

สิ่งนี้เกิดขึ้นระหว่างการอัปเกรดโดยที่ pacman ตรวจพบความขัดแย้ง ก่อนแก้ไขอะไร ให้ใส่ใจกับเส้นทางไปยังไฟล์ที่ตัวจัดการแพ็คเกจบ่น

สิ่งแรกที่เราต้องค้นหาคือใครเป็นเจ้าของไฟล์:

pacman -Qo [path to the file]

หากเป็นของผู้ใช้ไม่ใช่แพ็คเกจอื่น ให้ลบออก:

sudo rm [path to the file]

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

วิธีที่ง่ายที่สุดในการทำเช่นนี้คือการใช้ --overwrite ตั้งค่าสถานะใน pacman . เพิ่งรู้ว่านี่ไม่ปลอดภัยโดยทั่วไป และอาจทำให้แอปพลิเคชั่นบางตัวทำงานไม่ถูกต้องในระบบของคุณ ฉันขอแนะนำให้สำรองข้อมูลก่อนใช้งาน

--overwrite แฟล็กช่วยให้ตัวจัดการแพ็คเกจของ Arch เพิกเฉยกฎความเป็นเจ้าของสำหรับไฟล์ใดไฟล์หนึ่งและเพียงแค่สตรีมผ่านการอัปเดต ตัวอย่าง:

pacman -Syu --overwrite [file name]

หากคำสั่งข้างต้นใช้ไม่ได้ผล ให้เปลี่ยนชื่อไฟล์ด้วยเส้นทางที่แน่นอน ผู้ใช้บางคนรายงานว่าการลบเครื่องหมายทับ (“/”) นำหน้าพาธทำให้คำสั่งทำงานเมื่อคำสั่งนั้นดื้อ

คำถามที่พบบ่อย

1. ฉันสามารถใช้ Arch Fixes กับตัวช่วย AUR ได้หรือไม่

โดยทั่วไปใช่ แทนที่ “pacman” ด้วยตัวช่วย AUR ของคุณในคำสั่งในคู่มือนี้ ตัวอย่าง:

yay -Qo /path/to/file

2. คำแนะนำเหล่านี้ปลอดภัยหรือไม่

โดยส่วนใหญ่ ทุกคำสั่งในที่นี้มีความปลอดภัยพอๆ กับการดำเนินการจัดการแพ็คเกจอื่นๆ ข้อยกเว้นที่สำคัญคือเมื่อคุณกำลังลบไฟล์ล็อค หากคุณมีวิธีการดังกล่าว สิ่งสำคัญคือต้องฆ่ากระบวนการที่อาจใช้ไฟล์เหล่านั้นก่อนที่จะลบออก คอยระวังว่าระบบของคุณกำลังทำอะไรอยู่ คุณอาจลืมอินสแตนซ์ของ apt หรือ pacman ที่ทำงานอยู่ที่ไหนสักแห่ง!

แนวทางปฏิบัติที่ดีที่สุดคือสำรองข้อมูลระบบของคุณก่อนทำการอัพเกรดทุกครั้ง

3. ฉันควรทำอย่างไรหากฉันขัดจังหวะการอัปเดต

ทำลายกระบวนการอัปเดตด้วยการกด Ctrl + C การฆ่ากระบวนการของตัวจัดการแพ็คเกจหรือการปิดเทอร์มินัลก่อนกำหนดจะส่งผลให้ฐานข้อมูลแพ็คเกจของคุณเสียหายในระดับหนึ่งซึ่งอาจทำให้สิ่งต่าง ๆ ซับซ้อนสำหรับคุณเมื่อคุณพยายามติดตั้งอย่างอื่น ในการแก้ไขปัญหานี้ ให้ล้างแคชและอัปเดตซ้ำ

ใน Debian/Ubuntu/Mint/Pop!_OS/etc.:

sudo apt-get clean

ใน Fedora/CentOS/RHEL:

sudo dnf clean all

ในโค้ง:

sudo pacman -Scc

บทสรุป

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

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