
Я видел много ответов о том, как исправить сломанный пакет в нескольких дистрибутивах, что, кажется, очень помогает и решает проблемы. Но мне интересно, как пакет вообще может сломаться.
Я занимался устранением неполадок конвейера, который использовал apt-get install
команду, и некоторые зависимости не удалось установить. После нескольких попыток мне удалось заставить конвейер работать. Но, просматривая решения, я обнаружил, что у apt-get есть очень полезный --fix-broken
флаг, который решил мою проблему. Но вопрос остается,в чем была проблема? Мне не ясно, как найти точную проблему, которую --fix-broken
я решил.
Просматривая страницу руководства, можно найти некоторую общую информацию о:
Fix; attempt to correct a system with broken dependencies in place. This option, when
used with install/remove, can omit any packages to permit APT to deduce a likely
solution. If packages are specified, these have to completely correct the problem. The
option is sometimes necessary when running APT for the first time; APT itself does not
allow broken package dependencies to exist on a system. It is possible that a system's
dependency structure can be so corrupt as to require manual intervention.
В случае конвейера, который в данный момент инстанцирует свою систему, что могло случиться с пакетом, из-за которого он сломался? Кто-нибудь может глубже разобраться в том, как работают эти флаги? И, в частности, как ломается пакет?
решение1
Типичная поломка, которая apt install --fix-broken
устраняется, — это отсутствие зависимостей. Обычный способчтопроисходит, используется dpkg
для непосредственной установки пакета: dpkg
будет знать, отсутствуют ли зависимости, но не сможет извлечь отсутствующие зависимости, поэтому пакет будет установлен частично (установлен, но не настроен). apt install --fix-broken
устраняет неисправные зависимости и устанавливает все необходимые пакеты — или удаляет полностью неисправные пакеты, если их зависимости не могут быть устранены.
Если выявляютсяпри использовании dpkg
напрямую, как правило, лучше использовать apt install
— вы можете указать ему на локальный пакет, и он разрешит свои зависимости во время установки.
решение2
Пакет — это просто часть программного обеспечения со списком зависимостей. Если в вашей системе есть некоторые нестандартные установки (например, собранные из исходников) или если вы привязали определенную версию пакета (используя "dpkg hold" или "dnf --exclude"), чтобы не сломать какую-то другую установку, то попытка установить пакет, требующий другого состояния всех этих зависимых пакетов, потерпит неудачу, что приведет к "сломанному" пакету.
Важно отметить, что с пакетом или состоянием вашей системы может быть все в порядке. Исходный пакет может быть в порядке с вашим скомпилированным вручную (каким угодно), но поскольку это не то, что естьожидалего считают сломанным.