Господа, а поделитесь опытом организации на WL500g сервера обновления для NOD32, который мог бы перебирать некий список серверов и собственно отслеживая за их живучестью делать обновления.
Может делал кто такое?
Printable View
Господа, а поделитесь опытом организации на WL500g сервера обновления для NOD32, который мог бы перебирать некий список серверов и собственно отслеживая за их живучестью делать обновления.
Может делал кто такое?
А чем тебя список серверов в самом Nod не устраивает? В автоматическом выборе он именно так и работает.
Хочется именно сервер, вот хочется и все тут :)
Что, неужели никто не делал???
Обновления 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:
Да.....
Хотелось бы увидеть скрипт + краткие комментарии что нужно для его работы (примеры)
Поскольку никто так ничего и не выложил тут, вчера вечерком накидал простенький скрипт для обновления с неофициального сервера.
Дальше можно совершенствовать для официальных серверов... Перебора серверов... Обновления с разных серверов и формирования своего update.ver.Code:#!/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
Положил два скрипта для НОДа второй и третьей версии в CRON. Оба успешно работают. Начал разбирацца с официальными серверами, но заморачиваться не очень охота, т.к. ключи постоянно менять надо будет, а это уже автоматизировать тяжелее...
Вот скрипт для трешки , какой у меня стоит
Code:/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
Значит так. Разумеецца я проверил вначале, он не заработал. И насколько я понимаю.
1. Файлне закрыт РАРом и для него не нужен логин/пароль.Code:http://login:pass@update.eset.com/eset_upd/update.ver
2. В файлележит только список серверов и нет списка файлов обновления.Code:http://login:pass@update.eset.com/eset_upd/update.ver
3. По адресувообще нет файлов обновлений и взять их поэтому там неоткуда.Code: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.ver обновился, а файлик обновления новый не смог... Ну проблемы у провайдера, к примеру. Или когда кто-то обновляется с локальной машины в тот момент когда зеркало обновляется с сервера... В общем ничего хорошего это не сулит. Вопрос как изящнее эту проблему порешать. Что-то именно изящного решения не приходит в голову, а выеживацца сильно не хочецца.
Может как-нить придумать скачивание файла по таймауту?
(что бы на off серваках работало :) )
YAG Приятно видеть что и тут про мое зеркало и сайт знают :D
Но это так...
Может тебе поможет вот это
update.php:
PHP Code:
#!/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 Code:
<?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);
}
?>
Взято как не трудно догадаться тут автор KodeQuote:
Впринципе может работать и из браузера, только необходимо убрать
#!/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
DarkTwin, у куда писать логин/пасс от офф серваков?
Спасибо, просто беглым взглядом пропустил верхушку :)
Меня вот пугают ошибки:
Code:
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, конечно знаю я про зеркало Ваше и про сайт и про форум. Ну и конечно же про тот скрипт тоже знаю. Давно причем. Форум полезный, зеркала тоже, жаль забанили их пару недель назад... Собственно поэтому и начал делать свое зеркало на роутере, потому что хорошие зеркала либо банят, либо умирают они быстро. Решения проблем с баном конечно тоже знаю. Не устраивают меня они. Решил написать скриптик для зеркала под понятно какую железку. Понятно что такое зеркальце не забанят ввиду того, что знать про него будут не многие. Тот скрипт, что у Вас не устраивает по ряду причин. Как показала практика требует доведения в каждом конкретном случае, да и др. минусы имеет. Хотя написан грамотно, тут не поспоришь. Выкладываю то что сваял для обновления с официального сервера. Кое что кривовато пока, но в целом работоспособно. В общем-то дорабатывать дальше можно только преобразование файла update.ver, поскольку я раскладываю файлы по папкам так как они лежат на оф. серверах, а update.ver оставляю как есть. Ну и дорабатывать по хорошему нужно контроль за ошибками во время скачивания.
Code:#!/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
Я не особо вчитывался но это разве не просто копирование с зеркала в локальную папку ?
Простите, а что еще по большому счету надо от процесса создания зеркала? Просто нужно знать что куда и как копировать, а точнее не знать, а смотреть в соответствующих местах...
Скрипт, который разместил YAG качает обновы только на третью версию, а вот как заставить на вторую?
По логике заменил путь на вторую версию, но там update.ver в запакованном виде, получается, нужно как-то заставить его распаковаться и использовать.
Code:#!/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 для того чтобы удобно можно было раскладывать по папкам, а не так, как лежит на официальных серверах.
Вот универсальный скриптик для второй и третьей версии. Пофиксено много мелких багов. Теперь будет побыстрее оббегать сервера.
1. Непосредственно файлы обновлений валяцца так же как на официальных серверах, т.е. в несколько папок в корень домена.Code:#!/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
2. В папку, которая указываецца вначале скрипта валицца только один файлик update.ver, но именно эта папка будет зеркалом. Еще там лежит файлик log.txt с логами последнего обновления формируемый wget'ом.
Так устроены официальные сервера ESET с обновлениями. ИМХО для зеркала это неудобно, поэтому на днях переделаю чтобы валилось все в одну папку и переписывался файлик update.ver
Быстро не получаецца, поскольку в линухе я чайник полнейший...
Какие будут еще предложения, замечания?
Вручную запускать смысла не вижу (в ХРОНе замечательно работает), поэтому при ручном запуске ничего почти и не отображаецца, но все можно хорошо прослеживать, если интересно, по файлу log.txt. Две переменных тоже смысла не вижу. Если нужно два зеркала, то в ХРОН кладуцца два файлика просто для разных версий вот и все.
ага
а так же на drweb, AVZ :)
вам нужен в таком случае Вьювер
к стати не оба сразу раскоментировать имелось ввиду наверное, а сделать два файла . один для v2 второй v3 и в кроне запускать их оба. соответственно получится 2 зеркала
YAG по поводу mod_compat.mod я вам ответил, точнее написал у кого спросить (Смотрим тут). Если хотите то могу дать его аську
Если вы не против то я ваш скрипт опубликую у себя от вашего имени, либо сделайте это сами
вообщето 43 метра :rolleyes: