Подробный гайд по ремонту APT-системы после сломанных зависимостей Часть 1

Подробный гайд по восстановлению пакетного менеджера APT в Debian и Ubuntu. Решаем сломанные зависимости, чиним dpkg и спасаем систему после неудачных обновлений.

2026.08.17                  


Подробный гайд по ремонту APT-системы после сломанных зависимостей Часть 1Подробный гайд по ремонту APT-системы после сломанных зависимостей Часть 1 Гайд подходит для систем на базе APT и dpkg: Debian, Ubuntu, Linux Mint, Pop!_OS, Kali Linux и похожих дистрибутивов.


1. Главное правило: не удаляйте лишнего

Если APT предлагает удалить критически важные пакеты, остановитесь.

Особенно опасно, если в списке на удаление есть:

apt
dpkg
bash
coreutils
libc6
systemd
init
util-linux

Пример опасного вывода:

The following packages will be REMOVED:
  bash* coreutils* dpkg*


В такой ситуации не нужно сразу соглашаться. Сначала следует понять, какой пакет или репозиторий стал причиной конфликта.


2. Подготовка перед ремонтом

2.1. Получите права администратора

Можно работать через sudo:

sudo команда

Или открыть root-сессию:

sudo -i

Дальше команды будут указаны без sudo, но в обычной сессии его нужно добавлять.


2.2. Сделайте резервную копию

Если система загружается, сохраните важные данные:

cp -a /home/имя_пользователя /mnt/backup/

Если используется Btrfs, можно сделать snapshot.

Для Timeshift:

timeshift --create --comments "Перед ремонтом APT"

Для LVM:

lvs
lvcreate --size 10G --snapshot --name root_snapshot /dev/mapper/vg-root

Если система не загружается, ремонт можно выполнять с Live USB через chroot.


3. Быстрая диагностика

3.1. Проверка целостности зависимостей

apt-get check

Если вывод пустой, проблем с зависимостями нет.

Если есть ошибка, вывод может быть примерно таким:

E: Unmet dependencies. Try 'apt-get --fix-broken install' with no packages.

3.2. Проверка состояния dpkg

dpkg --audit

Команда покажет пакеты в проблемных состояниях:

half-installed
half-configured
unpacked
triggers-awaited

3.3. Проверка удержанных пакетов

apt-mark showhold

Если какие-то пакеты удержаны, это может блокировать обновление.

Снять удержание:

apt-mark unhold имя_пакета

3.4. Проверка источников пакетов

Посмотрите основной файл источников:

cat /etc/apt/sources.list

И дополнительные источники:

ls /etc/apt/sources.list.d/

Очень частая причина поломки — сторонние PPA, репозитории testing/sid или пакеты из другого дистрибутива.


4. Базовый ремонт APT

Выполняйте команды по порядку.

4.1. Обновление списков пакетов

apt-get update

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


4.2. Завершение прерванной установки

dpkg --configure -a

Эта команда завершает настройку пакетов, которые были распакованы, но не настроены до конца.

Полезно после:

  • внезапного выключения питания;
  • прерванного обновления;
  • ошибки во время установки пакета.

4.3. Исправление сломанных зависимостей

apt-get --fix-broken install

или:

apt --fix-broken install

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


4.4. Обычное обновление

apt-get update
apt-get upgrade

Если требуется обновление с изменением зависимостей:

apt-get dist-upgrade

или:

apt full-upgrade

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


5. Если стандартный ремонт не помогает

5.1. Использование aptitude

aptitude часто предлагает несколько вариантов разрешения конфликтов.

Установка:

apt-get install aptitude

Если установка возможна, попробуйте:

aptitude full-upgrade

Когда появится предложение, не спешите нажимать Y.

Нажмите:

n

чтобы посмотреть следующий вариант решения.

Ищите вариант, где:

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

5.2. Проверка версий пакета

apt-cache policy имя_пакета

Пример:

apt-cache policy libc6

Вывод покажет установленную версию и доступные кандидаты из репозиториев.


5.3. Проверка зависимостей

Зависимости пакета:

apt-cache depends имя_пакета

Обратные зависимости, то есть кто зависит от пакета:

apt-cache rdepends имя_пакета

5.4. Поиск пакетов в плохом состоянии

Обычно нормально установленный пакет выглядит так:



ii  bash  5.1-6ubuntu1

Где:

  • ii — установлен нормально;
  • rc — удалён, но остались конфигурационные файлы;
  • iU — распакован, но не настроен;
  • iF — полунастроен;
  • iH — удержан.

Посмотреть пакеты не в состоянии ii:

dpkg -l | grep -v '^ii'

Если такие пакеты есть, нужно разбираться с каждым из них.


6. Типовые ошибки и их решение

6.1. Unmet dependencies

Пример:

The following packages have unmet dependencies:
 package-name : Depends: other-package but it is not going to be installed
E: Unable to correct problems, you have held broken packages.

Решение:

apt-get check
apt --fix-broken install

Если не помогает:

aptitude install package-name

Затем перебирать варианты клавишей n.


6.2. Held broken packages

Пример:

E: Unable to correct problems, you have held broken packages.

Проверить удержанные пакеты:

apt-mark showhold

Снять удержание:

apt-mark unhold package-name

Затем:

apt --fix-broken install

6.3. dpkg was interrupted

Пример:

E: dpkg was interrupted, you must manually run 'dpkg --configure -a' to correct the problem.

Решение:

dpkg --configure -a

Если во время настройки снова появляется ошибка, нужно смотреть, какой именно пакет падает.


6.4. Package is in a very bad inconsistent state

Пример:

dpkg: error processing package example (--configure):
 package is in a very bad inconsistent state; you should
 remove it entirely before retrying the operation

Сначала:

dpkg --configure -a

Если не помогает:

apt-get install --reinstall package-name

Если пакет всё равно не восстанавливается, можно аккуратно удалить его:

dpkg --remove --force-remove-reinstreq package-name

Затем:

apt --fix-broken install

6.5. Cannot unpack package archive

Пример:

dpkg-deb: error: archive is corrupt

или:

E: Cannot unpack package archive

Возможно, повреждён кэш загруженных пакетов.

Очистить кэш:

apt-get clean
apt-get autoclean
apt-get update

Затем:

apt --fix-broken install

6.6. Ошибка блокировки dpkg или APT

Пример:

E: Could not get lock /var/lib/dpkg/lock-frontend

Проверить процессы:

ps aux | grep -E 'apt|dpkg'

Если процесс действительно завис, его можно завершить:

kill PID

Если вы уверены, что APT и dpkg сейчас не работают, можно удалить lock-файлы:

rm -f /var/lib/dpkg/lock
rm -f /var/lib/dpkg/lock-frontend
rm -f /var/cache/apt/archives/lock
dpkg --configure -a

Не удаляйте lock-файлы, если установка действительно выполняется.


6.7. dpkg returned an error code

Пример:

Errors were encountered while processing:
 /var/cache/apt/archives/package.deb
E: Sub-process /usr/bin/dpkg returned an error code (1)

Запустите:

dpkg --configure -a

Если ошибка указывает на конкретный пакет, попробуйте:

apt-get install --reinstall package-name

Если пакет не нужен:

dpkg --remove package-name
apt --fix-broken install

6.8. Ошибка конфигурационного файла

Пример:

dpkg: error processing package nginx-common (--configure):
 installed nginx-common package post-installation script subprocess returned error exit status 1

Посмотреть состояние пакета:

dpkg -s nginx-common

Посмотреть файлы пакета:

dpkg -L nginx-common

Попробовать переустановку:

apt-get install --reinstall nginx-common

Если мешает пользовательский конфиг, временно переместите его:

mv /etc/nginx/nginx.conf /etc/nginx/nginx.conf.broken

Затем:

dpkg --configure -a

7. Ремонт конкретного сломанного пакета

Если известно, что проблема в пакете package-name, используйте следующие действия.



7.1. Переустановка пакета

apt-get install --reinstall package-name

7.2. Установка загруженного .deb

Скачать пакет:

apt-get download package-name

Установить:

dpkg -i package-name*.deb

Затем:

apt --fix-broken install

7.3. Удаление сломанного пакета

Если пакет можно удалить и потом установить заново:

dpkg --remove package-name

Если обычное удаление не работает:

dpkg --remove --force-remove-reinstreq package-name

После этого:

apt --fix-broken install

7.4. Удаление остаточных конфигураций

Если пакет удалён, но конфигурации остались:

dpkg -l | grep '^rc'

Удалить конфигурации конкретного пакета:

apt-get purge package-name

Аккуратно удалить все остатки:

dpkg -l | awk '/^rc/ {print $2}' | xargs apt-get purge -y

8. Если причина в PPA или стороннем репозитории

Частые причины:

  • подключён PPA;
  • установлены пакеты из testing или sid;
  • смешаны пакеты разных версий Ubuntu;
  • подключён репозиторий от другого дистрибутива.

8.1. Посмотреть источники

cat /etc/apt/sources.list
ls -l /etc/apt/sources.list.d/

8.2. Сделать резервную копию источников

mkdir /root/sources-backup
cp -a /etc/apt/sources.list /root/sources-backup/
cp -a /etc/apt/sources.list.d /root/sources-backup/

8.3. Временно отключить сторонние репозитории

Создать каталог для отключённых источников:

mkdir /etc/apt/sources.list.d.disabled

Переместить туда файлы:

mv /etc/apt/sources.list.d/* /etc/apt/sources.list.d.disabled/

Затем отредактировать:

nano /etc/apt/sources.list

Закомментировать подозрительные строки, оставив только официальные репозитории.

Обновить списки:

apt-get update

8.4. Понизить версию пакета

Посмотреть доступные версии:

apt-cache policy package-name

Установить нужную версию:

apt-get install package-name=version

Пример:

apt-get install libc6=2.35-0ubuntu3.4

Если нужны конкретные версии зависимостей, указывайте их вместе:

apt-get install package=version dependency1=version dependency2=version

8.5. Ограничить приоритет PPA через pinning

Создать файл:

nano /etc/apt/preferences.d/block-ppa

Пример понижения приоритета PPA:

Package: *
Pin: release o=LP-PPA-some-ppa
Pin-Priority: 100

Или запретить установку конкретного пакета из PPA:

Package: package-name
Pin: release o=LP-PPA-some-ppa
Pin-Priority: -1

После этого:

apt-get update

9. Если система не загружается

Если система не стартует из-за сломанных пакетов, используйте Live USB и chroot.


9.1. Загрузиться с Live USB

Выберите режим:

Try Ubuntu

или аналогичный пункт в вашем дистрибутиве.


9.2. Найти корневой раздел

lsblk -f

Пример:

NAME   FSTYPE LABEL MOUNTPOINT
sda
sda1   ext4
sda2   swap

9.3. Смонтировать корневой раздел

mount /dev/sdX1 /mnt

Если есть отдельный EFI-раздел:

mkdir -p /mnt/boot/efi
mount /dev/sdX2 /mnt/boot/efi

Если есть отдельный /boot:

mount /dev/sdX2 /mnt/boot

Если используется LVM:

vgchange -ay
lvs
mount /dev/mapper/vg-root /mnt

9.4. Подготовить chroot

Смонтировать служебные файловые системы:

for i in /dev /dev/pts /proc /sys /run; do
    mount --bind "$i" "/mnt$i"
done

Для UEFI можно дополнительно выполнить:

mount --bind /sys/firmware/efi/efivars /mnt/sys/firmware/efi/efivars 2>/dev/null || true

Войти в систему:

chroot /mnt

9.5. Выполнить ремонт внутри chroot

export PATH=/usr/sbin:/usr/bin:/sbin:/bin
apt-get update
dpkg --configure -a
apt --fix-broken install
apt-get upgrade

Если нужно переустановить пакет:

apt-get install --reinstall package-name

Если внутри chroot нет DNS:



echo nameserver 1.1.1.1 > /etc/resolv.conf

или:

echo nameserver 8.8.8.8 > /etc/resolv.conf

9.6. Выйти и отмонтировать

Выйти из chroot:

exit

Отмонтировать всё:

umount -R /mnt

Если что-то осталось смонтировано:

umount -l /mnt

10. Если сломан dpkg

Если dpkg не работает, это серьёзная проблема, но часто её можно восстановить.


10.1. Проверить наличие dpkg

which dpkg
ls -l /usr/bin/dpkg

10.2. Переустановить dpkg из кэша

Посмотреть, есть ли пакет в кэше:

ls /var/cache/apt/archives | grep dpkg

Установить вручную:

dpkg -i /var/cache/apt/archives/dpkg_*.deb

10.3. Скачать dpkg на другой машине

На рабочей системе той же версии:

apt-get download dpkg

Перенести .deb на сломанную машину и установить:

dpkg -i dpkg_*.deb

10.4. Если повреждён libc6

libc6 — критическая системная библиотека.

Признаки проблем:

error while loading shared libraries
libc.so.6: version not found
Segmentation fault

Если система ещё работает:

apt-get download libc6
dpkg -i libc6_*.deb

Если система не работает, используйте Live USB и chroot:

apt-get install --reinstall libc6

или:

dpkg -i /path/to/libc6*.deb

Никогда не удаляйте libc6 вручную.


11. Если сломаны зависимости Python

Системный Python в Debian и Ubuntu тесно связан с APT. Нельзя без необходимости обновлять системные Python-модули через pip в системные каталоги.


11.1. Типичные ошибки

ModuleNotFoundError: No module named 'apt_pkg'

или:

/usr/bin/python3: No module named 'distutils'

или синтаксические ошибки в системных скриптах APT.


11.2. Переустановить системные Python-пакеты

apt-get install --reinstall python3 python3-minimal python3-apt python3-distutils

11.3. Проверить, не установлен ли другой Python вручную

ls -l /usr/local/bin/python*

Если там есть пользовательский Python, временно переименуйте его:

mv /usr/local/bin/python3 /usr/local/bin/python3.custom

Проверить:

which python3
python3 --version

Системный Python обычно находится здесь:

/usr/bin/python3

12. Если сломаны зависимости ядра или драйверов

12.1. Проблема с dkms

Пример ошибки:

dkms: autoinstall for kernel failed

Посмотреть статус модулей:

dkms status

Пересобрать модули:

dkms autoinstall

Если проблема с конкретным модулем:

dkms remove module/version --all
dkms install module/version

12.2. Переустановить заголовки ядра

Для текущего ядра:

apt-get install --reinstall linux-headers-$(uname -r)

Для Ubuntu часто подходит:

apt-get install --reinstall linux-headers-generic

12.3. Удалить проблемное ядро

Посмотреть установленные ядра:

dpkg -l | grep linux-image

Узнать текущее ядро:

uname -r

Удалить старое проблемное ядро, но не текущее рабочее:

apt-get purge linux-image-5.15.0-XX-generic

Затем:

apt --fix-broken install
update-grub

13. Если обновление релиза завершилось с ошибкой

Например, система обновлялась с Ubuntu 22.04 до 24.04, но процесс прервался.


13.1. Проверить версию системы

cat /etc/os-release

13.2. Завершить обновление

dpkg --configure -a
apt --fix-broken install
apt-get update
apt-get dist-upgrade

или:

apt full-upgrade

Если использовался do-release-upgrade, после базового восстановления можно попробовать:

do-release-upgrade -d

Но лучше сначала убедиться, что пакетная база восстановлена.


13.3. Проверить пакеты не в нормальном состоянии

dpkg -l | grep -v '^ii'

14. Безопасная симуляция действий APT

Перед потенциально опасными командами используйте режим симуляции.

apt-get -s --fix-broken install


или:

apt-get -s install package-name

или:

apt-get -s full-upgrade

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


15. Полезные команды диагностики

15.1. Информация о пакете

dpkg -s package-name

Пример:

dpkg -s bash

15.2. К какому пакету относится файл

dpkg -S /usr/bin/apt

15.3. Файлы, установленные пакетом

dpkg -L package-name

15.4. Зависимости пакета

apt-cache depends package-name

15.5. Кто зависит от пакета

apt-cache rdepends package-name

15.6. Доступные версии пакета

apt-cache policy package-name

15.7. История операций APT

less /var/log/apt/history.log

Архивные логи:

zless /var/log/apt/history.log.1.gz

15.8. Лог dpkg

less /var/log/dpkg.log

15.9. Поиск установки, удаления и обновления

grep -E "remove|purge|install|upgrade" /var/log/apt/history.log | less

16. Восстановление случайно удалённого важного пакета

16.1. Посмотреть, что было удалено

grep -B 5 -A 20 "Remove" /var/log/apt/history.log

16.2. Переустановить метапакет рабочего окружения

Ubuntu GNOME:

apt-get install --reinstall ubuntu-desktop

Kubuntu:

apt-get install --reinstall kubuntu-desktop

Linux Mint Cinnamon:

apt-get install --reinstall mint-meta-cinnamon

Debian GNOME:

apt-get install --reinstall task-gnome-desktop

Debian KDE:

apt-get install --reinstall task-kde-desktop

16.3. Переустановить минимальный набор системы

Ubuntu:

apt-get install --reinstall ubuntu-minimal

Debian:

apt-get install --reinstall dpkg apt base-files base-passwd bash coreutils util-linux

Linux Mint:

apt-get install --reinstall mint-meta-core

17. Если APT предлагает удалить половину системы

Пример:

The following packages will be REMOVED:
  gnome-shell* mutter* ubuntu-desktop* xorg*

17.1. Не соглашайтесь сразу

Не нажимайте Y, пока не поймёте причину.


17.2. Используйте симуляцию

apt-get -s --fix-broken install

17.3. Используйте aptitude

aptitude full-upgrade

Перебирайте решения клавишей:

n

17.4. Попробуйте установить конфликтующий пакет вручную

apt-get install package=version

Версию смотрите через:

apt-cache policy package

17.5. Временно удалите только виновника

Если проблемный пакет не является критическим:

apt-get remove problem-package
apt --fix-broken install

18. Опасные команды

18.1. dpkg --force

Пример:

dpkg --force-all -i package.deb

Используйте только в крайнем случае.

Более точечные варианты:

dpkg --force-remove-reinstreq --remove package
dpkg --force-depends --remove package

После любых принудительных действий выполните:

dpkg --configure -a
apt --fix-broken install

18.2. Удаление содержимого /var/lib/dpkg/info

Не делайте этого без понимания последствий.

Там находятся:

  • списки файлов пакетов;
  • скрипты установки и удаления;
  • служебная информация dpkg.

18.3. Удаление критических пакетов

Опасно удалять:

dpkg
apt
libc6
systemd
bash
coreutils
init

18.4. Удаление /var/lib/dpkg

Команда вида:

rm -rf /var/lib/dpkg

крайне опасна. Это база состояния пакетной системы.


19. Ремонт баз данных dpkg и APT

19.1. Проверить файл status

ls -l /var/lib/dpkg/status

Сделать резервную копию:

cp -a /var/lib/dpkg/status /root/status.backup

19.2. Восстановить status из резервной копии

Проверить наличие резервных копий:

ls /var/backups/dpkg.status*

Восстановить:

cp /var/backups/dpkg.status.0 /var/lib/dpkg/status

Затем:

dpkg --configure -a
apt --fix-broken install



19.3. Проверить каталог updates

ls /var/lib/dpkg/updates

Если система падала во время операции dpkg, там могут остаться незавершённые записи.

Сделать резервную копию:

mkdir /root/dpkg-updates-backup
cp -a /var/lib/dpkg/updates/* /root/dpkg-updates-backup/

Очистить:

rm -f /var/lib/dpkg/updates/*

Затем:

dpkg --configure -a

Делайте это только если действительно понимаете, что база dpkg повреждена.


19.4. Если повреждён /var/lib/dpkg/info

В этом каталоге хранятся файлы пакетов и скрипты сопровождения.

Если данные повреждены, может помочь переустановка критических пакетов:

apt-get install --reinstall dpkg apt base-files bash coreutils

19.5. Переустановка всех пакетов

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

Список установленных пакетов:

dpkg --get-selections | grep -v deinstall | awk '{print $1}' > /root/reinstall.txt

Переустановка по списку:

xargs -a /root/reinstall.txt apt-get install --reinstall -y

Этот процесс может занять много времени и потребовать много сетевого трафика.


Продолжение в Части 2


Мы делимся этой технической информацией, чтобы помочь вам в решении задач — используйте её с пониманием. Статья носит рекомендательный характер, поэтому, пожалуйста, применяйте описанные методы осмотрительно.


Статью подготовил: Аверко Денис Сергеевич @Nymexis г. Омск (специалист по ЗИ)

Комментарии

Загрузка...
Если комментарии не загружаются, можете попробовать отключить блокировщик рекламы для этого сайта