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即可
願你遍歷山河 仍覺人間值得
最後說一下,想要學習大數據的限時領取免費資料及課程
領取方法:
還是那個萬年不變的老規矩
1.評論文章,沒字數限制,一個字都行!
3.私信小編:“大數據開發教程”即可!
謝謝大家,祝大家學習愉快!(拿到教程後一定要好好學習,多練習哦!)
閱讀更多 微笑數據工程師 的文章