Перейти к содержимому
Калькуляторы

Скрипт массовой перепрошивки

Задача - Есть 2000 Edgecore3528' ов в сетке.

 

Нужно массово обновить на них прошивку.

 

Мб скрипт какой нибудь ?

 

Какие могут быть варианты ? Кто чем пользуется ?

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Задача - Есть 2000 Edgecore3528' ов в сетке.

 

Нужно массово обновить на них прошивку.

 

Мб скрипт какой нибудь ?

 

Какие могут быть варианты ? Кто чем пользуется ?

через expect прошиваем\настраиваем.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

А типовой пример можно? Если не сложно.

 

И если не сложно подскажите литературу по Expect в сети. Я погуглил - гуглится с трудом.. просто тупо скрипты.. теории нету :)

 

 

Изменено пользователем alexxx71

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

А типовой пример можно? Если не сложно.

 

И если не сложно подскажите литературу по Expect в сети. Я погуглил - гуглится с трудом.. просто тупо скрипты.. теории нету :)

expect фтопку ;)

 

#!/usr/bin/perl

use strict;
use Net::Telnet;
use DBI;

my $DEBUG = 1;


my $dbh = DBI->connect("DBI:mysql:database=XXXX;host=localhost","xxxx","xxxx") || die $DBI::errstr;
my $sth = $dbh->prepare("SELECT id,ip,type_id FROM switches WHERE type_id=1 OR type_id=15 OR type_id=21 OR type_id=22");
$sth->execute;

my $t2 = new Net::Telnet( Timeout => 15, Prompt => '/(:[0-9]|:([a-zA-Z]+?))#$/');

my $login = "script";
my $pass = "xxxx";


while(my $ref = $sth->fetchrow_arrayref)
{
        my $id = $$ref[0];
        my $ip = $$ref[1];
        my $type_id = $$ref[2];

        eval
        {
                print "\nSwitch: $ip (type $type_id) ... " if $DEBUG;
                $t2->open($ip);
                print "Connected... " if $DEBUG;

                $t2->login($login, $pass);
                print "Logged in... " if $DEBUG;

                $t2->print("ena admin");
                $t2->waitfor('/PassWord:.*$/');

                $t2->print("admin");
                print "Enabled admin.\n" if $DEBUG;


                /// тут любые свои команды:
                $t2->cmd("disa clipa");
                @fdb = $t2->cmd("sh fdb");
                print "Done.\n" if $DEBUG;

                $t2->close;
        };

        print $@ if $@;
}

 

Скрипт заточен под длинк, но, думаю, переточить под что угодно с телнетом труда н составит =)

Изменено пользователем Wingman

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Спасибо автору Perl это тру, и все таки хотелось бы увидеть вариант на Expect'е.

 

И за литературу по этой тематике буду отдельно признателен :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Telnet фтопку, Net::SNMP наш выбор! ;-Р :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Спасибо автору Perl это тру, и все таки хотелось бы увидеть вариант на Expect'е.

 

И за литературу по этой тематике буду отдельно признателен :)

гугл, первой ссылкой http://ru.wikipedia.org/wiki/Expect второй и третей доп. материал.

 

Net-Telnet иногда бывает неадекватен на разных прошивках братьев китайцев.

Изменено пользователем XeonVs

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

snmpset -m +ES3528MO-MIB -v2c -c private 172.30.14.30 ES3528MO-MIB::fileCopyTftpServer.0 a 172.30.100.2
snmpset -m +ES3528MO-MIB -v2c -c private 172.30.14.30 ES3528MO-MIB::fileCopySrcOperType.0 i 4
snmpset -m +ES3528MO-MIB -v2c -c private 172.30.14.30 ES3528MO-MIB::fileCopyDestOperType.0 i 1
snmpset -m +ES3528MO-MIB -v2c -c private 172.30.14.30 ES3528MO-MIB::fileCopyFileType.0 i 1
snmpset -m +ES3528MO-MIB -v2c -c private 172.30.14.30 ES3528MO-MIB::fileCopySrcFileName.0 s "fw/ES3528_52M_opcode_V1.3.7.4.bix"
snmpset -m +ES3528MO-MIB -v2c -c private 172.30.14.30 ES3528MO-MIB::fileCopyDestFileName.0 s "ES3528_52M_opcode_V1.3.7.4.bix"
snmpset -m +ES3528MO-MIB -v2c -c private 172.30.14.30 ES3528MO-MIB::fileCopyAction.0 i 2

в лупе проверяем fileCopyAction.0, когда станет 1 - прошивка залилась

 

выставляем стартап на свежую прошивку:

snmpset -m +ES3528MO-MIB -v2c -c private 172.30.14.30 ES3528MO-MIB::fileInfoIsStartUp.0.\'ES3528_52M_opcode_V1.3.7.4.bix\' i 1

PS Естественно нужно добавит проверку на наличие свободного места на флеше для новой прошивки. Если места нет, то искать файлы с fileInfoFileType = runtime(2) и fileInfoIsStartUp = false(2), удалить их через fileInfoDelete = delete(2)

PSPS MIB прикреплен

ES3528MO_V1.3.7.4.txt

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Массово перепрошивать Edge-Core... Смело!

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Массово перепрошивать Edge-Core... Смело!
Помню как менял софтину в ZyXEL ES-2024A, девайсов за 600 штук, все разбросаны по нескольким районам. Не рискнул все сразу. Растянул на 5 дней. Ибо не все поднимаются после перезагрузки. Коллеги думаю учинили бы мне показательную казнь если все 600 сразу исковеркать. Делал в 2 этапа, заливал прошивку после этого

проверяли все ли коммутаторы выжили затем второй скрипт с функционалом reboot.

По теме топика использовал expect.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

ну не знаю как edge-core

но длинки прошиваю по snmp

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Я использую следующий самописный комбайн:

http://svn1.homelinux.net/viewcvs/?root=routers_mgmt

 

Он и для смены прошивок, и вообще для всех операций управления коммутаторами.

Поддержка Edgecore в нём минимальная, в основном D-Link.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Я использую следующий самописный комбайн:

http://svn1.homelinux.net/viewcvs/?root=routers_mgmt

Подскажи а как скачать то его?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Я использую следующий самописный комбайн:

http://svn1.homelinux.net/viewcvs/?root=routers_mgmt

Подскажи а как скачать то его?

На главной странице сайта написано.

Нужен клиент Subversion.

svn checkout svn://svn1.homelinux.net/devel/routers_mgmt/ ~/routers_mgmt

 

К сожалению, ни на документацию, ни на инсталлятор меня не хватило.

Изменено пользователем Ilya Evseev

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

ну не знаю как edge-core

но длинки прошиваю по snmp

Хз хз, у нас тоже длинки в основном. Так вот, при перепрошивке с "перепрыгиванием" через несколько беток по снмп - (правка: ИНОГДА) свитч после подьема не поднимает линк, помогает передергивание линка на родителе. При прошивке телнетом такого нет. На форуме длинка корбиновец отписывал о такой же проблеме.

 

p.s.

svn checkout svn://svn1.homelinux.net/devel/routers_mgmt/trunk ~/routers_mgmt

svn: URL 'svn://svn1.homelinux.net/devel/routers_mgmt/trunk' doesn't exist ;(

Изменено пользователем Wingman

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

svn checkout svn://svn1.homelinux.net/devel/routers_mgmt ~/routers_mgmt

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Хотел переписать скрипт телнета под ссш но мало что получается подскажите где ошибка

use strict;
use Net::Telnet;
use DBI;
use Term::ReadKey;
use Net::SSH::Perl;
use Math::BigInt::Calc;
my $DEBUG = 1;


my $dbh = DBI->connect("DBI:mysql:database=switches;host=localhost","login","pass") || die $DBI::errstr;
my $sth = $dbh->prepare("SELECT id,ip,type_id,login,pass FROM switches WHERE type_id LIKE '%zyxel2024%m4%'");
$sth->execute;

my $t2 = new Net::SSH::Perl(
host=> $cmd_login2,
Timeout => 5, 
Prompt => '/(:[0-9]|:([a-zA-Z]+?))#$/',
ssh_option => '-o StrictHostKeyChecking=no',
);

while(my $ref = $sth->fetchrow_arrayref)
{
        my $id = $$ref[0];
        my $ip = $$ref[1];
        my $type_id = $$ref[2];
        my $login = $$ref[3];
        my $pass = $$ref[4];
        $cmd_login2 = "$$ref[3]\@$$ref[1]";
        eval
        {
                print "\nSwitch: $ip (type $type_id) ... " if $DEBUG;
                $t2= Net::SSH::Perl->new($cmd_login2);
                print($t2->get);
                print "Connected... " if $DEBUG;

    
        
        $t2->print($pass);
        print($t2->get);
        print "Pass in... " if $DEBUG;
        
        sleep 5;
               $t2->print("show vlan");
        print($t2->get);
        print "Send comand" if $DEBUG;
        $t2->close;
        };

        print $@ if $@;
}

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Гость
Ответить в тему...

×   Вставлено в виде отформатированного текста.   Вставить в виде обычного текста

  Разрешено не более 75 смайлов.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.