1. 程式人生 > >大數據學習——shell編程

大數據學習——shell編程

安裝 服務 local gpgcheck html spawn check time web服務器

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編程