1. 程式人生 > >大資料學習——shell程式設計

大資料學習——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 [email protected]$SERVER:/root

    ssh [email protected]$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即可