alexxx71 Опубликовано 26 ноября, 2009 Задача - Есть 2000 Edgecore3528' ов в сетке. Нужно массово обновить на них прошивку. Мб скрипт какой нибудь ? Какие могут быть варианты ? Кто чем пользуется ? Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
XeonVs Опубликовано 26 ноября, 2009 Задача - Есть 2000 Edgecore3528' ов в сетке. Нужно массово обновить на них прошивку. Мб скрипт какой нибудь ? Какие могут быть варианты ? Кто чем пользуется ? через expect прошиваем\настраиваем. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
alexxx71 Опубликовано 26 ноября, 2009 (изменено) А типовой пример можно? Если не сложно. И если не сложно подскажите литературу по Expect в сети. Я погуглил - гуглится с трудом.. просто тупо скрипты.. теории нету :) Изменено 26 ноября, 2009 пользователем alexxx71 Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
Wingman Опубликовано 26 ноября, 2009 (изменено) А типовой пример можно? Если не сложно. И если не сложно подскажите литературу по 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 $@; } Скрипт заточен под длинк, но, думаю, переточить под что угодно с телнетом труда н составит =) Изменено 26 ноября, 2009 пользователем Wingman Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
alexxx71 Опубликовано 26 ноября, 2009 Спасибо автору Perl это тру, и все таки хотелось бы увидеть вариант на Expect'е. И за литературу по этой тематике буду отдельно признателен :) Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
Dyr Опубликовано 26 ноября, 2009 Telnet фтопку, Net::SNMP наш выбор! ;-Р :) Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
XeonVs Опубликовано 26 ноября, 2009 (изменено) Спасибо автору Perl это тру, и все таки хотелось бы увидеть вариант на Expect'е. И за литературу по этой тематике буду отдельно признателен :) гугл, первой ссылкой http://ru.wikipedia.org/wiki/Expect второй и третей доп. материал. Net-Telnet иногда бывает неадекватен на разных прошивках братьев китайцев. Изменено 26 ноября, 2009 пользователем XeonVs Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
DemYaN Опубликовано 26 ноября, 2009 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 Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
vadimus Опубликовано 26 ноября, 2009 Массово перепрошивать Edge-Core... Смело! Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
ktoto Опубликовано 26 ноября, 2009 Массово перепрошивать Edge-Core... Смело! Помню как менял софтину в ZyXEL ES-2024A, девайсов за 600 штук, все разбросаны по нескольким районам. Не рискнул все сразу. Растянул на 5 дней. Ибо не все поднимаются после перезагрузки. Коллеги думаю учинили бы мне показательную казнь если все 600 сразу исковеркать. Делал в 2 этапа, заливал прошивку после этого проверяли все ли коммутаторы выжили затем второй скрипт с функционалом reboot. По теме топика использовал expect. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
Negator1983 Опубликовано 27 ноября, 2009 ну не знаю как edge-core но длинки прошиваю по snmp Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
Ilya Evseev Опубликовано 12 декабря, 2009 Я использую следующий самописный комбайн: http://svn1.homelinux.net/viewcvs/?root=routers_mgmt Он и для смены прошивок, и вообще для всех операций управления коммутаторами. Поддержка Edgecore в нём минимальная, в основном D-Link. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
demonisius Опубликовано 15 декабря, 2009 Я использую следующий самописный комбайн:http://svn1.homelinux.net/viewcvs/?root=routers_mgmt Подскажи а как скачать то его? Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
Ilya Evseev Опубликовано 15 декабря, 2009 (изменено) Я использую следующий самописный комбайн:http://svn1.homelinux.net/viewcvs/?root=routers_mgmt Подскажи а как скачать то его? На главной странице сайта написано.Нужен клиент Subversion. svn checkout svn://svn1.homelinux.net/devel/routers_mgmt/ ~/routers_mgmt К сожалению, ни на документацию, ни на инсталлятор меня не хватило. Изменено 15 декабря, 2009 пользователем Ilya Evseev Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
Wingman Опубликовано 15 декабря, 2009 (изменено) ну не знаю как 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 ;( Изменено 15 декабря, 2009 пользователем Wingman Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
Kostyan Опубликовано 15 декабря, 2009 svn checkout svn://svn1.homelinux.net/devel/routers_mgmt ~/routers_mgmt Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
awesome Опубликовано 17 декабря, 2010 Хотел переписать скрипт телнета под ссш но мало что получается подскажите где ошибка 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 $@; } Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
Wingman Опубликовано 17 декабря, 2010 Дык.. Дебаг - наше всё =) Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...