Як видалити / встановити пакет, який не встановлений повністю?


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не завжди допомагає.
Данатела

2
Спасибі купи. Мені довелося виправити, /var/lib/dpkg/info/[package_name].prermале ваш пост дав мені правильний напрямок. Безумовно, для досвідчених користувачів це ризиковано !
смурф

Найкраща відповідь. Дякую! Виправлення .prermта .postrmфайли усувають проблему.
фюзер

42

Крім тих, які ви вже опублікували, є ще кілька команд, які можуть бути корисними.

  • Autoclean очищає локальний сховище отриманих файлів пакетів.

    sudo apt-get autoclean
    
  • Примусове встановлення / видалення пакетів. SeВикористовуйте обережно

    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 Ви, напевно, пробували bsnesчистити.
Зареєстрований користувач

Так, з dpkg -P, влучною чисткою та з Synaptic
Bijak

Опублікувати вихідdpkg -l |grep bsnes
Зареєстрований користувач

rF bsnes 0,088-7 amd64 Точний SNES / емулятор SuperFamicom
Bijak

27

Отже, після ще більш гуглого та справжнього ретельного повторного прочитання повідомлень про помилки, здається, що його dpkgпотрібно було перевстановити.

sudo apt-get install --reinstall dpkg

Що виявило проблему (якщо хтось це шукає і бачить), це те, що update-alternatives: not foundбуло в повідомленні про помилку. Як тільки dpkg був перевстановлений, інші пакети перейшли до автоматичного встановлення автоматично.


3
Чому єдина правильна (і прийнята) відповідь поки що внизу списку з меншим ⅓ голосів головної відповіді? +1
Девід Фоерстер

для одного: оскільки він не працює для пакетів, які вже не можна завантажити "Перевстановлення linux-image-extra-4.4.0-65-generic не можливе, його неможливо завантажити".
Джо

3
Це, мабуть, найменш вірогідне рішення для тих, хто приїжджає сюди, виходячи з назви питання. Але є багато причин, з яких можна вирішити цю проблему, тому запропонованих рішень "це працює для мене" буде багато.
Майкл

Це насправді не працює.
НельсонГон

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
Девід Фоерстер

Якщо легко визначити та видалити лише той сценарій після встановлення, що спричинить проблему, це може бути дуже зручним способом видалення несправного пакета.
Ian Mackinnon

після кошмару з проблемами ядра перейменування .postinst тільки зачепленого ядра виправили проблему
Енді

5

Якщо все інше виходить з ладу, ви можете вручну видалити пакунок наскрізь dpkg. Біг sudo dpkg -P bsnesповинен чиститися bsnes.


2
dpkg: error processing package libcuda1-340 (--purge): package is in a very bad inconsistent state; you should reinstall it before attempting a removal
ендоліт

2

У моєму випадку apt-get install -fпрацювало. Я встановлював mysql-workbench-спільноту

Раніше пробували apt autoclean

Я бачив, що помилка dpkg через деякі відсутність залежності, які можна виправити, встановивши у примусовому режимі (встановлення залежностей)


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

Після запуску вище, ви можете встановити / оновити / видалити / очистити як завжди для будь-яких пакетів.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.