Apt/TroubleShooting: различия между версиями

Материал из ALT Linux Wiki
< Apt
(Добавлен раздел ссылок)
Нет описания правки
 
(не показано 14 промежуточных версий 6 участников)
Строка 5: Строка 5:
| '''Внимание:'''<br />'''{{cmd|apt-get -s}} не&nbsp;работает'''<br /><small>(ключик для проведения «мысленного эксперимента» вместо действия приводит к&nbsp;неадекватной оценке последствий)</small>.
| '''Внимание:'''<br />'''{{cmd|apt-get -s}} не&nbsp;работает'''<br /><small>(ключик для проведения «мысленного эксперимента» вместо действия приводит к&nbsp;неадекватной оценке последствий)</small>.
|}
|}
== Извините, `битые' пакеты ==
Иногда при установке пакета или при обновлении можно увидеть сообщения сообщения об ошибке, похожие на это:
Следующие пакеты имеют неудовлетворенные зависимости:
  gitlab: Depends: /usr/lib/ruby/bin/ruby
          Depends: gem-gitlab (= 4.19.0-alt1:sisyphus+342746.1300.8.1)
E: Извините, `битые' пакеты
И в Сизифе, и в стабильных ветках в репозитории не может быть пакетов с неудовлетворёнными зависимостями. Поэтому скорее всего такие сообщения означают, что в системе есть пакеты, которых нет в текущем репозитории, и apt не может понять, что с ними делать. Такое может произойти, если система давно не обновлялась, или долго живёт и обновлялась много раз, в том числе с переходом с ветки на ветку.
Если такое сообщение Вы увидели при установке нового пакета, попробуйте сначала обновиться:
# apt-get update
# apt-get dist-upgrade
Если это не помогло, или проблема возникла именно при обновлении, стоит попробовать выполнить то же действие включив больше отладочного вывода. Например, для установки пакета:
# apt-get install -o Debug::pkgProblemResolver=yes -o Debug::pkgRemoveDepends=yes -o Debug::pkgMarkInstall=yes gitlab
Или для обновления:
# apt-get dist-upgrade -o Debug::pkgProblemResolver=yes -o Debug::pkgRemoveDepends=yes -o Debug::pkgMarkInstall=yes
Вывод такой команды будет довльно объёмным, но по нему можно понять, что же пошло не так, и как решать сложившуюся проблему. Возможно, имеет смысл привлечь к его чтению знающих людей в подходящей рассылке или в [[BugTracking|bugzilla]]; покажите им также вывод команды <code>apt-repo list</code>.


== Превышение числа пакетов ==
== Превышение числа пакетов ==
Строка 22: Строка 48:
— скорее всего, apt’y приходится перелопачивать больше пакетов, чем дозволено лимитом ([https://bugzilla.altlinux.org/show_bug.cgi?id=16900 #16900]).
— скорее всего, apt’y приходится перелопачивать больше пакетов, чем дозволено лимитом ([https://bugzilla.altlinux.org/show_bug.cgi?id=16900 #16900]).


'''Решение N1<ref>На 04/04/2015 у apt в p7 недостаточный лимит для использования репозитария autoimports.</ref>:'''
'''Решение N1<ref>На 04/04/2015 у apt в p7 недостаточный лимит для использования репозитория autoimports, а на октябрь 2015 -- у apt в Sisyphus тоже {{altbug|31410}}. В p7 это не чувствуется сейчас благодаря попаданию в p7 порта {{pkg|apt}}-0.5.15lorg2-alt50 (его лимиты см. ниже), я для Sisyphus это объехали для удобства подключения [[Autoimports]] в {{pkg|apt-conf-autoimports-sisyphus}}-1.0-alt3 способом, здесь описанным.</ref>:'''


в {{path|/etc/apt/apt.conf}} добавить строку (если ещё нет):
в {{path|/etc/apt/apt.conf}} добавить строку (если ещё нет):


  APT::Cache-Limit LimitInBytes;
  APT::Cache-Limit <LimitInBytes>;


Где ''LimitInBytes'' - число большее, чем размер /var/lib/rpm/Packages в байтах.
Где ''<LimitInBytes>'' - число большее, чем размер /var/lib/rpm/Packages в байтах.
Возможно, придётся подбирать <tt>Cache-Limit</tt> несколько раз, пока ошибка не исчезнет.
Возможно, придётся подбирать <tt>Cache-Limit</tt> несколько раз, пока ошибка не исчезнет.


Строка 46: Строка 72:


  apt-get update
  apt-get update
Либо


== «Битые» пакеты ==
== «Битые» пакеты ==
Строка 74: Строка 98:
  E: The method driver /usr/lib/apt/methods/rsync could not be found.
  E: The method driver /usr/lib/apt/methods/rsync could not be found.
— то это означает, что в числе активных репозиториев есть подключенные через протокол rsync. Следует либо их отключить, либо доустановить пакет {{pkg|apt-rsync}}.
— то это означает, что в числе активных репозиториев есть подключенные через протокол rsync. Следует либо их отключить, либо доустановить пакет {{pkg|apt-rsync}}.
==Ошибка сегментирования==
Если при работе {{cmd|apt-get}} падает по Segmentation fault, удалите кэш apt:
mv /var/cache/apt/*pkgcache.bin /tmp
Если это поможет, и если примера в {{altbug|31089}} ещё нет, приложите эти файлы к багу.
Проверьте stack лимиты, должно быть не менее:
# ulimit -s
8192
Задать можно тут:
/etc/security/limits.conf
root hard stack 8192
root soft stack 8192
==Ругань о неудовлетворённых зависимостях при попытке сделать apt-get dist-upgrade==
В таком случае надо сначала попытаться обновить отдельно <tt>apt</tt> и <tt>rpm</tt>, а потом повторить попытку dist-upgrade:
  apt-get install apt rpm
  apt-get dist-upgrade
Такое поведение не типичное, и случилось после того, как в строгие зависимости стали добавлять помимо <tt>name = epoch:version-release</tt> ещё и значение <tt>disttag</tt> (в <tt>rpm 4.0.4-alt128</tt>), а <tt>rpm</tt> до версии <tt>4.13.0.1-alt6</tt> не всегда справлялся с различением таких версий.
==Удаление дубликатов пакетов (например, после прерванного dist-upgrade)==
В пакете <tt>apt-scripts</tt>, начиная с версии <tt>0.1.4-alt1</tt>, добавлена команда <tt>apt-get dedup</tt>, которая удаляет все непозволенные дубликаты из системы:
  apt-get install apt-scripts # если ещё не установлен
  apt-get dedup
==Репозиторий не под ту архитектуру==
Ошибка
E: Для пакета filesystem не найдено подходящего кандидата для установки
либо
E: Package filesystem has no installation candidate
говорит о том, что подключенный репозиторий в архитектурнозависимой части (которая не <tt>noarch</tt>) является несовместимым с целевой системой с точки зрения {{pkg|librpm}} (где есть механизм указания совместимости посредством <tt>%arch_compat</tt>).
== Ссылки ==
== Ссылки ==


<references/>
<references/>
{{Category navigation|title=APT|category=APT|sortkey={{SUBPAGENAME}}}}
{{Category navigation|title=APT|category=APT|sortkey={{SUBPAGENAME}}}}

Текущая версия от 11:04, 14 декабря 2024

Gnome-dialog-warning.svg
Внимание:
apt-get -s не работает
(ключик для проведения «мысленного эксперимента» вместо действия приводит к неадекватной оценке последствий).

Извините, `битые' пакеты

Иногда при установке пакета или при обновлении можно увидеть сообщения сообщения об ошибке, похожие на это:

Следующие пакеты имеют неудовлетворенные зависимости:
  gitlab: Depends: /usr/lib/ruby/bin/ruby
          Depends: gem-gitlab (= 4.19.0-alt1:sisyphus+342746.1300.8.1)
E: Извините, `битые' пакеты

И в Сизифе, и в стабильных ветках в репозитории не может быть пакетов с неудовлетворёнными зависимостями. Поэтому скорее всего такие сообщения означают, что в системе есть пакеты, которых нет в текущем репозитории, и apt не может понять, что с ними делать. Такое может произойти, если система давно не обновлялась, или долго живёт и обновлялась много раз, в том числе с переходом с ветки на ветку.

Если такое сообщение Вы увидели при установке нового пакета, попробуйте сначала обновиться:

# apt-get update
# apt-get dist-upgrade

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

# apt-get install -o Debug::pkgProblemResolver=yes -o Debug::pkgRemoveDepends=yes -o Debug::pkgMarkInstall=yes gitlab

Или для обновления:

# apt-get dist-upgrade -o Debug::pkgProblemResolver=yes -o Debug::pkgRemoveDepends=yes -o Debug::pkgMarkInstall=yes

Вывод такой команды будет довльно объёмным, но по нему можно понять, что же пошло не так, и как решать сложившуюся проблему. Возможно, имеет смысл привлечь к его чтению знающих людей в подходящей рассылке или в bugzilla; покажите им также вывод команды apt-repo list.

Превышение числа пакетов

Основная статья: Changes/apt

Если команда apt-get update завершается чем-то вроде:

Reading Package Lists... Error!
E: Dynamic MMap ran out of room
E: Error occured while processing ktechlab (UsePackage3)

или:

E: Wow, you exceeded the number of package names this APT is capable of.
E: Problem with MergeList /tmp/aptbox/var/lib/apt/lists/_ALT_Sisyphus_noarch_base_pkglist.classic
E: The package lists or status file could not be parsed or opened.

— скорее всего, apt’y приходится перелопачивать больше пакетов, чем дозволено лимитом (#16900).

Решение N1[1]:

в /etc/apt/apt.conf добавить строку (если ещё нет):

APT::Cache-Limit <LimitInBytes>;

Где <LimitInBytes> - число большее, чем размер /var/lib/rpm/Packages в байтах. Возможно, придётся подбирать Cache-Limit несколько раз, пока ошибка не исчезнет.

В apt 0.5.15lorg2-alt50 лимиты выставлены следующим образом (разница обусловлена предположением подключения biarch-репозитория):

  • 83886080 (80M на 32-битных архитектурах);
  • 100663296 (96M на 64-битных архитектурах).

Решение N2 (если в обновлённом apt это уже увеличили):

Обновить apt и libapt из соответствующего репозитория:

apt-get update -o APT::Cache-Limit=100663296
apt-get install apt

Объезд:

Отключить лишние репозитории в /etc/apt/sources.list.d/*.list и вновь отдать команду:

apt-get update

«Битые» пакеты

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

Committing changes...
Preparing...                 ###########################################  [100%]
1: some_package              error: unpacking of archive failed: cpio: Bad magic
E: Some errors occurred while running transaction

вероятней всего, rpm-архив (в данном случае «some_package») испорчен (получен не полностью).

Решение:

Отдать команды:

apt-get clean
apt-get install some_package

Ошибка обновления через rsync

Если при попытке обновления сведений о пакетах выходит ошибка с повторяющимися строками вроде приведённых ниже для apt-get update:

E: Программа обработки метода /usr/lib/apt/methods/rsync не найдена.
E: Tried to dequeue a fetching object

и для synaptic:

E: The method driver /usr/lib/apt/methods/rsync could not be found.

— то это означает, что в числе активных репозиториев есть подключенные через протокол rsync. Следует либо их отключить, либо доустановить пакет apt-rsync.

Ошибка сегментирования

Если при работе apt-get падает по Segmentation fault, удалите кэш apt:

mv /var/cache/apt/*pkgcache.bin /tmp

Если это поможет, и если примера в altbug #31089 ещё нет, приложите эти файлы к багу.

Проверьте stack лимиты, должно быть не менее:

# ulimit -s
8192

Задать можно тут:

/etc/security/limits.conf
root hard stack 8192
root soft stack 8192

Ругань о неудовлетворённых зависимостях при попытке сделать apt-get dist-upgrade

В таком случае надо сначала попытаться обновить отдельно apt и rpm, а потом повторить попытку dist-upgrade:

 apt-get install apt rpm
 apt-get dist-upgrade

Такое поведение не типичное, и случилось после того, как в строгие зависимости стали добавлять помимо name = epoch:version-release ещё и значение disttagrpm 4.0.4-alt128), а rpm до версии 4.13.0.1-alt6 не всегда справлялся с различением таких версий.

Удаление дубликатов пакетов (например, после прерванного dist-upgrade)

В пакете apt-scripts, начиная с версии 0.1.4-alt1, добавлена команда apt-get dedup, которая удаляет все непозволенные дубликаты из системы:

 apt-get install apt-scripts # если ещё не установлен
 apt-get dedup

Репозиторий не под ту архитектуру

Ошибка

E: Для пакета filesystem не найдено подходящего кандидата для установки

либо

E: Package filesystem has no installation candidate

говорит о том, что подключенный репозиторий в архитектурнозависимой части (которая не noarch) является несовместимым с целевой системой с точки зрения librpm (где есть механизм указания совместимости посредством %arch_compat).

Ссылки

  1. На 04/04/2015 у apt в p7 недостаточный лимит для использования репозитория autoimports, а на октябрь 2015 -- у apt в Sisyphus тоже altbug #31410. В p7 это не чувствуется сейчас благодаря попаданию в p7 порта apt-0.5.15lorg2-alt50 (его лимиты см. ниже), я для Sisyphus это объехали для удобства подключения Autoimports в apt-conf-autoimports-sisyphus-1.0-alt3 способом, здесь описанным.