大數據學習——shell編程
03/ shell編程綜合練習
自動化軟件部署腳本
3.1 需求
1、需求描述
公司內有一個N個節點的集群,需要統一安裝一些軟件(jdk)
需要開發一個腳本,實現對集群中的N臺節點批量自動下載、安裝jdk
2、思路
1/ 編寫一個啟動腳本,用來發送一個軟件安裝腳本到每一臺機器
2/ 然後啟動每臺機器上的軟件安裝腳本來執行軟件下載和安裝
3、expect的使用
痛點:使用scp命令遠程拷貝文件時,會有人機交互的過程,如何讓腳本完成人機交互?
妙藥: expect
用法示例:
先觀察 ssh localhost 的過程
再看expect的功能
#!/bin/bash/expect ## exp_test.sh set timeout -1; spawn ssh localhost; expect { "(yes/no)" {send "yes\r";exp_continue;} "password:" {send "hadoop\r";exp_continue;} eof {exit 0;} } |
執行: expect -f exp_test.sh
3.2 準備內網軟件下載服務器
選擇一臺服務器(比如mini)作為軟件源服務器
1、安裝httpd (如果已有,可跳過)
yum install -y httpd
service httpd start
chkconfig --level 35 httpd on
2、制作局域網yum源
1/ 掛載centos安裝光盤到/mnt/cdrom (如果已有,可跳過)
mkdir /mnt/cdrom
mount -t iso9660 -o loop /dev/cdrom /mnt/cdrom
2/ 將本地yum庫放入httpd服務器
ln -s /mnt/cdrom /var/www/html/centos
檢查點:用瀏覽器訪問 http://mini/centos 看能否看到光盤內容
3、編寫repo配置
vi /etc/yum.repos.d/centos.repo
[c6-httpd] name=CentOS-httpd baseurl=http://192.168.33.3/centos gpgcheck=0 enabled=1 |
4、分發repo配置到局域網
從母雞shizhan01上把centos.repo拷貝給所有需要自動安裝軟件的服務器(仔雞mini1/mini2)
cd /etc/yum.repos.d/
scp /etc/yum.repos.d/innet.repo mini1:$PWD
scp /etc/yum.repos.d/innet.repo mini2:$PWD
5、準備一個jdk安裝包放在內網web服務器上
3.3 腳本開發
1、啟動腳本
vi boot.sh
#!/bin/bash
SERVERS="mini1 mini2" PASSWORD=hadoop BASE_SERVER=192.168.33.11
## 實現免密登陸配置的函數 auto_ssh_copy_id() { expect -c "set timeout -1; spawn ssh-copy-id $1; expect { *(yes/no)* {send -- yes\r;exp_continue;} *assword:* {send -- $2\r;exp_continue;} eof {exit 0;} }"; }
ssh_copy_id_to_all() { for SERVER in $SERVERS do auto_ssh_copy_id $SERVER $PASSWORD done }
## 調用免密登陸配置函數,實現母雞到各仔雞的免密登陸配置 ssh_copy_id_to_all
## 完成分發install.sh到各仔雞的操作 ## 並讓仔雞啟動install.sh for SERVER in $SERVERS do scp install.sh root@$SERVER:/root ssh root@$SERVER /root/install.sh done |
2、安裝執行腳本
vi install.sh
#!/bin/bash
BASE_SERVER=192.168.33.11 ## 為本機安裝wget命令 yum install -y wget ## 使用wget從母雞的web服務器上下載jdk壓縮包 wget $BASE_SERVER/soft/jdk-7u67-linux-x64.gz ## 將下載的壓縮包解壓 tar -zxvf jdk-7u67-linux-x64.gz -C /usr/local ## 修改profile配置文件 cat >> /etc/profile << EOF export JAVA_HOME=/usr/local/jdk1.7.0_67 export PATH=\$PATH:\$JAVA_HOME/bin EOF |
3、啟動腳本
只要在baseServer即mini上啟動boot.sh即可
大數據學習——shell編程