Устранение неполадок
Цель этой страницы — предоставить пользователям, в частности новичкам, набор методов и инструментов для выявления и устранения неисправностей, связанных с самостоятельной установкой 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-подобный инструмент для проверки сетевого трафика по протоколу, порту и процессу. |
Определение проблемы
Для того, чтобы перевести проблему в её решение, вам сначала нужно хорошо понять саму проблему. Если проблема не ясна, то будет очень трудно, если вообще возможно, придти к решению. Точное, подробное изложение проблемы, скорее всего приведёт к получению решения, которое наилучшим образом ей соответствует.
Обратите внимание на несколько вещей:
- Данная неисправность относится к аппаратной части или программной?
- Что было сделано или изменено недавно, могущее привести к данной неисправности?
- Возможно ли собрать дополнительную информацию о неисправности?
Сохранение любого вида подробностей, журналов, опыта других людей и иного может быть ценным и дать общее представление.
Неполадки оборудования
Драйверы
Проблема с драйвером для оборудования — это одна из наиболее распространенных проблем, о которых сообщается на 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
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?
- Открепить вкладку, чтобы больше не открывалась при запуске или отключить плагин, и проследить, уберёт ли это проблему.
- Было сообщение о проблемах с графикой. Возможно они вызваны видеодрайвером?
- Попробуйте другую версию драйвера, либо альтернативные драйверы, если таковые имеются.
Поскольку исследуется каждая возможная причина, реальная причина проблемы может находиться всё ближе и ближе.
И, в конце концов, если причина до сих пор не найдена, ссылки в верхней части статьи Где получить помощь покажут множество мест, где люди настроены на помощь; сделайте их счастливыми своим тщательным описанием проблемы и сообщением, что уже было проделано для решения проблемы. Это даст им возможность помочь.
Смотрите также
- Knowledge Base:Recovering from a kernel boot failure
- Project:Portage/Fixing broken portage — provides guidance on how to manually update or fix a broken Portage installation - particularly in the event emerge -v1 sys-apps/portage cannot be run.
- Fix my Gentoo — rescuing an installation when a chroot is not possible
- Project:Portage/FAQ
- Support — provide support for technical issues encountered when installing or using Gentoo Linux