Удаление поврежденных пакетов

Строка хижины очень ограничена. Под многими вариантами Unix (включая Linux), у Вас может быть только два слова: команда и отдельный аргумент. Существует также часто ограничение длины.

Общее решение состоит в том, чтобы записать маленькую обертку оболочки. Назовите сценарий Python foo.py, и помещенный сценарий оболочки рядом с foo.py и назовите его foo. Этот подход не требует никакого конкретного заголовка на сценарии Python.

#!/bin/sh
exec "$FOO/bar/MyCustomPython" "$0.py" "$@"

Другой заманчивый подход должен записать сценарий обертки как тот выше и поместить #!/path/to/wrapper/script как строка хижины на сценарии Python. Однако большинство нельдов не поддерживает объединение в цепочку сценариев хижины, таким образом, это не будет работать.

Если MyCustomPython был в $PATH, Вы могли использовать env искать его:

#!/usr/bin/env MyCustomPython
import …

Еще один подход должен принять меры, чтобы сценарий был оба действительным сценарием оболочки (который загружает правильный интерпретатор Python на себе), и действительный сценарий на выходном языке (здесь Python). Это требует, чтобы Вы нашли способ записать такой сценарий двойного языка для Вашего выходного языка. В Perl это известно как if $running_under_some_shell.

#!/bin/sh
eval 'exec "$FOO/bar/MyCustomPerl" -wS $0 ${1+"$@"}'
    if $running_under_some_shell;
use …

Вот один способ достигнуть того же эффекта в Python. В оболочке, "true" true утилита, которая игнорирует ее аргументы (две односимвольных строки : и ') и возвращает истинное значение. В Python, "true" строка, которая верна при интерпретации как булевская переменная, таким образом, это if инструкция это всегда верно и выполняет строковый литерал.

#!/bin/sh
if "true" : '''\'
then
exec "$FOO/bar/MyCustomPython" "$0" "$@"
exit 127
fi
'''
import …

Код Rosetta имеет такие сценарии двойного языка на нескольких других языках.

9
20.02.2011, 23:24
4 ответа

phpmyadmin зависит от dbconfig-common, который содержит /usr/share/dbconfig-common/dpkg/prerm.mysql. Похоже, что Вам удалось удалить dbconfig-common без удаления phpmyadmin, то, которого не должно было происходить (сделало Вы пытаетесь --force что-то?).

Мой совет состоит в том, чтобы сначала попробовать aptitude reinstall dbconfig-common. Если это работает, у Вас должна быть система в согласованном состоянии, от которого можно попробовать aptitude purge phpmyadmin снова.

Другая вещь, которую можно сделать, комментируют незаконную строку в /var/lib/dpkg/info/phpmyadmin.prerm. Это, вероятно, сделает Вас способными удалить phpmyadmin. Я подозреваю, что Вы сделали то, что та строка, как предполагается, делает, когда Вы отредактировали те mysql таблицы вручную, но я не знаю phpmyadmin или администратор базы данных в целом, таким образом, я только предполагаю.

Разница между remove и purge это remove просто удаляет программу и ее файлы данных (материал, который Вы могли повторно загрузить), в то время как purge сначала делает что remove делает затем также удаляет конфигурационные файлы (материал, который Вы, возможно, отредактировали локально). Если remove сбои, так будет purge.

7
27.01.2020, 20:06
  • 1
    я недавно судил Вас предложение при переустановке dbconfig-распространенного, но напрасно. Я обновил свои вопросы с результатами того усилия. –  Ken 20.02.2011, 23:08
  • 2
    @Ken: Попробовать dpkg -i /var/cache/apt/archives/{dbconfig-common,php5-mcrypt,libjs-mootools}*.deb. Если у Вас нет debs в Вашем кэше, загрузите их с packages.debian.org. Если существуют сообщения об ошибках, отправляют их, и я (или кто-то еще) мог бы помочь Вам с ними. –  Gilles 'SO- stop being evil' 20.02.2011, 23:17
  • 3
    Предпринятый напрасно. Кажется, как будто рой саранчи был развязан на моем чистом сервере Debian. Вопрос был обновлен для отражения этой последней попытки. –  Ken 20.02.2011, 23:25
  • 4
    @Ken: необходимо установить зависимости php5-mcrypt также. Способность сделала бы задание для Вас; можно попробовать, но я думаю, что это откажется сдвигаться с места, пока Вы не принесете php5myadmin к хорошему состоянию. dpkg ниже находится на одном уровне и может воздействовать даже на частично поврежденную базу данных пакета. –  Gilles 'SO- stop being evil' 20.02.2011, 23:28
  • 5
    В попытке установить php5-mcrypt, Это запросило сначала удаление phpmyadmin и dbconfig-common. Я не мог получить никакие другие решения, таким образом, я думал, что это будет не иметь успеха на своей поверхности, когда я согласился. Обратное, просто действие, которое php5-mycrypt был 'предложен' для установки, позволенной способность, чтобы правильно убрать рычаги и удалить phpmyadmin и dbconfig-common. Я теперь с тех пор переустановил их наряду с phpmyadmin (хотя через tar для большего количества управления). Кажется, что последняя версия не требует mysql для самоорганизации. Спасибо Giles для удаления саранчи с моего сервера! –  Ken 21.02.2011, 03:38

(Я собираюсь предположить, что Вы имели в виду aptitude purge и apt-get remove, потому что команды, которые Вы процитировали, не существуют),

Попробовать dpkg --purge phpmyadmin. Это низшего уровня, что другие инструменты, так могло бы быть более эффективным в этом случае.

2
27.01.2020, 20:06
  • 1
    Это обеспечило тот же результат, но без подробной обратной связи, требуемой способностью. Спасибо за ловлю моих жеманных из названий команды. –  Ken 20.02.2011, 23:11
  • 2
    я имею то, что чувствует себя подобно той же проблеме, но к сожалению я вручную скомпилировал PHP, Apache и больше установки их путем добавления php5-mcrypt модуля (который имеет все, которое я упомянул как зависимость) приведет к довольно грязному и нежелательному дублированию. Нет ли никакой другой путь? –  ken 15.10.2013, 16:31
[114374] Для исправления этой ошибки можно запустить "apt-get -f install":[12232]Я столкнулся с вышеописанной проблемой, используя "sudo dpkg --purge postgresql-9.1". проблема с командой решена[114377]
0
27.01.2020, 20:06

Иногда система управления пакетами настолько нарушена (часто в цепочке циклических зависимостей), что я нашел единственную комбинацию команд для удаления проблемных пакетов:

  • cd / var / lib / dpkg / info; rm
  • dpkg --purge --force-remove-reinstreq
  • OR dpkg --remove --force-remove-reinstreq
  • Затем apt-get install для переустановки пакета

Иногда может потребоваться исправить файл переопределения состояния, и вышеупомянутая процедура может вызвать ошибки, связанные с этим .. Как исправить Файлы переопределения состояния зависят от того, помечает ли пользователь ошибку или нет.

Обычно:

  • файлы переопределения состояния находятся в: / var / lib / dpkg / statoverride
  • Вы можете обновить его, запустив: dpkg-statoverride --remove
  • Вы даже можете редактировать их вручную, если знаете, что делаете
3
27.01.2020, 20:06

Теги

Похожие вопросы