工作记录:记一次远程部署运行环境

    最近项目迎来第一次封测,弄了十几台云服务器用来部署服务器。所有服务器运行环境需要配置的软件等基本都是一样的,所以直接就想到用shell脚本来搞了,折腾了一下,总算是搞定了,虽然脚本是写得比较low。

    整个部署分为两个部分,一个是为服务器创建新的账号(默认只有root账号)并进行硬盘挂载,而另一个则是进行相关软件的安装等。因为这第二个部分是在第二天才完成的,所以才分开的。

1. 第一部分

    两个脚本scp_servers.sh和init_server.sh内容分别如下:

#!/bin/bash
#scp_servers.sh

array_ip=(
"192.168.3.123"
"192.168.3.124"
)

root_passwd=""

for ip in ${array_ip[@]}
do
    ssh-keygen -R $ip
    sshpass -p $root_passwd scp init_server.sh root@$ip:/root/
    sshpass -p $root_passwd ssh root@$ip "chmod +x init_server.sh && ./init_server.sh"
done
#!/bin/bash
#init_server.sh

password=""
user=""
i=`ls /home | grep $user | wc -l`
if [ $i -le 0 ]; then
    adduser $user
    echo "add user $user"
fi
echo  -e "$password\n$password" | passwd $user
i=`cat /etc/sudoers | grep $user | wc -l`
if [ $i -le 0 ]; then
    echo "$user    ALL=(ALL)       ALL" >> /etc/sudoers
    echo "add $user to sudoer"
fi
chown $user:$user /home/$user/log
i=`ls /home/$user | grep log | wc -l`
if [ $i -le 0 ]; then
    mkfs.ext4 /dev/vdb
    mkdir /home/$user/log
    echo "/dev/vdb    /home/$user/log             ext4       defaults          0 0" >> /etc/fstab
    mount -a
    echo "mount vdb to log"
fi

      scp_servers.sh脚本做的比较简单,就是将init_server.sh脚本scp到所有服务器并执行。

      init_server.sh首先看下指定账号user是否被创建,没有则创建账号。然后设置密码,这里设置密码的用echo -e "$passwd\n$passwd"实现了密码的二次输入。接着看/etc/sudoers文件中是否对user添加了超级权限,没有的话则添加。最后一步,则是判断额外的硬盘分区是否被挂载了,因为是固定被挂载到目录/home/user/log上,所以这里是通过检查目录/home/user/log是否存在来判断。如果没有被挂载,则先对分区进行格式化,创建/home/user/log目录,/etc/fstab中添加相关挂载信息,最后mount -a实现挂载,至此,所有操作完成。

       scp_servers.sh中,使用sshpass命令来直接指定scp时需要输入的密码,因为像前面说到的echo -e的方式对scp命令似乎并没有用,所以用sshpass命令来实现。而init_server.sh中,那么多次预先判断是因为不断调试中也不断在执行脚本,所以已经执行过的就不需要再重复操作了。

       最后一点,由于ssh或者scp时如果是第一次执行操作的远程主机,需要手动输入yes确认并将该主机相关信息添加到“/home/cobyeah/.ssh/known_hosts”文件中。所以导致执行scp_servers.sh时,对没有连接过的主机会出现“Host key verification failed.”及对端主机校验失败的错误,相关scp及ssh操作失败。这个时候可以通过临时修改/etc/ssh/ssh_config文件中StrickHostKeyChecking配置项为"StrictHostKeyChecking no",然后再执行scp_servers.sh就可以了。执行完之后记得该配置项改回来就行。

2. 第二部分

       第二部分涉及到三个脚本scp_init_env.sh、init_env.sh、init_bash.sh。

#!/bin/bash
#scp_init_env.sh

array_ip=(
"192.168.2.123"
"192.168.2.124"

)

root_passwd=""
user=""
passwd=""

for ip in ${array_ip[@]}
do
    ssh-keygen -R $ip
    sshpass -p $passwd ssh $user@$ip "mkdir /home/$user/tools"
    sshpass -p $root_passwd scp init_env.sh root@$ip:/home/$user/tools/
    sshpass -p $root_passwd scp boost_1_54_0.tar.gz root@$ip:/home/$user/tools/
    sshpass -p $root_passwd ssh root@$ip "cd /home/$user/tools && chmod +x init_env.sh && ./init_env.sh"
    sshpass -p $passwd scp init_bash.sh $user@$ip:/home/$user/tools/
    sshpass -p $passwd ssh $user@$ip "cd /home/$user/tools && chmod +x init_bash.sh && ./init_bash.sh"
done
#!/bin/bash
#init_env.sh

user=""

cd /home/$user/tools
if [ ! -d "boost_1_54_0" ]; then
    tar zxvf boost_1_54_0.tar.gz
fi

yum install -y libstdc++-devel
yum install -y gcc-c++
yum install -y gcc
yum install -y python-devel
yum install -y bzip2-devel
yum install -y libunwind
yum install -y zlib-devel
yum install -y gperftools
yum install -y libicu
yum install -y libicu-devel

cd boost_1_54_0
./bootstrap.sh
./b2 install > install.log
#!/bin/bash
#init_bash.sh

i=`cat ~/.bashrc | grep "/usr/lib:/usr/local/lib" | wc -l`
if [ $i -le 0 ]; then
    echo 'export LD_LIBRARY_PATH="/usr/lib64:/usr/lib:/usr/local/lib:$LD_LIBRARY_PATH"' >> ~/.bashrc

fi

     scp_init_env.sh脚本主要是将init_bash.sh、init_env.sh及指定版本boost文件放到所有服务器指定目录上,并解压缩boost文件。然后执行init_env.sh及init_bash.sh文件。

    init_env.sh主要是执行boost依赖软件的安装及boost软件的安装,yum install默认需要用户输入y、N等来进行安装确认的,这里加了-y选项就不需要确认操作而是默认直接安装了。

     init_bash.sh是设置LD_LIBRARY_PATH环境变量,将boost编译出来的链接库所在路径添加到环境变量中,否则运行进程时会出现找不到指定链接库的错误。

     将init_bash.sh和init_env.sh的操作分开到两个文件是因为一个是root账户执行(否则需要sudo还需要输入密码),另一个则是普通账户(现在想起其实也可以用root账户然后直接用.bashrc文件的绝对路径)。

 

     记录完毕,当然肯定有更好的方法实现上面的需求,这只是自己临时弄的,也记录下吧。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值