Скрипт создания и обновления зеркала антивируса Eset Nod32 под Linux, как с бесплатных серверов, так и официальных (для обновления с официальных серверов требуется установленный 'unrar').
- Bash (тестировался на версиях 4.1.11(2) и 4.2.24(1));
- Apache для раздачи файлов и показа морды (опционально, тестировалось на версиях 1.3.x и 2.2.x);
- Наличие и разрешение на запуск 'curl' (проверка состояния источника), 'wget' (скачивание файлов), 'unrar' (для работы с официальными зеркалами) и некоторые другие стандартные приложения.
Функционально данное решение состоит из нескольких файлов. Ниже приведена общая структура и её описание:
- /nod32upd (Директория, где располагаются сами скрипты обновления)
- get-nod32-key.sh (Скрипт получения рабочего ключа)
- upd-nod32-mirror.sh (Скрипт обновления зеркала)
- settings.cfg (Настройки скриптов)
- /webface (Директория страницы-заглушки для Apache)
- /.webface (Директория с содержимым страницы-заглушки)
- header.html (Часть документа ДО вывода листинга)
- footer.html (Часть документа ПОСЛЕ вывода листинга)
- .htaccess (Настройки директории содержимого страницы-заглушки)
- .htaccess (Разграничение доступа к зеркалу и инициализация страницы-заглушки)
- /.webface (Директория с содержимым страницы-заглушки)
- Качаем или клонируем крайнюю версию;
- Если раздаем через smb — создаем директорию и открываем к ней общий доступ с правами только на чтение;
- Если раздаем через http — создаем отдельный virtualhost или директорию, доступную «из вне», кладем в неё содержимое директории «/webface», проверяем (открываем в браузере; должно быть похоже на изображение что выше);
- Кладем в директорию, не доступную «из вне» директорию «/nod32upd». Открываем файл «settings.cfg», прописываем пути к директориям, перепроверяем;
- Даем права на запуск ("chmod +x ...") для «upd-nod32-mirror.sh» и «get-nod32-key.sh» и делаем пробный запуск сперва "./get-nod32-key.sh", после этого "./upd-nod32-mirror.sh";
- Изучаем вывод, анализируем причину «почему сразу не заработало», идем по ссылке задать вопрос, исправляем, радуемся;
- Ставим задание в крон, запускаем 3..4 раза в сутки.
Для изменения рабочих путей, опций работы и всего, что связано непосредственно с обновлением - правьте /nod32upd/settings.cfg. Для определения правил доступа к зеркалу при использовании Apache - /webface/.htaccess
- Работает как с официальными серверами, так и "пиратскими";
- Успешно получает "бесплатные" ключи обновлений (Внимание - данный функционал только для примера и обучения) и поддерживает их в актуальном состоянии (скрипт get-nod32-key.sh). Скрипт возвращает в крайней строке пару "логин:пароль", или слово "error" в случае ошибки. Для более подробной информации смотри его исходники и
./get-nod32-key.sh -h
- Не требует вывода индекса (списка файлов) для того, чтоб забрать файлы обновлений;
- Разбирает 'update.ver' и создает новый (разные сервера по разному указывают пути к файлам обновлений - встречал полные пути, относительные, только имена файлов);
- Имеет возможность проверки под-директорий (иногда разные сервера хранят под разные версии обновления в разных под-директориях);
- Имеет возможность не скачивать сами файлы обновлений, а лишь поддерживать в актуальном виде 'update.ver'. Удобно, если раздающий обновления сервер имеет ограниченный трафик, или недостаточно ресурсов. Такая штука работает, на удивление, даже с официальными серверами - доступ у них по прямым ссылкам к файлам без авторизации (скорее всего - баг, и будет через какое-то время исправлен);
- Всегда используется User-Agent самого антивируса (по крайней мере - очень похожий и проходящий валидацию). Более того, при каждом запуске скрипта некоторые его части (номера версий) случайным образом генерируются, так что идентифицировать скрипт в общей куче становится ещё сложнее;
- Настройки лимитов скорости и паузы между запросами вынесены в секцию настроек (удобно снизить нагрузку на канал и сервер);
- Подробные комментарии (на ломаном английском) и приятный, подробный вывод;
- Скачивает только обновленные файлы;
- Работает без проблем на Apache версий 1.3.x и 2.2.x, выводит приятную взгляду мордашку (в которую встраиваются ссылки на дистрибутивы, какая-либо информация для пользователей, etc.);
- При необходимости (опция 'UseGetKeysScript') получаем "бесплатный" ключ;
- Проверяем доступность серверов (запрашивая файл 'update.ver' по указанному адресу) по порядку, указанному в настройках;
- При подтверждении доступности сервера - скачиваем и разбираем файл 'update.ver' выковыривая имена файлов. После чего пишем новый 'update.ver' (без путей к файлам), и 'wget'-ом выкачиваем файлы, выковыренные ранее (только обновленные). Если необходимо (опция 'createLinksOnly') - создаем только файл 'update.ver' с ссылками на оригинальные расположения файлов, не скачивая сами файлы обновлений;
- Проверяем под-директории из списка, указанного в настройках (алгоритм как в предыдущем пункте);
- Убираем за собой, создаем файл-временную метку и 'robots.txt', запрещающий индексацию.
Код не самый лучший, но хорошо откомментирован и работает.
- 0.3.8 - Решение проблемы обновления с официальных зеркал для версий v5..v7;
- 0.3.7 - Рефакторинг, вынос настроек в отдельный файл, добавление логирования в скрипт обновления, незначительные доработки и изменения;
- 0.3.6 - Чертовски мощный апдейт. В комплект добавлен скрипт "get-nod32-key.sh" который самостоятельно получает валидный ключ к официальным серверам. Более того - исправлена ошибка с отсутствием в пути пары логин:пароль при выполнении двух условий - 'createLinksOnly' включен и обновляемся с официального зеркала;
- 0.3.4 - Поправки в GUI, 'footer.html' и 'header.html' перенесены в '..webface', добавлена поддержка 'mod_geoip' в .htaccess, сам скрипт обновления не изменен;
- 0.3.3 - Незначительные поправки;
- 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 - Релиз на гитхабе.
Copyright (c) 2014 Samoylov Nikolay
Данная лицензия разрешает лицам, получившим копию данного программного обеспечения и сопутствующей документации (в дальнейшем именуемыми «Программное Обеспечение»), безвозмездно использовать Программное Обеспечение без ограничений, включая неограниченное право на использование, копирование, изменение, добавление, публикацию, распространение, сублицензирование и/или продажу копий Программного Обеспечения, также как и лицам, которым предоставляется данное Программное Обеспечение, при соблюдении следующих условий:
Указанное выше уведомление об авторском праве и данные условия должны быть включены во все копии или значимые части данного Программного Обеспечения.
ДАННОЕ ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ ПРЕДОСТАВЛЯЕТСЯ «КАК ЕСТЬ», БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ, ЯВНО ВЫРАЖЕННЫХ ИЛИ ПОДРАЗУМЕВАЕМЫХ, ВКЛЮЧАЯ, НО НЕ ОГРАНИЧИВАЯСЬ ГАРАНТИЯМИ ТОВАРНОЙ ПРИГОДНОСТИ, СООТВЕТСТВИЯ ПО ЕГО КОНКРЕТНОМУ НАЗНАЧЕНИЮ И ОТСУТСТВИЯ НАРУШЕНИЙ ПРАВ. НИ В КАКОМ СЛУЧАЕ АВТОРЫ ИЛИ ПРАВООБЛАДАТЕЛИ НЕ НЕСУТ ОТВЕТСТВЕННОСТИ ПО ИСКАМ О ВОЗМЕЩЕНИИ УЩЕРБА, УБЫТКОВ ИЛИ ДРУГИХ ТРЕБОВАНИЙ ПО ДЕЙСТВУЮЩИМ КОНТРАКТАМ, ДЕЛИКТАМ ИЛИ ИНОМУ, ВОЗНИКШИМ ИЗ, ИМЕЮЩИМ ПРИЧИНОЙ ИЛИ СВЯЗАННЫМ С ПРОГРАММНЫМ ОБЕСПЕЧЕНИЕМ ИЛИ ИСПОЛЬЗОВАНИЕМ ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ ИЛИ ИНЫМИ ДЕЙСТВИЯМИ С ПРОГРАММНЫМ ОБЕСПЕЧЕНИЕМ.