#!/bin/bash source $Work_Path/lang_link ####### garbage here ############# function mainFunction ( ) { echo "$Good" } function braBraBra ( ) { echo "$Bra_Bra_Bra" } ####### garbage end ############### # shell檔及壓縮檔在同一目錄中 ####### 環境變數section########### User_HOME=/home/nutchuser/nutchez NutchEZ_HOME=/opt/nutchez Nutch_HOME=$NutchEZ_HOME/nutch Tomcat_HOME=$NutchEZ_HOME/tomcat Index_DB=$User_HOME/search Admin_email=nutchuser@nutch Start_PATH=`pwd` MasterIP_Address=`/sbin/ifconfig eth0 | grep 'inet addr' | sed 's/^.*addr://g' | sed 's/Bcast.*$//g' | sed 's/ .*// '` net_MacAddr=`/sbin/ifconfig eth0 | grep 'HW' | sed 's/^.*HWaddr //g'` ######function section section####### ########## echo function ########## function debug_info () { if [ $? -eq 0 ]; then echo -e "\033[1;35;40m info - $1 \033[0m" fi } function show_info () { if [ $? -eq 0 ]; then echo -e "\033[1;32;40m $1 \033[0m" fi } ##########end echo function ########## function choose_lang(){ lang=$(locale | grep 'LANG=' | cut -d "=" -f2) # Default: source english . $Work_Path/install_lang.en # if locale is zh then source chinese echo $lang | grep 'zh' >> /dev/null && source $Work_Path/install_lang.zh # Ask language echo -e "\n$choose_lang_1" read -p "$choose_lang_2 " langChoice if [ $langChoice == "2" ]; then source $Work_Path/install_lang.zh else source $Work_Path/install_lang.en fi } function check_root(){ debug_info "check_root" if [ $USER != "root" ]; then show_info "$MI_check_root_1" exit fi show_info "$MI_check_root_2" } function check_systemInfo(){ debug_info "$MI_check_sys_1" show_info "$MI_check_sys_2" Linux_Distribution=$(lsb_release -a 2> /dev/null | grep "Distributor ID:" | awk '{print $3}') Linux_Version=$(lsb_release -a 2> /dev/null | grep "Release" | awk '{print $2}') show_info "$Linux_Distribution , $Linux_Version" } function install_packages(){ # deb 系列系統 debug_info "$MI_install_pack_1" debug_info "$MI_install_pack_2" if [ "$Linux_Distribution" == "Ubuntu" ] || [ "$Linux_Distribution" == "Debian" ] ;then echo -e "\n$MI_install_pack_if_1\n" aptitude install -y expect ssh dialog # rpm 系列系統 elif [ "$Linux_Distribution" == "Fedora" ] || [ "$Linux_Distribution" == "CentOS" ] ;then show_info "$MI_install_pack_if_2" else show_info "$MI_install_pack_if_2" fi } function check_nez_installed(){ debug_info "$MI_check_nez_1" if [ -d "/opt/nutchez" ]; then show_info "$MI_check_nez_2" exit else show_info "$MI_check_nez_3" fi } function check_sunJava(){ debug_info "$MI_check_sunJava_1" debug_info "$MI_check_sunJava_2" javaPath="/usr" yesno="no" choice="3" if [ -e $javaPath/bin/java ]; then JAVA_org=$($javaPath/bin/java -version 2>&1 | grep "Java(TM)") JAVA_version=$($javaPath/bin/java -version 2>&1 | grep "java version" | \ awk '{print $3}' | cut -d "." -f1-2 | cut -d "\"" -f2) if [ "$JAVA_org" == "" ]; then show_info "$MI_check_sunJava_if_1" show_info "$MI_check_sunJava_if_2" show_info "$MI_check_sunJava_if_3" read -p "$MI_check_sunJava_if_4" choice case $choice in "1") show_info "$MI_check_sunJava_if_5" exit ;; "2") read -p "$MI_check_sunJava_if_6" javaPath ;; "*") exit ;; esac if [ $choice == "2" ]; then JAVA_org=$($javaPath/bin/java -version 2>&1 | grep "Java(TM)") JAVA_version=$($javaPath/bin/java -version 2>&1 | grep "java version" | \ awk '{print $3}' | cut -d "." -f1-2 | cut -d "\"" -f2) if [ "$JAVA_org" == "" ]; then show_info "$MI_check_sunJava_if_7" exit fi fi fi large16=$(echo "$JAVA_version >= 1.6" | bc) if [ "${large16}" == 0 ]; then show_info "$MI_check_sunJava_if_8" exit fi show_info "$MI_check_sunJava_if_9" else show_info "$MI_check_sunJava_if_10" exit fi unset JAVA_org unset JAVA_version } # 檢查是否有安裝openssh, openssh-server function check_ssh(){ debug_info "$MI_check_ssh_1" if [ -e /usr/bin/ssh ]; then show_info "$MI_check_ssh_2" else show_info "$MI_check_ssh_3" exit fi if [ -e /usr/sbin/sshd ]; then show_info "$MI_check_ssh_4" else show_info "$MI_check_ssh_5" exit fi } # 檢查是否有安裝dialog function check_dialog(){ debug_info "$MI_check_dialog_1" if [ -e /usr/bin/dialog ]; then show_info "$MI_check_dialog_2" else show_info "$MI_check_dialog_3" exit fi } check_info () { check_root check_systemInfo install_packages check_nez_installed check_sunJava check_ssh check_dialog } function set_install_information () { set_nutchuser_passwd select_eth MasterIP_Address=$net_address } function set_nutchuser_passwd () { read -sp "$MI_set_nutchuser_passwd_echo_1" Nutchuser_Passwd # read -sp "Please enter nutchuser's password : " Nutchuser_Passwd echo -e "\n" read -sp "$MI_set_nutchuser_passwd_echo_2" Nutchuser_Passwd2 # read -sp "Please enter nutchuser's password again: " Nutchuser_Passwd2 echo -e "\n" if [ $Nutchuser_Passwd != $Nutchuser_Passwd2 ]; then set_nutchuser_passwd fi } # 新增nutchuser 帳號時用 Nutchuser_Passwd 當密碼 function creat_nutchuser_account(){ debug_info "$create_nutchuser_d1" while [ "$Nutchuser_Passwd" != "$Nutchuser_Passwd2" ] do echo -e "\n" read -sp "$create_nutchuser_1" Nutchuser_Passwd echo read -sp "$create_nutchuser_2" Nutchuser_Passwd2 echo if [ "$Nutchuser_Passwd" == "$Nutchuser_Passwd2" ]; then show_info "$create_nutchuser_3" else show_info "$create_nutchuser_4" fi done unset Nutchuser_Passwd2 if [ $(cat /etc/passwd | grep nutchuser) ]; then show_info "$create_nutchuser_s1" expect -c "spawn passwd nutchuser set timeout 1 expect \"*: \" send \"$Nutchuser_Passwd\r\" expect \"*: \" send \"$Nutchuser_Passwd\r\" expect eof" else show_info "$create_nutchuser_s2" useradd -m nutchuser -s /bin/bash expect -c "spawn passwd nutchuser set timeout 1 expect \"*: \" send \"$Nutchuser_Passwd\r\" expect \"*: \" send \"$Nutchuser_Passwd\r\" expect eof" fi } function select_eth () { net_interfaces=$(ifconfig | grep ^eth | cut -d " " -f1) net_nu=$(echo $net_interfaces | wc -w) # 若只有一個 eth 時 if [ "$net_nu" == "1" ]; then net_address=$(ifconfig $net_interfaces | grep "inet addr:" | sed 's/^.*inet addr://g' | cut -d " " -f1) net_MacAddr=$(ifconfig $net_interfaces | grep 'HW' | sed 's/^.*HWaddr //g') # 若有多個 eth 時 else declare -i i=1 show_info "$MI_select_eth_echo_1" # show_info "\nSystem have multiple network device, which network use for this machine: " for net in $net_interfaces do show_info "($i) $net $(ifconfig $net | grep "inet addr:" | sed 's/^.*inet addr://g' | cut -d " " -f1)" i=i+1 done read -p "$MI_select_eth_echo_2" net_choice # read -p "Please choice(1/2/3...): " net_choice if [ -z $net_choice ]; then net_choice=1 fi show_info "$MI_select_eth_echo_3 $net_choice" # show_info "Your choice is $net_choice" net_interface=$(echo $net_interfaces | cut -d " " -f $net_choice) #ifconfig $net_interface | grep "inet addr:" | sed 's/^.*inet addr://g' | cut -d " " -f1 net_address=$(ifconfig $net_interface | grep "inet addr:" | sed 's/^.*inet addr://g' | cut -d " " -f1) net_MacAddr=$(ifconfig $net_interface | grep 'HW' | sed 's/^.*HWaddr //g') show_info "$MI_select_eth_echo_4 $net_address" # show_info "net_address is $net_address" show_info "$MI_select_eth_echo_5 $net_MacAddr" # show_info "net_MacAddr is $net_MacAddr" fi } function show_master_info () { show_info "$MI_show_master_info_echo_1 $MasterIP_Address" show_info "$MI_show_master_info_echo_2 $net_MacAddr" # show_info "The Master IP Address is $MasterIP_Address" # show_info "The Master MacAddr is $net_MacAddr" } function make_ssh_key () { debug_info "$MI_make_ssh_key_echo_1" # debug_info "Make ssh key(begin...)" su nutchuser -c 'ssh-keygen -t rsa -f ~/.ssh/id_rsa -P ""' su nutchuser -c "cp ~/.ssh/id_rsa.pub ~/.ssh/authorized_keys" su nutchuser -c "ssh-add /home/nutchuser/.ssh/id_rsa" debug_info "$MI_make_ssh_key_echo_2" # debug_info "Make ssh key(done!)" } function set_haoop-site () { debug_info "$MI_set_haoop_site_echo_1" # debug_info "set hadoop-site.xml(begin...)" cd $Nutch_HOME/conf/ cat > hadoop-site.xml << EOF fs.default.name hdfs://$MasterIP_Address:9000 mapred.job.tracker $MasterIP_Address:9001 hadoop.tmp.dir /var/nutchez/nutch-nutchuser EOF debug_info "$MI_set_haoop_site_echo_2" # debug_info "set hadoop-site.xml(done!)" } # 修改nutch-site.xml中-http.agent.url, http.agent.email function set_nutch-site () { debug_info "$MI_set_nutch_site_echo_1" # debug_info "set nutch-site.xml(begin...)" Line_NO=`cat $Nutch_HOME'/conf/nutch-site.xml' | grep -n 'http.agent.url' | sed 's/:.*//g'` debug_info "$MI_set_nutch_site_echo_2" # debug_info "debug...http.agent.url line number = $Line_NO..." sed -i ''$((Line_NO+1))'d' $Nutch_HOME/conf/nutch-site.xml debug_info "$MI_set_nutch_site_echo_3" # debug_info "debug...edit http.agent.url delete line $((Line_NO+1))..." sed -i ''$Line_NO'a '$MasterIP_Address'' $Nutch_HOME/conf/nutch-site.xml debug_info "$MI_set_nutch_site_echo_4" # debug_info "debug...edit http.agent.url done..." Line_NO=`cat $Nutch_HOME'/conf/nutch-site.xml' | grep -n 'http.agent.email' | sed 's/:.*//g'` debug_info "$MI_set_nutch_site_echo_5" # debug_info "debug...http.agent.email line number = $Line_NO..." sed -i ''$((Line_NO+1))'d' $Nutch_HOME/conf/nutch-site.xml debug_info "$MI_set_nutch_site_echo_6" # debug_info "debug...edit http.agent.email delete line $((Line_NO+1))..." sed -i ''$Line_NO'a '$Admin_email'' $Nutch_HOME/conf/nutch-site.xml debug_info "$MI_set_nutch_site_echo_7" # debug_info "debug...edit http.agent.email done..." debug_info "$MI_set_nutch_site_echo_8" # debug_info "set nutch-site.xml(done!)" } function format_HDFS () { debug_info "$MI_format_HDFS_echo_1" su nutchuser -c "$Nutch_HOME/bin/hadoop namenode -format" debug_info "$MI_format_HDFS_echo_2" } function start_up_NutchEZ (){ debug_info "$MI_start_up_NutchEZ_echo_1" # debug_info "start up NutchEZ..." su nutchuser -c "$Nutch_HOME/bin/start-all.sh" } function set_hosts () { debug_info "$MI_set_hosts_echo_1" cp /etc/hosts /home/nutchuser/nutchez/system/hosts.bak Line_NO=`cat /etc/hosts | grep -n $(hostname) | sed 's/:.*//g'` content=$(cat /etc/hosts | awk 'NR=='$Line_NO'{printf "# " ; print}' ) sed -i ""$Line_NO"c $content" /etc/hosts sed -i '1i '$MasterIP_Address' '$(hostname)'' /etc/hosts } function Install_Nutch () { debug_info "$MI_install_Nutch_echo_1 $MasterIP_Address " # debug_info "MasterIP_Address=$MasterIP_Address" debug_info "$MI_install_Nutch_echo_2 $(hostname)" # debug_info "Master_Hostname=$(hostname)" su nutchuser -c "echo $net_address $(hostname) $net_MacAddr \>\> ~/nutchez/system/nutch_nodes" set_hosts set_haoop-site set_nutch-site } function client_PassMasterIPAddr () { cd $Start_PATH Line_NO=`cat client_install | grep -n '# Master IP here' | sed 's/:.*//g'` debug_info "$MI_client_PassMasterIPAddr_echo_1" # debug_info "debug...Master IP here line number = $Line_NO..." sed -i ''$((Line_NO+1))'d' client_install debug_info "$MI_client_PassMasterIPAddr_echo_2" # debug_info "debug...edit Master IP at line $((Line_NO+1))..." sed -i ''$Line_NO'a Master_IP_Address='$MasterIP_Address'' client_install debug_info "$MI_client_PassMasterIPAddr_echo_3" # debug_info "edit client_install done..." } function client_PassMaster_Hostname () { cd $Start_PATH Line_NO=`cat client_install | grep -n '# Master Hostname here' | sed 's/:.*//g'` debug_info "$MI_client_PassMaster_Hostname_echo_1" # debug_info "debug...Master hostname here line number = $Line_NO..." sed -i ''$((Line_NO+1))'d' client_install debug_info "$MI_client_PassMaster_Hostname_echo_2" # debug_info "debug...edit Master Hostname at line $((Line_NO+1))..." sed -i ''$Line_NO'a Master_Hostname='$(hostname)'' client_install debug_info "$MI_client_PassMaster_Hostname_echo_3" # debug_info "edit client_install done..." } function client_PassMasterIPAddr_for_Remove () { cd $Start_PATH Line_NO=`cat client_remove.sh | grep -n "# Master IP here" | sed 's/:.*//g'` sed -i ''$((Line_NO+1))'d' client_remove.sh sed -i ''$Line_NO'a Master_IP_Address='$MasterIP_Address'' client_remove.sh } function make_client_install () { # 建立資料夾(用來存放client的安奘檔) su nutchuser -c "mkdir $User_HOME/source" # 將Master_IP_Address給client # 打包安裝目錄(不含tomcat) debug_info "$MI_make_client_install_echo_1" # debug_info "function make_client_install..." client_PassMasterIPAddr client_PassMaster_Hostname client_PassMasterIPAddr_for_Remove cd /opt/nutchez/ su nutchuser -c "tar -cvzf NutchezForClientOf_$MasterIP_Address.tar.gz nutch" # 複製檔案至$User_HOME/source目錄下 mv NutchezForClientOf_$MasterIP_Address.tar.gz /home/nutchuser/nutchez/source cp $Start_PATH/client_install $Start_PATH/client_install_func.sh /home/nutchuser/nutchez/source # cp $Start_PATH/client_install $Start_PATH/client_install /home/nutchuser/nutchez/source # cp $Start_PATH/client_install $Start_PATH/client_remove.sh /home/nutchuser/nutchez/source # cp $Start_PATH/client_install $Start_PATH/lang* /home/nutchuser/nutchez/source } function start_up_tomcat () { debug_info "$MI_start_up_tomcat_echo_1" # debug_info "start up tomcat..." i=10 debug_info "$MI_start_up_tomcat_echo_2" until [ $i -lt 1 ] do sleep 1s i=`expr $i - 1` done su nutchuser -c "$Tomcat_HOME/bin/startup.sh" debug_info "$MI_start_up_tomcat_echo_3" # debug_info "tomcat has been started..." } ###最後再整理### # client簡易步驟 function client_install_commands () { show_info "$MI_client_install_commands_echo_1" show_info "$MI_client_install_commands_echo_2" show_info "$MI_client_install_commands_echo_3" show_info "$MI_client_install_commands_echo_4" show_info "$MI_client_install_commands_echo_5" show_info "$MI_client_install_commands_echo_6" show_info "$MI_client_install_commands_echo_7" # show_info "Client Install Command as Follows:" # show_info "cd ~" # show_info "mkdir nutchez_client_install" # show_info "cd nutchez_client_install" # show_info "scp nutchuser@$MasterIP_Address:/home/nutchuser/nutchez/source/* ." # show_info "sudo su" # show_info "./client_install" }