configure Openvswitch on Proxmox VE

Logo-ProxmoxVE

這部分的資料在網路上找了很久還是都沒有,

只得知 PVE 把 Linux 原生的 bridge 設定內建的,

無法用 Open vswitch 去取代它。

最後只好…來挑戰一下 make linux kernel 了

 

 

首先利用 git 把 pve 的 kernel 抓回來,並放置在 /usr/src/ 資料夾內

下 make ,它就會自動的把 source code 給抓回來

source code 的目錄為 /usr/src/pve-kernel/linux-2.6-2.6.32

[root@www ~]$ git clone git://git.proxmox.com/git/pve-kernel-2.6.32.git pve-kernel
[root@www ~]$ mv pve-kernel /usr/src
[root@www ~]$ cd pve-kernel
[root@www ~]$ make

 

 

再來,切換進去 linux-2.6-2.6.32 資料夾內,

開始 make 我們的 kernel 了。

先下

# 把 source code 中的目標檔刪除
[root@www ~]$ make mrproper
# 清除暫存檔
[root@www ~]$ make clean
[root@www ~]$ make menuconfig

 

 

就會開始出現藍底白字的畫面了,如下

未命名

 

 

可以先在 General setup ->> Local version – append to kernel release 設定你這次編譯的名稱

未命名1

 

 

選擇 Networking support -> Network options
把 bridge  * 改為 M

未命名2

未命名3

未命名4

 

 

最後,按下 save an alternate configureation file

保留 config 檔,並離開設定

未命名5

 

 

再來,就可以編譯我們的 kernel 了

#先編譯核心
[root@www linux-2.6-2.6.32]$ make bzImage
#再編譯模組
[root@www linux-2.6-2.6.32]$ make modules
#實際安全模組
[root@www linux-2.6-2.6.32]$ make modules_install

 

 

每一個步驟花的時間都滿長的,請耐心等候…

都編譯好後,就可以開始來設定 Grub 多重核心選單了

我們先複製我們的 kernel 到 /boot 底下

#複製 kernel
[root@www /boot]$ cp /usr/src/pve-kernel/linux-2.6-2.6.32/arch/x86_64/boot/bzImage \
> /boot/vmlinuz-2.6.32-19-pvebridge
#複製 config 檔
[root@www /boot]$ cp /usr/src/pve-kernel/linux-2.6-2.6.32/.config \
> /boot/config-2.6.32-19-pvebridge

 

 

建立相對應的 Initial Ram Disk(initrd)

[root@www /boot]$ mkinitramfs -o /boot/initrd.img-2.6.32-19-pvebridge 2.6.32-19-pvebridge

 

 

編輯開機選單 grub 加入

vim /boot/grub/grub.cfg
menuentry 'Proxmox Virtual Environment GNU/Linux, with Linux 2.6.32-19-pvebridge' --class proxmox --class gnu-linux --class gnu --class os {
insmod part_msdos
insmod ext2
set root='(hd0,msdos1)'
search --no-floppy --fs-uuid --set 9cc709ff-7275-461e-8e91-505d0b1c158f
echo 'Loading Linux 2.6.32-19-pvebridge ...'
linux /vmlinuz-2.6.32-19-pvebridge root=/dev/mapper/pve-root ro quiet
echo 'Loading initial ramdisk ...'
initrd /initrd.img-2.6.32-19-pvebridge
}

 

 

再來就可以重開機了~~~~

重開機後利用 uname -r 查看你的 kernel 版本是不是你剛剛編的

 

 

安裝 openvswitch 的部分,

請參考 Install and Configuring OpenvSwitch on ubuntu 12.04

 

 

參考資料:

1. 鳥哥的 Linux 私房菜

Openvswitch

1. 用一個不對外的 bridge 把 2 台同 host 的 vm(vnet0, vnet1) 串連起來

[root@ubuntu] $ ovs-vsctl add-br br0
[root@ubuntu] $ ifconfig br0 192.168.122.1 netmask 255.255.255.0
[root@ubuntu] $ ovs-vsctl add-port br0 vnet0
[root@ubuntu] $ ovs-vsctl add-port br0 vnet1

設定 兩台 vm 的 ip 跟 br0 為同一個 lan,並把 gateway 設為 br0 的 ip

[root@ubuntu] $ ifconfig 192.168.122.10 netmask 255.255.255.0 up
[root@ubuntu] $ route add default default 192.168.122.1

Linux Networking first

traffic2

 

Hub ,網路共享媒體

當一台主機發出封包的時候,Hub 會把這個封包轉給給其它 port 的所有主機

Swicth,交換機

switch 內部具有 cpu 還有 memory ,memory 可以記錄每次 switch port 所連接的主機 mac address,

而且每個 port 上所接的主機都有自己的頻寬,不怕被佔用。

MAC Address

乙太網路大多都是利用 hub 、switch 做為中心,

資料在 hub 上傳送的時候,單一時間點內,僅能被一部主機所使用。

這時候就出現在所謂的 CSMA/CD (Carrier-Sense Multiple Access with Collision Detection) 的技術。

在主機傳送封包前,會先偵測該媒體上是否有其它 node 在運用,確定沒有才會送出自己的資料。

在 LAN 內傳遞資料,都使用 MAC Address ,

MAC 不能跨 routing。

當主機想要找到目標 IP 的時候,會先對 LAN 做 Broadcast,

要求 LAN 裡面的主機回去他的 IP 跟 MAC,

當目標 IP 看到這個 Boradcast 的時候,就會回應你的主機他的 mac address,

如果非目標主機,就會主動忽略。

而目標主機的 MAC 就會被記錄到你主機上的 ARP talbe(存在 memory 中),

[root@ubuntu] $ apr-n
#可以查看目前 ARP table 裡面儲存了哪些主機的 MAC 資訊

IP = Internet Protocol 是在 L3

具有分級的概念

查看 鳥哥 有比較詳盡的解說。

Install and Configuring OpenvSwitch on ubuntu 12.04

featured-image

1. 請先在本地端登入,把 network-manager 關閉

 [root@ubuntu] $ /etc/init.d/network-manager stop 

2. 更新 apt-get 套件,並且安裝 OpenvSwitch 需求的套件

[root@ubuntu] $ apt-get update
[root@ubuntu] $ apt-get install -y git python-simplejson python-qt4 python-twisted-conch
[root@ubuntu] $ apt-get install -y autoconf gcc uml-utilities libtool pkg-config automake
[root@ubuntu] $ apt-get install -y build-essential openssl libssl-dev bridge-utils

3. git clone OpenvSwitch package

[root@ubuntu] $ wget http://openvswitch.org/releases/openvswitch-1.4.0.tar.gz
[root@ubuntu] $ tar zxvf openvswitch-1.4.0.tar.gz
[root@ubuntu] $ cd openvswitch-1.4.0
[root@ubuntu] $ ./boot.sh
[root@ubuntu] $ ./configure --with-linux=/lib/modules/`uname -r`/build
[root@ubuntu] $ make && make install
[root@ubuntu] $ insmod datapath/linux/openvswitch.ko
[root@ubuntu] $ insmod datapath/linux/brcompat_mod.ko  #可以讓 ovs 取代 linux bridge 的模組
[root@ubuntu] $ mkdir -p /usr/local/etc/openvswitch
[root@ubuntu] $ ovsdb-tool create /usr/local/etc/openvswitch/conf.db vswitchd/vswitch.ovsschema
[root@ubuntu] $ ovs-vsctl --no-wait init
[root@ubuntu] $ ovsdb-server /usr/local/etc/openvswitch/conf.db \
--remote=punix:/usr/local/var/run/openvswitch/db.sock \
--remote=db:Open_vSwitch,manager_options \
--private-key=db:SSL,private_key \
--certificate=db:SSL,certificate \
--bootstrap-ca-cert=db:SSL,ca_cert --pidfile --detach
[root@ubuntu] $ ovs-vswitchd unix:/usr/local/var/run/openvswitch/db.sock --detach
[root@ubuntu] $ ovs-brcompatd --pidfile --detach
[root@ubuntu] $ ovs-vsctl show

4.開機時,自動啟動 ovs 模組,可以用 /etc/init.d/rc.local 呼叫這隻 shell

#!/bin/bash

PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin
export PATH

#移除原有模組並新增open vSwitch
rmmod bridge
insmod /root/openvswitch/datapath/linux/openvswitch_mod.ko
insmod /root/openvswitch/datapath/linux/brcompat_mod.ko

#啟動
ovsdb-server --remote=punix:/usr/local/var/run/openvswitch/db.sock \
   --remote=db:Open_vSwitch,manager_options \
   --private-key=db:SSL,private_key \
   --certificate=db:SSL,certificate \
   --bootstrap-ca-cert=db:SSL,ca_cert \
   --detach

#檢查是否開過
SERVICE='ovs-vswitchd'

if ps ax | grep -v grep | grep $SERVICE > /dev/null
then
    echo "$SERVICE service running"
else
    ovs-vswitchd unix:/usr/local/var/run/openvswitch/db.sock --detach
fi

ovs-brcompatd --pidfile --detach
#ovs-vsctl show

# 重設 bridge
#ovs-vsctl del-br br0
#ovs-vsctl add-br br0
#ovs-vsctl add-port br0 eth1
#ovs-vsctl show

#ifconfig br0 10.1.1.24 netmask 255.255.255.0 # 網路預設值可以將br0刪掉,否則開機時會等br0一段時間

exit 0

參考資料:

  1. NetworkStatic | Brent Salisbury’s Blog

Kernel-based Virtual Machine

圖片

KVM( 全名為 Kernel-based Virtual Machine ),自 2006 年 12 月起,就屬於 Linux 核心架構下的一部分,簡單來說,就是以後 Linux 系統核心,就具備支援虛擬化的功能,並且是以核心模組化的方式載入執行,只要硬體搭配得宜(此指 CPU 支援虛擬化技術,也就是 lntel VT 或 AMD-V ),再安裝 KVM 這一套虛擬系統,就可以直接在現有的 Linux 系統架構之下,建構裸機式(Bare-Metal )虛擬系統平台。

by Linux KVM 研究室

開始安裝:

環境:ubuntu server 12.04 amd64

先檢查你的 CPU 是否支援虛擬化

[root@ubuntu]$  egrep -c '(vmx|svm)' /proc/cpuinfo
#大於 0 的話代表支援

檢查是否支援 KVM

[root@ubuntu]$ apt-get install cpu-checker
[root@ubuntu]$ kvm-ok

INFO: /dev/kvm does not exist
HINT:   sudo modprobe kvm_intel
INFO: Your CPU supports KVM extensions # 有看到這行表示OK
KVM acceleration can be used

開始安裝

[root@ubuntu]$ apt-get install virtinst
[root@ubuntu]$ apt-get install ubuntu-vm-builder
[root@ubuntu]$ apt-get install virt-viewer
[root@ubuntu]$ apt-get install qemu-kvm libvrit-bin
[root@ubuntu]$ apt-get install bridge-utils  #bridge model
[root@ubuntu]$ apt-get install libcap2-bin
[root@ubuntu]$ apt-get install virt-manager  #圖型化 vm 管理介面
[root@ubuntu]$ setcap cap_net_admin=ei /usr/bin/qemu-system-x86_64

KVM 目前有三套好用的管理工具

1. virt-manager :一個圖形介面的管理工具,可以安裝在有 X window 的 linux 機器上。

2. virt-install: 一個用 python 撰寫的文字介面管理工具,Red Hat 開發。

3. ubuntu-vm-builder:文字介面管理工具,Canonical 開發。

 

virt-manager

全名為  Virtual Machine Manager,可以在 x window 的環境中,操控 VM

一開始,要把你所登入的使用者,加入 libvirtd 的 group 裡面

這樣,你所登入的使用者,才有權限操作 Virtual Machine Manager

例如我想要讓 mrblack 有操作 Virtual Machine Manager 的權限

[root@ubuntu]$ adduser mrblack libvirtd
[root@ubuntu]$ /etc/init.d/libvirt-bin reload   #重新載入設定

就可以利用 virt-manager 來管理 VM

未命名

virsh 文字管理工具

virsh 是一套用於虛擬化管理的工具,本身是由 libvirt 實作而來。

是一種跨平台(支援 XEN、KVM 等虛擬化系統)的虛擬化管理 API。

關於它的操作可以看 libvrit 官網 有詳細的介紹

 

 

 

資料參考:

  1. WebModelling
  2. ubuntu documentation

KVM 指考參考:

  1. TKG 網格計算與網路技術研究室
  2. Gavin’s HOME

Sublime Text2

sublime-text-2-icon

最近開始在學 node js

由於原本習慣用的 notepad++ 似乎在開發 nodejs 上不是那麼的好用

後來在網路上看到這款 Sublime Text2 用起來感覺還滿順手的

唯一的缺點就是,在做 FTP 連線的時候,需要把檔案載到 local 端再做同步吧

但是有眾多套件的加持下,讓我想繼續試試看

下面這些有人寫好的教學文章,再此做一個記錄

  1. mrkt 的程式學習筆記  – 基本操作
  2. KingKong Bruce 記事 – Plugin 推薦
  3. 牌爛,更要認真打
  4. 陳陳陳 – Sublime Text2 介紹
  5. Ingenieurburo Edelmann – ejs 套件

Kübler-Ross model

 

 

伊麗莎白-庫伯勒-羅絲(Elizabeth Kubler-Ross, July 8, 1926 ~ August 24, 2004)

是一位出生於瑞士的美國醫生

在1969年出版了她的傳世著作 「On Death and Dying」

(臺灣譯本的書名很好,叫《生寄死歸》,而大陸譯本的書名叫《論死亡和瀕臨死亡》)

被後人稱為 「生死學的經典」。

《時代》雜誌曾稱她是 「20世紀最偉大的思想家之一」

庫伯勒-羅絲觀察到病人面對死亡等災難時有著不同的反應

她把這些反應劃分為五個階段——被後人稱為

「庫伯勒-羅絲模型」(Kubler-Ross model)

 

庫伯勒-羅絲模型五個階段包括:

1. 否認:最初的階段。「不可能會是這樣。」
Denial: The initial stage: “It can’t be happening."

2. 憤怒:「你怎麼敢這樣對我」(對神靈、逝者、自己或是他人)。
Anger: “Why ME? It’s not fair!" (either referring to God, oneself, or anybody perceived, rightly or wrongly, as “responsible")

3. 討價還價:「讓我活著看到我的孩子畢業就好。」
Bargaining: “Just let me live to see my child(ren) graduate."

4. 沮喪:「我太難過了,何必還要在乎什麼呢?」
Depression: “I’m so sad, why bother with anything?"

5. 接受:「一切都會好起來的。」
Acceptance: “It’s going to be OK."

 

庫伯勒-羅絲把該模型應用到所有災難性的個人損失上(工作、收入、自由)

不只是死亡

生命中大大小小的事情

其實也都經歷了這樣的過程

這樣的過程不一定總是順向的

也不是絕對單獨發生

常常,在已經接受之後,又突然的一陣情緒讓你回到了先前狀態中

或是在那些狀態中循環,從來都沒有進入到接受

也有可能各種情緒混雜著出現

她也提出這些階段不一定按特定順序發生

病人也不一定會經歷其中所有階段,但是她認為病人至少會經歷其中兩個階段。

舉些例吧

 

失戀

  • 否認            :其實他還是愛我的,只是我誤會了。
  • 憤怒           :你怎麼可以這樣對我?我是這樣的付出!
  • 討價還價  :我可以做得更好,請你不要離開我。你離開我,我就死給你看。
  • 沮喪           :這輩子再也沒有人會愛我了,我會永遠孤單。
  • 接受事實  :這份愛過去了,也準備好了迎接下一份愛。

 

 

參考資料:

  1. 維基
  2. 史考特的風馬牛 山居