一鍵部署Linux服務(wù)器

一鍵部署Linux服務(wù)器

本來最近幾天是要搞Gerapy的侣颂,奈何最近幾天運氣太好损拢,好多以前苦苦都無法解決的課題,在網(wǎng)上都找到了解決方案溺蕉。順帶學(xué)會了幾個新玩具: expect、sed悼做、awk疯特。精通算不上,入個門玩玩還是挺有意思的肛走。

配置文件的自動化編輯問題

首先是配置文件的自動化編輯漓雅。因為最近我的服務(wù)器總是刪了再裝,裝了又刪。所以就總是要手動去改配置文件邻吞,就搞得很惡心庶灿。本著解決問題,就要先解決最惡心的問題吃衅。不然解決的事情不痛不癢往踢,浪費那閑工夫干嘛...

最先想到的是sed。前幾天搞《Docker搭建Hadoop》出現(xiàn)過徘层,用它編輯了CentOS軟件包倉庫峻呕。但是直接從網(wǎng)上找出來,復(fù)制粘貼就拿來用了趣效。這貨印象里總是和vim一起出現(xiàn)瘦癌,目測不難。那就找找資料學(xué)一下跷敬。

豆瓣圖書搜索sed讯私,相關(guān)圖書沒幾本,從上往下找西傀,第一本是O'Reilly出版社的書《sed & awk》斤寇。這出版社挺有意思的,印象里封面用的全都是某種動物拥褂,而且書名一如既往的簡短娘锁。找了一下中文版,粗讀了一遍饺鹃,沒怎么讀懂莫秆。就知道sed和awk都是用來處理文本文件的,awk強(qiáng)大得一批悔详,居然是一種語言镊屎。臥槽,這玩意搞會了茄螃,自動化運維缝驳、自動化部署服務(wù)器,豈不是指日可待责蝠?果斷放棄sed党巾,去找了一下awk的資料。

這次直接讀了《The GNU Awk User’s Guide》霜医,GNU官方出的用戶手冊。讀了大概兩三個小時驳规,基本上awk能干啥大概了解了:

  1. awk起源于sed和grep
  2. awk擅長數(shù)據(jù)統(tǒng)計

得出這么兩個結(jié)論之后肴敛,覺得跟自己要解決的問題關(guān)系不大。既然awk是一門語言,想要編輯文本文件自然不在話下医男,但為了改一個文本文件砸狞,去寫一個腳本,貌似沒有這個必要镀梭,所以又折回來搞sed了...

MD刀森,早知道,還浪費感情报账、花時間研底、弄一個用不上的技術(shù)。但是呢...當(dāng)初學(xué)vim的時候透罢,也是浪費感情榜晦、花時間、弄了一個用不上的sed羽圃。要是以前沒研究過sed乾胶,這次搞sed也不會這么容易。嗯朽寞,多看點東西也不虧识窿,興許以后用得上呢。嗯脑融,就是安慰安慰自己吧腕扶。

b站搜了一下sed,學(xué)了大概兩三個小時吨掌,覺得這玩意不是跟vim正則替換差不多么半抱?所以學(xué)習(xí)過程意外地順利,起碼正則表達(dá)式不用學(xué)了膜宋。(意外學(xué)了一下重定向窿侈,不過還是拿來就用的程度。就是——知道這條命令好用秋茫,但為啥好用史简?給我說一下唄?不好意思肛著,不知道圆兵,解釋不了...)。

# 配置hadoop-env.sh
sed 's@export JAVA_HOME=${JAVA_HOME}@export JAVA_HOME=/usr/local/jdk1.8.0_331@g' $HADOOP_HOME/etc/hadoop/hadoop-env.sh -i

# 配置core-site.xml
sed '/<configuration>/,/<\/configuration>/d' $HADOOP_HOME/etc/hadoop/core-site.xml -i
cat >> $HADOOP_HOME/etc/hadoop/core-site.xml << EOF
<configuration>
    <property>
        <name>fs.defaultFS</name>
        <value>hdfs://localhost:9000</value>
    </property>
    <property>
        <name>hadoop.tmp.dir</name>
        <value>/usr/local/hadoop-2.10.1/data</value>
    </property>
</configuration>
EOF

自動化完成交互式命令

第一個問題解決了枢贿,本來想寫個腳本記錄一下殉农,但總感覺這腳本寫得不倫不類。這玩意我以后肯定嫌棄: 自動化完成了配置文件的編輯局荚,但是其余軟件的安裝超凳,還是得手動安裝愈污。就嘗試寫了個jdk、hadoop轮傍、hive的自動化部署腳本暂雹,發(fā)現(xiàn)了一個問題:

ssh-keygenssh-copy-id這種必須與控制臺交互的命令创夜,還是要手動敲杭跪。那就一個一個解決

ssh-keygen想要擺脫交互式比較簡單,命令本身就支持

ssh-keygen -f /root/.ssh/id_rsa -t rsa -N ''

ssh-copy-id這玩意就比較麻煩了驰吓,本著拿來就用的原則涧尿,先找了sshpass。發(fā)現(xiàn)在進(jìn)行ssh localhost免密登錄時棚瘟,第一次會彈出yes/no這種選項现斋,所以還是需要交互式...

然后就找到了expect,學(xué)了一下偎蘸,這工具挺強(qiáng)——在控制臺出現(xiàn)了什么提示時庄蹋,往里邊敲什么都支持。有點類似程序設(shè)計語言里的if-elseif-else這種結(jié)構(gòu)迷雪。

# 配置root密碼
echo 'root' | passwd --stdin root

# 配置免密登錄
ssh-keygen -f /root/.ssh/id_rsa -t rsa -N ''
/usr/bin/expect <<-END &>/dev/null
spawn ssh-copy-id localhost
expect {
    "yes/no" { send "yes\r";exp_continue }
    "password:" {send "root\r" }
}
expect eof
END

/usr/bin/expect <<-END &>/dev/null
spawn ssh-copy-id 0.0.0.0
expect {
    "yes/no" { send "yes\r";exp_continue }
    "password:" {send "root\r" }
}
expect eof
END

總結(jié)一下

一鍵部署Linux服務(wù)器腳本

運行腳本之后限书,如果用的是docker compose,可以用env_file,就不需要用腳本去配置環(huán)境變量了;但如果直接用Linux的話傲霸,需要手動source /etc/profile一下甲脏,才能hive铅匹。那就留個課題,以后再解決吧。目前已經(jīng)把n條命令,優(yōu)化成3條命令了...

# 1. 
# 在`/root`目錄下準(zhǔn)備三個文件:
# - apache-hive-2.1.1-bin.tar.gz
# - hadoop-2.10.1.tar.gz
# - jdk-8u331-linux-x64.tar.gz

# 2. 
# 將以下腳本保存為deploy.sh卤档,鍵入以下命令等待安裝、配置完成
# bash deploy.sh

# 3. 
# 等待腳本全部執(zhí)行結(jié)束以后程剥,執(zhí)行以下兩條命令劝枣,進(jìn)入hive
# source /etc/profile
# hive

# 系統(tǒng)配置
sed -i 's@mirrorlist@#mirrorlist@g' /etc/yum.repos.d/CentOS-*
sed -i 's@#baseurl=http://mirror.centos.org@baseurl=http://vault.centos.org@g' /etc/yum.repos.d/CentOS-*
# yum update -y
# yum grouplist
# yum groupinstall -y "Minimal Install"
yum install -y initscripts curl which tar sudo rsync openssh-server openssh-clients passwd vim expect
systemctl start sshd

# 配置root密碼
echo 'root' | passwd --stdin root

# 配置免密登錄
ssh-keygen -f /root/.ssh/id_rsa -t rsa -N ''
/usr/bin/expect <<-END &>/dev/null
spawn ssh-copy-id localhost
expect {
    "yes/no" { send "yes\r";exp_continue }
    "password:" {send "root\r" }
}
expect eof
END

/usr/bin/expect <<-END &>/dev/null
spawn ssh-copy-id 0.0.0.0
expect {
    "yes/no" { send "yes\r";exp_continue }
    "password:" {send "root\r" }
}
expect eof
END

# 設(shè)置變量
jdkCompressedArchive='jdk-8u331-linux-x64.tar.gz'
jdkFolder='jdk1.8.0_331'

hadoopCompressedArchive='hadoop-2.10.1.tar.gz'
hadoopFolder='hadoop-2.10.1'

hiveCompressedArchive='apache-hive-2.1.1-bin.tar.gz'
hiveFolder='apache-hive-2.1.1-bin'

# 解壓軟件
tar -zxvf /root/$jdkCompressedArchive -C /usr/local
tar -zxvf /root/$hadoopCompressedArchive -C /usr/local
tar -zxvf /root/$hiveCompressedArchive -C /usr/local

# 編輯環(huán)境變量
cat >> /etc/profile << EOF

# Java Development Kit Environment
export JAVA_HOME=/usr/local/$jdkFolder
export PATH=\$PATH:\$JAVA_HOME/bin

# Hadoop Environment
export HADOOP_CONF_DIR=/usr/local/$hadoopFolder/etc/hadoop
export HADOOP_HOME=/usr/local/$hadoopFolder
export PATH=\$PATH:\$HADOOP_HOME/bin:\$HADOOP_HOME/sbin

# Hive Environment
export HIVE_HOME=/usr/local/hiveFolder
export PATH=\$PATH:\$HIVE_HOME/bin
EOF

source /etc/profile

# 配置hadoop
sed 's@export JAVA_HOME=${JAVA_HOME}@export JAVA_HOME=/usr/local/jdk1.8.0_331@g' $HADOOP_HOME/etc/hadoop/hadoop-env.sh -i

sed '/<configuration>/,/<\/configuration>/d' $HADOOP_HOME/etc/hadoop/core-site.xml -i
cat >> $HADOOP_HOME/etc/hadoop/core-site.xml << EOF
<configuration>
    <property>
        <name>fs.defaultFS</name>
        <value>hdfs://localhost:9000</value>
    </property>
    <property>
        <name>hadoop.tmp.dir</name>
        <value>/usr/local/hadoop-2.10.1/data</value>
    </property>
</configuration>
EOF

sed '/<configuration>/,/<\/configuration>/d' $HADOOP_HOME/etc/hadoop/hdfs-site.xml -i
cat >> $HADOOP_HOME/etc/hadoop/hdfs-site.xml << EOF
<configuration>
    <property>
        <name>dfs.replication</name>
        <value>1</value>
    </property>
    <property>
        <name>dfs.name.secondary.http-address</name>
        <value>localhost:50090</value>
    </property>
</configuration>
EOF

# 格式化hdfs
hadoop namenode -format

# 啟動hdfs
start-dfs.sh

# 配置hive
cp $HIVE_HOME/conf/hive-env.sh.template $HIVE_HOME/conf/hive-env.sh
cat >> $HIVE_HOME/conf/hive-env.sh << EOF
export HIVE_CONF_DIR=$HIVE_HOME/conf
export JAVA_HOME=$JAVA_HOME
export HADOOP_HOME=$HADOOP_HOME
export HIVE_AUX_JARS_PATH=$HIVE_HOME/lib
EOF

cp $HIVE_HOME/conf/hive-default.xml.template $HIVE_HOME/conf/hive-site.xml
sed -i 's#${system:java\.io\.tmpdir}#/usr/local/hive/iotmp#g' $HIVE_HOME/conf/hive-site.xml
sed -i 's#${system:user\.name}#root#g' $HIVE_HOME/conf/hive-site.xml

hdfs dfs -mkdir -p /user/hive/warehouse 
hdfs dfs -mkdir -p /tmp/hive/ 
hdfs dfs -chmod 750 /user/hive/warehouse 
hdfs dfs -chmod 777 /tmp/hive
schematool --initSchema -dbType derby

# sed -i '/cdef/r add.txt' input.txt

# expect
# spawn
# send
# timeout -1
# interact
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市织鲸,隨后出現(xiàn)的幾起案子舔腾,更是在濱河造成了極大的恐慌,老刑警劉巖搂擦,帶你破解...
    沈念sama閱讀 218,755評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件稳诚,死亡現(xiàn)場離奇詭異,居然都是意外死亡盾饮,警方通過查閱死者的電腦和手機(jī)采桃,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,305評論 3 395
  • 文/潘曉璐 我一進(jìn)店門懒熙,熙熙樓的掌柜王于貴愁眉苦臉地迎上來丘损,“玉大人普办,你說我怎么就攤上這事∨窃浚” “怎么了衔蹲?”我有些...
    開封第一講書人閱讀 165,138評論 0 355
  • 文/不壞的土叔 我叫張陵,是天一觀的道長呈础。 經(jīng)常有香客問我舆驶,道長,這世上最難降的妖魔是什么而钞? 我笑而不...
    開封第一講書人閱讀 58,791評論 1 295
  • 正文 為了忘掉前任沙廉,我火速辦了婚禮,結(jié)果婚禮上臼节,老公的妹妹穿的比我還像新娘撬陵。我一直安慰自己,他們只是感情好网缝,可當(dāng)我...
    茶點故事閱讀 67,794評論 6 392
  • 文/花漫 我一把揭開白布巨税。 她就那樣靜靜地躺著,像睡著了一般粉臊。 火紅的嫁衣襯著肌膚如雪草添。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,631評論 1 305
  • 那天扼仲,我揣著相機(jī)與錄音远寸,去河邊找鬼。 笑死屠凶,一個胖子當(dāng)著我的面吹牛驰后,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播阅畴,決...
    沈念sama閱讀 40,362評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼倡怎,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了贱枣?” 一聲冷哼從身側(cè)響起监署,我...
    開封第一講書人閱讀 39,264評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎纽哥,沒想到半個月后钠乏,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,724評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡春塌,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,900評論 3 336
  • 正文 我和宋清朗相戀三年晓避,在試婚紗的時候發(fā)現(xiàn)自己被綠了簇捍。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,040評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡俏拱,死狀恐怖暑塑,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情锅必,我是刑警寧澤事格,帶...
    沈念sama閱讀 35,742評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站搞隐,受9級特大地震影響驹愚,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜劣纲,卻給世界環(huán)境...
    茶點故事閱讀 41,364評論 3 330
  • 文/蒙蒙 一逢捺、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧癞季,春花似錦劫瞳、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,944評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至辉巡,卻和暖如春恨憎,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背郊楣。 一陣腳步聲響...
    開封第一講書人閱讀 33,060評論 1 270
  • 我被黑心中介騙來泰國打工憔恳, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人净蚤。 一個月前我還...
    沈念sama閱讀 48,247評論 3 371
  • 正文 我出身青樓钥组,卻偏偏與公主長得像,于是被迫代替她去往敵國和親今瀑。 傳聞我的和親對象是個殘疾皇子程梦,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,979評論 2 355

推薦閱讀更多精彩內(nèi)容