Ошибка при удалении пакета lazarus-src-2.2: dpkg-divert: ошибка: имя файла ‘to’ не является абсолютным путем

Вопрос или проблема

Я пытаюсь удалить пакет “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, неправильно сформирован из-за неправильного формата путей или переменных.

Решение проблемы

  1. Редактирование скрипта удаления:
    Вам необходимо открыть файл /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`

    Это изменение поможет избежать проблем, связанных с локализацией, когда команды или их результаты отличаются в зависимости от настроек языка системы.

  2. Удаление диверсий:
    Если предыдущий шаг не привел к успеху, необходимо удалить все конфликтующие диверсии. Это можно сделать с помощью следующего скрипта:

    #!/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
  3. Переменная окружения LANG:
    Как указали некоторые пользователи, может помочь временная смена переменной окружения языка. Для уверенного удаления пакета выполните:

    export LANG=C
    sudo apt remove lazarus-src-2.2

    После успешного удаления можно вернуть локализацию к вашей прежней конфигурации, выполнив команду:

    export LANG=ваш_язык

Заключение

Подводя итог, проблемы с удалением пакетов, которые требуют специфических обработчиков и скриптов, как в вашем случае с пакетом Lazarus, часто связаны с нюансами локализации и неправильными путями. Следуйте шагам, описанным выше, и вы сможете успешно удалить пакет. Если остаются вопросы, не стесняйтесь обращаться за помощью на специализированные форумы или сообщества Ubuntu.

Оцените материал
Добавить комментарий

Капча загружается...