(黃獻德) Hsien-De Huang | E-Mail:TonTon (at) TWMAN.ORG | TonTon (痛痛)
Malware Analysis Network in Taiwan (MiT) | 惡意程式分析網在台灣 (抬丸郎)
Deep Learning (深度學習), Malware Analysis (惡意程式分析), Ontology (知識本體)
Android Reverse Engineering (Android 逆向工程), Type-2 Fuzzy Logic (第二型模糊邏輯)

ONE PIECE (海賊王)

ONE PIECE (海賊王)

2013年8月17日

CentOS 6.4 x64之DRBL環境下的Clients做Bridge再安裝OpenNebula 4.2.0管理 KVM


應該多多少少有人看過我近半年前寫的這篇烙烙長的文章 ...


算的上是這個 Blog 最多瀏覽量的文章之一了 ... 但是 ... 老實講 !
我自己也覺得我寫的非常的零亂 ! 誰會看得懂在幹啥啊 !


原本想說就這樣擺著不管,畢竟短期間內是用不到的 ...
直到在 06 月份時我協辦了 南臺灣國際產學研發教育聯盟交流論壇暨平台啟用儀式

跟 Imperial College 的 Prof. Yi-Ke Guo 再續前緣後,他提到我可以自己裝 Open Stack 或者是 Open Nebula 就可以做到他們研究團隊之前開發的 IC Cloud 了 !


不過,促使我決定再好好從頭寫一篇 Open Nebula 的安裝其實是因為不經意的 Google 後 ... 發現自己之前那一篇一整個有誤導人的嫌疑耶 ! 囧

其實一切都因為我自己也還在摸索 ... 準備好好建置一個簡單實用的環境

Anyway ~ 不囉唆,有了之前的經驗,我想這次應該用起來會比較快且簡潔了 ???

這次一樣是多虧了這篇文章 ... 加上之前實在花很長時間,所以確實是比較順手點
在 CentOS 6.4 上安装和配置 OpenNebula 4.0
http://www.vpsee.com/2013/05/install-opennebula-4-0-on-centos-6-4/

首先是整個簡單的安裝過程 ! 要注意的是我是藉由 DRBL 並且做 Bridge 來控制全部機器的
關於 DRBL 快速安裝在 Cent OS 6.4 可以參考這幾篇:

應用 DRBL 和 CloneZilla 到 F102@ILT
DRBL Client 上的 OpenNEbula (KVM) 如何做 Bridge

但要叫人看這些,又是種折磨了 ... 所以你也可以直接參考我寫在 MiT 的 User Guide
http://mit.twman.org/mit/user-guide

或者是你直接在安裝完 Cent OS 6.4 x64 以後先做好 Bridge

========首先是幫 server 做 bridge========
網路上已經很多 KVM 做 Bridge 的教學都沒錯,但前提是要先關閉 NetworkManager 在做後續設定

chkconfig NetworkManager off 
chkconfig network on 
service NetworkManager stop 
service network start

接著不管你 host 端的 IP 是 DHCP 或是固定IP,再把 guest OS 的 IP 設定為同網段

# vi /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
TYPE=Ethernet
UUID=301227d9-20ba-4764-857e-02b00a3750bf
ONBOOT=yes
NM_CONTROLLED=no
BOOTPROTO=none
HWADDR=20:20:30:45:9D:EA
#IPADDR=YOUR IP
#GATEWAY=YOUR GATEWAY
#DNS1=8.8.8.8
#DNS2=8.8.4.4
#DEFROUTE=yes
IPV4_FAILURE_FATAL=yes
IPV6INIT=no
NAME="System eth0"
BRIDGE=br0

# cp /etc/sysconfig/network-scripts/ifcfg-eth0 /etc/sysconfig/network-scripts/ifcfg-br0

# vi /etc/sysconfig/network-scripts/ifcfg-br0
DEVICE=br0
TYPE=Bridge
ONBOOT=yes
NM_CONTROLLED=no
BOOTPROTO=none
IPADDR=YOUR IP
NETMASK=255.255.255.0
GATEWAY=YOUR GATEWAY
DNS1=8.8.8.8
DNS2=8.8.4.4
DEFROUTE=yes
NAME="System br0"

# service network restart

最後重新啟動網路,再用 ifconfig,理論上是要看到 br0 的
# service network restart

=================================

接著是安裝 DRBL
# rm -f GPG-KEY-DRBL; wget http://drbl.nchc.org.tw/GPG-KEY-DRBL; rpm --import GPG-KEY-DRBL
# yum install perl-Digest-SHA1 -y
# wget http://free.nchc.org.tw/drbl-core/x86_64/RPMS.drbl-stable/drbl-2.4.17-drbl1.noarch.rpm
# rpm -Uvh drbl-2.4.17-drbl1.noarch.rpm
# drblsrv -i

到這邊應該是已經安裝好,但是這時的 DRBL 是無法做 Bridge 的,所以你要編修這幾個檔案
***多虧 Jazz 大哥 花了好長的時間指點我,現在才能快速完成 ***

# vi /usr/bin/mkpxeinitrd-net 
# vi /usr/lib/mkpxeinitrd-net/initrd-skel/linuxrc-or-init 
# vi /usr/share/drbl/setup/files/misc/init.drbl

1. /usr/bin/mkpxeinitrd-net
找到下面這行,且新增最後那個紅字 brctl
include_bin_prog_from_server="sleep lspci insmod modprobe rmmod lsmod pkill strings mount umount mount.nfs umount.nfs brctl"

找到 # Deal with firmwares! 在上面新增
# modified by drbl-virt
cp -a --parents kernel/net/802/stp.ko $initrd/lib/modules/$kernel_ver/
cp -a --parents kernel/net/bridge/bridge.ko $initrd/lib/modules/$kernel_ver/

2.  /usr/lib/mkpxeinitrd-net/initrd-skel/linuxrc-or-init 
找到 # IF the netdevices is not assign in /etc/netdev.conf 在上面加上
# modified by drbl-virt
brctl addbr br0
brctl addif br0 eth0
ifconfig eth0 0.0.0.0
ifconfig br0 0.0.0.0

3.  /usr/share/drbl/setup/files/misc/init.drbl
找到 # find my IP address
-NETDEVICES="$(LC_ALL=C cat /proc/net/dev | awk -F: '/eth.:|tr.:|p.p.:/{print $1}')"
+NETDEVICES="$(LC_ALL=C cat /proc/net/dev | awk -F: '/eth.:|tr.:|br.:|p.p.:/{print $1}')"
意思就是在 NETDEVICES 那行
在 p.p 前面加入 br.:

基本上到這邊你的 DRBL Client 開機後已經可以順利的自己做 Bridge 了

這時候請再重新做一次以及繼續執行
(建議等 OpenNebula 也安裝好再做比較方便)
# drblsrv -i
# drblpush -i

=================================

再來便是安裝一下 EPEL
#  wget http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
# rpm -ivh epel-release-6-8.noarch.rpm
# yum update -y

=================================

官方網頁也有很清楚的說明哩: http://blog.opennebula.org/?p=4992

接著請下載
# wget http://dev.opennebula.org/packages/opennebula-4.2.0/CentOS-6/CentOS-6-opennebula-4.2.0-1.tar.gz
# tar zxvf CentOS-6-opennebula-4.2.0-1.tar.gz
# cd opennebula-4.2.0-1/
# yum localinstall opennebula-common-4.2.0-1.x86_64.rpm -y
# yum localinstall opennebula-ruby-4.2.0-1.x86_64.rpm -y
# yum localinstall opennebula-4.2.0-1.x86_64.rpm -y
# yum localinstall opennebula-sunstone-4.2.0-1.x86_64.rpm -y
# yum localinstall opennebula-server-4.2.0-1.x86_64.rpm -y
# yum localinstall opennebula-java-4.2.0-1.x86_64.rpm -y
# yum localinstall opennebula-gate-4.2.0-1.x86_64.rpm -y
# yum localinstall opennebula-flow-4.2.0-1.x86_64.rpm -y
# yum localinstall opennebula-ozones-4.2.0-1.x86_64.rpm -y
# yum localinstall opennebula-node-kvm-4.2.0-1.x86_64.rpm -y

整個安裝過程就如同上面這張圖啦 !
這個時候請你先從 root 切換到 oneadmin

# su - oneadmin

然後看一下密碼是啥吧

# cat .one/one_auth
把你看到的類似密碼給 copy 當做等等登入 sunstone 的預設密碼使用
oneadmin:7045b6dc221a29c223524ddc74fed169

*** 需要注意的是如果你在 sunstone 改過密碼,記得也修該一下 one_auth 這檔案 ***
不然在下一些像 onevm 或者是 onehost 時會出現下面的錯誤哩 !
[VirtualMachinePoolInfo] User couldn't be authenticated, aborting call.
/usr/lib/one/ruby/opennebula/client.rb:76:in `initialize': ONE_AUTH file not present (RuntimeError)
 *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***

以及在 iptables 補上這兩行
# iptables -I INPUT -p tcp --dport 9869 -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT 
# iptables -I INPUT -p tcp --dport 29876 -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT

以及修改一下這一個檔案 裡的 
# vi /etc/one/sunstone-server.conf

# Server Configuration
#
:host: 你的 IP
:port: 9869


=================================

*** 在安裝 3.8 時我在這邊被困住超久的,但裝 4.2 時我發現這問題超簡單 ***
原本需要把系統的帳密互相交換一次,主要就是要做到可以讓 root 以及 oneadmin 這兩個帳號互相在 server 及 client 上互相不用帳密就可以登入 !
*** 這個版本變成只要先在各個 client 上用 oneadmin 登入,然後 ssh 到 server 一次,就ok了 ***
** 看了一下大部份是卡在 ssh 的 know_host 啦 **
** 在安裝 opennebula 過程就先處理掉 ssh 的 dsa 的 key 的問題 **
後面直接再用 drblpush 就可以通通把檔案派送到 client 了

所以下面這些紅字的指令就不用啦 !!!
# cat .ssh/id_rsa.pub >> /tftpboot/nodes/192.168.0.1/root/.ssh/authorized_keys
# cat .ssh/id_rsa.pub >> /tftpboot/nodes/192.168.0.1/var/lib/one/.ssh/authorized_keys
# cat /var/lib/one/.ssh/id_rsa.pub >> /tftpboot/nodes/192.168.0.1/root/.ssh/authorized_keys
# cat /var/lib/one/.ssh/id_rsa.pub >> /tftpboot/nodes/192.168.0.1/var/lib/one/.ssh/authorized_keys

# cat /tftpboot/nodes/192.168.0.1/root/.ssh/id_rsa.pub >> .ssh/authorized_keys
# cat /tftpboot/nodes/192.168.0.1/root/.ssh/id_rsa.pub >> /var/lib/one/.ssh/authorized_keys
# cat /tftpboot/nodes/192.168.0.1/var/lib/one/.ssh/id_rsa.pub >> .ssh/authorized_keys
# cat /tftpboot/nodes/192.168.0.1/var/lib/one/.ssh/id_rsa.pub >> /var/lib/one/.ssh/authorized_keys

設定開機啟動
# chkconfig opennebula on 
# chkconfig opennebula-sunstone on

這時候請做一次以及繼續執行,然後再重開機吧 !
# drblsrv -i
# drblpush -i

=================================

這個時候你就可以登入到你的網址:9869,然後看到這樣的畫面了


馬上偷偷換一下 logo 自嗨一下



記得登入帳密就是前面提到的 one/one_auth 檔案裡的那一串


接著當然就是要記得先改密碼跟使用介面啦


基本上可以發現整個 4.2.0 跟之前裝的 3.8 介面變很多



然後就開始建一個主機叢集


接著就是建一個主機啦 !



到這邊,如果你有沒有做剛剛提到的 ssh 的 know_host,一定會看到下面異常的訊息

[InM][I]: Monitoring host ONE.TWMAN.ORG (3)
[InM][I]: Command execution fail: 'if [ -x "/var/tmp/one/im/run_probes" ]; then /var/tmp/one/im/run_probes kvm 3 ONE.TWMAN.ORG; else   exit 42; fi'
[InM][I]: Host key verification failed.
[InM][E]: Error monitoring host 5 : MONITOR FAILURE 5 Could not update remotes
[InM][I]: ExitCode: 255
[InM][E]: Error monitoring host 3 : MONITOR FAILURE 3 -

趕快在各個 client 上用 oneadmin 登入,然後 ssh 到 server 這樣就可以搞定了

接著後面是要繼續解說怎樣把 VM 建起來 !!! 這就等有空再補充了 ...
因為馬上就又碰上了問題了啊 ! xD

Mon Aug 19 02:30:42 2013 [DiM][I]: New VM state is ACTIVE.
Mon Aug 19 02:30:42 2013 [LCM][I]: New VM state is PROLOG.
Mon Aug 19 02:30:42 2013 [TM][E]: missing DISK mandatory attributes (SOURCE, TM_MAD, CLONE, DATASTORE_ID) for VM 8, DISK 0
Mon Aug 19 02:30:42 2013 [DiM][I]: New VM state is FAILED