2013年2月23日 星期六

自己架 firefox website 碰到的小問題

之前老歐跟我說 http://moztw.org/ 網站專案已經丟到github上,可以架來玩玩(網址在這)。首先找個你要擺網站的地方,再用git抓下來即可([git] github的使用方式 for windows
bency@jccf:www 02:07:51 $ git clone https://github.com/moztw/central.git
Cloning into 'central'...
remote: Counting objects: 28252, done.
remote: Compressing objects: 100% (11586/11586), done.
remote: Total 28252 (delta 15531), reused 28252 (delta 15531)
Receiving objects: 100% (28252/28252), 248.23 MiB | 760 KiB/s, done.
Resolving deltas: 100% (15531/15531), done.
bency@jccf:www 02:13:57 $ 
因為是virtual host的關係,所以也要建立相關的設定檔,就叫做firefox吧(/etc/apache22/site-available/firefox)
<VirtualHost *:80>
    ServerAdmin bency80097@gmail.com
    DocumentRoot    "/var/www/central/htdocs"
    <Directory "/var/www/central/htdocs">
        Options FollowSymLinks
        AllowOverride ALL
        Order allow,deny
        Allow from All
    </Directory>
    ServerName  firefox.bency.org
    Errorlog    "/var/log/apache2/firefox-error.log"
    CustomLog   "/var/log/apache2/firefox-access.log" common
</VirtualHost>
這是我一開始的設定檔,如果有先看過.htaccess,還是看不出來這設定檔哪裡有問題的話,那我們等級應該是差不多的,一重開apache馬上就碰到500老師叫你聯絡網站管理員,但你就是那位管理員阿!這時看error log會告訴你
/var/www/central/htdocs/.htaccess: Option MultiViews not allowed here
明明就AllowOverride已經設定是ALL啦,應該每個設定都可以在.htaccess裡面設定吧?但並不包含Option裡面的 MultiViews,所以需要另外指定,也只有這個沒包含在ALL裡面,這也是一件很奇怪的事,加上之後再重啟apache,你會發現伍佰老師還是沒走,這時error log告訴我們另一件事
/var/www/central/htdocs/.htaccess: AddType not allowed here
原來AddTypeFileInfo在處理,所以在AllowOverride後面加上FileInfo,然後再重啟apache,然後再碰到伍佰,這次是另一個錯誤
/var/www/central/htdocs/.htaccess: DirectoryIndex not allowed here
太棒了,再加上Indexes吧,既然是專案要的,那就給他吧,其實從解決MultiViews之後,只要加上ALL就可以避免掉後面AddTypeDirectoryIndex這兩個錯誤,不過為了安全,還是不要開啟網站不需要的功能比較好。

不過阿,雖然沒錯誤了,但網頁版面看起來怎麼怪怪的,好像中風一樣,看起來歪歪怪怪的,跟原版不一樣,原來是因為有使用了SSI的關係,SSI拆括號之後會變成Server-Side Inclues,是一個可以讓html可以讀外部html檔的功能,換句話說就像模版一樣,可以把網頁分成不同檔案,再由某個檔案include進來,因為apache預設沒開啟的關係,所以碰到以這方式架設的網站會出包子,如果連首頁都無法顯示,反而是直接顯示檔案列表的話,那在.httaccess或是你知道可以讓apache讀到的設定檔裡面,加上這個mime type:
AddType text/html .shtml
這樣就會把首頁index.shtml當做html來解讀,當然也可以在DirectoryIndex 後面加上 .shtml
DirectoryIndex index.html index.cgi index.pl index.php index.xhtml index.htm
這也是另一個解法,只是這樣就變成全站通用的設定,看自己定奪囉。 那現在來解決排版不對的問題,其實可以比較一下瀏覽器上看到的原始碼,可以發現結構差很多,有很多結構都不見了,應該說,是沒有被讀進來,很明顯就是SSI出了包子,要開啟SSI需要mod_include.so這個模組,請依照自己用的distro讓apache能啟用這個模組(不知道有沒有開啟的話,可以用phpinfo()來看,用appserv的話,預設是有phpinfo.php可以看,用瀏覽器打開就會列出了),然而啟用這模組之後還是沒解決問題,這時只要在.htaccess的Option加上+Includes就可以了
Options +MultiViews +Includes
這樣就可以搞定了,這次是真的完成了,版面完整,且功能也都正常,以下是我改完可以用的兩個設定檔,供大家參考
virtual host
<VirtualHost *:80>
    ServerAdmin bency80097@gmail.com
    DocumentRoot    "/var/www/central/htdocs"
    <Directory "/var/www/central/htdocs">
        Options FollowSymLinks
        AllowOverride FileInfo Indexes Options=All,MultiViews
        Order allow,deny
        Allow from All
    </Directory>
    ServerName  firefox.bency.org
    Errorlog    "/var/log/apache2/firefox-error.log"
    CustomLog   "/var/log/apache2/firefox-access.log" common
</VirtualHost>
.htaccess
Options +MultiViews +Includes
AddType video/ogg .ogv
AddType video/mp4 .mp4
AddType video/webm .webm
AddType text/rdf+n3 .n3  #It's timbl's fault that this is not yet standardized
AddType text/html .shtml

DirectoryIndex index Overview
參考來源:
http://mathiasbynens.be/notes/apache-allowoverride-all
http://ircarchive.info/apache/2007/3/9/34.html
http://mail-archives.apache.org/mod_mbox/httpd-users/200204.mbox/%3C3CB6A294.974F601@bourse.ch%3E

sudo 慢到靠北邊走

剛剛為了做壞事架新子站,在重啟apache的時候發現一件很奇怪的事情,就是我在下sudo的時候會像當機一樣卡在那不動,我用screen另外開htop來看,發現他老兄就卡在那,並沒有執行我sudo後面的指令,這實在很令人困擾,尤其很多設定都需要sudo來搞阿!

2013年1月27日 星期日

ld: library not found for -lxxxxxx

這是gcc linker找不到可用的lib出現的錯誤訊息,只要找到該lib在你主機上的位置(前提是你已經有正確安裝完成),把位置丟進LIBRARY_PATH就可以了,不過通常還要加上C_INCLUDE_PATH
export LIBRARY_PATH=/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.7.sdk/usr/X11/lib
export C_INCLUDE_PATH=/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.7.sdk/usr/X11/include
比如說我現在在mac上要裝ns2,在編譯tk8.5的時候需要X11,X11的東西都放在
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.7.sdk/usr/X11/lib
這個又臭又長的地方,也是可以建立軟連結到 /usr/lib 裡面去,就省去這篇說的使用ldconfig的方式加入新的library位置

linux 套件安裝準則


 作者  Bency (阿邊班西)                                         看板  P_bency
 標題  [記錄] 準則
 時間  Thu Aug 12 02:13:32 2010

☆來源:國父 home.d22.cc

準則:

軟體安裝一律使用 apt,不得用 dpkg -i 獨立安裝 deb,更不得用make install安裝。

Debian 官方 apt 沒有的套件,照以下的優先順序尋找套件安裝。

Win7 上分享無線網路


 作者  Bency (http://班西.tw)                                   看板  P_bency
 標題  [記錄] Win7 上分享無線網路
 時間  Sat Nov  6 17:52:31 2010

以管理員身分打開命令提示字元(Ctrl + Shift + Enter)

輸入 netsh wlan set hostednetwork mode=allow ssid=P_bency key=bency

出現成功訊息後

再輸入 netsh wlan start hostednetwork

然後再到區域連線那共用即可

參考來源 http://www.techbang.com.tw/posts/2080

linux LD_LIBRARY_PATH 新增系統讀lib的位置

在linux上使用者自己編譯套件時可能會需要系統外的套件,常常會碰到明明已經成功安裝了某支library但系統卻找不到,原因是安裝的路徑不在系統預設的路徑上,如果你只是站上的使用者,那只要在環境變數LD_LIBRARY_PATH上加上你新增的路徑即可,用法如下
$ export LD_LIBRARY_PATH=LD_LIBRARY_PATH:/path/to/lib
不過如果你是管理者,需要幫站上安裝新工具,這時強迫大家改自家設定檔就不太OK了,新增系統預設搜尋lib的位置方法如下

2013年1月15日 星期二

把多個單欄的檔案合併輸出成多欄的單一檔案

其實這標題我也不知道要怎麼寫才比較好,意思是把很多個內容只有一個欄位資料的檔案,以欄位為區隔合併成一個多欄的檔案,這是我在分析資料需要畫出比較圖的時候用到的,假設現在兩個檔案內容如下

a.dat:
a1
a2
a3
a4
a5
b.dat
b1
b2
b3
b4
b5
這時我們想把這兩個檔案合在一起,且是以兩個欄位的方式存檔,可以用以下指令完成
$ pr -mt a.dat b.dat
a1 b1
a2 b2
a3 b3
a4 b4
a5 b5
對於需要把數據統整成單一檔案還蠻方便的。 參考來源

補充:
$ join <(nl a.dat) <(nl b.dat) | cut -f2,3 -d ' '
這樣也可以達到一樣的效果(由顏孜羲提供)