Довелось на днях заняться вопросом автоматизации обновления ПО на коммутаторах ZyXEL ES-3124-4F. Остановился на Perl — по-моему лучшее средство для написания скриптов для решения подобных задач.
Для работы скрипта понадобится:
- Unix подобная ОС;
- модули File::Basename, Net::FTP;
- последняя версия ПО для коммутаторов модели ZyXEL ES-3124-4F;
- немного времени и терпения :)
Сам скрипт выглядит так:
#!/usr/bin/perl -w use strict; use File::Basename; use Net::FTP; my $ip = $ARGV[0]; my $file="380AIS120081008.bin"; my $ftp = Net::FTP->new("$ARGV[0]", Debug => 5, Passive => 0) or die "Cannot connect to hostname: $@"; $ftp->login("admin", "1234") or die "Cannot login ", $ftp->message; # set binary mode which is needed for image upload $ftp->binary(); # upload the file $ftp->put($file,"ras"); $ftp->quit();
Под переменной $ARGV[0] подразумевается запуск скрипта в формате
./script.pl 10.10.10.10
где 10.10.10.10 адрес коммутатора
my $file="380AIS120081008.bin";
- образ ПО для коммутатора. Кстати, скрипт запускается с директории, где лежит образ ПО.
$ftp->put($file,"ras");
- ras — конечный образ ПО, который хранится на коммутаторе.
Лог удачного выполнения скрипта таков:
# ./script.pl 10.10.10.10 Net::FTP>>> Net::FTP(2.77)
Net::FTP>>> Exporter(5.64_01)
Net::FTP>>> Net::Cmd(2.29)
Net::FTP>>> IO::Socket::INET(1.31)
Net::FTP>>> IO::Socket(1.31)
Net::FTP>>> IO::Handle(1.28)
Net::FTP=GLOB(0x84b54c4)<<< 220 ES-3124-4F FTP version 1.0 ready at Thu Jan 1 00:43:54 1970
Net::FTP=GLOB(0x84b54c4)>>> USER admin
Net::FTP=GLOB(0x84b54c4)<<< 331 Enter PASS command
Net::FTP=GLOB(0x84b54c4)>>> PASS ….
Net::FTP=GLOB(0x84b54c4)<<< 230 Logged in
Net::FTP=GLOB(0x84b54c4)>>> TYPE I
Net::FTP=GLOB(0x84b54c4)<<< 200 Type I OK
Net::FTP=GLOB(0x84b54c4)>>> ALLO 2945416
Net::FTP=GLOB(0x84b54c4)<<< 500 Unknown command ‘allo 2945416′
Net::FTP=GLOB(0x84b54c4)>>> PORT 10,10,10,8,177,124
Net::FTP=GLOB(0x84b54c4)<<< 200 Port command okay
Net::FTP=GLOB(0x84b54c4)>>> STOR ras
Net::FTP=GLOB(0x84b54c4)<<< 150 Opening data connection for STOR ras
Net::FTP=GLOB(0x84b54c4)<<< 226 File received OK
Net::FTP=GLOB(0x84b54c4)>>> QUIT
Net::FTP=GLOB(0x84b54c4)<<< 221 Goodbye for writing flash
При желании, можно модернизировать скрипт в сторону подключения списка из IP-адресов коммутаторов такой же модели.