Jump to content
Калькуляторы

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

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

 

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

 

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

 

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

 

 

Share this post


Link to post
Share on other sites
Задача - Есть 2000 Edgecore3528' ов в сетке.

 

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

 

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

 

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

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

Share this post


Link to post
Share on other sites

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

 

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

 

 

Edited by alexxx71

Share this post


Link to post
Share on other sites
А типовой пример можно? Если не сложно.

 

И если не сложно подскажите литературу по 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 $@;
}

 

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

Edited by Wingman

Share this post


Link to post
Share on other sites

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

 

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

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites
Спасибо автору Perl это тру, и все таки хотелось бы увидеть вариант на Expect'е.

 

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

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

 

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

Edited by XeonVs

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

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

Share this post


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

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

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

Share this post


Link to post
Share on other sites

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

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

 

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

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

Share this post


Link to post
Share on other sites
Я использую следующий самописный комбайн:

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

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

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

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

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

 

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

Edited by Ilya Evseev

Share this post


Link to post
Share on other sites
ну не знаю как 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 ;(

Edited by Wingman

Share this post


Link to post
Share on other sites

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

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 $@;
}

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this