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

Материал из ALT Linux Wiki
< Apt
Нет описания правки
Нет описания правки
 
(не показано 30 промежуточных версий 12 участников)
Строка 1: Строка 1:
=== "Битые" пакеты ===
{| style="border:1px solid #AAA; background:#F9F9F9; width:200px; margin: 0 0 1em 1em; padding:.2em; text-align:center; float: right;" class=noprint
|-
|[[Image:Gnome-dialog-warning.svg]]
|-
| '''Внимание:'''<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 не может понять, что с ними делать. Такое может произойти, если система давно не обновлялась, или долго живёт и обновлялась много раз, в том числе с переходом с ветки на ветку.
 
Если такое сообщение Вы увидели при установке нового пакета, попробуйте сначала обновиться:


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


вероятней всего, rpm-архив (в данном случае "<tt>some_package</tt>") испорчен (получен неполностью).
Если это не помогло, или проблема возникла именно при обновлении, стоит попробовать выполнить то же действие включив больше отладочного вывода. Например, для установки пакета:


'''Решение:'''
# apt-get install -o Debug::pkgProblemResolver=yes -o Debug::pkgRemoveDepends=yes -o Debug::pkgMarkInstall=yes gitlab


Удалить файл <tt>some_package.some_digits.rpm</tt> из <tt>/var/cache/apt/archives</tt> и отдать команду:
Или для обновления:


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


=== Превышение числа пакетов ===
Вывод такой команды будет довльно объёмным, но по нему можно понять, что же пошло не так, и как решать сложившуюся проблему. Возможно, имеет смысл привлечь к его чтению знающих людей в подходящей рассылке или в [[BugTracking|bugzilla]]; покажите им также вывод команды <code>apt-repo list</code>.


Если команда <tt>apt-get update</tt> завершается чем-то вроде:
== Превышение числа пакетов ==
{{main|Changes/apt}}
Если команда {{cmd|apt-get update}} завершается чем-то вроде:


  Reading Package Lists... Error!
  Reading Package Lists... Error!
Строка 30: Строка 46:
  E: The package lists or status file could not be parsed or opened.
  E: The package lists or status file could not be parsed or opened.


скорее всего, apt'y приходится перелопачивать больше пакетов, чем дозволено лимитом.
скорее всего, apt’y приходится перелопачивать больше пакетов, чем дозволено лимитом ([https://bugzilla.altlinux.org/show_bug.cgi?id=16900 #16900]).
 
'''Решение 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}} добавить строку (если ещё нет):
 
APT::Cache-Limit <LimitInBytes>;
 
Где ''<LimitInBytes>'' - число большее, чем размер /var/lib/rpm/Packages в байтах.
Возможно, придётся подбирать <tt>Cache-Limit</tt> несколько раз, пока ошибка не исчезнет.
 
В {{pkg|apt}} 0.5.15lorg2-alt50 лимиты выставлены следующим образом (разница обусловлена предположением подключения [[biarch]]-репозитория):
* 83886080 (80M на 32-битных архитектурах);
* 100663296 (96M на 64-битных архитектурах).
 
'''Решение N2 (если в обновлённом apt это уже увеличили):'''
 
Обновить {{pkg|apt}} и {{pkg|libapt}} из соответствующего репозитория:
apt-get update -o APT::Cache-Limit=100663296
apt-get install apt
 
'''Объезд:'''
 
Отключить лишние репозитории в {{path|/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-архив (в данном случае «<tt>some_package</tt>») испорчен (получен не полностью).


'''Решение:'''
'''Решение:'''


Отключить лишние репозитории в <tt>/etc/apt/sources.list.d/*.list</tt> и вновь отдать команду:
Отдать команды:
 
apt-get clean
apt-get install some_package
 
==Ошибка обновления через rsync==
 
Если при попытке обновления сведений о пакетах выходит ошибка с повторяющимися строками вроде приведённых ниже для {{cmd|apt-get update}}:
E: Программа обработки метода /usr/lib/apt/methods/rsync не найдена.
E: Tried to dequeue a fetching object
и для {{cmd|synaptic}}:
E: The method driver /usr/lib/apt/methods/rsync could not be found.
— то это означает, что в числе активных репозиториев есть подключенные через протокол 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 update
  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/>
{{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 способом, здесь описанным.