linux pipe read

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 adventure

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

vmware nested ESXi

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 – 官方討論

gnuplot 4.6 example

# 輸出成檔案
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 是最新幾個版本才有的參數,像這個網站就不支援這樣下。

中文

如果在 Linux cli 下要印出中文字,需要設定字型參數,可以用 fc-list 去查詢系統目前有哪些字型,例如

$ fc-list
..
Fixed:style=Regular
文鼎PL細上海宋Uni,AR PL ShanHeiSun Uni,文鼎PL细上海宋Uni:style=Regular
Luxi Sans:style=Bold Oblique
..

  然後就能把這字型設定到 gnuplot 裡面,可以參考鳥哥 fc-cache 來知道怎麼更新字體,用 fc-list : file 可以查詢字型放置的資料夾,可以從 window 抓一些到 Linux 再更新。例如在 CentOS 是在 /usr/share/fonts 裡面,目前測起來有些中文字體,用 gnuplot 畫出來以後中英字距怪怪的,微軟中黑體看起來還可以。

例如參考 fc-list 印出來的英文字型名稱,選擇文鼎細上海宋體的語法為:

set terminal png size 600,400 font "AR PL ShanHeiSun Uni,12"

附上微軟中黑體的範例

gnuplot 也有一個指令可以查詢字型的資料夾

 gnuplot> show fontpath
        fontpath is
        system fontpath is "/usr/X11R6/lib/X11/fonts/Type1" "/usr/X11R6/lib/X11/fonts/truetype"

links :
官方 demo 文件,關於線的樣式