Вопрос или проблема
Я пытаюсь удалить пакет “lazarus-src-2.2” на своей системе Ubuntu, но сталкиваюсь с ошибкой, которую не могу исправить. Вот вывод команды sudo apt remove lazarus-src-2.2
:
Чтение списков пакетов... Готово
Построение дерева зависимостей... Готово
Чтение информации о состоянии... Готово
Следующие пакеты будут УДАЛЕНЫ:
lazarus-src-2.2
0 обновлено, 0 ново установлен, 1 для удаления и 2 не обновлено.
1 не полностью установлен или удален.
После этой операции будет освобождено 158 МБ дискового пространства.
Хотите продолжить? [Y/n] y
(Чтение базы данных ... в настоящее время установлено 586632 файлов и каталогов.)
Удаление lazarus-src-2.2 (2.2.0+dfsg1-5ubuntu1) ...
dpkg-divert: ошибка: имя файла 'to' не является абсолютным путем
Используйте --help для получения справки по перенаправлению файлов.
dpkg: ошибка обработки пакета lazarus-src-2.2 (--remove):
скрипт постудаления установленного пакета lazarus-src-2.2 вернул ошибку с кодом выхода 2
Слишком 많은 ошибок, остановка
Обработка триггеров для libc-bin (2.31-0ubuntu9.16) ...
При обработке возникли ошибки:
lazarus-src-2.2
Обработка была прервана из-за слишком большого количества ошибок.
E: Подпроцесс /usr/bin/dpkg вернул код ошибки (1)
Как я могу решить эту проблему и успешно удалить пакет “lazarus-src-2.2”? Я пробовал переустановить пакет и использовать команду dpkg –remove –force-remove-reinstreq, но безуспешно. Любая помощь будет оценена!
sudo apt list | grep "lazarus"
lazarus-2.2/jammy,jammy 2.2.0+dfsg1-5ubuntu1 all
lazarus-doc-2.2/jammy,jammy,now 2.2.0+dfsg1-5ubuntu1 all [установлен]
lazarus-doc/jammy,jammy,jammy 2.2.0+dfsg1-5ubuntu1 all
lazarus-ide-2.2/jammy,jammy,now 2.2.0+dfsg1-5ubuntu1 amd64 [установлен]
lazarus-ide-gtk2-2.2/jammy,now 2.2.0+dfsg1-5ubuntu1 amd64 [установлен]
lazarus-ide-gtk2/jammy,jammy 2.2.0+dfsg1-5ubuntu1 all
lazarus-ide-qt5-2.2/jammy 2.2.0+dfsg1-5ubuntu1 amd64
lazarus-ide-qt5/jammy,jammy 2.2.0+dfsg1-5ubuntu1 all
lazarus-ide/jammy,jammy,now 2.2.0+dfsg1-5ubuntu1 all [установлен]
lazarus-src-2.2/jammy,jammy,now 2.2.0+dfsg1-5ubuntu1 all [установлен]
lazarus-src/jammy,jammy,jammy 2.2.0+dfsg1-5ubuntu1 all
lazarus/jammy,jammy 2.2.0+dfsg1-5ubuntu1 all
uname -a
Linux user-pc 5.15.0-73-generic #80-Ubuntu SMP x86_64 x86_64 x86_64 GNU/Linux
Итак, я решил эту проблему через несколько дней.
Вам нужно удалить конфликтующие файлы с помощью
sudo dpkg-divert --remove PATH
Все, что вам может понадобиться для исправления этой ошибки, я собрал в одном bash-скрипте.
#!/bin/bash
# Получить список перенаправлений с путями
diversions=$(dpkg-divert --list 'lazarus*')
# Разделить вывод на строки
IFS=$'\n'
# Перебор каждой строки вывода
For line in $diversions; do
# Извлечь путь из строки
path=$(echo $line | awk '{print $2}')
# Выполнить команду с замененным путем
sudo dpkg-divert --remove --no-rename "$path"
#Удалить оставшийся мусор
sudo apt-get install -f
sudo apt autoremove
done
P.S. вы можете заменить имя пакета ‘lazarus’ (строка: 4) на любое из ваших пакетов
В /var/lib/dpkg/info/lazarus-src-2.2.postrm есть ошибка
Чтобы исправить это, просто отредактируйте файл и найдите следующую строку
DIVERTIONS_LIST=`dpkg-divert --list "${LAZARUS_PREFIX}/${REMOVED_VERSIONS}" | cut -d ' ' -f 3`
и измените ее на:
DIVERTIONS_LIST=`LANG=C dpkg-divert --list "${LAZARUS_PREFIX}/${REMOVED_VERSIONS}" | cut -d ' ' -f 3`
Затем повторите вашу sudo apt remove lazarus-src-2.2
.
Проблема заключалась в том, что список пакетов для удаления формируется неправильно при не-англоязычной локализации ОС. Поэтому проще временно изменить локаль на EN(US), перезагрузить, повторить удаление. Верните локаль обратно и перезагрузите.
Ответ или решение
Ваша проблема с удалением пакета "lazarus-src-2.2" на Ubuntu действительно требует внимательного подхода, особенно из-за ошибки, связанной с dpkg-divert
. Давайте рассмотрим основные шаги по разрешению этой ситуации.
Причины ошибки
Ошибка dpkg-divert: error: file name ‘to’ is not an absolute path возникает, когда обработчик удаления пакета не может корректно обработать команды, связанные с перенаправлениями файлов. В вашем случае, сценарий удаления, находящийся в файле /var/lib/dpkg/info/lazarus-src-2.2.postrm
, неправильно сформирован из-за неправильного формата путей или переменных.
Решение проблемы
-
Редактирование скрипта удаления:
Вам необходимо открыть файл/var/lib/dpkg/info/lazarus-src-2.2.postrm
и внести изменения. Найдите строку:DIVERTIONS_LIST=`dpkg-divert --list "${LAZARUS_PREFIX}/${REMOVED_VERSIONS}" | cut -d ' ' -f 3`
Замените её на:
DIVERTIONS_LIST=`LANG=C dpkg-divert --list "${LAZARUS_PREFIX}/${REMOVED_VERSIONS}" | cut -d ' ' -f 3`
Это изменение поможет избежать проблем, связанных с локализацией, когда команды или их результаты отличаются в зависимости от настроек языка системы.
-
Удаление диверсий:
Если предыдущий шаг не привел к успеху, необходимо удалить все конфликтующие диверсии. Это можно сделать с помощью следующего скрипта:#!/bin/bash # Получаем список диверсий diversions=$(dpkg-divert --list 'lazarus*') # Разбиваем вывод на строки IFS=$'\n' # Обрабатываем каждую строку for line in $diversions; do # Извлекаем путь path=$(echo $line | awk '{print $2}') # Удаляем диверсию sudo dpkg-divert --remove --no-rename "$path" done # Теперь исправляем оставшиеся проблемы sudo apt-get install -f sudo apt autoremove
-
Переменная окружения LANG:
Как указали некоторые пользователи, может помочь временная смена переменной окружения языка. Для уверенного удаления пакета выполните:export LANG=C sudo apt remove lazarus-src-2.2
После успешного удаления можно вернуть локализацию к вашей прежней конфигурации, выполнив команду:
export LANG=ваш_язык
Заключение
Подводя итог, проблемы с удалением пакетов, которые требуют специфических обработчиков и скриптов, как в вашем случае с пакетом Lazarus, часто связаны с нюансами локализации и неправильными путями. Следуйте шагам, описанным выше, и вы сможете успешно удалить пакет. Если остаются вопросы, не стесняйтесь обращаться за помощью на специализированные форумы или сообщества Ubuntu.