2014年5月21日 星期三

expect in apache

試expect in PHP一直失敗,只好回頭試expect in apache。不多說,直接看範例吧。

PHP內容如下,就直接呼叫expect,然後丟變數給他而已。
        $command = "/home/www/OM/cgi-bin/test.exp 139.175.240.1 RIPO \"password\" local \"sh ver\"";
        echo $command."
";
        $out = shell_exec($command);
        print_r($out);
?>

test.exp的內容,簡單講一下。在apache裡不能跑shell,所以要用spawn telnet $ne,讓它執行。
由於已經spawn telnet了,所以後面的telnet 就不用跑。

#!/usr/bin/expect -f
set timeout 300
set ne [lindex $argv 0]
set user [lindex $argv 1]
set pass [lindex $argv 2]
set vrf [lindex $argv 3]
set cmd [lindex $argv 4]
log_file -a session_$ne.log

set timeout 10
spawn telnet $ne
expect "login: "
send -- "$user\r"
expect "password:"
send -- "$pass\r"
expect "#"
send -- "ter len 0\r"
expect "#"
send -- "context $vrf\r"
expect "#"
send -- "$cmd\r"
expect "#"
send -- "exit\r"
send -- "exit\r"

2014年2月6日 星期四

如何在Ubuntu 11.10 上 安裝rsyslog 7.4.9

終於想起為何一定要更新版本了。原因是舊版的無法幫你依來源IP分檔。


更新一下apt source
apt-get update



//apt-get install libestr-dev //版本太舊,要自己手動裝新版的(要0.1.9以上)

wget http://libestr.adiscon.com/files/download/libestr-0.1.9.tar.gz
 tar xvzf libestr-0.1.9.tar.gz
 cd libestr-0.1.9
  ./configure
  make && make install

apt-get install libjson0-dev
apt-get install python-docutils

liblogging找不到有人包好的,所以自己弄。
我們要的是裡面的libstdlog.h和libstdlog.so
wget http://ftp5.gwdg.de/pub/linux/archlinux/community/os/x86_64/liblogging-1.0.0pre-1-x86_64.pkg.tar.xz
tar xvf liblogging-1.0.0pre-1-x86_64.pkg.tar.xz
cd /usr/src/usr/lib/
mv * /usr/lib
cd ../include/
mv * /usr/include/

apt-get install uuid-dev
apt-get install libgcrypt11-dev
apt-get install libmysqld-dev

wget http://www.rsyslog.com/files/download/rsyslog/rsyslog-7.4.9.tar.gz
tar xvzf rsyslog-7.4.9.tar.gz
cd rsyslog-7.4.9
./configure --prefix=/opt/rsyslog --enable-mysql PKG_CONFIG_PATH=/usr/local/lib/pkgconfig/  \
LIBLOGSTD_CFLAGS=/usr/local/include/liblogging LIBLOGSTD_LIBS=/usr/lib/libstdlog.so

make && make install

cd /opt/rsyslog/lib/rsyslog
cp * /lib
cp * /lib64/


cd /usr/sbin/
mv rsyslogd rsyslogd.old
cd /opt/rsyslog/sbin/
mv rsyslogd  /usr/sbin/

service rsyslog stop
service rsyslog start

2014年1月27日 星期一

如何在Fedora 上 安裝rsyslog 7.4.9

舊的rsyslog,對於Cisco ASR的支援很差,因此直接裝上新版。

過程有點麻煩,記錄備查。

先安裝libestr:

 wget http://libestr.adiscon.com/files/download/libestr-0.1.9.tar.gz
 tar xvzf libestr-0.1.9.tar.gz
 cd libestr-0.1.9
  ./configure
  make && make install

再安裝json:
wget https://github.com/json-c/json-c/archive/json-c-0.11-20130402.tar.gz --no-check-certificate
tar xvzf json-c-0.11-20130402
cd json-c-json-c-0.11-20130402
./configure
make && make install

接著安裝docutils:
wget https://pypi.python.org/packages/source/d/docutils/docutils-0.11.tar.gz --no-check-certificate
tar xvzf docutils-0.11.tar.gz
cd docutils-0.11
python setup.py install
ln -s /usr/bin/rst2man.py /usr/bin/rst2man

再來安裝liblogging,我們要的是裡面的libstdlog.h和libstdlog.so
wget http://ftp5.gwdg.de/pub/linux/archlinux/community/os/x86_64/liblogging-1.0.0pre-1-x86_64.pkg.tar.xz
tar xvf liblogging-1.0.0pre-1-x86_64.pkg.tar.xz
cd /usr/src/usr/lib/
mv * /usr/lib
cd ../include/
mv * /usr/include/

再安裝uuid相關套件
yum -y install uuid uuid-devel libuuid libuuid-devel

再補一下libgrcypt套件與發展程式:
yum -y install libgcrypt libgcrypt-devel

最後回到重頭戲:
wget http://www.rsyslog.com/files/download/rsyslog/rsyslog-7.4.9.tar.gz
tar xvzf rsyslog-7.4.9.tar.gz 
cd rsyslog-7.4.9
./configure --prefix=/opt/rsyslog --enable-mysql PKG_CONFIG_PATH=/usr/local/lib/pkgconfig/ LIBLOGSTD_CFLAGS=/usr/local/include/liblogging LIBLOGSTD_LIBS=/usr/lib/libstdlog.so
make && make install

停掉原有的rsyslog,再執行新的就ok了。

理論上 LD_LIBRARY_PATH要把剛剛的libstdlog.so所在的目錄export出去,不然會找不到。

但這樣做的時候service rsyslog restart會找不到so檔。

因此最後的解法是:
cp /opt/rsyslog/lib/rsyslog/libstdlog.so* /lib64/

正規的解釋如下:

Libraries have been installed in:
   /opt/rsyslog/lib/rsyslog

If you ever happen to want to link against installed libraries
in a given directory, LIBDIR, you must either use libtool, and
specify the full pathname of the library, or use the `-LLIBDIR'
flag during linking and do at least one of the following:
   - add LIBDIR to the `LD_LIBRARY_PATH' environment variable
     during execution
   - add LIBDIR to the `LD_RUN_PATH' environment variable
     during linking
   - use the `-Wl,-rpath -Wl,LIBDIR' linker flag
   - have your system administrator add LIBDIR to `/etc/ld.so.conf'

See any operating system documentation about shared libraries for
more information, such as the ld(1) and ld.so(8) manual pages.

參考網頁:http://www.07net01.com/storage_networking/Rsyslog__loganalyzerrizhifuwuqidajian_586293_1379322838.html

2014年1月13日 星期一

rrdtool 出小圖時資料會變動?

有一個新案子。需求大概是這樣。
1、測試某幾個特殊網頁的access time和ping latency
2、測試ftp網站的上傳及下載速度
3、將之輸出為pdf檔。

所以我的作法是
1、用rrdtool來處理儲存及繪圖的部份
2、用fpdf來出pdf檔。將前述的圖及表包起來。

但作完後有一個問題。同一個時間區段的資料,用大圖和小圖竟然會有不同的輸出結果:
例如:
大圖727x233



可以看出,Maximum是115.64,





小圖267x121,Maximum竟然變成了89,

 猜想是因為x軸沒有辦法畫到最右邊的關係。但...取值時是損讀取RRD檔,怎麼會和graph有關?

似乎沒有什麼好解法,使用--full-size-mode 可以暫時排除,並且只保留Y軸的大小。(圖變成了400x80)
但這樣圖會變的很醜...像這樣。我如果出這種圖應該會被打死吧。




所以不得不找其它解,其中一個解法就是先產出大圖,再用imagemagic來把它轉成小圖,但這樣會變的很小很糊...
語法如下: ( 727x205 to )
convert facebook-latency.png -resize 20%  facebook-latency.png





或者圖型會變的很胖,即使把Y軸的說明文字拿掉也一樣難看。
嵌入PDF檔後,更是失敗。
試了一個小時,沒有什麼好辦法。只好從其它方面著手。

就是從pdf的產出程式來動手,最後在輸出image檔時,強制指定尺寸為95*40,順利結案。
看來fpdf縮圖的功力不錯。
 $pdf->Image("$PATH/facebook-latency.png",10,110,95,40,'PNG');

最後貼一下出的pdf檔。其實因為+8的問題也弄了很久。
之後是直接說這個報表是昨天08:00 到今天08:00的就好。
否則如果真的圖檔也要從00:00到00:00,那我就必需直接讀rrd作運算,而不能使用rrdfetch的功能來直接讀檔了。






 


2013年12月21日 星期六

關於黑蘋果的二三事

最近剛弄好黑蘋果不久,趁記憶猶新記一下筆記。(上個月弄好的,我現在已經忘的差不多了...)

1、硬體選擇
這邊只要照 TonyMacX86 這個網頁建議的硬體來搭就可以了。理論上也不需要使用他們建議的主機板,只要晶片組是同一款就好,尤其是機殼,他們建議的都不便宜,如果有預算考量的話,就以自己的需求為準。

2、安裝
直接跳安裝好像太快了?不過事實上就是如此,如果選好適當的硬體的話,其實就是直接進入安裝。不過在此一定要提醒一下,要準備一片可以設定分割區為active的光碟或USB或者像筆者一樣,還有另外一個可以開機的Windows系統。

這邊主要參考這個網頁:http://bbs.pcbeta.com/forum-536-1.html 
簡單介紹兩個方法:
方法一:
1、和原有的Windows共存,先切出兩個分割區。一個放安裝程式,一個之後要用來裝作業   系統(OSX)。
2、再來利用硬盤安裝助手,用這個程式把在pcbeta下載的cdr檔(已經被破解加料過的),塞進這個要放安裝程式的分割區。
3、利用內建的diskpart程式把這個分割區的id設定為AF(這個動作完成後,我忘了是否要重開機,重開機也許比較好,我似乎是沒有重開機)
4、再來是安裝Chameleon這個程式,讓你在開機時,可以選擇要用哪個作業系統開機。
5、重開機,選擇用你剛作好的OSX 安裝碟開機。 
6、開機後,利用OSX的磁碟管理程式將之前預留的分割區作格式化,作成一個分割區就好了,另外格式要記得選擇「Mac OS擴展 (日誌式)」
7、順利的話就會一路安裝下去,接著重開機...然後你就會發現進不了任何作業系統。
8、這個時候不要慌張,拿出你之前準備好的開機碟,開機後把你原先的Windows 分割區設定為Active。
9、 再重新開機一次.這個時候Chameleon應該又會出現了,這一次選擇用你剛裝到一半的OSX來開機,以完成安裝程序。

補充:由於pcbeta的cdr檔應該是有加過料,但我選擇的CPU內逼的顯卡不被支援(HD4600),因此我安裝時一直卡在Bluetooth這裡 (猜想是卡在顯示卡)。
因此後來又改用方法二才安裝完成。

方法二:
獨立安裝OSX在另一個HD (我有兩個HD,一個裝Windows一個裝OSX)

1、在pcbeta找到乾淨的iso檔 (未經加料修改的),以下的操作都是在黑蘋果下完成的。

2、將之mount後(點兩下左鍵),再拖曳入之前安裝的黑蘋果系統的Application目錄中 (補充一下:我之前是利用 http://iatkos.me/ 提供的已破解過的iso檔來安裝黑蘋果,簡單說明一下如何安裝,就是準備一個HD,然後再利用tonymacx86提供的iboot來開機後再讀取iatkos作出的開機光碟來安裝,這個方法也適用於原廠光碟,但是因為原廠光碟沒有破解過,所以如果要用原廠光碟安裝的話,是沒有辦法進行安裝程序的)
3、使用tonymacx86的UniBeast程式來幫這個安裝程式加料
4、將加料後的安裝程式燒錄進USB碟
5、使用這個USB碟完成安裝OSX的動作。

看起來很簡單,其實花了我不少時間...不過我覺得有的時候只是為了一種成就感,時間是要用自己想花的事物上的。

另外...要再提醒一下,如果我寫的東西你有50%以上看不懂,那您還是不要嘗試吧。 基本上有很多細節我並沒有寫在裡面(可能是忘了,可能是後來覺得沒有必要),如果要照做的話,80%應該會失敗。真的要做的話,請多多參考pcbeta的教學。

最後再註記一下
1、新的電腦預設是用GPT來放Windows 7的開機導引。 (我忘了何時開始的了?或者是說,如果你的主機板使用的是UEFI的話,那麼你直接拿一個空的硬碟來裝Windows 7,他就會用GPT作開機導引),但GPT沒有辦法利用欺騙的方式讓你的Windows 7成功註冊,因此在安裝Windows 7時,建議是先自己切好分割區再安裝。當然,如果你用的是正版的,請忽略。
2、Chameleon似乎目前(2013/11)只有支援MBR,如果要用GPT的話,要用Clover,不過小弟已經安裝好了就不再測試了。
3、OSX用起來其實跟Windows 7沒有太大的差異,如果你沒有嘗鮮的需求的話,其實不需要花這麼多時間。我用OSX的時候只有一個問題...開啟bbs時我看起來不太習慣...忘了怎麼解釋了,似乎和等字型間距有關,簡單說就是這種感覺:http://i.imgur.com/NjcaC.jpg


詳細的操作可以參考這裡:http://bbs.pcbeta.com/viewthread-592288-1-1.html
(似乎有更新的網頁,但我現在一時找不到)

另外再補充一下,如果有需要將dmg檔倒回USB的需求時,可以找一個軟體:
transmac 它有提供十天試用期,可以應付燃眉之急。

2013年5月29日 星期三

zen cart + Paypal + payment fee

這兩天都在幫朋友搞這個。
簡單作一下記錄。

首先當然是安裝 paypal 模組。(原先zen cart就有附。記得安裝及設定)
(zen cart請升版到1.3.9h以上比較好處理)
接著進行相關設定。
如果要使用website payments standard的話,記得設定PAT (在paypal網頁的profile裡)
但是paypal 建議使用express checkout ,這樣就要申請API
會取得username、password和signature。然後也要記得設定IPN (也是在paypal網頁的profile裡,中文翻譯的很不直覺。建議把profile改為英文,會比較好找)
在此是建議把PAT、API和IPN一次申請好。一次搞定可以省很多時間。

這邊有一個關鍵 。如果使用express checkout的話。zen cart幣值的部份要設定 和paypal模組相同。不然在連至paypal時,會有10401的錯誤代碼。
對了,預設幣值的部份記得新增一個TWD,千位數用逗號作區隔。

接著是payment fee的部份,這個指的是paypal會跟賣家收取5%的手續費。
要上網自己找別人寫好的模組來上傳及安裝。

這邊測試時有點亂。有一些版本若加入運費計算就會報10041。換了其它版本就正常了。
另一個關鍵是 裡面的比對字串,不是使用paypal而是paypalwpp。這個是重點中的重點啊。







2013年5月21日 星期二

Linux 開啟snmpd 查詢disk容量功能

1、要先編輯/etc/snmp/snmpd.conf

找到這一段:
# Make at least  snmpwalk -v 1 localhost -c public system fast again.
#       name           incl/excl     subtree         mask(optional)
view    systemview    included   .1.3.6.1.2.1.1
view    systemview    included   .1.3.6.1.2.1.25.1.1
要新增這一行
view    systemview    included   .1.3.6.1.4.1.2021.9

2、設定要監控的磁碟:
disk / 25000000
設定 / 的容量是25G (原HD是30G,我刻意開小一點來讓它提早告警)

3、
這樣用snmpwalk才能爬:
snmpwalk -c public -v 2c 192.168.1.1 .1.3.6.1.4.1.2021.9

UCD-SNMP-MIB::dskIndex.1 = INTEGER: 1
UCD-SNMP-MIB::dskPath.1 = STRING: /
UCD-SNMP-MIB::dskDevice.1 = STRING: /dev/mapper/VolGroup00-LogVol06
UCD-SNMP-MIB::dskMinimum.1 = INTEGER: 25000000
UCD-SNMP-MIB::dskMinPercent.1 = INTEGER: -1
UCD-SNMP-MIB::dskTotal.1 = INTEGER: 28662772
UCD-SNMP-MIB::dskAvail.1 = INTEGER: 23360688
UCD-SNMP-MIB::dskUsed.1 = INTEGER: 3822612
UCD-SNMP-MIB::dskPercent.1 = INTEGER: 14
UCD-SNMP-MIB::dskPercentNode.1 = INTEGER: 0
UCD-SNMP-MIB::dskErrorFlag.1 = INTEGER: error(1)
UCD-SNMP-MIB::dskErrorMsg.1 = STRING: /: less than 25000000 free (= 23360688)

3、你可以直接抓UCD-SNMP-MIB::dskAvail.1 來算,若小於某容量就發告警。
或者直接用dskErrorMsg設定容量下限來做調整。
我此例中設定的是25G,小於25G就會出告警。
當然是比較不好的例子,讀者可以自行調整。

另外補一下。(在RHES下測試正常。)
ls -l | grep ^d | awk '{print $9}' | xargs du -s -m | sort -nf
可以查看現行folder下folder的容量。