Содержание
Список примеров
Copyright (c) 2007 Peter V. Saveliev.
Copyright (c) 2008 Eugene Prokopiev.
Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.2 or any later version published by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of the license can be found on the GNU site[1].
Ncsh является приложением на базе Connexion, предназначенным для настройки сетевых параметров операционной системы. Благодаря Connexion, ncsh имеет модульную структуру, которую можно легко расширять либо изменять под свои нужды.
Среди важных осбенностей ncsh нужно отметить относительно простую настройку шейпинга траффика и управления VLAN- и bridge-интерфейсами.
# apt-get install connexion-modules-ncsh
# echo ncsh > /etc/sysconfig/connexion
# connexion-ncsh-autodetect > /etc/connexion/ncsh/tree
# vim /etc/connexion/ncsh/tree
# service connexion start
# chkconfig connexion on
Приложение ncsh состоит из нескольких компонентов, о которых необходимо
иметь некоторое представление перед использованием. Системный сервис
на старте операционной системы обеспечивает запуск экземпляров Connexion,
перечисленных в файле /etc/sysconfig/connexion
.
В списке должен присутствовать экземпляр «ncsh», обеспечивающий
настройку сетевых параметров, а во время остановки — корректное удаление
настроек. Между запусками экземпляра настройки сохраняются в конфигурационном
файле /etc/connexion/ncsh/tree
. Всеми экземплярами можно
управлять через стандартный шелл Connexion. По умолчанию шелл подключается к
экземпляру, упомянутому в файле /etc/sysconfig/connexion
первым — поэтому первым должен быть «ncsh». Подробнее о механизме
запуска Connexion можно посмотреть в
соответствующем файле документации.
Запуск шелла производится командой connexion-cli. Поскольку файл настроек является, фактически, скриптом для шелла, то в оболочке доступны все те же команды, что и в файле настроек, и наоборот. Некоторые примеры конфигурации можно посмотреть в соответствующем файле документации. Также можно попробовать конвертировать существующую сетевую конфигурацию, организованную средствами другой сетевой подсистемы (например, etcnet) в дерево команд ncsh c помощью команды connexion-ncsh-autodetect — но результат конвертации необходимо проверить и при необходимости отредактировать.
Оболочка (шелл) ncsh несколько отличается от привычного bash и похожа, скорее, на шелл ОС семейства Cisco IOS или JunOS. Поскольку некоторые команды образуют узлы дерева настроек (такие, например, как configure, network и т.п.), то применение этих команд автоматически изменяет текущий контекст шелла на созданный узел. Чтобы выйти из нового контекста обратно, нужно использовать или команду pop, или сочетание клавиш Ctrl+D.
Пример 1. Работа с контекстами в оболочке ncsh
Обратите внимание на изменения контекста, которые отражены в приглашении командной строки (перед знаком «>»)
ncsh > configure configure > network network > interfaces interfaces > pop network > pop configure > Ctrl+D ncsh >
Оболочка ncsh обеспечивает автодополнение команд и их параметров с помощью механизмов readline. Однако автодополнение несколько отличается от принятого в bash. Во-первых, для удобства операторов, привыкших к управляемому сетевому оборудованию, автодополнение вызывается не только клавишей Tab, но и клавишей ?. Во-вторых, варианты автодополения выводятся вместе с короткими подсказками по доступным командам.
Пример 2. Автодополнение команд
ncsh > configure network Tab * internal: ! - Input a comment for the next command call - Call a function commit - Commit new commands in the state tree debug - Switch debug output declare - Declare a function echo - Print a string merge - Turn ON `merge` mode no - Cancel an operation pop - Pop context replay - Replay a transaction from this node shutdown - Shutdown a server transaction - Trace transaction tree tree - Trace current state tree * command: filter - Declare a branch filter interfaces - Configure network interfaces on - Use a filter for subtree routing - Configure routing engine tc - Declare traffic controls ncsh > configure network interfaces
Пример 3. Автодополнение параметров
ncsh > configure network interfaces ethernet Tab * parameter: $1 - interface number: <interface> ncsh > configure network interfaces ethernet 0
Введённые команды, если они относятся к настройке системы, не исполняются немедленно, а выстраиваются в очередь на исполнение. Это даёт возможность оператору ещё раз оценить команды, которые он собирается исполнить и подтвердить либо отвергнуть транзакцию. Чтобы посмотреть, какие команды ждут исполнения, нужно использовать команду transaction. Чтобы посмотреть, какие команды уже исполнены, нужно использовать команду tree. Чтобы подвердить транзакцию, нужна команда commit.
Пример 4. Отложенное исполнение
ncsh > configure network interfaces ethernet 0
ethernet 0 > address 10.0.0.1/24
ethernet 0 > transaction
!
configure
!
network
!
interfaces
!
ethernet 0
address 10.0.0.1/24
ethernet 0 > commit
Для отмены команды, выполненной в текущем контексте, нужно использовать команду no. Это относится как к уже подтверждённым, так и к ещё не подтверждённым командам. В первом случае понадобится commit, во втором он не нужен.
Пример 5. Отмена команд
ethernet 0 > tree! configure ! network ! interfaces ! ethernet 0 address 10.0.0.1/24
ethernet 0 > address 192.168.0.1/24 ethernet 0 > no address 10.0.0.1/24 ethernet 0 > commit ethernet 0 > tree! configure ! network ! interfaces ! ethernet 0 address 192.168.0.1/24
ethernet 0 >
Иногда можно увидеть работу команды no, даже если напрямую её никто не вводил. Это случается при изменении уникальных команд.
Пример 6. Изменение уникальной команды
ethernet 0 > tree! configure ! network ! interfaces ! ethernet 0 address 192.168.0.1/24 speed 100
ethernet 0 > speed 10 ethernet 0 > transaction! configure ! network ! interfaces ! ethernet 0 speed 10 no speed 100
ethernet 0 >
Иногда требуется заново «проиграть» конфиг, начиная от текущего контекста. Для этого используется команда replay. Например, она необходима в том случае, когда шейпер на интерфейсе описан через функцию: Connexion пока что не рестартует автоматом все секции, которые делают вызов функции, если тело функции изменилось. Нужно зайти в контекст интерфейса и вызвать команду replay.
Также команды replay и commit полезны в сочетании с командой debug. В этом случае они позволят просмотреть, какой шелл-код собираются послать модули на исполнение:
Пример 7. Отладочный вывод
ethernet 0 > tree! configure ! network ! interfaces ! ethernet 0 address 192.168.0.1/24 speed 100
ethernet 0 > debugmessage: service debug switched ON
ethernet 0 > replayexec: /sbin/ip address del dev eth0 192.168.0.1/24 exec: /sbin/ip address add dev eth0 192.168.0.1/24 exec: /usr/sbin/ethtool -s eth0 speed 10 exec: /sbin/ip link set dev eth0 up
ethernet 0 >
Если конфигурация была подтверждена через команду commit в режиме отладки, то это означает, что она не была применена на операционной системе. Чтобы всё-таки применить конфигурацию, нужно выключить отладку (ещё раз запустить команду debug) и запустить replay.
Для того, чтобы сохранить результат работы в оболочке в
файл конфигурации, необходимо, находясь в корневом контексте (ncsh
),
выполнить команду backup write.
Чтобы восстановить конфигурацию из файла, нужно выполнить команду backup restore. Команда backup resurrect восстанавливает конфигурацию, но не применяет её к операционной системе.