Поэтому я попытался установить пакет dokuwiki на свой raspberry pi, однако пакет не удалось установить. При попытке удалить пакет также происходит сбой dpkg со следующей ошибкой:

String found where operator expected at /usr/share/perl5/Debconf/Element/Noninteractive/Multiselect.pm line 2, at end of line
    (Missing semicolon on previous line?)
Can't locate object method "new" via package "Debconf::Element::Noninteractive::Multiselect" (perhaps you forgot to load "Debconf::Element::Noninteractive::Multiselect"?) at /usr/share/perl5/Debconf/FrontEnd.pm line 68, <GEN50> line 5.
(Reading database ... 132035 files and directories currently installed.)
Removing dokuwiki (0.0.20140505.a+dfsg-4) ...
dpkg: error processing package dokuwiki (--remove):
 subprocess installed post-removal script returned error exit status 10
Errors were encountered while processing:
 dokuwiki
E: Sub-process /usr/bin/dpkg returned an error code (1)

Я подумал, что в файле 'Multiselect.pm' может быть ошибка, поэтому я посмотрел и нашел что-то очень странное:

#!odsrisin= eris-wet Tems tsleTaasamreS(ocdeseth d.gnonsed"p!
Lipa")ag  De  on  :Eifmeod::isnileerthti 0::{
lt  el  t;  se  trort;trseg asthqw.gebChnfdVElueenod:Nisin0]ra
 iv  ;
  1

Я понимаю, почему dpkg не может выполнить этот файл. Даже первая строка, указывающая, какую программу следует использовать для запуска этого файла, искажена. Я предполагаю, что этот файл либо был каким-то образом запутан, либо, возможно, использует что-то отличное от кодировки UTF- *. Думаю, это тоже может быть повреждено.

У кого-нибудь есть какие-либо мысли по этому поводу, и, возможно, как я могу удалить этот сломанный пакет?

1 ответ1

1

Я понял. Я не уверен, что случилось с исходным файлом, но я просто заменил его на файл, запущенный в другой системе Debian. Однако, это все еще не позволило мне удалить пакет dokuwiki.

Я решил посмотреть на конфигурационные скрипты для докувиков в /var/lib/dpkg/info/ и нашел скрипт, который выдавал ошибку: dokuwiki.postinst. Запуск этого сценария без каких-либо аргументов привел к ошибке о недопустимом операторе, поэтому я добавил следующий фрагмент кода в начало файла:

if [ -z $1 ]; then
    ./dokuwiki.postinst a
    return
fi

Он просто проверяет, был ли скрипт вызван с какими-либо аргументами, а если нет, он вызывает себя с бессмысленным аргументом (просто 'a') и затем возвращает.

После этого я побежал

dpkg -r dokuwiki

и он удален без проблем.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .