ไม่สามารถแก้ไขปัญหาได้คุณมีแพ็กเกจที่ใช้งานไม่ได้


216

หลังจากอัปเกรดจาก 10.04 เป็น 12.04 ฉันกำลังพยายามติดตั้งแพ็คเกจอื่น ตัวอย่างเช่น ia32-libs และ skype (4.0)

เมื่อพยายามติดตั้งสิ่งเหล่านี้ฉันได้รับข้อความแสดงข้อผิดพลาด 'ไม่สามารถแก้ไขปัญหาได้

เอาต์พุตของคำสั่ง:

sudo apt-get install -f
Reading package lists... Done
Building dependency tree       
Reading state information... Done
0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.

หลังจากรันสิ่งนี้:

sudo dpkg --configure -a
foo@foo:~$ sudo apt-get install -f
Reading package lists... Done
Building dependency tree       
Reading state information... Done
0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.

3
มันอาจช่วยถ้าคุณแสดงให้เราเห็นคำสั่งที่คุณกำลังพยายาม (เช่นsudo apt-get install ia32-libs) และผลลัพธ์จากคำสั่งนั้น นอกจากนี้ยังsudo apt-get dist-upgradeแสดงการปรับปรุงใด ๆ ที่มีอยู่?
thomasrutter

3
ฉันไม่รู้ว่าเกิดอะไรขึ้นกับคำถามของคุณฉันไม่เห็นข้อผิดพลาดที่เกิดขึ้นจริงหรือที่คุณอธิบายไว้ในชื่อเรื่องของคุณ
Braiam


คำตอบ:


237

ข้อความแสดงข้อผิดพลาดนั้นอาจบ่งบอกว่าคุณได้จัดแพคเกจ แต่ก็อาจบ่งบอกถึงปัญหาที่แตกต่างกัน

คุณสามารถรับรายชื่อของแพ็คเกจที่ถือจริงด้วย:

dpkg --get-selections | grep hold

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

วิธีการแก้ไขปัญหาอื่นอาจใช้ความถนัดมากกว่า apt-get เพื่อลองติดตั้งแพ็คเกจของคุณ:

sudo aptitude install <packagename>

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

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

sudo aptitude -f install <packagename>

6
ความคิดใด ๆ ที่จะถือแพคเกจ? :-)
Eugene van der Merwe

6
นั่นคือคำถามที่แยกต่างหาก
thomasrutter

59
ความถนัดเป็นประโยชน์กับฉันมากกว่าฉลาด - รับขอบคุณสำหรับคำใบ้
szx

9
สิ่งหนึ่งที่ควรทราบคือความถนัดอาจทำให้ระบบของคุณเสียหายได้ง่ายขึ้น ตัวอย่างเช่นถ้า apt-get ล้มเหลวในการติดตั้งบางสิ่งบางอย่างเนื่องจากการพึ่งพาที่ขัดแย้งกันมันจะยอมแพ้ อย่างไรก็ตามความถนัดอาจเสนอให้ไปข้างหน้า แต่ถอนการติดตั้งแพคเกจอื่น ๆ ทั้งหมดเพื่อตอบสนองความขัดแย้งเหล่านั้น - หรือแม้กระทั่งการลดระดับแพ็คเกจ คุณเพียงแค่ต้องตระหนักถึงสิ่งที่มันแนะนำและดำเนินการเฉพาะในกรณีที่มันเป็นความคิดที่ดี
thomasrutter

4
แพคเกจ "ระงับ" ไม่มีอะไรเกี่ยวข้องกับข้อความเพียงแค่หลีกเลี่ยงความขัดแย้งด้วยการกดค้างไว้ (ไม่ติดตั้งอัปเกรดอัปเกรดหรือลบ)
Braiam

33

นั่นก็เกิดขึ้นกับฉันเช่นกัน ทั้งหมดที่ฉันทำคือสิ่งนั้นsudo apt-get updateและแก้ไขปัญหาของฉัน โชคดี.


9

ฉันวิ่งเข้าไปในสถานการณ์ที่คล้ายคลึงกันเกี่ยวกับการพึ่งพาที่หายไป ในกรณีของฉันฉันพยายามติดตั้ง curl บน ubuntu saucy salamander 13.10 ...

ข้อผิดพลาดระบุว่าการอ้างอิงจำเป็นต้องใช้ไลบรารี curl3 เวอร์ชันก่อนหน้า

ฉันสามารถลดระดับลงเป็นเวอร์ชั่นก่อนหน้าโดยพยายามติดตั้ง curl โดยใช้ความสามารถ

เมื่อมันบันทึกการพึ่งพาที่ขาดหายไปและเหตุผล (จำเป็นต้องใช้ไฟล์ไลบรารีรุ่นก่อนหน้า) มันทำให้ฉันมีหลายตัวเลือกในการตอบสนอง ... y// n/q

Yจะยกเลิกการติดตั้งNจะมองหาตัวเลือกอื่นและQจะเลิกและไม่ทำอะไรเลยโดยปล่อยแพ็คเกจที่ใช้งานไม่ได้

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

  • ฉันอาจดูการอัพเกรดไฟล์ไลบรารีอีกครั้งหลังจากการติดตั้ง แต่เดี๋ยวก่อนดีมาก

9

ฉันมีสถานการณ์คล้ายกันในการติดตั้งใหม่ที่ 14.04 โดยไม่มีไฟล์อยู่ในรายการdpkg --get-selections | grep holdและไม่มีความสุขหลังจากsudo apt-get updateนั้น

สิ่งที่ไม่สามารถแก้ไขได้สำหรับฉันคือการที่เรียบง่าย

sudo apt-get autoremove

เมื่อฉันพยายามติดตั้งแพคเกจที่ล้มเหลวมันทำงานได้ดี เย้!


4

หากมีปัญหาเดียวกันฉันรันแพคเกจตรวจสอบคำสั่งจากคำตอบอื่น ๆ ( dpkg --get-selections | grep hold) แล้วเห็น

tomcat7                                         deinstall
tomcat7-common                                  install

ดังนั้นฉันจึงใช้ " apt-get remove tomcat7-common"

จากนั้นฉันสามารถติดตั้ง Tomcat 6 (ฉันลบ Tomcat 7 และติดตั้ง Tomcat 6 ตามที่คุณทำ)


แพคเกจ "ระงับ" ไม่มีอะไรเกี่ยวข้องกับข้อความเพียงแค่หลีกเลี่ยงความขัดแย้งด้วยการกดค้างไว้ (ไม่ติดตั้งอัปเกรดอัปเกรดหรือลบ)
Braiam

เพิ่มการล้างค่าสถานะ: apt-get remove --purge packet
Sergio Abreu

4

นี่เป็นวิธีที่ง่ายและรวดเร็วในการแก้ไขyou have held broken packagesข้อผิดพลาด

  • เปิดไฟล์ source.list ของคุณ/etc/apt/sources.listและตรวจสอบว่าไม่มีแหล่งซอฟแวร์สำหรับ Ubuntu รุ่นอื่นที่ต่างจาก Ubuntu ที่คุณใช้อยู่ในปัจจุบัน หากคุณพบบรรทัดการวางจำหน่ายที่ไม่ถูกต้องใน source.list ให้เปิดไฟล์ source.list ด้วยsudoedit /etc/apt/sources.listใส่เครื่องหมายบรรทัดที่ไม่ถูกต้องใน source.list โดยนำหน้าด้วย#อักขระบันทึกไฟล์ source.list และรันsudo apt updateเพื่ออัพเดตรายการ แพคเกจซอฟต์แวร์ที่มีอยู่

  • เลือกตัวเลือกFix Broken Packagesในตัวจัดการแพ็คเกจ Synaptic รันคำสั่งต่อไปนี้เพื่อติดตั้ง Synaptic

    sudo apt update  
    sudo apt upgrade   
    sudo apt install synaptic  
    

    เปิด Synaptic และใน Synaptic เลือกแก้ไข -> แก้ไขแพคเกจที่ใช้งานไม่ได้แล้วทำซ้ำแก้ไข -> แก้ไขแพคเกจที่ใช้งานไม่ได้อีกครั้ง

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

    แสดงแพคเกจที่เสียหายใน Synaptic

    เลือกแพ็คเกจที่เสียหายทีละตัว เลือกแพคเกจที่หักแล้วเปิด terminal และเรียกใช้ ผลลัพธ์ของคำสั่งนี้จะบอกคุณว่าแพคเกจที่เสียหายนั้นได้รับการติดตั้งจากที่เก็บเริ่มต้นของ Ubuntu หรือจากแหล่งอื่น ๆ หากมีการติดตั้งแพคเกจที่ใช้งานไม่ได้จากแหล่งอื่น ๆ อาจจะสามารถลบแพ็กเกจนั้นออกพร้อมกับแหล่งซอฟท์แวร์นั้นและแทนที่ด้วยแพ็คเกจเดียวกันในเวอร์ชันอื่นจากแหล่งเก็บข้อมูลเริ่มต้นของ Ubuntu โดยทั่วไปแล้วนี่หมายถึงการแก้ไขแพคเกจที่ใช้งานไม่ได้โดยการลดระดับแพ็คเกจนั้นเป็นเวอร์ชั่นเก่ากว่าapt policy <package-name>

  • หากคุณได้รับข้อความแสดงข้อผิดพลาดนี้:

    Try 'apt-get -f install' with no packages (or specify a solution)  
    

    รันคำสั่งต่อไปนี้:

    sudo apt update  
    sudo apt upgrade   
    sudo apt-get -f install   
    
  • ลบแพ็คเกจที่เสียหายด้วยตนเอง

    1. ค้นหาแพ็คเกจของคุณใน /var/lib/dpkg/info

      ls -l /var/lib/dpkg/info | grep <package>
      
    2. ย้ายโฟลเดอร์แพ็คเกจไปยังตำแหน่งอื่น

      cd /tmp && sudo mkdir new-package-location  
      sudo mv /var/lib/dpkg/info/<package>.* /tmp/new-package-location/    
      
    3. เรียกใช้คำสั่งต่อไปนี้:

      sudo dpkg --remove --force-remove-reinstreq <package>  
      

หากวิธีการทั้งหมดนี้ใช้ไม่ได้อาจเป็นไปได้ว่าแพ็คเกจที่ใช้งานไม่ได้เกิดจากสิ่งที่ฝังอยู่ในระบบปฏิบัติการอย่างมากจนไม่มีวิธีใดที่จะส่งผลกระทบต่อมัน สถานที่ที่ชัดเจนเป็นครั้งแรกที่จะมองหานี้ฝังลึก "บางอย่าง" /etc/apt/sources.listที่อยู่ในแหล่งที่มาของซอฟต์แวร์ใน ตรวจสอบไฟล์ sources.list เพื่อดูว่ามีบรรทัดที่ไม่เป็นมาตรฐานใด ๆ ที่อาจทำให้เกิดข้อผิดพลาดของแพ็คเกจที่เสียหายหรือไม่ ไฟล์ source.list มาตรฐานของ Ubuntu ดูเหมือนว่าไฟล์ source.list ในคำตอบนี้

วิธีที่ถูกต้องในการลบบรรทัดที่น่าสงสัยออกจากแหล่งรายการคือการใส่ความคิดเห็นโดยนำหน้าด้วย#อักขระ จากนั้นเรียกใช้sudo apt updateเพื่อรีเฟรชรายการซอฟต์แวร์ที่มี


0

สำหรับฉันแล้วไม่มีข้อใดถูกใช้งานได้เนื่องจากระบบของฉันไม่ได้อัปเดต ฉันทำ

Home Key > Software Updater > Install

และปรับปรุงระบบของฉัน; หลังจากนั้นฉันสามารถติดตั้งแพ็คเกจด้วยปกติaptได้


0

ฉันมีปัญหาเดียวกันในการติดตั้งใหม่xsaneหลังจากการppaติดตั้งล้มเหลว เช่นเดียวกับที่เกิดขึ้นกับ yochannah "ไม่มีไฟล์อยู่ในรายการdpkg --get-selections | grep holdและไม่มีความสุขหลังจากsudo apt-get update"

คำใบ้ที่apt-getให้ฉันคือ

xsane : Depends: libsane (>= 1.0.24) but it is not going to be installed

เนื่องจากคำตอบ yochannah ฉันมีความรู้สึกว่าฉันต้องลบแพ็คเกจที่ติดตั้งไว้ก่อนหน้านี้บางส่วน และมันก็เป็นเช่นนั้นฉันต้องลบแพ็กเกจที่เกี่ยวข้องทั้งหมดด้วยตนเองรวมถึงแพคเกจsaneอื่น ๆxsane-commonและlibsaneซึ่งยังคงติดตั้งเป็นppaเวอร์ชัน

ดังนั้นระวังสิ่งที่คุณได้ติดตั้งไว้ก่อนหน้านี้และเป็นระเบียบเรียบร้อย!

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