dpkg конфигурация util-linux никогда не заканчивается, ошибок нет

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

Я выполнил команду apt update несколько дней назад, и она так и не завершилась. Я ctrl-c прервал ее, и она сказала, что мне нужно выполнить dpkg --configure -a. Я сделал это, и она пытается настроить util-linux. Однако это никогда не завершалось. Я даже оставил ее работать более 12 часов на ночь, но она по-прежнему не завершилась. Она также не выдает никаких ошибок. Она просто зависает.

$ sudo dpkg --configure -a
Настройка util-linux (2.34-0.1ubuntu2.2) ...

Я пытался запустить ее с подробным отладочным выводом, но все равно не увидел полезного вывода.

$ sudo dpkg --configure -a -D42442
D000040: проверка зависимостей util-linux:amd64 (- <none>)
D000400:   проверка группы ...
D000400:     проверка возможности  -> fdisk
D000400:       проверка непредоставленного пакета fdisk:amd64
D000400:       установлен, в порядке и найден
D000400:     найдено 3
D000400:   найдено 3 соответствий 0 possfixbytrig -
D000400:   проверка группы ...
D000400:     проверка возможности  -> login
D000400:       проверка непредоставленного пакета login:amd64
D000400:       установлен, в порядке и найден
D000400:     найдено 3
D000400:   найдено 3 соответствий 0 possfixbytrig -
D000400:   проверка группы ...
D000400:     проверка возможности  -> libaudit1
D000400:       проверка непредоставленного пакета libaudit1:amd64
D000400:       установлен, в порядке и найден
D000400:     найдено 3
D000400:   найдено 3 соответствий 0 possfixbytrig -
D000400:   проверка группы ...
D000400:     проверка возможности  -> libblkid1
D000400:       проверка непредоставленного пакета libblkid1:amd64
D000400:       установлен, в порядке и найден
D000400:     найдено 3
D000400:   найдено 3 соответствий 0 possfixbytrig -
D000400:   проверка группы ...
D000400:     проверка возможности  -> libc6
D000400:       проверка непредоставленного пакета libc6:amd64
D000400:       установлен, в порядке и найден
D000400:     найдено 3
D000400:   найдено 3 соответствий 0 possfixbytrig -
D000400:   проверка группы ...
D000400:     проверка возможности  -> libcap-ng0
D000400:       проверка непредоставленного пакета libcap-ng0:amd64
D000400:       установлен, в порядке и найден
D000400:     найдено 3
D000400:   найдено 3 соответствий 0 possfixbytrig -
D000400:   проверка группы ...
D000400:     проверка возможности  -> libmount1
D000400:       проверка непредоставленного пакета libmount1:amd64
D000400:       установлен, в порядке и найден
D000400:     найдено 3
D000400:   найдено 3 соответствий 0 possfixbytrig -
D000400:   проверка группы ...
D000400:     проверка возможности  -> libpam0g
D000400:       проверка непредоставленного пакета libpam0g:amd64
D000400:       установлен, в порядке и найден
D000400:     найдено 3
D000400:   найдено 3 соответствий 0 possfixbytrig -
D000400:   проверка группы ...
D000400:     проверка возможности  -> libselinux1
D000400:       проверка непредоставленного пакета libselinux1:amd64
D000400:       установлен, в порядке и найден
D000400:     найдено 3
D000400:   найдено 3 соответствий 0 possfixbytrig -
D000400:   проверка группы ...
D000400:     проверка возможности  -> libsmartcols1
D000400:       проверка непредоставленного пакета libsmartcols1:amd64
D000400:       установлен, в порядке и найден
D000400:     найдено 3
D000400:   найдено 3 соответствий 0 possfixbytrig -
D000400:   проверка группы ...
D000400:     проверка возможности  -> libsystemd0
D000400:       проверка непредоставленного пакета libsystemd0:amd64
D000400:       установлен, в порядке и найден
D000400:     найдено 3
D000400:   найдено 3 соответствий 0 possfixbytrig -
D000400:   проверка группы ...
D000400:     проверка возможности  -> libtinfo6
D000400:       проверка непредоставленного пакета libtinfo6:amd64
D000400:       установлен, в порядке и найден
D000400:     найдено 3
D000400:   найдено 3 соответствий 0 possfixbytrig -
D000400:   проверка группы ...
D000400:     проверка возможности  -> libudev1
D000400:       проверка непредоставленного пакета libudev1:amd64
D000400:       установлен, в порядке и найден
D000400:     найдено 3
D000400:   найдено 3 соответствий 0 possfixbytrig -
D000400:   проверка группы ...
D000400:     проверка возможности  -> libuuid1
D000400:       проверка непредоставленного пакета libuuid1:amd64
D000400:       установлен, в порядке и найден
D000400:     найдено 3
D000400:   найдено 3 соответствий 0 possfixbytrig -
D000400:   проверка группы ...
D000400:     проверка возможности  -> zlib1g
D000400:       проверка непредоставленного пакета zlib1g:amd64
D000400:       установлен, в порядке и найден
D000400:     найдено 3
D000400:   найдено 3 соответствий 0 possfixbytrig -
D000040: ok 2 сообщений >><<
D000040:     проверка Breaks
D000400:       проверка нарушителя login:amd64 virtbroken <none>
D000400:       проверка нарушителя fdisk:amd64 virtbroken <none>
Настройка util-linux (2.34-0.1ubuntu2.2) ...
D000002: fork/exec /var/lib/dpkg/info/util-linux.postinst ( настройка 2.34-0.1ubuntu2.1 )

Она просто зависает там.

Я не могу выполнять другие команды apt, пока пакет не настроен, и не хочу перезагружать без надлежащего, полностью установленного пакета util-linux.

У меня нет идеи, что делать. Любая помощь будет крайне признательна.

Я использую чистый Debian, но с этой же проблемой столкнулся, и нашел решение — я публикую этот ответ на случай, если он поможет кому-то вернуться к нормальной работе.

После зависания на util-linux.postinst, я изменил упомянутый файл postinst, добавив кучу логирования:

#!/bin/sh
set -e

LOGFILE=/root/log.file

echo "Система: " >$LOGFILE
env >>$LOGFILE


echo "update-alternatives" >>$LOGFILE
update-alternatives --install /usr/bin/pager pager /bin/more 50 \
    --slave /usr/share/man/man1/pager.1.gz pager.1.gz \
    /usr/share/man/man1/more.1.gz

# Мы перестали поставлять утилиту 'pg', поэтому удалим ее в качестве альтернативы pager
# при обновлениях с Stretch.
echo "update-alternatives remove pager" >>$LOGFILE
update-alternatives --remove pager /usr/bin/pg

# Автоматически добавлено dh_installinit/13.1
echo "шаг 3" >>$LOGFILE
if [ "$1" = "configure" ] || [ "$1" = "abort-upgrade" ] || [ "$1" = "abort-deconfigure" ] || [ "$1" = "abort-remove" ] ; then
    if [ -x "/etc/init.d/hwclock.sh" ]; then
        update-rc.d hwclock.sh defaults >/dev/null || exit 1
    fi
fi
# Конец автоматически добавленного раздела
# Автоматически добавлено dh_installsystemd/13.1
echo "шаг 4" >>$LOGFILE
if [ "$1" = "configure" ] || [ "$1" = "abort-upgrade" ] || [ "$1" = "abort-deconfigure" ] || [ "$1" = "abort-remove" ] ; then
    # Это удалит только маски, созданные d-s-h при удалении пакета.
    deb-systemd-helper unmask 'fstrim.timer' >/dev/null || true

    # was-enabled по умолчанию истинно, поэтому новые установки выполняют enable.
    if deb-systemd-helper --quiet was-enabled 'fstrim.timer'; then
        # Включает юнит при первом установке, создает новые
        # символические ссылки при обновлениях, если файл юнита изменился.
        deb-systemd-helper enable 'fstrim.timer' >/dev/null || true
    else
        # Обновляет файл состояния, чтобы добавить новые символические ссылки (если есть), которые необходимо
        # очистить при удалении. Также удаляет старые символические ссылки.
        deb-systemd-helper update-state 'fstrim.timer' >/dev/null || true
    fi
fi
# Конец автоматически добавленного раздела
# Автоматически добавлено dh_installsystemd/13.1
echo "шаг 5" >>$LOGFILE
if [ "$1" = "configure" ] || [ "$1" = "abort-upgrade" ] || [ "$1" = "abort-deconfigure" ] || [ "$1" = "abort-remove" ] ; then

echo "шаг 5.1" >>$LOGFILE
    if [ -d /run/systemd/system ]; then
echo "шаг 5.2" >>$LOGFILE
        systemctl --system daemon-reload >/dev/null || true
echo "шаг 5.3" >>$LOGFILE
        if [ -n "$2" ]; then
echo "шаг 5.4" >>$LOGFILE
            _dh_action=restart
        else
echo "шаг 5.5" >>$LOGFILE
            _dh_action=start
        fi
echo "шаг 5.6" >>$LOGFILE
        deb-systemd-invoke $_dh_action 'fstrim.timer' >/dev/null || true
echo "шаг 5.7" >>$LOGFILE
    fi
echo "шаг 5.8" >>$LOGFILE
fi
# Конец автоматически добавленного раздела
# Автоматически добавлено dh_installsystemd/13.1
echo "шаг 6" >>$LOGFILE
if [ "$1" = "configure" ] || [ "$1" = "abort-upgrade" ] || [ "$1" = "abort-deconfigure" ] || [ "$1" = "abort-remove" ] ; then
    if [ -d /run/systemd/system ]; then
        systemctl --system daemon-reload >/dev/null || true
        if [ -n "$2" ]; then
            _dh_action=restart
        else
            _dh_action=start
        fi
        deb-systemd-invoke $_dh_action 'fstrim.service' >/dev/null || true
    fi
fi
# Конец автоматически добавленного раздела
echo "шаг 7" >>$LOGFILE

Изучив вывод в /root/log.file, я обнаружил, что шаг 5.6 был блокирующим. Ручной запуск команд systemctl также вызывал зависание. Быстрый поиск в Google показал, что система будет работать нормально без fstrim (временно – это создает проблемы с долговечностью дисков, особенно для SSD), поэтому я закомментировал все команды fstrim и повторно запустил dpkg --configure util-linux успешно.

Надеюсь, это поможет!

Это помогло мне, когда я обновил Raspbian Buster до Raspbian Bullseye.

cd /var/lib/dpkg/info
sudo nano util-linux.postinst
закомментируйте это – deb-systemd-invoke $_dh_action ‘fstrim.timer’ >/dev/null || true
sudo apt -f install util-linux

sudo apt –fix-broken install

спасибо @JackM

Ответ или решение

Если процесс настройки пакета util-linux застревает на этапе dpkg --configure -a, это может служить поводом для серьезной обеспокоенности, особенно если команда зависла без сообщения об ошибке. Правильное понимание и диагностика этой проблемы требуют системного подхода, и я представлю вам подробный алгоритм действий.

Описание проблемы

Вы столкнулись с ситуацией, когда команда apt update не завершила выполнение и была прервана. Следовательно, выполнение dpkg --configure -a застревает во время настройки пакета util-linux, при этом не выводя никаких ошибок и оставаясь в состоянии "ожидания" более 12 часов.

1. Предварительные действия

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

  • Проверьте его занятость: Убедитесь, что система не выполняет другие обновления или операции, которые могут блокировать dpkg. Вы можете проверить это с помощью команды:
    ps aux | grep dpkg

    Если dpkg используется другой активной задачей, дождитесь ее завершения.

2. Логи и диагностика

Для дальнейшей диагностики важно исследовать скрипт util-linux.postinst, который отвечает за настройку пакета.

  • Обратитесь к файлу скрипта пост-инсталляции:
    Перейдите в директорию, содержащую информацию о пакете:
    cd /var/lib/dpkg/info

    Откройте файл util-linux.postinst в текстовом редакторе, например:

    sudo nano util-linux.postinst

Добавьте отладочные журналы, используя команды echo, чтобы определить, на каком этапе скрипт застревает. Например, вы можете вставить в начале и конце каждого блока кода команды, которые будут записывать в лог-файл:

LOGFILE=/root/log.file
echo "Starting util-linux post-installation script" > $LOGFILE

3. Найдите блокирующий этап

При добавлении логирования важно испробовать каждый шаг. Из анализа вашего лог-файла видно, что застревание происходило на команде deb-systemd-invoke. Она отвечает за управление системными сервисами.

Если вы видите, что ваша система зависает на этой команде (например systemctl --system daemon-reload), это может указывать на необходимость вмешательства.

4. Комментарий блокирующих строк

Если вы обнаружили, что проблема кроется в fstrim, вы можете временно закомментировать строки, связанные с этой командой:

# deb-systemd-invoke $_dh_action 'fstrim.timer' > /dev/null || true

5. Повторите процесс настройки

После редактирования скрипта вернитесь в терминал и попробуйте снова запустить настройку:

sudo dpkg --configure -a

Таким образом, это может привести к успешной конфигурации пакета util-linux.

6. Завершение процесса

После завершения настройки выполните восстановление зависших процессов, если такие имеются:

sudo apt --fix-broken install

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

Заключение

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

Решение подобных проблем требует терпения и аккуратности, но следуя этим рекомендациям, вы не только справитесь с данной ситуацией, но и значительно повысите свои навыки работы с dpkg в будущем.

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

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