alexxx71 Posted November 26, 2009 Posted November 26, 2009 Задача - Есть 2000 Edgecore3528' ов в сетке. Нужно массово обновить на них прошивку. Мб скрипт какой нибудь ? Какие могут быть варианты ? Кто чем пользуется ? Вставить ник Quote
XeonVs Posted November 26, 2009 Posted November 26, 2009 Задача - Есть 2000 Edgecore3528' ов в сетке. Нужно массово обновить на них прошивку. Мб скрипт какой нибудь ? Какие могут быть варианты ? Кто чем пользуется ? через expect прошиваем\настраиваем. Вставить ник Quote
alexxx71 Posted November 26, 2009 Author Posted November 26, 2009 (edited) А типовой пример можно? Если не сложно. И если не сложно подскажите литературу по Expect в сети. Я погуглил - гуглится с трудом.. просто тупо скрипты.. теории нету :) Edited November 26, 2009 by alexxx71 Вставить ник Quote
Wingman Posted November 26, 2009 Posted November 26, 2009 (edited) А типовой пример можно? Если не сложно. И если не сложно подскажите литературу по 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 November 26, 2009 by Wingman Вставить ник Quote
alexxx71 Posted November 26, 2009 Author Posted November 26, 2009 Спасибо автору Perl это тру, и все таки хотелось бы увидеть вариант на Expect'е. И за литературу по этой тематике буду отдельно признателен :) Вставить ник Quote
Dyr Posted November 26, 2009 Posted November 26, 2009 Telnet фтопку, Net::SNMP наш выбор! ;-Р :) Вставить ник Quote
XeonVs Posted November 26, 2009 Posted November 26, 2009 (edited) Спасибо автору Perl это тру, и все таки хотелось бы увидеть вариант на Expect'е. И за литературу по этой тематике буду отдельно признателен :) гугл, первой ссылкой http://ru.wikipedia.org/wiki/Expect второй и третей доп. материал. Net-Telnet иногда бывает неадекватен на разных прошивках братьев китайцев. Edited November 26, 2009 by XeonVs Вставить ник Quote
DemYaN Posted November 26, 2009 Posted November 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 Вставить ник Quote
vadimus Posted November 26, 2009 Posted November 26, 2009 Массово перепрошивать Edge-Core... Смело! Вставить ник Quote
ktoto Posted November 26, 2009 Posted November 26, 2009 Массово перепрошивать Edge-Core... Смело! Помню как менял софтину в ZyXEL ES-2024A, девайсов за 600 штук, все разбросаны по нескольким районам. Не рискнул все сразу. Растянул на 5 дней. Ибо не все поднимаются после перезагрузки. Коллеги думаю учинили бы мне показательную казнь если все 600 сразу исковеркать. Делал в 2 этапа, заливал прошивку после этого проверяли все ли коммутаторы выжили затем второй скрипт с функционалом reboot. По теме топика использовал expect. Вставить ник Quote
Negator1983 Posted November 27, 2009 Posted November 27, 2009 ну не знаю как edge-core но длинки прошиваю по snmp Вставить ник Quote
Ilya Evseev Posted December 12, 2009 Posted December 12, 2009 Я использую следующий самописный комбайн: http://svn1.homelinux.net/viewcvs/?root=routers_mgmt Он и для смены прошивок, и вообще для всех операций управления коммутаторами. Поддержка Edgecore в нём минимальная, в основном D-Link. Вставить ник Quote
demonisius Posted December 15, 2009 Posted December 15, 2009 Я использую следующий самописный комбайн:http://svn1.homelinux.net/viewcvs/?root=routers_mgmt Подскажи а как скачать то его? Вставить ник Quote
Ilya Evseev Posted December 15, 2009 Posted December 15, 2009 (edited) Я использую следующий самописный комбайн:http://svn1.homelinux.net/viewcvs/?root=routers_mgmt Подскажи а как скачать то его? На главной странице сайта написано.Нужен клиент Subversion. svn checkout svn://svn1.homelinux.net/devel/routers_mgmt/ ~/routers_mgmt К сожалению, ни на документацию, ни на инсталлятор меня не хватило. Edited December 15, 2009 by Ilya Evseev Вставить ник Quote
Wingman Posted December 15, 2009 Posted December 15, 2009 (edited) ну не знаю как 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 December 15, 2009 by Wingman Вставить ник Quote
Kostyan Posted December 15, 2009 Posted December 15, 2009 svn checkout svn://svn1.homelinux.net/devel/routers_mgmt ~/routers_mgmt Вставить ник Quote
awesome Posted December 17, 2010 Posted December 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 $@; } Вставить ник Quote
Wingman Posted December 17, 2010 Posted December 17, 2010 Дык.. Дебаг - наше всё =) Вставить ник Quote
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.