Sunday, February 22, 2009

无人值守批量安装软件

因工作需要, 要在N台机器上安装nrpe, 就有了这样的要求:

知识背景:
1. ports包管理机制(man ports)
1. 脚本语言(此使用perl)
1. ssh的使用

前提:
* 每台机器应该有ssh的public key, 否则每次都输入密码人会晕的

无人值守,第一个是去掉需要人干涉的部分!这就是make包的过程!

有两种情况:
1. make过程出错了
2. configure需要人指定

第一种可以通过N多个if去处理,我是不想这样做的, 大不了登机手工安装,所谓的特殊案例特殊处理.出错记录一下就行了

第二种是可以通过ports的管理机制去处理的. 如下:

make install时有时会出现一个"对话框"的, 这个东西的是使用diaglog( 请man 1 diaglog )程序去产生的. 但是可以使用BATCH变量



#!/usr/bin/env perl

open LogFile, ">/tmp/install_nrpe.log";

my @HostList = (1..100);

for my $Host (@HostList){
$Host = "192.168.54." . $Host;
system "ssh", "-o ConnectTimeOut=1", $Host, "pkg_info|grep nrpe2" ;
if ( $? == 256 ){
print $Host . "\n";
system "ssh", $Host, "cd /usr/ports/net-mgmt/nrpe2/ && sudo make BATCH=yes install";
}else{
print LogFile "can't install at " . $Host . "\n";
}

}

脚本的一点说明:
1. ssh使用了-o ConnectTimeOut=1是表示, 在使用ssh连接时, 超时为1秒, 这样就不会让ssh一直在等待了.
2. $?为ssh运行远程命令的返回码.本例中为"pkg_info|grep nrpe2".

No comments:

Post a Comment

Note: Only a member of this blog may post a comment.