Налагодження

Є два прапорці, які допомагають у налагодженні сценаріїв конфігурації. Оскільки проблеми із завантаженням конфігурації виявлятимуться під час завантаження, прапорці передаються як параметри завантаження ядра.

Створення образу ISO

Якщо у вас виникли проблеми зі збиранням власного образу ISO або з усуненням проблем із Дженкінсом, виконайте дії, наведені в Проблеми збірки ISO.

Запуск системи

Запуск системи можна налагодити (наприклад, завантаження файлу конфігурації з /config/config.boot. Цього можна досягти шляхом розширення командного рядка ядра у завантажувачі.

Ядро

  • vyos-debug - Додавання параметра до рядка завантаження Linux створить результати синхронізації для виконання сценаріїв під час фіксації. Якщо хтось бачить неочікувану затримку під час ручного або завантажувального фіксування, це може бути корисним для виявлення вузьких місць. Внутрішній прапор — VYOS_DEBUG, його можна знайти у vyatta-cfg. Вихідні дані спрямовуються до /var/log/vyatta/cfg-stdout.log.

  • vyos-config-debug - під час розробки помилки кодування можуть призвести до помилки фіксації під час завантаження, що, можливо, призведе до невдалої ініціалізації CLI. У цьому випадку параметр завантаження ядра vyos-config-debug забезпечить доступ до системи як користувач vyos і запише трасування стека Python у файл /tmp/boot-config- слід. Файл boot-config-trace буде створено, лише якщо конфігурацію завантажено зі статусом помилки.

Жива система

Для зміни поведінки VyOS під час виконання можна встановити ряд прапорців. Ці прапорці можна перемикати за допомогою змінних середовища або створення файлів.

Для кожної функції можна створити файл під назвою vyos.feature.debug, щоб увімкнути функцію. Якщо параметр потрібен, його можна розмістити всередині файлу як його перший рядок.

Файл можна помістити в /tmp для одноразового налагодження (оскільки файл буде видалено під час перезавантаження) або помістити в '/config', щоб залишитися назавжди.

Наприклад, /tmp/vyos.ifconfig.debug можна створити, щоб увімкнути налагодження інтерфейсу.

Також можна налаштувати налагодження за допомогою змінних середовища. У такому випадку ім’я буде (у верхньому регістрі) VYOS_FEATURE_DEBUG.

Наприклад, запуск export VYOS_IFCONFIG_DEBUG="" на вашому vbash матиме той самий ефект, що touch /tmp/vyos.ifconfig.debug.

  • ifconfig - після встановлення всі використані команди та відповіді на них, отримані від ОС, будуть представлені на екрані для перевірки.

  • команда – після встановлення всі використані команди та відповіді на них, отримані від ОС, будуть представлені на екрані для перевірки.

  • розробник - якщо команда завершується помилкою, замість друку повідомлення для користувача з поясненням, як повідомити про проблеми, інтерпретатор python розпочне сеанс PBD post mortem, щоб дозволити розробнику налагодити проблему. Оскільки налагоджувач чекатиме вхідних даних від розробника, він має здатність запобігти завантаженню маршрутизатора, тому його слід постійно налаштовувати лише у робочому стані, якщо ви готові побачити, що ОС не завантажиться.

  • журнал - У деяких рідкісних випадках може бути корисно побачити, що робить ОС, зокрема під час завантаження. Цей параметр надсилає всі команди, які використовує VyOS, у файл. Типовим файлом є /tmp/full-log, але його можна змінити.

Примітка

Щоб отримати вихідні дані налагодження в командному рядку, вам потрібно додатково вимкнути vyos-configd. Це можна запустити одноразово, викликавши sudo systemctl stop vyos-configd, або зробити це перезавантаження безпечним, викликавши sudo systemctl disable vyos-configd.

FRR

В останніх версіях використовується структура vyos.frr. Клас Python знаходиться всередині нашого vyos-1x:python/vyos/frr.py. Він постачається із вбудованим налагоджувачем налагодження/(стиль друку), як це робить vyos.ifconfig.

Щоб увімкнути налагодження, просто запустіть: $ touch /tmp/vyos.frr.debug

Налагодження коду Python за допомогою PDB

Іноді може бути корисним налагодити код Python в інтерактивному режимі в живій системі, а не в IDE. Цього можна досягти за допомогою pdb.

Припустімо, ви хочете налагодити сценарій Python, який викликається командою режиму op-mode. Після того, як ви знайшли сценарій, переглянувши op-mode-defitions, ви можете редагувати сценарій у живій системі, наприклад, за допомогою vi: vi /usr/libexec/vyos/op_mode/show_xyz.py

Вставте наступний оператор безпосередньо перед розділом, де ви хочете дослідити проблему (наприклад, оператор, який ви бачите у зворотному трасуванні): import pdb; pdb.set_trace() За бажанням ви можете оточити цей оператор if, який запускається лише за умови, яка вас цікавить.

Щойно ви запустите show xyz і ваша умова спрацює, ви повинні перейти до налагоджувача python:

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

Ви можете ввести help, щоб отримати огляд доступних команд, і help command, щоб отримати більше інформації про кожну команду.

Корисні команди:

  • перевірити змінні за допомогою pp(var)

  • continue execution using cont

  • отримати зворотне трасування за допомогою bt

Налаштувати сценарії міграції

Під час написання нового засобу міграції конфігурації може статися, що ви побачите помилку під час спроби викликати його вручну в системі розробки. Ця помилка виглядатиме так:

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

Помилка конфігурації під час завантаження системи

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.

Час завантаження

Під час міграції та значного переписування функціональності з Perl на Python було помічено значне збільшення загального часу завантаження системи. Можна проаналізувати час завантаження системи та зрештою створити графік, який детально показує, хто кому телефонував під час фази запуску системи.

Це робиться за допомогою пакета systemd-bootchart, який тепер встановлено за замовчуванням у гілці VyOS 1.3 (equuleus). Конфігурація також має версії, тому ми отримуємо порівняльні результати. systemd-bootchart налаштовується за допомогою цього файлу: bootchart.conf

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

Це також можна зробити постійно, змінивши /boot/grub/grub.cfg.

Пріоритети

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.

Щоб усунути проблеми з пріоритетами або побачити, що відбувається у фоновому режимі, ви можете скористатися сценарієм /opt/vyatta/sbin/priority.pl, який показує вам порядок виконання сценаріїв.