[122] | 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 | |
---|
[123] | 9 | # 正式版之後,記的將不必要的 echo 拿掉 |
---|
| 10 | |
---|
| 11 | |
---|
| 12 | # 檢查執行這個程式的是否為root權限 |
---|
[122] | 13 | function check_root(){ |
---|
[123] | 14 | # 正式版後可拿掉此 echo |
---|
[128] | 15 | echo -e "\n= check_root (debug) =" |
---|
[122] | 16 | if [ $USER != "root" ]; then |
---|
| 17 | echo -e "\nPlz Change root to execute it!!!" |
---|
| 18 | exit |
---|
| 19 | fi |
---|
[123] | 20 | # 正式版後可拿掉此 echo |
---|
| 21 | echo -e "Identify is root." |
---|
[122] | 22 | } |
---|
| 23 | |
---|
| 24 | |
---|
| 25 | # 查出此主機的作業系統,以及版本 |
---|
| 26 | function check_systemInfo(){ |
---|
[128] | 27 | echo -e "\n= check_systemInfo (debug) =" |
---|
[122] | 28 | echo -e "\nYour system information are:" |
---|
[133] | 29 | Linux_Distribution=$(lsb_release -a 2> /dev/null | grep "Distributor ID:" | awk '{print $3}') |
---|
| 30 | Linux_Version=$(lsb_release -a 2> /dev/null | grep "Release" | awk '{print $2}') |
---|
[132] | 31 | echo $Linux_Distribution , $Linux_Version |
---|
[122] | 32 | } |
---|
| 33 | |
---|
| 34 | |
---|
[132] | 35 | # 安裝需要的相依套件 (目前只支援 deb 套件的系統自動安裝,yum或其他套件系統的則需手動安裝) |
---|
| 36 | function install_packages(){ |
---|
| 37 | # deb 系列系統 |
---|
[133] | 38 | echo -e "\n= install_packages (debug) =" |
---|
| 39 | echo -e "\nCheck dependent packages" |
---|
[132] | 40 | if [ "$Linux_Distribution" == "Ubuntu" ] || [ "$Linux_Distribution" == "Debian" ] ;then |
---|
| 41 | aptitude install -y expect ssh dialog |
---|
| 42 | # rpm 系列系統 |
---|
| 43 | elif [ "$Linux_Distribution" == "Fedora" ] || [ "$Linux_Distribution" == "CentOS" ] ;then |
---|
| 44 | echo -e "Plz install expect, ssh, and dialog." |
---|
| 45 | fi |
---|
| 46 | } |
---|
| 47 | |
---|
| 48 | |
---|
[122] | 49 | # 檢查之前是否有安裝NutchEz |
---|
| 50 | # 目前先檢查是否有/opt/nutchez 這個資料夾即可 |
---|
| 51 | function check_nez_installed(){ |
---|
[128] | 52 | echo -e "\n= chcheck_nez_installed (debug) =" |
---|
[132] | 53 | if [ -d /opt/nutchez ]; then |
---|
| 54 | echo -e "\nSystem already had NutchEz." |
---|
| 55 | exit |
---|
| 56 | else |
---|
| 57 | echo -e "\nSystem does not has NutchEz." |
---|
| 58 | fi |
---|
[122] | 59 | } |
---|
| 60 | |
---|
| 61 | |
---|
| 62 | # 檢查是否有安裝sun java ,並檢查是否為jdk 1.6 以上版本 |
---|
| 63 | # 4種判斷可能性 (1)系統沒安裝 JAVA (2)系統有安裝JAVA,但非sun版本 |
---|
| 64 | # (3)系統有安裝但Sun Java 在非預設路徑下 (4)以正確安裝 Sun JAVA 預設路徑下 |
---|
| 65 | function check_sunJava(){ |
---|
[128] | 66 | echo -e "\n= check_sunJava (debug) =" |
---|
[122] | 67 | echo -e "\nNutchEz need Sun Java JDK 1.6.x or above version" |
---|
| 68 | javaPath="/usr/" |
---|
| 69 | |
---|
[123] | 70 | test -e $javaPath/bin/java || read -p "Plz input specific Java path\ |
---|
[122] | 71 | (ex./opt/jvm/java-6-sun-1.6.0.20/): " javaPath |
---|
| 72 | |
---|
| 73 | if [ -e $javaPath/bin/java ]; then |
---|
| 74 | JAVA_org=$($javaPath/bin/java -version 2>&1 | grep "Java(TM)") |
---|
| 75 | JAVA_version=$($javaPath/bin/java -version 2>&1 | grep "java version" | \ |
---|
| 76 | awk '{print $3}' | cut -d "." -f1-2 | cut -d "\"" -f2) |
---|
| 77 | |
---|
| 78 | if [ "$JAVA_org" == "" ]; then |
---|
[123] | 79 | echo "Java is not Sun version, plz install sun Java 1.6.X" |
---|
[122] | 80 | exit |
---|
| 81 | fi |
---|
[128] | 82 | |
---|
| 83 | large16=$(echo "$JAVA_version >= 1.6" | bc) |
---|
| 84 | if [ "${large16}" == 0 ]; then |
---|
[123] | 85 | echo "Java version is too old (it need 1.6.X above)" |
---|
[122] | 86 | exit |
---|
| 87 | fi |
---|
[128] | 88 | |
---|
| 89 | echo "System has Sun Java 1.6 above version." |
---|
[122] | 90 | else |
---|
| 91 | echo "Plz install Sun JAVA 1.6.X or above version" |
---|
| 92 | exit |
---|
| 93 | fi |
---|
| 94 | |
---|
| 95 | unset JAVA_org |
---|
| 96 | unset JAVA_version |
---|
[123] | 97 | } |
---|
[122] | 98 | |
---|
[123] | 99 | |
---|
| 100 | # 檢查是否有安裝openssh, openssh-server |
---|
| 101 | function check_ssh(){ |
---|
[128] | 102 | echo -e "\n= check_ssh (debug) =" |
---|
[123] | 103 | if [ -e /usr/bin/ssh ]; then |
---|
| 104 | echo -e "\nSystem has ssh." |
---|
| 105 | else |
---|
| 106 | echo "Plz install ssh." |
---|
| 107 | exit |
---|
| 108 | fi |
---|
| 109 | |
---|
| 110 | if [ -e /usr/sbin/sshd ]; then |
---|
| 111 | echo "System has ssh Server (sshd)." |
---|
| 112 | else |
---|
| 113 | echo "Plz install ssh Server (sshd)." |
---|
| 114 | exit |
---|
| 115 | fi |
---|
[122] | 116 | } |
---|
[123] | 117 | |
---|
| 118 | |
---|
| 119 | # 檢查是否有安裝dialog |
---|
| 120 | function check_dialog(){ |
---|
[128] | 121 | echo -e "\n= check_dialog (debug) =" |
---|
[123] | 122 | if [ -e /usr/bin/dialog ]; then |
---|
| 123 | echo -e "\nSystem has dialog." |
---|
| 124 | else |
---|
| 125 | echo "Plz install dialog." |
---|
| 126 | exit |
---|
| 127 | fi |
---|
| 128 | } |
---|
| 129 | |
---|
| 130 | |
---|
| 131 | # 檢查是否安裝 php 5.5 |
---|
| 132 | function check_php(){ |
---|
[128] | 133 | echo -e "\n= check_php (debug) =" |
---|
[123] | 134 | if [ "$(php -v 2>/dev/null | grep "PHP 5" | awk '{print $2}' | cut -d "." -f1)" == 5 ]; then |
---|
| 135 | echo -e "\nPHP'version is 5" |
---|
| 136 | else |
---|
[128] | 137 | echo -e "\nplz install PHP 5 version!" |
---|
[133] | 138 | exit |
---|
[123] | 139 | fi |
---|
| 140 | } |
---|
[128] | 141 | |
---|
| 142 | |
---|
| 143 | # scp nutchuser@master_ip:~ 把.ssh/目錄複製下來 |
---|
| 144 | # 當使用者輸入nutchuser 密碼時,將此密碼紀錄到Nutchuser_Passwd |
---|
| 145 | # 此步驟若無法連到 master 則跳出 |
---|
| 146 | function scp_master_nutchuser_sshkey(){ |
---|
| 147 | echo -e "\n= scp_master_nutchuser_sshkey (debug) =" |
---|
| 148 | echo -e "mkdir -p /home/nutchuser/" |
---|
| 149 | mkdir -p /home/nutchuser/ |
---|
[134] | 150 | rm -fr /home/nutchuser/.ssh |
---|
[128] | 151 | |
---|
[129] | 152 | while [ ! -d "/home/nutchuser/.ssh" ] |
---|
[134] | 153 | do |
---|
| 154 | while [ "$Nutchuser_Passwd" != "$Nutchuser_Passwd2" ] |
---|
[129] | 155 | do |
---|
[134] | 156 | echo -e "\n" |
---|
| 157 | read -p "Plz input nutchuser password of master node: " Nutchuser_Passwd |
---|
| 158 | read -p "plz input nutchuser password, again: " Nutchuser_Passwd2 |
---|
| 159 | if [ "$1" == "$Nutchuser_Passwd2" ]; then |
---|
| 160 | echo "Two Passwords match." |
---|
| 161 | else |
---|
| 162 | echo "two passwords do not match, plz re-input nutchuser's password." |
---|
| 163 | fi |
---|
| 164 | done |
---|
| 165 | |
---|
| 166 | unset Nutchuser_Passwd2 |
---|
| 167 | |
---|
[129] | 168 | echo -e "scp nutchuser@$1:~/.ssh /home/nutchuser/" |
---|
| 169 | expect -c "spawn scp -r -o StrictHostKeyChecking=no nutchuser@$1:~/.ssh /home/nutchuser/ |
---|
| 170 | expect \"*: \" { send \"$Nutchuser_Passwd\r\" } |
---|
[134] | 171 | expect \"*: \" { send_user \"Password is error\" } |
---|
[129] | 172 | expect eof" |
---|
| 173 | if [ ! -d "/home/nutchuser/.ssh" ]; then |
---|
[134] | 174 | echo -e "\nPassword is error, plz re-input nutchuser passwd of master node." |
---|
[129] | 175 | else |
---|
| 176 | echo -e "\nscp correct." |
---|
| 177 | fi |
---|
| 178 | echo "chown -R nutchuser:nutchuser /home/nutchuser/.ssh" |
---|
| 179 | chown -R nutchuser:nutchuser /home/nutchuser/.ssh |
---|
| 180 | done |
---|
[128] | 181 | } |
---|
| 182 | |
---|
| 183 | |
---|
| 184 | # 新增nutchuser 帳號時用 Nutchuser_Passwd 當密碼 |
---|
| 185 | function creat_nutchuser_account(){ |
---|
| 186 | echo -e "\n= creat_nutchuser_account (debug) =" |
---|
| 187 | |
---|
[129] | 188 | if [ $(cat /etc/passwd | grep nutchuser) ]; then |
---|
| 189 | echo "System already has nutchuser, change nutchuser password." |
---|
| 190 | expect -c "spawn passwd nutchuser |
---|
| 191 | expect \"*: \" |
---|
| 192 | send \"$1\r\" |
---|
| 193 | expect \"*: \" |
---|
| 194 | send \"$1\r\" |
---|
| 195 | expect eof" |
---|
| 196 | else |
---|
[132] | 197 | echo "Create nutchuser and change password." |
---|
[129] | 198 | useradd -m nutchuser -s /bin/bash |
---|
| 199 | expect -c "spawn passwd nutchuser |
---|
| 200 | expect \"*: \" |
---|
| 201 | send \"$1\r\" |
---|
| 202 | expect \"*: \" |
---|
| 203 | send \"$1\r\" |
---|
| 204 | expect eof" |
---|
| 205 | fi |
---|
[128] | 206 | } |
---|
| 207 | |
---|
| 208 | |
---|
| 209 | # 用scp 複製 master 的設定與安裝資料 |
---|
| 210 | # 目前僅需做到能無礙的複製遠端的/opt/nutchez/到local的/opt/ |
---|
| 211 | function scp_packages(){ |
---|
| 212 | echo -e "\n= scp_packages (debug) =" |
---|
[134] | 213 | chmod 777 /opt |
---|
[128] | 214 | echo "scp -r -o StrictHostKeyChecking=no nutchuser@$1:/opt/nutchez/ /opt/" |
---|
[134] | 215 | su nutchuser -c "scp -r -o StrictHostKeyChecking=no nutchuser@$1:/opt/nutchez/ /opt/" |
---|
[128] | 216 | |
---|
[134] | 217 | echo -e "\nchown -R nutchuser:nutchuser /opt/nutchez/" |
---|
[128] | 218 | chown -R nutchuser:nutchuser /opt/nutchez/ |
---|
[134] | 219 | chmod 755 /opt |
---|
[128] | 220 | } |
---|