depuración

Hay dos banderas disponibles para ayudar en la depuración de scripts de configuración. Dado que los problemas de carga de la configuración se manifestarán durante el arranque, los indicadores se pasan como parámetros de arranque del kernel.

Creación de imagen ISO

Cuando tenga problemas para compilar su propia imagen ISO o depurar problemas de Jenkins, puede seguir los pasos en Problemas de compilación ISO.

Puesta en marcha del sistema

El inicio del sistema se puede depurar (como cargar el archivo de configuración desde /config/config.boot). Esto se puede lograr extendiendo la línea de comandos del Kernel en el gestor de arranque.

Núcleo

  • vyos-debug: agregar el parámetro a la línea de inicio de Linux producirá resultados de tiempo para la ejecución de scripts durante la confirmación. Si uno ve un retraso inesperado durante la confirmación manual o de arranque, esto puede ser útil para identificar cuellos de botella. El indicador interno es VYOS_DEBUG y se encuentra en vyatta-cfg. La salida se dirige a /var/log/vyatta/cfg-stdout.log.

  • vyos-config-debug: durante el desarrollo, los errores de codificación pueden provocar una falla de confirmación en el arranque, lo que posiblemente resulte en una inicialización fallida de la CLI. En esta circunstancia, el parámetro de arranque del kernel vyos-config-debug garantizará el acceso al sistema como usuario vyos y registrará un seguimiento de la pila de Python en el archivo /tmp/boot-config- rastrear. El archivo boot-config-trace se generará solo si la configuración se cargó con un estado de falla.

Sistema en vivo

Se pueden configurar varios indicadores para cambiar el comportamiento de VyOS en tiempo de ejecución. Estas banderas se pueden alternar usando variables de entorno o creando archivos.

Para cada función, se puede crear un archivo llamado vyos.feature.debug para activar la función. Si se requiere un parámetro, se puede colocar dentro del archivo como su primera línea.

El archivo se puede colocar en /tmp para una depuración única (ya que el archivo se eliminará al reiniciar) o se puede colocar en '/config' para permanecer de forma permanente.

Por ejemplo, se puede crear /tmp/vyos.ifconfig.debug para habilitar la depuración de la interfaz.

También es posible configurar la depuración utilizando variables de entorno. En ese caso, el nombre será (en mayúsculas) VYOS_FEATURE_DEBUG.

Por ejemplo, ejecutar export VYOS_IFCONFIG_DEBUG="" en su vbash tendrá el mismo efecto que touch /tmp/vyos.ifconfig.debug.

  • ifconfig: una vez configurados, todos los comandos utilizados y sus respuestas recibidas del sistema operativo se presentarán en la pantalla para su inspección.

  • comando: una vez configurados, todos los comandos utilizados y sus respuestas recibidas del sistema operativo se presentarán en la pantalla para su inspección.

  • desarrollador: si un comando falla, en lugar de imprimir un mensaje para el usuario que explica cómo informar los problemas, el intérprete de python iniciará una sesión post-mortem de PBD para permitir que el desarrollador depure el problema. Como el depurador esperará desde la entrada del desarrollador, tiene la capacidad de evitar que un enrutador se inicie y, por lo tanto, solo debe configurarse permanentemente en producción si está listo para ver que el sistema operativo no se inicia.

  • log: en algunos casos excepcionales, puede ser útil ver qué está haciendo el sistema operativo, incluso durante el arranque. Esta opción envía todos los comandos utilizados por VyOS a un archivo. El archivo predeterminado es /tmp/full-log pero se puede cambiar.

Nota

Para recuperar la salida de depuración en la línea de comandos, también debe deshabilitar vyos-configd. Esto se puede ejecutar una sola vez llamando a sudo systemctl stop vyos-configd o hacer que este reinicio sea seguro llamando a sudo systemctl disabled vyos-configd.

FRR

Las versiones recientes usan el framework vyos.frr. La clase Python se encuentra dentro de nuestro vyos-1x:python/vyos/frr.py. Viene con un depurador integrado de depuración/(estilo de impresión) como lo hace vyos.ifconfig.

Para habilitar la depuración simplemente ejecute: $ touch /tmp/vyos.frr.debug

Depuración de código Python con PDB

A veces puede ser útil depurar el código de Python de forma interactiva en el sistema en vivo en lugar de un IDE. Esto se puede lograr usando pdb.

Supongamos que desea depurar un script de Python al que llama un comando de modo operativo. Después de encontrar el script buscando las definiciones del modo de operación, puede editar el script en el sistema en vivo usando, por ejemplo, vi: vi /usr/libexec/vyos/op_mode/show_xyz.py

Inserte la siguiente declaración justo antes de la sección en la que desea investigar un problema (por ejemplo, una declaración que ve en un seguimiento): import pdb; pdb.set_trace() Opcionalmente, puede rodear esta declaración con un if que solo se activa bajo la condición que le interesa.

Una vez que ejecutes show xyz y tu condición se active, deberías ingresar al depurador de python:

> /usr/libexec/vyos/op_mode/show_nat_translations.py(109)process()
-> rule_type = rule.get('type', '')
(Pdb)

Puede escribir ayuda para obtener una descripción general de los comandos disponibles y comando de ayuda para obtener más información sobre cada comando.

Los comandos útiles son:

  • examinar variables usando pp(var)

  • continue execution using cont

  • obtener un seguimiento usando bt

Configuración de secuencias de comandos de migración

Al escribir un nuevo migrador de configuración, puede suceder que vea un error cuando intenta invocarlo manualmente en un sistema de desarrollo. Este error se verá así:

vyos@vyos:~$ /opt/vyatta/etc/config-migrate/migrate/ssh/0-to-1 /tmp/config.boot
Traceback (most recent call last):
  File "/opt/vyatta/etc/config-migrate/migrate/ssh/0-to-1", line 31, in <module>
    config = ConfigTree(config_file)
  File "/usr/lib/python3/dist-packages/vyos/configtree.py", line 134, in __init__
    raise ValueError("Failed to parse config: {0}".format(msg))
ValueError: Failed to parse config: Syntax error on line 240, character 1: Invalid syntax.

The reason is that the configuration migration backend is rewritten and uses a new form of «magic string» which is applied on demand when real config migration is run on boot. When running individual migrators for testing, you need to convert the «magic string» on your own by:

vyos@vyos:~$ /usr/libexec/vyos/run-config-migration.py --virtual --set-vintage vyos /tmp/config.boot

Error de configuración en el arranque del sistema

Being brave and running the latest rolling releases will sometimes trigger bugs due to corner cases we missed in our design. Those bugs should be filed via Phabricator but you can help us to narrow down the issue. Login to your VyOS system and change into configuration mode by typing configure. Now re-load your boot configuration by simply typing load followed by return.

You should now see a Python backtrace which will help us to handle the issue, please attach it to the Phabricator task.

Temporización de arranque

Durante la migración y la extensa reescritura de la funcionalidad de Perl a Python, se notó un aumento significativo en el tiempo de arranque general del sistema. Se puede analizar el tiempo de inicio del sistema y al final se puede generar un gráfico que muestra en detalle quién llamó a quién durante la fase de inicio del sistema.

Esto se hace utilizando el paquete systemd-bootchart que ahora está instalado de forma predeterminada en la rama VyOS 1.3 (equuleus). La configuración también está versionada, por lo que obtenemos resultados comparables. systemd-bootchart se configura usando este archivo: bootchart.conf

To enable boot time graphing change the Kernel commandline and add the following string: init=/usr/lib/systemd/systemd-bootchart

Esto también se puede hacer de forma permanente cambiando /boot/grub/grub.cfg.

Prioridades

VyOS CLI is all about priorities. Every CLI node has a corresponding node.def file and possibly an attached script that is executed when the node is present. Nodes can have a priority, and on system bootup - or any other commit to the config all scripts are executed from lowest to highest priority. This is good as this gives a deterministic behavior.

Para depurar problemas en las prioridades o para ver lo que sucede en segundo plano, puede usar el script /opt/vyatta/sbin/priority.pl que enumera el orden de ejecución de los scripts.