จะลบ / ติดตั้งแพ็คเกจที่ไม่ได้ติดตั้งอย่างสมบูรณ์ได้อย่างไร?


62

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

Setting up google-chrome-stable (33.0.1750.152-1) ...
/var/lib/dpkg/info/google-chrome-stable.postinst: 124: /var/lib/dpkg/info/google-chrome-stable.postinst: update-alternatives: not found
dpkg: error processing google-chrome-stable (--configure):
 subprocess installed post-installation script returned error exit status 127
Setting up bsnes (0.088-7) ...
/var/lib/dpkg/info/bsnes.postinst: 5: /var/lib/dpkg/info/bsnes.postinst: update-alternatives: not found
dpkg: error processing bsnes (--configure):
 subprocess installed post-installation script returned error exit status 127
Errors were encountered while processing:
 google-chrome-stable
 bsnes
E: Sub-process /usr/bin/dpkg returned an error code (1)

ฉันค้นหาบน Google และบน Ask Ubuntu แล้ว แต่ไม่พบวิธีแก้ปัญหาที่ใช้งานได้ การแก้ไขที่แนะนำโดยทั่วไปคือการเรียกใช้สิ่งต่อไปนี้:

sudo apt-get clean && sudo apt-get autoremove
sudo apt-get -f install
sudo dpkg --configure -a

อย่างไรก็ตามสิ่งนี้ไม่ทำงาน คำสั่ง apt-get ทั้งหมดล้มเหลวโดยมีข้อผิดพลาดเหมือนกับข้างบนและคำสั่ง dpkg ก็ไม่ได้ช่วยอะไร สิ่งอื่น ๆ ที่พวกเขามักแนะนำให้ล้างมันผ่านทาง Synaptic หรือบรรทัดคำสั่งซึ่งก็ล้มเหลวเช่นกัน

ขอบคุณสำหรับความช่วยเหลือ

คำตอบ:


60

สำหรับผู้ใช้ขั้นสูงให้ใช้ความเสี่ยงของคุณเอง

ตามข้อความแสดงข้อผิดพลาดต่อไปนี้:

subprocess installed post-installation script returned error exit status 127

คุณอาจต้องการแก้ไข/var/lib/dpkg/info/[package_name].postinstและแสดงความคิดเห็นทุกอย่าง (หรือดีกว่าพยายามที่จะเข้าใจและระบุปัญหา) จากนั้นลองapt-getอีกครั้ง

โปรดทราบว่าแม้ว่าในคำถามนี้โดยเฉพาะข้อความที่เกี่ยวข้องกับ "การติดตั้งภายหลัง" อาจกล่าวได้เช่น "การลบล่วงหน้า" หรือ "การลบภายหลัง" แทน (ในกรณีนี้ส่วนขยายของไฟล์ที่จะแก้ไขจะเป็น.prermหรือ.postrm) .


2
จริงๆแล้วนี่เป็นวิธีที่ดีที่สุด การติดตั้งใหม่dpkgไม่ได้ช่วยเสมอไป
Danatela

2
ขอบคุณมาก ฉันต้องแก้ไข/var/lib/dpkg/info/[package_name].prermแต่การโพสต์ของคุณทำให้ฉันมีทิศทางที่ถูกต้อง แน่นอนว่าสำหรับผู้ใช้ขั้นสูงแล้วนี่เป็นความเสี่ยง !
sмurf

คำตอบที่ดีที่สุด ขอบคุณ! การแก้ไข.prermและ.postrmไฟล์แก้ไขปัญหา
fuser

42

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

  • Autoclean ล้างที่เก็บข้อมูลโลคัลของไฟล์แพ็กเกจที่ดึงออกมา

    sudo apt-get autoclean
    
  • บังคับให้ติดตั้ง / ลบแพ็คเกจ ☠ใช้ด้วยความระมัดระวัง

    sudo apt-get --force-yes install <pkgname>
    

    และ

    sudo apt-get --force-yes remove <pkgname>
    

และเช่นเคยคุณสามารถใช้dpkgเพื่อติดตั้งลบและกำจัดแพ็คเกจ

  • ติดตั้ง

    sudo dpkg -i <pkgname>
    
  • เอาออก

    sudo dpkg -r <pkgname>
    
  • ล้าง

    sudo dpkg -P <pkgname>
    

ทั้งคำสั่ง dpkg และ apt-get --force-yes ส่งคืนข้อผิดพลาดเดียวกับที่ฉันได้รับมาก่อน Autoclean ไม่ส่งคืนข้อผิดพลาด แต่ดูเหมือนจะไม่ทำอะไรกับแพ็คเกจที่ใช้งานไม่ได้
Bijak

@Bijak คุณต้องพยายามล้างแน่นอนbsnesคุณมี?
สมาชิกที่ลงทะเบียน

ใช่ด้วย dpkg -P, apt-get purge และด้วย Synaptic
Bijak

โพสต์ผลลัพธ์ของdpkg -l |grep bsnes
สมาชิกที่ลงทะเบียน

rF bsnes 0.088-7 amd64 โปรแกรมจำลอง SNES / SuperFamicom ที่แม่นยำ
Bijak

27

ดังนั้นหลังจาก googling มากขึ้นและอ่านข้อความข้อผิดพลาดอย่างระมัดระวังอีกครั้งดูเหมือนว่าdpkgจำเป็นต้องติดตั้งใหม่

sudo apt-get install --reinstall dpkg

สิ่งที่ทำให้ปัญหานี้เกิดขึ้น (หากมีคนค้นหาและเห็นสิ่งนี้) นั่นเป็นปัญหาที่update-alternatives: not foundเกิดขึ้นในข้อความแสดงข้อผิดพลาด ทันทีที่ติดตั้ง dpkg แพคเกจอื่น ๆ จะดำเนินการติดตั้งตามปกติโดยอัตโนมัติ


3
ทำไมคำตอบ (และยอมรับ) ที่ถูกต้องเพียงคำตอบเดียวคือรายการที่มีคะแนนน้อยกว่า⅓ของคำตอบสูงสุด? +1
David Foerster

สำหรับหนึ่ง: เพราะมันใช้ไม่ได้กับแพ็คเกจที่ไม่สามารถดาวน์โหลดได้อีกต่อไป "ไม่สามารถทำการติดตั้งใหม่ของ linux-image-extra-4.4.0-65-generic ได้จึงไม่สามารถดาวน์โหลดได้"
Joe

3
นี่อาจเป็นทางออกที่น่าจะน้อยที่สุดสำหรับทุกคนที่มาที่นี่ตามชื่อของคำถาม แต่มีเหตุผลมากมายที่เราสามารถแก้ไขปัญหานี้ได้ดังนั้นจะมีวิธีแก้ปัญหา "ที่ได้ผลกับฉัน" มากมายที่เสนอ
ไมเคิล

มันใช้งานไม่ได้จริง
NelsonGon

15

คุณสามารถลบไฟล์แพ็กเกจใน/var/lib/dpkg/info/พา ธนี้และอัพเดตซอร์ส

sudo rm /var/lib/dpkg/info/[package_name].*
sudo dpkg --configure -a
sudo apt-get update

จากนั้นติดตั้งแพ็คเกจของคุณใหม่ sudo apt-get install [package_name]

คุณหมอ


4
sudo rm /var/lib/dpkg/info/[pakege_name].*ที่จริงคุณมีใช้ดีกว่า มิฉะนั้นคุณจะลบแพ็คเกจที่เริ่มต้นด้วยชื่อเดียวกัน ยังไงก็ตามขอบคุณสำหรับสิ่งนี้มันเป็นทางออกเดียวที่ได้ผลสำหรับฉัน
smac89

13

ถ้าทุกอย่างอื่นล้มเหลว สิ่งที่ฉันทำคือฉันเปลี่ยนไดเรกทอรีเป็นครั้งแรก:

cd /var/lib/dpkg/info

จากนั้นฉันก็ลบทุกอย่างด้วย.postinst:

sudo rm *.postinst

จากนั้นอัปเดตที่เก็บ

sudo apt-get update

จากนั้นทุกอย่างก็กลับสู่ปกติเมื่อฉัน:

sudo apt-get --force-yes install openjdk-7-jre-headless

6
สิ่งนี้จะลบสคริปต์หลังการติดตั้งทั้งหมดออกจากแพ็คเกจที่ได้รับผลกระทบ ความคิดของฉันค่อนข้างแข็งเกินไป -1
David Foerster

หากง่ายต่อการระบุและลบเฉพาะสคริปต์หลังการติดตั้งที่ก่อให้เกิดปัญหานี่อาจเป็นวิธีที่สะดวกมากในการลบแพ็คเกจที่ล้มเหลว
Ian Mackinnon

หลังจากฝันร้ายที่มีปัญหา kernal เปลี่ยนชื่อ. postinst ของเคอร์เนลที่ได้รับผลกระทบเท่านั้นแก้ไขปัญหาได้
Andy

5

หากสิ่งอื่นล้มเหลวคุณสามารถลบแพ็คเกจด้วยตนเองdpkgได้ เล่นควรล้างsudo dpkg -P bsnesbsnes


2
dpkg: error processing package libcuda1-340 (--purge): package is in a very bad inconsistent state; you should reinstall it before attempting a removal
endolith

2

ในกรณีของฉัน apt-get install -fทำงาน ฉันกำลังติดตั้ง mysql-workbench-community

ลองมาก่อนหน้านี้ apt autoclean

ฉันเห็นข้อผิดพลาด dpkg เนื่องจากการพึ่งพาที่ขาดหายไปบางอย่างซึ่งสามารถแก้ไขได้โดยการติดตั้งในโหมดบังคับ (การติดตั้งการพึ่งพา)


0
sudo apt-get install -f --reinstall coreutils init-system-helpers

หลังจากทำงานด้านบนคุณสามารถติดตั้ง / อัพเกรด / ลบ / กำจัดตามปกติสำหรับแพ็คเกจใด ๆ

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