優化Debian/Ubuntu下的ruby

我們都知道Debian/Ubuntu通過apt-get安裝的ruby包很慢(參考:各種Ruby實現的性能評測修正版本

 

通常我們都是通過自己從www.ruby-lang.org上下載源碼並編譯安裝ruby來繞過這個問題,並且自己編譯還可以打上各種補丁,比如這個(解決ruby 內存泄漏的超級大補丁發佈啦

 

但是自己編譯的ruby不能被dpkg -l識別,debian/ubuntu系統中有些包是依賴於ruby包的,安裝這些軟件包會要求安裝ruby包,這樣系統中就有兩個(或者更多)ruby。雖然這在大部分情況下都不是問題,但是有些腳本在開頭不是使用env來獲得ruby而是hardcode #/usr/bin/ruby,這個時候就有問題了。

 

debian/ubuntu apt-get得到的ruby(v1.8.7.72) 之所以會有性能問題(慢50%),是因爲倉庫中的是debug版本,而且編譯目標是i486平臺,拖累了性能,我們可以通過去掉調試標誌,指定到i686平臺,重新編譯deb包來解決這個問題。

 

1)  準備編譯依賴包:

    sudo apt-get build-dep ruby1.8

 

2)  取得deb包源碼:

   mkdir -p ~/build && cd ~/build

   apt-get source ruby1.8

 

3) 修改編譯參數:

    cd ~/build/ruby1.8-1.8.7.72/debian

    修改rule文件,去掉CFLAGS中的"-g ", 並在頭部加上:

 

export DEB_BUILD_GNU_TYPE=i686-linux-gnu
export DEB_BUILD_GNU_CPU=i686
export DEB_HOST_GNU_CPU=i686
export DEB_HOST_GNU_TYPE=i686-linux-gnu
 

 

4) 編譯:

    cd ~/build/ruby1.8-1.8.7.72 && debuild -uc -us

 

5) 安裝:

    cd ~/build && sudo dpkg -i *.deb

 

 

如果要打其他補丁(如MBARI補丁),可以在步驟3和4之間進行。

 

這樣,系統中就只有一份本地編譯優化過的ruby,所有使用到ruby的包都將受益。

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章