[Из песочницы] Написание пакета для PFSense
В этой статье я постараюсь на простом примере показать создание собственного GUI пакета для pfSense. Предполагается, что читатель имеет опыт работы с pfSense, имеет некоторые знания в PHP.
Маршрутизатор pfSense (на базе FreeBSD) используется многими сисадминами благодаря, в первую очередь, управлению настройками системы через WEB интерфейс. С многими настройками вполне по силам справиться даже начинающему администратору, что позволяет расширить область применения этого маршрутизатора. При этом, опытные коллеги могут в полной мере воспользоваться доступом к консоли для изучения и контроля работы системы.
Помимо стандартных настроек маршрутизатора, большинство которых можно сделать через WEB интерфейс, иногда возникают специфические для предприятия задачи, требующие от сисадмина управления настройками через консоль. Далее я хочу показать, как облачить свои наработки в код, позволяющий управлять настройками системы из WEB интерфейса.
И так, у Вас есть установленный и настроенный тестовый pfSense. Для начала нам понадобятся инструменты доступа к консоли и файлам pfSense по SSH. Так как я winuser, то и инструменты для работы буду использовать WinSCP + Putty.
Подключаемся с помощью WinSCP3 к pfSense и открываем каталог /usr/local/pkg. В этой папке хранятся файлы, относящиеся к GUI пакетам. Обычно это XML и INC файлы, включающие в себя описание конфигурации и PHP обработчики пакетов. Описание конфигурации GUI пакета размещено в XML файлах, и содержит в себе:
служебную информацию; шапку страницы WEB интерфейса; форму страницы WEB интерфейса; информацию о PHP функциях-обработчиках событий WEB интерфейса. Создаем два пустых файла mypkg.xml и mypkg.inc. Название mypkg является именем нашего пакета, и имя XML файла является ключевым для доступа к WEB интерфейсу пакета. Название inc файла может быть произвольным, и далее будет показан способ его подключения.
Формируем наш XML файл.Служебная информация содержит имя, заголовок, категорию, версию GUI пакета и список подключаемых INC файлов. В нашем случае подключаемый INC файл только один, должен быть указан полный путь к подключаемому файлу.
custom_php_command_before_form — вызывается перед отображением формы;
custom_php_validation_command — вызывается при проверке данных каждого элемента формы перед сохранением ее данных;
custom_php_resync_config_command — вызывается при сохранении данных формы
Здесь можно посмотреть полный текст файла:
Файл mypkg.xml
Файл mypkg.inc
?> После сохранения созданных файлов mypkg.xml и mypkg.inc в каталоге /usr/local/pkg можно проверить, как наш пакет будет выглядеть. Для этого заходим в WEB интерфейс pfSense и добавляем в адресной строке путь /pkg_edit.php? xml=mypkg.xml. Если все правильно и без ошибок сделано, получим вот такую картинку
В итоге нами был получен очень простой GUI пакет, который не выполняет ничего полезного, не сохраняет никаких данных, и даже не зарегистрирован в меню WEB интерфейса. Но тем не менее, на примере этого пакета можно получить представление о механизме работы графического интерфейса pfSense.
PS: За ранее приношу извинения за возможные недочеты. Эта статья написана для получения инвайта. Если данная тема будет интересна сообществу, то постараюсь рассказать более подробно о том, как создать полноценный GUI пакет для pfSense.