source: nutchez-0.2/src/test/client_install_func.sh @ 159

Last change on this file since 159 was 159, checked in by shunfa, 14 years ago
  1. 新增寫入mac address
  2. 新增ssh-add
  • Property svn:executable set to *
File size: 10.2 KB
Line 
1#!/bin/bash
2# Program:
3#   Functions for client_install.sh
4# Author:
5#   Waue, Shunfa, Rock {waue, shunfa, rock}@nchc.org.tw
6# History:
7#   2010/05/20  Rock    First release(0.1)
8
9# 正式版之後,記的將不必要的 echo 拿掉
10
11
12# 檢查執行這個程式的是否為root權限
13function check_root(){
14# 正式版後可拿掉此 echo
15echo -e "\n\033[31m= check_root (debug) =\033[0m"
16if [ $USER != "root" ]; then
17    echo -e "\nPlz Change root to execute it!!!"
18    exit
19fi
20# 正式版後可拿掉此 echo
21echo -e "Identify is root."
22}
23
24
25# 查出此主機的作業系統,以及版本
26function check_systemInfo(){
27echo -e "\n\033[31m= check_systemInfo (debug) =\033[0m"
28echo -e "\nYour system information are:"
29Linux_Distribution=$(lsb_release -a 2> /dev/null | grep "Distributor ID:" | awk '{print $3}')
30Linux_Version=$(lsb_release -a 2> /dev/null | grep "Release" | awk '{print $2}')
31echo $Linux_Distribution , $Linux_Version
32}
33
34
35# 安裝需要的相依套件 (目前只支援 deb 套件的系統自動安裝,yum或其他套件系統的則需手動安裝)
36function install_packages(){
37# deb 系列系統
38echo -e "\n\033[31m= install_packages (debug) =\033[0m"
39echo -e "\nCheck dependent packages"
40if [ "$Linux_Distribution" == "Ubuntu" ] || [ "$Linux_Distribution" == "Debian" ] ;then
41    echo -e "\nIt will install sime packages (expect, ssh, and dialog).\n"
42    aptitude install -y expect ssh dialog
43# rpm 系列系統
44elif [ "$Linux_Distribution" == "Fedora" ] || [ "$Linux_Distribution" == "CentOS" ] ;then
45    echo -e "Plz install expect, ssh, and dialog."
46    exit
47else
48    echo -e "Plz install expect, ssh, and dialog."
49    exit
50fi 
51}
52
53
54# 檢查之前是否有安裝NutchEz
55# 目前先檢查是否有/opt/nutchez 這個資料夾即可
56function check_nez_installed(){
57echo -e "\n\033[31m= chcheck_nez_installed (debug) =\033[0m"
58if [ -d /opt/nutchez ]; then
59    echo -e "\nSystem already had NutchEz."
60    exit
61else
62    echo -e "\nSystem does not has NutchEz."
63fi
64}
65
66
67# 檢查是否有安裝sun java ,並檢查是否為jdk 1.6 以上版本
68# 4種判斷可能性 (1)系統沒安裝 JAVA (2)系統有安裝JAVA,但非sun版本
69# (3)系統有安裝但Sun Java 在非預設路徑下 (4)以正確安裝 Sun JAVA 預設路徑下
70function check_sunJava(){
71echo -e "\n\033[31m= check_sunJava (debug) =\033[0m"
72echo -e "\nNutchEz need Sun Java JDK 1.6.x or above version"
73
74javaPath="/usr"
75yesno="no"
76choice="3"
77
78    if [ -e $javaPath/bin/java ]; then
79      JAVA_org=$($javaPath/bin/java -version 2>&1 | grep "Java(TM)")
80      JAVA_version=$($javaPath/bin/java -version 2>&1 | grep "java version" | \
81      awk '{print $3}' | cut -d "." -f1-2 | cut -d "\"" -f2)
82   
83        if [ "$JAVA_org" == "" ]; then 
84            echo "Java is not Sun version, plz install sun Java 1.6.X"
85            echo -e "\nPlz input your choice: "
86            echo "(1)System don't have Sun Java (2)Sun Java is in other path (3)Exit"
87            read -p "plz input (1/2/3): " choice
88            case $choice  in
89                "1")
90                echo -e "Plz install Sun Java manually!"
91                exit 
92                ;;
93                "2")
94                    read -p "Input Sun Java home path(ex. '/usr/lib/jvm/java-6-sun-1.6.0.12' or using default '/usr' ): " javaPath
95                ;;
96                "*")
97                exit
98                ;;
99            esac
100
101            if [ $choice == "2" ]; then
102                JAVA_org=$($javaPath/bin/java -version 2>&1 | grep "Java(TM)")
103                JAVA_version=$($javaPath/bin/java -version 2>&1 | grep "java version" | \
104                awk '{print $3}' | cut -d "." -f1-2 | cut -d "\"" -f2)
105               
106                if [ "$JAVA_org" == "" ]; then
107                echo -e "It is not Sun Java! Plz install Sun Java manually!"
108                exit
109                fi
110            fi
111        fi 
112
113      large16=$(echo "$JAVA_version >= 1.6" | bc)
114      if [ "${large16}" == 0 ]; then
115          echo "Java version is too old (it need 1.6.X above)"
116          exit
117      fi 
118     
119      echo "System has Sun Java 1.6 above version."
120  else
121      echo "Plz install Sun JAVA 1.6.X or above version"
122      exit
123  fi
124
125unset JAVA_org
126unset JAVA_version
127}
128
129
130# 檢查是否有安裝openssh, openssh-server
131function check_ssh(){
132echo -e "\n\033[31m= check_ssh (debug) =\033[0m"
133if [ -e /usr/bin/ssh ]; then
134    echo -e "\nSystem has ssh."
135else
136    echo "Plz install ssh."
137    exit
138fi
139
140if [ -e /usr/sbin/sshd ]; then
141    echo "System has ssh Server (sshd)."
142else
143    echo "Plz install ssh Server (sshd)."
144    exit
145fi
146}
147
148
149# 檢查是否有安裝dialog
150function check_dialog(){
151echo -e "\n\033[31m= check_dialog (debug) =\033[0m"
152if [ -e /usr/bin/dialog ]; then
153    echo -e "\nSystem has dialog."
154else
155    echo "Plz install dialog."
156    exit
157fi
158}
159
160
161# scp nutchuser@master_ip:~ 把.ssh/目錄複製下來
162# 當使用者輸入nutchuser 密碼時,將此密碼紀錄到Nutchuser_Passwd
163# 此步驟若無法連到 master 則跳出
164function scp_master_nutchuser_sshkey(){
165  echo -e "\n\033[31m= scp_master_nutchuser_sshkey (debug) =\033[0m"
166  echo -e "mkdir -p /home/nutchuser/"
167  mkdir -p /home/nutchuser/.ssh/
168  rm -fr /home/nutchuser/.ssh/*
169
170  unset Nutchuser_Passwd2
171
172  echo -e "scp nutchuser@$1:~/.ssh /home/nutchuser/"
173expect -c "spawn scp -r -o StrictHostKeyChecking=no nutchuser@$1:~/.ssh /home/nutchuser/
174expect \"*: \" { send \"$Nutchuser_Passwd\r\" }
175expect \"*: \" { send_user \"Password is error\" }
176expect eof"
177
178  if [ -e "/home/nutchuser/.ssh/authorized_keys" ]; then
179        echo -e "\nscp correct."   
180    else
181      echo -e "\nscp is error,\n(1)plz check nutchuser password in server\n(2)nutchuser's authorized_keys in server\n(3)server's network status"
182      exit
183    fi
184  ssh-add /home/nutchuser/.ssh/id_rsa
185  echo "chown -R nutchuser:nutchuser /home/nutchuser/.ssh"
186  chown -R nutchuser:nutchuser /home/nutchuser/.ssh
187}
188
189
190# 新增nutchuser 帳號時用 Nutchuser_Passwd 當密碼
191function creat_nutchuser_account(){
192echo -e "\n\033[31m= creat_nutchuser_account (debug) =\033[0m"
193
194while [ "$Nutchuser_Passwd" != "$Nutchuser_Passwd2" ]
195do
196    echo -e "\n"
197    read -sp "Plz input nutchuser password of master node: " Nutchuser_Passwd
198    echo 
199    read -sp "plz input nutchuser password, again: " Nutchuser_Passwd2
200    echo 
201        if [ "$Nutchuser_Passwd" == "$Nutchuser_Passwd2" ]; then
202            echo "Two Passwords match."
203        else
204            echo "Two passwords don't match, plz re-input nutchuser's password."
205        fi
206done                                                                                                                                   
207   
208unset Nutchuser_Passwd2
209
210if [ $(cat /etc/passwd | grep nutchuser) ]; then
211    echo "System already has nutchuser, change nutchuser password."
212    expect -c "spawn passwd nutchuser
213    set timeout 1
214    expect \"*: \"
215    send \"$Nutchuser_Passwd\r\"
216    expect \"*: \"
217    send \"$Nutchuser_Passwd\r\"
218    expect eof"
219else
220    echo "Create nutchuser and change password."
221    useradd -m nutchuser -s /bin/bash
222    expect -c "spawn passwd nutchuser
223    set timeout 1
224    expect \"*: \"
225    send \"$Nutchuser_Passwd\r\"
226    expect \"*: \"
227    send \"$Nutchuser_Passwd\r\"
228    expect eof"
229fi
230}
231
232# 用scp 複製 master 的設定與安裝資料
233# 目前僅需做到能無礙的複製遠端的/opt/nutchez/到local的/opt/
234function scp_packages(){
235  echo -e "\n\033[31m= scp_packages (debug) =\033[0m"
236  mkdir /opt/nutchez
237  mkdir /var/nutchez
238  mkdir /home/nutchuser/nutchez
239  mkdir /home/nutchuser/nutchez/source
240  chmod 777 /opt/nutchez
241  #su nutchuser -c "scp -r -o StrictHostKeyChecking=no nutchuser@$1:/opt/nutchez /opt/"
242  echo "scp -r nutchuser@$1:/opt/nutchez/NutchezForClientOf_$Master_IP_Address.tar.gz /opt/nutchez/"
243  su nutchuser -c "scp -r -o StrictHostKeyChecking=no nutchuser@$1:/home/nutchuser/nutchez/source/NutchezForClientOf_$Master_IP_Address.tar.gz /home/nutchuser/nutchez/source"
244
245  echo -e "\nchown -R nutchuser:nutchuser /opt/nutchez"
246  chown -R nutchuser:nutchuser /opt/nutchez
247  chown -R nutchuser:nutchuser /var/nutchez
248  chown -R nutchuser:nutchuser /home/nutchuser/nutchez
249  chmod 755 /opt/nutchez
250}
251
252
253function install_nutch_package(){
254  echo -e "\n\033[31m= install_nutch_package (debug) =\033[0m"
255  tar -zxvf /home/nutchuser/nutchez/source/NutchezForClientOf_$Master_IP_Address.tar.gz -C /opt/nutchez
256  sed -i '1a '$Master_IP_Address' '$Master_Hostname'' /etc/hosts
257  #/opt/nutchez/nutch/bin/hadoop-daemon.sh start datanode
258  #/opt/nutchez/nutch/bin/hadoop-daemon.sh start tasktracker
259}
260
261function recall_hostname_ip(){
262echo -e "\n\033[31m= recall_hostname_ip (debug) =\033[0m"
263
264net_interfaces=$(ifconfig | grep ^eth | cut -d " " -f1)
265net_nu=$(echo $net_interfaces | wc -w)
266
267# 若只有一個 eth 時
268if [ "$net_nu" == "1" ]; then
269
270# ifconfig $net_interfaces | grep "inet addr:" | sed 's/^.*inet addr://g' | cut -d " " -f1
271net_address=$(ifconfig $net_interfaces | grep "inet addr:" | sed 's/^.*inet addr://g' | cut -d " " -f1)
272net_MacAddr=$(ifconfig $net_interfaces | grep 'HW' | sed 's/^.*HWaddr //g')
273echo "net_address is $net_address"
274echo "net_MacAddr is $net_MacAddr"
275
276# 若有多個 eth 時
277else
278    declare -i i=1
279    echo -e "\nSystem have multiple network device, which network use for this machine: "
280       
281    for net in $net_interfaces
282        do 
283            echo "($i$net  $(ifconfig $net | grep "inet addr:" | sed 's/^.*inet addr://g' | cut -d " " -f1)"
284            i=i+1
285        done
286       
287        read -p "Plz choice(1/2/3...): " net_choice
288    if [ -z $net_choice ]; then
289        net_choice=1
290    fi   
291
292    echo "choice is $net_choice"
293    net_interface=$(echo $net_interfaces | cut -d " " -f $net_choice)
294    # config $net_interface | grep "inet addr:" | sed 's/^.*inet addr://g' | cut -d " " -f1
295    net_address=$(ifconfig $net_interface | grep "inet addr:" | sed 's/^.*inet addr://g' | cut -d " " -f1)
296    net_MacAddr=$(ifconfig $net_interfaces | grep 'HW' | sed 's/^.*HWaddr //g') 
297    echo "net_address is $net_address"
298    echo "net_MacAddr is $net_MacAddr"
299fi
300
301echo "ssh nutchuser@$1 echo $net_address $(hostname) $net_MacAddr \>\> ~/nutchez/nutch_nodes"
302su nutchuser -c "ssh nutchuser@$1 echo $net_address $(hostname) $net_MacAddr \>\> ~/nutchez/nutch_nodes"
303
304#su nutchuser -c expect -c "spawn ssh nutchuser@$1
305#set timeout 1
306#expect \"*\"
307#send \"echo $net_address $(hostname) >> /home/nutchuser/nutch_nodes\r\"
308#expect \"*\"
309#send \"exit\""
310}
Note: See TracBrowser for help on using the repository browser.