Создание зеркала обновлений на 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 безумно медленно считается на дайлапе базы обновлять нереально. Хеш одного файла может рассчитываться 2-3 минуты.
Прикрепленные файлы:
Сообщение было изменено 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 минуты.
значит так написали в реальной жизни он считается со скоростью считывания данных с диска
Читают тему: 2
0 пользователей, 2 гостей, 0 скрытых