Создание зеркала обновлений на Linux сервере для Windows машин
#1
Отправлено 18 Январь 2009 - 15:44
Задача: сделать зеркало обновлений на шлюзе.
Есть ли какие php\perl\etc-скриты для подобного? Можно, конечно, попробовать качнуть страницу wget-ом http://download.drweb.com/bases/ , отпарсить на предмет наличия ссылок, например, http://download.drweb.com/bases/ , и опять скормить wget-у. Но, может, есть готовый вариант?
#2
Отправлено 18 Январь 2009 - 18:22
Собственно такая задача: имеется 30 Windows-based машин, они выходят в сеть через шлюз, на котором стоит Debian.
Задача: сделать зеркало обновлений на шлюзе.
Есть ли какие php\perl\etc-скриты для подобного? Можно, конечно, попробовать качнуть страницу wget-ом http://download.drweb.com/bases/ , отпарсить на предмет наличия ссылок, например, http://download.drweb.com/bases/ , и опять скормить wget-у. Но, может, есть готовый вариант?
конечно есть готовый - Dr.Web Enterprise Suite
#3
Отправлено 18 Январь 2009 - 18:32
И еще: то что предлагается имеет слишком большой спектр возможностей для нас, он не нужен.
#4
Отправлено 18 Январь 2009 - 19:38
Есть ли какие php\perl\etc-скриты для подобного?
Скрипты-то конечно еть, у меня был на Питоне. Но готовое решение кроме ES вам врят ли дадут.
Вообще говоря, можно не мудрить с зоной обновлений, а сделать так: скачивать базы, выкладывать их в локалке, обновлять виндовые машины через ключ /URL для апдейтера + факультативное задание: хорошо бы обновлять не только базы, но и компоненты.
#6
Отправлено 18 Январь 2009 - 21:27
может, у Черного.Когда-то был скрипт winupdate.pl, как раз под эту задачу. Может, у кого и сохранился.
а сделать так: скачивать базы, выкладывать их в локалке, обновлять виндовые машины через ключ /URL для апдейтера
Просьба сильно не пинать за скрипты, а помочь потестировать, кому интересно.
Вот, я тут покурил 15 мин. и выдал такое на перле для серверной части:
#!/usr/bin/perl -w
my $logdir = '/tmp/update';
my $basedir = '/tmp/update/500'; # папка, откуда обновляются виндовые агенты
# в эту папку надо также положить файл drweb32.lst
system ('wget -P '.$logdir.' -r -l1 -nd -np http://msk3.drweb.com/pub/drweb/bases');
opendir (DIR, $logdir);
my @files=readdir (DIR);
closedir (DIR);
foreach my $file (@files){
if ($file =~ /zip/){
system ('unzip -o '.$logdir.'/'.$file.' -d '.$basedir);
}
}Этот скрипт вставляем в cron на выполнение каждые 30 мин. unzip -o переписывает файлы (это надо для тудейки и перевыпуска баз). Можно еще поколдовать с параметрами wget чтобы там не качался всякий шлак.
Виндовые агенты обновляем так:
DrWebUpW.exe /URL <UNC путь к папке $basedir>Если я что-то забыл или перепутал, то поправьте меня пожалуйста.
#7
Отправлено 18 Январь 2009 - 22:44
Doctor Web, Ltd.
#8
Отправлено 18 Январь 2009 - 22:46
кстати, а виндовый апдейтер под wine вроде работает (сканер пашет). никто не пробывал его юзать?
Doctor Web, Ltd.
#9
Отправлено 19 Январь 2009 - 07:21
вот:нужно обновлять моудули а их какчать можно только с офф. апдейтом вгетом с параметрами --header
К тому же mkdrl.exe никто, я думаю, не выложит.нужно бесплатное решение
работать-то он, может, и будет, но это решение не для серверакстати, а виндовый апдейтер под wine вроде работает (сканер пашет). никто не пробывал его юзать?
#10
Отправлено 19 Январь 2009 - 13:58
не заметил сразу. ну тогда задача сильно упрощается. апдейтить базы не сильно сложно. качать wget в цикле увеличивая номер в имени базы в режиме зеркала (ключ -N, вроде должен wget проверить по заголовку) пока не вернется что файла нет, и складывать в каталог. потом распаковывать все и заменять. Дима, дописывай скриптнужно бесплатное решение
Doctor Web, Ltd.
#11
Отправлено 19 Январь 2009 - 20:16
качать wget в цикле увеличивая номер в имени базы в режиме зеркала (ключ -N, вроде должен wget проверить по заголовку)
ну зачем же такой изврат))
я уже все написал в скрипте: там скачиваются все базы и движки, распаковываются нужные файлы, ничего не парсится, нет никаких циклов.
#12
Отправлено 22 Январь 2009 - 21:31
#13
Отправлено 22 Январь 2009 - 21:57
#14
Отправлено 23 Январь 2009 - 15:31
с хешем своего ключа в скрипте? http://forum.drweb.com/public/style_emoticons/default/laugh.pngJobsidi, отпишитесь потом. Будет время на выходных сделаю с обновлением компонентов
Doctor Web, Ltd.
#15
Отправлено 24 Январь 2009 - 10:24
Будет время на выходных сделаю с обновлением компонентов
Вторая серия. Она оказалась более интересной.
#!/usr/bin/perl -w
use Digest::MD5;
my $logdir = '/tmp/update';
my $basedir = '/tmp/update/500'; # папка, откуда обновляются виндовые агенты
my $drwebkey = '/tmp/update/drweb32-betatesting.key'; # путь к ключу drweb
# обновление баз и движков
system ('wget -P '.$logdir.' -r -l1 -nd -np http://msk3.drweb.com/pub/drweb/bases');
opendir (DIR, $logdir);
my @files=readdir (DIR);
closedir (DIR);
foreach my $file (@files){
if ($file =~ /zip/){
system ('unzip -o '.$logdir.'/'.$file.' -d '.$basedir);
}
}
# обновление компонентов
open(FILE, $drwebkey) or die "Can't open '$drwebkey': $!";
binmode(FILE);
my $md5 = Digest::MD5->new->addfile(*FILE)->hexdigest;
my @components = qw(drweb32.lst
update.drl
drwebupw.exe
dwshield.sys
spiderui.dll
drwebnet.sys
drwspcnt.dll
spider.cpl
drwspcnt.dll
dwprot.sys
dwprot.dll
dwengine.exe
dwinctl.dll
spideragent.exe
spideragent_set.exe
drweb32w.exe
drwebwcl.exe
spidergate.exe
spidergate_set.exe
spidernt.exe
spiderui.exe
spidercpl.exe
spider.sys
spiderml.exe
spml_set.exe
drwebsp.dll
drwreg.exe);
foreach my $component (@components) {
system ('wget -O '.$basedir.'/'.$component.
' -l 0'.
' --header="X-DrWeb-Validate:'.$md5.'"'.
' http://update.drweb.com/500/windows/'.$component);
}
opendir (C_DIR, $basedir);
my @c_files=readdir (C_DIR);
closedir (C_DIR);
foreach my $c_file (@c_files){
if ((-s $basedir.'/'.$c_file) eq 0){
unlink ($basedir.'/'.$c_file)
}
}При написании заметил очень странную вещь:
Response 500 Internal Server Error при использовании timestamping в wget,
Замечание: тут не обновляются базы род. контроля. FR0025177
Кстати, update.pl докручивать гораздо муторнее.
#16
Отправлено 01 Апрель 2009 - 23:42
Почитал тут, почитал в wiki, погуглил.
Сначала делал чистое зеркало баз данных, синхронизировал с помощью lftp. Сегодня докорябал скрипт на perl, который выкачивает drweb32.lst и сверяет хеши у имеющихся баз. Если хеши не совпадают, перекачивает файл заново. И всё вроде хорошо, работает, но...
На файле dwntoday.vdb и некоторых других today получаю 451 access denied. Все остальные vdb и бинарники качаются на ура. В таком случае я совершенно непонимаю, как правильно обновлять базы и как это делает их утилита.
Скрипт в аттаче. Версия DrWeb у юзверя 444. Кстати после обновления и перезагрузки значёк в трее стал помеченным красным крестиком. Ещё не разбирался почему, но как-то напрягает такое "обновление".
А ещё почему-то хеш CRC32 безумно медленно считается
Прикрепленные файлы:
Сообщение было изменено QuAzI: 01 Апрель 2009 - 23:58
#17
Отправлено 02 Апрель 2009 - 07:37
#18
Отправлено 02 Апрель 2009 - 07:53
И хотелось бы всё же узнать, почему у виндового апдейтера проблем с закачкой dwntoday.vdb например нет, а у скрипта который выкачивает всё остальное, вплоть до chm и wav вот именно три файла не выкачиваются: drwtoday, dwntoday, dwrtoday.
Не увиливайте от сабжа - зеркало обновлений на LINUX, а не на винде.
#19
Отправлено 02 Апрель 2009 - 10:34
А ещё почему-то хеш CRC32 безумно медленно считается
на дайлапе базы обновлять нереально. Хеш одного файла может рассчитываться 2-3 минуты.
значит так написали



