Скрипт создания и обновления зеркала антивируса Eset Nod32 под Linux, как с бесплатных серверов, так и официальных (для обновления с официальных серверов требуется установленный unrar). Требования к системе, на которой разворачивается:
- Bash (тестировал на версиях 4.1.11(2) и 4.2.24(1) - полет без ошибок);
- Apache для раздачи файлов и показа морды (опционально, тестировалось на версии 1.3.42)
- Наличие и разрешение на запуск 'curl' (проверка состояния источника), 'wget' (скачивание файлов), 'rm', 'mkdir', 'mv' и 'unrar' (для работы с официальными зеркалами)
- Работает как с официальными серверами, так и "пиратскими";
- Не требует вывода индекса (списка файлов) для того, чтоб забрать файлы обновлений;
- Разбирает 'update.ver' и создает новый (разные сервера по разному указывают пути к файлам обновлений - встречал полные пути, относительные, только имена файлов);
- Имеет возможность проверки под-директорий (иногда разные сервера хранят под разные версии обновления в разных под-директориях);
- Имеет возможность не скачивать сами файлы обновлений, а лишь поддерживать в актуальном виде 'update.ver'. Удобно, если раздающий обновления сервер имеет ограниченный траффик, или недостаточно ресурсов. Такая штука работает, на удивление, даже с официальными серверами - доступ у них по прямым ссылкам к файлам без авторизации (скорее всего - баг, и будет через какое-то время исправлен);
- Всегда используется User-Agent самого антивируса (по крайней мере - очень похожий и проходящий валидацию). Более того, при каждом запуске скрипта некоторые его части (номера версий) случайным образом генерируются, так что идентифицировать скрипт в общей куче становится ещё сложнее;
- Настройки лимитов скорости и паузы между запросами вынесены в секцию настроек (удобно снизить нагрузку на канал и сервер);
- Подробные комментарии (на ломаном английском) и приятный, подробный вывод;
- Скачивает только обновленные файлы;
- Работает без проблем на Apache версии 1.3.x, выводит приятную взгляду мордашку (в которую встраиваются ссылки на дистрибутивы, какая-либо информация для пользователей, etc.);
- Проверяем доступность серверов (запрашивая файл 'update.ver' по указанному адресу) по порядку, указанному в настройках;
- При подтверждении доступности сервера - скачиваем и разбираем файл 'update.ver' выковыривая имена файлов. После чего пишем новый 'update.ver' (без путей к файлам), и 'wget'-ом выкачиваем файлы, выковыренные ранее (только обновленные). Если необходимо (опция 'createLinksOnly') - создаем только файл 'update.ver' с ссылками на оригинальные расположения файлов, не скачивая сами файлы обновлений;
- Проверяем под-директории из списка, указанного в настройках (алгоритм как в предыдущем пункте);
- Убираем за собой, создаем файл-временную метку и 'robots.txt', запрещающий индексацию.
Код не самый лучший, но хорошо откомментирован и работает.
- 0.3.2 - Незначительные поправки
- 0.3.1 - Добавлен "цветной" вывод сообщений, добавлена опция 'createLinksOnly' которая позволяет НЕ скачивать все файлы обновления целиком, а только лишь указывать ссылки на них в 'update.ver'. Улучшено комментирование кода, исправлена пара мелких ошибок, выявленных после теста на боевом сервере. Мелкие исправления
- 0.3 - Полностью переписан bash скрипт, иной алгоритм работы
- 0.2.5-sh - PHP версия более не поддерживается, скрипт переписан на bash
- 0.2.5 - Масса мелких исправлений в .htaccess и верстке
- 0.2.4 - Релиз на гитхабе
Используется возможность модуля 'mod_autoindex.c' сервера 'Apache'. Для настройки вывода редактируются 3 файла:
- .htaccess - 'IndexOptions' и прочие директивы, отвечающие за вывод листинга
- .header.html - Верстка перед выводом листинга
- .footer.html - Верстка после листинга
Hint: Листинг файлов выводится при клике на лого. Верстка оптимизирована даже под мобильные девайсы (зачем?!)
- update_nod32_mirror.sh - Секция настроек обновления в начале файла
- .htaccess - Ограничение доступа к зеркалу и прочие настройки
Автоматизация - Добавьте запуск скрипта в 'cron' с интервалом запуска 2..3 раза в сутки
Пост в блоге об этом хабе
Make love, not war!
