This is Gentoo's testing wiki. It is a non-operational environment and its textual content is outdated.

Please visit our production wiki at https://wiki.gentoo.org

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

From Gentoo Wiki (test)
Jump to:navigation Jump to:search
This page is a translated version of the page Troubleshooting and the translation is 89% complete.

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

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

Где получить помощь

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

В IRC #gentoo рекомендуемый канал по общим вопросам. Это, возможно, самый быстрый способ получить ответ.

Так как IRC каналы требуют деятельного присутствия, некоторые пользователи могут предпочесть оставить сообщение на форуме или в списке рассылок, которые продолжают существовать после закрытия браузера. Когда появляется ответ, даётся уведомление (как правило, через электронную почту).

На худой конец, если кажется, будто что-то не так в самой Gentoo, то средство отслеживания ошибок Gentoo является хорошим ресурсом, где можно посмотреть, возможно что-то уже сообщалось, или создавать новые сообщения об ошибках в случае необходимости. Это очень действенный приём для связи с Gentoo разработчиками, которые могут использовать данное обращение для разрешения проблемной ситуации.

Программы

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

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

Пакет Описание
app-portage/gentoolkit предоставляет набор инструментов для взаимодействия с Gentoo; наиценнейшие из них: "equery", "eclean", "euse" и "eshowkw", смотрите страницы руководств для получения дополнительной информации.
app-portage/eix предоставляет eix — инструмент для выполнения запросов к пакетам Portage.
app-portage/pfl предоставляет e-file — инструмент для выполнения запросов на проверку наличия файла в пакете; также работает для неустановленных пакетов, так как он использует онлайн поиск.
app-portage/genlop предоставляет genlop — инструмент для разбора emerge-журналов; удобно, чтобы выяснить: когда были установлены пакеты, обновлены и сколь долго они компилировались.
app-portage/elogv предоставляет elogv — интерфейс, основанный на ncurses, для обзора emerge-журналов.

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

Пакет Описание
sys-apps/pciutils предоставляет lspci — инструмент для сбора информации о PCI устройствах.
sys-apps/usbutils предоставляет lsusb — инструмент для сбора информации о USB устройствах.

Наблюдение

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

Разное

Пакет Описание
app-text/wgetpaste предоставляет wgetpaste — инструмент для отправки текста прямо в pastebin.
net-irc/weechat предоставляет weechat — простой текстовый IRC клиент.

Первые шаги

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

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

Эта часть может показаться нелёгкой, но без неё устранение неисправностей невозможно.

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

  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)

Возможно использование -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. Заметьте, что luatex и cups-filter не требуют определенной версии poppler, но они должны быть пересобраны в независимости от используемой версии:

root #emerge --ask --oneshot =app-text/poppler-0.24.3 dev-tex/luatex net-print/cups-filters


Here is another example that could have resulted in a blockage:

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

Код 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.

Collecting additional information

When seeking help, more times than never additional information will be asked, such as the output of a command. Some of these produce dozens or hundreds of lines of text - too much to be suitable for pasting into IRC chat rooms, such as the Gentoo support channel on Freenode. That's where wgetpaste comes in handy - it allows users to post short links that contain long output.

Убедитесь, что app-text/wgetpaste установлен:

root #emerge --ask wgetpaste

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

user $wgetpaste /etc/conf.d/net

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

root #lspci -nnk | wgetpaste

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

root #emerge -pv 2>&1 | wgetpaste

Эта команда вернёт ссылку на страницу pastebin-сайта, которую можно легко отправить тому, кто способен помочь.

Полезные вещи при вставке:

  • в случае аппаратных проблем или проблем с ядром:
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 #
execv(){ for cmd in "$@"; do echo -e "\n=== $cmd ===\n"; $cmd; done; }
(execv "cat /etc/*-release" "uname -a" "lspci -nnk" "lsusb" "eselect profile list"\
 "emerge --info" "cat /usr/src/*$(uname -r)/.config" "cat /var/log/Xorg.0.log" "dmesg"\
 "eix-update" "eix-installed all")\
 | wgetpaste

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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