2014/01/21

postfix如果要利用header_checks來check中文是會有問題的
必須先把中文進行編碼
網址如下
http://www.mytju.com/classCode/tools/base64.asp
要分utf8或big5

編出來之後再加入header_checks
/^Subject:.*5biQ5oi3/ DISCARD
/^Subject:.*pc6k4Q==/ DISCARD

postfix要重啟

2014/01/16

Gluster 系統服務
啟動Gluster服務:
指令:
service glusterfs-server start

停止Gluster服務:
指令:
service glusterfs-server stop

檢視Gluster服務:
指令:
service glusterfs-server status

Gluster 節點指令
檢視Gluster 節點狀態:
指令:
gluster peer status

新增Gluster 節點:
指令:
gluster peer probe <HOSTNAME>
說明:
HOSTNAME為您要新增該節點的主機名稱

刪除Gluster 節點:
指令:
gluster peer detach <HOSTNAME>
說明:
HOSTNAME為您要刪除該節點的主機名稱

Gluster 卷冊指令
檢視Gluster 卷冊狀態:
指令:
gluster volume info

新增分散式卷冊(Distributed Volumes):
指令:
gluster volume create <NEWVOLUMENAME> [transport [tcp | rdma | tcp,rdma]] <NEWBRICK1> <NEWBRICK2>...
說明:
1.NEWVOLUMENAME為您要新增的卷冊名稱
2.transport為傳輸模式,預設不輸入該指令參數是使用tcp模式
3.NEWBRICK為您要新增至卷冊之節點儲存區塊

新增複製式卷冊(Replicated Volumes):
指令:
gluster volume create <NEWVOLUMENAME> [replica COUNT] [transport [tcp |rdma | tcp,rdma]]<NEWBRICK1> <NEWBRICK2>...
說明:
1.NEWVOLUMENAME為您要新增的卷冊名稱
2.replica COUNT為副本的數量
3.transport為傳輸模式,預設不輸入該指令參數是使用tcp模式
4.NEWBRICK為您要新增至卷冊之節點儲存區塊

新增帶狀式卷冊(Striped Volumes):
指令:
gluster volume create <NEWVOLUMENAME> [stripe COUNT] [transport [tcp | rdma | tcp,rdma]]<NEWBRICK1> <NEWBRICK2>...
說明:
1.NEWVOLUMENAME為您要新增的卷冊名稱
2.stripe COUNT為帶狀的數量
3.transport為傳輸模式,預設不輸入該指令參數是使用tcp模式
4.NEWBRICK為您要新增至卷冊之節點儲存區塊

新增分散複製式卷冊(Distributed Replicated Volumes):
指令:
gluster volume create <NEWVOLUMENAME> [replica COUNT] [transport [tcp | rdma | tcp,rdma]]<NEWBRICK1> <NEWBRICK2>...
說明:
1.NEWVOLUMENAME為您要新增的卷冊名稱
2.replica COUNT為副本的數量
3.transport為傳輸模式,預設不輸入該指令參數是使用tcp模式
4.NEWBRICK為您要新增至卷冊之節點儲存區塊

增加儲存區塊(Brick)至現有卷冊中:
指令:
gluster volume add-brick <VOLUMENAME> <NEWBRICK>
說明:
1.VOLUMENAME為您要加入儲存區塊的卷冊名稱
2.NEWBRICK為您要新增至卷冊之節點儲存區塊

移除儲存區塊(Brick)於現有卷冊中:
指令:
gluster volume remove-brick <VOLUMENAME> <BRICK> start
說明:
1.VOLUMENAME為您要移除儲存區塊的卷冊名稱
2.BRICK為您要移除儲存區塊名稱

檢視移除儲存區塊(Brick)狀態:
指令:
gluster volume remove-brick VOLUMENAME BRICK status
說明:
1.VOLUMENAME為您所移除儲存區塊的卷冊名稱
2.BRICK為您要移除儲存區塊名稱

提交移除儲存區塊(Brick)狀態:
指令:
gluster volume remove-brick VOLNAME BRICK commit
說明:
1.VOLUMENAME為您所移除儲存區塊的卷冊名稱
2.BRICK為您要移除儲存區塊名稱

啟用卷冊:
指令:
gluster volume start <VOLUMENAME>
說明:
VOLUMENAME為要啟用的卷冊名稱

停用卷冊:
指令:
gluster volume stop <VOLUMENAME>
說明:
VOLUMENAME為要停用的卷冊名稱

刪除卷冊:
指令:
gluster volume delete <VOLUMENAME>
說明:
1.VOLUMENAME為要刪除的卷冊名稱
2.要刪除卷冊之前必須要先停用卷冊

掛載卷冊
手動掛載卷冊:
指令:
mount.glusterfs HOSTNAME-OR-IPADDRESS:/VOLUMENAME MOUNTDIR
說明:
1.HOSTNAME-OR-IPADDRESS為您所要掛載的主機名稱或IP及掛載的卷冊名稱
2.MOUNTDIR為您所要掛載的目的地路徑
參考資料:http://www.gluster.org

http://ithelp.ithome.com.tw/question/10107251

2014/01/07

python 從2.4開始建議使用
subprocess來取代

os.system
os.spawn*
os.popen*
popen2.*
commands.*

除了 subprocess.call() 之外,另外還有 check_call() 跟 check_output()。

除了 check_output 會回傳 output 之外,用法相同跟 call() 一樣。只不過會自動檢查 return code,如果是非零值的話,就會直接丟出 CalledProcessError,這個時候 return code 還是可以透過 returncode 這個 attribute 來取回。例如:(但是要執行的程式不存在時,還是會丟出 OSError)

如果要捉取回傳的值來進行某些判斷的話
就要使用subprocess.check_output()
範例如下

import subprocess

a = subprocess.check_output("dir", shell=True)
print a

b = a.find('zz')
print b


http://docs.python.org/2/library/subprocess.html
http://imsardine.wordpress.com/tech/shell-scripting-in-python/

2014/01/05

import telnetlib

f = open("switch")
lines = f.read().splitlines()
#print lines
command_arr = ["123456","en","123456","terminal length 0","sh mac add","exit"]
#print command_arr

for HOST in lines:
#print HOST
tn = telnetlib.Telnet(HOST)
for command in command_arr :
        tn.write(command + "\n")
#print tn.read_all()
content = tn.read_all()
print content
chk = content.find("1122.3344.5566") #找出這個mac是否在這台switch上 在那一個port上
print chk
tn.close()

python 讀檔

f = open("1")
lines = f.read().splitlines()
 #如果不用spllitlines則會把分行符號\n一起放到list去

print lines
#列出lines這個list的所有示素

for i in lines:
print i
#分行列出list裡的所有元素

結果如下
['afdkfj', 'fsldfjk', 'fjslfk', 'fsdlkfj', 'fsldfj']
afdkfj
fsldfjk
fjslfk
fsdlkfj
fsldfj

2014/01/04

使用python的 telnetlib對網路設備進行一些自動化的操作
範例如下


import telnetlib

HOST = "1.1.1.1"

tn = telnetlib.Telnet(HOST)

tn.read_until("Password: ")
tn.write("12345\n")
tn.read_until("cc>")
tn.write("en\n")
tn.read_until("Password: ")
tn.write("12345\n")

tn.write("sh flash\n")
tn.write("exit\n")
print tn.read_all()

http://blog.johnsonlu.org/category/programe/pythin/
http://docs.python.org/2/library/telnetlib.html

2014/01/01

最近碰到一個很奇怪的問題
使用了一段時間的aruba ap
突然發生無法使用的情況
查了一下brocade icx 6450的log發現是ap向switch要更多的電
原本是使用802.3 af的 15400ma
但switch無法提供更多
因此視為異常而把port disable了
但該ap並不是新裝而是已經使用一段時間了
搞不清楚到底是ap還是switch 的問題
因為有二顆出現這個情況
所以先送修一個回aruba原廠
同時詢問brocade原廠
大約隔了二週
 brocade給了一個針對poe module的patch
上上去之後
目前看起來是正常
更新指令如下

 inline power install-firmware [stack-unit |unit-number] tftp ip-address filename

必須先用show run看poe是在那一個unit
今天稍微玩了一下lxc

如果只用linux是可以考慮的選擇
但支援的linux也不多
目前支援的如下圖

有web介面可以管理
如下連結
http://lxc-webpanel.github.io/index.html

web介面安裝指令
wget http://lxc-webpanel.github.io/tools/install.sh -O - | bash

但要進入guest的console還是要下指令

相關指令如下
lxc-create  -n  虛擬機器名稱  -t  ubuntu

lxc-console -n 虛擬機器名稱

sudo lxc-shutdown  -n 虛擬機器名稱

如果不熟linux的應該會不太適應

不過效能上應該是比較好的
測試的環境是先在virtualbox上裝ubuntu
之後才在ubuntu上裝lxc
guest中的guest
沒有什麼lag

http://www.arthurtoday.com/2012/10/ubuntu-create-and-setting-lxc-containers.html#.UsOuPtIW2So