Довелось на днях заняться вопросом автоматизации обновления ПО на коммутаторах 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-адресов коммутаторов такой же модели.