Bekijk de volledige versie : NOD32 update server
Господа, а поделитесь опытом организации на WL500g сервера обновления для NOD32, который мог бы перебирать некий список серверов и собственно отслеживая за их живучестью делать обновления.
Может делал кто такое?
А чем тебя список серверов в самом Nod не устраивает? В автоматическом выборе он именно так и работает.
Хочется именно сервер, вот хочется и все тут :)
Что, неужели никто не делал???
alexhemp
09-01-2007, 21:47
Обновления nod скачивает по http
файл update.ver - хранит этот список. только он запакован в rar а формат распакованного файла - windows ini
Т.е. проблемы собственно две
1. Распаковать rar на роутере - навскидку не нашел unrar для linux mips
2. Разобрать ini-файл (в принципе можно что-то наверное изобразить на sed/awk, я в них не силен). В принципе можно запарится и попробовать regexp для grep наваять.
3. Далее - дело техники, на shell-е пишется скрипт, перебирает зеркала, качает.
Я зеркалирование реализовал на php+unrar+wget (+cron+busybox_httpd). Скрипт качает update.ver, распаковывает, сверяет его с локальным update.ver, качает обновленные модули, обновляет локальный update.ver. Только он сервера не перебирает и за их живучестью не следит.
Пока в моем скрипте есть недочеты. Неизвестно что может произойти, когда одновременно обновляется клиент с зеркала и обновляется само зеркало, но то что ничего хорошего это 100%. От этой неприятной ситуации можно избавится, если качать новые обновления в другой каталог, но до реализации этого всё руки недоходят.
Если кому интересно, то могу скрипт на почту скинуть. Код конечно кривоват, но чертпобери работает!
Насчет unrar. Для mipsel есть реализация под обновленный uClibc-0.9.28. За информацией лезть сюда: http://wl500g.info/showpost.php?p=34579&postcount=68.
О, скиньте мне пожалуйста :)
Почта: http://www.sitedevelop.ru/?page=contact
P.S.: Странно, поскачивал тут update.ver с разных зеркал при помощи разных бразуеров, так оно просто в окне браузера и показывается в виде текстового файла в .ini формате... где тут RAR?
idmitry, скрипт по указанным реквизитам отправил.
Насчет update.ver. А с каких зеркал качал то? На официальном сервере в раре запакован он http://u24.eset.com/nod_upd/update.ver. На неофициальных зеркалах может и распакованный лежать. В моем скрипте он тоже обратно незапаковывается (нечем запаковывать, да и впрочем незачем)
Да, спасибо, скрипт получил :) А то уже начал было воять свой...
Что касается РАР, то Вы правы, по официальному адресу update.ver действительно упакован, в то время как на не официальных в большенстве своем он представлен в распакованом виде...
Все получилось :) запара только была с unrar, из-за которого пришлось все пакеты переставить... если ставить ту хитрую библиотечку, то у всех поставленных ранее приложений крышу сносит.
А так скриптик от Mam(O)n слегка причесал, снабдил возможностью перебора серверов и вуаля :)
Товарищи, выложите скрипт аттачем, очень хочется посмотреть:)
Да, и кто-нибудь ваял скрипт для 3.х версии антивируса?
У меня есть скрипт, работает на FreeBSD сервере, только он тоже под v2 :(
Юзает Perl + unrar + wget, попробую перенести на роутер.
Очень хотелось-бы скрипт для 3 версии :rolleyes:
Да.....
Хотелось бы увидеть скрипт + краткие комментарии что нужно для его работы (примеры)
Поскольку никто так ничего и не выложил тут, вчера вечерком накидал простенький скрипт для обновления с неофициального сервера.
#!/bin/sh
WEB_ROOT=/opt/share/www #путь к корневой папке домена, где будет лежать зеркало
AVBASE_DIR=nod3 #имя папки, куда будут валиться базы
SERVER=http://nod3.madbadjack.com #сервер, откуда обновляемся
USER=
PASS=
cd $WEB_ROOT
mkdir -p $WEB_ROOT/$AVBASE_DIR
cd $AVBASE_DIR
/opt/bin/wget -a log.txt -N --cache=off --http-user=$USER --password=$PASS $SERVER/update.ver
#mv -f update.ver update.rar
#unrar x -y update.rar
FILES=`grep file= $WEB_ROOT/$AVBASE_DIR/update.ver|sed s/file=//|tr -d "\r"`
for UPDFILES in $FILES; do
/opt/bin/wget -a log.txt -N --cache=off --http-user=$USER --password=$PASS $SERVER/$UPDFILES
done
Дальше можно совершенствовать для официальных серверов... Перебора серверов... Обновления с разных серверов и формирования своего update.ver.
Положил два скрипта для НОДа второй и третьей версии в CRON. Оба успешно работают. Начал разбирацца с официальными серверами, но заморачиваться не очень охота, т.к. ключи постоянно менять надо будет, а это уже автоматизировать тяжелее...
oxygen121
29-04-2008, 11:44
Вот скрипт для трешки , какой у меня стоит
/opt/bin/wget -N -xnH -P /opt/share/www/lighttpd/ http://login:pass@update.eset.com/eset_upd/update.ver
/opt/bin/unrar x -o+ /opt/share/www/lighttpd/eset_upd/update.ver /opt/tmp/
cat /opt/tmp/update.ver |grep file=/ |cut -d= -f2 >/opt/tmp/list
/opt/bin/wget -N -xnH -P/opt/share/www/lighttpd/ -Bhttp://login:pass@update.eset.com -i/opt/tmp/list
Вот скрипт для трешки , какой у меня стоит
/opt/bin/wget -N -xnH -P /opt/share/www/lighttpd/ http://login:pass@update.eset.com/eset_upd/update.ver
/opt/bin/unrar x -o+ /opt/share/www/lighttpd/eset_upd/update.ver /opt/tmp/
cat /opt/tmp/update.ver |grep file=/ |cut -d= -f2 >/opt/tmp/list
/opt/bin/wget -N -xnH -P/opt/share/www/lighttpd/ -Bhttp://login:pass@update.eset.com -i/opt/tmp/list
И что, работает??? :D Не верю... Седня вот разбираюсь с офф. серверами. Не так там все как в этом скрипте у Вас. Такой скрипт обновит все прекрасно с неофициального зеркальца какого-нить... Но с офф. серверов не получицца ничего у него.
oxygen121
29-04-2008, 14:58
И что, работает??? :D Не верю... Седня вот разбираюсь с офф. серверами. Не так там все как в этом скрипте у Вас. Такой скрипт обновит все прекрасно с неофициального зеркальца какого-нить... Но с офф. серверов не получицца ничего у него.
Он даже не должен а он работает и исключительно с оффиц. серверами!!! Проверить проще всего, а не флудить в топике!
Он даже не должен а он работает и исключительно с оффиц. серверами!!! Проверить проще всего, а не флудить в топике!
Значит так. Разумеецца я проверил вначале, он не заработал. И насколько я понимаю.
1. Файл
http://login:pass@update.eset.com/eset_upd/update.ver не закрыт РАРом и для него не нужен логин/пароль.
2. В файле
http://login:pass@update.eset.com/eset_upd/update.ver лежит только список серверов и нет списка файлов обновления.
3. По адресу
http://login:pass@update.eset.com вообще нет файлов обновлений и взять их поэтому там неоткуда.
А теперь как надо делать, насколько я понимаю.
1. Читаем из http://update.eset.com/eset_upd/update.ver список текущих серверов обновлений.
2. Последовательно перебираем полученный список на предмет появления нового файла update.ver.
3. Если таковой найден, то загружаем (только здесь при загрузке нужен заветный логин и пароль) с этого сервера файлы по списку из update.ver (вот тут уже не забыть его разРАРить) новее чем у нас есть. (Например если update.ver получен с сервера http://u21.eset.com/eset_upd/, то файлики по списку будут по адресу http://u21.eset.com/ а дальше структура берется из поля file=)
Если ошибаюсь, можете меня поправить. Отправить куда подальше проще простого.
oxygen121
29-04-2008, 19:39
Значит так. Разумеецца я проверил вначале, он не заработал. И насколько я понимаю.
1. Файл
http://login:pass@update.eset.com/eset_upd/update.ver не закрыт РАРом и для него не нужен логин/пароль.
2. В файле
http://login:pass@update.eset.com/eset_upd/update.ver лежит только список серверов и нет списка файлов обновления.
3. По адресу
http://login:pass@update.eset.com вообще нет файлов обновлений и взять их поэтому там неоткуда.
А теперь как надо делать, насколько я понимаю.
1. Читаем из http://update.eset.com/eset_upd/update.ver список текущих серверов обновлений.
2. Последовательно перебираем полученный список на предмет появления нового файла update.ver.
3. Если таковой найден, то загружаем (только здесь при загрузке нужен заветный логин и пароль) с этого сервера файлы по списку из update.ver (вот тут уже не забыть его разРАРить) новее чем у нас есть. (Например если update.ver получен с сервера http://u21.eset.com/eset_upd/, то файлики по списку будут по адресу http://u21.eset.com/ а дальше структура берется из поля file=)
Если ошибаюсь, можете меня поправить. Отправить куда подальше проще простого.
Хм. Да извиняюсь на серверах есета произошли именения (неделю назад работало) , если в скрипте поменять вместо update.eset.com
например на u21.eset.com то апдейты пойдут.
Седня ночька свободная есть... Я добью скриптик до ума... Перебор серверов сделаю... Но меня вот что волнует. Возможен такой момент, когда update.ver обновился, а файлик обновления новый не смог... Ну проблемы у провайдера, к примеру. Или когда кто-то обновляется с локальной машины в тот момент когда зеркало обновляется с сервера... В общем ничего хорошего это не сулит. Вопрос как изящнее эту проблему порешать. Что-то именно изящного решения не приходит в голову, а выеживацца сильно не хочецца.
Может как-нить придумать скачивание файла по таймауту?
(что бы на off серваках работало :) )
DarkTwin
29-04-2008, 20:47
YAG Приятно видеть что и тут про мое зеркало и сайт знают :D
Но это так...
Может тебе поможет вот это
update.php:
#!/usr/local/bin/php
<?php
define("DEFAULT_SAVE_PATH","/home/www/nod32upd/public_html/");
$servers = array(
array('host'=>'http://nod.madbadjack.com/','savepath'=>DEFAULT_SAVE_PATH."/nod_upd/"),
array('host'=>'http://nod3.madbadjack.com/')
//,array('host'=>'http://nod3.madbadjack.com/','user'=>'admin','password'=>'11111')
);
/**
* Quick & Dirty Script to manage NOD 32 Updates
*
* @author Kode
* @email kode@airnet.ru
* @version 1.1
*
*/
ini_set("display_errors",0);
ini_set("user_agent","WGET");
include("functions.php");
$start = microtime(true);
foreach ($servers as $server){
if(!isset($server['savepath'])){
$server['savepath'] = DEFAULT_SAVE_PATH;
}
if(file_exists($server['savepath']."update.ver"))
$current_db = parseDB(file_get_contents($server['savepath']."update.ver"));
echo "Checking {$server['host']}\n";
$updatedb = parseDB(getHTTPFile($server['host'],"update.ver","",@$server['user'],@$server['password']));
if(!$updatedb){
echo "Invalid server!\n";
continue;
}
foreach ($updatedb as $section=>$vars){
echo "Checking {$section} ({$vars['file']},".@$vars['date'].")\n";
if(!isset($current_db) or ((@$current_db[$section]['versionid'] < @$vars['versionid'] ) or (@$current_db[$section]['build'] < @$vars['build']))){
echo "Obtaining {$vars['file']} (size: {$vars['size']}, verison: {$vars['date']})\n";
getHTTPFile($server['host'],$vars['file'],$server['savepath'].$vars['file'],@$server['user'],@$server['password']);
$current_db[$section] = $vars;
}else{
echo "Also have rather version\n";
}
}
echo "Generation new update.ver\n";
$new_db = createDB($current_db);
echo "Saving new update.ver\n";
file_put_contents($server['savepath']."update.ver",$new_db);
}
echo "Execution time ",round(microtime(true)-$start,4)," sec.";
?>
functions.php
<?php
if(!function_exists("file_put_contents")){
/**
* file_put_contents PHP4 replace
*
* @param string $file
* @param string $data
* @return boolean
*/
function file_put_contents($file,$data){
$fp = fopen($file,"w");
if(!$fp){
return false;
}
fwrite($fp,$data);
fclose($fp);
return true;
}
}
if(!function_exists("file_get_contents")){
/**
* file_put_contents PHP4 replace
*
* @param string $file
* @return mixed
*/
function file_get_contents($file){
$fp = fopen($file,"r");
if(!$fp){
return false;
}
$result = "";
while (!feof($fp)) {
$result .= fread($fp,1024);
}
fclose($fp);
return $result;
}
}
/**
* parses update.ver
*
* @param string $db
* @return array
*/
function parseDB($db){
$result = array();
$last_section = "";
$lines = explode("\n",$db);
foreach ($lines as $line){
$line = trim($line);
if(!empty($line)){
if(@$line[0] == "[" and $line[strlen($line)-1]=="]"){
$last_section = trim($line,"[]");
$result[$last_section] = array();
}else{
@list($var,$val) = explode("=",$line);
$result[$last_section][$var] = $val;
}
}
}
return $result;
}
/**
* Creates update.ver from array
*
* @param unknown_type $arr
* @return unknown
*/
function createDB($arr){
$return = "";
foreach ($arr as $section=>$params){
$return .= "[{$section}]\n";
foreach ($params as $key=>$value){
$return .= "{$key}={$value}\n";
}
}
return $return;
}
/**
* Small function to help parse HTTP Headers
*
* @param unknown_type $array
* @return unknown
*/
function parseHeader($array){
$result = array();
foreach ($array as $value){
if(substr_count($value,":")){
$data = explode(":",$value);
$result[trim($data[0])] = trim($data[1]);
}
}
return $result;
}
/**
* Downloads file from given host
*
* @param string $host HTTP Host
* @param string $file File on host to download
* @param string $save If not empty - save to file
* @param string $user HTTP Auth User
* @param string $password HTTP Auth Password
* @return mixed
*/
function getHTTPFile($host,$file,$save="",$user="",$password=""){
$host = trim(str_replace("http://","",$host),"/");
$data = "";
$last_percent = 0;
$user_password = ($user)?"$user".(($password)?":{$password}":"")."@":"";
$open_url = "http://{$user_password}{$host}/{$file}";
$fp = fopen($open_url,"r",false,stream_context_create(array('http'=>array('user_agent'=>'WGET'))));
if($fp){
if($save){
echo "Creating file {$save}\n";
$sp = fopen($save,"w+",false,stream_context_create(array('ftp' => array('overwrite' => true))));
if(!$sp){
echo "Error: Failed to create file!!!\n"; return false;
}
}
echo "Downloading {$open_url}: ";
$params = stream_get_meta_data($fp);
$params = parseHeader($params['wrapper_data']);
$length = $params['Content-Length'];
while (!feof($fp)) {
$percent = round(ftell($fp)/$length*100);
if($last_percent < $percent and $percent%10==0){
$last_percent = $percent;
echo "...{$percent}%";
}
if(!isset($sp)){
$data .= fread($fp,128);
}else{
fwrite($sp,fread($fp,128));
}
}
echo "...OK \n";
}else{
echo "Failed to download {$open_url}!!!\n";
}
fclose($fp);
if(!$save){
return $data;
}
fclose($sp);
}
?>
Впринципе может работать и из браузера, только необходимо убрать
#!/usr/local/bin/php в начале update.php
Для использования из консоли не забудьте сделать chmod a+x update.php и поставить верный путь до php (можно узнать через whereis php)
Обязательно исправьте DEFAULT_SAVE_PATH - поставьте директорию куда будут качатся обновления
Плюсы:
+ Поддерживает несколько серверов
+ Скачивает только более новые файлы
+ Можно обновлять как из браузера так и через консоль/cron
+ Работает как под *nix так и под Windows, нужен только php
+ Можно сразу заливать на FTP, надо лишь указать DEFAULT_SAVE_PATH_DIR например так ftp://admin:12345@myserver.ru/nod32upd/ (не тестировалось)
+ Гибкая настройка что куда сохранять, те для различных серверов можно указать различные папки
+ Теоретически работает на >= PHP 4.3.0
Минусы
- Нужен PHP c allow_url_fopen = On
Взято как не трудно догадаться тут (http://madbadjack.com/forum/showthread.php?t=2783) автор Kode
DarkTwin, у куда писать логин/пасс от офф серваков?
DarkTwin
29-04-2008, 21:09
DarkTwin, у куда писать логин/пасс от офф серваков?
//,array('host'=>'http://nod3.madbadjack.com/','user'=>'admin','password'=>'11111')
раскоментировать и поставить то что нужно
это в update.php
это в update.php
Спасибо, просто беглым взглядом пропустил верхушку :)
Меня вот пугают ошибки:
Checking http://nod.madbadjack.com/ Downloading http://nod.madbadjack.com/update.ver: ...10%...40%...50%...60%...70%...OK Checking ENGINE0 (engine0.nup,02.01.2008) Obtaining engine0.nup (size: 8198935, verison: 02.01.2008) Creating file /tmp/harddisk/www/nod32upd//nod_upd/engine0.nup Error: Failed to create file!!! Checking ENGINE1 (engine1.nup,18.04.2008) Obtaining engine1.nup (size: 1387731, verison: 18.04.2008) Creating file /tmp/harddisk/www/nod32upd//nod_upd/engine1.nup Error: Failed to create file!!! Checking ENGINE2 (engine2.nup,29.04.2008) Obtaining engine2.nup (size: 61130, verison: 29.04.2008) Creating file /tmp/harddisk/www/nod32upd//nod_upd/engine2.nup Error: Failed to create file!!! Checking ARCHS0 (archs0.nup,29.02.2008) Obtaining archs0.nup (size: 214149, verison: 29.02.2008) Creating file /tmp/harddisk/www/nod32upd//nod_upd/archs0.nup Error: Failed to create file!!! Checking ARCHS1 (archs1.nup,07.03.2008) Obtaining archs1.nup (size: 7763, verison: 07.03.2008) Creating file /tmp/harddisk/www/nod32upd//nod_upd/archs1.nup Error: Failed to create file!!! Checking ARCHS2 (archs2.nup,22.04.2008) Obtaining archs2.nup (size: 39951, verison: 22.04.2008) Creating file /tmp/harddisk/www/nod32upd//nod_upd/archs2.nup Error: Failed to create file!!! Checking ADVHEUR0 (advheur0.nup,16.01.2008) Obtaining advheur0.nup (size: 429384, verison: 16.01.2008) Creating file /tmp/harddisk/www/nod32upd//nod_upd/advheur0.nup Error: Failed to create file!!! Checking ADVHEUR1 (advheur1.nup,12.02.2008) Obtaining advheur1.nup (size: 28945, verison: 12.02.2008) Creating file /tmp/harddisk/www/nod32upd//nod_upd/advheur1.nup Error: Failed to create file!!! Checking PWSCAN0 (pwscan0.nup,21.10.2003) Obtaining pwscan0.nup (size: 4140, verison: 21.10.2003) Creating file /tmp/harddisk/www/nod32upd//nod_upd/pwscan0.nup Error: Failed to create file!!! Checking PWSCAN1 (pwscan1.nup,21.10.2003) Obtaining pwscan1.nup (size: 864, verison: 21.10.2003) Creating file /tmp/harddisk/www/nod32upd//nod_upd/pwscan1.nup Error: Failed to create file!!! Checking PWSCAN2 (pwscan2.nup,04.11.2003) Obtaining pwscan2.nup (size: 1347, verison: 04.11.2003) Creating file /tmp/harddisk/www/nod32upd//nod_upd/pwscan2.nup Error: Failed to create file!!! Checking UTILMOD0 (utilmod0.nup,12.07.2006) Obtaining utilmod0.nup (size: 23017, verison: 12.07.2006) Creating file /tmp/harddisk/www/nod32upd//nod_upd/utilmod0.nup Error: Failed to create file!!! Checking UTILMOD1 (utilmod1.nup,29.01.2008) Obtaining utilmod1.nup (size: 9472, verison: 29.01.2008) Creating file /tmp/harddisk/www/nod32upd//nod_upd/utilmod1.nup Error: Failed to create file!!! Checking UTILMOD2 (utilmod2.nup,15.04.2008) Obtaining utilmod2.nup (size: 4459, verison: 15.04.2008) Creating file /tmp/harddisk/www/nod32upd//nod_upd/utilmod2.nup Error: Failed to create file!!! Checking CHARON0 (charon0.nup,20.07.2006) Obtaining charon0.nup (size: 6090, verison: 20.07.2006) Creating file /tmp/harddisk/www/nod32upd//nod_upd/charon0.nup Error: Failed to create file!!! Checking CHARON1 (charon1.nup,08.09.2006) Obtaining charon1.nup (size: 874, verison: 08.09.2006) Creating file /tmp/harddisk/www/nod32upd//nod_upd/charon1.nup Error: Failed to create file!!! Checking CHARON2 (charon2.nup,10.09.2007) Obtaining charon2.nup (size: 944, verison: 10.09.2007) Creating file /tmp/harddisk/www/nod32upd//nod_upd/charon2.nup Error: Failed to create file!!! Checking NOD32MOD_WINNT_ENGLISH_BASE (ntbaseen.nup,11.05.2007) Obtaining ntbaseen.nup (size: 2161903, verison: 11.05.2007) Creating file /tmp/harddisk/www/nod32upd//nod_upd/ntbaseen.nup Error: Failed to create file!!! Checking NOD32MOD_WIN98_ENGLISH_BASE (98baseen.nup,11.05.2007) Obtaining 98baseen.nup (size: 2115516, verison: 11.05.2007) Creating file /tmp/harddisk/www/nod32upd//nod_upd/98baseen.nup Error: Failed to create file!!! Checking NOD32MOD_WINNT_RUSSIAN_BASE (ntbaseru.nup,11.05.2007) Obtaining ntbaseru.nup (size: 2279586, verison: 11.05.2007)
DarkTwin
29-04-2008, 21:19
Спасибо, просто беглым взглядом пропустил верхушку :)
Меня вот пугают ошибки:
Checking http://nod.madbadjack.com/ Downloading http://nod.madbadjack.com/update.ver: ...10%...40%...50%...60%...70%...OK Checking ENGINE0 (engine0.nup,02.01.2008) Obtaining engine0.nup (size: 8198935, verison: 02.01.2008) Creating file /tmp/harddisk/www/nod32upd//nod_upd/engine0.nup Error: Failed to create file!!! Checking ENGINE1 (engine1.nup,18.04.2008) Obtaining engine1.nup (size: 1387731, verison: 18.04.2008) Creating file /tmp/harddisk/www/nod32upd//nod_upd/engine1.nup Error: Failed to create file!!! Checking ENGINE2 (engine2.nup,29.04.2008) Obtaining engine2.nup (size: 61130, verison: 29.04.2008) Creating file /tmp/harddisk/www/nod32upd//nod_upd/engine2.nup Error: Failed to create file!!! Checking ARCHS0 (archs0.nup,29.02.2008) Obtaining archs0.nup (size: 214149, verison: 29.02.2008) Creating file /tmp/harddisk/www/nod32upd//nod_upd/archs0.nup Error: Failed to create file!!! Checking ARCHS1 (archs1.nup,07.03.2008) Obtaining archs1.nup (size: 7763, verison: 07.03.2008) Creating file /tmp/harddisk/www/nod32upd//nod_upd/archs1.nup Error: Failed to create file!!! Checking ARCHS2 (archs2.nup,22.04.2008) Obtaining archs2.nup (size: 39951, verison: 22.04.2008) Creating file /tmp/harddisk/www/nod32upd//nod_upd/archs2.nup Error: Failed to create file!!! Checking ADVHEUR0 (advheur0.nup,16.01.2008) Obtaining advheur0.nup (size: 429384, verison: 16.01.2008) Creating file /tmp/harddisk/www/nod32upd//nod_upd/advheur0.nup Error: Failed to create file!!! Checking ADVHEUR1 (advheur1.nup,12.02.2008) Obtaining advheur1.nup (size: 28945, verison: 12.02.2008) Creating file /tmp/harddisk/www/nod32upd//nod_upd/advheur1.nup Error: Failed to create file!!! Checking PWSCAN0 (pwscan0.nup,21.10.2003) Obtaining pwscan0.nup (size: 4140, verison: 21.10.2003) Creating file /tmp/harddisk/www/nod32upd//nod_upd/pwscan0.nup Error: Failed to create file!!! Checking PWSCAN1 (pwscan1.nup,21.10.2003) Obtaining pwscan1.nup (size: 864, verison: 21.10.2003) Creating file /tmp/harddisk/www/nod32upd//nod_upd/pwscan1.nup Error: Failed to create file!!! Checking PWSCAN2 (pwscan2.nup,04.11.2003) Obtaining pwscan2.nup (size: 1347, verison: 04.11.2003) Creating file /tmp/harddisk/www/nod32upd//nod_upd/pwscan2.nup Error: Failed to create file!!! Checking UTILMOD0 (utilmod0.nup,12.07.2006) Obtaining utilmod0.nup (size: 23017, verison: 12.07.2006) Creating file /tmp/harddisk/www/nod32upd//nod_upd/utilmod0.nup Error: Failed to create file!!! Checking UTILMOD1 (utilmod1.nup,29.01.2008) Obtaining utilmod1.nup (size: 9472, verison: 29.01.2008) Creating file /tmp/harddisk/www/nod32upd//nod_upd/utilmod1.nup Error: Failed to create file!!! Checking UTILMOD2 (utilmod2.nup,15.04.2008) Obtaining utilmod2.nup (size: 4459, verison: 15.04.2008) Creating file /tmp/harddisk/www/nod32upd//nod_upd/utilmod2.nup Error: Failed to create file!!! Checking CHARON0 (charon0.nup,20.07.2006) Obtaining charon0.nup (size: 6090, verison: 20.07.2006) Creating file /tmp/harddisk/www/nod32upd//nod_upd/charon0.nup Error: Failed to create file!!! Checking CHARON1 (charon1.nup,08.09.2006) Obtaining charon1.nup (size: 874, verison: 08.09.2006) Creating file /tmp/harddisk/www/nod32upd//nod_upd/charon1.nup Error: Failed to create file!!! Checking CHARON2 (charon2.nup,10.09.2007) Obtaining charon2.nup (size: 944, verison: 10.09.2007) Creating file /tmp/harddisk/www/nod32upd//nod_upd/charon2.nup Error: Failed to create file!!! Checking NOD32MOD_WINNT_ENGLISH_BASE (ntbaseen.nup,11.05.2007) Obtaining ntbaseen.nup (size: 2161903, verison: 11.05.2007) Creating file /tmp/harddisk/www/nod32upd//nod_upd/ntbaseen.nup Error: Failed to create file!!! Checking NOD32MOD_WIN98_ENGLISH_BASE (98baseen.nup,11.05.2007) Obtaining 98baseen.nup (size: 2115516, verison: 11.05.2007) Creating file /tmp/harddisk/www/nod32upd//nod_upd/98baseen.nup Error: Failed to create file!!! Checking NOD32MOD_WINNT_RUSSIAN_BASE (ntbaseru.nup,11.05.2007) Obtaining ntbaseru.nup (size: 2279586, verison: 11.05.2007)
А точно есть разрешение на запись то ?
А точно есть разрешение на запись то ?
да, 15,5 метров скачано
DarkTwin
29-04-2008, 21:38
да, 15,5 метров скачано
а должно быть почти 32 метра. какие файлы скачались ?
Затрудняюсь прямо сейчас ответить.
Я подумаю, а сейчас спать пора завтра (сегодня уже) на работу
DarkTwin, конечно знаю я про зеркало Ваше и про сайт и про форум. Ну и конечно же про тот скрипт тоже знаю. Давно причем. Форум полезный, зеркала тоже, жаль забанили их пару недель назад... Собственно поэтому и начал делать свое зеркало на роутере, потому что хорошие зеркала либо банят, либо умирают они быстро. Решения проблем с баном конечно тоже знаю. Не устраивают меня они. Решил написать скриптик для зеркала под понятно какую железку. Понятно что такое зеркальце не забанят ввиду того, что знать про него будут не многие. Тот скрипт, что у Вас не устраивает по ряду причин. Как показала практика требует доведения в каждом конкретном случае, да и др. минусы имеет. Хотя написан грамотно, тут не поспоришь. Выкладываю то что сваял для обновления с официального сервера. Кое что кривовато пока, но в целом работоспособно. В общем-то дорабатывать дальше можно только преобразование файла update.ver, поскольку я раскладываю файлы по папкам так как они лежат на оф. серверах, а update.ver оставляю как есть. Ну и дорабатывать по хорошему нужно контроль за ошибками во время скачивания.
#!/bin/sh
WEB_ROOT=/opt/share/www #путь к корневой папке домена, где будет лежать зеркало
AVBASE_DIR=nod_off #имя папки, куда будут валиться базы
SERVER=http://update.eset.com #сервер, откуда обновляемся
USER=EAV-********
PASS=**********
cd $WEB_ROOT
mkdir -p $WEB_ROOT/$AVBASE_DIR
/opt/bin/wget -N --cache=off $SERVER/eset_upd/update.ver
SERVERS=`grep Other= $WEB_ROOT/update.ver|sed s/Other=//|tr -d "\r"|sed s/,/'\n'/g|sed s/^.*@//|sed s/eset_upd//`
rm $WEB_ROOT/update.ver
cd $WEB_ROOT/$AVBASE_DIR
for UPDSERVERS in $SERVERS; do
rm log.txt
/opt/bin/wget -a log.txt -N --cache=off $UPDSERVERS/eset_upd/update.ver
if grep saved log.txt; then
mv -f update.ver update.rar
/opt/bin/unrar x -y update.rar
FILES=`grep file= $WEB_ROOT/$AVBASE_DIR/update.ver|sed s/file=//|tr -d "\r"`
rm update.ver
cd $WEB_ROOT
for UPDFILES in $FILES; do
/opt/bin/wget -xnH -N --cache=off --http-user=$USER --password=$PASS $UPDSERVERS/$UPDFILES
done
cd $WEB_ROOT/$AVBASE_DIR
mv -f update.rar update.ver
fi
done
rm log.txt
DarkTwin
30-04-2008, 05:18
Я не особо вчитывался но это разве не просто копирование с зеркала в локальную папку ?
Простите, а что еще по большому счету надо от процесса создания зеркала? Просто нужно знать что куда и как копировать, а точнее не знать, а смотреть в соответствующих местах...
Скрипт, который разместил YAG качает обновы только на третью версию, а вот как заставить на вторую?
По логике заменил путь на вторую версию, но там update.ver в запакованном виде, получается, нужно как-то заставить его распаковаться и использовать.
#!/bin/sh
WEB_ROOT=/tmp/harddisk/www
AVBASE_DIR=nod_upd
SERVER=http://update.eset.com
USER=**********
PASS=********
cd $WEB_ROOT
mkdir -p $WEB_ROOT/$AVBASE_DIR
/opt/bin/wget -N --cache=off $SERVER/nod_upd/update.ver
SERVERS=`grep Other= $WEB_ROOT/update.ver|sed s/Other=//|tr -d "\r"|sed s/,/'\n'/g|sed s/^.*@//|sed s/nod_upd//`
rm $WEB_ROOT/update.ver
cd $WEB_ROOT/$AVBASE_DIR
for UPDSERVERS in $SERVERS; do
rm log.txt
/opt/bin/wget -a log.txt -N --cache=off $UPDSERVERS/nod_upd/update.ver
if grep saved log.txt; then
mv -f update.ver update.rar
/opt/bin/unrar x -y update.rar
FILES=`grep file= $WEB_ROOT/$AVBASE_DIR/update.ver|sed s/file=//|tr -d "\r"`
rm update.ver
cd $WEB_ROOT
for UPDFILES in $FILES; do
/opt/bin/wget -xnH -N --cache=off --http-user=$USER --password=$PASS $UPDSERVERS/$UPDFILES
done
cd $WEB_ROOT/$AVBASE_DIR
mv -f update.rar update.ver
fi
done
rm log.txt
Щас как раз занят тем чтобы сделать универсальный скриптик на любую версию. Уже заканчиваю. А потом сделаю чтоб переделывался update.ver для того чтобы удобно можно было раскладывать по папкам, а не так, как лежит на официальных серверах.
Щас как раз занят тем чтобы сделать универсальный скриптик на любую версию. Уже заканчиваю. А потом сделаю чтоб переделывался update.ver для того чтобы удобно можно было раскладывать по папкам, а не так, как лежит на официальных серверах.
А может 2 версии?
1. как Вы хотите раскладывать
2. как на офф серваках
Вот универсальный скриптик для второй и третьей версии. Пофиксено много мелких багов. Теперь будет побыстрее оббегать сервера.
#!/bin/sh
WEB_ROOT=/opt/share/www #путь к корневой папке домена, где будет лежать зеркало
AVBASE_DIR=nod #имя папки, куда будут валиться базы
SERVER=http://update.eset.com #сервер, откуда обновляемся
DIR=nod_upd #Раскоментировать если нужно зеркало для версии 2
#DIR=eset_upd #Раскоментировать если нужно зеркало для версии 3 или ESS
USER=EAV-********
PASS=**********
cd $WEB_ROOT
mkdir -p $WEB_ROOT/$AVBASE_DIR
/opt/bin/wget -N --cache=off $SERVER/$DIR/update.ver
mv -f update.ver update.rar
/opt/bin/unrar x -y update.rar
if [ ! -f "update.ver" ]; then
mv -f update.rar update.ver
fi
SERVERS=$SERVER" "`grep Other= $WEB_ROOT/update.ver|sed s/Other=//|tr -d "\r"|sed s/,/'\n'/g|sed s/^.*@//|sed s/$DIR//`
rm -f $WEB_ROOT/update.ver
rm -f $WEB_ROOT/update.rar
cd $WEB_ROOT/$AVBASE_DIR
rm -f log.txt
for UPDSERVERS in $SERVERS; do
cp -f -p update.ver update.old
/opt/bin/wget -a log.txt -N --cache=off $UPDSERVERS/$DIR/update.ver
if [ "update.ver" -nt "update.old" ]; then
mv -f update.ver update.rar
/opt/bin/unrar x -y update.rar
if [ ! -f "update.ver" ]; then
cp -f -p update.rar update.ver
fi
FILES=`grep file= $WEB_ROOT/$AVBASE_DIR/update.ver|sed s/file=//|tr -d "\r"`
rm -f update.ver
cd $WEB_ROOT
for UPDFILES in $FILES; do
/opt/bin/wget -a $WEB_ROOT/$AVBASE_DIR/log.txt -xnH -N --cache=off --http-user=$USER --password=$PASS $UPDSERVERS/$UPDFILES
done
cd $WEB_ROOT/$AVBASE_DIR
mv -f update.rar update.ver
else cp -f -p update.old update.ver
fi
rm -f update.old
done
1. Непосредственно файлы обновлений валяцца так же как на официальных серверах, т.е. в несколько папок в корень домена.
2. В папку, которая указываецца вначале скрипта валицца только один файлик update.ver, но именно эта папка будет зеркалом. Еще там лежит файлик log.txt с логами последнего обновления формируемый wget'ом.
Так устроены официальные сервера ESET с обновлениями. ИМХО для зеркала это неудобно, поэтому на днях переделаю чтобы валилось все в одну папку и переписывался файлик update.ver
Быстро не получаецца, поскольку в линухе я чайник полнейший...
Какие будут еще предложения, замечания?
Вот универсальный скриптик для второй и третьей версии. Пофиксено много мелких багов. Теперь будет побыстрее оббегать сервера.
1. Непосредственно файлы обновлений валяцца так же как на официальных серверах, т.е. в несколько папок в корень домена.
2. В папку, которая указываецца вначале скрипта валицца только один файлик update.ver, но именно эта папка будет зеркалом. Еще там лежит файлик log.txt с логами последнего обновления формируемый wget'ом.
Так устроены официальные сервера ESET с обновлениями. ИМХО для зеркала это неудобно, поэтому на днях переделаю чтобы валилось все в одну папку и переписывался файлик update.ver
Быстро не получаецца, поскольку в линухе я чайник полнейший...
Какие будут еще предложения, замечания?
Может переменные сделать как DIR1 и DIR2 ?
И ещё, хотелось бы, что бы при загрузке файлов показывался процесс (если вручную запускать).
Про чайника Вы не правы (чайник ничего такого бы не сделал) :)
Может переменные сделать как DIR1 и DIR2 ?
И ещё, хотелось бы, что бы при загрузке файлов показывался процесс (если вручную запускать).
Про чайника Вы не правы (чайник ничего такого бы не сделал) :)
Вручную запускать смысла не вижу (в ХРОНе замечательно работает), поэтому при ручном запуске ничего почти и не отображаецца, но все можно хорошо прослеживать, если интересно, по файлу log.txt. Две переменных тоже смысла не вижу. Если нужно два зеркала, то в ХРОН кладуцца два файлика просто для разных версий вот и все.
Вручную запускать смысла не вижу (в ХРОНе замечательно работает), поэтому при ручном запуске ничего почти и не отображаецца, но все можно хорошо прослеживать, если интересно, по файлу log.txt. Две переменных тоже смысла не вижу. Если нужно два зеркала, то в ХРОН кладуцца два файлика просто для разных версий вот и все.
Впринципе логично, а я что-то ступил :)
Раскомментил оба параметра
DIR=nod_upd #Раскоментировать если нужно зеркало для версии 2
DIR=eset_upd #Раскоментировать если нужно зеркало для версии 3 или ESS
P.S.
Может ещё и зеркало на каспера сделаете? :)
DarkTwin
01-05-2008, 18:49
ага
а так же на drweb, AVZ :)
вам нужен в таком случае Вьювер (http://madbadjack.com/forum/showthread.php?t=181&page=71)
к стати не оба сразу раскоментировать имелось ввиду наверное, а сделать два файла . один для v2 второй v3 и в кроне запускать их оба. соответственно получится 2 зеркала
YAG по поводу mod_compat.mod я вам ответил, точнее написал у кого спросить (Смотрим тут (http://madbadjack.com/forum/showthread.php?t=5112)). Если хотите то могу дать его аську
Если вы не против то я ваш скрипт опубликую у себя от вашего имени, либо сделайте это сами
ага
а так же на drweb, AVZ :)
вам нужен в таком случае Вьювер (http://madbadjack.com/forum/showthread.php?t=181&page=71)
к стати не оба сразу раскоментировать имелось ввиду наверное, а сделать два файла . один для v2 второй v3 и в кроне запускать их оба. соответственно получится 2 зеркала
Угу, не помешает :)
а вот вьювер на роутер низя поставить :)
Ну там же небыло сказано, там написано,
Раскоментировать если нужно зеркало для версии ***
да, нужно, вот и раскомментил :)
P.S.
Обнова на v2 & v3 почти 200 метров
DarkTwin
01-05-2008, 20:00
вообщето 43 метра :rolleyes:
вообщето 43 метра :rolleyes:
ну тогда не знаю :)
У меня вплоть до жапанеса всё выкачалось
по пути:
download/win/v2
123 файла, ~ рамер 162 Mb
DarkTwin, я не против чтоб выложить, только попозже. Еще тестю и исправляю баги всякие мелкие. Только что вот еще парочка обнаружилась. 200 метров... Говорю же разгребать надо update.ver. 200 метров потому что там все, что только можно для всех версий и языков. Это все не здорово. По-хорошему, это все нужно делать, чтоб настраивалось в скрипте.
ну тогда не знаю :)
У меня вплоть до жапанеса всё выкачалось
по пути:
download/win/v2
123 файла, ~ рамер 162 Mb
У меня вообще 214Мб :eek:
DarkTwin, я не против чтоб выложить, только попозже. Еще тестю и исправляю баги всякие мелкие. Только что вот еще парочка обнаружилась. 200 метров... Говорю же разгребать надо update.ver. 200 метров потому что там все, что только можно для всех версий и языков. Это все не здорово. По-хорошему, это все нужно делать, чтоб настраивалось в скрипте.
Хорошо что у меня анлим, но зря потраченный час вылупливания зенок в консоль :)
Хотя оффтопик.
Е ещё, может подскажите, как сделать так, что бы показывалось что скачивается?
DarkTwin
01-05-2008, 20:33
YAG
Список (http://madbadjack.com/forum/showthread.php?t=934)того что нужно для версии v2.. это Rus и En остальное не надо... ну ну если есть извращенцы которым нужен китайский или немецкий то тогда да :D
Для версии v3 в аттаче
Antosha по поводу того что показывать что делает... скрипт ориентирован для запуска из крона ->> визуализация отсутствует как жанр. Вы можете смотреть лог
У меня вообще 214Мб :eek:
Не может стока быть... Нет там стока просто.. Чуть меньше двухсот реально.
Antosha, если охота и дальше в консоль лупицца:D, то уберите у всех wget'ов -a log.txt. Логов не будет, будет все на экране.
Antosha, если охота и дальше в консоль лупицца:D, то уберите у всех wget'ов -a log.txt. Логов не будет, будет все на экране.
Спасибо! Люблю смотреть как циферки бегают (для отлова глюков).
Вот ещё один:
при успешном скачивании файлов с первого источника, скрипт проверяет и пытается (может быть) скачать с других источников.
DarkTwin, спасибо, конечно огромное. Я в курсе что надо, а что в принципе нет, просто не успеваю писать. )))) Говорю ж чайник... Разбираюсь потихоньку.
Antosha, проверяет нет ли на др. серверах новее, если нет, то ничего не пытается. Не буду это менять.
DarkTwin, подскажите плиз, что лежит в секциях где слова CONTINUOUS и REVERSE присутствуют, например [CONTINUOUS_ENGINE1].... [REVERSE_ENGINE0]....
DarkTwin
02-05-2008, 11:33
CONTINUOUS_* - обновление относительно промежуточных версий между ENGINE0 (очень экономит трафик если не делать зеркало).
REVERSE_* - откат (как не смешно).
вот в кратце:
ENGINE0 build=2705 ????->2705 size=9386936
ENGINE1 build=2707 2705->2707 size=2144
ENGINE2 build=2767 2707->2767 size=129303
[CONTINUOUS_ENGINE1] 2765->2767 size=3763
[CONTINUOUS_ENGINE2] 2763->2767 size=5655
[CONTINUOUS_ENGINE3] 2761->2767 size=6648
[CONTINUOUS_ENGINE4] 2759->2767 size=8215
[CONTINUOUS_ENGINE5] 2757->2767 size=9408
[CONTINUOUS_ENGINE6] 2755->2767 size=11159
[CONTINUOUS_ENGINE7] 2753->2767 size=84690
т.е. если сейчас ENGINE2 = 2761 тебе не обязательно качать ENGINE2 в 129303b, а достаточно CONTINUOUS_ENGINE3 в 6648b
но если тебе нужно зеркало, то качать придётся на много больше чем только ENGINE0-3
DarkTwin, тогда почему не включать это все в зеркало? Особенно если оно не только в локалке?
DarkTwin
02-05-2008, 19:11
это как говорится дело хозяйское. например из за большого размера и соответственно трафика
это как говорится дело хозяйское. например из за большого размера и соответственно трафика
Ну 1 раз-то высосать можно :)
это как говорится дело хозяйское. например из за большого размера и соответственно трафика
Ну из-за трафика это не серьезно, тем более, что трафик с лихвой окупицца, когда зеркало начнет отдавать юзверям эти маленькие континиусы, а не большие енджины... Разве не так?
Зато можно будет знакомых иностранцев обновлять :)
Ну а если без флуда - было бы замечательно указать какой язык выкачивать, типа раскомментил нужный и всё
Тестим... О замеченных багах сообщаем.
Теперь выкачивает только нужные языки. Складывает по человечески в папку указанную в начале скрипта. Оставил выкачивание так называемых инкрементных апдейтов, если можно так выразицца. ))) В принципе несложно сделать и это настраиваемым. Если надо, пишите. Так же можно сделать настраиваемым платформу (х86 х64) и пр. Я лично думаю это ни к чему поскольку это будет уже слишком индивидуальное зеркало.
#!/bin/sh
WEB_ROOT=/opt/share/www #путь к корневой папке домена, где будет лежать зеркало
AVBASE_DIR=nod3 #имя папки, куда будут валиться базы
SERVER=http://update.eset.com #сервер, откуда обновляемся
#DIR=nod_upd #Раскоментировать если нужно зеркало для версии 2
DIR=eset_upd #Раскоментировать если нужно зеркало для версии 3 или ESS
USER=EAV-********
PASS=**********
cd $WEB_ROOT
mkdir -p $WEB_ROOT/$AVBASE_DIR
/opt/bin/wget -N --cache=off -t 5 --connect-timeout=20 $SERVER/$DIR/update.ver
mv -f update.ver update.rar
/opt/bin/unrar x -y update.rar
if [ ! -f "update.ver" ]; then
mv -f update.rar update.ver
fi
SERVERS=$SERVER" "`grep Other= $WEB_ROOT/update.ver|sed s/Other=//|tr -d "\r"|sed s/,/'\n'/g|sed s/^.*@//|sed s/$DIR//|sed s/'\n'/' '/`
rm -f $WEB_ROOT/update.ver
rm -f $WEB_ROOT/update.rar
cd $WEB_ROOT/$AVBASE_DIR
rm -f log.txt
for UPDSERVERS in $SERVERS; do
cp -f -p update.ver update.old
/opt/bin/wget -a log.txt -N --cache=off -t 5 --connect-timeout=20 $UPDSERVERS/$DIR/update.ver
if [ "update.ver" -nt "update.old" ]; then
mv -f update.ver update.rar
/opt/bin/unrar x -y update.rar
if [ ! -f "update.ver" ]; then
cp -f -p update.rar update.ver
fi
IFS=[
for section in `cat $WEB_ROOT/$AVBASE_DIR/update.ver|sed '1s/\[//;s/^ *//'|grep -v '^#'|grep -v '^$'`; do
################################################## ##########################
# ЗАКОМЕНТИРОВАТЬ далее НУЖНЫЕ языки #
sect=$(echo $section|sed 's/^.*_CZECH_.*]/DELETE]/') # Чешский
# sect=$(echo $sect|sed 's/^.*_ENGLISH_.*]/DELETE]/') # Английский
sect=$(echo $sect|sed 's/^.*_FRENCH_.*]/DELETE]/') # Французкий
sect=$(echo $sect|sed 's/^.*_GERMAN_.*]/DELETE]/') # Немецкий
sect=$(echo $sect|sed 's/^.*_ITALIAN_.*]/DELETE]/') # Итальянский
sect=$(echo $sect|sed 's/^.*_JAPANESE_.*]/DELETE]/') # Японский
sect=$(echo $sect|sed 's/^.*_POLISH_.*]/DELETE]/') # Польский
sect=$(echo $sect|sed 's/^.*_PORTUGUESE_.*]/DELETE]/') # Португальский
sect=$(echo $sect|sed 's/^.*_SLOVAK_.*]/DELETE]/') # Словацкий
sect=$(echo $sect|sed 's/^.*_SPANISH_.*]/DELETE]/') # Испанский
sect=$(echo $sect|sed 's/^.*_CROATIAN_.*]/DELETE]/') # Хорватский
sect=$(echo $sect|sed 's/^.*_HUNGARIAN_.*]/DELETE]/') # Венгерский
sect=$(echo $sect|sed 's/^.*_CHINESE_.*]/DELETE]/') # Китайский
sect=$(echo $sect|sed 's/^.*_DUTCH_.*]/DELETE]/') # Датский
################################################## ############################
sect=$(echo $sect|sed 's/^VER]/DELETE]/;s/^HOSTS]/DELETE]/;s/^Expire]/DELETE]/;s/^SETUP]/DELETE]/;s/^COMPATLIST]/DELETE]/;s/^data0001]/DELETE]/')
if [ -z $(echo $sect|grep '^DELETE]') ]; then
eval $(echo $sect|tr -d "\r"|grep 'file='|sed 's/ *=/=/;s/= */=/')
/opt/bin/wget -a $WEB_ROOT/$AVBASE_DIR/log.txt -N --cache=off -t 5 --connect-timeout=20 --http-user=$USER --password=$PASS $UPDSERVERS/$file
echo [$(echo $sect|sed 's/file=.*\//file=/') >> update.new
fi
done
IFS=' '
rm -f update.ver
mv -f update.new update.ver
touch -am -r update.rar update.ver
else
cp -f -p update.old update.ver
fi
rm -f update.rar
rm -f update.old
done
Кстати, не увидел на сервере в настоящее время каких-нибудь файлов для русского языка, поэтому и не вносил его в настройки.
Antosha, обращаю Ваше внимание, что нужный язык надо ЗАКОМЕНТИТЬ, а не раскоментить. :-)
Не может стока быть... Нет там стока просто.. Чуть меньше двухсот реально.
Это для 2й версии, и скрипт у мну другой - на ФРЕ.
Вопросик: твой скрипт каждый раз полностью базу тянет, или докачивает только изменившиеся файлы? Просто мой только изменения тянет.
DarkTwin
03-05-2008, 11:01
/opt/bin/wget
у меня говорит что файл не найден
/opt/bin/wget
у меня говорит что файл не найден
Проверить физическое наличие файла, chmod, переставить/обновить wget
Кстати, не увидел на сервере в настоящее время каких-нибудь файлов для русского языка, поэтому и не вносил его в настройки.
Antosha, обращаю Ваше внимание, что нужный язык надо ЗАКОМЕНТИТЬ, а не раскоментить. :-)
Спасибо за подчёркивание :)
Пока что я без роутера (в ремонт после дождичка :( -1 LAN порт). И без винта (мамка разбила, случайно :( )
/opt/bin/wget
у меня говорит что файл не найден
Пробуем лечить так.
ipkg update
ipkg install wget
Или попробуйте поменять путь на /usr/bin/wget
Я внешний wget использовал, хотя, может быть и незачем это.
Antosha, сочувствую... Незнаю как жить без роутера. ))
Вопросик: твой скрипт каждый раз полностью базу тянет, или докачивает только изменившиеся файлы? Просто мой только изменения тянет.
Изменившиеся. А 214 у Вас потому что осталось когда-то скачанное то, чего щас уже на серваках нет, например эти файлы для русского языка...
DarkTwin
03-05-2008, 13:29
/usr/bin/wget точно в usr :)
Просто если путь выкидывать и оставлять только wget, то из ХРОНа не работает... Вот...
YAG
Спасибо большое за проделанную работу! Сам раньше использовал скрипт на PHP выложенный в начале темы уважаемым Mamon. Только немного доработал его, сделав перебор паролей по списку. То есть в отдельный файлик можно было накидать сразу штук двадцать логинов и паролей, и как только текущий логин/пароль блокировались, то они удалялись из списка и брались следующие. Как только весь список пустел, то на мой почтовый адрес высылалось письмо с напоминанием пополнить список паролей. К сожалению данный скрипт перестал работать с третьей версией антивируса. Можно ли здесь сделать что-то подобное в вашем скрипте?
Непонятны еще несколько моментов:
1. Зачем, если логин и пароль неверны, обходить все сервера Eset?
2. Расскоментировал обе строчки, чтобы зеркала создавались для второй и третьей версии, но создается только для 3 и самих файлов обновлений в папке нет, только log.txt и update.ver. Соответственно обновления не происходит. Что не так?
3. И ошибка ли вот это?
update.rar is not RAR archive
No files to extract
YAG
Спасибо большое за проделанную работу! Сам раньше использовал скрипт на PHP выложенный в начале темы уважаемым Mamon. Только немного доработал его, сделав перебор паролей по списку. То есть в отдельный файлик можно было накидать сразу штук двадцать логинов и паролей, и как только текущий логин/пароль блокировались, то они удалялись из списка и брались следующие. Как только весь список пустел, то на мой почтовый адрес высылалось письмо с напоминанием пополнить список паролей. К сожалению данный скрипт перестал работать с третьей версией антивируса. Можно ли здесь сделать что-то подобное в вашем скрипте?
Именно это дальше и собирался реализовывать.
Непонятны еще несколько моментов:
1. Зачем, если логин и пароль неверны, обходить все сервера Eset?
2. Расскоментировал обе строчки, чтобы зеркала создавались для второй и третьей версии, но создается только для 3 и самих файлов обновлений в папке нет, только log.txt и update.ver. Соответственно обновления не происходит. Что не так?
3. И ошибка ли вот это?
update.rar is not RAR archive
No files to extract
1. Учту. Не думал еще об этом.
2. Немного не точно написал я там. Раскоментировать нужно что-то одно. Если нужны оба зеркала, то кладем в ХРОН два файла (в каждом раскоментировано что-то одно). Скрипт последний мой ставили? Первый вариант не качал в указанную папку, а раскладывал все как на официальных серверах, т.е. в корневой папке домена папка download и дальше.
3. Это не ошибка. Так получаецца из-за того что update.rar может быть в архиве или нет. Просто я вначале разархивирую, а потом проверяю :D. Переделаю в дальнейшем, чтоб глаза не мозолило. :-)
Скрипт брал последний выложенный на этой странце. Закомментировал строчку, чтобы создавалось зеркало только для третьей версии, все-равно не хочет создавать. Выдает только:
--2008-05-03 17:36:19-- http://update.eset.com/eset_upd/update.ver
Resolving update.eset.com... 89.202.157.138
Connecting to update.eset.com|89.202.157.138|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 993 [application/octet-stream]
Saving to: `update.ver'
100%[================================================== ================================================== =================>] 993 --.-K/s in 0s
2008-05-03 17:36:19 (2.57 MB/s) - `update.ver' saved [993/993]
UNRAR 3.60 freeware Copyright (c) 1993-2006 Alexander Roshal
update.rar is not RAR archive
No files to extract
Удалил все из папки nod3 и заново запустил скрипт. Вот теперь нормально обновилось. То есть, возможно, есть баг в случае, когда первый раз обновление не происходит из-за того, что ключ неверный, а после этого уже и с правильным не обновляет, пока не удалишь старый update.ver.
DarkTwin
05-05-2008, 18:02
началась рабочая неделя :) как идеи с продолжением скрипта ?
Идей много. Занимацца некогда. Борюсь с провайдером. Пытаюсь писать диссер, который тоже уже поджимает :D. И еще вот занялся шейпером, потому что хочецца и качалку иметь на роутере и радио с телевизором слушать в локалке через инет и звонить через СИП, а тут на форуме мысли хорошие пошли по этой тематике. :-) А если по теме, то пока тестил скрипт. Устранил часть ошибок о которых тут говорили. Но сейчас выявил один серьезный недостаток и одну серьезную ошибку, которая может привести к неработоспособности закачанных обновлений. В ближайшее время поправлю. Выложу.
DarkTwin
06-05-2008, 16:15
Может на выходных встретимся обсудим :)
гденить в центре
Может на выходных встретимся обсудим :)
гденить в центре
Что обсуждать будем? Провайдера, диссер, шейпер или ЕСЕТ? :D
DarkTwin
06-05-2008, 18:08
только не дисер ... у меня и так голова болит :)
Подработал о чем говорилось кроме перебора ключей и исправил несколько серьезных глюков. Тестим.
#!/bin/sh
WEB_ROOT=/opt/share/www #путь к корневой папке домена, где будет лежать зеркало
AVBASE_DIR=nod3 #имя папки, куда будут валиться базы
SERVER=http://update.eset.com #сервер, откуда обновляемся
################################################## #####################
# Раскоментировать что-либо одно!!!!! #
#DIR=nod_upd #Раскоментировать если нужно зеркало для версии 2
DIR=eset_upd #Раскоментировать если нужно зеркало для версии 3 или ESS
################################################## #####################
USER=EAV-********
PASS=**********
cd $WEB_ROOT
mkdir -p $WEB_ROOT/$AVBASE_DIR
/opt/bin/wget -N --cache=off -t 5 --connect-timeout=20 $SERVER/$DIR/update.ver
mv -f update.ver update.rar
/opt/bin/unrar x -y -inul update.rar
if [ ! -f "update.ver" ]; then
mv -f update.rar update.ver
fi
SERVERS=$SERVER" "`grep Other= $WEB_ROOT/update.ver|sed s/Other=//|tr -d "\r"|sed s/,/'\n'/g|sed s/^.*@//|sed s/$DIR//|sed s/'\n'/' '/|sed 1d`
rm -f $WEB_ROOT/update.ver
rm -f $WEB_ROOT/update.rar
rm -f $WEB_ROOT/$AVBASE_DIR/log.txt
for UPDSERVERS in $SERVERS; do
cp -f -p $WEB_ROOT/$AVBASE_DIR/update.ver $WEB_ROOT/update.old
/opt/bin/wget -a log.txt -N --cache=off -t 5 --connect-timeout=20 $UPDSERVERS/$DIR/update.ver
if [ "update.ver" -nt "update.old" ]; then
mv -f update.ver update.rar
/opt/bin/unrar x -y -inul update.rar
if [ ! -f "update.ver" ]; then
cp -f -p update.rar update.ver
fi
IFS=[
for section in `cat update.ver|sed '1s/\[//;s/^ *//'|grep -v '^#'|grep -v '^$'`; do
################################################## ##########################
# ЗАКОМЕНТИРОВАТЬ здесь НУЖНЫЕ языки #
sect=$(echo $section|sed 's/^.*_CZECH_.*]/DELETE]/') # Чешский
# sect=$(echo $sect|sed 's/^.*_ENGLISH_.*]/DELETE]/') # Английский
sect=$(echo $sect|sed 's/^.*_FRENCH_.*]/DELETE]/') # Французкий
sect=$(echo $sect|sed 's/^.*_GERMAN_.*]/DELETE]/') # Немецкий
sect=$(echo $sect|sed 's/^.*_ITALIAN_.*]/DELETE]/') # Итальянский
sect=$(echo $sect|sed 's/^.*_JAPANESE_.*]/DELETE]/') # Японский
sect=$(echo $sect|sed 's/^.*_POLISH_.*]/DELETE]/') # Польский
sect=$(echo $sect|sed 's/^.*_PORTUGUESE_.*]/DELETE]/') # Португальский
sect=$(echo $sect|sed 's/^.*_SLOVAK_.*]/DELETE]/') # Словацкий
sect=$(echo $sect|sed 's/^.*_SPANISH_.*]/DELETE]/') # Испанский
sect=$(echo $sect|sed 's/^.*_CROATIAN_.*]/DELETE]/') # Хорватский
sect=$(echo $sect|sed 's/^.*_HUNGARIAN_.*]/DELETE]/') # Венгерский
sect=$(echo $sect|sed 's/^.*_CHINESE_.*]/DELETE]/') # Китайский
sect=$(echo $sect|sed 's/^.*_DUTCH_.*]/DELETE]/') # Датский
################################################## ################################################## ##############
# Файлы обновлений для уменьшения трафика #
# ЗАКОМЕНТИРОВАТЬ если ЗАГРУЖАТЬ #
# sect=$(echo $sect|sed 's/^CONTINUOUS_.*]/DELETE]/;s/^REVERSE_.*]/DELETE]/;s/^PRELIMINARY_.*]/DELETE]/') #
################################################## ################################################## ##############
sect=$(echo $sect|sed 's/^VER]/DELETE]/;s/^HOSTS]/DELETE]/;s/^Expire]/DELETE]/;s/^SETUP]/DELETE]/;s/^COMPATLIST]/DELETE]/;s/^data0001]/DELETE]/')
if [ -z $(echo $sect|grep '^DELETE]') ]; then
eval $(echo $sect|tr -d "\r"|grep 'file='|sed 's/ *=/=/;s/= */=/')
mv -f $WEB_ROOT/log.txt $WEB_ROOT/$AVBASE_DIR/log.txt
cd $WEB_ROOT/$AVBASE_DIR
/opt/bin/wget -a log.txt -N --cache=off -t 5 --connect-timeout=20 --http-user=$USER --password=$PASS $UPDSERVERS/$file
cd $WEB_ROOT
mv -f $WEB_ROOT/$AVBASE_DIR/log.txt $WEB_ROOT/log.txt
Auth=`grep 'Authorization failed' log.txt`
if [ ${#Auth} != 0 ]; then
echo Неверные ключики
rm -f log.txt
echo Неверные ключики > log.txt
rm -f update.rar
rm -f update.old
rm -f update.ver
mv -f $WEB_ROOT/log.txt $WEB_ROOT/$AVBASE_DIR/log.txt
exit
fi
Saved=`grep '$file.* saved' log.txt`
if [ ${#Saved} != 0 ]; then
echo Ошибка загрузки файла
rm -f log.txt
echo Ошибка загрузки файла > log.txt
rm -f update.rar
rm -f update.old
rm -f update.ver
exit
fi
echo [$(echo $sect|sed 's/file=.*\//file=/') >> $WEB_ROOT/$AVBASE_DIR/update.new
fi
done
IFS=' '
cd $WEB_ROOT/$AVBASE_DIR
if [ -f "update.new" ]; then
rm -f update.ver
mv -f update.new update.ver
touch -am -r $WEB_ROOT/update.rar $WEB_ROOT/$AVBASE_DIR/update.ver
fi
fi
cd $WEB_ROOT
rm -f update.rar
rm -f update.old
rm -f update.ver
done
mv -f $WEB_ROOT/log.txt $WEB_ROOT/$AVBASE_DIR/log.txt
YAG
Большое спасибо за скрипт!
А можно ли еще сделать инкрементное копирование с сервера Eset, чтобы не скачивать каждый раз заново файлы, которые уже есть?
YAG
Большое спасибо за скрипт!
А можно ли еще сделать инкрементное копирование с сервера Eset, чтобы не скачивать каждый раз заново файлы, которые уже есть?
Он не скачивает заново. Он подключается и если файл уже лежит и с ним все в порядке (он не менялся), то ничего не закачивает. Но по всем файликам пробегает.
Э-э-э... Что-то долго он пробегает - 4 минуты. У меня все файлики с нуля столько же качаются. Еще как-то странно стал лог писаться, что бы не делалось пишет: "Неверные ключики". Хотя файлики качает.
Э-э-э... Что-то долго он пробегает - 4 минуты. У меня все файлики с нуля столько же качаются. Еще как-то странно стал лог писаться, что бы не делалось пишет: "Неверные ключики". Хотя файлики качает.
Долго занимает подключение к серверам... Особенно к u21... Я его уже выкинул даже. Он совсем тормознутый у них... Можно конечно выкинуть оббегание всех серверов, но что-то у меня уверенности нет что ЕСЕТ в ближайшее время опять что-нить не выкинет как с основными серверами 22 апреля. Думаю 4 минуты не большое время. Насчет неверных ключиков... Незнаю что сказать даже... Сколько тестил неверные ключики писал только на неверные... Попробуйте убедиться что они действительно верные.
Сколько тестил неверные ключики писал только на неверные... Попробуйте убедиться что они действительно верные.
Но файлики то качает. Попробовал еще раз удалить всю папку и заново запустить скрипт. Последние три строчки:
cannot stat `/tmp/harddisk/nod_upd/nod3/update.ver': No such file or directory
cannot stat `/tmp/harddisk/nod_upd/nod3/update.ver': No such file or directory
Неверные ключики
При повторном запуске, все тоже самое, только "cannot stat `/tmp/harddisk/nod_upd/nod3/update.ver': No such file or directory" один раз пишет.
В логе только одна запись "Неверные ключики" в обоих случаях.
Странно, перепробовал еще штук двадцать свежих ключиков, результаты следующие. Бывают три ситуации:
1. Когда ключик неправильный, и скрипт сразу говорит об этом и отключается (20%). В логе пишет "Неверные ключики".
2. Скрипт зависает на 4-5 минут, качает файлики, но потом говорит, что ключики неверные (60%). В логе пишет "Неверные ключики".
3. Скрипт зависает на 4-5 минут и ничего не говорит, но лог нормальный полный. Причем при повторном запуске строчки "cannot stat `/tmp/harddisk/nod_upd/nod3/update.ver': No such file or directory" не появляется совсем (20%).
Может там в список серверов одно триальное есетовское зеркало затесалось?
aka*sAmmY
07-05-2008, 19:31
Добрый день\вечер. Зеркало я обновляю так: создал 2 файла. для третьей и второй версии примерно с таким содержанием:
#!/bin/sh
wget -t 0 -N -P /opt/share/www/nod32v2/ -i /opt/share/www/nod32/2
где /opt/share/www/nod32/2 путь для файла со списком ссылок на файлы которые надо выкачивать. Выкачиваю все т.к. нету метки времени на файлах. С этим еще мириться можно. Но я так и не научил роутер чтобы он запускал мне скачку автоматически. т.к. кронтаб выдает.
[admin@wl500]$ crontab -e
You (admin) are not allowed to use this program (crontab)
See crontab(1) for more information
Помогите заставить обновляться зеркала по времени...
Но файлики то качает. Попробовал еще раз удалить всю папку и заново запустить скрипт. Последние три строчки:
cannot stat `/tmp/harddisk/nod_upd/nod3/update.ver': No such file or directory
cannot stat `/tmp/harddisk/nod_upd/nod3/update.ver': No such file or directory
Неверные ключики
При повторном запуске, все тоже самое, только "cannot stat `/tmp/harddisk/nod_upd/nod3/update.ver': No such file or directory" один раз пишет.
В логе только одна запись "Неверные ключики" в обоих случаях.
Странно, перепробовал еще штук двадцать свежих ключиков, результаты следующие. Бывают три ситуации:
1. Когда ключик неправильный, и скрипт сразу говорит об этом и отключается (20%). В логе пишет "Неверные ключики".
2. Скрипт зависает на 4-5 минут, качает файлики, но потом говорит, что ключики неверные (60%). В логе пишет "Неверные ключики".
3. Скрипт зависает на 4-5 минут и ничего не говорит, но лог нормальный полный. Причем при повторном запуске строчки "cannot stat `/tmp/harddisk/nod_upd/nod3/update.ver': No such file or directory" не появляется совсем (20%).
Может там в список серверов одно триальное есетовское зеркало затесалось?
Значит 1-я ситуация ясна. Ключики не подходят. 3-я ситуация это когда все нормально. Строчка эта появляется если запускаешь первый раз и никакого зеркала еще нет. На строчку не обращайте внимания. Теперь думаем про второй случай... Я вот подумал что... Вы скрипт в ХРОН кладете? Если да, то есть такая детская болезнь. Если он запустился из ХРОНа и Вы его еще запустили в то время пока он еще не закончил работу, то ничего хорошего не получится, равно как и если он из ХРОНа сам запустится в тот момент когда еще не доработал до конца. Вот тут могут быть варианты вроде второго...
Вот в этом фрагменте
Auth=`grep 'Authorization failed' log.txt`
if [ ${#Auth} != 0 ]; then
echo Неверные ключики
rm -f log.txt
echo Неверные ключики > log.txt
rm -f update.rar
rm -f update.old
rm -f update.ver
mv -f $WEB_ROOT/log.txt $WEB_ROOT/$AVBASE_DIR/log.txt
exit
fi
уберите строчку rm -f log.txt. Запускайте с учетом того что я сказал выше и смотрите логи. Они будут во всех случаях полные и можно будет сказать наверняка что произошло.
Кстати, не подскажете как проверить работает ли уже скрипт в памяти, чтобы не допускать запуска второй копии?
aka*sAmmY, если Вы ХРОН ставили так как это описано в инструкции с нуля на этом форуме, то дальше просто кладете скрипт который нужно чтобы запустился в соответствующую папку и все. crontab редактировать не надо даже. Мне вот только интересно где это вы готовый файл берете со списком файлов? И еще где под это получившееся месево Вы берете свежий update.ver???
Вот сделал простенькую проверку на запущенность скрипта, ну и вылечил от детских болезней...
#!/bin/sh
WEB_ROOT=/opt/share/www #путь к корневой папке домена, где будет лежать зеркало
AVBASE_DIR=nod3 #имя папки, куда будут валиться базы
SERVER=http://update.eset.com #сервер, откуда обновляемся
################################################## #####################
# Раскоментировать что-либо одно!!!!! #
#DIR=nod_upd #Раскоментировать если нужно зеркало для версии 2
DIR=eset_upd #Раскоментировать если нужно зеркало для версии 3 или ESS
################################################## #####################
USER=EAV-********
PASS=**********
if [ ! -f "/var/run/$AVBASE_DIR.PID" ]; then
echo $$ > /var/run/$AVBASE_DIR.PID
else
echo Процесс обновления зеркала уже запущен. Пожалуйста дождитесь его окончания.
echo Если Вы уверены что это не так, то удалите файл /var/run/$AVBASE_DIR.PID
exit
fi
cd $WEB_ROOT
mkdir -p $WEB_ROOT/$AVBASE_DIR
mkdir -p $WEB_ROOT/$AVBASE_DIR/tmp
cd $WEB_ROOT/$AVBASE_DIR/tmp
/opt/bin/wget -N --cache=off -t 5 --connect-timeout=20 $SERVER/$DIR/update.ver
mv -f update.ver update.rar
/opt/bin/unrar x -y -inul update.rar
if [ ! -f "update.ver" ]; then
mv -f update.rar update.ver
fi
SERVERS=`grep Other= update.ver|sed s/Other=//|tr -d "\r"|sed s/,/'\n'/g|sed s/^.*@//|sed s/$DIR//|sed s/'\n'/' '/|sed 1d`
rm -f update.ver
rm -f update.rar
rm -f $WEB_ROOT/$AVBASE_DIR/log.txt
for UPDSERVERS in $SERVERS; do
cp -f -p $WEB_ROOT/$AVBASE_DIR/update.ver $WEB_ROOT/$AVBASE_DIR/tmp/update.old
/opt/bin/wget -a log.txt -N --cache=off -t 5 --connect-timeout=20 $UPDSERVERS/$DIR/update.ver
if [ "update.ver" -nt "update.old" ]; then
mv -f update.ver update.rar
/opt/bin/unrar x -y -inul update.rar
if [ ! -f "update.ver" ]; then
cp -f -p update.rar update.ver
fi
IFS=[
for section in `cat update.ver|sed '1s/\[//;s/^ *//'|grep -v '^#'|grep -v '^$'`; do
################################################## ##########################
# ЗАКОМЕНТИРОВАТЬ здесь НУЖНЫЕ языки #
sect=$(echo $section|sed 's/^.*_CZECH_.*]/DELETE]/') # Чешский
# sect=$(echo $sect|sed 's/^.*_ENGLISH_.*]/DELETE]/') # Английский
sect=$(echo $sect|sed 's/^.*_FRENCH_.*]/DELETE]/') # Французкий
sect=$(echo $sect|sed 's/^.*_GERMAN_.*]/DELETE]/') # Немецкий
sect=$(echo $sect|sed 's/^.*_ITALIAN_.*]/DELETE]/') # Итальянский
sect=$(echo $sect|sed 's/^.*_JAPANESE_.*]/DELETE]/') # Японский
sect=$(echo $sect|sed 's/^.*_POLISH_.*]/DELETE]/') # Польский
sect=$(echo $sect|sed 's/^.*_PORTUGUESE_.*]/DELETE]/') # Португальский
sect=$(echo $sect|sed 's/^.*_SLOVAK_.*]/DELETE]/') # Словацкий
sect=$(echo $sect|sed 's/^.*_SPANISH_.*]/DELETE]/') # Испанский
sect=$(echo $sect|sed 's/^.*_CROATIAN_.*]/DELETE]/') # Хорватский
sect=$(echo $sect|sed 's/^.*_HUNGARIAN_.*]/DELETE]/') # Венгерский
sect=$(echo $sect|sed 's/^.*_CHINESE_.*]/DELETE]/') # Китайский
sect=$(echo $sect|sed 's/^.*_DUTCH_.*]/DELETE]/') # Датский
################################################## ################################################## ##############
# Файлы обновлений для уменьшения трафика #
# ЗАКОМЕНТИРОВАТЬ если ЗАГРУЖАТЬ #
# sect=$(echo $sect|sed 's/^CONTINUOUS_.*]/DELETE]/;s/^REVERSE_.*]/DELETE]/;s/^PRELIMINARY_.*]/DELETE]/') #
################################################## ################################################## ##############
sect=$(echo $sect|sed 's/^VER]/DELETE]/;s/^HOSTS]/DELETE]/;s/^Expire]/DELETE]/;s/^SETUP]/DELETE]/;s/^COMPATLIST]/DELETE]/;s/^data0001]/DELETE]/')
if [ -z $(echo $sect|grep '^DELETE]') ]; then
eval $(echo $sect|tr -d "\r"|grep 'file='|sed 's/ *=/=/;s/= */=/')
mv -f $WEB_ROOT/$AVBASE_DIR/tmp/log.txt $WEB_ROOT/$AVBASE_DIR/log.txt
cd $WEB_ROOT/$AVBASE_DIR
/opt/bin/wget -a log.txt -N --cache=off -t 5 --connect-timeout=20 --http-user=$USER --password=$PASS $UPDSERVERS/$file
cd $WEB_ROOT/$AVBASE_DIR/tmp
cp -f $WEB_ROOT/$AVBASE_DIR/log.txt $WEB_ROOT/$AVBASE_DIR/tmp/log.txt
Auth=`grep 'Authorization failed' log.txt`
if [ ${#Auth} != 0 ]; then
echo Неверные ключики
rm -f log.txt
echo Неверные ключики > log.txt
rm -f update.rar
rm -f update.old
rm -f update.ver
mv -f $WEB_ROOT/$AVBASE_DIR/tmp/log.txt $WEB_ROOT/$AVBASE_DIR/log.txt
rm -r -f $WEB_ROOT/$AVBASE_DIR/tmp
rm -f /var/run/$AVBASE_DIR.PID
exit
fi
Saved=`grep '$file.* saved' log.txt`
if [ ${#Saved} != 0 ]; then
echo Ошибка загрузки файла
rm -f log.txt
echo Ошибка загрузки файла $file > log.txt
rm -f update.rar
rm -f update.old
rm -f update.ver
mv -f $WEB_ROOT/AVBASE_DIR/tmp/log.txt $WEB_ROOT/$AVBASE_DIR/log.txt
rm -r -f $WEB_ROOT/$AVBASE_DIR/tmp
rm -f /var/run/$AVBASE_DIR.PID
exit
fi
echo [$(echo $sect|sed 's/file=.*\//file=/') >> $WEB_ROOT/$AVBASE_DIR/update.new
fi
done
IFS=' '
cd $WEB_ROOT/$AVBASE_DIR
if [ -f "update.new" ]; then
rm -f update.ver
mv -f update.new update.ver
touch -am -r $WEB_ROOT/$AVBASE_DIR/tmp/update.rar $WEB_ROOT/$AVBASE_DIR/update.ver
fi
fi
cd $WEB_ROOT/$AVBASE_DIR/tmp
rm -f update.rar
rm -f update.old
rm -f update.ver
done
mv -f $WEB_ROOT/$AVBASE_DIR/tmp/log.txt $WEB_ROOT/$AVBASE_DIR/log.txt
rm -r -f $WEB_ROOT/$AVBASE_DIR/tmp
rm -f /var/run/$AVBASE_DIR.PID
YAG
Запускал ручками, не через Cron. Через Cron он у меня запускается один раз в ночное время.
У меня проверку на запуск rtorrent проходит вот так:
#!/bin/sh
if /bin/ps | /bin/grep -v grep | /bin/grep rtorrent >/dev/null; then
echo rtorrent already started
exit
fi
echo starting rtorrent
rm /tmp/harddisk/torrent/session/rtorrent.lock >/dev/null
stty stop undef && stty start undef
/opt/bin/screen -dmS rtorrent /opt/bin/rtorrent -no import=/tmp/local/root/.rtorrent.rc
logger rtorrent started
С новой версией скрипта все работает пока нормально. Более того, при повторном запуске больше не "ждет" 4 минуты. Отрабатывает секунд 15 и отключается. Может добавить для понятности echo "Обновление не требуется."?! Хм-м-м... Правда в логе для второй версии последняя строчка такая:
--2008-05-08 11:10:40-- http://nod32.telefonica.com.ar:81///nod_upd/update.ver
Resolving nod32.telefonica.com.ar... 200.51.255.254
Connecting to nod32.telefonica.com.ar|200.51.255.254|:81... connected.
HTTP request sent, awaiting response... 401 Authorization Required
Authorization failed.
Это что за зеркало такое? Вообще, подскажите, пожалуйста, откуда он берет весь список серверов, по которым ходит? Или он соединяется с http://update.eset.com, а список выдается там?
Будут еще ошибки, отпишусь.
Да, сервера берет по адресу http://update.eset.com. Последний сервер там этот (телефоника который)не нужен. Согласен. Потом отделю его. Пока не обращайте на него внимания.
Еще такой важный вопрос. Как сервер Eset отслеживает количество обновляемых компьютеров с одним номерком?
Допустим, я приобрел лицензию на 5 компьютеров и мне прислали файлик лицензии. Что мне теперь мешает создать зеркало на одном компьютере и обновляться с него всеми 100 компьютерами организации. Будет ли как-то вестись подсчет этих компьютеров. Может при обновлении базы на сервер Eset передается еще какая-либо информация, связанная с этим?
Не заблокируют ли мой номерок если я его буду использовать на 4 компьютерах, а пятый для создания зеркала на маршрутизаторе. Посчитается ли вообще тогда пятый, ведь обновление идет не из под винды? Могу ли я после использования номерка на одном компьютере, начать использовать его на другом, прекратив на первом? Возможно ли, что компьютеры отслеживаются по ip, и тогда не важно сколько компьютеров оновляются из под одного айпишника?
Звонил в техподдержку NOD по этим вопросам, но они что-то темнят. Буду очень благодарен, если кто-то сможет ответить. Просто проще купить один ключик для зеркала, а потом всем с него обновляться, чем постоянно искать новые ключи.
DarkTwin
09-05-2008, 11:03
Файл лицензии это не номер и к данному скрипту вы его не подключите, нужны именно ключи. Вместе с файлами обновлений приходит еще и (ну это то что я знаю) блэклисты.. имена забаненых зеркал... так же приходит информация о сроке окончания ключей (за 10 дней до окончания).
Если вы создадите зеркало у себя в сети то можете хоть 1000 компов с одного номера обновлять, но если компания ESET квам придет то это как говорится ваши проблемы будут. Информация о том сколько с одного зеркала обновилось компов не передается, а вот если всем раздать один и тот же ключ и они будут обновляться с разных IP то ключ хабанят... разницы на какой платформе запущено зеркало нету. Я пока о случаях таких исков не знаю.. зато они активно банят зеркала которые в интернете.
DarkTwin
Спасибо за помощь!
Конечно я знаю, что это не номер. Вопрос именно был именно в том, что отслеживается ли как-то количество обновляемых компьютеров в одной сети с созданного под виндой средствами ESS зеркала. Как я понял из ответа, я могу приобрести минимальную лицензию на 5 компьютеров, а обновляться с любого количества и это никак не отследить кроме как личного визита?
И правильно ли я понимаю, что поставив зеркало с лицензионным ключом на роутер, так же безболезненно с меня смогут обновляться любое количество компьютеров? Просто я предполагал что вместе с базой могут передаваться сведения о ключе, с помощью которого происходило обновление моего зеркала на маршрутизаторе. То есть все, кто с меня будут обновляться, тоже будут посчитаны как используемые этот ключ, после чего он будет заблокирован. Но если это не так, то это облегчает дело.
Если пять компьютеров в одной рабочей сети будут обновляться из под одного айпишника они защитаются за один используемы ключ? То есть, подсчет ведется только по айпишнику? Никакие данные платформы или оборудования не передаются? И возможно ли прекратить использование ключика на одном ip, и начать использовать на другом?
Protei, сколько много ненужных вопросов :)
Главное понять, как идёт обновление.
Что бы скачать базы, надо, что бы клиент зашёл на страничку с базами, там запрашивается идентификация, вводится ключик с паролем и получается доступ к базам.
А вот если штук 50 компов будут лезть в одно и тоже (в разное) время то сервера авторизации забанят даже и не думая.
Поставив зеркало на роутер, из внутренней сети ничего наружу не вылезет и клиентам ставить ключи лицензии не надо, только указать путь до баз на роутере.
Antosha
Кому не нужных? Точно не мне.
Я пытаюсь понять как происходит проверка и бан ключиков, чтобы не выкидывать на ветер 12000 рублей, и чтобы безвоздмезно сделать для людей бесплатное зеркало. Возможно, я конечно перестраховываюсь, но береженого бог бережет.
Процесс авторизации мне известен. Однако что мешает клиентам на компьютере отправлять служебную информацию на серер Есет, даже если они обновляются с другого неофициального зеркала. Например, при помощи системы своевременного обнаружения.
Как они будут определять, что лезет 50 компов, а не 5 десять раз?
Кто говорил, что с роутера будут обновляться из внутренней сети?
Я знаю, что файл лицензии нужен только на том компьютере, где будет создаваться зеркало.
Все вопросы остаются в силе. Если кто сможет ответить буду очень благодарен!
Процесс авторизации мне известен. Однако что мешает клиентам на компьютере отправлять служебную информацию на серер Есет, даже если они обновляются с другого неофициального зеркала. Например, при помощи системы своевременного обнаружения.
Главное, не втыкать ключи в клиентов (могут сами клиенты увести)
Как они будут определять, что лезет 50 компов, а не 5 десять раз?
Одновременное количество входов на сервер авторизации
Кто говорил, что с роутера будут обновляться из внутренней сети?
Ну не с роутера.
Значит нужно было сказать что все компы имеют доступ в инет.
А Вы хотите заставить всех клиентов обновляться с инета или с зеркала?
Проще сделать зеркало и указать в настройках обновление с зеркала, а клиентам не надо устанавливать ключики, т.к. это никоим образом не повлияет на то, что будет скачиваться с зеркала (т.е. полное обновление).
P.S.
ну вот как Вам ещё понятнее объяснить-то? :)
Одновременное количество входов на сервер авторизации
А Вы хотите заставить всех клиентов обновляться с инета или с зеркала?
Проще сделать зеркало и указать в настройках обновление с зеркала, а клиентам не надо устанавливать ключики, т.к. это никоим образом не повлияет на то, что будет скачиваться с зеркала (т.е. полное обновление).
P.S.
ну вот как Вам ещё понятнее объяснить-то?
Это достоверная информация или ваше ИМХО? То есть, если я раздам свой ключик сотне людей и мы установим разное время обновления, то ключик не забанят?
Я хочу, чтобы зеркало стояло на роутере, созданное при помощи скрипта из этой темы. Но чтобы не искать постоянно новые неофициальные ключи, я хочу приобрести лицензию.
Ну а что вы объясняете то? Вы мои вопросы внимательно читали? За попытку спасибо!
Так, пойдем другим путем. Кто-нибудь устанавлиал на роутер зеркало с официальным ключом? Кто-нибудь пробовал использовать официальный ключ сначало на одной машине, а потом на другой? Ключик жив?
Это достоверная информация или ваше ИМХО? То есть, если я раздам свой ключик сотне людей и мы установим разное время обновления, то ключик не забанят?
Скорей всего это получится как у Касперского.
Ключик можно хоть 1000 людям дать, лишь бы был один IP у всех, ну и разное время, хотя бы интервал между каждым минут 5-20.
У меня на глазах ключик забанили у каспера.
В кратце:
выложили ключик на форуме, скачало 5 чел с разными ip, начали обновляться и через 2 часа ключик появился в бане.
Я хочу, чтобы зеркало стояло на роутере, созданное при помощи скрипта из этой темы. Но чтобы не искать постоянно новые неофициальные ключи, я хочу приобрести лицензию.
Ну купите один ключик для зеркала и всё :)
Остальных натравливаете на зеркало и радуетесь.
Protei, думаю никто не ответит Вам на Ваши вопросы, особенно на этом форуме. Теперь мои мысли по этому поводу....
Ну во-первых, не вижу проблемы купить ключик и проверить. Не так уж дорого он стоит на одну машину. ИМХО.
Во-вторых, если пока покупать не охота, то делаем следующее. Делаем зеркало на роутере. Мой скрипт отсылать ничего не отсылает (ну что можно определить без этого понятно). Он просто забирает файлики. Ставим на несколько компов НОД. Ставим какой-нить (не ЕСЕТовский) файер. На НОДе настраиваем обновление с роутера. Ну и постоянно смотрим куда будет пытацца ломицца НОД и зачем. Со включенным своевременным обнаружением и без такового. У меня щас с зеркала на роутере обновляюцца несколько человек с разных городов постоянно. Ключ взят в совершенно открытом месте в инете. Т.е. используецца скорее всего очень многими. Живет пока несколько недель. НОД файером пока ловить не пытался. Попробуйте. Отпишитесь.
З.Ы.: Вот новая версия.
#!/bin/sh
WEB_ROOT=/opt/share/www #путь к корневой папке домена, где будет лежать зеркало
AVBASE_DIR=nod3 #имя папки, куда будут валиться базы
SERVER=http://update.eset.com #сервер, откуда обновляемся
################################################## ###############################
# Раскоментировать что-либо одно!!!!! #
# DIR=nod_upd #Раскоментировать если нужно зеркало для версии 2 #
DIR=eset_upd #Раскоментировать если нужно зеркало для версии 3 или ESS #
################################################## ###############################
USER=EAV-********
PASS=**********
if [ ! -f "/var/run/$AVBASE_DIR.PID" ]; then
echo $$ > /var/run/$AVBASE_DIR.PID
else
echo Процесс обновления зеркала уже запущен. Пожалуйста дождитесь его окончания.
echo Если Вы уверены что это не так, то удалите файл /var/run/$AVBASE_DIR.PID
exit
fi
cd $WEB_ROOT
mkdir -p $WEB_ROOT/$AVBASE_DIR
mkdir -p $WEB_ROOT/$AVBASE_DIR/tmp
cd $WEB_ROOT/$AVBASE_DIR/tmp
/opt/bin/wget -q -N -nv --cache=off -t 5 --connect-timeout=20 $SERVER/$DIR/update.ver
mv -f update.ver update.rar
/opt/bin/unrar x -y -inul update.rar
if [ ! -f "update.ver" ]; then
mv -f update.rar update.ver
fi
SERVERS=`grep Other= update.ver|grep -v 'Telefonica-Other='|sed s/Other=//|tr -d "\r"|sed s/,/'\n'/g|sed s/^.*@//|sed s/$DIR//|sed s/'\n'/' '/|sed 1d`
rm -f update.ver
rm -f update.rar
rm -f $WEB_ROOT/$AVBASE_DIR/log.txt
for UPDSERVERS in $SERVERS; do
cp -f -p $WEB_ROOT/$AVBASE_DIR/update.ver $WEB_ROOT/$AVBASE_DIR/tmp/update.old
/opt/bin/wget -nv -a log.txt -N --cache=off -t 5 --connect-timeout=20 $UPDSERVERS/$DIR/update.ver
if [ "update.ver" -nt "update.old" ]; then
mv -f update.ver update.rar
/opt/bin/unrar x -y -inul update.rar
if [ ! -f "update.ver" ]; then
cp -f -p update.rar update.ver
fi
IFS=[
for section in `cat update.ver|sed '1s/\[//;s/^ *//'|grep -v '^#'|grep -v '^$'`; do
################################################## #######################################
# ЗАКОМЕНТИРОВАТЬ здесь НУЖНЫЕ языки # #
sect=$(echo $section|sed 's/^.*_CZECH_.*]/DELETE]/') # Чешский #
# sect=$(echo $sect|sed 's/^.*_ENGLISH_.*]/DELETE]/') # Английский #
sect=$(echo $sect|sed 's/^.*_FRENCH_.*]/DELETE]/') # Французкий #
sect=$(echo $sect|sed 's/^.*_GERMAN_.*]/DELETE]/') # Немецкий #
sect=$(echo $sect|sed 's/^.*_ITALIAN_.*]/DELETE]/') # Итальянский #
sect=$(echo $sect|sed 's/^.*_JAPANESE_.*]/DELETE]/') # Японский #
sect=$(echo $sect|sed 's/^.*_POLISH_.*]/DELETE]/') # Польский #
sect=$(echo $sect|sed 's/^.*_PORTUGUESE_.*]/DELETE]/') # Португальский #
sect=$(echo $sect|sed 's/^.*_SLOVAK_.*]/DELETE]/') # Словацкий #
sect=$(echo $sect|sed 's/^.*_SPANISH_.*]/DELETE]/') # Испанский #
sect=$(echo $sect|sed 's/^.*_CROATIAN_.*]/DELETE]/') # Хорватский #
sect=$(echo $sect|sed 's/^.*_HUNGARIAN_.*]/DELETE]/') # Венгерский #
sect=$(echo $sect|sed 's/^.*_CHINESE_.*]/DELETE]/') # Китайский #
sect=$(echo $sect|sed 's/^.*_DUTCH_.*]/DELETE]/') # Датский #
################################################## ################################################## #####################
# Файлы обновлений для уменьшения трафика #
# ЗАКОМЕНТИРОВАТЬ если ЗАГРУЖАТЬ #
# sect=$(echo $sect|sed 's/^CONTINUOUS_.*]/DELETE]/;s/^REVERSE_.*]/DELETE]/;s/^PRELIMINARY_.*]/DELETE]/') #
################################################## ################################################## #####################
sect=$(echo $sect|sed 's/^VER]/DELETE]/;s/^HOSTS]/DELETE]/;s/^Expire]/DELETE]/;s/^SETUP]/DELETE]/;s/^COMPATLIST]/DELETE]/;s/^data0001]/DELETE]/')
if [ -z $(echo $sect|grep '^DELETE]') ]; then
eval $(echo $sect|tr -d "\r"|grep 'file='|sed 's/ *=/=/;s/= */=/')
cp -f $WEB_ROOT/$AVBASE_DIR/tmp/log.txt $WEB_ROOT/$AVBASE_DIR/log.txt
cd $WEB_ROOT/$AVBASE_DIR
/opt/bin/wget -nv -a log.txt -N --cache=off -t 5 --connect-timeout=20 --http-user=$USER --password=$PASS $UPDSERVERS/$file
cd $WEB_ROOT/$AVBASE_DIR/tmp
cp -f $WEB_ROOT/$AVBASE_DIR/log.txt $WEB_ROOT/$AVBASE_DIR/tmp/log.txt
Auth=`grep 'Authorization failed' log.txt`
if [ ${#Auth} != 0 ]; then
echo Неверные ключики
rm -f log.txt
echo Неверные ключики > log.txt
rm -f update.rar
rm -f update.old
rm -f update.ver
mv -f $WEB_ROOT/$AVBASE_DIR/tmp/log.txt $WEB_ROOT/$AVBASE_DIR/log.txt
rm -r -f $WEB_ROOT/$AVBASE_DIR/tmp
rm -f /var/run/$AVBASE_DIR.PID
rm -f $WEB_ROOT/$AVBASE_DIR/update.new
exit
fi
Saved=`grep '$file.* saved' log.txt`
if [ ${#Saved} != 0 ]; then
echo Ошибка загрузки файла
rm -f log.txt
echo Ошибка загрузки файла $file > log.txt
rm -f update.rar
rm -f update.old
rm -f update.ver
mv -f $WEB_ROOT/AVBASE_DIR/tmp/log.txt $WEB_ROOT/$AVBASE_DIR/log.txt
rm -r -f $WEB_ROOT/$AVBASE_DIR/tmp
rm -f /var/run/$AVBASE_DIR.PID
rm -f $WEB_ROOT/$AVBASE_DIR/update.new
exit
fi
echo [$(echo $sect|sed 's/file=.*\//file=/') >> $WEB_ROOT/$AVBASE_DIR/update.new
fi
done
IFS=' '
cd $WEB_ROOT/$AVBASE_DIR
if [ -f "update.new" ]; then
rm -f update.ver
mv -f update.new update.ver
/opt/bin/touch -am -r $WEB_ROOT/$AVBASE_DIR/tmp/update.rar $WEB_ROOT/$AVBASE_DIR/update.ver
fi
fi
cd $WEB_ROOT/$AVBASE_DIR/tmp
rm -f update.rar
rm -f update.old
rm -f update.ver
done
mv -f $WEB_ROOT/$AVBASE_DIR/tmp/log.txt $WEB_ROOT/$AVBASE_DIR/log.txt
rm -r -f $WEB_ROOT/$AVBASE_DIR/tmp
rm -f /var/run/$AVBASE_DIR.PID
Хочу напомнить, что скрипт требует установленных wget и coreutils, если эти пакеты не стоят, то необходимо перед запуском сделать
ipkg update
ipkg install wget
ipkg install coreutils
#!/bin/sh
WEB_ROOT=/opt/share/www #путь к корневой папке домена, где будет лежать зеркало
AVBASE_DIR=nod3 #имя папки, куда будут валиться базы
SERVER=http://update.eset.com #сервер, откуда обновляемся
################################################## ###############################
# Раскоментировать что-либо одно!!!!! #
# DIR=nod_upd #Раскоментировать если нужно зеркало для версии 2 #
DIR=eset_upd #Раскоментировать если нужно зеркало для версии 3 или ESS #
################################################## ###############################
Предлагаю поставить переменную на AVBASE_DIR=$DIR ну или как-то так :)
А то всё валится в одну папку (хотя может так задумано)
Ну все эти переменные в начало для того и вынесены, чтобы можно было самостоятельно задавать ту папку которая нужна каждому. Для третьей версии я ставлю папку nod3... Для второй - nod... Ну а кому что надо тот так и меняет. И WEB_ROOT у кого-то может быть другой совершенно. Это у меня там стоит http-сервер, если так можно выразицца. Ну а Вы уж меняйте как Вам надо.
Да беда в том, что я уже купил лицензию на 5 ключей на два года, обошлось в 12000. Поэтому эксперементировать с этим ключиком как-то боязливо. А выбрасывать теперь еще деньги на покупку отдельного ключа для экпериментов тоже не хочется. Просто я думал, что кто-то уже прошел этот путь и знает ответы на вопросы. Догадки тут не прокатят.
Ладно, поищу ответы в других местах, потом отпишусь.
YAG
В новом скрипте вывод лога изменился? Раньше он, вроде, поинформативней был.
YAG
В новом скрипте вывод лога изменился? Раньше он, вроде, поинформативней был.
Да, выкинул подробности. Только самое необходимое осталось. А то много читать и сразу не видно...
aka*sAmmY
17-05-2008, 12:20
YAG Месива не получается... update.ver я тоже скачиваю вместе с обновлениями т.к. в папках с обновлениями присутствует еще и этот файл. Он у меня тянется в конце самом чтобы не получилось, так что update.ver говорит что базы новые, а фактически они старые.
Спасибо за разъяснения по поводу "хрона".
DarkTwin
22-05-2008, 19:30
А что в скрипте нету русского языка для скачивания??
А что в скрипте нету русского языка для скачивания??
Я ж писал. По той причине, что его и на сервере нет... Если появицца добавим... Впрочем, если появицца, то он скачаецца. :-)
DarkTwin
22-05-2008, 20:10
ну это в v3 его нету, а в v2 есть... хотя да если не закоментирован то и леший с ним
вот еще вопрос . какие разрешения должны быть на папку куда базы записывает и глянь картинку.. файл с логом не появляется. в папке nod еще 3 папки eset_upd, nod_upd, tmp... все три создал в MC.
И ключ у меня рабочий
ну это в v3 его нету, а в v2 есть... хотя да если не закоментирован то и леший с ним
вот еще вопрос . какие разрешения должны быть на папку куда базы записывает и глянь картинку.. файл с логом не появляется. в папке nod еще 3 папки eset_upd, nod_upd, tmp... все три создал в MC.
ipkg update
ipkg install unrar
И говорю же уже в третий раз. НЕТ НА СЕРВЕРЕ РУССКОГО ЯЗЫКА НИ ДЛЯ КАКОЙ ВЕРСИИ!!! Раньше был для второй версии. Возможно может появицца (очень сомневаюсь), но сейчас его нет.
DarkTwin
22-05-2008, 20:19
Да беда в том, что я уже купил лицензию на 5 ключей на два года, обошлось в 12000. Поэтому эксперементировать с этим ключиком как-то боязливо. А выбрасывать теперь еще деньги на покупку отдельного ключа для экпериментов тоже не хочется. Просто я думал, что кто-то уже прошел этот путь и знает ответы на вопросы. Догадки тут не прокатят.
Ладно, поищу ответы в других местах, потом отпишусь.
Для тренировок можешь использовать триальные ключи
пример
esstrial11
7rw8m2oy7j
Для тренировок можешь использовать триальные ключи
А смысл? Я ведь не один его использую.
Вот еще вопросец такой возник. При обновлении напрямую с сервера Eset с официальным ключиком иногда возникает сообщение, что модули программы обновлены. Скачивает ли скрипт эти обновления и обновляют ли эти компоненты клиенты с зеркала на роутере?
Скачивает ли скрипт эти обновления и обновляют ли эти компоненты клиенты с зеркала на роутере?
Скачивает. Обновляют.
DarkTwin
23-05-2008, 15:06
А смысл? Я ведь не один его использую.
Вот еще вопросец такой возник. При обновлении напрямую с сервера Eset с официальным ключиком иногда возникает сообщение, что модули программы обновлены. Скачивает ли скрипт эти обновления и обновляют ли эти компоненты клиенты с зеркала на роутере?
По поводу ключа.. а не все ли ровно сколько человек им пользуется (тем что выложил я наверное пару тысяч или десятков тысяч)... кончится дам другой какая проблема то...
По поводу компонентов... компоненты это такие же файлы *.nup ->> скрипт их разумеется скачивайт
aka*sAmmY
03-06-2008, 19:53
Доброго времени суток.
Не могли бы php гуру, подредактировать сей скрипт(http://ifolder.ru/4779507) чтобы он отрабатывал на wl500gp.
поменял все пути на свои, а он мне усердно говорит после запуска *.php
./update3.php: ./update3.php: 1: cannot open ?php: No such file
./update3.php: ./update3.php: 2: =/nodshow/: not found
./update3.php: ./update3.php: 3: =/font.ttf: not found
./update3.php: ./update3.php: 4: =/bg.gif: not found
./update3.php: ./update3.php: 5: =10: not found
./update3.php: ./update3.php: 6: =10: not found
./update3.php: ./update3.php: 8: Syntax error: word unexpected (expecting ")")
Хотя папка /nodshow/ на месте. все на месте.
Сей скрипт генерирует gif рисунок с номером обновлений.
Спасибо заранее за помощь.
aka*sAmmY
03-06-2008, 19:59
Доброго времени суток.
Не могли бы php гуру, подредактировать сей скрипт(http://ifolder.ru/4779507) чтобы он отрабатывал на wl500gp.
поменял все пути на свои, а он мне усердно говорит после запуска *.php
./update3.php: ./update3.php: 1: cannot open ?php: No such file
./update3.php: ./update3.php: 2: =/nodshow/: not found
./update3.php: ./update3.php: 3: =/font.ttf: not found
./update3.php: ./update3.php: 4: =/bg.gif: not found
./update3.php: ./update3.php: 5: =10: not found
./update3.php: ./update3.php: 6: =10: not found
./update3.php: ./update3.php: 8: Syntax error: word unexpected (expecting ")")
Хотя папка /nodshow/ на месте. все на месте.
Сей скрипт генерирует gif рисунок с номером обновлений.
Спасибо заранее за помощь.
Добавил уведомление на мыло о неверных ключиках... Протестил отправку с мыла яндекса, работает. По идее должно работать с любого сервера, который работает с SMTP, только если не STARTTLS (например, отправка с www.gmail.com работать не будет). Если на каких-нибудь сервисах будет попадать в спам, отпишите, возможно поправлю. Никаких проверок на ошибки отправки не делал. В общем, если где-то не будет работать, пишите, может быть поправлю.
#!/bin/sh
WEB_ROOT=/opt/share/www #путь к корневой папке домена, где будет лежать зеркало
AVBASE_DIR=nod3 #имя папки, куда будут валиться базы
SERVER=http://update.eset.com #сервер, откуда обновляемся
################################################## ###############################
# Раскоментировать что-либо одно!!!!! #
# DIR=nod_upd #Раскоментировать если нужно зеркало для версии 2 #
DIR=eset_upd #Раскоментировать если нужно зеркало для версии 3 или ESS #
################################################## ###############################
#Ключики для обновления NOD32 с официальных серверов
USER=***-********
PASS=**********
#Здесь задаются параметры уведомления на мыло
MAILTO=server@mail.com # Адрес куда слать уведомления об ошибках
LOGIN=WL-500gP # Логин мыла с которого шлем
DOMAIN=yandex.ru # Доменная часть мыла с которого шлем
SMTP=smtp.yandex.ru # Адрес SMTP-сервера мыла с которого шлем
PASS_SMTP=********* # Пароль мыла с которого шлем
senderror() {
base64_PASS_SMTP=$(echo $PASS_SMTP|base64)
base64_LOGIN=$(echo $LOGIN|base64)
DATE=`date +'%d.%m.%y %T'`
header="Date: $DATE\n"
header=$header'From: ТВОЙ РОУТЕР<'$LOGIN@$DOMAIN'>\n'
header=$header'Message-ID: <172562218.'`date +'%d%m%y%H%M%S'`'@'$DOMAIN'>\n'
header=$header'To: <'$MAILTO'>\n'
header=$header'Subject: Обновление зеркала NOD32\n\n'
text="$DATE - Во время последнего обновления зеркала NOD32 произошла ошибка.\n"
text=$text$ERROR
start="EHLO WL-500gP\nAUTH LOGIN\n$base64_LOGIN\n$base64_PASS_SMTP\nMAIL FROM:$LOGIN@$DOMAIN\nRCPT TO:$MAILTO\nDATA\n"
echo -e "$start$header$text\n.\nQUIT\n"|nc $SMTP 25
}
if [ ! -f "/var/run/$AVBASE_DIR.PID" ]; then
echo $$ > /var/run/$AVBASE_DIR.PID
else
echo Процесс обновления зеркала уже запущен. Пожалуйста дождитесь его окончания.
echo Если Вы уверены что это не так, то удалите файл /var/run/$AVBASE_DIR.PID
exit
fi
cd $WEB_ROOT
mkdir -p $WEB_ROOT/$AVBASE_DIR
mkdir -p $WEB_ROOT/$AVBASE_DIR/tmp
cd $WEB_ROOT/$AVBASE_DIR/tmp
/opt/bin/wget -q -N -nv --cache=off -t 5 --connect-timeout=20 $SERVER/$DIR/update.ver
mv -f update.ver update.rar
/opt/bin/unrar x -y -inul update.rar
if [ ! -f "update.ver" ]; then
mv -f update.rar update.ver
fi
SERVERS=`grep Other= update.ver|grep -v 'Telefonica-Other='|sed s/Other=//|tr -d "\r"|sed s/,/'\n'/g|sed s/^.*@//|sed s/$DIR//|sed s/'\n'/' '/|sed 1d`
rm -f update.ver
rm -f update.rar
rm -f $WEB_ROOT/$AVBASE_DIR/log.txt
for UPDSERVERS in $SERVERS; do
cp -f -p $WEB_ROOT/$AVBASE_DIR/update.ver $WEB_ROOT/$AVBASE_DIR/tmp/update.old
/opt/bin/wget -nv -a log.txt -N --cache=off -t 5 --connect-timeout=20 $UPDSERVERS/$DIR/update.ver
if [ "update.ver" -nt "update.old" ]; then
mv -f update.ver update.rar
/opt/bin/unrar x -y -inul update.rar
if [ ! -f "update.ver" ]; then
cp -f -p update.rar update.ver
fi
IFS=[
for section in `cat update.ver|sed '1s/\[//;s/^ *//'|grep -v '^#'|grep -v '^$'`; do
################################################## #######################################
# ЗАКОМЕНТИРОВАТЬ здесь НУЖНЫЕ языки # #
sect=$(echo $section|sed 's/^.*_CZECH_.*]/DELETE]/') # Чешский #
# sect=$(echo $sect|sed 's/^.*_ENGLISH_.*]/DELETE]/') # Английский #
sect=$(echo $sect|sed 's/^.*_FRENCH_.*]/DELETE]/') # Французкий #
sect=$(echo $sect|sed 's/^.*_GERMAN_.*]/DELETE]/') # Немецкий #
sect=$(echo $sect|sed 's/^.*_ITALIAN_.*]/DELETE]/') # Итальянский #
sect=$(echo $sect|sed 's/^.*_JAPANESE_.*]/DELETE]/') # Японский #
sect=$(echo $sect|sed 's/^.*_POLISH_.*]/DELETE]/') # Польский #
sect=$(echo $sect|sed 's/^.*_PORTUGUESE_.*]/DELETE]/') # Португальский #
sect=$(echo $sect|sed 's/^.*_SLOVAK_.*]/DELETE]/') # Словацкий #
sect=$(echo $sect|sed 's/^.*_SPANISH_.*]/DELETE]/') # Испанский #
sect=$(echo $sect|sed 's/^.*_CROATIAN_.*]/DELETE]/') # Хорватский #
sect=$(echo $sect|sed 's/^.*_HUNGARIAN_.*]/DELETE]/') # Венгерский #
sect=$(echo $sect|sed 's/^.*_CHINESE_.*]/DELETE]/') # Китайский #
sect=$(echo $sect|sed 's/^.*_DUTCH_.*]/DELETE]/') # Датский #
################################################## ################################################## #####################
# Файлы обновлений для уменьшения трафика #
# ЗАКОМЕНТИРОВАТЬ если ЗАГРУЖАТЬ #
# sect=$(echo $sect|sed 's/^CONTINUOUS_.*]/DELETE]/;s/^REVERSE_.*]/DELETE]/;s/^PRELIMINARY_.*]/DELETE]/') #
################################################## ################################################## #####################
sect=$(echo $sect|sed 's/^VER]/DELETE]/;s/^HOSTS]/DELETE]/;s/^Expire]/DELETE]/;s/^SETUP]/DELETE]/;s/^COMPATLIST]/DELETE]/;s/^data0001]/DELETE]/')
if [ -z $(echo $sect|grep '^DELETE]') ]; then
eval $(echo $sect|tr -d "\r"|grep 'file='|sed 's/ *=/=/;s/= */=/')
cp -f $WEB_ROOT/$AVBASE_DIR/tmp/log.txt $WEB_ROOT/$AVBASE_DIR/log.txt
cd $WEB_ROOT/$AVBASE_DIR
/opt/bin/wget -nv -a log.txt -N --cache=off -t 5 --connect-timeout=20 --http-user=$USER --password=$PASS $UPDSERVERS/$file
cd $WEB_ROOT/$AVBASE_DIR/tmp
cp -f $WEB_ROOT/$AVBASE_DIR/log.txt $WEB_ROOT/$AVBASE_DIR/tmp/log.txt
Auth=`grep 'Authorization failed' log.txt`
if [ ${#Auth} != 0 ]; then
echo Неверные ключики
rm -f log.txt
echo Неверные ключики > log.txt
rm -f update.rar
rm -f update.old
rm -f update.ver
mv -f $WEB_ROOT/$AVBASE_DIR/tmp/log.txt $WEB_ROOT/$AVBASE_DIR/log.txt
rm -r -f $WEB_ROOT/$AVBASE_DIR/tmp
rm -f /var/run/$AVBASE_DIR.PID
rm -f $WEB_ROOT/$AVBASE_DIR/update.new
ERROR="Зеркало $WEB_ROOT/$AVBASE_DIR не было обновлено. Пора бы найти новые рабочие ключики... :-)"
senderror
exit
fi
Saved=`grep '$file.* saved' log.txt`
if [ ${#Saved} != 0 ]; then
echo Ошибка загрузки файла
rm -f log.txt
echo Ошибка загрузки файла $file > log.txt
rm -f update.rar
rm -f update.old
rm -f update.ver
mv -f $WEB_ROOT/AVBASE_DIR/tmp/log.txt $WEB_ROOT/$AVBASE_DIR/log.txt
rm -r -f $WEB_ROOT/$AVBASE_DIR/tmp
rm -f /var/run/$AVBASE_DIR.PID
rm -f $WEB_ROOT/$AVBASE_DIR/update.new
exit
fi
echo [$(echo $sect|sed 's/file=.*\//file=/') >> $WEB_ROOT/$AVBASE_DIR/update.new
fi
done
IFS=' '
cd $WEB_ROOT/$AVBASE_DIR
if [ -f "update.new" ]; then
rm -f update.ver
mv -f update.new update.ver
/opt/bin/touch -am -r $WEB_ROOT/$AVBASE_DIR/tmp/update.rar $WEB_ROOT/$AVBASE_DIR/update.ver
fi
fi
cd $WEB_ROOT/$AVBASE_DIR/tmp
rm -f update.rar
rm -f update.old
rm -f update.ver
done
mv -f $WEB_ROOT/$AVBASE_DIR/tmp/log.txt $WEB_ROOT/$AVBASE_DIR/log.txt
rm -r -f $WEB_ROOT/$AVBASE_DIR/tmp
rm -f /var/run/$AVBASE_DIR.PID
Что-то перестало вообще обновляться :(
В логе:
2008-06-30 23:03:50 URL:http://u24.eset.com///eset_upd/update.ver [2282/2282] -> "update.ver" [1]
2008-06-30 23:03:51 URL:http://89.202.157.135///eset_upd/update.ver [2282/2282] -> "update.ver" [1]
2008-06-30 23:05:42 URL:http://89.202.157.137///eset_upd/update.ver [2282/2282] -> "update.ver" [1]
2008-06-30 23:05:43 URL:http://89.202.157.138///eset_upd/update.ver [2282/2282] -> "update.ver" [1]
2008-06-30 23:05:43 URL:http://89.202.157.139///eset_upd/update.ver [2282/2282] -> "update.ver" [1]
2008-06-30 23:05:44 URL:http://u30.eset.com///eset_upd/update.ver [2282/2282] -> "update.ver" [1]
2008-06-30 23:05:44 URL:http://u31.eset.com///eset_upd/update.ver [2282/2282] -> "update.ver" [1]
2008-06-30 23:05:45 URL:http://u32.eset.com///eset_upd/update.ver [2282/2282] -> "update.ver" [1]
2008-06-30 23:05:45 URL:http://u33.eset.com///eset_upd/update.ver [2282/2282] -> "update.ver" [1]
2008-06-30 23:05:46 URL:http://u34.eset.com///eset_upd/update.ver [2282/2282] -> "update.ver" [1]
2008-06-30 23:05:46 URL:http://u35.eset.com///eset_upd/update.ver [2282/2282] -> "update.ver" [1]
2008-06-30 23:05:47 URL:http://u36.eset.com///eset_upd/update.ver [2282/2282] -> "update.ver" [1]
2008-06-30 23:05:48 URL:http://u37.eset.com///eset_upd/update.ver [2282/2282] -> "update.ver" [1]
2008-06-30 23:05:48 URL:http://u38.eset.com///eset_upd/update.ver [2282/2282] -> "update.ver" [1]
2008-06-30 23:05:49 URL:http://u39.eset.com///eset_upd/update.ver [2282/2282] -> "update.ver" [1]
2008-06-30 23:05:50 URL:http://u40.eset.com///eset_upd/update.ver [2282/2282] -> "update.ver" [1]
2008-06-30 23:05:50 URL:http://u41.eset.com///eset_upd/update.ver [2282/2282] -> "update.ver" [1]
2008-06-30 23:05:51 URL:http://u42.eset.com///eset_upd/update.ver [2282/2282] -> "update.ver" [1]
2008-06-30 23:05:51 URL:http://u43.eset.com///eset_upd/update.ver [2282/2282] -> "update.ver" [1]
2008-06-30 23:05:52 URL:http://u44.eset.com///eset_upd/update.ver [2282/2282] -> "update.ver" [1]
2008-06-30 23:06:02 URL:http://u45.eset.com///eset_upd/update.ver [2282/2282] -> "update.ver" [1]
2008-06-30 23:06:03 URL:http://u46.eset.com///eset_upd/update.ver [2282/2282] -> "update.ver" [1]
2008-06-30 23:06:04 URL:http://u47.eset.com///eset_upd/update.ver [2282/2282] -> "update.ver" [1]
2008-06-30 23:06:05 URL:http://u48.eset.com///eset_upd/update.ver [2282/2282] -> "update.ver" [1]
2008-06-30 23:06:06 URL:http://u49.eset.com///eset_upd/update.ver [2282/2282] -> "update.ver" [1]
В папке:
index.html
log.txt
update.ver
И всё :(
И давно не обновляецца??? Попробуйте стереть update.ver и посмотреть что будет.
И давно не обновляецца??? Попробуйте стереть update.ver и посмотреть что будет.
Давно в папку не заходил, но по файлам, последнее изменение было 16.06.2008
Пробовал с "нуля".
Удалял даже папки, толку нету, хотя думает около 5-ти минут.
Ключики рабочие, проверенные :)
Хорошо. Что в файле index.html? Это видимо, результат ошибочной загрузки какого-то файла... Что в нем? А лучше удалите все папки. Скрипт, на всякий случай возьмите последний, замените (мало ли что). После запуска если опять три файла, то пришлите мне их. Посмотрю. Что-нибудь подскажу. У меня, кстати, только что буквально нормально все обновилось...
Думаю что скрипт попрортился, но попробую не порченный :)
Мда, исходный скрипт так же себя ведёт .......
так и не появилось рабочего решения для зеркала?
так и не появилось рабочего решения для зеркала?
В смысле?
Всё работает (у меня работало), лучше всего получился скрипт у YAG
/usr/bin/wget точно в usr :)
поставил последнюю версию скрипта YAG,
пишет, путь с opt/bin поменял на usr/bin/wget и вот что получилось:
/usr/bin/wget: illegal option -- N
BusyBox v1.1.3 (2008.03.17-18:24+0000) multi-call binary
Usage: wget [-c|--continue] [-q|--quiet] [-O|--output-document file]
[--header 'header: value'] [-Y|--proxy on/off] [-P DIR] url
cannot stat `update.ver': No such file or directory
cannot stat `update.rar': No such file or directory
grep: update.ver: No such file or directory
cannot stat `/tmp/harddisk/www/nod3/tmp/log.txt': No such file or directory
/usr/bin -это встроенный в BusyBox, а нужен - нормальный из репозитария. Он живёт в /opt/usr/bin (если установлен)
asp, спасибо. установил wget полный - теперь вроде как работает.
накачал 18 мб обновлений и после этого скрипт просто висит в консоли, а log.txt наполняется подобного рода содержимым:
2008-08-07 00:56:48 URL:http://89.202.157.137///eset_upd/update.ver [2605/2605] -> "update.ver" [1]
2008-08-07 00:56:49 URL:http://89.202.157.138///eset_upd/update.ver [2605/2605] -> "update.ver" [1]
2008-08-07 00:56:50 URL:http://89.202.157.139///eset_upd/update.ver [2605/2605] -> "update.ver" [1]
2008-08-07 00:56:50 URL:http://u30.eset.com///eset_upd/update.ver [2605/2605] -> "update.ver" [1]
2008-08-07 00:56:52 URL:http://u31.eset.com///eset_upd/update.ver [2605/2605] -> "update.ver" [1]
2008-08-07 00:56:52 URL:http://u32.eset.com///eset_upd/update.ver [2605/2605] -> "update.ver" [1]
2008-08-07 00:56:52 URL:http://u33.eset.com///eset_upd/update.ver [2605/2605] -> "update.ver" [1]
2008-08-07 00:56:54 URL:http://u34.eset.com///eset_upd/update.ver [2605/2605] -> "update.ver" [1]
2008-08-07 00:56:55 URL:http://u35.eset.com///eset_upd/update.ver [2605/2605] -> "update.ver" [1]
2008-08-07 00:56:56 URL:http://u36.eset.com///eset_upd/update.ver [2605/2605] -> "update.ver" [1]
2008-08-07 00:56:56 URL:http://u37.eset.com///eset_upd/update.ver [2605/2605] -> "update.ver" [1]
и больше ничего не происходит. про неправильные ключи ничего не писал и email уведомление не приходило
asp, спасибо. установил wget полный - теперь вроде как работает.
накачал 18 мб обновлений и после этого скрипт просто висит...
После проверки всех серверов остановицца. Все нормально.
Nebulosa
07-08-2008, 09:59
Хм.. Скрипт не совсем так работает, вернее совсем не так работает...
http://u30.eset.com///eset_upd/update.ver - здесь же видно что $SERVER определяются как http://u32.eset.com// (сайт с удвоенными слешами в конце) Нужно подредактировать строчку в скрипте -
SERVERS=`grep Other= update.ver|grep -v 'Telefonica-Other='|sed s/Other=//|tr -d "\r"|sed s/,/'\n'/g|sed s/^.*@//|sed s/$DIR//|sed s/'\n'/' '/|sed 1d`
чтобы вообще убрать последние слеши в конце, тогда все будет работать как нужно.
И еще пожелание к автору: YAG, нельзя ли сделать чтобы проверялись не подряд все сервера, а только один следующий по списку? Я думаю? что логика работы у Uрdаtе Viеwеr та же самая. Ну и хотелось бы его сделать более интелектуальным, чтобы он скачивал только измененные файлы .nup путем сравнения билдов, как это делает вьювер и собственно сам NOD32. Тогда Linux победит. :rolleyes:
Хм.. Скрипт не совсем так работает, вернее совсем не так работает...
http://u30.eset.com///eset_upd/update.ver - здесь же видно что $SERVER определяются как http://u32.eset.com// (сайт с удвоенными слешами в конце) Нужно подредактировать строчку в скрипте -
SERVERS=`grep Other= update.ver|grep -v 'Telefonica-Other='|sed s/Other=//|tr -d "\r"|sed s/,/'\n'/g|sed s/^.*@//|sed s/$DIR//|sed s/'\n'/' '/|sed 1d`
чтобы вообще убрать последние слеши в конце, тогда все будет работать как нужно.
И еще пожелание к автору: YAG, нельзя ли сделать чтобы проверялись не подряд все сервера, а только один следующий по списку? Я думаю? что логика работы у Uрdаtе Viеwеr та же самая. Ну и хотелось бы его сделать более интелектуальным, чтобы он скачивал только измененные файлы .nup путем сравнения билдов, как это делает вьювер и собственно сам NOD32. Тогда Linux победит. :rolleyes:
Просто не заморачивался со слешами, поскольку wget'у по фик на их количество.
Насчет пожеланий. Сделать можно все что угодно. Если браться за это дело серьезно, то получится громадный, но серьезный и умный скрипт, в котором бы я в принципе все делал бы не так. Проводить эту работу честно говоря желания нет, поскольку очень плохо знаком с bash (да и с линуксом, в принципе).
Почему делал проверку всех серверов каждый раз... Незнаю как обновляются официальные продукты НОДа, но помню ситуацию когда перестали работать простые скрипты обновлялки, потому что брали базы с одного адреса... После этого несколько раз на официальных серверах наблюдал картину, когда на одном (или на двух, например) из серверов базы перестают обновляцца.
Загружаются у меня только новые файлы nup но не путем сравнения билдов, а путем проверки новее ли файл на сервере чем в зеркале или нет... Если новее, то загружается. Делал так как проще, но в тоже время чтобы при обрыве связи в следующий раз все корректно обновилось....
Nebulosa
07-08-2008, 16:11
Я имел ввиду не один сервер из списка, а один сервер, следующий по списку. Тоесть обновление проводим с одного сервера, если нет обновлений - запоминаем этот сервер, и в следующий раз обновляемся уже с другого.
Ну я бы приложил усилия в основном для маскировки скрипта. И даже можно выставить нужный User-Agent в wget :D, а такая активность - опрос всех серверов и всех файлов на серверах сразу - несколько подозрительна, я считаю :rolleyes:
После проверки всех серверов остановицца. Все нормально.
оч. долго :cool: можно как-нибудь оптимизировать? чтобы не бегал по всем серверам?
p.s. вопрос: не нашел в топике, вроде где-то вначале было, но ответа не увидел :-/
если нужно зеркало и 2й версии и 3й - просто сделать два скрипта разных? вроде писали , что расскоментировать нельзя в одном скрипте и ту и другую версию
p.s.s. а разница между зеркалами для 2й и 3й версии есть? нод 2й версии нормально обновился с зеркала для 3й :)
Nebulosa, подумаю на досуге и над тем и над другим.
Kolandr, первое переделаем, как я сказал на досуге :) Второе. Разница между версиями есть.
JIoIIIaDka
19-08-2008, 09:58
кто-то там про касперского говорил. у касперского ключи нужны только для клиента, сервер обновлений открыт просто так, забирает примерно таким скриптом (вроде как все версии забирает):
#!/bin/sh -e
WORKDIR=/указать_путь
HOST=ftp://dnl-ru5.kaspersky-labs.com
OPTS="-m -nH -x -nv --cut-dirs=0 nv -P"
cd $WORKDIR
wget $OPTS $WORKDIR $HOST/index -a upkav.log
wget $OPTS $WORKDIR $HOST/bases -X /bases/av/avc/xscale_le/,/bases/av/avc/xscale_be/,/bases/av/avc/sparc32/,/bases/av/avc/ppc32/ -a upkav.log
wget $OPTS $WORKDIR $HOST/AutoPatches -a upkav.log
echo Обновлено `date` >> upkav.log
т.к. на кол-во трафика в моем случае все равно, то оптимизировать было лень..
обновы для нода, 2го и 3го, собирал простыми скриптами с левых зеркал :)
oxygen121
20-08-2008, 11:30
У кого нить зеркало для 3 версии обновляется ??
для 2 у меня все нормально обновляется а для 3 пишет
./nod32Update
cannot stat `/opt/tmp/nod3/update.ver': No such file or directory
Неверные ключики
./nod32Update: ./nod32Update: 1: nc: not found
Ключики 100% рабочие , при этом скрипм минут 5 качает обновления а потом прерывается с этой ошибкой.
у меня обновляется для всех версий, но уведомление о неверных ключах по email не работает
oxygen121
24-08-2008, 09:28
у меня обновляется для всех версий, но уведомление о неверных ключах по email не работает
Может у вас просто netcat не стоит?
Может у вас просто netcat не стоит?
стоит . все равно уведомлений нет.
Скрипт от YAG можно использовать с неофициальными серверами обновлений?
Если нет, то что надо поменять, чтобы можно было?
Nebulosa
16-10-2008, 04:04
Написал свой скрипт, правда не на sh, но с большей функциональностью :) Запрос на обновления происходит с одного сервера за раз, выбор сервера случайный. При устаревании ключиков, скрипт сам их обновляет.
Для работы нужны пакеты wget, unrar и php. Перед началом работы создать подпапку temp - mkdir temp и выставить права на выполнение скрипта chmod +x nod32upd.php, теперь можно запускать его напрямую - ./nod32upd.php. В cron сделать сначала переход в папку со скриптом, затем уже выполнение, т.е. cd /opt/.../nod32updates && ./nod32upd.php
#!/opt/bin/php
<?php
$server="http://update.eset.com";
$v2="nod_upd";
$v3="eset_upd";
function check()
{
$kkeys = 14; // количество проверяемых ключей
$site = ""; // здесь впишите сайт с ключами или локальный файл с ключами.
$file = file_get_contents($site);
$eav="http://download.eset.com/download/win/eav/eav_nt32_enu.msi";
$ess="http://download.eset.com/download/win/ess/ess_nt32_enu.msi";
preg_match_all("/(EAV-[0-9]{8}).*?([a-z0-9]{10})/",$file,$match);
$fk=fopen("temp/keys","w");
for ($i=0; $i<$kkeys; $i++)
{
$f=exec ('/opt/bin/wget -q --spider --http-user='.$match[1][$i].' --password='.$match[2][$i].' '.$eav.'&&echo 1||echo 0');
if ($f) $f=exec ('/opt/bin/wget -q --spider --http-user='.$match[1][$i].' --password='.$match[2][$i].' '.$ess.'&&echo 1||echo 0');
if ($f) fwrite ($fk,$match[1][$i]." ".$match[2][$i]."\n");
}
fclose($fk);
}
function parce ($update)
{
$vp=explode("[",$update);
foreach ($vp as $f=>$k)
{
list($name,$data)=explode("]",$k);
if (ereg("(Expire|SETUP|REVERSE_ENGINE0|COMPATLIST|CONTINUOU S|NOD32MOD_WINNT_[^E]+|NOD32MOD_WIN98_[^E]+)",$name)) continue;
preg_match_all('/([a-zA-Z-]+)=(.*)/',$data,$match);
foreach ($match[1] as $ff=>$kk) $M[$name][$kk]=trim($match[2][$ff]);
}
return $M;
}
function downloader($urls, $domain)
{
$keyf="temp/keys";
preg_match_all("/,? ?[1|2]0@([^,]+)\/(nod|eset)_upd/",$domain,$servers);
$domain=$servers[1][rand(0,count($servers[1]))];
$flag=2;
$keys=file($keyf);
foreach ($keys as $f=>$k)
{
list($user,$pass)=explode(" ",$k);
foreach ($urls as $ff=>$kk)
{
$flag=exec("/opt/bin/wget -q -cPtemp --http-user=".trim($user)." --http-password=".trim($pass)." ".$domain.$kk."&&echo 0||echo 1");
if ($flag) break;
}
if (!$flag) return 0;
else
{
$oostr=str_replace($keys[$f],"",file_get_contents($keyf));
$oo=fopen($keyf,"w");
fwrite($oo,$oostr);
fclose($oo);
}
}
return $flag;
}
function compare ($old,$new)
{
foreach ($new as $f=>$k) if ($new[$f]["build"]!=$old[$f]["build"]) $urls[]=$new[$f]["file"];
if (count($urls)!=0) return $urls; else return 0;
}
function generate ($urls, $new, $dir)
{
if ($urls)
{
$zz=0;
if (!file_exists("temp/keys")) check();
$zz=downloader($urls,$new["HOSTS"]["Other"]);
if ($zz) {check(); $zz=downloader($urls,$new["HOSTS"]["Other"]);}
if (!$zz)
{
$r=fopen("temp/update.ver","w+");
foreach ($new as $f=>$k)
{
if ($f=="HOSTS") continue;
fwrite($r,"[".$f."]\r\n");
foreach ($k as $ff=>$kk)
{
if ($ff=="file") $kk=basename($kk);
fwrite($r, $ff."=".$kk."\r\n");
}
}
fclose($r);
exec("cd temp&&mv -f *.nup update.ver ../".$dir);
}
return $zz;
}
return 0;
}
//Версия 2
exec ("/opt/bin/wget -q -Otemp/update2.rar \"".$server."/".$v2."/update.ver\"&&cd temp&&unrar e -o+ -inul update2.rar&&mv -f update.ver update2new.ver");
$M2new = parce (file_get_contents("temp/update2new.ver"));
generate(compare (parce (@file_get_contents($v2."/update.ver")), $M2new), $M2new, $v2);
//Версия 3
exec ("/opt/bin/wget -q -Otemp/update3.rar \"".$server."/".$v3."/update.ver\"&&cd temp&&unrar e -o+ -inul update3.rar&&mv -f update.ver update3new.ver");
$M3new = parce (file_get_contents("temp/update3new.ver"));
generate(compare (parce (@file_get_contents($v3."/update.ver")), $M3new), $M3new, $v3);
?>
Логику работы взял из NОD32viеw.
Задумка отличная! Вот только у меня не работает:
temp/update2.rar: No such file or directory
PHP Warning: file_get_contents(temp/update2new.ver): failed to open stream: No such file or directory in /tmp/mnt/disc0_1/nod_new/nod_new.php on line 107
PHP Notice: Undefined offset: 1 in /tmp/mnt/disc0_1/nod_new/nod_new.php on line 35
PHP Notice: Undefined variable: M in /tmp/mnt/disc0_1/nod_new/nod_new.php on line 40
PHP Notice: Undefined offset: 1 in /tmp/mnt/disc0_1/nod_new/nod_new.php on line 35
PHP Notice: Undefined variable: M in /tmp/mnt/disc0_1/nod_new/nod_new.php on line 40
PHP Warning: Invalid argument supplied for foreach() in /tmp/mnt/disc0_1/nod_new/nod_new.php on line 72
PHP Notice: Undefined variable: urls in /tmp/mnt/disc0_1/nod_new/nod_new.php on line 73
temp/update3.rar: No such file or directory
PHP Warning: file_get_contents(temp/update3new.ver): failed to open stream: No such file or directory in /tmp/mnt/disc0_1/nod_new/nod_new.php on line 112
PHP Notice: Undefined offset: 1 in /tmp/mnt/disc0_1/nod_new/nod_new.php on line 35
PHP Notice: Undefined variable: M in /tmp/mnt/disc0_1/nod_new/nod_new.php on line 40
PHP Notice: Undefined offset: 1 in /tmp/mnt/disc0_1/nod_new/nod_new.php on line 35
PHP Notice: Undefined variable: M in /tmp/mnt/disc0_1/nod_new/nod_new.php on line 40
PHP Warning: Invalid argument supplied for foreach() in /tmp/mnt/disc0_1/nod_new/nod_new.php on line 72
PHP Notice: Undefined variable: urls in /tmp/mnt/disc0_1/nod_new/nod_new.php on line 73
Полезность: если провадер блокирует отправку почты через 25й порт (типа борьба со спамом), поправьте строчку (где-то в районе 33-35й)
с "echo -e "$start$header$text\n.\nQUIT\n"|nc $SMTP 25"
на " echo -e "$start$header$text\n.\nQUIT\n"|nc $SMTP 587"
Это для яндекса, в остальных случаях - посмотрите в помощи - есть ли у сервера альтернативный SMTP порт.
ЗЫ Через smtp провайдера и mail.ru почта не уходила, ругаясь
"554 SMTP synchronization error" - слишком быстро через nc кидались сообщения.
Nebulosa
17-10-2008, 07:40
Задумка отличная! Вот только у меня не работает:
temp/update2.rar: No such file or directory
...
Надо папку temp создать. Описание поправил.
Nebulosa
С папкой temp та же ошибка. Поменял скрипт, теперь вот это:
PHP Notice: Undefined offset: 1 in /tmp/mnt/disc0_1/nod_new/nod_new.php on line 35
PHP Notice: Undefined offset: 1 in /tmp/mnt/disc0_1/nod_new/nod_new.php on line 35
PHP Notice: Undefined variable: M in /tmp/mnt/disc0_1/nod_new/nod_new.php on line 40
PHP Notice: Undefined index: build in /tmp/mnt/disc0_1/nod_new/nod_new.php on line 72
PHP Notice: Undefined offset: 0 in /tmp/mnt/disc0_1/nod_new/nod_new.php on line 23
PHP Notice: Undefined offset: 0 in /tmp/mnt/disc0_1/nod_new/nod_new.php on line 23
PHP Notice: Undefined offset: 1 in /tmp/mnt/disc0_1/nod_new/nod_new.php on line 23
PHP Notice: Undefined offset: 1 in /tmp/mnt/disc0_1/nod_new/nod_new.php on line 23
PHP Notice: Undefined offset: 2 in /tmp/mnt/disc0_1/nod_new/nod_new.php on line 23
PHP Notice: Undefined offset: 2 in /tmp/mnt/disc0_1/nod_new/nod_new.php on line 23
PHP Notice: Undefined offset: 3 in /tmp/mnt/disc0_1/nod_new/nod_new.php on line 23
PHP Notice: Undefined offset: 3 in /tmp/mnt/disc0_1/nod_new/nod_new.php on line 23
PHP Notice: Undefined offset: 4 in /tmp/mnt/disc0_1/nod_new/nod_new.php on line 23
PHP Notice: Undefined offset: 4 in /tmp/mnt/disc0_1/nod_new/nod_new.php on line 23
PHP Notice: Undefined offset: 5 in /tmp/mnt/disc0_1/nod_new/nod_new.php on line 23
PHP Notice: Undefined offset: 5 in /tmp/mnt/disc0_1/nod_new/nod_new.php on line 23
PHP Notice: Undefined offset: 6 in /tmp/mnt/disc0_1/nod_new/nod_new.php on line 23
PHP Notice: Undefined offset: 6 in /tmp/mnt/disc0_1/nod_new/nod_new.php on line 23
PHP Notice: Undefined offset: 7 in /tmp/mnt/disc0_1/nod_new/nod_new.php on line 23
PHP Notice: Undefined offset: 7 in /tmp/mnt/disc0_1/nod_new/nod_new.php on line 23
PHP Notice: Undefined offset: 8 in /tmp/mnt/disc0_1/nod_new/nod_new.php on line 23
PHP Notice: Undefined offset: 8 in /tmp/mnt/disc0_1/nod_new/nod_new.php on line 23
PHP Notice: Undefined offset: 9 in /tmp/mnt/disc0_1/nod_new/nod_new.php on line 23
PHP Notice: Undefined offset: 9 in /tmp/mnt/disc0_1/nod_new/nod_new.php on line 23
PHP Notice: Undefined offset: 10 in /tmp/mnt/disc0_1/nod_new/nod_new.php on line 23
PHP Notice: Undefined offset: 10 in /tmp/mnt/disc0_1/nod_new/nod_new.php on line 23
PHP Notice: Undefined offset: 11 in /tmp/mnt/disc0_1/nod_new/nod_new.php on line 23
PHP Notice: Undefined offset: 11 in /tmp/mnt/disc0_1/nod_new/nod_new.php on line 23
PHP Notice: Undefined offset: 12 in /tmp/mnt/disc0_1/nod_new/nod_new.php on line 23
PHP Notice: Undefined offset: 12 in /tmp/mnt/disc0_1/nod_new/nod_new.php on line 23
PHP Notice: Undefined offset: 13 in /tmp/mnt/disc0_1/nod_new/nod_new.php on line 23
PHP Notice: Undefined offset: 13 in /tmp/mnt/disc0_1/nod_new/nod_new.php on line 23
PHP Notice: Undefined offset: 0 in /tmp/mnt/disc0_1/nod_new/nod_new.php on line 23
PHP Notice: Undefined offset: 0 in /tmp/mnt/disc0_1/nod_new/nod_new.php on line 23
PHP Notice: Undefined offset: 1 in /tmp/mnt/disc0_1/nod_new/nod_new.php on line 23
PHP Notice: Undefined offset: 1 in /tmp/mnt/disc0_1/nod_new/nod_new.php on line 23
PHP Notice: Undefined offset: 2 in /tmp/mnt/disc0_1/nod_new/nod_new.php on line 23
PHP Notice: Undefined offset: 2 in /tmp/mnt/disc0_1/nod_new/nod_new.php on line 23
PHP Notice: Undefined offset: 3 in /tmp/mnt/disc0_1/nod_new/nod_new.php on line 23
PHP Notice: Undefined offset: 3 in /tmp/mnt/disc0_1/nod_new/nod_new.php on line 23
PHP Notice: Undefined offset: 4 in /tmp/mnt/disc0_1/nod_new/nod_new.php on line 23
PHP Notice: Undefined offset: 4 in /tmp/mnt/disc0_1/nod_new/nod_new.php on line 23
PHP Notice: Undefined offset: 5 in /tmp/mnt/disc0_1/nod_new/nod_new.php on line 23
PHP Notice: Undefined offset: 5 in /tmp/mnt/disc0_1/nod_new/nod_new.php on line 23
PHP Notice: Undefined offset: 6 in /tmp/mnt/disc0_1/nod_new/nod_new.php on line 23
PHP Notice: Undefined offset: 6 in /tmp/mnt/disc0_1/nod_new/nod_new.php on line 23
PHP Notice: Undefined offset: 7 in /tmp/mnt/disc0_1/nod_new/nod_new.php on line 23
PHP Notice: Undefined offset: 7 in /tmp/mnt/disc0_1/nod_new/nod_new.php on line 23
PHP Notice: Undefined offset: 8 in /tmp/mnt/disc0_1/nod_new/nod_new.php on line 23
PHP Notice: Undefined offset: 8 in /tmp/mnt/disc0_1/nod_new/nod_new.php on line 23
PHP Notice: Undefined offset: 9 in /tmp/mnt/disc0_1/nod_new/nod_new.php on line 23
PHP Notice: Undefined offset: 9 in /tmp/mnt/disc0_1/nod_new/nod_new.php on line 23
PHP Notice: Undefined offset: 10 in /tmp/mnt/disc0_1/nod_new/nod_new.php on line 23
PHP Notice: Undefined offset: 10 in /tmp/mnt/disc0_1/nod_new/nod_new.php on line 23
PHP Notice: Undefined offset: 11 in /tmp/mnt/disc0_1/nod_new/nod_new.php on line 23
PHP Notice: Undefined offset: 11 in /tmp/mnt/disc0_1/nod_new/nod_new.php on line 23
PHP Notice: Undefined offset: 12 in /tmp/mnt/disc0_1/nod_new/nod_new.php on line 23
PHP Notice: Undefined offset: 12 in /tmp/mnt/disc0_1/nod_new/nod_new.php on line 23
PHP Notice: Undefined offset: 13 in /tmp/mnt/disc0_1/nod_new/nod_new.php on line 23
PHP Notice: Undefined offset: 13 in /tmp/mnt/disc0_1/nod_new/nod_new.php on line 23
Окончания работы скрипта не дождался.
В домашней директории появились пустой файл null и папка temp/ c файлами keys (пустой), update2.rar, update2new.ver, update3.rar (пустой).
Хм, у меня все проблемы решились с помощью добрых людей, альтернативного сервера, rsync и одной строчки в crontab ;)
Rucha, можно, только радость была преждевременна - сервак потушили, похоже. Сутки радовался жизни :( ...
А так, rsync - отличная штука для копирования файлов, но нужно чтобы на сервере апдейтов его демон крутился.
Написал свой скрипт...
Класс, вроде работает.
Особенно понравилась фича сбора ключей :lol
Хотелось бы всё-таки навести порядок вот с этим:
PHP Notice: Undefined offset: 1 in /opt/nod32/nod32update.php on line 33
PHP Notice: Undefined offset: 1 in /opt/nod32/nod32update.php on line 33
PHP Notice: Undefined index: build in /opt/nod32/nod32update.php on line 70
PHP Notice: Undefined index: HOSTS in /opt/nod32/nod32update.php on line 70
PHP Notice: Undefined variable: urls in /opt/nod32/nod32update.php on line 71
Nebulosa thx
Кому не нравятся нотисы добавляем после <?php
ini_set('display_errors', 0);
error_reporting(0);
у кого пустой файл keys
Файл с Ключами должен иметь вид
блаблабла КОД блаблабла Пароль
блаблабла КОД блаблабла Пароль
если код будет на одной строке а пароль на другой не заработает
Идея интересная, но пока не пашет.
Файл keys пустой. Но есть файлы update2.rar, update3.rar, update2new.ver, update3new.ver.
А более ничего.
Файл ключей формата:
КОД ПАРОЛЬ
Что же ему не так? Али НОДы что поменяли?
YAG
Привет!
Проблема с обновлением Nod 3.x при использование твоего скрипта. Причем скрипт для обновления Nod 2.x работает отлично. Ключи рабочие точно. Сам скрипт стягивает всю базу, но удаляет update.ver и пишет что мол ключи не верные.
Если положить update.ver взяв его с какого нить не офф сервера, все обновляется отлично.
log.txt
........
........
2009-02-12 12:13:50 URL:http://u24.eset.com////download/engine3/em008_32_n3.nup [80285/80285] -> "em008_32_n3.nup" [1]
2009-02-12 12:13:52 URL:http://u24.eset.com////download/engine3/em008_32_n4.nup [84974/84974] -> "em008_32_n4.nup" [1]
2009-02-12 12:13:54 URL:http://u24.eset.com////download/engine3/em008_32_n5.nup [86164/86164] -> "em008_32_n5.nup" [1]
2009-02-12 12:13:56 URL:http://u24.eset.com////download/engine3/em008_32_n6.nup [86335/86335] -> "em008_32_n6.nup" [1]
2009-02-12 12:13:58 URL:http://u24.eset.com////download/engine3/em008_32_n7.nup [87722/87722] -> "em008_32_n7.nup" [1]
Authorization failed.
Authorization failed.
Authorization failed.
Authorization failed.
Authorization failed.
Authorization failed.
Authorization failed.
Authorization failed.
Authorization failed.
Authorization failed.
2009-02-12 12:14:13 URL:http://u24.eset.com////download/engine3/em011_32_l0.nup [126177/126177] -> "em011_32_l0.nup" [1]
2009-02-12 12:14:15 URL:http://u24.eset.com////download/engine3/em011_32_n1.nup [87422/87422] -> "em011_32_n1.nup" [1]
2009-02-12 12:14:18 URL:http://u24.eset.com////download/engine3/em011_32_n2.nup [120948/120948] -> "em011_32_n2.nup" [1]
2009-02-12 12:14:21 URL:http://u24.eset.com////download/engine3/em011_32_n3.nup [121452/121452] -> "em011_32_n3.nup" [1]
2009-02-12 12:14:24 URL:http://u24.eset.com////download/engine3/em011_32_n4.nup [121448/121448] -> "em011_32_n4.nup" [1]
2009-02-12 12:14:26 URL:http://u24.eset.com////download/engine3/em000_64_l0.nup [57625/57625] -> "em000_64_l0.nup" [1]
........
........
2009-02-12 12:14:59 URL:http://u24.eset.com////download/engine3/em008_64_n6.nup [106492/106492] -> "em008_64_n6.nup" [1]
2009-02-12 12:15:01 URL:http://u24.eset.com////download/engine3/em008_64_n7.nup [106635/106635] -> "em008_64_n7.nup" [1]
2009-02-12 12:15:04 URL:http://89.202.157.135///eset_upd/update.ver [2583/2583] -> "update.ver" [1]
2009-02-12 12:15:04 URL:http://89.202.157.136///eset_upd/update.ver [2583/2583] -> "update.ver" [1]
2009-02-12 12:15:05 URL:http://89.202.157.137///eset_upd/update.ver [2583/2583] -> "update.ver" [1]
........
........
Удалил из скрипта if проверки на авторизацию..
Auth=`grep 'Authorization failed' log.txt`
if [ ${#Auth} != 0 ]; then
echo Неверные ключики
rm -f log.txt
echo Неверные ключики > log.txt
rm -f update.rar
rm -f update.old
rm -f update.ver
mv -f $WEB_ROOT/$AVBASE_DIR/tmp/log.txt $WEB_ROOT/$AVBASE_DIR/log.txt
rm -r -f $WEB_ROOT/$AVBASE_DIR/tmp
rm -f /var/run/$AVBASE_DIR.PID
rm -f $WEB_ROOT/$AVBASE_DIR/update.new
ERROR="Зеркало $WEB_ROOT/$AVBASE_DIR не было обновлено. Пора бы найти новые рабочие ключики... :-)"
senderror
exit
fi
все работает, базы качаются, нод обновляется.. хотя в логе и присутствует
Authorization failed.
Authorization failed.
хмм...
Nolik, честно говоря давно уже не лазил в скрипт. У меня он работает. Лезть не хочу, потому что работает, потому что некогда и потому что логика его работы мне совершенно не нравицца и надо переделывать все заново.
Если кто может описать логику работы обновления НОД во всех тонкостях, именно как он это делает, может я бы и написал что-нибудь более правильное. Вообще надо файерволом половить его и посмотреть куда, зачем он лезет и в какой последовательности.
Nolik, честно говоря давно уже не лазил в скрипт. У меня он работает. Лезть не хочу, потому что работает, потому что некогда и потому что логика его работы мне совершенно не нравицца и надо переделывать все заново.
Если кто может описать логику работы обновления НОД во всех тонкостях, именно как он это делает, может я бы и написал что-нибудь более правильное. Вообще надо файерволом половить его и посмотреть куда, зачем он лезет и в какой последовательности.
Посидел, поанализировал работу твоего скрипта - нормальная логика работы у него. Она слегка избыточна, зато сработает почти при любом раскладе (временная недоступность нескольких серверов, несинхронизированность серверов - в любом случае мы будем иметь самые последние базы).
Я твой скрипт доработал:
заменил передачу ошибки с email на sms http://wl500g.info/showthread.php?t=17474, оптимизировал работу по времени в случае проблем с доступностью серверов (уменьшил таймауты при скачивании), оптимизировал алгоритмы (ты там так шустро перекидывал туда-сюда временные файлы - решил убрать на мой взгляд лишние телодвижения со скачаными update.ver :))
добавил:
- невозможность обновлятся через наше зеркало в момент работы скрипта или при неудачном скачивании;
- нормальное протоколирование работы (по крайней мере так легче понять в каком месте ошибка возникает);
- проверки на различные ошибки;
- распознавалку версии для странички на которой отображается состояние онлайн базы;
- упаковку базы в один файл для оффлайн обновлений;
- возможность не скачивать части баз для x64-версий;
- сделал скачивание списка ключей с сайта "верзилла", автоматический перебор и проверку на их валидность.
Короче, если нигде не набокопорил, в теории этот скрипт должен работать абсолютно автоматически.
Думаю надо дать возможность общественности потестить.
В целом алгоритм работы скрипта не менял, для общественности он заключается в следующем:
Скачиваем update.ver с основного сайта обновлений (если сервер оказался недоступным - то прерываем работу скрипта до следующего запуска), в нормальном случае берем из него список серверов.
Далее пробегаем по списку для того, что-бы выяснить есть-ли бОлее новый update.ver по сравнению с нашим. Если сервак недоступный - просто пропускаем его и проверяем следующий. Если ничего не нашли, то пробежав по всем известным, в настоящий момент, серверам завершаем работу.
В случае обнаружения бОлее нового update.ver скачиваем его и проверяем по каждому компоненту обновления. По сути сравниваем не появилась-ли бОлее новая версия каждого из компонентов на текущем сервере обновлений, естественно находим и скачиваем новые компоненты и вместе с этим создаем наш новый локальный update.ver, который будет содержать лиш то, что мы задали в настройках скрипта.
В случае проблем со скачиванием компонентов обновления (упал инет, упал сервер или ещё какая-нибудь бяка) скрипт завершается, при этом наше зеркало не будет доступно для обновлений до тех пор, пока мы опять не запустим скрипт, что-бы он все-таки додел свою работу.
По поводу ключей для доступа к сервакам:
"верзилла" выкладывает файл со списком активных ключей, которые ими проверены. Собственно скрипт его скачивает и создает список ключей для версии ESS (это антивирус + фаервол, наиболее полный вариант NOD32). Логика его работы такова: берем пару USERNAME и PASSWORD из списка, сохраняем его в файлике и пытаемся подлогинится и скачать обновления, если все нормально, то делаем свои дела и заканчиваем работу. При следующем запуске будем брать логин и пароль уже с нашего файла, до тех пор пока нас будут пускать на сервера обновлений.
В случае ошибки авторизации, берем следующую пару логин/пароль из нашего списка и проверяем его и т.д. В случае если ни одна из пар не подойдет, отсылаем sms с ошибкой и завершаем работу. При следующем запуске мы опять скачаем новый файл со списком паролей и попробуем найти корректную пару. По моим наблюдениям: ни разу не было случая что-б ни одна пара не подошла. Фактически всегда подходит первая пара.
P.S. Собственно советую всем после первой настройки скрипта удалить полностью зеркало и дать возможность скрипту создать его заново... Это позволит избавится от лишнего груза в папке.
P.P.S. Если гуру заметят какую-либо неудачную конструкцию в синтаксисе регулярных выражений, то прошу указать мне, потому как
командный интерпретатор bash начал изучать только при написании этого скрипта, а это по сути неделя вечеров.
Браво!!!
Попробую потихоньку потестить. Есть в принципе мысли по поводу сбора ключей еще. Хочу заметить несколько моментов.
1. Логика работы все-таки слишком избыточна.
2. На мой взгляд нужно сделать не невозможность обновления с зеркала в момент его обновления (сорри за каламбур), а изменять структуру зеркала только после того как все новое закачано. Именно с этой целью и была куча телодвижений с update.ver. Обновление же отдельных компонентов зеркала ни разу не давало ошибки у клиента (хотя это конечно возможно). С этой целью я оставлял старый update.ver до окончания процесса обновления зеркала и в самом конце его подменял.
Почему мне не нравицца предложенный тобой вариант. Потому что каналы у многих дохлые, избыточность работы скрипта очень серьезная. Сервера НОДа часто тупят (перегружены всякими скриптами вроде этого которые их все оббегают каждый час). Размер обновлений может достигать десятков мегабайт. В результате имеем не функционирующее пару часов (в самом худшем варианте) зеркало, даже если таймауты ты и подправил.
3. Если уж опирацца на верзиллу (хотя это не правильно, сегодня верзилла - завтра не верзилла, нужно выносить список таких сайтов в отдельный файл, чтобы можно было легко менять, а скрипт уже должен их перебирать), то целесообразно брать последнюю пару ключей, потому как если вдруг раньше срока не забанят, то последняя проживет больше.
Браво!!!
Попробую потихоньку потестить. Есть в принципе мысли по поводу сбора ключей еще. Хочу заметить несколько моментов.
1. Логика работы все-таки слишком избыточна.
2. На мой взгляд нужно сделать не невозможность обновления с зеркала в момент его обновления (сорри за каламбур), а изменять структуру зеркала только после того как все новое закачано. Именно с этой целью и была куча телодвижений с update.ver. Обновление же отдельных компонентов зеркала ни разу не давало ошибки у клиента (хотя это конечно возможно). С этой целью я оставлял старый update.ver до окончания процесса обновления зеркала и в самом конце его подменял.
А что делать, если оборвалась закачка какого-то из компонентов?
Мы становимся перед фактом испорченого компонента.
Почему мне не нравицца предложенный тобой вариант. Потому что каналы у многих дохлые, избыточность работы скрипта очень серьезная.
Сервера НОДа часто тупят (перегружены всякими скриптами вроде этого которые их все оббегают каждый час).
Мне кажется неоптимальность этого алгоритма в следующем:
Нашли мы новую базу на каком-то из серверов, скачали обновления, и пошли дальше по списку, через пару серверов находим еще более новую базу и опять скачиваем. Я такое наблюдал при отладке.
Тут два варианта:
1. Мы не оббегаем список серверов (хотя это занимает пару десятков секунд), а останавливаемся на первом доступном.
2. Мы сначала оббегаем все сервера в поисках самой новой базы и после этого скачиваем её с последнего из доступных серверов. Тем самым мы в любом случае чаще всего будем качать не с самого первого сервера, а с менее загруженых: последних, хотя ни разу не видел, что-б первый сервер отдавал со скоростью меньше моей мегабитки.
Размер обновлений может достигать десятков мегабайт. В результате имеем не функционирующее пару часов (в самом худшем варианте) зеркало, даже если таймауты ты и подправил.
На мегабитке время обновления зеркала 5-7 минут.
Вот сегодня утром было:
2009-07-23 07:44:25 Start NOD32 Updating script. ver 0.5. PID: 4145
...
2009-07-23 07:50:07 NOD32 Updating script successfully completed.
Время оббегания всех серверов - 20-25 сек.
2009-07-23 10:04:18 Start NOD32 Updating script. ver 0.5. PID: 14612
...
2009-07-23 10:04:41 NOD32 Updating script successfully completed.
Тут ничего не сделаешь потому как постояно целиком выкачивается обновленное ядро (кумулятив), которое весит 15 метров - это основная потеря. Можно конечно выкачивать только дифы (компоненты предназначеные для обновления предыдущей быза на текущую - они совсем крохотные), но тогда что делать с клиентами, у которых очень старая база.. Так что все равно приходится тратить время на скачивание всего кумулятива. Хотя надо попытатся разобратся как все таки правильно делать зеркало. Может достаточно скачивать ядро раз в неделю, а ежедневно мелкие файлы-изменения. Хотя тут как-бы не натолкнутся на неприятности с работоспособностью базы.
3. Если уж опирацца на верзиллу (хотя это не правильно, сегодня верзилла - завтра не верзилла, нужно выносить список таких сайтов в отдельный файл, чтобы можно было легко менять, а скрипт уже должен их перебирать), то целесообразно брать последнюю пару ключей, потому как если вдруг раньше срока не забанят, то последняя проживет больше.
Да конечно, в идеале можно перебирать кучу китайских серверов и оттуда выцарапывать ключи... Но они банятся быстрее скорости света.
С верзиллы ключи работают неделями.
Насчет опирания только на одну верзиллу.. Не судите сильно строго, мне нужен был хоть който автомат. ;) На следующей неделе еду в отпуск - хочу что-б зеркало работало без моего участия.
Ну и ещё фактор имеется: для каждого сайта прийдется лепить свой парсер - структура у сайтов-то разная. :(
Кстати тут http://www.eset.eu/support/update-xy1 можно видеть как часто обновляются официальные базы для NOD, не сложно заметить, что обновляются они не чаще чем три раза в сутки:
в районе 6-7 часов утра,
в районе 14-15 часов дня и
в районе 19-21 часа вечера.
Так что есть повод подумать когда именно обновлять зеркало.
На мой взгляд наилучшим временем будет запуск скрипта обновления в
08:00, 15:00 и 21:00. Безусловно это не идеально, можно и вообще каждый час запускать. Но у кого канал не резиновый рекомендую обратить внимание на подобное время.
Начну с конца... Обновляются они по мере готовности новых сигнатур... Но не чаще чем раз в час. Иногда и по два дня не обновляются. Такое часто бывает.
Испорченные компоненты. В идеале надо вначале закачивать, что необходимо и только потом менять структуру зеркала. От этого не уйти.
Неоптимальность. Тут один единственно верный вариант. Второй из Ваших предложенных. По поводу отдачи... Отдают-то они все достаточно быстро, а вот авторизуют иногда очень долго.
Как все таки правильно делать зеркало. Выкачивать нада то что обновилось. Это однозначно. Другой вопрос, что нада бы еще подтирать, то что стало не нужно.
Судить Вас строго не собираюсь. :-) И когда сам лепил это и сейчас опираюсь на несколько требований.
1. Зеркало должно всегда иметь самые новые обновления с официальных серверов на момент обновления этого зеркала.
2. Зеркало всегда должно быть доступно и работоспособно пусть и не с самыми новыми базами независимо от того обновляется ли оно или там какие-то проблемы неизвестно с чем.
Я твой скрипт доработал...
Есть замечание, даже два:
В скрипте есть строчка
if [ "update.ver" -nt "update.old" ]; then
Она сработает неверно, если файла update.old ещё не существует. Соответственно, при первом запуске скрипт пролетает по списку серверов, но базы не скачивает. Причём, если скрипт запускать из-под bash, а не sh, то сработает правильно. Решение - добавить проверку существования файла:
if [ ! -e "update.old" ] || [ "update.ver" -nt "update.old" ]; then
Мне кажется, лучше не вставлять явные пути типа "/opt/bin/wget", "/opt/bin/unrar" и т.п., а добавить в скрипт строчку PATH="/opt/bin:$PATH" и в вызовах писать просто "wget" и т.п. Мало ли у кого что где установлено.
Мне кажется, лучше не вставлять явные пути типа "/opt/bin/wget", "/opt/bin/unrar" и т.п., а добавить в скрипт строчку PATH="/opt/bin:$PATH" и в вызовах писать просто "wget" и т.п. Мало ли у кого что где установлено.
[/LIST]
WGET'ы у всех разные... И не каждый WGET может подойти...
Начну с конца... Обновляются они по мере готовности новых сигнатур... Но не чаще чем раз в час. Иногда и по два дня не обновляются. Такое часто бывает.
Согласен... особенно суббота-воскресенье.
Испорченные компоненты. В идеале надо вначале закачивать, что необходимо и только потом менять структуру зеркала. От этого не уйти.
Угу. Хоть это и усложняет скрипт, но это будет правильно.
Неоптимальность. Тут один единственно верный вариант. Второй из Ваших предложенных. По поводу отдачи... Отдают-то они все достаточно быстро, а вот авторизуют иногда очень долго.
Тогда при предварительном сканировании серверов обновлений, на предмет наиболее свежего обновления, измерять ещё и время. И в дальнейшем скачивать с самого быстрого, имеющию самую свежую базу.
Как все таки правильно делать зеркало. Выкачивать нада то что обновилось. Это однозначно. Другой вопрос, что нада бы еще подтирать, то что стало не нужно.
О... надо будет подумать как сделать.
Судить Вас строго не собираюсь. :-) И когда сам лепил это и сейчас опираюсь на несколько требований.
1. Зеркало должно всегда иметь самые новые обновления с официальных серверов на момент обновления этого зеркала.
2. Зеркало всегда должно быть доступно и работоспособно пусть и не с самыми новыми базами независимо от того обновляется ли оно или там какие-то проблемы неизвестно с чем.
Тогда надо всё новое скачивать в отдельную папку и в случае удачного окончания скачивания всех обновлений, перемещать в папку с базой вместе с новым update.ver. Тогда время недоступности базы будет по сути временем перемещения новых файлов, а это секунды.
Есть замечание, даже два:
В скрипте есть строчка
if [ "update.ver" -nt "update.old" ]; then
Она сработает неверно, если файла update.old ещё не существует. Соответственно, при первом запуске скрипт пролетает по списку серверов, но базы не скачивает. Причём, если скрипт запускать из-под bash, а не sh, то сработает правильно. Решение - добавить проверку существования файла:
if [ ! -e "update.old" ] || [ "update.ver" -nt "update.old" ]; then
я с такой проблемой не столкнулся (стоит bash)... но для совместимости исправил.
Мне кажется, лучше не вставлять явные пути типа "/opt/bin/wget", "/opt/bin/unrar" и т.п., а добавить в скрипт строчку PATH="/opt/bin:$PATH" и в вызовах писать просто "wget" и т.п. Мало ли у кого что где установлено.
[/LIST]
У меня при запуске скрипта cron-ом wget не запускался пока не прописал полный путь. Почему так происходит - не разобрался, хотя в кроне прописано запускать из-под admin, а у admin-а в PATH прописано:
PATH='/opt/sbin:/opt/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin'
Поидее должно-было запускаться, но.... :eek:
Взял скрипт http://wl500g.info/showpost.php?p=153592&postcount=143
Работает. Пришлось лишь доставить wget. Понравилось, то что ключи тянет автоматически. Спасибо.
не подскажете как заставить данный скрипт обновлять базу для 4й версии нод?
не подскажете как заставить данный скрипт обновлять базу для 4й версии нод?
Базы для v3 = базы для v4
колбаскин
06-08-2009, 21:58
Поставил версию из 55 поста (http://wl500g.info/showpost.php?p=95471&postcount=55)
пытаюсь настроить на неофициальный сервер
[maxya@maxya_wi_fi root]$ /opt/etc/cron.daily/nod.sh
HTTP request sent, awaiting response... 200 OK
Length: 5231 (5.1K) [text/plain]
Saving to: `update.ver'
100%[======================================>] 5,231 --.-K/s in 0.003s
2009-08-06 22:54:29 (1.73 MB/s) - `update.ver' saved [5231/5231]
UNRAR 3.80 freeware Copyright (c) 1993-2008 Alexander Roshal
update.rar is not RAR archive
No files to extract
[maxya@maxya_wi_fi root]$
что не так? почему не обновляет?
Nebulosa
07-08-2009, 04:50
Поставил версию из 55 поста (http://wl500g.info/showpost.php?p=95471&postcount=55)
пытаюсь настроить на неофициальный сервер
update.rar is not RAR archive
Все верно! Файл update.ver это обычный текстовый файл а не rar-архив, так делают все неофициальные серверы, а официальные - напротив - пакуют в rar.
Или отключайте распаковку из скрипта, или обновляйтесь с официального сервера
колбаскин
07-08-2009, 06:44
Все верно! Файл update.ver это обычный текстовый файл а не rar-архив, так делают все неофициальные серверы, а официальные - напротив - пакуют в rar.
Или отключайте распаковку из скрипта, или обновляйтесь с официального сервера
если вас не затруднит , как сделать обнову с неофициального?
обновляться с официального увы не могу , по финансовым причинам
если вас не затруднит , как сделать обнову с неофициального?
обновляться с официального увы не могу , по финансовым причинам
вы наверно шутите? зеркалирование обычно все делают именно с официальных серваков, ибо никто не знает как часто обновляются неофф... да и не к чему от них зависеть. ключи найти сейчас не проблема - гугл в помощь. я кстати юзаю этот скрипт - Скрипт по обновлению антивирусных баз NOD32 под Linux (PHP) (http://www.volmed.org.ru/wiki/index.php/%D0%A1%D0%BA%D1%80%D0%B8%D0%BF%D1%82_%D0%BF%D0%BE_ %D0%BE%D0%B1%D0%BD%D0%BE%D0%B2%D0%BB%D0%B5%D0%BD%D 0%B8%D1%8E_%D0%B0%D0%BD%D1%82%D0%B8%D0%B2%D0%B8%D1 %80%D1%83%D1%81%D0%BD%D1%8B%D1%85_%D0%B1%D0%B0%D0% B7_NOD32_%D0%BF%D0%BE%D0%B4_Linux_%28PHP%29), чего и вам желаю. всё оч удобно, никаких лишних заморочек...
Что умеет скрипт.
Умеет все тоже, что и скрипт на bash, только работает быстрее, один скрипт может обновлять обе версии и можно использовать на любой платформе (сам не пробовал) .
Обновляет базы с официальных и бесплатных серверов NOD32 (для официальных серверов нужно задать имя и пароль для обновления). Причем, при обновлении с бесплатных серверов скрипт пробует обновится со всех серверов, указанных в update.ver и прекращает работу при первом удачном обновлении.
Может работать через прокси сервер с аутентификацией и без нее.
Может отправлять сообщение на указанный п/я с информацией об ошибке или при удачном обновлении с изменением версии базы.
Обновляет сразу базы для V2 и V3, но может и отдельно.
Если на сервере названия файлов не совпадают с локальными - не качает, а переименовывает файлы.
Сам создает файл update.ver. Те при обновлении с зеркал обновляются только компоненты с более новыми версиями.
Автоматически создает папки, нужные для работы программы, в том числе и для Web сервера.
Создает папку на веб сервере с файлами обновления.
При ошибке обновления восстанавливает базу в том виде, которая была до обновления.
Скрипт автоматически создает папки для временного хранения копий баз /var/lib/nod32/mirror_V2 и /var/lib/nod32/mirror_V3 и загружает туда файлы антивирусных баз. Если обновление прошло успешно, то переписывает базы в WEB директорию, а если произошла ошибка, то наоборот, восстанавливает базы, переписывая их из WEB директории в папку временного хранения.
Nebulosa
09-08-2009, 04:37
если вас не затруднит , как сделать обнову с неофициального?
обновляться с официального увы не могу , по финансовым причинам
Ну нет желания копаться в чужом коде, спрашивайте автора скрипта ;) Опять же обновлятся с неофициальных серверов нецелесообразно.
Сам я пользуюсь собственным апдейтером - http://wl500g.info/showpost.php?p=115456&postcount=130 :)
Сам я пользуюсь собственным апдейтером - http://wl500g.info/showpost.php?p=115456&postcount=130 :)... и это самый элегантный апдейтер из всех, что я видел.
Работает у меня с прошлого года.
Matashin
11-08-2009, 14:04
... и это самый элегантный апдейтер из всех, что я видел.
Работает у меня с прошлого года.
А у меня не работает выдает вот такое:
PHP Notice: Undefined offset: 1 in /opt/share/www/nod32/nod32upd.php on line 33
PHP Notice: Undefined offset: 1 in /opt/share/www/nod32/nod32upd.php on line 33
PHP Notice: Undefined variable: M in /opt/share/www/nod32/nod32upd.php on line 38
PHP Notice: Undefined index: build in /opt/share/www/nod32/nod32upd.php on line 70
PHP Notice: Undefined offset: 0 in /opt/share/www/nod32/nod32upd.php on line 21
PHP Notice: Undefined offset: 0 in /opt/share/www/nod32/nod32upd.php on line 21
PHP Notice: Undefined offset: 1 in /opt/share/www/nod32/nod32upd.php on line 21
PHP Notice: Undefined offset: 1 in /opt/share/www/nod32/nod32upd.php on line 21
создает в temp 5 файлов и все :(
Matashin, сайт с ключами вписан?
$site = "http://www.for-ever.cn/nod32/"; // здесь впишите сайт ....Нотисы на работу не влияют, просто предупреждают о неопределенности переменных.
Да, сначала в ./tmp создается пять файлов, потом туда выкачивается зеркало (какое-то время), потом зеркало перемещается в директорию назначения.
Matashin
11-08-2009, 15:47
Matashin, сайт с ключами вписан?
$site = "http://www.for-ever.cn/nod32/"; // здесь впишите сайт ....Нотисы на работу не влияют, просто предупреждают о неопределенности переменных.
Да, сначала в ./tmp создается пять файлов, потом туда выкачивается зеркало (какое-то время), потом зеркало перемещается в директорию назначения.
Спасибо.
прописал как написали, начал качать, до этого пробовал ему файл дать с ключами не работал.
И еще может кто подскажет почему может быть так:
взял от сюда другой скрипт (nod32upd.sh), он работает, но только из командной сроки.
При запуске из по cron ничего не обновляет, выяснил, что не может получить список серверов.
http://werzilla.ru/login_and_password.txt
изменили файл на http://werzilla.ru/login_and_password(12345).txt, если меняешь в коде http://wl500g.info/attachment.php?attachmentid=5152&d=1248296619
то ругается на скобки:mad:
http://werzilla.ru/login_and_password.txt
изменили файл на http://werzilla.ru/login_and_password(12345).txt, если меняешь в коде http://wl500g.info/attachment.php?attachmentid=5152&d=1248296619
то ругается на скобки:mad:
Обновленный рабочий вариант.
колбаскин
28-09-2009, 11:47
http://werzilla.ru/login_and_password.txt
изменили файл на http://werzilla.ru/login_and_password(12345).txt, если меняешь в коде http://wl500g.info/attachment.php?attachmentid=5152&d=1248296619
то ругается на скобки:mad:
Также ругается на скобки! версия в посте ниже реагирует также
смс на телефон не отправляет! Если отсылать смс просто - то приходит!
wget: http://werzilla.ru/login_and_password(12345).txt.log: No such file or dire
ctory
PHP Warning: unpack(): Type L: not enough input, need 4, have 1 in /opt/etc/sen
dsms/pro.mrim.proxy.class.php on line 1119
contact list not send. Sms send Error.[maxya@maxya_wi_fi root]$
Извините за глупый вопрос в ноде какова вида писать сервер обновления?
http://айпи:порт ?
нужно указывать имя и пороль и какой порт указывать ? :confused:
колбаскин
28-09-2009, 18:54
Прописал KEYSFILE_NAME=http://werzilla.ru/login_and_password\(12345\).txt
wget качает, а вот скрипт
[]$ /opt/etc/cron.daily/nod32upd.sh
wget: http://werzilla.ru/login_and_password(12345).txt.log: No such file or dire
ctory
/opt/etc/sendsms/send.php 380XXXXXXX 28.09 20:20:53, NOD32 updating: Error downloading list of keys
У кого-то работает?
Может ли кто-нибудь подсказать установку для обновления
антивируса NOD32 4.0 с роута по сети
с нуля. пошагово желательно. уверен, многим поможет ;)
ветку прочитал, очень разрозненные :) объяснения, для подкованных юзерей.
(использую NOD32 4.0: один на 32-й WinXP и один на 64-й Win7 RTL)
P.S. Конечно, не с самого НУЛЯ, а уже когда роутер настроен по одной из Инструкций:
есть /opt, веб сервер, крон, и т.п.
колбаскин
01-10-2009, 07:56
Люди у кого-то работает нормально или нет?
О своей ошибке писал выше
Люди у кого-то работает нормально или нет?
О своей ошибке писал выше
На предыдущей странице новая версия - с ней все нормально работает.
колбаскин
01-10-2009, 09:38
Взял версию из 165го поста (http://wl500g.info/showpost.php?p=161794&postcount=165)
пытаюсь обновить - пишет
[maxya@maxya_wi_fi root]$ /opt/etc/cron.daily/nod32upd.sh
-sh: /opt/etc/cron.daily/nod32upd.sh: Permission denied
[maxya@maxya_wi_fi root]$ chmod +x /opt/etc/cron.daily/nod32upd.sh
[maxya@maxya_wi_fi root]$ /opt/etc/cron.daily/nod32upd.sh
wget: http://werzilla.ru/login_and_password(12345).txt.log: No such file or dire
ctory
/opt/etc/sendsms/send.php 380xxxxxxx 01.10 11:20:56, NOD32 updating: Error dow
nloading list of keys[maxya@maxya_wi_fi root]$
Если самому подложить файл key.txt в папку вебсервера, то лог
2009-10-01 11:27:31 Start NOD32 Updating script. ver 0.5. PID: 20078
Loading username & password from file
Username: ++++++++++++++++++++++++++++++++++++++++++++++++++ ++++++
Password: + +
Expiry Date: + Информация предоставлена сайтом: http://werzilla.ru/ +
Downloading update.ver
wget: unable to resolve host address `+++++++++++++++++++++++++++++++++++++++++++++++++ +++++++\r'
wget: unable to resolve host address `+'
wget: unable to resolve host address `+\r'
2009-10-01 11:27:42 URL:http://update.eset.com/nod_upd/update.ver [4036/4036] -> "update.ver" [1]
FINISHED --2009-10-01 11:27:42--
Downloaded: 1 files, 3.9K in 0s (788 KB/s)
Error downloading file http://update.eset.com/nod_upd/update.ver
Clearing tmp
Abort
колбаскин, проверяйте строчку:
/opt/bin/wget -nd --timestamping -o $KEYSFILE_NAME.log http://werzilla.ru/$KEYSFILE_NAME
у вас почему-то игнорируется опция -o. Попробуйте её удалить или прописать целиком.
И вообще - у вас точно wget из репов установлен?
ЗЫ
USER=$(cat $KEY_F|sed -n '1,1p')
PASS=$(cat $KEY_F|sed -n '2,2p')
EXPIRY=$(cat $KEY_F|sed -n '3,3p')
судя по всему тащит кучу мусора =) Может лучше прикрутить доп фильтрацию по началу строки? =)
колбаскин
02-10-2009, 07:45
Все спасибо! заработал скрипт!
Как часто нужно исполнять его и куда лучше кинуть?
Извините за глупый вопрос в ноде какова вида писать сервер обновления?
http://айпи:порт ?
нужно указывать имя и пороль и какой порт указывать ? :confused:
Адрес зависит от настроек http сервера.
Имя и пароль также указываются в настройках сервера.
Короче ты должен установить http сервер (например lighttpd) и настроить его на папку, куда у тебя складывается зеркало. Или наборот сделать линк на папку с зеркалом в рабочей папке сервера.
Грубо: по умолчанию рабочая папка lighttpd: /opt/share/www/
я в ней создал папку nod32, в nod32 у меня лежит страничка, которая показывает версию последней обновленной базы и статус работы скрипта.
Также там лежит и файл с актуальным ключем, котрый создает скрипт.
В этой папке лежит папка base, которая по сути является линком на папку с зеркалом.
Т.е. полный путь выглядит так /opt/share/www/nod32/base/
А обращение со стороны клиента выглядит так:
http://xxx.xxx.xxx.xxx:<lighttpd port>/nod32/base/
В любой момент я могу зайти с браузера по адресу http://xxx.xxx.xxx.xxx:<lighttpd port>/nod32/index.shtml и поглядеть как у меня отработал скрипт.
Вообще тебе в ветки про http-серверы. Направление куда копать надеюсь указал.
P.S. xxx.xxx.xxx.xxx - айпи адрес твоего роутера.
Если идется про доступ со стороны локальной сети самого роутера, то вместо ip можно написать my.router.
Все спасибо! заработал скрипт!
Как часто нужно исполнять его и куда лучше кинуть?
Самый простой вариант: поставь cron (если не стоит) и кинь скрипт в папку /opt/etc/cron.daily
Если надо чаще, то открывай /opt/etc/crontab и редактируй под свои вкусы.
Типа такого:
00 08 * * * admin /opt/etc/nod32upd
00 14 * * * admin /opt/etc/nod32upd
00 20 * * * admin /opt/etc/nod32upd
Ну если есть нужда ежечасного обновления, то кинь скрипт в папку /opt/etc/cron.hourly. Тогда скрипт будет запускатся каждый час.
Может ли кто-нибудь подсказать установку для обновления
антивируса NOD32 4.0 с роута по сети
с нуля. пошагово желательно. уверен, многим поможет ;)
ветку прочитал, очень разрозненные :) объяснения, для подкованных юзерей.
(использую NOD32 4.0: один на 32-й WinXP и один на 64-й Win7 RTL)
P.S. Конечно, не с самого НУЛЯ, а уже когда роутер настроен по одной из Инструкций:
есть /opt, веб сервер, крон, и т.п.
Наверное из-за того, что это очень просто, никто ничего и не написал.
Установка заключается в том, что просто копируешь скрипт в любую удобную для себя папку, конфигурируешь под себя, даешь права на выполнение и запускаешь, руками или эпизодически тем-же кроном.
Конфигурация:
Внутри скрипта есть переменные, которые находятся в самом начале скрипта и там-же есть комментарий.
Наиболее вероятно что прийдется изменять это:
WEB_ROOT - основной путь куда складываются все рабочие файлы, тобишь: лог работы (если не менялась переменная LOG), файл с текущим ключем (если не менялась переменная KEY_F), файл статуса выполнения работы.
AVBASE_DIR - папка, которая находится в WEB_ROOT, в которой по сути и есть файлы "зеркала" и иногда появляются временные файл во время работы скрипта.
KEYSFILE_DIR - папка, куда кидается файл со списком ключей.
NTEL - номер телефона на который высылается СМС в случае проблем при работе скрипта.
Ну собственно дальнейшее зависит от того, для чего ты делал зеркало.
Обычно подымается http сервер и юзают это зеркало для удаленного обновления антивирусов. Как настраивают http сервер - ничего сложного, если настройки скрипта не трогать, то скрипт просто будет кидать зеркало в папку nod32, которое как раз является рабочей папкой для http-сервера lighttpd. Тонкости возникают если вдруг ты захочешь запаролить или перенести в другое место рабочую папку.
Наверное из-за того, что это очень просто, никто ничего и не написал.
Установка заключается в том, что просто копируешь скрипт в любую удобную для себя папку, конфигурируешь под себя, даешь права на выполнение и запускаешь, руками или эпизодически тем-же кроном.
Спасибо за разъяснение! Я так и понял, но думал, что как всегда
какие-нибудь заморочки...
Оказалось, что скрипт все делает сам, после подстройки.
Еще раз спасибо и удачи!
Скрипт у меня заработал сразу, а вот работу по расписанию не могу настроить, cron работает, но скрипт почему то не запускает. Crontab выглядит так:
SHELL=/bin/sh
PATH=/sbin:/bin:/usr/sbin:/usr/bin:/opt/sbin:/opt/bin
MAILTO=""
HOME=/
# ---------- ---------- Default is Empty ---------- ---------- #
30 * * * * root /opt/bin/run-parts /opt/etc/eset
сам скрипт естественно лежит по адресу /opt/etc/eset, в логах появляется такая надпись:
Oct 6 00:30:01 /opt/sbin/cron[454]: (root) CMD (/opt/bin/run-parts /opt/etc/eset) из чего можно сделать вывод, что cron по расписанию срабатывает, но вот почему не запускает скрипт - не понятно
BcTpe4HbIu
05-10-2009, 19:23
Скрипт у меня заработал сразу, а вот работу по расписанию не могу настроить, cron работает, но скрипт почему то не запускает. Crontab выглядит так:
сам скрипт естественно лежит по адресу /opt/etc/eset, в логах появляется такая надпись:
из чего можно сделать вывод, что cron по расписанию срабатывает, но вот почему не запускает скрипт - не понятно
30 * * * * root /opt/etc/eset
/opt/bin/run-parts не нужен тут;)
30 * * * * root /opt/etc/eset
/opt/bin/run-parts не нужен тут;)
Попробовал - не работает:confused:
Попробовал - не работает:confused:
Правила для cron в Windows создавали? Может быть мусор в конце строк.
Правила для cron в Windows создавали? Может быть мусор в конце строк.
Нет, всё делал непосредственно на роутере. Сейчас попробовал такой вариант: к скрипту добавил расширение *.sh, а в crontab прописал такое:
SHELL=/bin/sh
PATH=/sbin:/bin:/usr/sbin:/usr/bin:/opt/sbin:/opt/bin
MAILTO=""
HOME=/
# ---------- ---------- Default is Empty ---------- ---------- #
01 * * * * root /opt/etc/eset/nod32upd.sh
В таком варианте всё работает
Нет, всё делал непосредственно на роутере. Сейчас попробовал такой вариант: к скрипту добавил расширение *.sh, а в crontab прописал такое:
SHELL=/bin/sh
PATH=/sbin:/bin:/usr/sbin:/usr/bin:/opt/sbin:/opt/bin
MAILTO=""
HOME=/
# ---------- ---------- Default is Empty ---------- ---------- #
01 * * * * root /opt/etc/eset/nod32upd.sh
В таком варианте всё работает
Так что ж вы сразу не сказали, что /opt/etc/eset - это папка? Конечно, надо путь к файлу скрипта прописывать, а не к папке, в которой он лежит.
До сегодняшнего дня всё нормально работало, а сегодня вот такая ерунда:
2009-10-13 17:40:57 Start NOD32 Updating script. ver 0.5. PID: 337
Downloading list of keys...Error
Fatal error: Error downloading list of keys
Sending error message to phone (Error downloading list of keys)
Clearing tmp
Abort
Сам себе отвечаю)) Но может ещё кому-нибудь пригодится. В скрипте надо поменять:
KEYSFILE_NAME=login_and_password\(12345\).txt # Имя файла со списком ключей
на
KEYSFILE_NAME=login_and_password\(54321\).txt # Имя файла со списком ключей
Сам себе отвечаю)) Но может ещё кому-нибудь пригодится. В скрипте надо поменять:
на
Изменил, заработало!!!
Подскажите, нужны обновления для: 32-х и 64-х битных антивирусов, не очень разобрался с комментами в скрипте :rolleyes: что б для обоих версий?
почти 25 мб обновления ежедневно это нормально?:confused:
как поумерить аппетитек...
а как открыть доступ к моему серверу обновления снаружи
Подскажите, нужны обновления для: 32-х и 64-х битных антивирусов, не очень разобрался с комментами в скрипте :rolleyes: что б для обоих версий?
сделай так:
#####################################
# x64
# sect=$(echo $sect|sed 's/^.*64.]/DELETE]/')
т.е. заккоментируй строку.
почти 25 мб обновления ежедневно это нормально?:confused:
как поумерить аппетитек...
Никак... ранее обсуждалось. Размер обновлений от 15 метров и выше.
а как открыть доступ к моему серверу обновления снаружи
Ну если http-сервер уже поставил и во внутренней сети все нормально работает, то наружу открывать надо порт, на котором у тебя сидит сервер.
Например сервер висит на порту 8080, то в файле:
/usr/local/sbin/post-firewall
пишешь:
iptables -I INPUT -p tcp --dport 8080 -j ACCEPT
не забудь сохранить файлик во флэше и перегрузи роутер.
сделай так:
#####################################
# x64
# sect=$(echo $sect|sed 's/^.*64.]/DELETE]/')
т.е. заккоментируй строку.
Спасибо за подсказку!
Так, что оказывается по умолчанию так и есть!
ничего не менял, обновлялся и 32 и 64-ый .
Но ТОЛЬКО пока в ручную, надо с cron разбираться, сейчас стоит
crond с прошивки, поставлю полный - попробую...
А ведь должен и на встроеном работать...
Ух ты, изменил chown файла nod32upd.sh (admin) -все заработало!!!
Адрес зависит от настроек http сервера.
Имя и пароль также указываются в настройках сервера.
Короче ты должен установить http сервер (например lighttpd) и настроить его на папку, куда у тебя складывается зеркало. Или наборот сделать линк на папку с зеркалом в рабочей папке сервера.
Грубо: по умолчанию рабочая папка lighttpd: /opt/share/www/
я в ней создал папку nod32, в nod32 у меня лежит страничка, которая показывает версию последней обновленной базы и статус работы скрипта.
Также там лежит и файл с актуальным ключем, котрый создает скрипт.
В этой папке лежит папка base, которая по сути является линком на папку с зеркалом.
Т.е. полный путь выглядит так /opt/share/www/nod32/base/
А обращение со стороны клиента выглядит так:
http://xxx.xxx.xxx.xxx:<lighttpd port>/nod32/base/
В любой момент я могу зайти с браузера по адресу http://xxx.xxx.xxx.xxx:<lighttpd port>/nod32/index.shtml и поглядеть как у меня отработал скрипт.
Вообще тебе в ветки про http-серверы. Направление куда копать надеюсь указал.
P.S. xxx.xxx.xxx.xxx - айпи адрес твоего роутера.
Если идется про доступ со стороны локальной сети самого роутера, то вместо ip можно написать my.router.
А если у меня HTTP закрыт и стоит HTTPS ??? lighttpd стоит на торент по нему хожу.
Обновился файл ключей:
login_and_password(543219).txt
нужно изменить в скрипте. ;)
Обновился файл ключей:
login_and_password(543219).txt
нужно изменить в скрипте. ;)
Уже и этот не доступен.
Уже и этот не доступен.
Поменяли опять, теперь лежит в:
werzilla.ru/soft/keysforantiv/5-klyuchi-dlya-nod32.html
Может стоит чуть усложнить скрипт, чтобы путь брался с главной страницы?
колбаскин
27-10-2009, 10:06
Поменяли опять, теперь лежит в:
werzilla.ru/soft/keysforantiv/5-klyuchi-dlya-nod32.html
Может стоит чуть усложнить скрипт, чтобы путь брался с главной страницы?
Это было бы неплохо! чет видимо жалко им чтобы брали их ключики....
Спасибо за скрипт, только файлик опять переименовали.
Нашел еще забиралку, как описано еще и с автопоиском написанную на Perl для NOD32 v3 и Eset Smart Security v3
вот тут (http://www.mediafire.com/?znjb5btlpjl). Спасибо руборду (http://forum.ru-board.com/topic.cgi?forum=35&topic=39133&start=1744&limit=1#1) и Igorek2006.
Ковыряем.
Поменяли опять, теперь лежит в:
werzilla.ru/soft/keysforantiv/5-klyuchi-dlya-nod32.html
Может стоит чуть усложнить скрипт, чтобы путь брался с главной страницы?
В любом случае, парсер нужно менять. Этот уже не достает логин и пароль из нового файла.
grandcat
28-10-2009, 08:50
Можно вот так
------------------
KEYSFILE_NAME=5-klyuchi-dlya-nod32.html # Имя файла со списком ключей
-----------------
/opt/bin/wget -nd --timestamping -o $KEYSFILE_NAME.log http://werzilla.ru/soft/antivirus/keysforantiv/$KEYSFILE_NAME
-----------------
# Вырежем ключи для ESS и будем с ними работать
ess_keys=$(sed '/Username/!d; /Password/!d; /Expiry Date/!d' $KEYSFILE_DIR/$KEYSFILE_NAME)
ess_keys=$(echo $ess_keys|sed "s/<br/\n/g")
ess_keys=$(echo "$ess_keys"|tr -d "< />")
-----------------
Пока неспеша делал парсер который-бы брал ссылку к файлу с ключами, они начали выкладывать ключи в самой страничке.
Как раз и переделал под такой вариант.
По сути:
KEYS_HTML - ссылка на html страницу
Скрипт после парсинга создает файл KEYSFILE.
Это список ключей для ESS (для контроля или может кому нужны будут ключи для ручных прописываний в проге)
Там немного мусора, но он не мешает.
Версия: 0.6
Кстати, пару недель назад обратил внимание, что ESET что-то меняла на серверах туда-сюда и скрипт много лишнего накачал. Профилактически прибейте базу, пускай скрипт заново накачает обновлений.
В любом случае, парсер нужно менять. Этот уже не достает логин и пароль из нового файла.
Уже достает... со странички.
NetSpider
28-10-2009, 10:30
А я сделал немного под-другому. Поковырял их исполняемый файл для загрузки ключей. Выяснил, что по путям
GET /EAV.htm - лежат ключи для старого NOD
GET /ESS.htm - дл нового NOD
Присвоил переменной KEYSFILE_NAME=EAV.htm
И выкинул теги
ess_keys=$(sed 's/<[^>]*>//g;' $KEYSFILE_DIR/$KEYSFILE_NAME)
Мусор конечно тоже остался, но после этого все заработало.
А я сделал немного под-другому. Поковырял их исполняемый файл для загрузки ключей. Выяснил, что по путям
/EAV.htm - лежат ключи для старого NOD
/ESS.htm - дл нового NOD
Это не старый или новый нод, это разные варианты одного и того-же НОДа.
EAV - только антивирус
ESS - антивирус + фаерволл.
Присвоил переменной KEYSFILE_NAME=EAV.htm
И выкинул теги
ess_keys=$(sed 's/<[^>]*>//g;' $KEYSFILE_DIR/$KEYSFILE_NAME)
Мусор конечно тоже остался, но после этого все заработало.
А откуда на диске у тебя вообще взялись EAV.htm и ESS.htm?
Чей исполняемый файл ты поковырял?
NetSpider
28-10-2009, 10:43
А откуда на диске у тебя вообще взялись EAV.htm и ESS.htm?
Чей исполняемый файл ты поковырял?
Они и не взялить. Проще говоря http://werzilla.ru/EAV.htm .Ковырял http://wxxzilla.ru/engine/download.php?id=3. Он обращается по этим ссылкам, чтоб получить ключи
Они и не взялить. Проще говоря http://werzilla.ru/EAV.htm .Ковырял http://wxxzilla.ru/engine/download.php?id=3. Он обращается по этим ссылкам, чтоб получить ключи
Всё... понял. И сделал вариант по твоим исследованиям.
ver 0.6.1
колбаскин
28-10-2009, 13:10
Закинул новые скрипты! Со страницами ключей сразу не разобрался...
жаль что не написали сразу что да как...пришлось время потратить!
Помогите люди добрые
на скрипте :
http://wl500g.info/showpost.php?p=95471&postcount=55
ПИШЕТ, РУГАЕТСЯ :
./upd.sh start
--1970-01-01 05:06:08-- http://update.eset.com/eset_upd/update.ver
Resolving update.eset.com... 90.183.101.10, 90.183.101.16, 90.183.101.14, . ..
Connecting to update.eset.com|90.183.101.10|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 3368 (3.3K) [application/octet-stream]
Saving to: `update.ver'
100%[=================================>] 3,368 --.-K/s in 0.09s
1970-01-01 05:06:42 (37.2 KB/s) - `update.ver' saved [3368/3368]
UNRAR 3.90 freeware Copyright (c) 1993-2009 Alexander Roshal
Extracting from update.rar
Extracting update.ver OK
All OK
BusyBox v1.1.3 (2009.02.22-14:37+0000) multi-call binary
Usage: sed [-efinr] pattern [files...]
./upd.sh: ./upd.sh: 22: s/^.*@//: not found
sed: bad format in substitution expression
./upd.sh: ./upd.sh: 22: eset_upd//: not found
cannot stat `update.ver': No such file or directory
UNRAR 3.90 freeware Copyright (c) 1993-2009 Alexander Roshal
Extracting from update.rar
Extracting update.ver OK
All OK
BusyBox v1.1.3 (2009.02.22-14:37+0000) multi-call binary
Usage: grep [-ihHnqvs] PATTERN [FILEs...]
./upd.sh: ./upd.sh: 79: -v: not found
cannot stat `update.new': No such file or directory
Скрипт php ещё не пробовал....
А Скрипты от YAG перебрал 2а и практически аналогичные ошибки
Usage: grep [-ihHnqvs] PATTERN [FILEs...]
./upd.sh: ./upd.sh: 79: -v: not found
cannot stat `update.new': No such file or directory
А на последнем скрипте от YAG
./upd.sh: ./upd.sh: 4: зеркало: not found
./upd.sh: ./upd.sh: 13: или: not found
wget: missing URL
Usage: wget [OPTION]... [URL]...
Try `wget --help' for more options.
./upd.sh: ./upd.sh: 61: http://update.eset.com/eset_upd/update.ver: not found
cannot stat `update.ver': No such file or directory
cannot stat `update.rar': No such file or directory
BusyBox v1.1.3 (2009.02.22-14:37+0000) multi-call binarygrep
Usage: sed [-efinr] pattern [files...]
: update.ver: No such file or directory
./upd.sh: ./upd.sh: 69: s/Other=//: not found
BusyBox v1.1.3 (2009.02.22-14:37+0000) multi-call binary
Usage: sed [-efinr] pattern [files...]
./upd.sh: ./upd.sh: 69: s/\n/ /: not found
./upd.sh: ./upd.sh: 124: Syntax error: ")" unexpected (expecting "done")
Сегодня пришел к выводу что у меня не установлен пакет grep
установл его а заодно и sed
Теперь Целый рассказ ))
./upd.sh start
./upd.sh: ./upd.sh: 4: зеркало: not found
./upd.sh: ./upd.sh: 13: или: not found
wget: missing URL
Usage: wget [OPTION]... [URL]...
Try `wget --help' for more options.
./upd.sh: ./upd.sh: 61: http://update.eset.com/eset_upd/update.ver: not found
cannot stat `update.ver': No such file or directory
cannot stat `update.rar': No such file or directory
grep: update.ver: No such file or directory
Usage: sed [OPTION]... {script-only-if-no-other-script} [input-file]...
-n, --quiet, --silent
suppress automatic printing of pattern space
-e script, --expression=script
add the script to the commands to be executed
-f script-file, --file=script-file
add the contents of script-file to the commands to be executed
--follow-symlinks
follow symlinks when processing in place
-i[SUFFIX], --in-place[=SUFFIX]
edit files in place (makes backup if extension supplied)
-l N, --line-length=N
specify the desired line-wrap length for the `l' command
--posix
disable all GNU extensions.
-r, --regexp-extended
use extended regular expressions in the script.
-s, --separate
consider files as separate rather than as a single continuous
long stream.
-u, --unbuffered
load minimal amounts of data from the input files and flush
the output buffers more often
--help display this help and exit
--version output version information and exit
If no -e, --expression, -f, or --file option is given, then the first
non-option argument is taken as the sed script to interpret. All
remaining arguments are names of input files; if no input files are
specified, then the standard input is read.
GNU sed home page: <http://www.gnu.org/software/sed/>.
General help using GNU software: <http://www.gnu.org/gethelp/>.
./upd.sh: ./upd.sh: 69: s/Other=//: not found
Usage: sed [OPTION]... {script-only-if-no-other-script} [input-file]...
-n, --quiet, --silent
suppress automatic printing of pattern space
-e script, --expression=script
add the script to the commands to be executed
-f script-file, --file=script-file
add the contents of script-file to the commands to be executed
--follow-symlinks
follow symlinks when processing in place
-i[SUFFIX], --in-place[=SUFFIX]
edit files in place (makes backup if extension supplied)
-l N, --line-length=N
specify the desired line-wrap length for the `l' command
--posix
disable all GNU extensions.
-r, --regexp-extended
use extended regular expressions in the script.
-s, --separate
consider files as separate rather than as a single continuous
long stream.
-u, --unbuffered
load minimal amounts of data from the input files and flush
the output buffers more often
--help display this help and exit
--version output version information and exit
If no -e, --expression, -f, or --file option is given, then the first
non-option argument is taken as the sed script to interpret. All
remaining arguments are names of input files; if no input files are
specified, then the standard input is read.
GNU sed home page: <http://www.gnu.org/software/sed/>.
General help using GNU software: <http://www.gnu.org/gethelp/>.
./upd.sh: ./upd.sh: 69: s/\n/ /: not found
./upd.sh: ./upd.sh: 124: Syntax error: ")" unexpected (expecting "done")
Вообщем КАСЯЧёк найден всё дело в копи пасте, по мимо того что установка покетов grep и sed была необходима...
Надо разобраться с синтаксисом он теперь зациклился, бегает по серверам постоянно пока не прервёшь ему задачу....
подскажите как перенести скрип с точным синтаксисом...
копи паст через nano и pytti сказывается видимо (
Решение найдено ...
В моём случае... кривая вставка через путти и nano подправил переносы строк в ручную всё ок (почти)
Дело сейчас так обстоит он мин 20 - 30 обновлялся на канале 256kbit
потом написал:
Неверные ключики
./upd.sh: ./upd.sh: 1: nc: not found
но в папке nod3
total 32668
-rw-r--r-- 1 0 0 49087 Nov 5 09:40 em000_32_l0.nup
-rw-r--r-- 1 0 0 365546 Oct 31 16:07 em001_32_l0.nup
-rw-r--r-- 1 0 0 71638 Oct 31 16:07 em001_32_l1.nup
-rw-r--r-- 1 0 0 29045 Oct 31 16:07 em001_32_l2.nup
-rw-r--r-- 1 0 0 29047 Oct 31 16:07 em001_32_n1.nup
-rw-r--r-- 1 0 0 42815 Oct 31 16:07 em001_32_n2.nup
-rw-r--r-- 1 0 0 42849 Oct 31 16:07 em001_32_n3.nup
-rw-r--r-- 1 0 0 44830 Oct 31 16:07 em001_32_n4.nup
-rw-r--r-- 1 0 0 52119 Oct 31 16:07 em001_32_n5.nup
-rw-r--r-- 1 0 0 52623 Oct 31 16:07 em001_32_n6.nup
-rw-r--r-- 1 0 0 68084 Oct 31 16:07 em001_32_n7.nup
-rw-r--r-- 1 0 0 15993414 Nov 6 12:18 em002_32_l0.nup
-rw-r--r-- 1 0 0 3785979 Nov 6 12:18 em002_32_l1.nup
-rw-r--r-- 1 0 0 23930 Nov 6 12:18 em002_32_l2.nup
-rw-r--r-- 1 0 0 3253 Nov 6 12:18 em002_32_n1.nup
-rw-r--r-- 1 0 0 199346 Nov 6 12:18 em002_32_n10.nup
-rw-r--r-- 1 0 0 200999 Nov 6 12:18 em002_32_n11.nup
-rw-r--r-- 1 0 0 202125 Nov 6 12:18 em002_32_n12.nup
-rw-r--r-- 1 0 0 203762 Nov 6 12:18 em002_32_n13.nup
-rw-r--r-- 1 0 0 206037 Nov 6 12:18 em002_32_n14.nup
-rw-r--r-- 1 0 0 206525 Nov 6 12:18 em002_32_n15.nup
-rw-r--r-- 1 0 0 23933 Nov 6 12:18 em002_32_n2.nup
-rw-r--r-- 1 0 0 28717 Nov 6 12:18 em002_32_n3.nup
-rw-r--r-- 1 0 0 30170 Nov 6 12:18 em002_32_n4.nup
-rw-r--r-- 1 0 0 43217 Nov 6 12:18 em002_32_n5.nup
-rw-r--r-- 1 0 0 46202 Nov 6 12:18 em002_32_n6.nup
-rw-r--r-- 1 0 0 189664 Nov 6 12:18 em002_32_n7.nup
-rw-r--r-- 1 0 0 192466 Nov 6 12:18 em002_32_n8.nup
-rw-r--r-- 1 0 0 194718 Nov 6 12:18 em002_32_n9.nup
-rw-r--r-- 1 0 0 559445 Nov 6 12:18 em002_32_r0.nup
-rw-r--r-- 1 0 0 349355 Oct 29 14:10 em003_32_l0.nup
-rw-r--r-- 1 0 0 28071 Oct 29 14:10 em003_32_l1.nup
-rw-r--r-- 1 0 0 28073 Oct 29 14:10 em003_32_n1.nup
-rw-r--r-- 1 0 0 35341 Oct 29 14:10 em003_32_n2.nup
-rw-r--r-- 1 0 0 42409 Oct 29 14:10 em003_32_n3.nup
-rw-r--r-- 1 0 0 42618 Oct 29 14:10 em003_32_n4.nup
-rw-r--r-- 1 0 0 254688 Oct 29 14:10 em003_32_n5.nup
-rw-r--r-- 1 0 0 255003 Oct 29 14:10 em003_32_n6.nup
-rw-r--r-- 1 0 0 149213 Oct 29 14:10 em003_32_n7.nup
-rw-r--r-- 1 0 0 438663 Oct 30 13:23 em004_32_l0.nup
-rw-r--r-- 1 0 0 111391 Oct 30 13:23 em004_32_l1.nup
-rw-r--r-- 1 0 0 12954 Oct 30 13:23 em004_32_l2.nup
-rw-r--r-- 1 0 0 12956 Oct 30 13:23 em004_32_n1.nup
-rw-r--r-- 1 0 0 106949 Oct 30 13:23 em004_32_n2.nup
-rw-r--r-- 1 0 0 107183 Oct 30 13:23 em004_32_n3.nup
-rw-r--r-- 1 0 0 107751 Oct 30 13:23 em004_32_n4.nup
-rw-r--r-- 1 0 0 107750 Oct 30 13:23 em004_32_n5.nup
-rw-r--r-- 1 0 0 107916 Oct 30 13:23 em004_32_n6.nup
-rw-r--r-- 1 0 0 108870 Oct 30 13:23 em004_32_n7.nup
-rw-r--r-- 1 0 0 29448 Oct 26 10:46 em005_32_l0.nup
-rw-r--r-- 1 0 0 39775 Oct 26 10:46 em005_32_l1.nup
-rw-r--r-- 1 0 0 10584 Oct 26 10:46 em005_32_n1.nup
-rw-r--r-- 1 0 0 12944 Oct 26 10:46 em005_32_n2.nup
-rw-r--r-- 1 0 0 33150 Oct 26 10:46 em005_32_n3.nup
-rw-r--r-- 1 0 0 34023 Oct 26 10:46 em005_32_n4.nup
-rw-r--r-- 1 0 0 34267 Oct 26 10:46 em005_32_n5.nup
-rw-r--r-- 1 0 0 22521 Oct 26 10:46 em005_32_n6.nup
-rw-r--r-- 1 0 0 22718 Oct 26 10:46 em005_32_n7.nup
-rw-r--r-- 1 0 0 10624 Jun 4 17:45 em006_32_l0.nup
-rw-r--r-- 1 0 0 54919 Jun 4 17:45 em006_32_l1.nup
-rw-r--r-- 1 0 0 16165 Jun 4 17:45 em006_32_l2.nup
-rw-r--r-- 1 0 0 13921 Jun 4 17:45 em006_32_n1.nup
-rw-r--r-- 1 0 0 15273 Jun 4 17:45 em006_32_n2.nup
-rw-r--r-- 1 0 0 16167 Jun 4 17:45 em006_32_n3.nup
-rw-r--r-- 1 0 0 18558 Jun 4 17:45 em006_32_n4.nup
-rw-r--r-- 1 0 0 26277 Jun 4 17:45 em006_32_n5.nup
-rw-r--r-- 1 0 0 26341 Jun 4 17:45 em006_32_n6.nup
-rw-r--r-- 1 0 0 26644 Jun 4 17:45 em006_32_n7.nup
-rw-r--r-- 1 0 0 183262 Aug 13 11:07 em008_32_l0.nup
-rw-r--r-- 1 0 0 23027 Aug 13 11:07 em008_32_n1.nup
-rw-r--r-- 1 0 0 17809 Aug 13 11:07 em008_32_n2.nup
-rw-r--r-- 1 0 0 19877 Aug 13 11:07 em008_32_n3.nup
-rw-r--r-- 1 0 0 19862 Aug 13 11:07 em008_32_n4.nup
-rw-r--r-- 1 0 0 33941 Aug 13 11:07 em008_32_n5.nup
-rw-r--r-- 1 0 0 105446 Aug 13 11:07 em008_32_n6.nup
-rw-r--r-- 1 0 0 216018 Aug 13 11:07 em008_32_n7.nup
-rw-r--r-- 1 0 0 975415 Sep 11 15:25 em009_32_l0.nup
-rw-r--r-- 1 0 0 730129 Sep 11 15:26 em009_32_n1.nup
-rw-r--r-- 1 0 0 836798 Sep 11 15:26 em009_32_n2.nup
-rw-r--r-- 1 0 0 746398 Sep 11 15:26 em009_32_n3.nup
-rw-r--r-- 1 0 0 749334 Sep 11 15:26 em009_32_n4.nup
-rw-r--r-- 1 0 0 748964 Sep 11 15:26 em009_32_n5.nup
-rw-r--r-- 1 0 0 749325 Sep 11 15:26 em009_32_n6.nup
-rw-r--r-- 1 0 0 854948 Sep 11 15:26 em009_32_n7.nup
-rw-r--r-- 1 0 0 43 Nov 6 14:53 index.html
-rw-r--r-- 1 0 0 98 Nov 6 16:06 log.txt
drwxr-xr-x 2 0 0 4096 Nov 6 15:33 tmp
-rw-r--r-- 1 0 0 10468 Nov 6 16:06 update.new
-rw-r--r-- 1 0 0 294 Nov 5 22:55 update.ver
по моим догадка это не всё или я ошибаюсь, и к чему он тогда сругался на
Неверные ключики
./upd.sh: ./upd.sh: 1: nc: not found
И мой нод 4версии говорит что " данные обновления не согласованны"
( адресс баззы был указан : 192.168.1.1:8181/nod3/)
ipkg install nc
;)
а вот не могу вы полнить
ipkg install nc
Nothing to be done
An error ocurred, return value: 4.
Collected errors:
Cannot find package nc.
Check the spelling or perhaps run 'ipkg update'
может его нет в репозиториях ?
Что-то у меня вопросик :confused:
При обновлении скриптом - скачивается ~25 Мб,
а если обновлять стандартно - ~ 500 Кб.
Верно ли и как это объяснить, что же выгоднее.
Понятно, что в скрипте ключи подставляются, а дальше...
На страничках *EAV.html и *ESS.html теперь ключей нет. Только информация, что обновили программу :-(
На страничках *EAV.html и *ESS.html теперь ключей нет. Только информация, что обновили программу :-(
Они я смотрю выпустили программу для скачивания ключей
http://werzilla.ru/engine/download.php?id=3
Новая версия, опять берем ключи со странички.
Для корректной работы необходим iconv. Не знаю идет-ли он в стандартной поставке...У меня на роутере он был без каки-либо телодвижений.
NetSpider
10-11-2009, 15:00
На страничках *EAV.html и *ESS.html теперь ключей нет. Только информация, что обновили программу :-(
Только что все проверил. Ключи на месте. :) Расширение у странички кстати htm
P.S. А программу для скачивания ключей они выпустили давно. Именно её я и ковырял. Внимательно надо было читать пост http://wl500g.info/showpost.php?p=166611&postcount=211 ;)
Только что все проверил. Ключи на месте. :) Расширение у странички кстати htm
P.S. А программу для скачивания ключей они выпустили давно. Именно её я и ковырял. Внимательно надо было читать пост http://wl500g.info/showpost.php?p=166611&postcount=211 ;)
Я тогда по ссылке кликнул - она не открылась, да я и не заморачивался.
P.S. Ну и отлично - у нас тогда две версии скрипта, обе работающие. :-)
нуже ли для работы iconv?
если да то не подскажте где его взять?
ставил отсюда..... не пашет
http://wl500g.info/showpost.php?p=85065&postcount=13
Установил скрипт SSN.
Установил iconv.
Установил sendsms.
При запуске ругается:
(stdin):1:44: cannot convert
./nod32upd: line 171: /opt/etc/sendsms/sendtime.php: not found
В логах пишет, что ключ не найден.
В чём может быть проблема?
При запуске ругается
Что при запуске ругается, это бывает.
Закомментируйте строчку в самом начале, где ошибку по смс отправляет
Про не найденый ключ смотреть в log.txt, который создается в $WEBROOT
там подробнее написано. Вообще скорее всего путь к страничке с ключами не тот.
Что при запуске ругается, это бывает.
Закомментируйте строчку в самом начале, где ошибку по смс отправляет
Про не найденый ключ смотреть в log.txt, который создается в $WEBROOT
там подробнее написано. Вообще скорее всего путь к страничке с ключами не тот.
От ошибки смс избавился. Но, как я понял, теперь не будет отправляться оповещения по смс?
Посмотрел лог вебрута:
2009-11-13 22:20:55 Start NOD32 Updating script. ver 0.6.2. PID: 216
Downloading list of keys...Ok
Get new username and password from list...Error
Fatal error: Corrected username and password not found
Sending error message to phone (Corrected username and password not found.)
Clearing tmp
Abort
Не понял в чём проблема. Html-страничка с паролями лежит в папке. Видимо скрипт не может вытащить эти пароли из странички? Что ещё нужно проверить?
Разобрался. Надо было в скрипте после iconv поставить -c чтобы он пропускал нераспознанные символы, а не вывыливался с ошибкой. Автору на заметку! Теперь с смс: как я понял надо прописать php перед запуском sendtime.php Но в таком случае скрипт выдаёт ошибку в этой строке. Как нужно правильно это прописать? Взять в кавычки?
BcTpe4HbIu
16-11-2009, 18:54
Разобрался. Надо было в скрипте после iconv поставить -c чтобы он пропускал нераспознанные символы, а не вывыливался с ошибкой. Автору на заметку! Теперь с смс: как я понял надо прописать php перед запуском sendtime.php Но в таком случае скрипт выдаёт ошибку в этой строке. Как нужно правильно это прописать? Взять в кавычки?
файл /opt/etc/sendsms/sendtime.php есть вообще?
файл /opt/etc/sendsms/sendtime.php есть вообще?
Да, всё есть! Даже смс-ки отправляются по строчке
php /opt/etc/sendsms/send.php
BcTpe4HbIu
17-11-2009, 06:26
Да, всё есть! Даже смс-ки отправляются по строчке
php /opt/etc/sendsms/send.php
/opt/etc/sendsms/sendtime.php != /opt/etc/sendsms/send.php
/opt/etc/sendsms/sendtime.php != /opt/etc/sendsms/send.php
Спасибо! Моя невнимательность! Файла не было! Теперь всё работает!
Но с сегодняшнего дня изменилась html-страница c ключами :(
BcTpe4HbIu
17-11-2009, 09:30
Спасибо! Моя невнимательность! Файла не было! Теперь всё работает!
Но с сегодняшнего дня изменилась html-страница c ключами :(
Точно? у меня на данный момент все работает... как и все последнее время :rolleyes:
Точно? у меня на данный момент все работает... как и все последнее время :rolleyes:
Аналогично, и страничка ESS.htm на месте, и обновляется.
Аналогично, и страничка ESS.htm на месте, и обновляется.
У вас версия 0.6.1, а у меня 0.6.2 - в ней страница нерабочая.
Поставил вашу, теперь всё заработало! Даже не пришлось модифицировать iconv в скрипте!
Спасибо!
Версия 0.6.1 продолжает работать...
Обратил внимание, что страничка ESS.htm иногда подменяется на анонсы, возможно это является причиной непонятных приколов в версии 0.6.1.
0.6.3 это исправленная 0.6.2... т.е. те, кто сидит на 0.6.1 - могут не напрягатся.
вот еще несколько сайтов с ключами
http://www.nod321.cn/
http://www.nod123.cn/
http://my-nod32.ru/nod32_keys/11-kljuchi-nod32.html
может попробовать один из первых двух прикрутить?
вот еще несколько сайтов с ключами
http://www.nod321.cn/
http://www.nod123.cn/
http://my-nod32.ru/nod32_keys/11-kljuchi-nod32.html
может попробовать один из первых двух прикрутить?
а для каких версий эти ключи, подойдут для ESS?
вот еще хороший сайт , сам давно пользуюсь )) www.nod327.net там и для антивируса и для смарт секьюрити, обновление каждый день.
У скрипта есть недоработка.
Не ругается на наличие существующего PID файла при запуске в смс\лог. Один раз скрипт до конца не выполнился, PID остался и скрипт не больше не выполнялся. Заметил через три дня только :(
У скрипта есть недоработка.
Не ругается на наличие существующего PID файла при запуске в смс\лог. Один раз скрипт до конца не выполнился, PID остался и скрипт не больше не выполнялся. Заметил через три дня только :(
Обычно вываливания скрипта не должно быть ни при каких условиях, надо разбиратся в каких условиях он у тебя вывалился.
В последней версии скрипта 0.6.4 расскоментируй 58 строку. Будет тебе в лог писать, в случае таких проблем.
Теперь вместо одной странички с ключами можно добавить список страниц, перечисляются через запятую, указывается в переменной HTMLs_list
Переработал парсер, основное условие что-бы на страничке логин и пароль предварялись "Username:" и "Password:".
Сначала хотел сделать ещё универсальнее, но отложил это дело... иногда сильно отличаются страницы с разных сайтов. Возможно прийдется делать несколько парсеров или попытатся вырезать логины и пароли по комбинации EAV-* + "следующая" строка должна быть пароль.
P.S. Те кто сидят на версии 0.6.1 могут переходит на эту версию. Она коррекно производит разбор страницы, с которой брала версия 0.6.1.
AlekseyA
24-11-2009, 12:26
Подскажите, где копнуть?
Update server ставил по скрипту для Чайников.
Вчера перестали обновлятся NODы на компах, на роутере вроде всё обновляется, на страничке STATUS значится актуальное обновление.
Nod32 выдавал сообщение "Модули программы обновлены" и более ни чего.
Nod32 выдает вот это:
http://img692.imageshack.us/img692/9144/nod.jpg
Обычно вываливания скрипта не должно быть ни при каких условиях, надо разбиратся в каких условиях он у тебя вывалился
Может роутер перегрузил в момент обновления, когда что-то ковырял :confused:
AlekseyA
24-11-2009, 13:22
Вчера вечером и сегодня утром, чистил все папки, ждал пока Server сам заново обновится (проходило часа три-четыре), обновляю Nod32, а там такая гадость. :eek:
Может роутер перегрузил в момент обновления, когда что-то ковырял :confused:
Вполне может быть.
Подскажите, где копнуть?
Update server ставил по скрипту для Чайников.
Вчера перестали обновлятся NODы на компах, на роутере вроде всё обновляется, на страничке STATUS значится актуальное обновление.
Nod32 выдавал сообщение "Модули программы обновлены" и более ни чего.
Nod32 выдает вот это:
http://img692.imageshack.us/img692/9144/nod.jpg
Если такое на всех компах, которые пасутся с твоего зеркала, то скорее всего неправильно создалась зеркало. Удали все файлы зеркала и запусти скрипт обновления, пускай он соберет зеркало заново. Если это не поможет, то тогда обнови скрипт, видать какой-то баг. Скрипт в теме "скрипт для чайников" не такой как в этой ветке!
Приношу извинения, слегка не доработал парсер...в новой версии найденые баги исправил.
P.S.У кого скрипт выдает ошибки типа unsupported command или вообще отказывается что-либо качать, распакуйте архив soft в папку /opt/bin и сделайте распакованные программы исполняемыми.
Проверьте командой set что есть в переменной PATH, одной из строк должна быть /opt/bin, желательно первой,ну или идти второй, сразу за /opt/sbin
P.P.S. В совсем редких случаях возможно прийдется установить bash: ipkg install bash
У меня не работает скрипт
1) убрал путь к wget
2) параметр у wget -o заменил на -O - стало скачивать ключи хотя бы
3) закомментил отправку смс
сейчас не парсит и ругается про sed "unsupported command I"
как хоть так? %)