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

Resolución de problemas

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.

El objetivo de esta página es brindar a los usuarios, en particular a los nuevos, un conjunto de técnicas y herramientas para permitirles diagnosticar y resolver problemas en sus instalaciones de Gentoo con sus propios medios. Adicionalmente, para aquellos problemas que son más complicados, este artículo busca proveer a los usuarios de la habilidad de recolectar información que los ayudará, tanto a ellos como a quienes les den soporte, a resolver sus problemas con mayor facilidad.

Este artículo asume que Gentoo Handbook ha sido leído y que se posee una comprensión básica del uso de Gentoo.

Dónde conseguir ayuda

Gentoo tiene unas cuantas wikis, las cuales poseen una gran cantidad de información. Hay que tener en cuenta que algunos artículos pueden contener información vieja o desactualizada, sin embargo la lectura de los artículos de la wiki es siempre un paso crítico cuando usamos Gentoo.

En IRC, #gentoo es el canal recomendado para problemas generales. Es probablemente el camino más rápido para obtener una respuesta.

Teniendo en cuenta que los canales de IRC requieren de una presencia activa, algunos usuarios prefieren dejar mensajes en los foros o en las listas de correo. Cuando nos responden, una notificación (usualmente por email) nos es enviada.

Cuando todo lo demás falla, y parece haber algo roto con Gentoo, el Gentoo's bug tracker es una gran herramienta para ver si algo ha sido ya reportado, o para crear nuevos reportes de error si es necesario. Es una manera muy efectiva de llegar a los Desarrolladores de Gentoo, quienes pueden utilizar el reporte para mejorar la situación problemática y resolver el problema.

Programas

Esta es una lista de herramientas que son "altamente" recomendadas:

Gestión de paquetes

Package Description
app-portage/gentoolkit provee una colección de herramientas para interactuar con Gentoo; incluye los valiosos `equery`, `eclean`, `euse` y `eshowkw`. Vea las respectivas páginas de manual para más información.
app-portage/eix provee eix, una herramienta para consultar a portage por paquetes.
app-portage/pfl provee e-file, una herramienta para consultar qué paquete contiene al fichero especificado; también funciona para paquetes que no están instalados ya que realiza una búsqueda online.
app-portage/genlop provee genlop, una herramienta para parsear los logs de emerge; práctico para averiguar si determinado paquete está instalado, actualizado y ver cuánto tardó en compilar.
app-portage/elogv provee elogv, una interfaz basada en ncurses para navegar en los logs de emerge.

Hardware

Package Description
sys-apps/pciutils provee lspci, una herramienta para obtener información de los dispositivos PCI.
sys-apps/usbutils provee lsusb, una herramienta para obtener información de los dispositivos USB.

Monitoreo

Paquete Descripción
sys-process/htop provee htop, una herramienta para monitorear procesos. Como top, pero más avanzado.
sys-process/iotop provee iotop, una herramienta al estilo de top para monitorear la actividad de IO (entrada/salida) de los diferentes procesos.
net-analyzer/nettop provee nettop, una herramienta al estilo de top para examinar el tráfico de red por protocolo, puerto y proceso.

Varios

Paquete Descripción
app-text/wgetpaste provee wgetpaste, una herramienta para subir texto directamente a pastebin.
net-irc/weechat provee weechat, una cliente de IRC simple para consola.

Primeros pasos

En función de solucionar un problema, primero es necesario tener una buena comprensión del mismo. Si el problema no es claro, entonces será difícil, sino imposible, obtener una solución. Una descripción detallada y acertada del mismo es más apta para obtener la mejor solución posible.

Identificando el problema

Esta parte puede parecer muy obvia, pero sin ella, cualquier resolución de problemas será casi imposible.

Toma nota de algunas cosas:

  1. ¿Es un problema relacionado con el hardware o con el software?
  2. ¿Se ha cambiado o realizado algo recientemente, que pueda ser la causa de este problema?
  3. ¿Se puede recolectar información adicional sobre el problema?

Guardar cualquier clase de detalle, información yexperiencia de otras personas puede ser valioso y otorgar buenos puntos de vista.

Problemas de hardware

Controladores

Problemas con los controladores de hardware es uno de los problemas más comunes que son reportados en IRC.

En primer lugar, hay que identificar qué pieza de hardware es la que está ocasionando problemas. lspci y lsusb son valiosas herramientas para este propósito. Para ejemplificar, vamos a utilizar la tarjeta Ethernet como el dispositivo con problemas.

Determinando el controlador correcto

Primero utilizamos lspci para buscar la información del dispositivo:

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

También es posible usar la opción -n para obtener una notación abreviada (la que puede resultar más fácil para buscar en Internet):

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

El nombre de modelo (0200) y el fabricante fabricante/modelo (11ab:436b) pueden ser utilizados para buscar el dispositivo en lugares como WikiDevi o Debian HCL, a fin de buscar el controlador correcta a utilizar en Linux.

Verificando que el controlador está cargado

Obtener el controlador es menos de la mitad de la batalla. Debemos estar seguros de que el controlador está cargado y operando correctamente.

Utilizando nuevamente a nuestro amigo lspci, ejecutar:

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

Notar que acá tenemos un indicador de que el controlador está en uso ("Kernel driver in use: sky2"). En caso de no ser así, es porque ningún controlador se ha hecho cargo de este hardware. Asumiendo que el controlador fue compilado como módulo y no dentro del kernel, intenta ejecutar modprobe <modulename> para cargar el módulo correcto. Si el driver fue compilado dentro del núcleo, considera compilarlo como módulo, ya que los módulos pueden cargarse con modprobe o descargarse con modprobe -r, lo que ahorra reiniciar el sistema mientras estamos depurando el problema.

Resolviendo problemas con el driver

Compilar el controlador como módulo y luego capturar la información generada cuando el módulo es cargado. Asegurarse primero de remover todos los módulos que depende del controlador (ver lsmod).

El siguiente comando compara la salida de dmesg después de remover el módulo (en este ejemplo, r8169) con la salida posterior a cargar el módulo nuevamente, mostrando los mensajes que se agregaron (las líneas que comienzan con +).

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

El problema más común es algún firmware faltante. Si se muestra un mensaje que informa al administrador acerca de algún firmware faltante, instala sys-kernel/linux-firmware o el paquete con el firmware específico desde Portage. Luego de la instalación del firmware, remueve el módulo y vuelva a cargarlo nuevamente para ver si esto soluciona el problema.

Problemas de software

Problemas de Portage

Conflictos en el gráfico de dependencias

Ocasionalmente, mensajes como este se obtienen al intentar realizar emerge de un paquete:

CÓDIGO Error en el gráfico de dependencias
!!! Multiple package instances within a single package slot have been pulled
!!! into the dependency graph, resulting in a slot conflict:

Generalmente, esto significa que los paquetes listados tienen múltiples versiones requeridas en el gráfico de dependencias. Afortunadamente la mayoría, sino todos los casos, permiten ser resueltos actualizando manualmente a la mayor versión requerida. Entonces, asumiendo que el siguiente mensaje fue recibido:

CÓDIGO Ejemplo obsoleto de error en el gráfico de dependencias
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)

La versión deseada más reciente es 20120520, entonces:

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

A menudo, es ventajoso realizar one-shot (--oneshot o -1) de todos los conflictos a la vez, ya que a veces dependen unos de otros (ver también World set).

Acá hay otro bloque de ejemplo:

CÓDIGO Ejemplo de un conflicto de bloque
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

No debería haber ningún problema cambiando las versiones de poppler. Notar que luater y cups-filter no requieren ninguna versión específica de poppler, pero necesitan ser recompilados con cualquier versión que se utilice:

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:

Cuando buscamos ayuda, generalmente nos será requerida información adicional, como la salida de algún comando. Muchas de estas producen docenas o cientos de líneas de texto - demasiado como para pegarlo en canales de IRC, como el canal de soporte de Gentoo en Freenode. Ahí es cuando wgetpaste se vuelve útil: permite a los usuarios publicar links cortos que contienen la salida larga del comando.

CÓDIGO 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.

Asegurarse de que app-text/wgetpaste está instalado:

root #emerge --ask wgetpaste

Por ejemplo, para mostrar el contenido de app-text/wgetpaste, usar wgetpaste es tan simple como:

user $wgetpaste /etc/conf.d/net

O digamos que alguien necesita la salida detallada de lspci:

root #lspci -nnk | wgetpaste

A veces es necesario redirigir stderr a stdout para que también los mensajes de error sean copiados. Esto puede realizarse así:

root #emerge -pv 2>&1 | wgetpaste

Esto devuelve un enlace a un sitio como pastebin que puede ser fácilmente compartido con alguien para obtener ayuda.

Cosas a considerar para compartir:

  • En caso de problemas de hardware o del kernel:
user $wgetpaste /usr/src/linux/.config
  • En caso de problemas con portage:
root #emerge --verbose --info | wgetpaste
  • En caso de fallos en la instalación de paquetes:
root #wgetpaste /var/tmp/portage/<category>/<package>-<version>/temp/build.log
  • En caso de problemas con Xorg:
user $wgetpaste /var/log/Xorg.0.log
  • En los casos en que es necesario brindar todos los paquetes instalados en el sistema:
root #eix-update && eix-installed all

Juntando cosas

Debajo tenemos una función shell que puede ser utilizada para ejecutar varios comandos y procesar su salida con un solo wgetpaste, de forma que solo sea necesario proveer una URL a quien nos está ayudando:

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

Por favor no utilice servicios de pastebin en la lista de correo gentoo-user

La mayoría de los servicios de pastebin expiran viejas urls de forma periódica (por no mencionar que los servicios de pastebin son apenas rentables y cierran todo el tiempo), mientras que los mensajes de las listas de correo son archivadas en diferentes lugares y son referenciados por años. Si la salida relevante es corta, o puede ser recortada, entonces copia y pégala en el cuerpo del email - salidas más largas pueden ir directamente adjuntadas en archivos de texto plano.

Formando una solución

Con una buena descripción del problema, un historial completo de acciones y toda clase de información (detalles del problema, información de software y hardware, logs, backtraces y más), tenemos disponible un buen conjunto de información para buscar una solución.

Generalemente, hay que repetir los siguientes pasos para llegar a la solución:

  • Obtener una idea de cuál puede ser el problema y pensar en las posibles causas.
  • Si no tenemos lugares obvios para investigar, buscar en las áreas realcionadas o preguntar a algún experto sobre eso.
  • A veces es necesario realizar suposiciones para continuar. Cuando realizamos suposiciones, hay que ponerlas a prueba: suposiciones falsas no deben hacer que usuarios y desarrolladores dejen de ver otras causas.
  • Obtener información adicional de depurado dentro del marco del problema, o realizar pruebas.

A veces esto nos guía a múltiples posibles causas. Es importante probarlas individualmente para verificar si efectivamente son las causas del problema: esto es conocido como "divide y vencerás".

Digamos que tenemos un problema como "mi navegador a veces muestra páginas en blanco al iniciar" y que conocemos un montón de detalles sobre eso, entonces tenemos varias causas posibles:

  • ¿Es porque el navegador fue cerrado de forma incorrecta cuando el sistema fue reiniciado?
Podemos verificar esto matando el proceso y reniciándolo varias veces, cada vez chequeando si las páginas vuelven a estar en blanco al iniciar. Si esta es una causa, ¿es la causa actual o hay otras?
  • ¿Es porque una versión específica del navegador está rota?
Probar versiones nuevas o viejas por algunas días (o reinicios) y ver si tienen el mismo comportamiento.

Y así sucesivamente...

Con la información adicional, podemos pensar en causas más específicas:

  • ¿Hay alguna pestaña determinada X que carga el complemento Y que esté rompiendo el sistema?
Desmarca la pestaña para que no se siga abriendo al inicio o deshabilita el complemento, y observar si esto evita el problema.
  • También se reportaron problemas gráficos, ¿puede quizás ser causado por problemas con los controladores de video?
Prueba una nueva versión de los contoladores, o controladores alternativas si están disponibles.

A medida que cada causa posible es investigada, la verdadera causa del problema estará cada vez más cerca.

Al final, si la causa sigue sin ser encontrada, los recursos listados en Dónde conseguir ayuda al comienzo de este artículo llevan a una multitud de lugares donde hay gente esperando para ayudar; házlos felices con una descripción cuidadosa del problema y mencionando lo que ya has intentadopara resolverlo, eso los ayudará a ayudarte.

Vea también