La información recopilada o el informe se carga en un sistema de seguimiento de errores.
Si algún proceso en el sistema muere debido a una señal que se conoce comúnmente como 'bloqueo' (violación de segmentación, error de bus, excepción de coma flotante, etc.), o por ejemplo, una aplicación Python empaquetada genera una excepción no detectada, el backend de apport se invoca automáticamente
Produce un informe de bloqueo inicial en un archivo en / var / crash / (el nombre del archivo se compone del nombre del ejecutable bloqueado y la identificación del usuario). Si el proceso bloqueado pertenece al usuario que está conectado actualmente, o pertenece a un proceso del sistema y el usuario es un administrador, un informe informa al usuario sobre el bloqueo y le ofrece informar el problema.
Si el usuario deja activada la casilla de verificación "Enviar informe de error", Apport carga la información recopilada en el sistema de seguimiento de errores. Después de eso, abre la página de presentación de errores de los paquetes con un título de error predeterminado sensible y deja el resto del proceso de presentación de errores a la interfaz de usuario web.
Ubuntu recibe una cantidad increíblemente grande de informes de errores todos los días a través de nuestro sistema de seguimiento de errores. Cada uno de estos debe leerse, evaluarse y clasificarse para que pueda repararse. Aquí es donde podríamos usar su ayuda para ayudar con errores. Para obtener una representación visual del proceso de clasificación de errores, consulte estos agradables diagramas de flujo.
Cada informe de error es una conversación con el reportero. El primer contacto que cualquier reportero suele tener con la comunidad de Ubuntu es a través de un analizador de errores, que intenta armar un informe completo de errores. Es muy importante que demos una buena impresión, así que sea amable y trate de usar su mejor inglés.
Trabajar en errores simples y no procesados es una buena manera de comenzar y familiarizarse con el procedimiento de evaluación, ya que tendrá que lidiar con todos los aspectos del ciclo de vida de un error. La sección Errores no procesados explica dónde encontrarlos.
Tipos de errores
Apport informes
Los informes de Apport son errores reportados a través del programa de informe de errores automatizado Apport. Informar sobre errores utilizando Apport es la forma preferida de informar sobre un error, ya que proporciona a los desarrolladores mucha información sobre el sistema afectado. Cuando se utiliza Apport, se requiere menos información adicional, lo que acelera todo el proceso.
Puede reconocer estos errores por la lista agregada de información del sistema en su descripción. Algunos programas tienen ganchos para Apport, que agregan más información al informar un error. Esta información generalmente se puede encontrar en los archivos adjuntos.
Errores confirmados
Cuando un error se marca como 'Confirmado', aún no se ha solucionado por completo. Este error está muy cerca de ser marcado como 'Triaged', pero debe asegurarse de que esté listo para que los desarrolladores lo solucionen.
Peticiones de características
Si el informe de error es en realidad una solicitud de función, hay dos posibilidades. Si la mejora solicitada es pequeña y está bien definida y / o la sugerencia se refiere a un proyecto anterior, la importancia del error debe establecerse en 'Lista de deseos'. Cuando se completa el informe, el estado debe establecerse en 'Triaged'.
Solo los miembros del equipo de Ubuntu Bug Control pueden hacerlo. Si no eres miembro, tendrás que pedirle a alguien que lo haga por ti. Pegue el número de error en # ubuntu-bugs y diga que cree que el error debe establecerse en 'Lista de deseos'. Alguien lo notará y lo configurará para usted, aunque no necesariamente de inmediato.
¿Cómo funciona internamente?
Intercepción de choque
Apport usa / proc / sys / kernel / core_pattern para canalizar directamente el volcado del núcleo en apport:
$ cat /proc/sys/kernel/core_pattern
|/usr/share/apport/apport %p %s %c
$
Nota: incluso si ulimit se configura en archivos centrales deshabilitados (especificando un tamaño de archivo central de cero usando ulimit -c 0), apport aún capturará el bloqueo. Para interceptar bloqueos de Python, se instala una /etc/python*/sitecustomize.py
llamada a apport en excepciones no controladas.
Ejemplo
Apport incluso puede capturar archivos principales si muere PID 1 (Upstart):
- Si Upstart detecta una inconsistencia interna, eleva la señal SIGABRT.
- El controlador de bloqueo Upstart se llama en SIGABRT.
- El controlador de bloqueos inicial inicia un proceso secundario
- El proceso de niño advenedizo vuelve a generar la señal que hace que el niño salga de manera anormal.
- El kernel detecta que el proceso hijo se ha salido anormalmente y llama a apport, canalizando el archivo central para admitir la entrada estándar (debido a / proc / sys / kernel / core_pattern).
- apport escribe el archivo central en el disco en / var / crash /.
- El PID 1 espera a que su hijo termine (lo que ocurre una vez que apport ha terminado de escribir el archivo principal).
- PID 1 sale.
- kernel panics.
- En el próximo arranque, Whoopsie detectará el archivo de bloqueo y lo procesará.
Backend
Para mantener el retraso y el impacto de CPU / IO lo más bajo posible, /usr/share/apport/apport
solo recopila datos que deben adquirirse mientras el proceso bloqueado todavía existe: información de /proc/pid
, el volcado del núcleo, la ruta ejecutable y el número de señal. El informe está escrito para /var/crash/executable_path.uid.crash
.
Invocación frontend
En Gnome, el notificador de actualizaciones mantiene una vigilancia inotify activada /var/crash
. Cada vez que hay algo nuevo, llama a / usr / share / apport / apport-checkreports. Si hay nuevos informes, llama a / usr / share / apport / apport-gtk, que es la interfaz que se muestra en las capturas de pantalla anteriores.
Luego, la interfaz recopila información adicional, como versiones de paquetes, sumas de comprobación de archivos de paquetes o versiones de SO, y llama a todos los enlaces de paquetes coincidentes. Para deshabilitar esto, puede ejecutar gsettings set com.ubuntu.update-notifier show-apport-crashes false (como su usuario de escritorio normal).
Auto-retracer basado en Launchpad
El centro de datos Canonical ejecuta un servicio que rastrea automáticamente los errores con un informe. Al etiquetar los errores de acuerdo con la arquitectura en Launchpad, se realizará un retroceso y se eliminará la etiqueta. Las etiquetas que se utilizan son need-i386-retrace o need-amd64-retrace. Ver el anuncio.
Ganchos de sujeción por paquete
Es posible que los paquetes especifiquen información recopilada del sistema e incluida en el informe de error. Estos se realizan mediante ganchos de soporte contenidos en paquetes. Para algunos ejemplos útiles ver:
- source_xorg.py: agrega archivos de registro adicionales y detalles de hardware a los informes de errores
- usplash: ignora los bloqueos en rutas de código específicas
- source_totem.py: hace preguntas al reportero y recopila información diferente según las respuestas
en / usr / share / apport / package-hooks. También hay una lista de paquetes que proporcionan ganchos de soporte.
Si se envía un informe de bloqueo o error a través de apport, los ganchos relevantes se ejecutarán automáticamente. Si tiene un error ya informado que se archivó sin un informe, y está interesado en la información de esos ganchos, puede pedirle al informador de errores que use el número de error apport-collect.
¡Usa la fuente, Luke!
- Puede descargar el tarball ascendente desde la página del proyecto Launchpad, o el tarball fuente de Ubuntu desde el archivo de Ubuntu.
- apport se desarrolla con el bazar RCS en Launchpad. Si desea contribuir o desarrollar su propio sistema basado en él, puede obtener su propia rama con bzr get lp: apport for trunk o debcheckout -a apport para la rama de empaquetado de Ubuntu.
Planes futuros
Diversas mejoras en el rendimiento, mejores herramientas para trabajar con informes e integración de más idiomas (trazas de pila Mono / Python, mensajes de afirmación, etc.) Consulte la especificación relevante.
Fuentes: Apport , Cómo clasificar y Cómo habilitar Apport