Устранение неполадок

From Gentoo Wiki
Jump to:navigation Jump to:search
This page is a translated version of the page Troubleshooting and the translation is 67% complete.
Outdated translations are marked like this.

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

В данной статье предполагается, что Gentoo Handbook было прочитано и есть общее представление об использовании Gentoo.

Совет
If a solution cannot be found after troubleshooting, see the support article about asking for help.

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

Совет
wgetpaste is a handy tool to share snippets, files, command output etc. when discussing troubleshooting issues online.

Системы управления пакетами

Пакет Описание
gentoolkit A collection of tools for interacting with Gentoo, includes the valuable equery, eclean, euse, etc.
eix A tool for querying portage for packages.
Portage File List Provides e-file, a tool for querying what package contains a given file, it also works for packages that aren't installed since it uses an online lookup.
genlop A tool for parsing emerge logs, handy to figure out when certain packages were installed, updated and to see how long they took to compile.
elogv An ncurses based interface for browsing emerge logs.

Оборудование

Пакет Описание
pciutils A tool for gathering information about PCI devices.
usbutils A tool for gathering information about USB devices.

Наблюдение

Пакет Описание
htop Инструмент для наблюдения за процессами. Похож на top, но имеет больше возможностей.
sys-process/iotop top-подобный инструмент для наблюдения за вводом-выводом процессов.
net-analyzer/nettop top-подобный инструмент для проверки сетевого трафика по протоколу, порту и процессу.

Определение проблемы

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

Обратите внимание на несколько вещей:

  1. Данная неисправность относится к аппаратной части или программной?
  2. Что было сделано или изменено недавно, могущее привести к данной неисправности?
  3. Возможно ли собрать дополнительную информацию о неисправности?

Сохранение любого вида подробностей, журналов, опыта других людей и иного может быть ценным и дать общее представление.

Неполадки оборудования

Драйверы

Проблема с драйвером для оборудования — это одна из наиболее распространенных проблем, о которых сообщается на IRC.

В первую очередь, необходимо определить, с каким оборудованием случились неполадки, для этого подойдут такие утилиты как lspci и lsusb. В качестве примера, мы рассмотрим сетевую карту как проблемное устройство.

Определение подходящего драйвера

Для начала взглянем на lspci и найдём информацию об устройстве:

root #lspci
 03:00.0 Ethernet controller: Marvell Technology Group Ltd. 88E8071 PCI-E Gigabit Ethernet Controller (rev 16)
root #lspci
 03:00.0 Ethernet controller: Marvell Technology Group Ltd. 88E8071 PCI-E Gigabit Ethernet Controller (rev 16)

Возможно использование -n опции, чтобы дать сокращенную запись (что может упростить поиск в Интернете):

root #lspci -n
 03:00.0 0200: 11ab:436b (rev 16)

Название модели (0200) и производитель/модель (11ab:436b) могут быть использованы для поиска устройства в WikiDevi, Debian HCL и подобных местах, чтобы подобрать подходящий драйвер для применения в Linux.

Проверка, что драйвер загружен

Заполучить драйвер — менее чем половина дела. Ведь, большая часть беды при работе с драйверами — увериться, что они загрузились и работают корректно.

Доверимся нашему другу lspci снова, выполнив:

root #lspci -k
 03:00.0 Ethernet controller: Marvell Technology Group Ltd. 88E8071 PCI-E Gigabit Ethernet Controller (rev 16)
 	Subsystem: Acer Incorporated [ALI] Device 014e
 	Kernel driver in use: sky2

Обратите внимание на показатель, указывающий какой драйвер задействован. Его отсутствие означает, что ни один драйвер не взял на себя ответственность за данное оборудование. Предположив, что драйвер был не встроен, а собран как модуль, попробуйте modprobe <названиемодуля>, чтобы попытаться загрузить подходящий модуль. Если же драйвер встроен в ядро, подумайте о пересборке его в качестве модуля, потому что модуль может быть загружен командой modprobe и выгружен modprobe -r, что может спасти от бесчисленных перезагрузок во время отладки.

Устранение неисправностей драйвера

Соберите драйвер как модуль, а затем захватите производимый после его загрузки вывод. Удостоверьтесь, что сначала удалили все модули, зависящие от драйвера (смотрите lsmod).

Следующая команда сравнивает вывод dmesg после удаления модуля (к примеру, r8169) с выводом после его повторной загрузки, действенно показывая добавленные сообщения (строки начинающиеся с +).

root #diff -u <(modprobe -r r8169; dmesg) <(sleep 1; modprobe r8169; dmesg) | grep ^+

К наибольшему числу неприятностей приводит отсутствие прошивки. При появлении сообщения об её отсутствии, устанавливайте или sys-kernel/linux-firmware, или специальный пакет прошивок из Portage. Чтобы узнать разрешилась ли проблема после установки прошивки, произведите проверку, повторно выгрузив и загрузив модуль ядра.

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

Неисправности Portage

Конфликт слотов в графе зависимостей

Время от времени, при попытках установить пакет, встречаются сообщения похожие на:

КОД Ошибка графа зависимостей
!!! Multiple package instances within a single package slot have been pulled
!!! into the dependency graph, resulting in a slot conflict:
(Несколько экземпляров пакетов, в пределах одного слота, были втянуты в граф зависимостей, приводя к конфликту слотов:)

Это означает, как правило, что в графе зависимостей наличествует запрос на несколько версий (от набора пакетов), но, к счастью, в большинстве случаев, если не во всех, ручное обновление до самой высокой запрашиваемой версии позволяет устранить проблему. Таким образом, если предположить, что было получено следующее сообщение:

КОД Пример ошибки графа зависимостей
app-emulation/emul-linux-x86-xlibs:0 
(app-emulation/emul-linux-x86-xlibs-20120127::gentoo, installed) pulled in by 
~app-emulation/emul-linux-x86-xlibs-20120127 required by (app-emulation/emul-linux-x86-medialibs-20120127::gentoo, installed) 
(and 2 more with the same problem) 
 
(app-emulation/emul-linux-x86-xlibs-20120520::gentoo, ebuild scheduled for merge) pulled in by 
>=app-emulation/emul-linux-x86-xlibs-20120520 required by (net-im/skype-2.2.0.35-r99::gentoo, ebuild scheduled for merge) 
~app-emulation/emul-linux-x86-xlibs-20120520 required by (app-emulation/emul-linux-x86-medialibs-20120520::gentoo, ebuild scheduled for merge)

Самая последняя версия 20120520, поэтому:

root #emerge --ask --oneshot =app-emulation/emul-linux-x86-xlibs-20120520

Часто приносит пользу одиночная установка (--oneshot или -1) всех конфликтующих пакетов за один приём, так как, бывает, что они зависят друг от друга. Смотрите также World set.

Ниже другой пример блокировки:

КОД Пример блокирующего конфликта
app-text/poppler:0
 
 (app-text/poppler-0.24.5::gentoo, installed) pulled in by
   app-text/poppler:0/44=[xpdf-headers(+)] required by (dev-tex/luatex-0.76.0::gentoo, installed)
   app-text/poppler:0/44=[cxx,jpeg,lcms,tiff,xpdf-headers(+)] required by (net-print/cups-filters-1.0.43::gentoo, installed)
 
 (app-text/poppler-0.24.3::gentoo, ebuild scheduled for merge) pulled in by
   >=app-text/poppler-0.12.3-r3:0/43= required by (app-text/texlive-core-2013-r1::gentoo, installed)
   poppler:0/43

Не должно быть никаких проблем при изменении версии poppler. Заметьте, app-text/texlive-core не требует определенной версии poppler, но должен быть пересобран в независимости от используемой версии:

root #emerge --ask --oneshot =app-text/poppler-0.24.5 app-text/texlive-core

Ниже приведен еще один пример конфликта при обновлении:

root #emerge --ask --verbose --update --newuse --deep @world
КОД Example of an update conflict
sys-power/cpupower:0
 
These are the packages that would be merged, in order:
 
Calculating dependencies... done!
 
Total: 0 packages, Size of downloads: 0 KiB
 
WARNING: One or more updates/rebuilds have been skipped due to a dependency conflict:
 
sys-power/cpupower:0
 
  (sys-power/cpupower-4.9.0-r1:0/0::gentoo, ebuild scheduled for merge) conflicts with
    <sys-power/cpupower-4.7 required by (mate-base/mate-applets-1.12.1-r4:0/0::gentoo, installed)
    ^                   ^^^
 
Nothing to merge; quitting.

Portage warns about an update that can not be performed, however, there is no issue because this update is not required by a package. More precisely, the update must be skipped because mate-base/mate-applets-1.12.1-r4 requires a version of sys-power/cpupower package lower than 4.7.

System limitations prevent a proper build

When compiling with n jobs parallel the requirement of RAM grows approximately by a factor n. Unfortunately we can not predict the exact amount of RAM needed nor we can predict how much RAM will be consumed by other programs.

Debug a binary

Trouble shoot a compiled binary by Debugging with powerful tools.

Сбор дополнительной информации

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

Wgetpaste allows users to post short links to a website that contains long output.

Например, чтобы показать содержимое /etc/conf.d/net, воспользуйтесь wgetpaste просто как:

user $wgetpaste /etc/conf.d/net

Или, скажем, кому-то нужен детализированный вывод команды lspci:

root #wgetpaste -c 'lspci -nnk'

Иногда необходимо перенаправить stderr в stdout, чтобы сообщения об ошибках также выводились. Это возможно сделать так:

root #wgetpaste -c 'emerge -pv <package>'
  • в случае аппаратных проблем или проблем с ядром:
user $wgetpaste /usr/src/linux/.config
  • В случае проблем с portage:
root #emerge --verbose --info | wgetpaste
  • В случае ошибки во время установки пакета:
root #wgetpaste /var/tmp/portage/<category>/<package>-<version>/temp/build.log
  • В случае проблем с Xorg:
user $wgetpaste /var/log/Xorg.0.log
  • В случае, если необходимо предоставить все установленные пакеты в системе:
root #eix-update && eix-installed all

Упаковка в одну ссылку

Ниже дана shell-функция, которая может быть использована для выполнения нескольких команд, а их вывод обработается одной командой wgetpaste, таким образом можно обойтись всего лишь одной ссылкой для получения помощи от пользователей или разработчиков:

root #wgetpaste -i -c "lspci -nnk" -c "lsusb" -c "cat /usr/src/*$(uname -r)/.config" -c "cat /var/log/Xorg.0.log" -c "dmesg" -c "eix-update" -c "eix-installed all"

Не используйте pastebin-сервисы в списке рассылок gentoo-user

Большинство из Pastebin-сервисов периодически уничтожают старые тексты (не говоря уже о том, что Pastebin услуги вряд ли вообще приносят выгоду, а, следовательно, часто прекращают свою деятельность), тогда как сообщения из списков рассылок архивируются в нескольких местах и доступны в течение многих лет. Если соответствующий вывод краток, или может быть урезан, тогда вставьте его в тело письма — длинный же вывод можно направить в текстовый файл и добавить в виде простого вложения.

Рождение решения

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

В целом, повторяйте следующие шаги до получения решения:

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

Зачастую это приведёт к нескольким возможным причинам. Важно проверить их (чтобы удостовериться, что это истинная причина), а, следуя принципу "разделяй и властвуй", проверять их нужно по отдельности.

Предположим, возникла проблема вроде "мой браузер иногда отображает белые страницы при загрузке", но ведь о ней уже известно много подробностей, а значит возможно несколько причин:

  • Следствие ли это неправильного закрытия браузера, во время перезагрузки системы?
Проверьте это, убивая процесс и перезагрузившись несколько раз, каждый раз проверяя - белые ли страницы после загрузки. Действительная ли эта причина или есть и другие?
  • Является ли этот результат следствием поломки определенной версии браузера?
Попробуйте старые или новые версии за последние нескольких дней или перезагрузитесь, чтобы выяснить повторяются ли нарушения.

И так далее...

С дополнительной информацией, можно смело думать о более особенных причинах:

  • Ломает ли систему некая закреплённая вкладка X, которая загружает плагин Y?
Открепить вкладку, чтобы больше не открывалась при запуске или отключить плагин, и проследить, уберёт ли это проблему.
  • Было сообщение о проблемах с графикой. Возможно они вызваны видеодрайвером?
Попробуйте другую версию драйвера, либо альтернативные драйверы, если таковые имеются.

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

И, в конце концов, если причина до сих пор не найдена, ссылки в верхней части статьи Где получить помощь покажут множество мест, где люди настроены на помощь; сделайте их счастливыми своим тщательным описанием проблемы и сообщением, что уже было проделано для решения проблемы. Это даст им возможность помочь.

Смотрите также