webframework : express
npm install express
view engine : ejs
npm install ejs
dev-tool : nodemon 監控檔案變化自動重啟伺服器
npm install nodemon -g
css framework : bootstrap
看了 open vswitch 也有一陣子了,斷斷續續也在自己的 wiki 上亂寫了一些東西,但是一直覺得自己不夠熟,也不知道從哪裡開始整理,先在這寫一些概念性的解釋…
官方資料內有一個關於 porting 的文件,裡面畫了實作上的一些抽象元件,幫助你決定要移植 ovs 時,要改寫哪個部份,如下圖。一開始看這張圖應該會有點霧煞煞,對 ovs 的很多概念還不熟悉,不知道從哪裡開始瞭解,看完文件的解釋還是不太懂。
| +-------------------+
| | ovs-vswitchd |<-->ovsdb-server
| +-------------------+
| | ofproto |<-->OpenFlow controllers
| +--------+-+--------+ _
| | netdev | |ofproto-| |
userspace | +--------+ | dpif | |
| | netdev | +--------+ |
| |provider| | dpif | |
| +---||---+ +--------+ |
| || | dpif | | implementation of
| || |provider| | ofproto provider
|_ || +---||---+ |
|| || |
_ +---||-----+---||---+ |
| | |datapath| |
kernel | | +--------+ _|
| | |
|_ +--------||---------+
||
physical
NIC
我自己則是從他安裝完所提供的各種工具與重要背景服務的角度開始,由此開始熟悉 ovs 的概念,感覺這是一個比較好的入門點。我畫了一張類似的圖。
+---------+ +----------+ +---------+ +---------+
|ovs-ofctl| |ovs-appctl| |ovs-vsctl| |ovs-dpctl|
+---------+ +----------+ +---------+ +---------+
^ ^ USER SPACE TOOLS ^ ^
+-------|-------|------------------|-- --------|----+
v v v |
+--------------+ +----------------+ |
| | | | |
| ovs-vswitchd | <---> | ovsdb-server | |
| | | | |
+--------------+ +----------------+ |
^ USER SPACE DAEMONS |
+----------|-----------------------------------|----+
v KERNEL SPACE v
+------------------------------------------+
| |
| datapath |
| |
+------------------------------------------+
datapath – openvswitch_mod.so 當 ovs 以 kernel 模組運作時在核心中的單元,主要處理在核心交換封包到各介面的工作。datapath 應該也能當作 vswitch 在 kernel 中的 instance,可以有好幾個 datapath 。
USER SPACE DAEMONS - 開啟 ovs 需要啟動的兩個背景程式
USER SPACE TOOLS:
找到畫這圖的有趣的軟體:http://www.asciiflow.com/
放假在家獨自在網路上不停亂看,PTT、FB,文章都亂看過後,有種迷失方向感,令人略顯落寞。FB 對我這樣不善交際的人來說是一種矛盾的功能,把 FB 當成 BBS 來用,卻盡量不與人產生互動。看到人生日內心就會產生混亂,為什麼把祝賀生日變成如此的容易與制式,是否因此就要產生固定的迴圈,你來祝賀我我就去祝賀你,這樣還是真心的嗎。因此我決定逃離這個模式,隱藏自己,試圖不要主動與人產生互動,矛盾的使用這個社群網站…。矛盾的在網路生活著。
已經快要受不了這種制式又沒有突破的作息與生活,希望能再畢業後用別種方式來半強迫的與外界產生互動。所以在畢業之前的假日只好多準備幾部電影了,溫馨喜劇電影在此時此刻變得格外重要,這些演員突然變成自己最重要的人。謝謝你企鵝先生,金凱瑞…
一直希望自己觀影的層次能夠在不斷累積之下有所提昇,能看到影片更深層的東西,讓自己對藝術、設計、抽象的概念更有瞭解。今天在網路上看了一部微電影,看到影片用如此平面的方式表達,一次說一句話,不刻意讓邏輯合理,看起來就很奇怪,用很華麗的句子去堆疊一些與影片情感沒有直接相關的情緒,這些感受是如此明顯。這讓我重新省思看過一些較著名的電影,似乎影片中情節的每件事的邏輯與情感都有深入的考量,並搭配良好的攝影與後製技術,讓人感到佩服…
今天的片單是~Winter Bone,飢餓遊戲女主角在前幾年演的片子。
希望在這兩天過後能在自己紛亂的小宇宙之中得到救贖。恢復作息~
–
又過了一天,今天禮拜一,我晚上九點睡,兩點半就醒了,不知道算是恢復作息嗎?
把一天的時間延長到有十八個小時,而有一半的時間是要獨自面對自己,突然對生活感到害怕,因為我不曉得如何安排自己的時間。
好像有大把的時間可以用,應該要做了更有意義的事,讀英文、看書,但是一打開電腦,就開始陷入空虛的網路衝浪感到空乏又無法自拔。這或許是我不敢長時間獨自面對自己的一種逃避方式吧
linux 用管線可以讓指令互相搭配完成很多複雜的工作,只是我不太會用。最常用的是
$ cat /var/log/httpd/access_log |less $ rpm -qa|grep kernel
雖然可以直接 less 但是我還是比較習慣先 cat 出來,因為我覺得 cat 的工作是印字 less 是幫我可以翻頁。
$ less /var/log/httpd/access_log
如果有些指令是會不停的印出字來,像是 ping 一樣,這樣要怎麼用管線來跟他的每一次更新互動呢?其實原始的想法是我要怎麼取到每次 ping 的時間,他就一直更新阿~或者說要怎麼把他的結果轉存做處理,其實有很多程式是寫成這種樣子的~所以找到這個方法:
$ ping google.com | while read pong; do echo "$(date): $pong"; done
管線丟給一直跑迴圈的 read 他會幫忙一直讀出每次的內容,然後我們就可以在這裡動手腳了。另外一個例子,我自己亂寫的,只是 pidstat 跟 iostat 都有類似的特性可以以幾秒為單位輸出
$ iostat -hmc 1|while read pong;do echo $pong|tr -d "\n";done
debian 的安裝光碟裡面是去除了所有版權問題的驅動,因此如果遇到安裝時找不到驅動的問題,可以到官網下載這些 non-free firmware 透過 usb 來讀取這些韌體,可能是要放在 firmware 的資料夾下讓他掃瞄吧。
那如果我只有光碟機勒,不就很麻煩嗎?其實可以自己製作一個包含 non-free 驅動的 iso,透過像是 magic iso 作為 iso 編輯器,將下載來的 DVD 打開,把抓下來的 firmware deb 都放到光碟內原本是空的 firmware 資料夾內,將 iso 存檔。就會得到一份…non-free 的安裝光碟了,接下來的安裝就會很順利了。
需注意編輯 iso 軟體的軟體最好要支援可以設定 bootable 的,否則放進去結果光碟不能開機也是瞭然阿~免費軟體的話 free iso creater 好像支援吧,只是沒辦法直接編輯 iso。
這次遇到可能需要編譯 bnx2 的 driver 的情況,套件是 firmware-bnx2 ,網卡是 Broadcom NetXtremeII 5706 用到的韌體是
* Broadcom NetXtremeII 5706/5708 firmware (mips), version Linux 2.6.32 (bnx2/bnx2-mips-06-5.0.0.j3.fw)
沒什麼概念,不知道從哪裡開始, 就去 broadcom 官網抓最新的 driver 下來自己編譯,make KVER=xxx 蠻順利就過了,只是開機時寫說
bxn2: Can’t load firmware file "bnx2/bnx-mips-06-6.2.1.fw"
檢查一下 /lib/firmware/bnx2 資料夾是真的沒有這個版本( 6.2.1) 檔,跟 debian 6.0.4 用到 fw 檔不太一樣,apt-get 可以用以下指令來抓原始碼來參考看,裡面看起來都只有一些 firmware 二進制檔
$ apt-get source firmware-bnx2
這才找到原本 linux kernel 本來就有這個 driver 跟 firmware 的各種不同版本了 。就直接從 linux kernel 抓正確對應的版本下來放到 /lib/firmware 了。結果重開機還是有同樣的錯誤,才發現只要更新一下 ramfs 好像就可以了?!詳細原理還不太清楚…
$ update-initramfs -u
另外可以用以下指令來檢查 module 裡面的 fw ?! ,原生 debian non-free bnx2 版本可以看到很多 fw 結果自己編的版本卻不行,不知道這是在幹麼的阿阿~
filename: /lib/modules/2.6.32-5-amd64/kernel/drivers/net/bnx2.ko firmware: bnx2/bnx2-rv2p-09ax-5.0.0.j3.fw firmware: bnx2/bnx2-rv2p-09-5.0.0.j3.fw firmware: bnx2/bnx2-mips-09-5.0.0.j3.fw firmware: bnx2/bnx2-rv2p-06-5.0.0.j3.fw firmware: bnx2/bnx2-mips-06-5.0.0.j3.fw
慘考資料:
http://forum.proxmox.com/threads/8303-bnx2-Can-t-load-firmware-file
ESXi 5 開始支援在 vm 裡面跑 vm 只是在新增 vm 的時候 OS 沒有辦法選 ESXi,只能在修改的時候才改 OS type,這個選項會影響到 vm 內 cpu 的支援,一定要改成 ESXi 才能在裡面跑 vm。
1.
先要把 vSphere host 的此檔案增加一行
/etc/vmware/config
vhv.allow = "TRUE"
2.
CLUSTER 的 EVC 好像會有影響,不太確定為了避免先關閉
disable EVC
3.
HOST 重開機
4.
建立 VM,建立完以後再從設定把 OS 改成 ESXi,如下圖

5.
在 vm 內輸入 kvm-ok 說你現在是在正確的狀態,否則就是上述幾點有地方需要再確認,在 vm 內安裝作業系統例如 ubuntu,裝 qemu、kvm、libvirt-bin、virt-manager
6.
用 virt-manger 安裝 nested-vm ,這邊要注意的是放入光碟後可能不會很順利的進入安裝畫面,cpu 會滿載而且畫面一直黑掉沒反應,要一直持續亂按 enter 就會進去安裝畫面了…。會讓人以為壞掉的慘況如下~

7.
用 bridge 把 KVM 網路設好以後網路還是有問題,nested-vm 會沒辦法上網。現象是當 nested-vm 發出廣播,目標主機回應的封包沒辦法透過 vmware 進到 nested-vm 裡面,應該是 vmware vswitch 設計上沒有考量到這種現象,可能他不是單純的 learning swtich。所以把 vmware 的 vm 網卡所在的 port group 改成 promisc~就可以運作了~只是 host 的封包就會流竄到 vswitch 內了。

參考
http://www.vpsee.com/2012/02/how-to-run-kvm-nested-vms-on-vmware-esxi/ – how-to-run-kvm-nested-vms-on-vmware-esxi
http://communities.vmware.com/message/2021380 – ESXi 5 and nested VM’s
http://communities.vmware.com/community/vmtn/bestpractices/nested – 官方討論
# 輸出成檔案 set terminal png size 600,400 medium # 檔名 plot.png set output "plot.png" # x 軸標題 set xlabel "Response Time (s)" # y 軸標題 set ylabel "Cumulative Fraction" # 圖片標題 set title "mlwmlw.org" # 顯示格線 set grid # 線的類型 pointtype # 點顯示的間距 pointinterval # 點的大小 pointsize plot cos(x) with linespoints pt 8 pi -3 ps 0.5 title "a",cos(x-.8) with linespoints pointtype 4 pointinterval -3 pointsize 0.5 title "b"
gnuplot online,線上測試的網站,要注意為什麼特別強調4.6,因為 pointinterval 是最新幾個版本才有的參數,像這個網站就不支援這樣下。
links :
- 官方 demo 文件,關於線的樣式
環境是 vSphere 5 與 VMware vCenter Server Appliance,監控 storage 的服務是 VMware vCenter Storage Monitoring Service 縮寫是 sms。
今天發現從 vCenter Service Status sms 一直 failed,也可以從 vCenter 的這個網址檢查是不是健康 https://vcenter/sms/health.xml。造成跟硬碟效能監控有關的圖都跑不出來,嚴重影響我的測試,十分不悅。
結果去 /var/log/vmware/vpx/sms.log 裡面看到如下的錯誤:
— Cause: org.h2.jdbc.JdbcSQLException: NULL not allowed for column "ENTITYID"; SQL statement:
INSERT INTO scsiTarget ( entityId, wwn, portWwn, nodeWwn, iscsiName, iscsiAlias, type, vendor
) VALUES ( ?, ?, ?, ?, ?, ?, ?, ? ) [90006-147]
at com.ibatis.sqlmap.engine.mapping.statement.GeneralStatement.executeUpdate(GeneralStatement.java:91)
at com.ibatis.sqlmap.engine.impl.SqlMapExecutorDelegate.insert(SqlMapExecutorDelegate.java:447)
at com.ibatis.sqlmap.engine.impl.SqlMapSessionImpl.insert(SqlMapSessionImpl.java:82)
at com.ibatis.sqlmap.engine.impl.SqlMapClientImpl.insert(SqlMapClientImpl.java:59)
at com.vmware.vim.sms.provider.VcProviderImpl.populateScsiTargets(VcProviderImpl.java:849)
at com.vmware.vim.sms.provider.VcProviderImpl.access$300(VcProviderImpl.java:41)
at com.vmware.vim.sms.provider.VcProviderImpl$PopulateStorageInfoTask.run(VcProviderImpl.java:3006)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:441)
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
at java.util.concurrent.FutureTask.run(FutureTask.java:138)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
at java.lang.Thread.run(Thread.java:662)
十分不悅 again..,是 vCenter 的 bug = =?
好險找到這篇文章最後一個回答是解答,這個表裡面有一筆 NULL 的資料因此出了問題。所以找個軟體來連進去資料庫,我這環境是用 oracle,Client 是用 Navicat Premium 登入 Oracle,按照順序檢查有沒有這筆空資料,有的話就刪除。
select * from VPX_PSA_TARGET_TRANSPORT where ISCSI_NAME is NULL AND VPX_TYPE=’vim.host.InternetScsiTargetTransport’;
delete from VPX_PSA_TARGET_TRANSPORT where ISCSI_NAME is NULL AND VPX_TYPE=’vim.host.InternetScsiTargetTransport’;
接著重開 ESXi Service 他就復活拉拉拉阿~~~~~
近期迴響