Платформы для NCC
С самого начала мы решили, что будем писать программу для ряда платформ, называемого LAMP (Linux, Apache, MySQL и Perl).
- Linux: По очевидным причинам Linux предлагает наибольшую мобильность и наименьшую стоимость использования. Однако нет причин, которые препятствуют системе выполняться на других разновидностях UNIX с небольшими модификациями. Ее можно также перенести на платформу на базе Windows, такую как Perl for Windows.
- Apache: Сервер Apache был также выбран в связи с открытостью исходных текстов и потому, что он является одним из наиболее популярных web-серверов. Он явился самым логичным выбором, поскольку web-сервер должен использоваться и для других средств. Кроме него, эта система будет выполняться на любом поддерживающем PHP web-сервере, включая IIS.
- MySQL: Имеется несколько хороших баз данных с открытыми исходными текстами, включая Postgresql и другие. Мы выбрали MySQL, потому что были лучше всего с ней знакомы, а требования в лицензии были самыми простыми. Как и Apache, мы уже применяли MySQL для своих баз данных ACID.
- Perl: Конечно, существует множество интерпретируемых языков, но мы выбрали Perl потому, что он один из самых мобильных, не требует компиляции и легко модифицируем для третьих сторон.
Основываясь на архитектуре LAMP, мы начали создавать средство, удовлетворяющее нашим потребностям. Сначала мы написали план проекта, детализировавший задуманную работу. Затем мы разбили задачу на подзадачи с учетом имеющихся у нас навыков. Мы определили программные элементы, которые потребуются для нашей системы, включая процедуры Perl, PHP и MySQL, командные файлы, а также текстовые файлы документации. Табл. 8.6 содержит список всех необходимых элементов проекта вместе с описанием их назначения.
Процедура Perl | ncc.pl | Запускается с помощью cron и выстраивает очередь сканирований, готовых к выполнению |
Процедура Perl | ncc-client.pl | Удаляет запланированные сканирования из очереди, вызывает команду для их выполнения, а затем осуществляет преобразование для переноса файлов .nbe (по мере их получения) в базу данных MySQL |
Процедура Perl | ncc-daily.pl | Посылает ежедневные итоговые электронные сообщения и очищает очередь |
Процедура PHP | Main.php и другие вспомогательные php-файлы | Интерфейс для ввода данных в таблицу расписания; состоит из нескольких файлов |
Процедура PHP | Reports.php | Интерфейс для просмотра базы данных MySQL, модификация версий NPI; состоит из нескольких файлов |
База данных MySQL | База данных NCC | Модель базы данных сканирований, внутренняя для программы базы данных MySQL |
Процедура MySQL | ncc.mysql | Создает начальную базу данных |
Вспомогательная процедура | install.pl | Процедура для создания элемента для cron, вызов процедуры MySQL, копирование исполнимых файлов в /bin и файла php в Web |
Текстовый файл | ncc.ini | Переменные окружения для процедур Perl и PHP, имена баз данных, расположение файлов, адреса электронной почты для уведомлений и т.д. |
Текстовый файл | INSTALL, README и т.д. | Несколько файлов с инструкциями по установке, эксплуатационными инструкциями и другими полезными данными |
Нам предстояло также спроектировать схему базы данных с таблицами, которые будут заполняться нашей программой. Программа NPI была отличным подспорьем в этом отношении, хотя мы добавили новые таблицы, обслуживающие планирование.
Несмотря на то, что потоки данных были аналогичны NPI, имелись и некоторые существенные различия. Мы разработали диаграмму этих потоков, чтобы можно было проследить все логические связи между системами. На рис. 8.11 показана логическая архитектура NCC.
Рис. 8.11. Логическая архитектура NCC
Для проекта мы создали также web-сайт и страницу Sourceforge. Web-страница расположена по адресу http://www.netsecuritysvcs.com/ncc. Хотя мы решили, что в нашей группе достаточно талантов для завершения проекта, никогда не мешает познакомить других людей из сообщества открытого ПО с тем, что вы делаете. Кроме того, когда проект будет закончен, может понадобиться помощь при переносе на другие платформы и при добавлении новых возможностей.
Когда все приготовления были закончены, мы начали работу, как правило, проводя еженедельные встречи для отслеживания продвижений. Поскольку это было не основное занятие и у всех имелась другая работа, потребовалось около года для завершения программы в стадии бета-версии. Тем не менее, ее уже можно использовать и теперь, с помощью сетевого сообщества разработчиков, NCC можно расширять и улучшать. Написание NCC как проекта с открытыми исходными текстами, несомненно, требует несколько больше усилий для внешних взаимодействий, чем выполнение его как частного проекта, поскольку необходимо выполнить исследование существующих программ и интегрировать базы исходных текстов, но зато мы смогли воспользоваться существующими исходными текстами, что значительно сократило общее время разработки. Мы также знали, что если наша система станет популярной, ее можно будет перенести на другие платформы или даже использовать в качестве основы для более развитой программы, что нам только помогло бы. В конце концов, как показал опыт, в выигрыше осталась как моя компания, так и внешние пользователи.