Поиск по сайту:

Linux: как использовать dpkg для исправления apt, когда он ломается


Вы когда-нибудь нарушали apt? Для опытных профессионалов Linux довольно часто (примерно раз в полгода) непреднамеренно ломать apt. Если вы знаете несколько команд в dpkg, вам будет легче решить проблему! Выясни как.

Что такое apt и dpkg?

Если вы используете дистрибутив на основе Debian, такой как Ubuntu или Mint, ваш компьютер использует apt для обработки пакетов. Apt означает Advanced Packaging Tool, который позволяет вам устанавливать, удалять, очищать и управлять пакетами Debian.

Помимо apt (используется в командной строке), на вашем компьютере, скорее всего, есть диспетчер пакетов более высокого уровня/всеобъемлющий для рабочего стола, который просто использует apt или, возможно, dpkg в фоновом режиме.

Диспетчер пакетов для Debian dpkg — это альтернатива управлению пакетами в установках на основе Debian. Это гораздо более низкий уровень, чем apt, что дает вам больше свободы, но также представляет более высокий риск поломки.

Вот почему (если вы не опытный инженер DevOps) я рекомендую вам всегда использовать apt, дополняя его с помощью dpkg , как только вы столкнетесь с проблемами. .

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

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

Какой бы ни была причина, apt теперь считается неисправным, и вы уже пробовали такие вещи, как sudo apt update --fix-missing и sudo apt install --fix -сломан безрезультатно. Если так, то…

Добро пожаловать в дпкг

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

Термин «искусство» вполне применим, поскольку вы получаете ощущение или чувство, когда выполняете различные шаги по устранению неполадок — особенно если вы делали это часто — независимо от того, сработает ли что-то во время перезагрузки.

Всегда есть риск того, что система упаковки настолько сильно повреждена, что после перезагрузки ваш экземпляр Linux может больше не запуститься, и что потребуется дальнейшее и, возможно, еще более сложное устранение неполадок.

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

Здесь мы подходим к dpkg. Программа dpkg позволяет нам гораздо более детально контролировать все установленные пакеты, и хотя существует больше риска того, что что-то пойдет не так, у нас также гораздо больше возможностей изменить систему именно так, как мы хотим. Давайте углубимся.

Если вас интересует Linux в целом, вы также можете прочитать нашу серию из трех частей, посвященную Bash Automation & Scripting.

Основное использование dpkg

Мы можем увидеть пакеты, находящиеся в настоящее время в системе, просто выполнив dpkg -l. Поскольку вывод, скорее всего, будет очень подробным (хотя обычно разбит на страницы), вы можете использовать grep, чтобы ограничить результаты.

dpkg -l | head -n5 && dpkg -l | grep 'gnome-calculator'
dpkg -l | grep 'gnome-calculator'

Первая команда на самом деле представляет собой комбинацию двух команд (разделенных &&, что буквально означает: выполнять вторую команду только в том случае, если первая выполнена успешно).

В первой из этих двух команд мы берем первые пять строк (используя вертикальную черту | и head -n5), а затем во второй команде ищем перечислите результат, который мы ищем. В данном случае мы ищем текст gnome-calculator.

Второстепенная строка/команда под ней показывает версию, которую мы обычно используем. Если кто-то знаком с синтаксисом вывода dpkg, первые пять строк часто становятся ненужными. Обратите внимание, что первый столбец относится (визуально) к Desired=, второй столбец относится к Status=, а третий столбец относится к Err?=. Если вы будете визуально следить за линиями, вы увидите, как они быстро соединяются.

Поскольку наш gnome-calculator успешно установлен без текущих ошибок, в разделе Err?= нет кода третьего столбца. Мы также отмечаем здесь, что uppercase=bad написано в короткой информации, относящейся к третьему столбцу. Как указывалось ранее, в нашем случае он пустой.

Первый столбец показывает желаемое состояние, а второй столбец показывает текущее состояние. Оба отображаются как i (Install[ed] и Inst[alled] соответственно, а это (ii) наиболее распространенная последовательность, которую вы (хочете) увидеть. В основном это означает, что все в порядке, что пакет установлен и проблем нет.

Также обратите внимание, что в описаниях столбцов между скобками заглавная буква указывает на связь между любой возможной увиденной буквой и соответствующим термином. Например, рассмотрите, как f ссылается на halF-conf, отметив в нем заглавную букву F.

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

dpkg -l | grep 'mintwelcome'

Здесь мы видим интересный результат rc, где ii раньше использовался для gnome-calculator. Если вы выполните поиск r в описании первого столбца Desired=, которое мы видели выше, вы увидите, что он означает Remove[d] , а c во втором столбце означает Conf-files.

Ага! Это (mintwelcome, приветственный пакет в Mint) — это пакет, который мы удалили в какой-то момент, но файлы конфигурации для него остались. Давайте очистим это!

dpkg --purge 'mintwelcome'
sudo dpkg --purge 'mintwelcome'
dpkg -l | grep 'mintwelcome'

Обратите внимание, что вы также можете использовать сокращение -P вместо --purge.

В первой команде мы можем попытаться очистить mintwelcome без использования sudo. Однако это не сработает. Для удаления (установки или очистки) пакетов вам потребуются привилегии суперпользователя/корневого уровня. Мы можем запустить снова, используя sudo, и наш пакет будет очищен.

Обратите внимание, что термин purge используется как apt, так и dpkg, чтобы указать, что мы хотим полностью очистить пакет, а не просто удалить его. это, что оставит любые файлы конфигурации.

Убедиться

Я надеюсь, что вы начнете ценить мощь, контроль и детализацию, которые dpkg может предоставить вам при управлении пакетами в вашем дистрибутиве на основе Debian, таком как Ubuntu или, в данном случае, Mint. Например, было бы легко просканировать остатки файла конфигурации ранее удаленных пакетов, просто выполнив:

dpkg -l | grep '^rc'

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

dpkg -l | grep 'javascript'

Обратите внимание, как мы удалили вторую часть javascript-common для поиска javascript.

Безопасно удалять или нет? Вы можете видеть, как великая сила приходит с большой ответственностью, как всегда в жизни. Решение удалять или нет остается за вами. Как правило, при работе с dpkg всегда следует помнить о трех вещах:

Во-первых, вам нужно проверить, перепроверить и еще раз проверить, чтобы быть уверенным. Например, в первом выводе выше мы могли бы пойти дальше и небрежно удалить javascript-common, не проверяя, есть ли в системе какие-либо другие пакеты Javascript.

Был ли это лучший образ действий? Возможно, но уровень гарантии/уверенности, безусловно, снизился, как только мы сделали нашу первую проверку, поскольку в системе определенно есть другие пакеты Javascript.

Также обратите внимание, что здесь действительно ничего не сломано. Можно оставить файлы конфигурации для этого, казалось бы, удаленного пакета. Старая поговорка «Если это не сломано, не чини это», несомненно, применима в этом случае. Это следует помнить при использовании dpkg.

Во-вторых, важно помнить, что apt — это менеджер пакетов, который помнит обо всех связях (т. е. версиях и зависимостях) между пакетами при установке, удаление или очистка пакетов.

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

В-третьих, большинство пакетов Linux имеют много зависимостей. Таким образом, не рекомендуется просто использовать dpkg для стандартного управления пакетами, повторяя наш первоначальный совет использовать apt по умолчанию и переключаться на dpkg, когда он станет необходимый.

Чтобы удалить/удалить пакет, а не очистить его (т. е. оставить файлы конфигурации), вы можете использовать параметр --remove (или -r) для dpkg . Чтобы проверить пакет, используйте --verify (или -V). Параметр --audit (или -C) для пакета выполняет проверку работоспособности и непротиворечивости базы данных для пакета (или для всех пакетов, если пакет не указан).

Дополнительные параметры см. в разделе man dpkg, выполняемом с вашего терминала. Существуют также специальные, более сложные команды, которые можно использовать для решения различных проблем с системой упаковки. Для этого обычно лучше всего использовать вашу любимую поисковую систему для конкретной проблемы или ситуации, наблюдаемой в то время, когда она возникает. Часто кто-то уже сталкивался с этим и задокументировал детали. Если вы узнали что-то новое, найдите несколько минут, чтобы зарегистрировать свои выводы на каком-нибудь форуме или в соответствующей ветке обсуждения.

Подведение итогов

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

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