<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-18689056</id><updated>2012-02-09T14:58:56.948+08:00</updated><category term='ruby'/><category term='javascript'/><category term='lun'/><category term='web'/><category term='fedora'/><category term='curl'/><category term='hadoop'/><category term='grid'/><category term='redhat'/><category term='yum'/><category term='css'/><category term='git'/><category term='rack'/><category term='python'/><category term='globus'/><category term='wsgi'/><category term='rails'/><category term='nodejs'/><category term='freebsd'/><category term='nfs'/><category term='kvm'/><category term='wget'/><category term='GNOME.Asia'/><category term='database'/><category term='linux'/><category term='apache'/><category term='indefero'/><category term='xml'/><category term='system'/><category term='mysql'/><category term='java'/><category term='sass'/><category term='php'/><category term='programming'/><category term='coscup2010'/><category term='ssh'/><category term='rvm'/><category term='django'/><category term='puppet'/><category term='mpich'/><category term='cgi'/><category term='scss'/><category term='dns'/><category term='autofs'/><category term='log'/><category term='microsoft'/><category term='dhcp'/><category term='network'/><category term='redmine'/><category term='ubuntu'/><category term='coffeescript'/><category term='ftp'/><category term='svn'/><category term='google'/><title type='text'>張旭</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://zx-1986.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18689056/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://zx-1986.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>張旭</name><uri>https://profiles.google.com/105134833883146274095</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-pO0m_C6_zQw/AAAAAAAAAAI/AAAAAAAAD0c/h7KNyAUN14w/s512-c/photo.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>82</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-18689056.post-9177344452766032595</id><published>2012-02-09T12:34:00.002+08:00</published><updated>2012-02-09T14:58:56.955+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='javascript'/><title type='text'>呼叫自定義的 Javascript 函式</title><content type='html'>&lt;del&gt;最近碰到一個有趣的事情，不過說不定其實只是很基礎的問題。&lt;/del&gt;&lt;br /&gt;（我基礎沒打好，所以說不定這問題根本不是問題 ...）&lt;br /&gt;&lt;br /&gt;果然是很基礎的問題：&lt;br /&gt;Javascript 的 eval 行為與 function pointer&lt;br /&gt;&lt;br /&gt;在 http://html5boilerplate.com 的環境下，我寫了這段 javascript 在 script.js 檔：&lt;br /&gt;Test 1&lt;br /&gt;&lt;pre class="brush:javascript"&gt;(function($){&lt;br /&gt;$(document).ready(function(){&lt;br /&gt;&lt;br /&gt;  function sayHi()&lt;br /&gt;  {&lt;br /&gt;    console.log('hello');&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  $(function()&lt;br /&gt;  {&lt;br /&gt;    setInterval( "sayHi()", 2000 );&lt;br /&gt;  });&lt;br /&gt;&lt;br /&gt;}); // end of $(document).ready&lt;br /&gt;}(jQuery)); // end of all&lt;br /&gt;&lt;/pre&gt;在執行的時候，Firefox 說：sayHi is not defined&lt;br /&gt;&lt;br /&gt;Test 2&lt;br /&gt;&lt;pre class="brush:javascript"&gt;(function($){&lt;br /&gt;$(document).ready(function(){&lt;br /&gt;&lt;br /&gt;  $(function(){&lt;br /&gt;&lt;br /&gt;    function sayHi()&lt;br /&gt;    {&lt;br /&gt;      console.log('hello');&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    setInterval( "sayHi()", 2000 );&lt;br /&gt;  });&lt;br /&gt;&lt;br /&gt;}); // end of $(document).ready&lt;br /&gt;}(jQuery)); // end of all&lt;br /&gt;&lt;/pre&gt;一樣是 sayHi is not defined.&lt;br /&gt;&lt;br /&gt;因為 sayHi() 是在：&lt;br /&gt;(function($){ 底下的 ...&lt;br /&gt;$(document).ready(function(){ 底下的 ...&lt;br /&gt;$(function(){ 底下的 scope 內，&lt;br /&gt;而使用雙引號 "sayHi()" 呼叫時，Javascript 會尋找全域環境下的 sayHi()，當然找不到。&lt;br /&gt;&lt;br /&gt;Test 3&lt;br /&gt;&lt;pre class="brush:javascript"&gt;(function($){&lt;br /&gt;$(document).ready(function(){&lt;br /&gt;&lt;br /&gt;  $(function(){&lt;br /&gt;&lt;br /&gt;    function sayHi()&lt;br /&gt;    {&lt;br /&gt;      console.log('hello');&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    setInterval( sayHi(), 2000 );&lt;br /&gt;  });&lt;br /&gt;&lt;br /&gt;}); // end of $(document).ready&lt;br /&gt;}(jQuery)); // end of all&lt;br /&gt;&lt;/pre&gt;可以執行，但是只執行一次。&lt;br /&gt;&lt;br /&gt;因為呼叫時加了 () 等於是執行這個 function，而不是 refer 到這個 function 而不執行。&lt;br /&gt;function 在 Javascript 是類似 object（打類比成 Linux 把所有東西看成檔案一樣）。&lt;br /&gt;&lt;br /&gt;Test 4&lt;br /&gt;&lt;pre class="brush:javascript"&gt;(function($){&lt;br /&gt;$(document).ready(function(){&lt;br /&gt;&lt;br /&gt;  $(function(){&lt;br /&gt;&lt;br /&gt;    function sayHi()&lt;br /&gt;    {&lt;br /&gt;      console.log('hello');&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    setInterval( sayHi, 2000 );&lt;br /&gt;  });&lt;br /&gt;&lt;br /&gt;}); // end of $(document).ready&lt;br /&gt;}(jQuery)); // end of all&lt;br /&gt;&lt;/pre&gt;it works.&lt;br /&gt;&lt;br /&gt;sayHi function 的 scope 在：&lt;br /&gt;(function($){ 底下的 ...&lt;br /&gt;$(document).ready(function(){ 底下的 ...&lt;br /&gt;$(function(){ 底下。&lt;br /&gt;&lt;br /&gt;setInterval 內的 sayHi refer 到同一層的 sayHi function（object？）&lt;br /&gt;&lt;br /&gt;Test 5&lt;br /&gt;&lt;pre class="brush:javascript"&gt;(function($){&lt;br /&gt;$(document).ready(function(){&lt;br /&gt;&lt;br /&gt;  $(function()&lt;br /&gt;  {&lt;br /&gt;    setInterval( function(){ console.log('hello'); }, 2000 );&lt;br /&gt;  });&lt;br /&gt;&lt;br /&gt;}); // end of $(document).ready&lt;br /&gt;}(jQuery)); // end of all&lt;br /&gt;&lt;/pre&gt;it works.&lt;br /&gt;直接綁定一個匿名函式，沒有問題。&lt;br /&gt;&lt;br /&gt;Test 6&lt;br /&gt;&lt;pre class="brush:javascript"&gt;(function($){&lt;br /&gt;$(document).ready(function(){&lt;br /&gt;&lt;br /&gt;  function sayHi()&lt;br /&gt;  {&lt;br /&gt;    console.log('hello');&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  $(function()&lt;br /&gt;  {&lt;br /&gt;    setInterval( sayHi, 2000 );&lt;br /&gt;  });&lt;br /&gt;&lt;br /&gt;}); // end of $(document).ready&lt;br /&gt;}(jQuery)); // end of all&lt;br /&gt;&lt;/pre&gt;it works!?&lt;br /&gt;&lt;br /&gt;Test 7&lt;br /&gt;&lt;pre class="brush:javascript"&gt;function sayHi()&lt;br /&gt;{&lt;br /&gt;  console.log('hello');&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;$(function()&lt;br /&gt;{&lt;br /&gt;  setInterval( "sayHi()", 2000 );&lt;br /&gt;});&lt;br /&gt;&lt;/pre&gt;it works.&lt;br /&gt;&lt;br /&gt;(function($){ 與 $(document).ready(function(){ 都要拿掉，留下任何一個也不行。&lt;br /&gt;如此一來，宣告的 sayHi function 才是在全域範圍下，"sayHi()" 才 refer 得到。&lt;br /&gt;&lt;br /&gt;最後，如果要宣告一個全域的 Javascript function，&lt;br /&gt;或是說“假裝”成 Class 那樣用（Javascript 是 classless 的！），&lt;br /&gt;可以這樣做：&lt;br /&gt;&lt;pre class="brush:javascript"&gt;var ClassName = window.ClassName = function()&lt;br /&gt;{&lt;br /&gt;    // your code&lt;br /&gt;};&lt;br /&gt;    &lt;br /&gt;ClassName.prototype.method_of_class = function()&lt;br /&gt;{&lt;br /&gt;    // your code&lt;br /&gt;};&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;a href="http://stackoverflow.com/questions/2326072/javascript-function-pointer-assignment"&gt;function pointer&lt;/a&gt;&lt;br /&gt;&lt;a href="https://developer.mozilla.org/en/JavaScript/Reference/Functions_and_function_scope"&gt;function scope&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Reference：&lt;br /&gt;http://stackoverflow.com/questions/1191833/how-to-run-a-function-in-jquery&lt;br /&gt;http://jquery-howto.blogspot.com/2008/12/what-heck-is-function-jquery.html&lt;br /&gt;http://jibbering.com/faq/notes/closures/&lt;br /&gt;http://www.javascriptkit.com/javatutors/closures.shtml&lt;br /&gt;http://www.robertsosinski.com/2009/04/28/binding-scope-in-javascript/&lt;br /&gt;http://audi.tw/Blog/JavaScript/javascript.eval.asp&lt;br /&gt;http://24ways.org/2005/dont-be-eval&lt;br /&gt;http://docs.jquery.com/How_jQuery_Works&lt;br /&gt;http://jquery-howto.blogspot.com/2008/12/what-heck-is-function-jquery.html&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18689056-9177344452766032595?l=zx-1986.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://zx-1986.blogspot.com/feeds/9177344452766032595/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://zx-1986.blogspot.com/2012/02/function-call-of-javascript.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18689056/posts/default/9177344452766032595'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18689056/posts/default/9177344452766032595'/><link rel='alternate' type='text/html' href='http://zx-1986.blogspot.com/2012/02/function-call-of-javascript.html' title='呼叫自定義的 Javascript 函式'/><author><name>張旭</name><uri>https://profiles.google.com/105134833883146274095</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-pO0m_C6_zQw/AAAAAAAAAAI/AAAAAAAAD0c/h7KNyAUN14w/s512-c/photo.jpg'/></author><thr:total>0</thr:total><georss:featurename>114台灣台北市內湖區文湖街21巷110號</georss:featurename><georss:point>25.091075 121.5598345</georss:point><georss:box>24.976033 121.401906 25.206117 121.71776299999999</georss:box></entry><entry><id>tag:blogger.com,1999:blog-18689056.post-2556907653450526595</id><published>2011-12-21T13:55:00.000+08:00</published><updated>2011-12-21T13:55:17.858+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ruby'/><category scheme='http://www.blogger.com/atom/ns#' term='rails'/><category scheme='http://www.blogger.com/atom/ns#' term='rvm'/><title type='text'>RVM - Ruby Version Manager</title><content type='html'>［安裝 rvm］&lt;br /&gt;&lt;pre class="brush:bash"&gt;sudo apt-get install git&lt;br /&gt;sudo bash &lt; &lt;(curl -s https://raw.github.com/wayneeseguin/rvm/master/binscripts/rvm-installer )&lt;br /&gt;source ~/.bashrc&lt;br /&gt;&lt;/pre&gt;［安裝 Ruby］&lt;pre class="brush:bash"&gt;rvm install 1.9.2&lt;br /&gt;rvm install 1.9.3&lt;br /&gt;rvm --default use 1.9.3&lt;br /&gt;ruby --version&lt;br /&gt;which ruby&lt;br /&gt;which gem&lt;br /&gt;&lt;br /&gt;rvm help&lt;br /&gt;rvm list&lt;br /&gt;rvm list known&lt;br /&gt;rvm gemdir&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;MRI：Matz's Ruby Interpreter（Matz 的 Ruby 直譯器）&lt;br /&gt;p.s. Matz 是發明 Ruby 語言的日本程式設計師 Yukihiro Matsumoto 的昵稱。&lt;br /&gt;&lt;br /&gt;Reference：&lt;br /&gt;http://beginrescueend.com&lt;br /&gt;http://beginrescueend.com/rvm/install&lt;br /&gt;http://beginrescueend.com/rvm/basics&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18689056-2556907653450526595?l=zx-1986.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://zx-1986.blogspot.com/feeds/2556907653450526595/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://zx-1986.blogspot.com/2011/10/rvm.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18689056/posts/default/2556907653450526595'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18689056/posts/default/2556907653450526595'/><link rel='alternate' type='text/html' href='http://zx-1986.blogspot.com/2011/10/rvm.html' title='RVM - Ruby Version Manager'/><author><name>張旭</name><uri>https://profiles.google.com/105134833883146274095</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-pO0m_C6_zQw/AAAAAAAAAAI/AAAAAAAAD0c/h7KNyAUN14w/s512-c/photo.jpg'/></author><thr:total>0</thr:total><georss:featurename>Taipei City, Taiwan</georss:featurename><georss:point>25.091075 121.5598345</georss:point><georss:box>24.976033 121.401906 25.206117 121.71776299999999</georss:box></entry><entry><id>tag:blogger.com,1999:blog-18689056.post-4949225022764446626</id><published>2011-12-21T13:54:00.000+08:00</published><updated>2011-12-21T13:54:04.900+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='puppet'/><category scheme='http://www.blogger.com/atom/ns#' term='system'/><category scheme='http://www.blogger.com/atom/ns#' term='ubuntu'/><title type='text'>Puppet</title><content type='html'>http://puppetlabs.com/&lt;br /&gt;&lt;br /&gt;Puppet 是一個 Client/Server 式的［配置|設定|服務］管理工具，它是用 Ruby 寫的。&lt;br /&gt;&lt;br /&gt;簡單講，所有（Linux）機器的配置集中管理在 Puppet Server 上，&lt;br /&gt;Puppet Client 機器連線到 Server 上取得對應的配置，並根據其內容對自己進行設定。&lt;br /&gt;&lt;br /&gt;Puppet 並不是 scp 一個設定檔回來然後 Apply。&lt;br /&gt;Puppet Client 使用一套用 Ruby 寫的叫 facter 的工具取得主機基本資訊。&lt;br /&gt;Puppet Server 根據傳來的資訊（ex：IP, OS, RAM, etc.）編譯出相對應的配置檔並回傳。&lt;br /&gt;&lt;br /&gt;在 Ubuntu 系統上安裝 Puppet 非常簡單：&lt;br /&gt;&lt;pre class="brush:bash"&gt;sudo apt-get install ruby-full # 安裝 Ruby 環境&lt;br /&gt;sudo apt-get install facter # 安裝 Facter 後可以直接執行 facter 測試一下&lt;br /&gt;sudo apt-get install puppet # Puppet Client 套件 &lt;br /&gt;sudo apt-get install puppetmaster # Puppet Server 套件，Client 不需安裝&lt;br /&gt;&lt;br /&gt;# 在 Redhat 環境，Puppet Client 套件叫：puppet&lt;br /&gt;# 在 Redhat 環境，Puppet Server 套件叫：puppet-server&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Puppet 看待裝置或服務的哲學跟 UNIX 很像：&lt;br /&gt;每一個裝置、服務對 Puppet 來說，都是一個「資源（Resource）」。&lt;br /&gt;&lt;br /&gt;＊&lt;br /&gt;&lt;br /&gt;【*.pp】&lt;br /&gt;&lt;br /&gt;Puppet 解讀名爲 *.pp 的檔案，然後對不同的 Client 編譯產生不同的配置。&lt;br /&gt;一個簡單的 test.pp 檔案內容如下：&lt;br /&gt;&lt;pre class="brush:bash"&gt;file&lt;br /&gt;{&lt;br /&gt;    "/tmp/test.txt": content =&gt; "hello, world";&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;執行：&lt;br /&gt;&lt;pre class="brush:bash"&gt;puppet test.pp&lt;br /&gt;&lt;/pre&gt;執行結果是在 /tmp 底下產生一個 test.txt 檔，且內容爲「hello, world」。&lt;br /&gt;*.pp 有一套簡單的文法與規則，其中亦有類別跟繼承等，強烈建議閱讀文件瞭解！&lt;br /&gt;&lt;br /&gt;＊&lt;br /&gt;&lt;br /&gt;【Puppet Client/Server 運作流程】&lt;br /&gt;&lt;br /&gt;1」Puppet Client 的 puppetd 程式呼叫 facter 程式，facter 程式會偵測出 Puppet Client 主機的相關資訊，例如 hostname、RAM、Hard Disk、IP 等等。Puppet Client 的 puppetd 再透過“SSL”把這些訊息傳到 Puppet Server。&lt;br /&gt;&lt;br /&gt;2」Puppet Server 的 puppetmaster 程式檢查 Puppet Client 送來的資訊，會使用 Puppet Client 的 hostname 來找到 /etc/puppet/manifest 裡面對應的 node 配置，然後分析以及解讀牽涉到的 *.pp 檔或 Puppet 程式碼，Puppet Client 使用 facter 生成的訊息會被當成變數傳入這些 *.pp 檔或 Puppet 程式碼。&lt;br /&gt;&lt;br /&gt;3」當 Puppet Server 知道需要處理哪些 *.pp 檔後，就會將它們進行解析，這個 *.pp 檔解析的動作可以看成是程式的編譯（或是直譯？）。解析會分成幾個階段，首先是語法檢查，語法錯誤就會直接報錯了；語法檢查通過，會產生解析的結果（僞代碼檔？），這個結果同樣會透過 SSL 傳送回 Puppet Client。&lt;br /&gt;&lt;br /&gt;4」Puppet Client 收到 Puppet Server 的解析結果，然後執行，並且把執行的結果回傳。&lt;br /&gt;&lt;br /&gt;5」Puppet Server 把 Puppet Client 的執行結果寫到 log。&lt;br /&gt;&lt;br /&gt;＊&lt;br /&gt;&lt;br /&gt;【Puppet Client/Server 配置】&lt;br /&gt;&lt;br /&gt;Puppet Client 與 Puppet Server 的安裝、設定、配置，最好都使用 root 帳號。&lt;br /&gt;&lt;br /&gt;進行 Client/Server 設置前，請務必千萬確定每臺主機的 hostname！&lt;br /&gt;Puppet 的 Client/Server 配置有綁定 hostname 進行驗證。&lt;br /&gt;Puppet 要求符合 &lt;a href="http://en.wikipedia.org/wiki/Fully_qualified_domain_name"&gt;FQDN&lt;/a&gt; 的 hostname。&lt;br /&gt;請先執行 hostname 並檢查 /etc/hostname 進行確定。&lt;br /&gt;並確認 /etc/hosts 檔案有正確的 hostname 與 IP 配對。&lt;br /&gt;&lt;br /&gt;連線與驗證都需要 root 身份來進行。&lt;br /&gt;Puppet Client 與 Server 的系統時間要校正一致，否則認證會出問題！&lt;br /&gt;建議主機使用同樣的 NTP Server 進行時間同步。&lt;br /&gt;請特別注意！&lt;br /&gt;&lt;br /&gt;在 Client/Server 環境中，Puppet Server 預設讀取 *.pp 的路徑是：&lt;br /&gt;/etc/puppet/manifests/&lt;br /&gt;&lt;br /&gt;可以編寫一個 /etc/puppet/manifests/site.pp 檔測試：&lt;br /&gt;&lt;pre class="brush:bash"&gt;node default&lt;br /&gt;{&lt;br /&gt;    file&lt;br /&gt;    {&lt;br /&gt;        "/tmp/puppet_server.message":&lt;br /&gt;        content =&gt; "Hello, Puppet Client!";&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;第一次進行 Client/Server 的配置連線會需要驗證。&lt;br /&gt;先在 Puppet Client 執行：&lt;br /&gt;&lt;pre class="brush:bash"&gt;puppetd --server 伺服器主機名稱 --test&lt;br /&gt;&lt;/pre&gt;再到 Puppet Server 執行：&lt;br /&gt;&lt;pre class="brush:bash"&gt;puppetca --sign 客戶端主機名稱&lt;br /&gt;&lt;/pre&gt;最後回到 Puppet Client 執行：&lt;br /&gt;&lt;pre class="brush:bash"&gt;puppetd --server 伺服器主機名稱 --test&lt;br /&gt;&lt;/pre&gt;此時，Puppet Client 應該會產生一個內容爲「Puppet Manifest」的 /tmp/site.txt 檔。&lt;br /&gt;&lt;br /&gt;＊&lt;br /&gt;&lt;br /&gt;【Puppet CA 驗証】&lt;br /&gt;&lt;br /&gt;Puppet 的驗證文件預設：&lt;br /&gt;Puppet Client：/var/lib/puppet/ssl&lt;br /&gt;Puppet Server：/var/lib/puppet/ssl/ca/&lt;br /&gt;&lt;br /&gt;若驗證有問題，在該資料夾下找到相對應的 *.pem，刪除舊的 *.pem 檔後，重新認證。&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush:bash"&gt;puppetca --list --all&lt;br /&gt;puppetca --list&lt;br /&gt;puppetca --sign CLIENT_HOSTNAME&lt;br /&gt;puppetca --print CLIENT_HOSTNAME&lt;br /&gt;puppetca --clean CLIENT_HOSTNAME  # 刪除舊的認証&lt;br /&gt;man puppetca&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;＊&lt;br /&gt;&lt;br /&gt;【建議的 /etc/puppet/ 目錄架構】&lt;br /&gt;&lt;pre class="brush:bash"&gt;manifests/&lt;br /&gt;        site.pp&lt;br /&gt;        templates.pp&lt;br /&gt;        nodes.pp&lt;br /&gt;&lt;br /&gt;modules/&lt;br /&gt;        {module_name}&lt;br /&gt;&lt;br /&gt;modules/user/&lt;br /&gt;&lt;br /&gt;services/&lt;br /&gt;&lt;br /&gt;clients/&lt;br /&gt;&lt;br /&gt;notes/&lt;br /&gt;&lt;br /&gt;plugins/&lt;br /&gt;&lt;br /&gt;tools/&lt;br /&gt;&lt;/pre&gt;來源：http://projects.puppetlabs.com/projects/1/wiki/Puppet_Best_Practice&lt;br /&gt;&lt;br /&gt;＊&lt;br /&gt;&lt;br /&gt;【使用 Puppet Module】&lt;br /&gt;&lt;br /&gt;來源：http://docs.puppetlabs.com/guides/modules.html&lt;br /&gt;&lt;br /&gt;＊&lt;br /&gt;&lt;br /&gt;【使用 Puppet Template】&lt;br /&gt;&lt;br /&gt;Puppet Template 可以用來動態產生不同的內容。&lt;br /&gt;應用的情境比較像是同樣的設定檔，但是有些許的設定不盡相同。&lt;br /&gt;例如都是 httpd 服務，不見得所有 Puppet node 的 httpd.conf 都完全相同。&lt;br /&gt;&lt;br /&gt;Puppet Template 檔是使用 Ruby 的 ERB Template，並不難寫。 &lt;br /&gt;請參考：http://www.ruby-doc.org/stdlib/libdoc/erb/rdoc/classes/ERB.html&lt;br /&gt;&lt;br /&gt;Puppet Template 的使用也很簡單：&lt;br /&gt;&lt;pre class="brush:bash"&gt;$value = template("my_template.erb")&lt;br /&gt;&lt;/pre&gt;my_template.erb 可換成 erb 檔的絕對路徑，或把 erb 檔放到 Puppet 預設會找的路徑。&lt;br /&gt;Red Hat 環境通常是 /var/lib/puppet/templates；&lt;br /&gt;Ubuntu 環境通常是 /etc/puppet/templates。&lt;br /&gt;可以使用 puppet --configprint templatedir 指令確認。&lt;br /&gt;實作的建議是把 erb 檔放到各個 Module 資料夾中。&lt;br /&gt;&lt;br /&gt;題外話，可以執行 puppet --configprint all 看看 :-)&lt;br /&gt;&lt;br /&gt;來源：http://docs.puppetlabs.com/guides/templating.html&lt;br /&gt;&lt;br /&gt;＊&lt;br /&gt;&lt;br /&gt;【Puppet 設定檔範例】&lt;br /&gt;&lt;br /&gt;https://github.com/ghoneycutt/puppet-generic&lt;br /&gt;&lt;br /&gt;＊&lt;br /&gt;&lt;br /&gt;【Puppet 名詞解釋】&lt;br /&gt;&lt;br /&gt;catalog : A catalog is the totality of resources, files, properties, etc, for a given system.&lt;br /&gt;&lt;br /&gt;manifest : A configuration file written in the Puppet language. These files should have the .pp extension.&lt;br /&gt;&lt;br /&gt;module : A collection of classes, resource types, files, and templates, organized around a particular purpose. &lt;br /&gt;&lt;br /&gt;node (general noun) : An individual server; for the purposes of discussing Puppet, this generally refers to an agent node.&lt;br /&gt;&lt;br /&gt;node (Puppet language keyword) : A collection of classes and/or resources to be applied to the agent node whose unique identifier (“certname”) matches the specified node name. Nodes defined in manifests allow inheritance, although this should be used with care due to the behavior of dynamic variable scoping.&lt;br /&gt;&lt;br /&gt;provider : A simple implementation of a type; examples of package providers are dpkg and rpm, and examples of user providers are useradd and netinfo. Most often, providers are just Ruby wrappers around shell commands, and they are usually very short and thus easy to create.&lt;br /&gt;&lt;br /&gt;templates : templates are ERB files used to generate configuration files for systems and are used in cases where the configuration file is not static but only requires minor changes based on variables that Puppet can provide (such as hostname). See also distributable file.&lt;br /&gt;&lt;br /&gt;type : abstract description of a type of resource. Can be implemented as a native type, plug-in type, or defined type.&lt;br /&gt;&lt;br /&gt;agent or agent node : An operating system instance managed by Puppet. This can be an operating system running on its own hardware or a virtual image.&lt;br /&gt;&lt;br /&gt;來源：http://projects.puppetlabs.com/projects/puppet/wiki/Glossary_Of_Terms&lt;br /&gt;&lt;br /&gt;＊&lt;br /&gt;&lt;br /&gt;強烈推薦文件：&lt;br /&gt;http://puppet.wikidot.com&lt;br /&gt;&lt;br /&gt;Reference：&lt;br /&gt;http://puppet-manifest-share.googlecode.com/files/puppet-1.0.pdf&lt;br /&gt;http://www.comeonsa.com/category/puppet/&lt;br /&gt;http://bitcube.co.uk/content/puppet-errors-explained&lt;br /&gt;http://www.example42.com&lt;br /&gt;http://docs.puppetlabs.com/guides/troubleshooting.html&lt;br /&gt;http://docs.puppetlabs.com/guides/troubleshooting.html&lt;br /&gt;http://blog.akquinet.de/2011/11/23/managing-an-apache-server-with-puppet/&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18689056-4949225022764446626?l=zx-1986.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://zx-1986.blogspot.com/feeds/4949225022764446626/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://zx-1986.blogspot.com/2010/11/puppet.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18689056/posts/default/4949225022764446626'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18689056/posts/default/4949225022764446626'/><link rel='alternate' type='text/html' href='http://zx-1986.blogspot.com/2010/11/puppet.html' title='Puppet'/><author><name>張旭</name><uri>https://profiles.google.com/105134833883146274095</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-pO0m_C6_zQw/AAAAAAAAAAI/AAAAAAAAD0c/h7KNyAUN14w/s512-c/photo.jpg'/></author><thr:total>0</thr:total><georss:featurename>Taipei City, Taiwan</georss:featurename><georss:point>25.091075 121.5598345</georss:point><georss:box>24.976033 121.401906 25.206117 121.71776299999999</georss:box></entry><entry><id>tag:blogger.com,1999:blog-18689056.post-2270529069075665716</id><published>2011-12-21T13:51:00.000+08:00</published><updated>2011-12-21T13:52:04.698+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='redhat'/><category scheme='http://www.blogger.com/atom/ns#' term='indefero'/><category scheme='http://www.blogger.com/atom/ns#' term='git'/><category scheme='http://www.blogger.com/atom/ns#' term='php'/><title type='text'>Redhat 安裝 Indefero</title><content type='html'>http://www.indefero.net&lt;br /&gt;&lt;br /&gt;Indefero 是一個 Web 介面 Git 的前端工具，類似 Gitorious。&lt;br /&gt;簡單說，它就是類似 Google Code 那樣的原始碼管理系統。&lt;br /&gt;其實它可以接管 Git、Subversion、Mercurial、Monotone 等 SCM 軟體。&lt;br /&gt;Indefero 是使用 PHP 撰寫的，搭配 Pluf 框架。&lt;br /&gt;&lt;br /&gt;＊&lt;br /&gt;&lt;br /&gt;【Setup Indefero with Git in RHEL 5.x】&lt;br /&gt;&lt;br /&gt;［修改 /etc/hosts］&lt;br /&gt;&lt;pre class="brush:bash"&gt;127.0.0.1    indefero&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;［MySQL 資料庫］&lt;br /&gt;資料庫版本：MySQL 5.x&lt;br /&gt;資料庫帳號：indefero&lt;br /&gt;資料庫密碼：indefero&lt;br /&gt;資料庫名稱：indefero&lt;br /&gt;&lt;pre class="brush:bash"&gt;mysql -u root -p&lt;br /&gt;mysql&gt; create database indefero;&lt;br /&gt;mysql&gt; ALTER DATABASE indefero CHARACTER SET utf8 COLLATE utf8_general_ci;&lt;br /&gt;mysql&gt; grant all privileges on indefero.* to indefero@localhost identified by 'indefero';&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;［相關使用者］&lt;br /&gt;手動新增的使用者：git&lt;br /&gt;httpd 預設的使用者：apache&lt;br /&gt;&lt;br /&gt;［相關路徑］&lt;br /&gt;/home/git/repositories&lt;br /&gt;/home/git/.ssh&lt;br /&gt;/var/www/html/indefero&lt;br /&gt;/var/www/html/pluf&lt;br /&gt;&lt;br /&gt;［1］安裝 Pluf 框架&lt;br /&gt;&lt;br /&gt;Pluf：http://www.pluf.org&lt;br /&gt;&lt;br /&gt;Pluf 需要至少 5.2.4 版本以上的 PHP，RHEL 5.x 附帶的通常都很舊。&lt;br /&gt;RHEL 5.x 需要的 rpm 套件可以去這找：http://rpms.famillecollet.com&lt;br /&gt;&lt;br /&gt;先使用 yum 安裝必須的 PHP 套件：&lt;br /&gt;&lt;pre class="brush:bash"&gt;yum install php-pear&lt;br /&gt;yum install php-pear-Mail php-pear-Mail-Mime php-pear-mail_mime&lt;br /&gt;&lt;/pre&gt;下載 Pluf 原始檔到 /var/www/html 并解壓縮，完成。&lt;br /&gt;&lt;br /&gt;［2］安裝 Indefero&lt;br /&gt;&lt;br /&gt;前往：http://projects.ceondo.com/p/indefero/&lt;br /&gt;&lt;br /&gt;下載 Indefero 原始檔到 /var/www/html，解壓縮，然後執行：&lt;br /&gt;&lt;pre class="brush:bash"&gt;cd /var/www/html/indefero&lt;br /&gt;cp src/IDF/conf/idf.php-dist src/IDF/conf/idf.php&lt;br /&gt;cp src/IDF/conf/path.php-dist src/IDF/conf/path.php&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;確認 MySQL 資料庫與資料庫使用者。&lt;br /&gt;&lt;br /&gt;修改 src/IDF/conf/idf.php：&lt;br /&gt;&lt;pre class="brush:php"&gt;$cfg['git_repositories'] = '/home/git/repositories/%s.git';&lt;br /&gt;$cfg['git_remote_url'] = 'git://indefero/%s.git';&lt;br /&gt;$cfg['git_write_remote_url'] = 'git@indefero:%s.git';&lt;br /&gt;$cfg['send_emails'] = false;&lt;br /&gt;$cfg['mail_backend'] = 'smtp';&lt;br /&gt;$cfg['mail_host'] = 'localhost';&lt;br /&gt;$cfg['mail_port'] = 25;&lt;br /&gt;$cfg['url_base'] = 'http://indefero';&lt;br /&gt;$cfg['url_media'] = 'http://indefero/media';&lt;br /&gt;$cfg['url_upload'] = 'http://indefero/media/upload';&lt;br /&gt;$cfg['upload_path'] = '/var/www/html/indefero/www/media/upload';&lt;br /&gt;$cfg['upload_issue_path'] = '/var/www/html/indefero/attachments';&lt;br /&gt;# 超過 40 個字元就可以&lt;br /&gt;$cfg['secret_key'] = 'abcdabcdabcdabcdabcdabcdabcdabcdabcdabcd';&lt;br /&gt;# Database configuration&lt;br /&gt;$cfg['db_login'] = 'indefero';&lt;br /&gt;$cfg['db_password'] = 'indefero';&lt;br /&gt;$cfg['db_database'] = 'indefero';&lt;br /&gt;$cfg['db_server'] = 'localhost';&lt;br /&gt;$cfg['db_version'] = '5.1';&lt;br /&gt;$cfg['db_table_prefix'] = 'indefero_';&lt;br /&gt;$cfg['db_engine'] = 'MySQL';&lt;br /&gt;# 如果有碰到 open_basedir restriction error，&lt;br /&gt;# 執行 cp /etc/mime.types /home，并開啟以下設定：&lt;br /&gt;#$cfg['idf_mimetypes_db'] = '/home/mime.types';&lt;br /&gt;&lt;/pre&gt;修改 src/IDF/conf/path.php：&lt;br /&gt;&lt;pre class="brush:php"&gt;# 如果沒有特殊修改，使用預設的相對路徑即可。&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;開始安裝：&lt;br /&gt;&lt;pre class="brush:bash"&gt;cd /var/www/html/indefero/src&lt;br /&gt;# 以下命令進行測試安裝&lt;br /&gt;php /var/www/html/pluf/src/migrate.php --conf=IDF/conf/idf.php -a -i -d -u&lt;br /&gt;# 以下命令進行實際安裝&lt;br /&gt;php /var/www/html/pluf/src/migrate.php --conf=IDF/conf/idf.php -a -i -d&lt;br /&gt;&lt;/pre&gt;建立 /var/www/html/indefero/www/bootstrap.php：&lt;br /&gt;&lt;pre class="brush:php"&gt;[?php&lt;br /&gt;require '/var/www/html/indefero/src/IDF/conf/path.php';&lt;br /&gt;require 'Pluf.php';&lt;br /&gt;Pluf::start('/var/www/html/indefero/src/IDF/conf/idf.php');&lt;br /&gt;Pluf_Dispatcher::loadControllers(Pluf::f('idf_views'));&lt;br /&gt;&lt;br /&gt;$user = new Pluf_User();&lt;br /&gt;$user-&gt;first_name = '管理者姓氏';&lt;br /&gt;$user-&gt;last_name = '管理者名字'; // Required! 必須！&lt;br /&gt;$user-&gt;login = '管理者帳號'; // must be lowercase! 全部小寫！&lt;br /&gt;$user-&gt;email = '管理者信箱';&lt;br /&gt;$user-&gt;password = '管理者密碼';&lt;br /&gt;$user-&gt;administrator = true;&lt;br /&gt;$user-&gt;active = true;&lt;br /&gt;$user-&gt;create();&lt;br /&gt;print "Bootstrap ok\n";&lt;br /&gt;?]&lt;br /&gt;&lt;/pre&gt;建立管理者：&lt;br /&gt;&lt;pre class="brush:bash"&gt;php /var/www/html/indefero/www/bootstrap.php&lt;br /&gt;&lt;/pre&gt;順利執行完成後，可以刪除或改名 bootstrap.php 檔。&lt;br /&gt;&lt;br /&gt;建立 /etc/httpd/conf.d/indefero：&lt;br /&gt;&lt;pre class="brush:bash"&gt;# 請自行把 [ ] 換成 &lt; &gt;&lt;br /&gt;[virtualhost *:80]&lt;br /&gt;    ServerName indefero&lt;br /&gt;    DocumentRoot /var/www/html/indefero/www&lt;br /&gt;    ErrorLog logs/indefero-error_log&lt;br /&gt;    CustomLog logs/indefero-access_log common&lt;br /&gt;[/VirtualHost]&lt;br /&gt;[directory /var/www/html/indefero/www]  &lt;br /&gt;    AllowOverride All&lt;br /&gt;[/Directory]&lt;br /&gt;&lt;/pre&gt;在 /var/www/html/indefero/www 內補一個 .htaccess：&lt;br /&gt;&lt;pre class="brush:bash"&gt;Options +FollowSymLinks&lt;br /&gt;RewriteEngine On&lt;br /&gt;RewriteCond %{REQUEST_FILENAME} !-f&lt;br /&gt;RewriteCond %{REQUEST_FILENAME} !-d&lt;br /&gt;RewriteRule ^(.*) /index.php/$1&lt;br /&gt;&lt;/pre&gt;重新啟動 Apache：&lt;br /&gt;&lt;pre class="brush:bash"&gt;service httpd restart&lt;br /&gt;&lt;/pre&gt;連到 http://indefero 登入看看。&lt;br /&gt;&lt;br /&gt;［3］設定 Git Repositories&lt;br /&gt;&lt;br /&gt;Indefero 原始檔的 doc 資料夾下，有完整的設定說明檔（doc/syncgit.mdtext）。&lt;br /&gt;&lt;br /&gt;建立使用者用以控制 Indefero 的 Git Repositories：&lt;br /&gt;&lt;pre class="brush:bash"&gt;useradd git&lt;br /&gt;mkdir /home/git/repositories&lt;br /&gt;mkdir -p /home/git/.ssh&lt;br /&gt;touch /home/git/.ssh/authorized_keys&lt;br /&gt;chown -R git.git /home/git&lt;br /&gt;chmod 0700 /home/git/.ssh&lt;br /&gt;chmod 0600 /home/git/.ssh/authorized_keys&lt;br /&gt;&lt;/pre&gt;把 httpd 的控制者加到 Git Repositories 控制者的群組：&lt;br /&gt;&lt;pre class="brush:bash"&gt;usermod -a -G git apache&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;確認系統可以執行 python 程式，因為後面需要執行 scripts/gitserver.py。&lt;br /&gt;&lt;pre class="brush:bash"&gt;python -v&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;重新修改 src/IDF/conf/idf.php 內的設定：&lt;br /&gt;&lt;pre class="brush:php"&gt;$cfg['git_repositories'] = '/home/git/repositories/%s.git';&lt;br /&gt;$cfg['git_remote_url'] = 'git://indefero/%s.git';&lt;br /&gt;$cfg['idf_plugin_syncgit_path_gitserve'] = '/var/www/html/indefero/scripts/gitserve.py';&lt;br /&gt;$cfg['idf_plugin_syncgit_path_authorized_keys'] = '/home/git/.ssh/authorized_keys';&lt;br /&gt;$cfg['idf_plugin_syncgit_sync_file'] = '/tmp/SYNC-GIT';&lt;br /&gt;&lt;br /&gt;# Remove the git repositories which do not have a corresponding project&lt;br /&gt;# This is run at cron time&lt;br /&gt;$cfg['idf_plugin_syncgit_remove_orphans'] = false;&lt;br /&gt;&lt;br /&gt;# git account home dir&lt;br /&gt;$cfg['idf_plugin_syncgit_git_home_dir'] = '/home/git'; &lt;br /&gt;&lt;br /&gt;# where are going to be the git repositories&lt;br /&gt;$cfg['idf_plugin_syncgit_base_repositories'] = '/home/git/repositories'; &lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;使用 git 的身份加入一下 Cron job：&lt;br /&gt;&lt;pre class="brush:bash"&gt;* * * * * php /var/www/html/indefero/scripts/gitcron.php&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;del&gt;&lt;br /&gt;安裝 git-daemon：&lt;br /&gt;yum install git-daemon&lt;br /&gt;&lt;br /&gt;制作一個 Git Daemon 寫在 /etc/event.d/local-git-daemon：&lt;br /&gt;start on startup&lt;br /&gt;stop on shutdown&lt;br /&gt;exec /usr/bin/git-daemon \&lt;br /&gt;--user=git --group=git \&lt;br /&gt;--verbose \&lt;br /&gt;--reuseaddr \&lt;br /&gt;--base-path=/home/git/repositories/ \&lt;br /&gt;/home/git/repositories/&lt;br /&gt;respawn&lt;br /&gt;&lt;br /&gt;啟動：&lt;br /&gt;start local-git-daemon&lt;br /&gt;&lt;/del&gt;&lt;br /&gt;&lt;br /&gt;使用網友寫的 git-daemon，編寫到 /etc/init.d/git-daemon：&lt;br /&gt;（http://projects.ceondo.com/p/indefero/page/git-daemon-sysV-InitScript/）&lt;br /&gt;&lt;pre class="brush:bash"&gt;#!/bin/sh&lt;br /&gt;### BEGIN INIT INFO&lt;br /&gt;# Provides: git-daemon&lt;br /&gt;# Required-Start: $network $remote_fs $syslog&lt;br /&gt;# Required-Stop: $network $remote_fs $syslog&lt;br /&gt;# Default-Start: 2 3 4 5&lt;br /&gt;# Default-Stop: 0 1 6&lt;br /&gt;# Short-Description: git-daemon service&lt;br /&gt;# Description: git-daemon makes git repositories available via the git&lt;br /&gt;# protocol.&lt;br /&gt;### END INIT INFO&lt;br /&gt;&lt;br /&gt;# Author: Benjamin Graham "bman@duuit.com"&lt;br /&gt;&lt;br /&gt;# Do NOT "set -e"&lt;br /&gt;&lt;br /&gt;# PATH should only include /usr/* if it runs after the mountnfs.sh script&lt;br /&gt;PATH=/sbin:/usr/sbin:/bin:/usr/bin:/usr/lib/git-core&lt;br /&gt;DESC="git-daemon service"&lt;br /&gt;NAME=git-daemon&lt;br /&gt;DAEMON=/usr/bin/$NAME&lt;br /&gt;PIDFILE=/var/run/$NAME.pid&lt;br /&gt;SCRIPTNAME=/etc/init.d/$NAME&lt;br /&gt;&lt;br /&gt;# Exit if the package is not installed&lt;br /&gt;[ -x "$DAEMON" ] || exit 0&lt;br /&gt;&lt;br /&gt;# Fallback options values, we use these when&lt;br /&gt;# the /etc/default/git-daemon file does not exist&lt;br /&gt;RUN=no&lt;br /&gt;USER=git&lt;br /&gt;GROUP=git&lt;br /&gt;REPOSITORIES="/home/git/repositories/"&lt;br /&gt;&lt;br /&gt;# Read configuration variable file if it is present&lt;br /&gt;[ -r /etc/default/$NAME ] &amp;&amp; . /etc/default/$NAME&lt;br /&gt;&lt;br /&gt;# If ADVANCED_OPTS is empty, use a default setting&lt;br /&gt;if [ "x$ADVANCED_OPTS" == "x" ];&lt;br /&gt;then&lt;br /&gt;    ADVANCED_OPTS="--base-path=$REPOSITORIES $REPOSITORIES"&lt;br /&gt;fi&lt;br /&gt;&lt;br /&gt;DAEMON_ARGS="--syslog --reuseaddr \&lt;br /&gt;$ADVANCED_OPTS"&lt;br /&gt;&lt;br /&gt;# Define LSB log_* functions.&lt;br /&gt;# Depend on lsb-base (&gt;= 3.0-6) to ensure that this file is present.&lt;br /&gt;. /lib/lsb/init-functions&lt;br /&gt;&lt;br /&gt;#&lt;br /&gt;# Function that starts the daemon/service&lt;br /&gt;#&lt;br /&gt;do_start()&lt;br /&gt;{&lt;br /&gt;# Return&lt;br /&gt;# 0 if daemon has been started&lt;br /&gt;# 1 if daemon was already running&lt;br /&gt;# 2 if daemon could not be started&lt;br /&gt;start-stop-daemon --start --quiet --pidfile $PIDFILE --exec $DAEMON --test &gt; /dev/null || return 1&lt;br /&gt;start-stop-daemon --start --quiet --pidfile $PIDFILE --exec $DAEMON --background --make-pidfile -- $DAEMON_ARGS || return 2&lt;br /&gt;&lt;br /&gt;return 0&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;#&lt;br /&gt;# Function that stops the daemon/service&lt;br /&gt;#&lt;br /&gt;do_stop()&lt;br /&gt;{&lt;br /&gt;# Return&lt;br /&gt;# 0 if daemon has been stopped&lt;br /&gt;# 1 if daemon was already stopped&lt;br /&gt;# 2 if daemon could not be stopped&lt;br /&gt;# other if a failure occurred&lt;br /&gt;start-stop-daemon --stop --quiet --retry=TERM/30/KILL/5 --pidfile $PIDFILE --name $NAME&lt;br /&gt;RETVAL="$?"&lt;br /&gt;[ "$RETVAL" = 2 ] &amp;&amp; return 2&lt;br /&gt;# Wait for children to finish too if this is a daemon that forks&lt;br /&gt;# and if the daemon is only ever run from this initscript.&lt;br /&gt;# If the above conditions are not satisfied then add some other code&lt;br /&gt;# that waits for the process to drop all resources that could be&lt;br /&gt;# needed by services started subsequently. A last resort is to&lt;br /&gt;# sleep for some time.&lt;br /&gt;start-stop-daemon --stop --quiet --oknodo --retry=0/30/KILL/5 --exec $DAEMON&lt;br /&gt;[ "$?" = 2 ] &amp;&amp; return 2&lt;br /&gt;# Many daemons don't delete their pidfiles when they exit.&lt;br /&gt;rm -f $PIDFILE&lt;br /&gt;return "$RETVAL"&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;case "$1" in&lt;br /&gt;start)&lt;br /&gt;[ "$VERBOSE" != no ] &amp;&amp; log_daemon_msg "Starting $DESC" "$NAME"&lt;br /&gt;do_start&lt;br /&gt;case "$?" in&lt;br /&gt;0|1) [ "$VERBOSE" != no ] &amp;&amp; log_end_msg 0 ;;&lt;br /&gt;2) [ "$VERBOSE" != no ] &amp;&amp; log_end_msg 1 ;;&lt;br /&gt;esac&lt;br /&gt;;;&lt;br /&gt;stop)&lt;br /&gt;[ "$VERBOSE" != no ] &amp;&amp; log_daemon_msg "Stopping $DESC" "$NAME"&lt;br /&gt;do_stop&lt;br /&gt;case "$?" in&lt;br /&gt;0|1) [ "$VERBOSE" != no ] &amp;&amp; log_end_msg 0 ;;&lt;br /&gt;2) [ "$VERBOSE" != no ] &amp;&amp; log_end_msg 1 ;;&lt;br /&gt;esac&lt;br /&gt;;;&lt;br /&gt;status)&lt;br /&gt;status_of_proc "$DAEMON" "$NAME" &amp;&amp; exit 0 || exit $?&lt;br /&gt;;;&lt;br /&gt;restart|force-reload)&lt;br /&gt;#&lt;br /&gt;# If the "reload" option is implemented then remove the&lt;br /&gt;# 'force-reload' alias&lt;br /&gt;#&lt;br /&gt;log_daemon_msg "Restarting $DESC" "$NAME"&lt;br /&gt;do_stop&lt;br /&gt;case "$?" in&lt;br /&gt;0|1)&lt;br /&gt;do_start&lt;br /&gt;case "$?" in&lt;br /&gt;0) log_end_msg 0 ;;&lt;br /&gt;1) log_end_msg 1 ;; # Old process is still running&lt;br /&gt;*) log_end_msg 1 ;; # Failed to start&lt;br /&gt;esac&lt;br /&gt;;;&lt;br /&gt;*)&lt;br /&gt;# Failed to stop&lt;br /&gt;log_end_msg 1&lt;br /&gt;;;&lt;br /&gt;esac&lt;br /&gt;;;&lt;br /&gt;*)&lt;br /&gt;echo "Usage: $SCRIPTNAME {start|stop|status|restart|force-reload}" &gt;&amp;2&lt;br /&gt;exit 3&lt;br /&gt;;;&lt;br /&gt;&lt;br /&gt;esac&lt;br /&gt;/etc/default/git-daemon&lt;br /&gt;&lt;br /&gt;# Defaults for the git-daemon initscript&lt;br /&gt;&lt;br /&gt;# Set to yes to start git-daemon&lt;br /&gt;RUN=yes&lt;br /&gt;&lt;br /&gt;# Set to the user and group git-daemon should run as&lt;br /&gt;USER=git&lt;br /&gt;GROUP=git&lt;br /&gt;&lt;br /&gt;# Set the base path and the directory where the repositories are.&lt;br /&gt;REPOSITORIES="/home/git/repositories/"&lt;br /&gt;&lt;br /&gt;# Provide a way to have custom setup.&lt;br /&gt;#&lt;br /&gt;# Note, when ADVANCED_OPTS is defined the REPOSITORIES setting is ignored,&lt;br /&gt;# so take good care to specify exactly what git-daemon have to do.&lt;br /&gt;#&lt;br /&gt;# Here is an example from the man page:&lt;br /&gt;#ADVANCED_OPTS="--verbose --export-all \&lt;br /&gt;# --interpolated-path=/pub/%IP/%D \&lt;br /&gt;# /pub/192.168.1.200/software \&lt;br /&gt;# /pub/10.10.220.23/software"&lt;br /&gt;ADVANCED_OPTS="/usr/lib/git-core/git-daemon \ &lt;br /&gt;--verbose --base-path=/home/git/repositories \&lt;br /&gt; /home/git/repositories"&lt;br /&gt;&lt;/pre&gt;啟動：&lt;br /&gt;&lt;pre class="brush:bash"&gt;chmo a+x /etc/init.d/git-daemon&lt;br /&gt;/etc/init.d/git-daemon start&lt;br /&gt;service httpd restart&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;＊&lt;br /&gt;&lt;br /&gt;【關于 /home/git/repositories】&lt;br /&gt;&lt;br /&gt;Git 其實可以 init 一個 bare repository（裸倉儲庫），bare repository 預設允許任何人 push。&lt;br /&gt;實際的 Git 命令是：&lt;br /&gt;cd some_directory &amp;&amp; git init --bare&lt;br /&gt;&lt;br /&gt;Indefero（大部分相似的系統）正是利用這個 Git 命令幫助使用者建立專案的 Repository。&lt;br /&gt;Indefero 會根據使用者 create project 時給的 project name，&lt;br /&gt;到 /home/git/repositories 內，建立 project_name.git 這種類型的資料夾，&lt;br /&gt;再切換到該資料夾內，使用 git init --bare 初始化這個 Repository。&lt;br /&gt;&lt;br /&gt;＊&lt;br /&gt;&lt;br /&gt;【版本升級】&lt;br /&gt;&lt;br /&gt;備份舊的 Pluf 與 Indefero 資料夾：&lt;br /&gt;&lt;pre class="brush:bash"&gt;cp -r pluf pluf_backup&lt;br /&gt;cp -r indefero indefero_backup&lt;br /&gt;&lt;/pre&gt;備份舊的 Indefero 資料庫：&lt;br /&gt;&lt;pre class="brush:bash"&gt;mysqldump -u indefero -p --databases indefero &gt; indefero_backup.sql&lt;br /&gt;&lt;/pre&gt;下載最新的 Pluf 與 Indefero 原始檔，並解壓縮取代掉原本的資料夾。&lt;br /&gt;然後執行資料庫升級：&lt;br /&gt;&lt;pre class="brush:bash"&gt;cd /home/git/public_html/indefero/src&lt;br /&gt;# 測試升級動作&lt;br /&gt;$ php /home/git/public_html/pluf/src/migrate.php --conf=IDF/conf/idf.php -a -d -u&lt;br /&gt;# 執行升級動作&lt;br /&gt;$ php /home/git/public_html/pluf/src/migrate.php --conf=IDF/conf/idf.php -a -d &lt;br /&gt;&lt;/pre&gt;重啟 Apache 檢查：&lt;br /&gt;&lt;pre class="brush:bash"&gt;service httpd restart &lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;＊&lt;br /&gt;&lt;br /&gt;【錯誤修正】&lt;br /&gt;&lt;br /&gt;［idf_plugin_syncgit_base_repositories］&lt;br /&gt;http://projects.ceondo.com/p/indefero/issues/198/&lt;br /&gt;&lt;br /&gt;［Getting Write Access to Git Repositories］&lt;br /&gt;http://www.openflow.org/wk/index.php/Git&lt;br /&gt;&lt;br /&gt;Reference：&lt;br /&gt;01. http://projects.ceondo.com/p/indefero/page/Installation/&lt;br /&gt;02. http://code.google.com/hosting/&lt;br /&gt;03. https://git.wiki.kernel.org/index.php/InterfacesFrontendsAndTools&lt;br /&gt;04. http://www.pluf.org/doc/install.html&lt;br /&gt;05. http://zx-1986.blogspot.com/2010/08/git-manual.html&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18689056-2270529069075665716?l=zx-1986.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://zx-1986.blogspot.com/feeds/2270529069075665716/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://zx-1986.blogspot.com/2011/03/indefero.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18689056/posts/default/2270529069075665716'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18689056/posts/default/2270529069075665716'/><link rel='alternate' type='text/html' href='http://zx-1986.blogspot.com/2011/03/indefero.html' title='Redhat 安裝 Indefero'/><author><name>張旭</name><uri>https://profiles.google.com/105134833883146274095</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-pO0m_C6_zQw/AAAAAAAAAAI/AAAAAAAAD0c/h7KNyAUN14w/s512-c/photo.jpg'/></author><thr:total>0</thr:total><georss:featurename>No. 110, Lane 21, Wénhú St, Neihu District, Taipei City, Taiwan 114</georss:featurename><georss:point>25.091075 121.5598345</georss:point><georss:box>24.976033 121.401906 25.206117 121.71776299999999</georss:box></entry><entry><id>tag:blogger.com,1999:blog-18689056.post-2356501859972652209</id><published>2011-11-23T15:18:00.000+08:00</published><updated>2011-12-08T00:28:17.314+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='redhat'/><category scheme='http://www.blogger.com/atom/ns#' term='redmine'/><category scheme='http://www.blogger.com/atom/ns#' term='rails'/><title type='text'>Redhat 安裝 Redmine</title><content type='html'>&lt;pre class="brush:bash"&gt;ssh root@server&lt;br /&gt;&lt;br /&gt;cd /opt&lt;br /&gt;wget http://download.fedoraproject.org/pub/epel/6/i386/epel-release-6-5.noarch.rpm &amp;&amp; rpm -i *.rpm&lt;br /&gt;&lt;br /&gt;yum groupinstall "Development Tools"&lt;br /&gt;yum install httpd httpd-devel&lt;br /&gt;yum install libxml2 libxslt libxml2-devel libxslt-devel&lt;br /&gt;yum install git&lt;br /&gt;yum install openssl openssl-devel&lt;br /&gt;yum install sqlite sqlite-devel &lt;br /&gt;yum install zlib zlib-devel &lt;br /&gt;yum install mysql++-devel mysql++ mysql-devel&lt;br /&gt;yum install readline-devel compat-readline5 readline &lt;br /&gt;yum install libcurl libcurl-devel curl-devel &lt;br /&gt;yum install libstdc++ libstdc++-devel libstdc++-docs compat-libstdc++-33 &lt;br /&gt;yum install apr-devel apr-util-devel&lt;br /&gt;&lt;br /&gt;sudo https_proxy="YOUR_HTTPS_PROXY" bash &lt; &lt;(curl -s https://rvm.beginrescueend.com/install/rvm)&lt;br /&gt;&lt;br /&gt;logout &amp;&amp; login&lt;br /&gt;&lt;br /&gt;rvm install 1.8.7&lt;br /&gt;rvm --default system 1.8.7&lt;br /&gt;&lt;br /&gt;logout &amp;&amp; login&lt;br /&gt;&lt;br /&gt;gem update system&lt;br /&gt;&lt;br /&gt;which ruby&lt;br /&gt;which gem&lt;br /&gt;&lt;br /&gt;gem install passenger&lt;br /&gt;passenger-install-apache2-module&lt;br /&gt;&lt;br /&gt;chkconfig httpd on&lt;br /&gt;service httpd restart&lt;br /&gt;&lt;br /&gt;cd /opt &amp;&amp; wget http://rubyforge.org/frs/download.php/75520/redmine-1.2.2.zip&lt;br /&gt;unzip redmine-1.2.2.zip &amp;&amp; mv redmine-1.2.2 /var/www/html/redmine &amp;&amp; cd /var/www/html&lt;br /&gt;cd /var/www/html/redmine/&lt;br /&gt;&lt;br /&gt;touch Gemfile&lt;br /&gt;&lt;br /&gt;vim Gemfile&lt;br /&gt;###&lt;br /&gt;source "http://rubygems.org"&lt;br /&gt;gem "rake", "0.8.7"&lt;br /&gt;gem "rack", "1.1.1"&lt;br /&gt;gem "i18n", "0.4.2"&lt;br /&gt;gem "rubytree", "0.5.2", :require =&gt; "tree"&lt;br /&gt;gem "RedCloth", "~&gt;4.2.3", :require =&gt; "redcloth" # for CodeRay&lt;br /&gt;gem "mysql"&lt;br /&gt;gem "coderay", "~&gt;0.9.7"&lt;br /&gt;# gem "rails", "2.3.11"&lt;br /&gt;###&lt;br /&gt;&lt;br /&gt;gem install bundler&lt;br /&gt;bundle install&lt;br /&gt;&lt;br /&gt;mysql -u root -p -h YOUR_SERVER&lt;br /&gt;###&lt;br /&gt;create database redmine character set utf8;&lt;br /&gt;create user 'redmine'@'localhost' identified by 'YOUR_PASSWORD';&lt;br /&gt;grant all privileges on redmine.* to 'redmine'@'localhost';&lt;br /&gt;###&lt;br /&gt;&lt;br /&gt;cd /var/www/html/redmine&lt;br /&gt;&lt;br /&gt;mv config/database.yml.example config/database.yml&lt;br /&gt;vim config/database.yml&lt;br /&gt;###&lt;br /&gt;production:&lt;br /&gt;  adapter: mysql&lt;br /&gt;  database: redmine&lt;br /&gt;  host: YOUR_SERVER&lt;br /&gt;  username: redmine&lt;br /&gt;  password: YOUR_PASSWORD&lt;br /&gt;  encoding: utf8&lt;br /&gt;###&lt;br /&gt;&lt;br /&gt;vim config/environment.rb&lt;br /&gt;###&lt;br /&gt;ENV['RAILS_ENV'] ||= 'production'&lt;br /&gt;###&lt;br /&gt;&lt;br /&gt;cd /var/www/html/redmine&lt;br /&gt;RAILS_ENV=production bundle exec rake generate_session_store&lt;br /&gt;RAILS_ENV=production bundle exec rake db:migrate&lt;br /&gt;# RAILS_ENV=production bundle exec rake redmine:load_default_data&lt;br /&gt;&lt;br /&gt;cd /var/www/html/redmine&lt;br /&gt;mv public/dispatch.cgi.example public/dispatch.cgi&lt;br /&gt;mv public/dispatch.fcgi.example public/dispatch.fcgi&lt;br /&gt;mv public/dispatch.rb.example public/dispatch.rb&lt;br /&gt;mv public/htaccess.fcgi.example public/.htaccess&lt;br /&gt;&lt;br /&gt;cd /var/www/html/&lt;br /&gt;chown -R apache:apache redmine&lt;br /&gt;chmod -R 755 redmine&lt;br /&gt;&lt;br /&gt;vim /etc/httpd/conf.d/redmine.conf&lt;br /&gt;###&lt;br /&gt;LoadModule passenger_module /usr/local/rvm/gems/ruby-1.8.7-p352/gems/passenger-3.0.9/ext/apache2/mod_passenger.so&lt;br /&gt;PassengerRoot /usr/local/rvm/gems/ruby-1.8.7-p352/gems/passenger-3.0.9&lt;br /&gt;PassengerRuby /usr/local/rvm/wrappers/ruby-1.8.7-p352/ruby&lt;br /&gt;&lt;br /&gt;《Virtualhost *:80》&lt;br /&gt;ServerName redmine&lt;br /&gt;DocumentRoot /var/www/html/redmine/public&lt;br /&gt;      《directory /var/www/html/redmine/public》&lt;br /&gt;         AllowOverride all&lt;br /&gt;         Options -MultiViews&lt;br /&gt;      《/Directory》&lt;br /&gt;《/VirtualHost》&lt;br /&gt;###&lt;br /&gt;&lt;br /&gt;service httpd restart&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Upgrade &lt;br /&gt;&lt;br /&gt;RAILS_ENV=production bundle exec rake generate_session_store&lt;br /&gt;RAILS_ENV=production bundle exec rake db:migrate&lt;br /&gt;RAILS_ENV=production bundle exec rake db:migrate:upgrade_plugin_migrations&lt;br /&gt;RAILS_ENV=production bundle exec rake db:migrate_plugins&lt;br /&gt;RAILS_ENV=production bundle exec rake tmp:cache:clear&lt;br /&gt;RAILS_ENV=production bundle exec rake tmp:sessions:clear&lt;br /&gt;service httpd restart&lt;br /&gt;&lt;br /&gt;Reference：&lt;br /&gt;http://gembundler.com/rationale.html&lt;br /&gt;http://www.redmine.org/projects/redmine/wiki/RedmineInstall&lt;br /&gt;http://www.redmine.org/projects/redmine/wiki/HowTos&lt;br /&gt;http://www.redmine.org/projects/redmine/wiki/HowTo_install_Redmine_on_CentOS_5&lt;br /&gt;http://www.redmine.org/projects/redmine/wiki/HowTo_have_both_development_and_production_environment_available_from_Apache_with_VirtualHost&lt;br /&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18689056-2356501859972652209?l=zx-1986.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://zx-1986.blogspot.com/feeds/2356501859972652209/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://zx-1986.blogspot.com/2011/11/redmine-in-redhat.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18689056/posts/default/2356501859972652209'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18689056/posts/default/2356501859972652209'/><link rel='alternate' type='text/html' href='http://zx-1986.blogspot.com/2011/11/redmine-in-redhat.html' title='Redhat 安裝 Redmine'/><author><name>張旭</name><uri>https://profiles.google.com/105134833883146274095</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-pO0m_C6_zQw/AAAAAAAAAAI/AAAAAAAAD0c/h7KNyAUN14w/s512-c/photo.jpg'/></author><thr:total>0</thr:total><georss:featurename>No. 110, Lane 21, Wénhú St, Neihu District, Taipei City, Taiwan 114</georss:featurename><georss:point>25.091075 121.5598345</georss:point><georss:box>24.976035 121.401906 25.206115 121.71776299999999</georss:box></entry><entry><id>tag:blogger.com,1999:blog-18689056.post-8721479624022528515</id><published>2011-11-23T15:11:00.001+08:00</published><updated>2011-11-23T17:28:10.824+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ruby'/><category scheme='http://www.blogger.com/atom/ns#' term='ubuntu'/><title type='text'>Ubuntu 安裝 Redmine</title><content type='html'>Redmine 是一套使用 Ruby 語言開發的專案管理系統，它非常好用！&lt;br /&gt;在 Ubuntu 環境安裝 Redmin 專案管理系統，需要先佈置好 Ruby 環境。&lt;br /&gt;可以參考：http://zx-1986.blogspot.com/2010/09/ruby-on-rails-in-ubuntu.html&lt;br /&gt;&lt;br /&gt;［LAMP 環境］&lt;br /&gt;&lt;a href="http://zx-1986.blogspot.com/2010/09/lamp-on-ubuntu.html"&gt;架設 Ubuntu Web Server&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;［安裝 Ruby］&lt;br /&gt;&lt;pre class="brush: bash"&gt;sudo apt-get install ruby&lt;br /&gt;sudo apt-get install ruby-dev&lt;br /&gt;sudo apt-get install irb libruby libopenssl-ruby ri rdoc&lt;br /&gt;sudo apt-get update&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;［安裝 RubyGems］&lt;br /&gt;&lt;pre class="brush: bash"&gt;sudo su -&lt;br /&gt;cd /opt&lt;br /&gt;wget http://production.cf.rubygems.org/rubygems/rubygems-1.8.10.tgz&lt;br /&gt;tar zxvf rubygems*&lt;br /&gt;cd rubygems*&lt;br /&gt;ruby --version&lt;br /&gt;ruby setup.rb --help&lt;br /&gt;ruby setup.rb&lt;br /&gt;ln -s /usr/bin/gem1.8 /usr/bin/gem&lt;br /&gt;&lt;/pre&gt;&lt;del&gt;sudo apt-get install rubygems&lt;/del&gt;&lt;br /&gt;# 註：如果可以，盡量使用 Ruby 來編譯安裝 RubyGems&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;［安裝需要的 Gems］&lt;br /&gt;&lt;pre class="brush: bash"&gt;sudo su -&lt;br /&gt;gem install -v=0.8.7 rake&lt;br /&gt;gem install -v=1.1.1 rack&lt;br /&gt;gem install -v=0.4.2 i18n&lt;br /&gt;&lt;br /&gt;gem install -v=2.3.11 rails &lt;br /&gt;# 註：打包好的 Redmine 內（非原始碼包）已經自帶了 Rails（vendor/rails）&lt;br /&gt;&lt;br /&gt;# Gems 預設會放在：/usr/lib/ruby/gems/1.8&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;［SQLite 資料庫］&lt;br /&gt;假設是使用 sqlite3，需要補充必要套件：&lt;br /&gt;&lt;pre class="brush: bash"&gt;sudo apt-get install sqlite3 sqlite3-doc&lt;br /&gt;sudo apt-get install libsqlite3-ruby&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;［下載 Redmine 程式］&lt;br /&gt;&lt;pre class="brush: bash"&gt;cd /var/www/&lt;br /&gt;wget  http://rubyforge.org/frs/download.php/75099/redmine-1.2.1.zip&lt;br /&gt;unzip redmine*.zip&lt;br /&gt;mv redmine*.zip /tmp&lt;br /&gt;mv redmine* redmine&lt;br /&gt;&lt;/pre&gt;&lt;del&gt;&lt;br /&gt;使用 svn 直接同步 Redmine 的線上原始檔，所以先安裝 svn：&lt;br /&gt;sudo apt-get install subversion&lt;br /&gt;&lt;br /&gt;假設要將 Redmine 部署在 /var/www/ 底下，執行：&lt;br /&gt;cd /var/www&lt;br /&gt;svn checkout http://redmine.rubyforge.org/svn/branches/1.1-stable redmine-1.1&lt;br /&gt;&lt;/del&gt;&lt;br /&gt;&lt;br /&gt;［Redmine 的資料庫設定］&lt;br /&gt;修改 conf 資料夾下的 database.yml：&lt;br /&gt;&lt;pre class="brush: bash"&gt;cd /var/www/redmine/config&lt;br /&gt;cp database.yml.example database.yml&lt;br /&gt;vim database.yml&lt;br /&gt;&lt;/pre&gt;將 database.yml 預設 MySQL (default setup) 內容全部註解起來。&lt;br /&gt;檔案最開頭，補上：&lt;br /&gt;&lt;pre class="brush: bash"&gt;production:&lt;br /&gt;  adapter: sqlite3&lt;br /&gt;  database: db/redmine.db&lt;br /&gt; &lt;br /&gt;development:&lt;br /&gt;  adapter: sqlite3&lt;br /&gt;  database: db/redmine.db&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;［相關的資料夾設置］&lt;br /&gt;&lt;pre class="brush: bash"&gt;cd /var/www/redmine&lt;br /&gt;mkdir -p tmp public/plugin_assets&lt;br /&gt;sudo chown -R www-data.www-data files log tmp public/plugin_assets&lt;br /&gt;sudo chmod -R 755 files log tmp public/plugin_assets&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;［執行 Rake 進行部署］&lt;br /&gt;&lt;pre class="brush: bash"&gt;chown -R www-data.www-data /var/www/redmine  # 避免權限問題，把 Redmine 給 HTTP Server 控制者&lt;br /&gt;cd /var/www/redmine&lt;br /&gt;ruby script/about&lt;br /&gt;/var/lib/gems/1.8/bin/rake generate_session_store  # Ubuntu Desktop&lt;br /&gt;RAILS_ENV=production /var/lib/gems/1.8/bin/rake db:migrate&lt;br /&gt;RAILS_ENV=production /var/lib/gems/1.8/bin/rake redmine:load_default_data&lt;br /&gt;&lt;/pre&gt;Ubuntu 系統預設不會把 /var/lib/gems/1.8/bin 加到環境路徑。&lt;br /&gt;所以呼叫 Rake 程式時，需要使用絕對路徑：/var/lib/gems/1.8/bin/rake&lt;br /&gt;當然，你可以選擇把這個路徑加到系統的 PATH 變數 [Ref. 03]。&lt;br /&gt;或者，直接使用 apt-get 安裝一個系統層級的 Rake 套件，但不建議 [Ref. 04]。&lt;br /&gt;&lt;br /&gt;在 Ubuntu Server 版的環境中，Rake 的絕對路徑預設是：&lt;br /&gt;/usr/lib/ruby/gems/1.8/gems/rake-0.8.7/bin/rake&lt;br /&gt;&lt;br /&gt;［測試 Redmine］&lt;br /&gt;使用 Ruby 附帶的 WEBrick Web Server 測試啓動 Redmine：&lt;br /&gt;&lt;pre class="brush: bash"&gt;cd /var/www/redmine&lt;br /&gt;ruby script/server webrick -e production&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;預設的連結是本地端的 3000 埠：&lt;br /&gt;http://localhost:3000&lt;br /&gt;&lt;br /&gt;預設管理者的帳號密碼是：&lt;br /&gt;admin/admin&lt;br /&gt;&lt;br /&gt;Redmine 佈景主題安裝很簡單，推薦一個不錯的：&lt;a href="http://www.pixel-cookers.com/2010/03/05/theme-redmine-pixel-cookers/"&gt;Pixel Cookers&lt;/a&gt;&lt;br /&gt;將佈景主題下載到 /var/www/redmine/public/themes 下，解壓縮就可以用了。&lt;br /&gt;&lt;br /&gt;Redmine 主頁面的 html 可以修改這個檔案：&lt;br /&gt;/var/www/redmine/app/views/layouts/base.rhtml&lt;br /&gt;&lt;br /&gt;＊&lt;br /&gt;&lt;br /&gt;【run with Apache】&lt;br /&gt;&lt;br /&gt;補充必要套件：&lt;br /&gt;&lt;pre class="brush:bash"&gt;sudo apt-get install build-essential&lt;br /&gt;sudo apt-get install apache2-prefork-dev libaprutil1-dev libapr1-dev libcurl4-openssl-dev&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;使用 RubyGems 安裝 Phusion Passenger 及其 Passenger Apache2 Module。&lt;br /&gt;Passenger 也叫做 mod_rails 或 mod_rack，類似 mod_ruby 那種角色。&lt;br /&gt;Passenger Apache2 Module 安裝過程會出現互動選項，請務必謹慎閱讀與選擇。&lt;br /&gt;不同環境的執行結果或許有出入，以下僅記錄我個人環境執行的訊息：&lt;br /&gt;&lt;pre class="brush:bash"&gt;sudo gem install passenger&lt;br /&gt;sudo /var/lib/gems/1.8/bin/passenger-install-apache2-module&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Passenger Apache2 Module 安裝開始時的貼心說明：&lt;br /&gt;&lt;pre class="brush:bash"&gt;Here's what you can expect from the installation process:&lt;br /&gt;&lt;br /&gt; 1. The Apache 2 module will be installed for you.&lt;br /&gt; 2. You'll learn how to configure Apache.&lt;br /&gt; 3. You'll learn how to deploy a Ruby on Rails application.&lt;br /&gt;# 安裝會完成的三件事。&lt;br /&gt;&lt;br /&gt;Don't worry if anything goes wrong. This installer will advise you on how to solve any problems.&lt;br /&gt;# 都說 do not worry 了，那就 do not worry 吧！哈哈！&lt;br /&gt;# 如果真的出現什麼問題，就照它指示的修正，然後再重新執行安裝。&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;編譯與佈置完成後出現的訊息：&lt;br /&gt;&lt;pre class="brush:bash"&gt;The Apache 2 module was successfully installed.&lt;br /&gt;&lt;br /&gt;Please edit your Apache configuration file, and add these lines:&lt;br /&gt;# 下面這三行是要寫到 /etc/apache2/apache2.conf 的。&lt;br /&gt;   LoadModule passenger_module /var/lib/gems/1.8/gems/passenger-3.0.2/ext/apache2/mod_passenger.so&lt;br /&gt;   PassengerRoot /var/lib/gems/1.8/gems/passenger-3.0.2&lt;br /&gt;   PassengerRuby /usr/bin/ruby1.8&lt;br /&gt;&lt;br /&gt;After you restart Apache, you are ready to deploy any number of Ruby on Rails&lt;br /&gt;applications on Apache, without any further Ruby on Rails-specific&lt;br /&gt;configuration!&lt;br /&gt;--------------------------------------------&lt;br /&gt;Deploying a Ruby on Rails application: an example&lt;br /&gt;&lt;br /&gt;Suppose you have a Rails application in /somewhere. Add a virtual host to your&lt;br /&gt;Apache configuration file and set its DocumentRoot to /somewhere/public:&lt;br /&gt;# 在 /etc/apache2/sites-available 底下新增一個檔案叫：redmine&lt;br /&gt;# 並且把底下這段複製貼到 redmine 這個虛擬主機設定檔&lt;br /&gt;  ＜virtualhost *:80＞&lt;br /&gt;      ServerName www.yourhost.com&lt;br /&gt;      DocumentRoot /somewhere/public    # &lt;-- be sure to point to 'public'!&lt;br /&gt;      ＜directory /somewhere/public＞&lt;br /&gt;         AllowOverride all              # &lt;-- relax Apache security settings&lt;br /&gt;         Options -MultiViews            # &lt;-- MultiViews must be turned off&lt;br /&gt;      ＜/Directory＞&lt;br /&gt;   ＜/VirtualHost＞&lt;br /&gt;# 注意！裡面的 /somewhere/public 要改成 /var/www/redmine/public 的絕對路徑&lt;br /&gt;# ServerName 可以設定成 localhost&lt;br /&gt;# 因爲技術問題，請自行把上文全形的＜＞換成 &lt;&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;當 /etc/apache2/apache2.conf 與 /etc/apache2/site-available/redmine 都配置好。&lt;br /&gt;執行：&lt;br /&gt;&lt;pre class="brush:bash"&gt;sudo chown -R www-data:www-data /var/www/redmine&lt;br /&gt;sudo a2ensite redmine&lt;br /&gt;sudo service apache2 restart&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;連線 http://localhost:80 測試。&lt;br /&gt;&lt;br /&gt;Reference：&lt;br /&gt;01. http://www.redmine.org/projects/redmine/wiki/RedmineInstall&lt;br /&gt;02. http://www.redmine.org/projects/redmine/wiki/RedmineRepositories&lt;br /&gt;03. http://stackoverflow.com/questions/1664974/rake-command-not-found&lt;br /&gt;04. http://fak3r.com/geek/ruby-on-rails-gem-install-versus-apt-get&lt;br /&gt;05. http://www.redmine.org/issues/8325&lt;br /&gt;06. http://www.redmine.org/boards/2/topics/26138&lt;br /&gt;07. http://jugemchosuke.blogspot.com/2011/06/redmine-1.html&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18689056-8721479624022528515?l=zx-1986.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://zx-1986.blogspot.com/feeds/8721479624022528515/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://zx-1986.blogspot.com/2011/02/redmind.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18689056/posts/default/8721479624022528515'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18689056/posts/default/8721479624022528515'/><link rel='alternate' type='text/html' href='http://zx-1986.blogspot.com/2011/02/redmind.html' title='Ubuntu 安裝 Redmine'/><author><name>張旭</name><uri>https://profiles.google.com/105134833883146274095</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-pO0m_C6_zQw/AAAAAAAAAAI/AAAAAAAAD0c/h7KNyAUN14w/s512-c/photo.jpg'/></author><thr:total>0</thr:total><georss:featurename>Taipei City, Taiwan</georss:featurename><georss:point>25.091075 121.5598345</georss:point><georss:box>24.976033 121.401906 25.206117 121.71776299999999</georss:box></entry><entry><id>tag:blogger.com,1999:blog-18689056.post-4063828290250666644</id><published>2011-11-23T15:11:00.000+08:00</published><updated>2011-11-23T15:11:12.953+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='redmine'/><category scheme='http://www.blogger.com/atom/ns#' term='ubuntu'/><title type='text'>使用 apt-get 安裝 Redmine</title><content type='html'>＊其實不推薦使用 apt-get 安裝，Redmine 或 Rails 的更新常會造成整個網站垮掉 ....&lt;br /&gt;&lt;br /&gt;環境：Ubuntu Server 10.04&lt;br /&gt;&lt;br /&gt;【快速安裝】&lt;br /&gt;&lt;br /&gt;編輯 apt 來源：&lt;br /&gt;sudo vim /etc/apt/source.list&lt;br /&gt;&lt;br /&gt;在檔案最後加上：&lt;br /&gt;deb http://ppa.launchpad.net/ondrej/redmine/ubuntu lucid main&lt;br /&gt;deb-src http://ppa.launchpad.net/ondrej/redmine/ubuntu lucid main&lt;br /&gt;&lt;br /&gt;執行：&lt;br /&gt;sudo apt-get install apache2 sqlite3&lt;br /&gt;sudo apt-get install redmine&lt;br /&gt;sudo ln -s /usr/share/redmine/public /var/www/redmine&lt;br /&gt;&lt;br /&gt;移除：&lt;br /&gt;sudo apt-get autoremove redmine&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;【環境設定】&lt;br /&gt;&lt;br /&gt;如果需要設定 apt-get 的 proxy：&lt;br /&gt;&lt;pre class="brush:bash"&gt;vim /etc/apt/apt.conf.d/70debconf&lt;br /&gt;&lt;br /&gt;加入：&lt;br /&gt;Acquire::http::Proxy "http://YOUR_PROXY_SERVER:YOUR_PROXY_PROT";&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;先把 Redmine 的 PPA 加入 apt-get sources.list：&lt;br /&gt;&lt;pre class="brush:bash"&gt;sudo add-apt-repository ppa:ondrej/redmine&lt;br /&gt;&lt;/pre&gt;如果以上步驟有問題，則手動 import GPG Public Key。&lt;br /&gt;下載 Redmine PPA 的 Public Key。&lt;br /&gt;（http://keyserver.ubuntu.com:11371/pks/lookup?op=get&amp;search=0x4F4EA0AAE5267A6C）&lt;br /&gt;把內容復制存成文字檔 redmine.public.key，然後：&lt;br /&gt;&lt;pre class="brush:bash"&gt;sudo apt-key add redmine.public.key&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;pre class="brush:bash"&gt;sudo apt-get install python-software-properties&lt;br /&gt;sudo apt-get update&lt;br /&gt;sudo apt-get upgrade&lt;br /&gt;sudo apt-get install apparmor-profiles&lt;br /&gt;sudo apt-get install tasksel&lt;br /&gt;sudo tasksel install lamp-server&lt;br /&gt;sudo aa-complain /usr/sbin/mysqld&lt;br /&gt;sudo apt-get install redmine redmine-mysql subversion&lt;br /&gt;sudo aa-enforce /usr/sbin/mysqld&lt;br /&gt;sudo ln -s /usr/share/redmine/public /var/www/redmine&lt;br /&gt;sudo apt-get install libapache2-mod-passenger&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;vim /etc/apache2/mods-available/passenger.conf 加入：&lt;br /&gt;&lt;pre class="brush:bash"&gt;PassengerDefaultUser www-data &lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;vim /etc/apache2/sites-available/redmine&lt;br /&gt;&lt;pre class="brush:bash"&gt;＜directory/var/www/redmine＞&lt;br /&gt;    RailsBaseURI /redmine&lt;br /&gt;    PassengerResolveSymlinksInDocumentRoot on&lt;br /&gt;＜/Directory＞&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;pre class="brush:bash"&gt;sudo chmod a+x /usr/share/redmine/public&lt;br /&gt;sudo a2enmod passenger&lt;br /&gt;sudo a2ensite redmine&lt;br /&gt;sudo /etc/init.d/apache2 restart&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;檢查 http://localhost/redmine&lt;br /&gt;&lt;br /&gt;預設的資料庫名稱：redmine_default&lt;br /&gt;預設的資料庫帳號：redmine&lt;br /&gt;預設的資料庫密碼：安裝過程中使用者設定&lt;br /&gt;預設的資料庫設定：/etc/redmine/default/database.yml&lt;br /&gt;預設檔案儲存路徑：/var/lib/redmine/default/files/&lt;br /&gt;Redmine 安裝路徑：/usr/share/redmine&lt;br /&gt;&lt;br /&gt;Reference：&lt;br /&gt;http://zx-1986.blogspot.com/2011/02/redmind.html&lt;br /&gt;https://help.ubuntu.com/community/AppArmor&lt;br /&gt;https://help.ubuntu.com/community/Tasksel&lt;br /&gt;www.redmine.org/projects/redmine/wiki/HowTo_Install_Redmine_in_Ubuntu&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18689056-4063828290250666644?l=zx-1986.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://zx-1986.blogspot.com/feeds/4063828290250666644/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://zx-1986.blogspot.com/2011/05/redmine-in-ubuntu.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18689056/posts/default/4063828290250666644'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18689056/posts/default/4063828290250666644'/><link rel='alternate' type='text/html' href='http://zx-1986.blogspot.com/2011/05/redmine-in-ubuntu.html' title='使用 apt-get 安裝 Redmine'/><author><name>張旭</name><uri>https://profiles.google.com/105134833883146274095</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-pO0m_C6_zQw/AAAAAAAAAAI/AAAAAAAAD0c/h7KNyAUN14w/s512-c/photo.jpg'/></author><thr:total>0</thr:total><georss:featurename>No. 110, Lane 21, Wénhú St, Neihu District, Taipei City, Taiwan 114</georss:featurename><georss:point>25.091075 121.5598345</georss:point><georss:box>24.976033 121.401906 25.206117 121.71776299999999</georss:box></entry><entry><id>tag:blogger.com,1999:blog-18689056.post-580844278041864944</id><published>2011-11-20T08:31:00.001+08:00</published><updated>2011-11-20T08:41:10.758+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='redhat'/><category scheme='http://www.blogger.com/atom/ns#' term='ftp'/><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><title type='text'>vsftpd</title><content type='html'>Very Secure FTP Daemon&lt;br /&gt;&lt;br /&gt;yum install vsftpd&lt;br /&gt;yum install libdb3-util&lt;br /&gt;&lt;br /&gt;/etc/vsftpd/vsftpd.conf&lt;br /&gt;&lt;br /&gt;Reference：&lt;br /&gt;http://ubuntuforums.org/showthread.php?t=518293&lt;br /&gt;http://ubuntuforums.org/showthread.php?p=3497743&lt;br /&gt;http://www.linuxfocus.org/English/July2004/article341.shtml&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18689056-580844278041864944?l=zx-1986.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://zx-1986.blogspot.com/feeds/580844278041864944/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://zx-1986.blogspot.com/2011/11/vsftp.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18689056/posts/default/580844278041864944'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18689056/posts/default/580844278041864944'/><link rel='alternate' type='text/html' href='http://zx-1986.blogspot.com/2011/11/vsftp.html' title='vsftpd'/><author><name>張旭</name><uri>https://profiles.google.com/105134833883146274095</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-pO0m_C6_zQw/AAAAAAAAAAI/AAAAAAAAD0c/h7KNyAUN14w/s512-c/photo.jpg'/></author><thr:total>0</thr:total><georss:featurename>Taipei City, Taiwan</georss:featurename><georss:point>25.091075 121.5598345</georss:point><georss:box>24.976033 121.401906 25.206117 121.71776299999999</georss:box></entry><entry><id>tag:blogger.com,1999:blog-18689056.post-104512255154193348</id><published>2011-11-07T14:15:00.000+08:00</published><updated>2011-11-23T15:30:31.975+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ruby'/><category scheme='http://www.blogger.com/atom/ns#' term='redhat'/><category scheme='http://www.blogger.com/atom/ns#' term='git'/><category scheme='http://www.blogger.com/atom/ns#' term='rails'/><title type='text'>Redhat 安裝 Gitlabhq</title><content type='html'>作業系統：RHEL 6.0 i386&lt;br /&gt;&lt;pre class="brush:bash"&gt;ssh root@server&lt;br /&gt;&lt;br /&gt;cd /opt &lt;br /&gt;&lt;br /&gt;wget http://download.fedoraproject.org/pub/epel/6/i386/epel-release-6-5.noarch.rpm &amp;&amp; rpm -i *.rpm&lt;br /&gt;&lt;br /&gt;yum groupinstall "Development Tools" # thanks for http://dejant.blogspot.com&lt;br /&gt;&lt;br /&gt;yum install libxml2-devel libxslt-devel # thanks for http://dejant.blogspot.com&lt;br /&gt;&lt;br /&gt;yum install git libxml2 libxslt sqlite sqlite-devel openssl zlib mysql++-devel mysql++ readline-devel compat-readline5 readline libcurl libcurl-devel libstdc++ libstdc++-devel libstdc++-docs compat-libstdc++-33&lt;br /&gt;&lt;br /&gt;yum install python-pip&lt;br /&gt;&lt;br /&gt;pip-python install pygments&lt;br /&gt;&lt;br /&gt;# yum install python-setuptools&lt;br /&gt;&lt;br /&gt;# easy_install pygments&lt;br /&gt;&lt;br /&gt;adduser gitlabhq&lt;br /&gt;&lt;br /&gt;passwd gitlabhq&lt;br /&gt;&lt;br /&gt;visudo  #  gitlabhq    ALL=(ALL)    NOPASSWD: ALL&lt;br /&gt;&lt;br /&gt;sudo https_proxy="YOUR_HTTPS_PROXY" bash &lt; &lt;(curl -s https://rvm.beginrescueend.com/install/rvm)   #  using sudo for multi-users installed!&lt;br /&gt;&lt;br /&gt;# logout, then login as root again&lt;br /&gt;&lt;br /&gt;rvm install 1.9.2  &lt;br /&gt;&lt;br /&gt;rvm --default use 1.9.2&lt;br /&gt;&lt;br /&gt;ruby --version&lt;br /&gt;&lt;br /&gt;# echo "gem: --no-rdoc --no-ri" &gt; ~/.gemrc&lt;br /&gt;&lt;br /&gt;gem update --system  &lt;br /&gt;&lt;br /&gt;gem install bundler&lt;br /&gt;&lt;br /&gt;echo $rvm_path/src/$(rvm tools strings) &lt;br /&gt;&lt;br /&gt;rvm @global gem install ruby-debug19 -- --with-ruby-include=$rvm_path/src/$(rvm tools strings)&lt;br /&gt;&lt;br /&gt;exit&lt;br /&gt;&lt;br /&gt;###&lt;br /&gt;&lt;br /&gt;ssh gitlabhq@server&lt;br /&gt;&lt;br /&gt;ssh-keygen -t rsa&lt;br /&gt;&lt;br /&gt;sudo yum install gitosis&lt;br /&gt;&lt;br /&gt;sudo adduser -r -s /bin/sh -c 'git version control' -U -m git&lt;br /&gt;&lt;br /&gt;sudo usermod -a -G git gitlabhq&lt;br /&gt;&lt;br /&gt;sudo usermod -a -G rvm gitlabhq&lt;br /&gt;&lt;br /&gt;sudo -H -u git gitosis-init &lt; /home/gitlabhq/.ssh/id_rsa.pub&lt;br /&gt;&lt;br /&gt;sudo chmod 755 /home/git&lt;br /&gt;&lt;br /&gt;sudo chmod 755 /home/git/repositories/gitosis-admin.git/hooks/post-update&lt;br /&gt;&lt;br /&gt;###&lt;br /&gt;&lt;br /&gt;cd ~&lt;br /&gt;&lt;br /&gt;git clone https://github.com/gitlabhq/gitlabhq.git&lt;br /&gt;&lt;br /&gt;cd gitlabhq&lt;br /&gt;&lt;br /&gt;vim Gemfile # :%s/git:/https:/g&lt;br /&gt;&lt;br /&gt;vim Gemfile.lock # :%s/git:/https:/g&lt;br /&gt;&lt;br /&gt;sudo su -&lt;br /&gt;&lt;br /&gt;cd /home/gitlabhq/gitlabhq&lt;br /&gt;&lt;br /&gt;bundle install # run the "bundle install" as "root" to avoid the permission issue at first time&lt;br /&gt;&lt;br /&gt;cd /usr/local/rvm/gems/ruby-1.9.2-p290/bundler/gems&lt;br /&gt;&lt;br /&gt;mv ./* /tmp&lt;br /&gt;&lt;br /&gt;exit&lt;br /&gt;&lt;br /&gt;bundle install # run the "bundle install" as "gitlabhq" to make sure all gems in gitlabhq/ grant to "gitlabhq"&lt;br /&gt;&lt;br /&gt;bundle exec rake db:setup RAILS_ENV=production&lt;br /&gt;&lt;br /&gt;bundle exec rake db:seed_fu RAILS_ENV=production&lt;br /&gt;&lt;br /&gt;vim config/gitosis.yml  # 檢查內容與路徑&lt;br /&gt;&lt;br /&gt;rails s -e production # 啟動測試服務器&lt;br /&gt;&lt;br /&gt;# 測試網址&lt;br /&gt;# http://localhost:3000&lt;br /&gt;&lt;br /&gt;# 預設的帳號密碼&lt;br /&gt;# admin@local.host / 5iveL!fe&lt;br /&gt;&lt;/pre&gt;&lt;pre class="brush:bash"&gt;# 搭載 Nginx&lt;br /&gt;&lt;br /&gt;sudo su -&lt;br /&gt;&lt;br /&gt;# yum remove httpd&lt;br /&gt;&lt;br /&gt;gem install passenger&lt;br /&gt;&lt;br /&gt;passenger-install-nginx-module&lt;br /&gt;&lt;br /&gt;# 選擇 1. Yes: download, compile and install Nginx for me. (recommended)&lt;br /&gt;# passenger-install-nginx-module 會自動下載并編譯安裝 Nginx，預設裝到 /opt/nginx&lt;br /&gt;&lt;br /&gt;vim /opt/nginx/conf/nginx.conf&lt;br /&gt;# ---&lt;br /&gt;user gitlabhq;&lt;br /&gt; &lt;br /&gt;server {&lt;br /&gt;  listen 80;&lt;br /&gt;  server_name YOUR_IP_ADDRESS;&lt;br /&gt;  root /home/gitlabhq/gitlabhq/public;&lt;br /&gt;  passenger_enabled on;&lt;br /&gt;}&lt;br /&gt;# ---&lt;br /&gt;&lt;br /&gt;/opt/nginx/sbin/nginx # start Nginx server&lt;br /&gt;/opt/nginx/sbin/nginx -s stop # stop Nginx server&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Reference：&lt;br /&gt;http://isitruby19.com/linecache19&lt;br /&gt;https://github.com/carlhuda/bundler/issues/1356&lt;br /&gt;https://github.com/mark-moseley/linecache/issues/8&lt;br /&gt;https://github.com/gitlabhq/gitlabhq/issues/66&lt;br /&gt;https://github.com/gitlabhq/gitlabhq/issues/34&lt;br /&gt;https://github.com/gitlabhq/gitlabhq/issues/84&lt;br /&gt;https://github.com/gitlabhq/gitlabhq/issues/141&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18689056-104512255154193348?l=zx-1986.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://zx-1986.blogspot.com/feeds/104512255154193348/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://zx-1986.blogspot.com/2011/11/gitlabhq-in-redhat.html#comment-form' title='19 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18689056/posts/default/104512255154193348'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18689056/posts/default/104512255154193348'/><link rel='alternate' type='text/html' href='http://zx-1986.blogspot.com/2011/11/gitlabhq-in-redhat.html' title='Redhat 安裝 Gitlabhq'/><author><name>張旭</name><uri>https://profiles.google.com/105134833883146274095</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-pO0m_C6_zQw/AAAAAAAAAAI/AAAAAAAAD0c/h7KNyAUN14w/s512-c/photo.jpg'/></author><thr:total>19</thr:total><georss:featurename>Taipei City, Taiwan</georss:featurename><georss:point>25.091075 121.5598345</georss:point><georss:box>24.976033 121.401906 25.206117 121.71776299999999</georss:box></entry><entry><id>tag:blogger.com,1999:blog-18689056.post-6274330610953929696</id><published>2011-11-07T09:31:00.000+08:00</published><updated>2011-11-23T10:57:33.427+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='git'/><category scheme='http://www.blogger.com/atom/ns#' term='rails'/><category scheme='http://www.blogger.com/atom/ns#' term='ubuntu'/><title type='text'>Ubuntu 安裝 Gitlabhq</title><content type='html'>在 Ubuntu 11.04 Server 安裝 Gitlabhq&lt;br /&gt;&lt;br /&gt;IT WON'T WORK UNDER MY TESTING.&lt;br /&gt;目前還無法正常運作 ....&lt;br /&gt;&lt;br /&gt;but it works in RHEL 6 !&lt;br /&gt;http://zx-1986.blogspot.com/2011/11/gitlabhq-in-redhat.html&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush:bash"&gt;su -&lt;br /&gt;export http_proxy="your_proxy"&lt;br /&gt;export https_proxy="your_proxy"&lt;br /&gt;apt-get update &amp;&amp; apt-get upgrade&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;設定 Ruby 環境&lt;br /&gt;&lt;pre class="brush:bash"&gt;apt-get install git-core curl gcc checkinstall make build-essential &lt;br /&gt;apt-get install libxml2-dev libxslt-dev sqlite3 libsqlite3-dev libcurl4-openssl-dev libreadline5-dev libc6-dev libssl-dev libmysql++-dev zlib1g-dev&lt;br /&gt;bash &lt; &lt;(curl -s https://rvm.beginrescueend.com/install/rvm)&lt;br /&gt;source /etc/bash.bashrc&lt;br /&gt;rvm install 1.9.2&lt;br /&gt;rvm install 1.9.3&lt;br /&gt;rvm --default use 1.9.2&lt;br /&gt;gem update --system&lt;br /&gt;echo "gem: --no-rdoc --no-ri" &gt; ~/.gemrc&lt;br /&gt;&lt;/pre&gt;注意：使用的是 rvm 管控下的 Ruby 1.9.2 與其搭配的 rubygems&lt;br /&gt;&lt;br /&gt;安裝 Gitosis&lt;br /&gt;&lt;pre class="brush:bash"&gt;apt-get install git gitosis&lt;br /&gt;adduser --system --shell /bin/sh --gecos 'git version control' --group --disabled-password --home /home/git git&lt;br /&gt;ssh-keygen -t rsa&lt;br /&gt;sudo -H -u git gitosis-init &lt; ~/.ssh/id_rsa.pub&lt;br /&gt;chmod 755 /home/git/repositories/gitosis-admin.git/hooks/post-update&lt;br /&gt;&lt;/pre&gt;安裝 Gitlabhq&lt;pre class="brush:bash"&gt;cd /opt&lt;br /&gt;pip install pygments&lt;br /&gt;apt-get install python-setuptools&lt;br /&gt;easy_install pygments&lt;br /&gt;apt-get install libsqlite3-dev&lt;br /&gt;gem install bundler&lt;br /&gt;git clone https://github.com/gitlabhq/gitlabhq.git&lt;br /&gt;cd gitlabhq&lt;br /&gt;vim Gemfile # :%s/git:/https:/g&lt;br /&gt;vim Gemfile.lock # :%s/git:/https:/g&lt;br /&gt;echo $rvm_path/src/$(rvm tools strings) &lt;br /&gt;rvm @global gem install ruby-debug19 -- --with-ruby-include=$rvm_path/src/$(rvm tools strings)&lt;br /&gt;bundle install&lt;br /&gt;bundle exec rake db:setup RAILS_ENV=production&lt;br /&gt;bundle exec rake db:seed_fu RAILS_ENV=production&lt;br /&gt;vim /opt/gitlabhq/config/gitosis.yml  # 檢查內容與路徑&lt;br /&gt;rails s -e production # 啟動測試服務器&lt;br /&gt;&lt;br /&gt;# 測試網址&lt;br /&gt;http://localhost:3000&lt;br /&gt;&lt;br /&gt;# 預設的帳號密碼&lt;br /&gt;admin@local.host / 5iveL!fe&lt;br /&gt;&lt;/pre&gt;安裝 Nginx&lt;pre class="brush:bash"&gt;apt-get autoremove apache2*&lt;br /&gt;dpkg --purge apache2*&lt;br /&gt;apt-get install nginx&lt;br /&gt;gem install passenger&lt;br /&gt;passenger-install-nginx-module&lt;br /&gt;&lt;br /&gt;# 選擇 1. Yes: download, compile and install Nginx for me. (recommended)&lt;br /&gt;# passenger-install-nginx-module 會自動下載并編譯安裝 Nginx，預設裝到 /opt/nginx&lt;br /&gt;&lt;/pre&gt;設定 Nginx 當作 Gitlabhq 的 Server&lt;pre class="brush:bash"&gt;vim /opt/nginx/conf/nginx.conf&lt;br /&gt;# ---&lt;br /&gt;user root;&lt;br /&gt;&lt;br /&gt;server {&lt;br /&gt;  listen 80;&lt;br /&gt;  server_name gitlabhq;&lt;br /&gt;  root /opt/gitlabhq/public;&lt;br /&gt;  passenger_enabled on;&lt;br /&gt;}&lt;br /&gt;# ---&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Reference：&lt;br /&gt;http://isitruby19.com/linecache19&lt;br /&gt;https://github.com/carlhuda/bundler/issues/1356&lt;br /&gt;https://github.com/mark-moseley/linecache/issues/8&lt;br /&gt;https://github.com/gitlabhq/gitlabhq/issues/66&lt;br /&gt;https://github.com/gitlabhq/gitlabhq/issues/34&lt;br /&gt;https://github.com/gitlabhq/gitlabhq/issues/84&lt;br /&gt;https://github.com/gitlabhq/gitlabhq/issues/141&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18689056-6274330610953929696?l=zx-1986.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://zx-1986.blogspot.com/feeds/6274330610953929696/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://zx-1986.blogspot.com/2011/11/gitlabhq.html#comment-form' title='5 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18689056/posts/default/6274330610953929696'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18689056/posts/default/6274330610953929696'/><link rel='alternate' type='text/html' href='http://zx-1986.blogspot.com/2011/11/gitlabhq.html' title='Ubuntu 安裝 Gitlabhq'/><author><name>張旭</name><uri>https://profiles.google.com/105134833883146274095</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-pO0m_C6_zQw/AAAAAAAAAAI/AAAAAAAAD0c/h7KNyAUN14w/s512-c/photo.jpg'/></author><thr:total>5</thr:total><georss:featurename>Taipei City, Taiwan</georss:featurename><georss:point>25.091075 121.5598345</georss:point><georss:box>24.975944 121.401906 25.206206 121.71776299999999</georss:box></entry><entry><id>tag:blogger.com,1999:blog-18689056.post-8910143355874448432</id><published>2011-10-26T08:55:00.000+08:00</published><updated>2011-10-26T09:22:47.054+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><category scheme='http://www.blogger.com/atom/ns#' term='database'/><category scheme='http://www.blogger.com/atom/ns#' term='hadoop'/><title type='text'>IEH 20111025</title><content type='html'>2011/10/25 於 d`Cafe 的聚會筆記&lt;br /&gt;&lt;br /&gt;［NoSQL ，MongoDB，Neo4j，Graph Database ...］&lt;br /&gt;&lt;br /&gt;［Hadoop］&lt;br /&gt;HDFS：是基礎建設，就像地基，是根本中的根本。&lt;br /&gt;MapReduce：精華！大絕招！&lt;br /&gt;HBase：Google Big Table，base on HDFS 的資料庫。&lt;br /&gt;Cassandra：&lt;br /&gt;Avro：&lt;br /&gt;Hive：&lt;br /&gt;Mahout：&lt;br /&gt;Zookeeper：後面有一堆好用的 MapReduce 函式（工具？）可以呼叫使用&lt;br /&gt;Pig：類似 SQL，是一種資料庫語言&lt;br /&gt;Apache 有 Top Project 跟非 Top Project，&lt;br /&gt;Hadoop 相關的 Sub Project 一堆都是 Top Project。&lt;br /&gt;&lt;br /&gt;很棒的 hadoop 演講：&lt;br /&gt;http://www.youtube.com/watch?v=3NAP5rk9Nzs&lt;br /&gt;&lt;br /&gt;［Design Patten，無招勝有招，禪 ...］&lt;br /&gt;Strategy&lt;br /&gt;Template Method&lt;br /&gt;Visitor：不同的專家去扣問不同的問題&lt;br /&gt;Mediator&lt;br /&gt;Observer&lt;br /&gt;&lt;br /&gt;Reference：&lt;br /&gt;http://neo4j.org/&lt;br /&gt;http://www.mongodb.org/&lt;br /&gt;http://www.readwriteweb.com/cloud/2011/04/5-graph-databases-to-consider.php&lt;br /&gt;http://en.wikipedia.org/wiki/Graph_database&lt;br /&gt;http://hadoop.apache.org/&lt;br /&gt;http://hadoop.apache.org/common/docs/current/mapred_tutorial.html&lt;br /&gt;http://www.jaceju.net/blog/archives/1828&lt;br /&gt;http://coolshell.cn/articles/4844.html&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18689056-8910143355874448432?l=zx-1986.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://zx-1986.blogspot.com/feeds/8910143355874448432/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://zx-1986.blogspot.com/2011/10/ieh-20111025.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18689056/posts/default/8910143355874448432'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18689056/posts/default/8910143355874448432'/><link rel='alternate' type='text/html' href='http://zx-1986.blogspot.com/2011/10/ieh-20111025.html' title='IEH 20111025'/><author><name>張旭</name><uri>https://profiles.google.com/105134833883146274095</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-pO0m_C6_zQw/AAAAAAAAAAI/AAAAAAAAD0c/h7KNyAUN14w/s512-c/photo.jpg'/></author><thr:total>0</thr:total><georss:featurename>Taipei City, Taiwan</georss:featurename><georss:point>25.091075 121.5598345</georss:point><georss:box>24.976033 121.401906 25.206117 121.71776299999999</georss:box></entry><entry><id>tag:blogger.com,1999:blog-18689056.post-5764325238086630074</id><published>2011-10-24T09:48:00.001+08:00</published><updated>2011-10-26T08:57:24.831+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ruby'/><category scheme='http://www.blogger.com/atom/ns#' term='redhat'/><category scheme='http://www.blogger.com/atom/ns#' term='python'/><category scheme='http://www.blogger.com/atom/ns#' term='php'/><category scheme='http://www.blogger.com/atom/ns#' term='system'/><category scheme='http://www.blogger.com/atom/ns#' term='ubuntu'/><title type='text'>套件管理員</title><content type='html'>Python：pip&lt;br /&gt;easy_install 或 setuptools 或 ez_setup.py&lt;br /&gt;使用 easy_install 安裝起來放在 site-packages 的 *.egg 類似 Java 的 *.jar&lt;br /&gt;&lt;br /&gt;PHP：Pear&lt;br /&gt;&lt;br /&gt;Ruby：RubyGems&lt;br /&gt;&lt;br /&gt;Perl：CPAN（Comprehensive Perl Archive Network）&lt;br /&gt;&lt;br /&gt;R：CRAN&lt;br /&gt;&lt;br /&gt;Node.js：npm&lt;br /&gt;&lt;br /&gt;Ubuntu：apt-get、dpkg&lt;br /&gt;&lt;br /&gt;Redhat：yum&lt;br /&gt;&lt;br /&gt;Mac：homebrew&lt;br /&gt;&lt;br /&gt;Reference：&lt;br /&gt;01. http://www.ibm.com/developerworks/cn/linux/l-cppeak3.html&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18689056-5764325238086630074?l=zx-1986.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://zx-1986.blogspot.com/feeds/5764325238086630074/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://zx-1986.blogspot.com/2011/10/packages-manager.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18689056/posts/default/5764325238086630074'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18689056/posts/default/5764325238086630074'/><link rel='alternate' type='text/html' href='http://zx-1986.blogspot.com/2011/10/packages-manager.html' title='套件管理員'/><author><name>張旭</name><uri>https://profiles.google.com/105134833883146274095</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-pO0m_C6_zQw/AAAAAAAAAAI/AAAAAAAAD0c/h7KNyAUN14w/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18689056.post-4448372440542889142</id><published>2011-10-23T22:54:00.001+08:00</published><updated>2011-10-26T08:58:20.572+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='sass'/><category scheme='http://www.blogger.com/atom/ns#' term='scss'/><category scheme='http://www.blogger.com/atom/ns#' term='css'/><title type='text'>Sass</title><content type='html'>［Sass］&lt;br /&gt;&lt;br /&gt;sudo apt-get ruby&lt;br /&gt;sudo apt-get rubygems&lt;br /&gt;sudo gem --update system&lt;br /&gt;sudo gem install sass&lt;br /&gt;&lt;br /&gt;［Scss］&lt;br /&gt;&lt;br /&gt;語法改良後的 Sass，同樣使用 sass 命令來編譯，副檔名通常是 *.scss&lt;br /&gt;&lt;br /&gt;［Compass］&lt;br /&gt;&lt;br /&gt;sudo gem install compass&lt;br /&gt;&lt;br /&gt;Reference：&lt;br /&gt;http://sass-lang.com&lt;br /&gt;http://compass-style.org&lt;br /&gt;http://blueprintcss.org&lt;br /&gt;http://960.gs&lt;br /&gt;http://upgrade2rails31.com/sass-scss&lt;br /&gt;http://upgrade2rails31.com/compass&lt;br /&gt;https://github.com/imathis/fancy-buttons&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18689056-4448372440542889142?l=zx-1986.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://zx-1986.blogspot.com/feeds/4448372440542889142/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://zx-1986.blogspot.com/2011/10/sass.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18689056/posts/default/4448372440542889142'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18689056/posts/default/4448372440542889142'/><link rel='alternate' type='text/html' href='http://zx-1986.blogspot.com/2011/10/sass.html' title='Sass'/><author><name>張旭</name><uri>https://profiles.google.com/105134833883146274095</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-pO0m_C6_zQw/AAAAAAAAAAI/AAAAAAAAD0c/h7KNyAUN14w/s512-c/photo.jpg'/></author><thr:total>0</thr:total><georss:featurename>Taipei City, Taiwan</georss:featurename><georss:point>25.091075 121.5598345</georss:point><georss:box>24.976033 121.401906 25.206117 121.71776299999999</georss:box></entry><entry><id>tag:blogger.com,1999:blog-18689056.post-5425025274457868179</id><published>2011-10-23T17:33:00.000+08:00</published><updated>2011-10-26T09:12:45.676+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='coffeescript'/><title type='text'>CoffeeScript</title><content type='html'>&lt;blockquote&gt;&lt;i&gt;CoffeeScript is just JavaScript!&lt;/i&gt;&lt;/blockquote&gt;&lt;br /&gt;CoffeeScript 有自己獨特的語法（類似 Python 混搭 Ruby），&lt;br /&gt;編寫好的 CoffeeScript 檔，透過 CoffeeScript Compiler 可以編譯成通用的 Javascript&lt;br /&gt;&lt;br /&gt;［使用 apt-get 安裝 CoffeeScript Compiler］&lt;br /&gt;&lt;pre class="brush:bash"&gt;sudo apt-get install python&lt;br /&gt;sudo apt-get install openssh-server libssl-dev&lt;br /&gt;sudo apt-get install python-software-properties&lt;br /&gt;sudo add-apt-repository ppa:chris-lea/node.js&lt;br /&gt;sudo add-apt-repository ppa:gias-kay-lee/coffeescript&lt;br /&gt;sudo apt-get update&lt;br /&gt;sudo apt-get install nodejs&lt;br /&gt;sudo apt-get install coffeescript&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;［使用 NPM 安裝 CoffeeScript Compiler］&lt;br /&gt;&lt;br /&gt;要使用 NPM 需要先安裝好 Node.js 環境，請參考：&lt;br /&gt;http://zx-1986.blogspot.com/2011/10/nodejs.html&lt;br /&gt;&lt;br /&gt;然後執行：&lt;br /&gt;&lt;pre class="brush:bash"&gt;sudo npm install -g coffee-script&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;［編譯安裝 CoffeeScript Compiler］&lt;br /&gt;&lt;pre class="brush:bash"&gt;git clone https://github.com/jashkenas/coffee-script.git&lt;br /&gt;cd coffee-script&lt;br /&gt;sudo bin/cake install&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;［編譯 .coffee 檔產生 .js 檔］&lt;br /&gt;&lt;pre class="brush:bash"&gt;# Compile a directory tree of .coffee files into a parallel tree of .js, in lib:&lt;br /&gt;coffee -o lib/ -c src/&lt;br /&gt;&lt;br /&gt;# Watch a file for changes, and recompile it every time the file is saved:&lt;br /&gt;coffee --watch --compile experimental.coffee&lt;br /&gt;&lt;br /&gt;# Concatenate a list of files into a single script:&lt;br /&gt;coffee --join project.js --compile src/*.coffee&lt;br /&gt;&lt;br /&gt;# Print out the compiled JS from a one-liner:&lt;br /&gt;coffee -bpe "alert i for i in [0..10]"&lt;br /&gt;&lt;br /&gt;# Start the CoffeeScript REPL（read-eval-print loop）:&lt;br /&gt;coffee&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Reference：&lt;br /&gt;http://upgrade2rails31.com/coffee-script&lt;br /&gt;http://jashkenas.github.com/coffee-script&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18689056-5425025274457868179?l=zx-1986.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://zx-1986.blogspot.com/feeds/5425025274457868179/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://zx-1986.blogspot.com/2011/10/coffeescript.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18689056/posts/default/5425025274457868179'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18689056/posts/default/5425025274457868179'/><link rel='alternate' type='text/html' href='http://zx-1986.blogspot.com/2011/10/coffeescript.html' title='CoffeeScript'/><author><name>張旭</name><uri>https://profiles.google.com/105134833883146274095</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-pO0m_C6_zQw/AAAAAAAAAAI/AAAAAAAAD0c/h7KNyAUN14w/s512-c/photo.jpg'/></author><thr:total>0</thr:total><georss:featurename>Taipei City, Taiwan</georss:featurename><georss:point>25.091075 121.5598345</georss:point><georss:box>24.976033 121.401906 25.206117 121.71776299999999</georss:box></entry><entry><id>tag:blogger.com,1999:blog-18689056.post-28401433478316694</id><published>2011-10-23T17:15:00.000+08:00</published><updated>2011-10-26T08:56:31.083+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='nodejs'/><title type='text'>Node.js</title><content type='html'>［使用 apt-get 安裝 Node.js］&lt;br /&gt;&lt;pre class="brush:bash"&gt;sudo apt-get install python&lt;br /&gt;sudo apt-get install openssh-server libssl-dev&lt;br /&gt;sudo apt-get install python-software-properties&lt;br /&gt;sudo add-apt-repository ppa:chris-lea/node.js&lt;br /&gt;sudo apt-get update&lt;br /&gt;sudo apt-get install nodejs&lt;br /&gt;&lt;/pre&gt;&lt;blockquote&gt;&lt;i&gt;The default node is not Node.js on Ubuntu/Debian; nodejs is, but is incredibly old because of the fast development pace of Node.js at this time.&lt;/i&gt;&lt;/blockquote&gt;&lt;br /&gt;［自行編譯安裝 Node.js］&lt;br /&gt;&lt;pre class="brush:bash"&gt;sudo apt-get install python&lt;br /&gt;sudo apt-get install openssh-server libssl-dev&lt;br /&gt;&lt;br /&gt;git clone --depth 1 git://github.com/joyent/node.git&lt;br /&gt;cd node&lt;br /&gt;git checkout v0.4.12&lt;br /&gt;./configure&lt;br /&gt;make -j2    # -j sets the number of jobs to run&lt;br /&gt;sudo make install&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;如果需要產生一個客制化安裝的 Shell Script，可以善用這個網站：&lt;br /&gt;http://apptob.org&lt;br /&gt;&lt;br /&gt;［安裝 Node.js 的套件管理程式 NPM］&lt;br /&gt;&lt;br /&gt;NPM：Node Packages Manager&lt;br /&gt;&lt;blockquote&gt;&lt;i&gt;NPM is a package manager that has become the de-facto standard for installing additional node libraries and programs.&lt;/i&gt;&lt;/blockquote&gt;&lt;pre class="brush:bash"&gt;sudo su -&lt;br /&gt;curl http://npmjs.org/install.sh | sh&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Reference：&lt;br /&gt;http://nodejs.org&lt;br /&gt;http://npmjs.org&lt;br /&gt;https://github.com/joyent/node/wiki/Installation&lt;br /&gt;https://github.com/joyent/node/wiki/Installing-Node.js-via-package-manager&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18689056-28401433478316694?l=zx-1986.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://zx-1986.blogspot.com/feeds/28401433478316694/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://zx-1986.blogspot.com/2011/10/nodejs.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18689056/posts/default/28401433478316694'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18689056/posts/default/28401433478316694'/><link rel='alternate' type='text/html' href='http://zx-1986.blogspot.com/2011/10/nodejs.html' title='Node.js'/><author><name>張旭</name><uri>https://profiles.google.com/105134833883146274095</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-pO0m_C6_zQw/AAAAAAAAAAI/AAAAAAAAD0c/h7KNyAUN14w/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18689056.post-9169756397527326831</id><published>2011-10-18T14:28:00.002+08:00</published><updated>2011-10-23T17:24:24.585+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='ubuntu'/><title type='text'>Ubuntu 安裝 Sun Java</title><content type='html'>Ubuntu 11.10&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush:bash"&gt;sudo add-apt-repository ppa:ferramroberto/java&lt;br /&gt;sudo apt-get update &amp;&amp; apt-get upgrade&lt;br /&gt;sudo apt-get install sun-java6-plugin sun-java6-jre sun-java6-plugin sun-java6-jdk sun-java6-bin sun-java6-fonts&lt;br /&gt;&lt;br /&gt;sudo update-alternatives --all  # 選擇 default 使用 Sun Java&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Reference：&lt;br /&gt;http://www.lffl.org&lt;br /&gt;http://askubuntu.com/questions/52154/how-do-i-install-the-latest-version-of-sun-java-in-ubuntu-11-10&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18689056-9169756397527326831?l=zx-1986.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://zx-1986.blogspot.com/feeds/9169756397527326831/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://zx-1986.blogspot.com/2011/10/sun-java-in-ubuntu.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18689056/posts/default/9169756397527326831'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18689056/posts/default/9169756397527326831'/><link rel='alternate' type='text/html' href='http://zx-1986.blogspot.com/2011/10/sun-java-in-ubuntu.html' title='Ubuntu 安裝 Sun Java'/><author><name>張旭</name><uri>https://profiles.google.com/105134833883146274095</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-pO0m_C6_zQw/AAAAAAAAAAI/AAAAAAAAD0c/h7KNyAUN14w/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18689056.post-6823311603547884465</id><published>2011-10-12T14:26:00.003+08:00</published><updated>2011-10-26T08:56:05.896+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ubuntu'/><category scheme='http://www.blogger.com/atom/ns#' term='dhcp'/><title type='text'>Ubuntu 安裝 DHCP Server</title><content type='html'>&lt;blockquote&gt;&lt;i&gt;&lt;br /&gt;dhcp3-server is a dummy package which wraps the real isc-dhcp-server package.&lt;br /&gt;&lt;/i&gt;&lt;/blockquote&gt;許多舊的關於 Ubuntu DHCP Server 教學文件都是不符合現狀的。&lt;br /&gt;Ubuntu 11.04 內的 dhcp3-server 根本就是幌子！&lt;br /&gt;&lt;br /&gt;真正的 DHCP 服務名稱既不是 dhcpd 也不是 dhcp3-server，而是 isc-dhcp-server。&lt;br /&gt;&lt;blockquote&gt;&lt;i&gt;&lt;br /&gt;Internet Systems Consortium, Inc. (ISC) is proud to be the producer and distributor of commercial quality Open Source software for the Internet Community and to offer world-class online and professional services based on our software.&lt;br /&gt;&lt;/i&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;pre class="brush:bash"&gt;sudo apt-get install isc-dhcp-server&lt;/pre&gt;&lt;br /&gt;設定檔：&lt;br /&gt;/etc/dhcp/dhcp.conf&lt;br /&gt;/etc/defaults/isc-dhcp-server&lt;br /&gt;&lt;br /&gt;記錄檔：&lt;br /&gt;/var/lib/dhcp/dhcpd.leases&lt;br /&gt;/var/log/syslog&lt;br /&gt;&lt;br /&gt;啟動腳本：&lt;br /&gt;/etc/init.d/isc-dhcp-server&lt;br /&gt;&lt;br /&gt;有多張網卡在 DHCP Server 上的需要特別注意：&lt;br /&gt;&lt;blockquote&gt;&lt;i&gt;&lt;br /&gt;When a DHCP configured PC boots, it requests its IP address from the DHCP server. It does this by sending a standardized DHCP broadcast request packet to the DHCP server with a source IP address of 255.255.255.255. &lt;br /&gt;If your DHCP server has more than one interface, you have to add a route for this 255.255.255.255 address so that it knows the interface on which to send the reply.&lt;br /&gt;&lt;/i&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;Reference： &lt;br /&gt;http://ubuntuforums.org/showthread.php?t=1754623&lt;br /&gt;http://manpages.ubuntu.com/manpages/natty/man8/dhcp-helper.8.html&lt;br /&gt;http://prefetch.net/articles/iscdhcpd.html&lt;br /&gt;http://www.linuxhomenetworking.com/wiki/index.php/Quick_HOWTO_:_Ch08_:_Configuring_the_DHCP_Server&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18689056-6823311603547884465?l=zx-1986.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://zx-1986.blogspot.com/feeds/6823311603547884465/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://zx-1986.blogspot.com/2011/10/dhcp-server.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18689056/posts/default/6823311603547884465'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18689056/posts/default/6823311603547884465'/><link rel='alternate' type='text/html' href='http://zx-1986.blogspot.com/2011/10/dhcp-server.html' title='Ubuntu 安裝 DHCP Server'/><author><name>張旭</name><uri>https://profiles.google.com/105134833883146274095</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-pO0m_C6_zQw/AAAAAAAAAAI/AAAAAAAAD0c/h7KNyAUN14w/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18689056.post-2964737657631801714</id><published>2011-09-25T21:47:00.000+08:00</published><updated>2011-10-24T09:47:31.234+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ruby'/><category scheme='http://www.blogger.com/atom/ns#' term='ubuntu'/><title type='text'>Ruby On Rails 環境架設</title><content type='html'>【使用 apt-get 的安裝流程】&lt;br /&gt;&lt;br /&gt;＃在 Ubuntu 底下架設 Ruby On Rails + Apache 2 + MySQL 環境&lt;br /&gt;&lt;br /&gt;安裝所需套件：&lt;br /&gt;&lt;pre class="brush:bash"&gt;sudo apt-get install ruby rails rubygems rake&lt;br /&gt;&lt;br /&gt;sudo apt-get install apache2&lt;br /&gt;sudo apt-get install libapache2-mod-ruby&lt;br /&gt;&lt;br /&gt;sudo apt-get install mysql-server &lt;br /&gt;sudo apt-get install libdbi-ruby libdbd-mysql-ruby&lt;br /&gt;&lt;br /&gt;sudo apt-get install vim-rails&lt;br /&gt;sudo apt-get install libfcgi-dev&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;開啓 Apache rewrite 模組：&lt;br /&gt;&lt;pre class="brush:bash"&gt;sudo a2enmod rewrite&lt;br /&gt;sudo service apache2 restart&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;RubyGems 指令：&lt;br /&gt;&lt;pre class="brush:bash"&gt;sudo gem list # 列出已安裝套件&lt;br /&gt;sudo gem list -r 套件名稱 # 搜尋套件&lt;br /&gt;sudo gem install 套件名稱 # 安裝套件&lt;br /&gt;sudo gem uninstall 套件名稱 # 移除套件&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;ERROR:  gem update --system is disabled on Debian, because it will overwrite the content of the rubygems Debian package, and might break your Debian system in subtle ways. The Debian-supported way to update rubygems is through apt-get, using Debian official repositories.&lt;br /&gt;If you really know what you are doing, you can still update rubygems by setting the REALLY_GEM_UPDATE_SYSTEM environment variable, but please remember that this is completely unsupported by Debian.&lt;br /&gt;&lt;br /&gt;使用 apt-get 或 aptitude 安裝的 RubyGems，Gems 套件預設會放在：&lt;br /&gt;/var/lib/gems/1.8/gems/&lt;br /&gt;&lt;br /&gt;＊&lt;br /&gt;&lt;br /&gt;【使用 tarball 的安裝流程】&lt;br /&gt;&lt;br /&gt;下載 Ruby 原始檔&lt;br /&gt;解壓縮並切換到原始檔資料夾&lt;br /&gt;執行 configure&lt;br /&gt;執行 make&lt;br /&gt;執行 make install&lt;br /&gt;&lt;br /&gt;下載 Gem 原始檔&lt;br /&gt;解壓縮並切換到原始檔資料夾&lt;br /&gt;執行 ruby setup.rb&lt;br /&gt;&lt;br /&gt;使用 tarball 安裝，Gem 的執行檔預設會是：&lt;br /&gt;/usr/bin/gem1.8&lt;br /&gt;&lt;br /&gt;使用 tarball 安裝，Gems 套件預設會放在：&lt;br /&gt;/usr/lib/ruby/gems/1.8&lt;br /&gt;&lt;br /&gt;＊&lt;br /&gt;&lt;br /&gt;【ruby-full 搭配 Gem tarball】&lt;br /&gt;&lt;pre class="brush:bash"&gt;sudo apt-get install ruby-full&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;下載 Gem 原始檔&lt;br /&gt;解壓縮並切換到原始檔資料夾&lt;br /&gt;執行 ruby setup.rb&lt;br /&gt;&lt;br /&gt;使用 tarball 安裝，Gem 的執行檔預設會是：&lt;br /&gt;/usr/bin/gem1.8&lt;br /&gt;&lt;br /&gt;使用 tarball 安裝，Gems 套件預設會放在：&lt;br /&gt;/usr/lib/ruby/gems/1.8&lt;br /&gt;&lt;br /&gt;＊&lt;br /&gt;&lt;br /&gt;【XDite 推薦的安裝流程】&lt;br /&gt;&lt;br /&gt;http://github.com/zx1986/rails-nginx-passenger-ubuntu&lt;br /&gt;&lt;br /&gt;＊&lt;br /&gt;&lt;br /&gt;Reference：&lt;br /&gt;01. https://help.ubuntu.com/community/RubyOnRails&lt;br /&gt;02. http://blog.xdite.net/?p=1754&lt;br /&gt;03. http://blog.xdite.net/?p=1807&lt;br /&gt;04. http://github.com/jnstq/rails-nginx-passenger-ubuntu&lt;br /&gt;05. http://www.cc.ntu.edu.tw/chinese/epaper/20070620_1007.htm&lt;br /&gt;06. http://packages.ubuntu.com/hardy/ruby-full&lt;br /&gt;07. http://blog.longwin.com.tw/2008/11/ruby-on-rails-linux-environment-build-2008/&lt;br /&gt;08. http://ihower.tw/rails3/installation.html&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18689056-2964737657631801714?l=zx-1986.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://zx-1986.blogspot.com/feeds/2964737657631801714/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://zx-1986.blogspot.com/2010/09/ruby-on-rails-in-ubuntu.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18689056/posts/default/2964737657631801714'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18689056/posts/default/2964737657631801714'/><link rel='alternate' type='text/html' href='http://zx-1986.blogspot.com/2010/09/ruby-on-rails-in-ubuntu.html' title='Ruby On Rails 環境架設'/><author><name>張旭</name><uri>https://profiles.google.com/105134833883146274095</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-pO0m_C6_zQw/AAAAAAAAAAI/AAAAAAAAD0c/h7KNyAUN14w/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18689056.post-7887371534052959482</id><published>2011-09-25T11:07:00.000+08:00</published><updated>2011-09-28T13:59:00.117+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><title type='text'>tmux 與 screen</title><content type='html'>sudo apt-get install tmux&lt;br /&gt;&lt;br /&gt;tmux&lt;br /&gt;# 啓動 Tmux&lt;br /&gt;&lt;br /&gt;ctrl + b&lt;br /&gt;# 作用鍵，先按作用鍵，再按功能鍵&lt;br /&gt;&lt;br /&gt;作用鍵 + c&lt;br /&gt;# 開新的視窗&lt;br /&gt;&lt;br /&gt;作用鍵 + n / p&lt;br /&gt;# 切換前一個 / 後一個視窗&lt;br /&gt;&lt;br /&gt;作用鍵 + "&lt;br /&gt;# 分割視窗，好用！&lt;br /&gt;&lt;br /&gt;作用鍵 + Ctrl + 方向鍵上/下/左/右&lt;br /&gt;# 可以調整當前分割視窗的長寬，好用！&lt;br /&gt;&lt;br /&gt;作用鍵 + Space&lt;br /&gt;# 切換分割視窗的佈置&lt;br /&gt;&lt;br /&gt;作用鍵 + d&lt;br /&gt;# 將目前的 Tmux Session 丟到背景去&lt;br /&gt;&lt;br /&gt;tmux ls&lt;br /&gt;# 列出主機上所有的 Tmux Session&lt;br /&gt;&lt;br /&gt;tmux a -t 0&lt;br /&gt;# 將背景的第 0 號 Tmux Session 叫回，a 代表 attach&lt;br /&gt;&lt;br /&gt;作用鍵 + ?&lt;br /&gt;# 查詢所有功能&lt;br /&gt;&lt;br /&gt;＊&lt;br /&gt;&lt;br /&gt;【screen】&lt;br /&gt;&lt;br /&gt;screen&lt;br /&gt;# 啓動 screen&lt;br /&gt;&lt;br /&gt;ctrl + a&lt;br /&gt;# 作用鍵，先按作用鍵，再按功能鍵&lt;br /&gt;&lt;br /&gt;作用鍵 + c&lt;br /&gt;# 開新的視窗&lt;br /&gt;&lt;br /&gt;作用鍵 + n / p&lt;br /&gt;# 切換前一個 / 後一個視窗&lt;br /&gt;&lt;br /&gt;作用鍵 + k&lt;br /&gt;# 關閉視窗&lt;br /&gt;&lt;br /&gt;作用鍵 + d&lt;br /&gt;# 將目前的 Screen Session 丟到背景去&lt;br /&gt;&lt;br /&gt;screen -ls&lt;br /&gt;# 顯示背景所有的 Screen Session&lt;br /&gt;&lt;br /&gt;screen -r 背景 Session 的名稱&lt;br /&gt;# 將指定的 Screen Session re-Attach 回來&lt;br /&gt;&lt;br /&gt;作用鍵 + S&lt;br /&gt;# 水平分割畫面&lt;br /&gt;&lt;br /&gt;作用鍵 + |&lt;br /&gt;# 垂直分割畫面&lt;br /&gt;&lt;br /&gt;作用鍵 + Tab&lt;br /&gt;# 切換分割畫面&lt;br /&gt;&lt;br /&gt;作用鍵 + "&lt;br /&gt;# 將分割畫面接上指定的視窗&lt;br /&gt;&lt;br /&gt;p.s.&lt;br /&gt;Screen 的分割畫面很不直覺。&lt;br /&gt;當使用者切出一個新的分割畫面，那個畫面會是整個 blank 的，什麼都沒有。&lt;br /&gt;使用者必須先切到該分割畫面，然後爲該畫面接上指定的 Screen 視窗。&lt;br /&gt;我的需求通常是在分割畫面裡，直接接上一個新的 Screen 視窗。&lt;br /&gt;指令流程：&lt;br /&gt;1] 作用鍵 + S 或 作用鍵 + |&lt;br /&gt;2] 作用鍵 + Tab&lt;br /&gt;3] 作用鍵 + c&lt;br /&gt;&lt;br /&gt;Reference：&lt;br /&gt;01. http://clyang.net/blog/2009/09/26/356&lt;br /&gt;02. http://crazylion.wordpress.com/2010/06/04/tmux-2/&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18689056-7887371534052959482?l=zx-1986.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://zx-1986.blogspot.com/feeds/7887371534052959482/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://zx-1986.blogspot.com/2010/10/tmux.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18689056/posts/default/7887371534052959482'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18689056/posts/default/7887371534052959482'/><link rel='alternate' type='text/html' href='http://zx-1986.blogspot.com/2010/10/tmux.html' title='tmux 與 screen'/><author><name>張旭</name><uri>https://profiles.google.com/105134833883146274095</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-pO0m_C6_zQw/AAAAAAAAAAI/AAAAAAAAD0c/h7KNyAUN14w/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18689056.post-7688970664659179819</id><published>2011-09-20T16:12:00.000+08:00</published><updated>2011-09-28T13:59:09.287+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='redhat'/><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><title type='text'>快速架設 NTP Server</title><content type='html'>&lt;pre class="brush:bash"&gt;yum install ntp tzdata&lt;br /&gt;chkconfig ntpd on&lt;br /&gt;&lt;/pre&gt;編輯 /etc/ntp.conf：&lt;br /&gt;&lt;pre class="brush:bash"&gt;# 拒絕 IPv4&lt;br /&gt;restrict default kod nomodify notrap nopeer noquery&lt;br /&gt;&lt;br /&gt;# 拒絕 IPv6&lt;br /&gt;restrict -6 default kod nomodify notrap nopeer noquery&lt;br /&gt;&lt;br /&gt;# 放行指定的主機，一般會填寫上層 NTP Server&lt;br /&gt;restrict your.time.server&lt;br /&gt;&lt;br /&gt;# 預設放行本機&lt;br /&gt;restrict 127.0.0.1&lt;br /&gt;restrict -6 ::1&lt;br /&gt;&lt;br /&gt;# 放行指定的私有網路主機&lt;br /&gt;restrict 192.168.100.0 mask 255.255.255.0 nomodify&lt;br /&gt;&lt;br /&gt;# 設定上層 NTP Server &lt;br /&gt;# 原本的 [0|1|2].centos.pool.ntp.org 的可以註解掉&lt;br /&gt;server your.time.server&lt;br /&gt;&lt;br /&gt;# 預設時間差異分析檔案與暫不用到的 keys 等&lt;br /&gt;driftfile /var/lib/ntp/drift&lt;br /&gt;keys      /etc/ntp/keys&lt;br /&gt;&lt;/pre&gt;&lt;pre class="brush:bash"&gt;/etc/init.d/ntpd restart&lt;br /&gt;&lt;/pre&gt;Reference：&lt;br /&gt;http://linux.vbird.org/linux_server/0440ntp.php#server&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18689056-7688970664659179819?l=zx-1986.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://zx-1986.blogspot.com/feeds/7688970664659179819/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://zx-1986.blogspot.com/2011/09/setup-ntp-server.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18689056/posts/default/7688970664659179819'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18689056/posts/default/7688970664659179819'/><link rel='alternate' type='text/html' href='http://zx-1986.blogspot.com/2011/09/setup-ntp-server.html' title='快速架設 NTP Server'/><author><name>張旭</name><uri>https://profiles.google.com/105134833883146274095</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-pO0m_C6_zQw/AAAAAAAAAAI/AAAAAAAAD0c/h7KNyAUN14w/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18689056.post-3367366750958119078</id><published>2011-09-07T23:18:00.000+08:00</published><updated>2011-09-28T13:59:17.401+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='redhat'/><category scheme='http://www.blogger.com/atom/ns#' term='lun'/><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><title type='text'>在 RHEL 作業系統內使用 LUN</title><content type='html'>安裝作業系統或對主機進行磁碟管理時，最好先關機，然後把光纖線拔下來，再做其它動作。&lt;br /&gt;&lt;br /&gt;multipathd&lt;br /&gt;dev-mapper&lt;br /&gt;&lt;br /&gt;/dev/sda&lt;br /&gt;/dev/dm-1&lt;br /&gt;/dev/mpath/mpath1&lt;br /&gt;/dev/mapper/mpath1&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18689056-3367366750958119078?l=zx-1986.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://zx-1986.blogspot.com/feeds/3367366750958119078/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://zx-1986.blogspot.com/2011/09/san-disk-in-rhel.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18689056/posts/default/3367366750958119078'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18689056/posts/default/3367366750958119078'/><link rel='alternate' type='text/html' href='http://zx-1986.blogspot.com/2011/09/san-disk-in-rhel.html' title='在 RHEL 作業系統內使用 LUN'/><author><name>張旭</name><uri>https://profiles.google.com/105134833883146274095</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-pO0m_C6_zQw/AAAAAAAAAAI/AAAAAAAAD0c/h7KNyAUN14w/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18689056.post-6259089205765568497</id><published>2011-06-29T08:50:00.003+08:00</published><updated>2011-09-28T13:59:24.782+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='log'/><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><title type='text'>rsyslog</title><content type='html'>rsyslog + logwatch&lt;br /&gt;&lt;br /&gt;Reference：&lt;br /&gt;01. http://wiki.rsyslog.com&lt;br /&gt;02. http://linuxdiary.blogspot.com/2008/10/logwatch.html&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18689056-6259089205765568497?l=zx-1986.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://zx-1986.blogspot.com/feeds/6259089205765568497/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://zx-1986.blogspot.com/2011/06/rsyslog.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18689056/posts/default/6259089205765568497'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18689056/posts/default/6259089205765568497'/><link rel='alternate' type='text/html' href='http://zx-1986.blogspot.com/2011/06/rsyslog.html' title='rsyslog'/><author><name>張旭</name><uri>https://profiles.google.com/105134833883146274095</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-pO0m_C6_zQw/AAAAAAAAAAI/AAAAAAAAD0c/h7KNyAUN14w/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18689056.post-1865106275566679334</id><published>2011-06-29T08:49:00.000+08:00</published><updated>2011-09-28T13:59:33.024+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='apache'/><category scheme='http://www.blogger.com/atom/ns#' term='ubuntu'/><title type='text'>關於 log 檔</title><content type='html'>/var/log&lt;br /&gt;/var/log/dmesg&lt;br /&gt;/var/log/message&lt;br /&gt;/var/log/mail.log&lt;br /&gt;/var/log/apache2/&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18689056-1865106275566679334?l=zx-1986.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://zx-1986.blogspot.com/feeds/1865106275566679334/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://zx-1986.blogspot.com/2011/01/log.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18689056/posts/default/1865106275566679334'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18689056/posts/default/1865106275566679334'/><link rel='alternate' type='text/html' href='http://zx-1986.blogspot.com/2011/01/log.html' title='關於 log 檔'/><author><name>張旭</name><uri>https://profiles.google.com/105134833883146274095</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-pO0m_C6_zQw/AAAAAAAAAAI/AAAAAAAAD0c/h7KNyAUN14w/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18689056.post-2324316729274729168</id><published>2011-06-22T15:52:00.003+08:00</published><updated>2011-09-28T13:59:39.023+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='apache'/><title type='text'>設定 Apache 的 Virtual Host</title><content type='html'>環境：RHEL 6.0&lt;br /&gt;目錄：/etc/httpd&lt;br /&gt;&lt;br /&gt;編輯 /etc/httpd/conf/httpd.conf，確定 vhost 模組有載入，然後取消該行注解：&lt;br /&gt;#NameVirtualHost *:80&lt;br /&gt;&lt;br /&gt;在該行後面加上：&lt;br /&gt;Include vhosts/*.conf&lt;br /&gt;&lt;br /&gt;會是這樣：&lt;br /&gt;&lt;pre class="brush:bash"&gt;NameVirtualHost *:80&lt;br /&gt;Include vhosts/*.conf&lt;br /&gt;&lt;/pre&gt;基本上是為了要保持其它的 Virtual Hosts 設定都在 NameVirtualHost *:80 之後再載入。&lt;br /&gt;&lt;br /&gt;手動在 /etc/httpd 底下建立一個 vhosts 資料夾，&lt;br /&gt;/etc/httpd/vhosts 資料夾內放置各個 Virtual Hosts 的設定。&lt;br /&gt;&lt;br /&gt;可以先建立一個以 IP 作為 Domain Name 指向預設 DocumentRoot 的設定。&lt;br /&gt;例如該 httpd 主機的 IP 是 192.168.1.100，預設 DocumentRoot 是 /var/www/html，&lt;br /&gt;則建立：&lt;br /&gt;/etc/httpd/vhosts/192.168.1.100.conf&lt;br /&gt;&lt;pre class="brush:bash"&gt;＜VirtualHost *:80＞&lt;br /&gt;     ServerName 192.168.1.100&lt;br /&gt;     DocumentRoot /var/www/html&lt;br /&gt;     ErrorLog logs/192.168.1.100-error_log&lt;br /&gt;     CustomLog logs/192.168.1.100-access_log common&lt;br /&gt;＜/VirtualHost＞&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;假設要設定一個叫 abc.example.com 的 Domain Name 指向 /var/www/html/abc，&lt;br /&gt;則建立：&lt;br /&gt;/etc/httpd/vhosts/abc.example.com.conf&lt;br /&gt;&lt;pre class="brush:bash"&gt;＜VirtualHost *:80＞&lt;br /&gt;     ServerName abc.example.com&lt;br /&gt;     DocumentRoot /var/www/html/abc&lt;br /&gt;     ErrorLog logs/abc.example.com-error_log&lt;br /&gt;     CustomLog logs/abc.example.com-access_log common&lt;br /&gt;＜/VirtualHost＞&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;重新啟動 httpd 服務。&lt;br /&gt;&lt;br /&gt;Reference：&lt;br /&gt;01. http://freebsd.lab.mlc.edu.tw/apache/VirtualHost.shtml&lt;br /&gt;02. http://phorum.study-area.org/index.php?topic=17120.0&lt;br /&gt;03. http://wiki.ubuntu.org.cn/index.php?title=Apache%E8%99%9A%E6%8B%9F%E4%B8%BB%E6%9C%BA%E6%8C%87%E5%8D%97&amp;variant=zh-tw&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18689056-2324316729274729168?l=zx-1986.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://zx-1986.blogspot.com/feeds/2324316729274729168/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://zx-1986.blogspot.com/2011/06/virtual-host-in-apache.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18689056/posts/default/2324316729274729168'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18689056/posts/default/2324316729274729168'/><link rel='alternate' type='text/html' href='http://zx-1986.blogspot.com/2011/06/virtual-host-in-apache.html' title='設定 Apache 的 Virtual Host'/><author><name>張旭</name><uri>https://profiles.google.com/105134833883146274095</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-pO0m_C6_zQw/AAAAAAAAAAI/AAAAAAAAD0c/h7KNyAUN14w/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18689056.post-3916343134826596096</id><published>2011-05-31T16:38:00.002+08:00</published><updated>2011-09-28T13:59:47.045+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='redhat'/><category scheme='http://www.blogger.com/atom/ns#' term='python'/><title type='text'>PyAOS</title><content type='html'>環境：RHEL 5.6 i386&lt;br /&gt;&lt;br /&gt;Reference：&lt;br /&gt;01. http://pyaos.johnny-lin.com/?p=76&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18689056-3916343134826596096?l=zx-1986.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://zx-1986.blogspot.com/feeds/3916343134826596096/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://zx-1986.blogspot.com/2011/05/pyaos.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18689056/posts/default/3916343134826596096'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18689056/posts/default/3916343134826596096'/><link rel='alternate' type='text/html' href='http://zx-1986.blogspot.com/2011/05/pyaos.html' title='PyAOS'/><author><name>張旭</name><uri>https://profiles.google.com/105134833883146274095</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-pO0m_C6_zQw/AAAAAAAAAAI/AAAAAAAAD0c/h7KNyAUN14w/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18689056.post-7494061580349824004</id><published>2011-05-05T14:02:00.006+08:00</published><updated>2011-09-28T13:59:52.238+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='redhat'/><category scheme='http://www.blogger.com/atom/ns#' term='python'/><title type='text'>rpmbuild - 以 Python 2.7 為例</title><content type='html'>Red Hat Enterprise Linux 的很多東西都很舊，特別是 RHEL 5 系列。&lt;br /&gt;有些新的軟體更新，它不見得會跟著推出新的 rpm 檔。&lt;br /&gt;除了使用 tarball 安裝方法，也可以自己包一個 rpm 檔。&lt;br /&gt;&lt;br /&gt;環境：RHEL 5.6&lt;br /&gt;&lt;br /&gt;安裝必備套件&lt;br /&gt;&lt;pre class="brush:bash"&gt;yum groupinstall "Development Tools"&lt;br /&gt;yum install rpmdevtools&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;blockquote&gt;you should &lt;b&gt;NEVER&lt;/b&gt; build an RPM with the root user.&lt;br /&gt;絕對不要使用 root 來打包 rpm！&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;建立一個專門打包 rpm 的使用者帳號&lt;br /&gt;&lt;pre class="brush:bash"&gt;useradd rpm_maker&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;切換成該使用者&lt;br /&gt;&lt;pre class="brush:bash"&gt;su - rpm_maker&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;在 rpm_maker 的家目錄下執行&lt;br /&gt;&lt;pre class="brush:bash"&gt;rpmdev-setuptree     # 會建立 ~/rpmbuild 目錄&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;下載 Python2.7 原始檔，解壓縮，放置 python-2.7.spec 與原始檔&lt;br /&gt;&lt;pre class="brush:bash"&gt;cd ~&lt;br /&gt;wget  http://www.python.org/ftp/python/2.7.1/Python-2.7.1.tar.bz2&lt;br /&gt;tar  jxvf Python-2.7.1.tar.bz2&lt;br /&gt;cp  ~/Python-2.7.1/Misc/RPM/python-2.7.spec  ~/rpmbuild/SPECS/&lt;br /&gt;mv  Python-2.7.1.tar.bz2  ~/rpmbuild/SOURCES/&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;補足相關套件&lt;br /&gt;&lt;pre class="brush:bash"&gt;yum install tk-devel tcl-devel expat-devel db4-devel gdbm-devel sqlite-devel&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;根據指定的 spec 建立 rpm 檔&lt;br /&gt;&lt;pre class="brush:bash"&gt;cd ~/rpmbuild/SPECS/&lt;br /&gt;rpmbuild -ba python-2.7.spec&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Reference：&lt;br /&gt;01. https://fedoraproject.org/wiki/How_to_create_an_RPM_package/zh-tw&lt;br /&gt;02. http://www.grenadepod.com/2009/12/26/building-python-2-6-4-rpm-for-centos-5-4/&lt;br /&gt;03. http://www.ibm.com/developerworks/library/l-rpm1/&lt;br /&gt;04. http://villaroad.com/2010/10/rolling-python-2-6-2-on-centos-5-3/&lt;br /&gt;05. http://willsani.com/2011/03/02/centos-5-5-x86_64-install-python-2-7/&lt;br /&gt;06. http://www.joywang.info/?p=112&lt;br /&gt;07. http://serverfault.com/questions/11209/python-3-0-rpms-for-centos-5-rhel-5&lt;br /&gt;08. http://serverfault.com/questions/162217/upgrading-python-on-rhel5&lt;br /&gt;09. http://stackoverflow.com/questions/4149361/on-linux-suse-or-redhat-how-do-i-load-python-2-7&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18689056-7494061580349824004?l=zx-1986.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://zx-1986.blogspot.com/feeds/7494061580349824004/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://zx-1986.blogspot.com/2011/05/rpmbuild.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18689056/posts/default/7494061580349824004'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18689056/posts/default/7494061580349824004'/><link rel='alternate' type='text/html' href='http://zx-1986.blogspot.com/2011/05/rpmbuild.html' title='rpmbuild - 以 Python 2.7 為例'/><author><name>張旭</name><uri>https://profiles.google.com/105134833883146274095</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-pO0m_C6_zQw/AAAAAAAAAAI/AAAAAAAAD0c/h7KNyAUN14w/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18689056.post-5580762360507977327</id><published>2011-05-02T21:34:00.001+08:00</published><updated>2011-09-28T13:59:58.663+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='python'/><title type='text'>mod_python 與 mod_wsgi</title><content type='html'>Reference：&lt;br /&gt;01. http://docs.python.org/howto/webservers.html&lt;br /&gt;02. http://www.modpython.org/python10/&lt;br /&gt;03. http://code.google.com/p/modwsgi/&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18689056-5580762360507977327?l=zx-1986.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://zx-1986.blogspot.com/feeds/5580762360507977327/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://zx-1986.blogspot.com/2011/05/modpython-and-modwsgi.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18689056/posts/default/5580762360507977327'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18689056/posts/default/5580762360507977327'/><link rel='alternate' type='text/html' href='http://zx-1986.blogspot.com/2011/05/modpython-and-modwsgi.html' title='mod_python 與 mod_wsgi'/><author><name>張旭</name><uri>https://profiles.google.com/105134833883146274095</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-pO0m_C6_zQw/AAAAAAAAAAI/AAAAAAAAD0c/h7KNyAUN14w/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18689056.post-4466486996436563549</id><published>2011-05-02T15:11:00.001+08:00</published><updated>2011-09-28T14:00:03.968+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='django'/><category scheme='http://www.blogger.com/atom/ns#' term='python'/><title type='text'>Django</title><content type='html'>【安裝 Django】&lt;br /&gt;&lt;br /&gt;Ubuntu 底下安裝可以使用：sudo apt-get install python-django&lt;br /&gt;Red Hat 底下安裝可以使用：yum install Django&lt;br /&gt;&lt;br /&gt;Ubuntu 預設會把 Django 放在：/usr/local/lib/python2.*/site-packages&lt;br /&gt;Red Hat 預設會把 Django 放在：/usr/lib/python2.*/site-packages&lt;br /&gt;&lt;br /&gt;&lt;i&gt;Python won't recognize Django unless it is installed in the "site-packages" directory, so instead we just create a symbolic link to the source code in our home directory.&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;由上文可知，其實 Django 只要放到正確的 site-packages 下，Python 就可以認到了。&lt;br /&gt;比較麻煩的就是 Python 版本的差異，例如 RHEL 5 預設只有 Python 2.4。&lt;br /&gt;但是 RHEL 5 底下使用 yum 安裝的所有 Python 套件，都會放到 Python 2.4 的 site-packages。&lt;br /&gt;如果你執行的環境是 Python 2.6，那就很頭大了，Python 2.6 底下 import 會少一堆東西。&lt;br /&gt;&lt;br /&gt;較好的解決方案是使用：python-virtualenv&lt;br /&gt;跑題了，之後再補充。&lt;br /&gt;&lt;br /&gt;使用 Django 原始檔來安裝（想成是 Linux 的 tarball install 吧），自由度會比較高些。&lt;br /&gt;&lt;br /&gt;可以下載官方版本來解壓縮，或使用 Subversion 同步一份到自己的家目錄：&lt;br /&gt;&lt;pre class="brush:bash"&gt;cd /var/www&lt;br /&gt;svn co http://code.djangoproject.com/svn/django/trunk/ django_src&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;使用這個命令取得 Python 的 site-packages 路徑：&lt;br /&gt;＃注意 python、python2.4、python2.6 的差別！&lt;br /&gt;&lt;pre class="brush:bash"&gt;python -c "from distutils.sysconfig import get_python_lib; print get_python_lib()"&lt;br /&gt;python2.4 -c "from distutils.sysconfig import get_python_lib; print get_python_lib()"&lt;br /&gt;python2.6 -c "from distutils.sysconfig import get_python_lib; print get_python_lib()"&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;選擇你的 site-packages 路徑（python2.4 或 python2.6），做一個 symbolic link 到那裡：&lt;br /&gt;&lt;pre class="brush:bash"&gt;ln -s /var/www/django_src/django   你的 site-packages 路徑/django&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;把 django-admin.py 加到執行路徑（PATH）裡：&lt;br /&gt;&lt;pre class="brush:bash"&gt;sudo cp /var/www/django_src/django/bin/django-admin.py /usr/local/bin&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;基本上這樣就安裝好 Django 了。&lt;br /&gt;可以進入你的 Python 2.* 環境，測試一下：&lt;br /&gt;&gt;&gt; import django&lt;br /&gt;&lt;br /&gt;＊&lt;br /&gt;&lt;br /&gt;【建立 Django 專案】&lt;br /&gt;&lt;br /&gt;建立一個新的 Django 專案：&lt;br /&gt;&lt;pre class="brush:bash"&gt;cd /var/www/&lt;br /&gt;django-admin.py startproject hello_django&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;裡面預設的結構是：&lt;br /&gt;&lt;pre class="brush:bash"&gt;__init__.py&lt;br /&gt;manage.py&lt;br /&gt;setting.py&lt;br /&gt;urls.py&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;再增加幾個資料夾到專案裡面：&lt;br /&gt;&lt;pre class="brush:bash"&gt;cd /var/www&lt;br /&gt;ln -s /var/www/django_src/django/contrib/admin/media  admin_media&lt;br /&gt;&lt;br /&gt;cd /var/www/hello_django&lt;br /&gt;mkdir media&lt;br /&gt;mkdir templates&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;setting.py 裡面可以設置管理資訊與資料庫設定：&lt;br /&gt;&lt;pre class="brush:bash"&gt;ADMINS = (&lt;br /&gt;     ('Your Name', 'your_email@domain.com'),&lt;br /&gt;)&lt;br /&gt;&lt;br /&gt;DATABASE_ENGINE = 'mysql'            # 'postgresql_psycopg2', 'postgresql', 'mysql', 'sqlite3' or 'oracle'.&lt;br /&gt;DATABASE_NAME = 'databaes_name'    # Or path to database file if using sqlite3.&lt;br /&gt;DATABASE_USER = 'user_name'          # Not used with sqlite3.&lt;br /&gt;DATABASE_PASSWORD = 'user_password' # Not used with sqlite3.&lt;br /&gt;DATABASE_HOST = ''                 # Set to empty string for localhost. Not used with sqlite3.&lt;br /&gt;DATABASE_PORT = ''                 # Set to empty string for default. Not used with sqlite3.&lt;br /&gt;&lt;br /&gt;TEMPLATE_DIRS = ( &lt;br /&gt;    "/var/www/hello_django/templates/"    # Absolute path&lt;br /&gt;)&lt;br /&gt;&lt;br /&gt;MEDIA_ROOT = '/var/www/hello_django/media/'   # Absolute path to the directory that holds media.&lt;br /&gt;&lt;br /&gt;# URL that handles the media served from MEDIA_ROOT. &lt;br /&gt;# Make sure to use a trailing slash if there is a path component (optional in other cases).&lt;br /&gt;# Examples: "http://media.lawrence.com", "http://example.com/media/" &lt;br /&gt;MEDIA_URL = 'http://yourdomain.com/media/'&lt;br /&gt;&lt;br /&gt;# URL prefix for admin media -- CSS, JavaScript and images. &lt;br /&gt;# Make sure to use a trailing slash.&lt;br /&gt;# Examples: "http://foo.com/media/", "/media/".&lt;br /&gt;ADMIN_MEDIA_PREFIX = '/admin_media/'&lt;br /&gt;&lt;br /&gt;INSTALLED_APPS = (&lt;br /&gt;    'django.contrib.auth',&lt;br /&gt;    'django.contrib.contenttypes',&lt;br /&gt;    'django.contrib.sessions',&lt;br /&gt;    'django.contrib.sites',&lt;br /&gt;    'django.contrib.admin',&lt;br /&gt;)&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;同步資料庫：&lt;br /&gt;&lt;pre class="brush:bash"&gt;django-admin.py syncdb&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;編輯 urls.py 檔：&lt;br /&gt;&lt;pre class="brush:bash"&gt;# Uncomment this for admin:&lt;br /&gt; (r'^admin/', include('django.contrib.admin.urls')),&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;＊&lt;br /&gt;&lt;br /&gt;【設置 Apache】&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Reference：&lt;br /&gt;01. http://jeffbaier.com/articles/installing-django-on-an-ubuntu-linux-server/&lt;br /&gt;02. http://docs.djangoproject.com/en/dev/howto/deployment/modwsgi/&lt;br /&gt;03. https://help.ubuntu.com/community/Django&lt;br /&gt;04. http://nildamului.blogspot.com/2009/03/django-1.html&lt;br /&gt;05. http://nildamului.blogspot.com/2009/04/django-2.html&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18689056-4466486996436563549?l=zx-1986.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://zx-1986.blogspot.com/feeds/4466486996436563549/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://zx-1986.blogspot.com/2011/03/django.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18689056/posts/default/4466486996436563549'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18689056/posts/default/4466486996436563549'/><link rel='alternate' type='text/html' href='http://zx-1986.blogspot.com/2011/03/django.html' title='Django'/><author><name>張旭</name><uri>https://profiles.google.com/105134833883146274095</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-pO0m_C6_zQw/AAAAAAAAAAI/AAAAAAAAD0c/h7KNyAUN14w/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18689056.post-1110413738519091130</id><published>2011-05-02T11:17:00.001+08:00</published><updated>2011-09-28T14:00:13.038+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='wsgi'/><category scheme='http://www.blogger.com/atom/ns#' term='rack'/><category scheme='http://www.blogger.com/atom/ns#' term='web'/><category scheme='http://www.blogger.com/atom/ns#' term='cgi'/><title type='text'>CGI</title><content type='html'>有時候，想要瞭解某些協定、標準，最準確也最快速的方法就是直接去讀它的 RFC 文件。&lt;br /&gt;應該也不用讀太多，每條協定幾乎都有摘要（Abstract）跟它的存在目的（Purpose）。&lt;br /&gt;&lt;br /&gt;這篇是我對 Common Gateway Interface 的筆記。&lt;br /&gt;先節錄幾段 Wikipedia 與 RFC 3875 的內容：&lt;br /&gt;&lt;br /&gt;&lt;i&gt;" The Common Gateway Interface (CGI) is a standard (RFC 3875: CGI Version 1.1) that defines how web server software can delegate the generation of web pages to a text-based application. Such applications are known as CGI scripts; they can be written in any programming language, although scripting languages are often used. "&lt;/i&gt; - Wikipedia&lt;br /&gt;&lt;br /&gt;&lt;i&gt;" The Common Gateway Interface (CGI) is a simple interface for running external programs, software or gateways under an information server in a platform-independent manner.  Currently, the supported information servers are HTTP servers. "&lt;/i&gt; - RFC 3875&lt;br /&gt;&lt;br /&gt;&lt;i&gt;" The Common Gateway Interface (CGI) allows an HTTP server and a CGI script to share responsibility for responding to client requests. "&lt;/i&gt; - RFC 3875&lt;br /&gt;&lt;br /&gt;&lt;i&gt;" The server is responsible for managing connection, data transfer, transport and network issues related to the client request, whereas the CGI script handles the application issues, such as data access and document processing. "&lt;/i&gt; - RFC 3875&lt;br /&gt;&lt;br /&gt;簡單來說，「HTTP 伺服器」負責管理來自 Client 端的連線、傳輸等網路協定的相關事宜。&lt;br /&gt;「HTTP 伺服器」會呼叫並執行「CGI 程式」，「CGI 程式」負責處理應用程式面的事宜，&lt;br /&gt;例如，Client 端要求的檔案，是否需要經過處理，是否需要存取資料庫等等。&lt;br /&gt;&lt;br /&gt;「CGI 程式」允許使用許多不同的程式語言來實作。&lt;br /&gt;但那麼多種程式語言，「HTTP 伺服器」如果呼叫某種語言的「CGI 程式」，&lt;br /&gt;就得有對應該程式語言的呼叫介面，那「HTTP 伺服器」的開發人員會瘋掉。&lt;br /&gt;&lt;br /&gt;所以「CGI」就出現了。&lt;br /&gt;&lt;br /&gt;「CGI」規範了「HTTP 伺服器」與「CGI 程式」間的連接。&lt;br /&gt;「CGI」是包在「HTTP 伺服器」裡面的。&lt;br /&gt;&lt;br /&gt;如果想要用某種程式語言撰寫「CGI 程式」供「HTTP 伺服器」叫用，&lt;br /&gt;該程式語言必須有遵守「CGI」規範的接口。&lt;br /&gt;在實際的例子中，這些接口就是 Apache 伺服器上的：&lt;br /&gt;mod_php、mod_python、mod_ruby、mod_perl、mod_mono 等等。&lt;br /&gt;&lt;br /&gt;「HTTP 伺服器」只要提供一套「CGI」規範給各種程式語言遵循即可，&lt;br /&gt;而各種程式語言如何去實作「CGI」規範的接口，就是它自己的事了。&lt;br /&gt;&lt;br /&gt;通常，Client 端送來的參數跟 URL 其實就是在呼叫要執行的「CGI 程式」了。&lt;br /&gt;&lt;br /&gt;我畫了一張簡圖，希望大家指正：&lt;br /&gt;&lt;img src="https://docs.google.com/drawings/pub?id=1m6XjmDUG7Q2zTPLxxnCaM1SWuAOUviWNKRKHUP37L7Y&amp;amp;w=590&amp;amp;h=440"&gt;&lt;br /&gt;&lt;br /&gt;＊&lt;br /&gt;&lt;br /&gt;【WSGI】&lt;br /&gt;&lt;br /&gt;&lt;i&gt;" WSGI (Web Server Gateway Interface) was created as a low-level interface between web servers and web applications or frameworks to promote common ground for portable web application development. WSGI is based on the existing CGI standard. "&lt;/i&gt; - Wikipedia&lt;br /&gt;&lt;br /&gt;Python 的 WSGI，應該是欲取代掉 mod_python 的角色。&lt;br /&gt;同一種程式語言，但該語言的多種框架如果對應到多種不同的「HTTP 伺服器」，還是很累人。&lt;br /&gt;早先 Python 爲了迎合 CGI、FastCGI、mod_python 等不同規範，吃了不少苦頭。&lt;br /&gt;&lt;br /&gt;但實際應用上，WSGI 沒那麼簡單。&lt;br /&gt;WSGI 還可以起到 Middleware 的作用，可以看成是伺服器 response 內容的 filter。&lt;br /&gt;&lt;br /&gt;這篇寫得很精彩：http://blog.ez2learn.com/2010/01/27/introduction-to-wsgi/&lt;br /&gt;&lt;br /&gt;＊&lt;br /&gt;&lt;br /&gt;【Rack】&lt;br /&gt;&lt;br /&gt;&lt;i&gt;" Rack provides a minimal, modular and adaptable interface for developing web applications in Ruby. By wrapping HTTP requests and responses in the simplest way possible, it unifies and distills the API for web servers, web frameworks, and software in between (the so-called middleware) into a single method call. "&lt;/i&gt; - Wikipedia&lt;br /&gt;&lt;br /&gt;在 Ruby 方面，受 WSGI 的啓發產生了 Rack。&lt;br /&gt;&lt;br /&gt;&lt;i&gt;" Rack 的規範非常簡單：就是需要一個 Call method 吃進一個 Enviroment 參數，然後回傳一個 Array，Array 裡面包含 status，header，body。"&lt;/i&gt; - XDite&lt;br /&gt;&lt;br /&gt;請參考：http://blog.xdite.net/?p=1557&lt;br /&gt;&lt;br /&gt;Reference：&lt;br /&gt;01. http://en.wikipedia.org/wiki/Common_Gateway_Interface&lt;br /&gt;02. http://tools.ietf.org/html/rfc3875&lt;br /&gt;03. http://en.wikipedia.org/wiki/Web_Server_Gateway_Interface&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18689056-1110413738519091130?l=zx-1986.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://zx-1986.blogspot.com/feeds/1110413738519091130/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://zx-1986.blogspot.com/2011/01/common-gateway-interface.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18689056/posts/default/1110413738519091130'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18689056/posts/default/1110413738519091130'/><link rel='alternate' type='text/html' href='http://zx-1986.blogspot.com/2011/01/common-gateway-interface.html' title='CGI'/><author><name>張旭</name><uri>https://profiles.google.com/105134833883146274095</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-pO0m_C6_zQw/AAAAAAAAAAI/AAAAAAAAD0c/h7KNyAUN14w/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18689056.post-6886083525831559866</id><published>2011-04-11T11:46:00.006+08:00</published><updated>2011-09-28T14:00:17.802+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='redhat'/><category scheme='http://www.blogger.com/atom/ns#' term='mysql'/><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='php'/><category scheme='http://www.blogger.com/atom/ns#' term='ubuntu'/><title type='text'>phpMyAdmin</title><content type='html'>【Red Hat Enterprise Linux】&lt;br /&gt;&lt;pre class="brush:bash"&gt;yum install phpmyadmin&lt;br /&gt;cp  /usr/share/phpmyadmin/config.sample.inc.php  /usr/share/phpmyadmin/config.inc.php&lt;br /&gt;cat  /etc/httpd/conf.d/phpmyadmin.conf&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;【Ubuntu】&lt;br /&gt;&lt;pre class="brush:bash"&gt;apt-get install phpmyadmin&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;【tarball】&lt;br /&gt;&lt;br /&gt;新版的 phpMyAdmin 需要 PHP 5.2 以上的環境。&lt;br /&gt;&lt;br /&gt;大致流程是：&lt;br /&gt;1. 安裝 HTTP Server 與 PHP 環境&lt;br /&gt;2. 下載最新版的 phpMyAdmin&lt;br /&gt;3. 解壓縮到 HTTP Server 的 Document Root&lt;br /&gt;4. 編輯 phpMyAdmin 的 config.inc.php 檔&lt;br /&gt;5. 連線 http://localhost/phpmyadmin 測試&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush:bash"&gt;# using Ubuntu + Apache + MySQL&lt;br /&gt;sudo apt-get install apache2 mysql-server php5-mysql&lt;br /&gt;cd /var/www&lt;br /&gt;wget URL_of_phpMyAdmin_Source_Package.zip （http://www.phpmyadmin.net/home_page/downloads.php）&lt;br /&gt;unzip phpMyAdmin*.zip&lt;br /&gt;mv phpMyAdmin* phpmyadmin&lt;br /&gt;cd /var/www/phpmyadmin&lt;br /&gt;cp config.sample.inc.php config.inc.php&lt;br /&gt;vim config.inc.php&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;簡單的 config.inc.php 設定&lt;br /&gt;&lt;pre class="brush:php"&gt;$cfg['blowfish_secret'] = '123'; /* YOU MUST FILL IN THIS FOR COOKIE AUTH! */&lt;br /&gt;&lt;br /&gt;/*&lt;br /&gt; * Servers configuration&lt;br /&gt; */&lt;br /&gt;$i = 0; &lt;br /&gt;&lt;br /&gt;/*&lt;br /&gt; * First server&lt;br /&gt; */&lt;br /&gt;$i++;&lt;br /&gt;/* Authentication type */&lt;br /&gt;$cfg['Servers'][$i]['auth_type'] = 'cookie';&lt;br /&gt;/* Server parameters */&lt;br /&gt;$cfg['Servers'][$i]['host'] = 'localhost';  // MySQL 主機的位址&lt;br /&gt;$cfg['Servers'][$i]['connect_type'] = 'tcp';&lt;br /&gt;$cfg['Servers'][$i]['compress'] = false;&lt;br /&gt;/* Select mysqli if your server has it */&lt;br /&gt;$cfg['Servers'][$i]['extension'] = 'mysql';&lt;br /&gt;$cfg['Servers'][$i]['AllowNoPassword'] = false;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Reference：&lt;br /&gt;01. http://wiki.phpmyadmin.net/pma/Quick_Install&lt;br /&gt;02. http://wiki.phpmyadmin.net/pma/Config&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18689056-6886083525831559866?l=zx-1986.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://zx-1986.blogspot.com/feeds/6886083525831559866/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://zx-1986.blogspot.com/2011/04/phpmyadmin.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18689056/posts/default/6886083525831559866'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18689056/posts/default/6886083525831559866'/><link rel='alternate' type='text/html' href='http://zx-1986.blogspot.com/2011/04/phpmyadmin.html' title='phpMyAdmin'/><author><name>張旭</name><uri>https://profiles.google.com/105134833883146274095</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-pO0m_C6_zQw/AAAAAAAAAAI/AAAAAAAAD0c/h7KNyAUN14w/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18689056.post-526331495093484217</id><published>2011-04-08T13:53:00.012+08:00</published><updated>2011-09-28T14:00:34.888+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='redhat'/><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><title type='text'>Red Hat Kickstart 自動安裝</title><content type='html'>&lt;i&gt;The Red Hat Kickstart installation method is used primarily (but not exclusively) by the Red Hat Enterprise Linux operating system to automatically perform unattended operating system installation and configuration.&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;【制作 RHEL Kickstart CD】&lt;br /&gt;&lt;br /&gt;事前准備：&lt;br /&gt;Red Hat Enterprise Linux 安裝光碟&lt;br /&gt;一些編寫好的 kickstart 檔案（例如：rhel5.cfg）&lt;br /&gt;一台可以燒錄 ISO 檔的 Linux 主機&lt;br /&gt;&lt;br /&gt;首先，把 Red Hat Enterprise Linux 安裝光碟放到 Linux 主機。&lt;br /&gt;到裏面找到 /images 這個資料夾，復制裏面的 boot.iso 到 Linux 主機上。&lt;br /&gt;&lt;br /&gt;使用以下指令把 boot.iso 挂載到 /opt/boot_iso：&lt;br /&gt;&lt;pre class="brush:bash"&gt;sudo su -&lt;br /&gt;mkdir -p /opt/boot_iso&lt;br /&gt;mount -o loop -t iso9660 boot.iso /opt/boot_iso&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;復制 /opt/boot_iso 裏面的 isolinux 資料夾：&lt;br /&gt;&lt;pre class="brush:bash"&gt;cd /opt/boot_iso&lt;br /&gt;cp -R isolinux /opt/&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;復制編寫好的 kickstart 檔案到 isolinux 資料夾：&lt;br /&gt;&lt;pre class="brush:bash"&gt;cp rhel5.cfg /opt/isolinux&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;將 isolinux 資料夾制作成可開機的 boot.iso：&lt;br /&gt;&lt;pre class="brush:bash"&gt;cd /opt/isolinux&lt;br /&gt;mkisofs -r -T -J -V "kickstart" -b isolinux.bin -c boot.cat -no-emul-boot -boot-load-size 4 -boot-info-table -v -o /opt/kickstart.iso .&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;［注意！］&lt;br /&gt;RHEL 5 跟 RHEL 6 的光碟檢查碼與架構都不一樣！&lt;br /&gt;每個不同的版號都得使用不同版本的 boot.iso 來制作 kickstart 光碟！&lt;br /&gt;簡單說：&lt;br /&gt;RHEL 5.5 得使用它自己的 boot.iso 制作自己的 kickstart 光碟。&lt;br /&gt;RHEL 5.6 得使用它自己的 boot.iso 制作自己的 kickstart 光碟。&lt;br /&gt;雖然它們的 rhel5.cfg 檔案可以共用。&lt;br /&gt;這跟光碟的檢查碼有關系。&lt;br /&gt;&lt;br /&gt;將產生的 /opt/kickstart.iso 檔案燒錄成光碟。&lt;br /&gt;&lt;br /&gt;使用該光碟開機後，在安裝的 shell prompt 中輸入指定的 kickstart 檔名：&lt;br /&gt;&lt;pre class="brush:bash"&gt;&gt; linux ks=cdrom://rhel5.cfg&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;當開機檔案與指定的 kickstart 讀取到記憶體之後，開始安裝時，可能會碰到以下訊息：&lt;br /&gt;&lt;pre class="brush:bash"&gt;The Red Hat Enterprise Linux CD was not found in any of your CDROM drives.&lt;br /&gt;Please insert the Red Hat Enterprise Linux CD and press OK to retry.&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;此時，把 kickstart 光碟拿出來，放入原始的 RHEL 安裝光碟，壓 Enter。&lt;br /&gt;順利的話，RHEL 就會照指定的 kickstart 檔的設定安裝了。&lt;br /&gt;&lt;br /&gt;Reference：&lt;br /&gt;01. http://en.wikipedia.org/wiki/Kickstart_(Linux)&lt;br /&gt;02. http://junktrap.naihl.net/doku.php?id=redhat:kickstartbootcd&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18689056-526331495093484217?l=zx-1986.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://zx-1986.blogspot.com/feeds/526331495093484217/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://zx-1986.blogspot.com/2011/04/kickstart.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18689056/posts/default/526331495093484217'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18689056/posts/default/526331495093484217'/><link rel='alternate' type='text/html' href='http://zx-1986.blogspot.com/2011/04/kickstart.html' title='Red Hat Kickstart 自動安裝'/><author><name>張旭</name><uri>https://profiles.google.com/105134833883146274095</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-pO0m_C6_zQw/AAAAAAAAAAI/AAAAAAAAD0c/h7KNyAUN14w/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18689056.post-3153124363491620449</id><published>2011-04-07T10:21:00.001+08:00</published><updated>2011-09-28T14:00:39.322+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='git'/><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><title type='text'>git-flow</title><content type='html'>git-flow 下載：&lt;br /&gt;&lt;pre class="brush:bash"&gt;git clone https://github.com/nvie/gitflow.git&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;git-flow 有綁一個 submodule 叫 shFlags（https://github.com/nvie/shFlags）。&lt;br /&gt;必須執行以下指令來設定：&lt;br /&gt;&lt;pre class="brush:bash"&gt;git submodule init &amp;&amp; git submodule update&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;如果無法執行 git submodule update&lt;br /&gt;可以直接切換到剛 clone 下來的 gitflow 內，手動下載 shFlags：&lt;br /&gt;&lt;pre class="brush:bash"&gt;cd gitflow&lt;br /&gt;rm -rf shFlags&lt;br /&gt;git clone https://github.com/nvie/shFlags.git&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;git-flow 安裝：&lt;br /&gt;&lt;pre class="brush:bash"&gt;cd gitflow&lt;br /&gt;sudo make install&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;使用說明：&lt;br /&gt;http://jeffkreeftmeijer.com/2010/why-arent-you-using-git-flow/&lt;br /&gt;http://codesherpas.com/screencasts/on_the_path_gitflow.mov&lt;br /&gt;http://vimeo.com/16018419&lt;br /&gt;&lt;br /&gt;Reference：&lt;br /&gt;01. https://github.com/nvie/gitflow&lt;br /&gt;02. http://ihower.tw/blog/archives/5140&lt;br /&gt;03. https://github.com/nvie/gitflow/raw/develop/contrib/gitflow-installer.sh&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18689056-3153124363491620449?l=zx-1986.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://zx-1986.blogspot.com/feeds/3153124363491620449/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://zx-1986.blogspot.com/2011/04/git-flow.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18689056/posts/default/3153124363491620449'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18689056/posts/default/3153124363491620449'/><link rel='alternate' type='text/html' href='http://zx-1986.blogspot.com/2011/04/git-flow.html' title='git-flow'/><author><name>張旭</name><uri>https://profiles.google.com/105134833883146274095</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-pO0m_C6_zQw/AAAAAAAAAAI/AAAAAAAAD0c/h7KNyAUN14w/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18689056.post-1050696670197414688</id><published>2011-03-29T10:52:00.010+08:00</published><updated>2011-09-28T14:01:34.320+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='autofs'/><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='nfs'/><title type='text'>autofs</title><content type='html'>使用 autofs 工具來挂載 NFS 檔案系統。&lt;br /&gt;&lt;br /&gt;服務的執行腳本：&lt;br /&gt;&lt;pre class="brush:bash"&gt;/etc/init.d/autofs  [ start | stop | reload ]&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;auto.master 預設在 /etc 下，它記錄了 mapping files 的位置。&lt;br /&gt;如果說，mount points 的對照是地圖，auto.master 不是地圖，它記錄的是地圖的位置。&lt;br /&gt;&lt;br /&gt;/etc/auto.master&lt;br /&gt;&lt;pre class="brush:bash"&gt;/misc    /etc/auto.misc    --timeout 60&lt;br /&gt;&lt;/pre&gt;例如，要在 /misc 資料夾內做 auto mount，則 autofs 啟動時會全權控制該資料夾。&lt;br /&gt;并且根據它對應的地圖檔 /etc/auto.misc 的內容，自動挂載磁區。&lt;br /&gt;--timeout 則是設定該 auto mount 根目錄（/misc）下所有 mount point 的卸載時間。&lt;br /&gt;超過 60 秒沒有對該磁區存取，就自動 umount 了。&lt;br /&gt;&lt;br /&gt;根據 /etc/auto.master 的地圖指引，還需要編寫一個真正的 auto mount points 對映檔。&lt;br /&gt;/etc/auto.misc&lt;br /&gt;&lt;pre class="brush:bash"&gt;the_directory_name_in_misc    -OPTIONS    remote_host:/path&lt;br /&gt;&lt;/pre&gt;第一個欄位記錄的是 auto mount point 的名稱，假設叫 foo。&lt;br /&gt;則該 autofs 的根目錄（/misc）不能有名稱為 foo 的資料夾。&lt;br /&gt;基本上，/misc 會保持空的，autofs 會自動在挂載時建立 mount point。&lt;br /&gt;&lt;br /&gt;第二個欄位就是挂載的設定選項了，使用逗號＂,＂分隔，記得最前面要加一個 -&lt;br /&gt;例如：-default,rw&lt;br /&gt;&lt;br /&gt;最後一個欄位是遠端主機 NFS export 出來的挂載點。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18689056-1050696670197414688?l=zx-1986.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://zx-1986.blogspot.com/feeds/1050696670197414688/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://zx-1986.blogspot.com/2011/03/autofs.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18689056/posts/default/1050696670197414688'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18689056/posts/default/1050696670197414688'/><link rel='alternate' type='text/html' href='http://zx-1986.blogspot.com/2011/03/autofs.html' title='autofs'/><author><name>張旭</name><uri>https://profiles.google.com/105134833883146274095</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-pO0m_C6_zQw/AAAAAAAAAAI/AAAAAAAAD0c/h7KNyAUN14w/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18689056.post-7427201492692590592</id><published>2011-03-25T23:42:00.003+08:00</published><updated>2011-03-29T10:02:43.308+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='redhat'/><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='yum'/><title type='text'>架設 Yum 伺服器</title><content type='html'>&lt;pre class="brush:bash"&gt;#!/bin/bash&lt;br /&gt;&lt;br /&gt;# RPMForge&lt;br /&gt;&lt;br /&gt;cd /yum/rpmforge5/i386/&lt;br /&gt;wget --accept=rpm --level=1 --recursive --no-parent -N --no-directories --directory-prefix=./rpmforge http://apt.sw.be/redhat/el5/en/i386/rpmforge/RPMS/&lt;br /&gt;wget --accept=rpm --level=1 --recursive --no-parent -N --no-directories --directory-prefix=./dag http://apt.sw.be/redhat/el5/en/i386/dag/RPMS/&lt;br /&gt;wget --accept=rpm --level=1 --recursive --no-parent -N --no-directories --directory-prefix=./extras http://apt.sw.be/redhat/el5/en/i386/extras/RPMS/&lt;br /&gt;&lt;br /&gt;cd /yum/rpmforge5/x86_64/&lt;br /&gt;wget --accept=rpm --level=1 --recursive --no-parent -N --no-directories --directory-prefix=./rpmforge http://apt.sw.be/redhat/el5/en/x86_64/rpmforge/RPMS/&lt;br /&gt;wget --accept=rpm --level=1 --recursive --no-parent -N --no-directories --directory-prefix=./dag http://apt.sw.be/redhat/el5/en/x86_64/dag/RPMS/&lt;br /&gt;wget --accept=rpm --level=1 --recursive --no-parent -N --no-directories --directory-prefix=./extras http://apt.sw.be/redhat/el5/en/x86_64/extras/RPMS/&lt;br /&gt;&lt;br /&gt;cd /yum/rpmforge6/i386/&lt;br /&gt;wget --accept=rpm --level=1 --recursive --no-parent -N --no-directories --directory-prefix=./rpmforge http://apt.sw.be/redhat/el6/en/i386/rpmforge/RPMS/&lt;br /&gt;wget --accept=rpm --level=1 --recursive --no-parent -N --no-directories --directory-prefix=./dag http://apt.sw.be/redhat/el6/en/i386/dag/RPMS/&lt;br /&gt;wget --accept=rpm --level=1 --recursive --no-parent -N --no-directories --directory-prefix=./extras http://apt.sw.be/redhat/el6/en/i386/extras/RPMS/&lt;br /&gt;&lt;br /&gt;cd /yum/rpmforge6/x86_64/&lt;br /&gt;wget --accept=rpm --level=1 --recursive --no-parent -N --no-directories --directory-prefix=./rpmforge http://apt.sw.be/redhat/el6/en/x86_64/rpmforge/RPMS/&lt;br /&gt;wget --accept=rpm --level=1 --recursive --no-parent -N --no-directories --directory-prefix=./dag http://apt.sw.be/redhat/el6/en/x86_64/dag/RPMS/&lt;br /&gt;wget --accept=rpm --level=1 --recursive --no-parent -N --no-directories --directory-prefix=./extras http://apt.sw.be/redhat/el6/en/x86_64/extras/RPMS/&lt;br /&gt;&lt;br /&gt;# EPEL&lt;br /&gt;&lt;br /&gt;cd /yum/epel5/&lt;br /&gt;wget --accept=rpm --level=1 --recursive --no-parent -N --no-directories --directory-prefix=./i386 http://download.fedora.redhat.com/pub/epel/5/i386/&lt;br /&gt;wget --accept=rpm --level=1 --recursive --no-parent -N --no-directories --directory-prefix=./i386/debug http://download.fedora.redhat.com/pub/epel/5/i386/debug/&lt;br /&gt;wget --accept=rpm --level=1 --recursive --no-parent -N --no-directories --directory-prefix=./x86_64 http://download.fedora.redhat.com/pub/epel/5/x86_64/&lt;br /&gt;wget --accept=rpm --level=1 --recursive --no-parent -N --no-directories --directory-prefix=./x86_64/debug http://download.fedora.redhat.com/pub/epel/5/x86_64/debug/&lt;br /&gt;wget --accept=rpm --level=1 --recursive --no-parent -N --no-directories --directory-prefix=./i386 http://download.fedora.redha t.com/pub/epel/testing/5/i386/&lt;br /&gt;wget --accept=rpm --level=1 --recursive --no-parent -N --no-directories --directory-prefix=./x86_64 http://download.fedora.red hat.com/pub/epel/testing/5/x86_64/&lt;br /&gt;&lt;br /&gt;cd /yum/epel6/&lt;br /&gt;wget --accept=rpm --level=1 --recursive --no-parent -N --no-directories --directory-prefix=./i386 http://download.fedora.redhat.com/pub/epel/6/i386/&lt;br /&gt;wget --accept=rpm --level=1 --recursive --no-parent -N --no-directories --directory-prefix=./i386/debug http://download.fedora.redhat.com/pub/epel/6/i386/debug/&lt;br /&gt;wget --accept=rpm --level=1 --recursive --no-parent -N --no-directories --directory-prefix=./x86_64 http://download.fedora.redhat.com/pub/epel/6/x86_64/&lt;br /&gt;wget --accept=rpm --level=1 --recursive --no-parent -N --no-directories --directory-prefix=./x86_64/debug http://download.fedora.redhat.com/pub/epel/6/x86_64/debug/&lt;br /&gt;wget --accept=rpm --level=1 --recursive --no-parent -N --no-directories --directory-prefix=./i386 http://download.fedora.redhat.com/pub/epel/testing/6/i386/&lt;br /&gt;wget --accept=rpm --level=1 --recursive --no-parent -N --no-directories --directory-prefix=./x86_64 http://download.fedora.redhat.com/pub/epel/testing/6/x86_64/&lt;br /&gt;&lt;br /&gt;# Remi&lt;br /&gt;&lt;br /&gt;cd /yum/remi5/&lt;br /&gt;wget --accept=rpm --level=1 --recursive --no-parent -N --no-directories --directory-prefix=./i386 http://rpms.famillecollet.com/enterprise/5/remi/i386/&lt;br /&gt;wget --accept=rpm --level=1 --recursive --no-parent -N --no-directories --directory-prefix=./i386 http://rpms.famillecollet.com/enterprise/5/olds/i386/&lt;br /&gt;wget --accept=rpm --level=1 --recursive --no-parent -N --no-directories --directory-prefix=./x86_64 http://rpms.famillecollet.com/enterprise/5/remi/x86_64/ &lt;br /&gt;wget --accept=rpm --level=1 --recursive --no-parent -N --no-directories --directory-prefix=./x86_64 http://rpms.famillecollet.com/enterprise/5/olds/x86_64/&lt;br /&gt;&lt;br /&gt;cd /yum/remi6/&lt;br /&gt;wget --accept=rpm --level=1 --recursive --no-parent -N --no-directories --directory-prefix=./i386 http://rpms.famillecollet.com/enterprise/6/remi/i386/&lt;br /&gt;wget --accept=rpm --level=1 --recursive --no-parent -N --no-directories --directory-prefix=./i386 http://rpms.famillecollet.com/enterprise/6/olds/i386/&lt;br /&gt;wget --accept=rpm --level=1 --recursive --no-parent -N --no-directories --directory-prefix=./x86_64 http://rpms.famillecollet.com/enterprise/6/remi/x86_64/ &lt;br /&gt;wget --accept=rpm --level=1 --recursive --no-parent -N --no-directories --directory-prefix=./x86_64 http://rpms.famillecollet.com/enterprise/6/olds/x86_64/&lt;br /&gt;&lt;br /&gt;# CentOS&lt;br /&gt;&lt;br /&gt;cd /yum/centos5&lt;br /&gt;wget --accept=rpm --level=1 --recursive --no-parent -N --no-directories --directory-prefix=./i386 http://mirror.centos.org/centos/5/os/i386/CentOS/&lt;br /&gt;wget --accept=rpm --level=1 --recursive --no-parent -N --no-directories --directory-prefix=./x86_64 http://mirror.centos.org/centos/5/os/x86_64/CentOS/&lt;br /&gt;&lt;br /&gt;#cd /yum/centos6/&lt;br /&gt;#wget --accept=rpm --level=1 --recursive --no-parent -N --no-directories --directory-prefix=./i386 http://mirror.centos.org/centos/6/os/i386/&lt;br /&gt;#wget --accept=rpm --level=1 --recursive --no-parent -N --no-directories --directory-prefix=./x86_64 http://mirror.centos.org/centos/6/os/x86_64/&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18689056-7427201492692590592?l=zx-1986.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://zx-1986.blogspot.com/feeds/7427201492692590592/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://zx-1986.blogspot.com/2010/11/setup-yum-server.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18689056/posts/default/7427201492692590592'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18689056/posts/default/7427201492692590592'/><link rel='alternate' type='text/html' href='http://zx-1986.blogspot.com/2010/11/setup-yum-server.html' title='架設 Yum 伺服器'/><author><name>張旭</name><uri>https://profiles.google.com/105134833883146274095</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-pO0m_C6_zQw/AAAAAAAAAAI/AAAAAAAAD0c/h7KNyAUN14w/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18689056.post-8385229531011520830</id><published>2011-03-22T11:24:00.006+08:00</published><updated>2011-03-22T11:25:06.609+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='wget'/><title type='text'>wget</title><content type='html'>&lt;i&gt;GNU Wget is a free software package for retrieving files using HTTP, HTTPS and FTP, the most widely-used Internet protocols. It is a non-interactive commandline tool, so it may easily be called from scripts, cron jobs, terminals without X-Windows support, etc.&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;wget 是開放原始碼的下載工具，它可以透過 HTTP、HTTPS、FTP 協議擷取指定的檔案。&lt;br /&gt;wget 并不是一個可以互動的指令工具，不過它可以輕易地套在 shell script 中。&lt;br /&gt;wget 不需要圖形環境支援，只要有文字終端機就可以使用了。&lt;br /&gt;&lt;br /&gt;可以把 wget 想成平常在網頁上點了一個連結的效果，不同的地方在於：&lt;br /&gt;當你點了一個連結，瀏覽器會把你導向該連結的網頁，并把該網頁畫出來，呈現給你看；&lt;br /&gt;當你給定一個連結給 wget，wget 會幫你把該連結的檔案給抓下來，放到你的硬碟。&lt;br /&gt;&lt;br /&gt;例如：&lt;br /&gt;wget www.google.com&lt;br /&gt;&lt;br /&gt;wget 會把 Google 的首頁抓下來，你會得到一個 Google 首頁的 index.html 檔案。&lt;br /&gt;你可能會疑惑，Google 首頁那些圖片呢？那些首頁引用的 Javascript 檔呢？&lt;br /&gt;&lt;br /&gt;wget 預設只針對使用者給的 URL 做處理。&lt;br /&gt;至于該 URL 的內容所含的其他 URL 資源，wget 不會去抽取它們。&lt;br /&gt;&lt;br /&gt;不過 wget 有許多參數跟選項，適當地調整跟啟動它們，就會有非常驚人的能力。&lt;br /&gt;它們就像是 wget 的魔法按鈕，按下去就會達成你的願望。&lt;br /&gt;它們很多，很繁復。&lt;br /&gt;&lt;br /&gt;例如：&lt;br /&gt;wget -r www.google.com&lt;br /&gt;&lt;br /&gt;r 就是 recursive 的意思，遞迴處理。&lt;br /&gt;這個動作就是網路上經常聽到“砍站”，意思就是把整個網站完整的復制下來。&lt;br /&gt;&lt;br /&gt;這個選項要非常小心使用！&lt;br /&gt;通常會使用 --level 參數限制遞迴的層數，&lt;br /&gt;否則網站的 URL 如果連到另一個網站，另一個網站又連到 ...&lt;br /&gt;搞不好你會把整個 Internet 抓下來 :-)&lt;br /&gt;&lt;br /&gt;不過 wget 在做 recursive 下載時，會嚴謹恪守 Robot Exclusion 的規範。&lt;br /&gt;robots.txt 內規定不能動、不能挖取的檔案，wget 是不會去觸犯的。&lt;br /&gt;可以嘗試一下，看看效果：&lt;br /&gt;wget -r http://en.wikipedia.org&lt;br /&gt;&lt;br /&gt;＊&lt;br /&gt;&lt;br /&gt;［1］&lt;br /&gt;&lt;br /&gt;目標：把 OEC SPACE（http://www.hsiu28.net）網站整個抓到 /tmp 資料夾下。&lt;br /&gt;&lt;br /&gt;指令：&lt;br /&gt;&lt;pre class="brush:bash"&gt;wget --mirror --wait=2 --html-extension --convert-links --directory-prefix=/tmp http://www.hsiu28.net&lt;br /&gt;&lt;/pre&gt;--mirror：映射網站，遞迴網站的所有連結，搜尋必要之檔案。&lt;br /&gt;--wait=2：等待兩秒才送下一個 request，可用 --random-wait 取代。&lt;br /&gt;--html-extension：在 .cgi 或 .php 或 .jsp 等等的副檔名最後再加上 .html。&lt;br /&gt;--covert-links：把網頁上所有絕對位置連結轉成本地端的相對位置連結。&lt;br /&gt;--directory-prefix=路徑：本地端儲存的路徑，可簡寫成“-P 路徑”。&lt;br /&gt;&lt;br /&gt;--mirror 其實是好幾個選項的合體（-r -N -l inf -nr）：&lt;br /&gt;-r，--recursive：遞迴下載。&lt;br /&gt;-l，--level：遞迴下載的層數，inf 表示無限。&lt;br /&gt;-N，--timestamping：檢查遠端文件的時間是否較本地端的新，再決定是否下載。&lt;br /&gt;-nr，--dont-remove-listing：保留 .listing 檔案。&lt;br /&gt;&lt;br /&gt;［2］&lt;br /&gt;&lt;br /&gt;目標：續傳一個大檔案。&lt;br /&gt;&lt;br /&gt;指令：&lt;br /&gt;&lt;pre class="brush:bash"&gt;wget -c http://URL/the_big_file&lt;br /&gt;&lt;/pre&gt;-c，--continue：檔案續傳&lt;br /&gt;&lt;br /&gt;［3］&lt;br /&gt;&lt;br /&gt;目標：將 http://apt.sw.be/redhat/ 的 rpm 通通鏡像下來。&lt;br /&gt;&lt;br /&gt;指令：&lt;br /&gt;&lt;pre class="brush:bash"&gt;wget --mirror --reject=gif,bmp,html --accept=rpm,RPM http://apt.sw.be/redhat/&lt;br /&gt;&lt;/pre&gt;-A，--accept=副檔名：要下載的檔案類型&lt;br /&gt;-R，--reject=副檔名：不要下載的檔案類型&lt;br /&gt;&lt;br /&gt;［4］&lt;br /&gt;&lt;br /&gt;目標：使用 wildcard 遮罩（*.rpm）下載 FTP 上的一大堆 rpm 檔案。&lt;br /&gt;&lt;br /&gt;注意，此處并沒有使用 --mirror，而是使用通用字元告訴 wget 下載符合規則的檔案。&lt;br /&gt;這樣的用法，在 wget 中，僅限於 FTP 協議才可以。&lt;br /&gt;&lt;br /&gt;指令：&lt;br /&gt;&lt;pre class="brush:bash"&gt;# FTP ONLY!&lt;br /&gt;wget ftp://apt.sw.be/mirrors/redhat/rhel/beta/6/i386/os/Packages/*.rpm&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;［5］&lt;br /&gt;&lt;br /&gt;目標：透過 HTTP 下載 apt.sw.be 上 EPEL 5 i386 所有的 .rpm 檔案。&lt;br /&gt;&lt;br /&gt;wget 并沒有辦法透過 HTTP 使用 wildcard 遮罩下載檔案。&lt;br /&gt;在 HTTP 中，必須指定檔名，wget 才有辦法處理。&lt;br /&gt;要達成類似 wildcard 的效果，必須繞個彎想法子，&lt;br /&gt;所以改成指定 wget 下載這層目錄下副檔名為 rpm 的檔案，&lt;br /&gt;不過，前提是該 Web Server 必須開放該層目錄的 file list，wget 才有辦法解析。&lt;br /&gt;&lt;br /&gt;指令：&lt;br /&gt;&lt;pre class="brush:bash"&gt;wget --accept=rpm --level=1 --recursive --no-parent -N http://apt.sw.be/redhat/el5/en/i386/rpmforge/RPMS/&lt;br /&gt;&lt;/pre&gt;-np，--no-parent：不要追溯回父目錄&lt;br /&gt;&lt;br /&gt;Reference：&lt;br /&gt;01. http://blog.dayuer.com/freebsd-tooltips/wget_help&lt;br /&gt;02. http://redhat.ecenter.idv.tw/bbs/showthread.php?threadid=39222&lt;br /&gt;03. http://ubuntuforums.org/showthread.php?t=638362&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18689056-8385229531011520830?l=zx-1986.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://zx-1986.blogspot.com/feeds/8385229531011520830/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://zx-1986.blogspot.com/2011/03/wget.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18689056/posts/default/8385229531011520830'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18689056/posts/default/8385229531011520830'/><link rel='alternate' type='text/html' href='http://zx-1986.blogspot.com/2011/03/wget.html' title='wget'/><author><name>張旭</name><uri>https://profiles.google.com/105134833883146274095</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-pO0m_C6_zQw/AAAAAAAAAAI/AAAAAAAAD0c/h7KNyAUN14w/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18689056.post-1675404485083313954</id><published>2011-03-22T11:24:00.005+08:00</published><updated>2011-03-22T11:24:47.855+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='curl'/><title type='text'>curl</title><content type='html'>cURL&lt;br /&gt;&lt;br /&gt;表單範例：&lt;br /&gt;&lt;pre class="brush:xml"&gt;&lt;form method="GET" action="do.cgi"&gt;&lt;!-- 或是 method="POST" --&gt;&lt;br /&gt;&lt;input type=text name="who"&gt;&lt;br /&gt;&lt;input type=submit name=press value=OK&gt;&lt;br /&gt;&lt;/form&gt;&lt;/pre&gt;&lt;br /&gt;GET method 互動&lt;br /&gt;curl "www.hostname.com/when/do.cgi?who=me&amp;press=OK"&lt;br /&gt;&lt;br /&gt;POST method 互動&lt;br /&gt;curl -d "who=me&amp;press=%20OK%20" www.hostname.com/when/do.cgi&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18689056-1675404485083313954?l=zx-1986.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://zx-1986.blogspot.com/feeds/1675404485083313954/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://zx-1986.blogspot.com/2011/03/curl.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18689056/posts/default/1675404485083313954'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18689056/posts/default/1675404485083313954'/><link rel='alternate' type='text/html' href='http://zx-1986.blogspot.com/2011/03/curl.html' title='curl'/><author><name>張旭</name><uri>https://profiles.google.com/105134833883146274095</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-pO0m_C6_zQw/AAAAAAAAAAI/AAAAAAAAD0c/h7KNyAUN14w/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18689056.post-8839565812600404227</id><published>2011-03-15T09:41:00.003+08:00</published><updated>2011-09-28T14:01:51.111+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='redhat'/><category scheme='http://www.blogger.com/atom/ns#' term='git'/><category scheme='http://www.blogger.com/atom/ns#' term='ubuntu'/><title type='text'>Gitorious</title><content type='html'>Setup Gitorious in Ubuntu&lt;br /&gt;Setup Gitorious in RHEL 5.x&lt;br /&gt;&lt;br /&gt;https://github.com/zx1986/Gitorious-Setup&lt;br /&gt;&lt;br /&gt;舊筆記怎麽被刪掉了！？&lt;br /&gt;該死！&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18689056-8839565812600404227?l=zx-1986.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://zx-1986.blogspot.com/feeds/8839565812600404227/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://zx-1986.blogspot.com/2011/03/gitorious.html#comment-form' title='1 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18689056/posts/default/8839565812600404227'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18689056/posts/default/8839565812600404227'/><link rel='alternate' type='text/html' href='http://zx-1986.blogspot.com/2011/03/gitorious.html' title='Gitorious'/><author><name>張旭</name><uri>https://profiles.google.com/105134833883146274095</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-pO0m_C6_zQw/AAAAAAAAAAI/AAAAAAAAD0c/h7KNyAUN14w/s512-c/photo.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18689056.post-3465821329980395320</id><published>2011-02-08T09:04:00.000+08:00</published><updated>2011-02-08T09:04:43.446+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='javascript'/><title type='text'>Javascript Frameworks</title><content type='html'>【jQuery】&lt;br /&gt;&lt;br /&gt;jQuery 雖然稱爲 Javascript 的「Framework」，但它其實更像一套「Toolkit」。&lt;br /&gt;而且是一套非常強的 Javascript Toolkit，族繁不及備載的外掛、五花八門的特效等等。&lt;br /&gt;&lt;br /&gt;jQuery 包好了許多函式，叫用這些函式，可以很快速地完成從前需要花許多功夫的效果。&lt;br /&gt;在 jQuery 這個自成體系的工具包裡，DOM 的操作變得簡單、易用、快速。&lt;br /&gt;除了這些，jQuery 也提供了它自成一系的 Ajax 操作，還有各種動畫特效等。&lt;br /&gt;&lt;br /&gt;撰寫 Javascript 很多時候都是在處理或控制 DOM 元素。&lt;br /&gt;修改某個 div 裡的內容、刪除某列 tr、爲某個 id 的元素加上指定的 class ...&lt;br /&gt;許多想得到的 DOM 操作，使用 jQuery 的話，可以省下不少程式碼數量。 &lt;br /&gt;&lt;br /&gt;引入 jQuery：&lt;br /&gt;&lt;pre class="brush:xml"&gt;&lt;script src="http://code.jquery.com/jquery-1.4.4.js"&gt;&lt;/script&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;在 HTML 文件中引入 jQuery 函式庫之後，就可以透過「jQuery」或其別名「$」使用它。&lt;br /&gt;例如很多時候，我們希望使用者在整個 DOM 文件建構好之後，再來執行 Javascript 的直譯動作，&lt;br /&gt;傳統的 Javascript 會這樣控制：&lt;br /&gt;&lt;pre class="brush:js"&gt;window.onReady = function()&lt;br /&gt;{&lt;br /&gt;    // your codes&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;在 jQuery 裡，則是這樣作：&lt;br /&gt;&lt;pre class="brush:js"&gt;jQuery(document).ready(function()&lt;br /&gt;{&lt;br /&gt;    // your codes&lt;br /&gt;});&lt;br /&gt;&lt;/pre&gt;或是&lt;br /&gt;&lt;pre class="brush:js"&gt;$(document).ready(function()&lt;br /&gt;{&lt;br /&gt;    // your codes&lt;br /&gt;});&lt;br /&gt;&lt;/pre&gt;另一種比較嚴謹的做法是：&lt;br /&gt;&lt;pre class="brush:js"&gt;(function($){&lt;br /&gt;    $(document).ready(function(){&lt;br /&gt;        // your codes&lt;br /&gt;    });&lt;br /&gt;}(jQuery));&lt;br /&gt;&lt;/pre&gt;最後一種寫法直接定義並執行一個匿名函式 function($)，&lt;br /&gt;function($) 中的 $ 指的是要傳入這個匿名函式的參數，&lt;br /&gt;而這個傳入的參數，寫在最後一行的掛號裡，即 (jQuery)。&lt;br /&gt;這樣的作法可以避免跟其他也使用 $ 作爲名稱空間 prefix 的框架衝突，&lt;br /&gt;如此一來，在這個匿名函式 function($) 的範圍內，$ 確定僅是 jQuery。&lt;br /&gt;&lt;br /&gt;如果有用 Javascript 做過 DOM 元素控制（寫過 Javascript 幾乎都做過），&lt;br /&gt;那麼改用 jQuery 來作同樣事情時，一定會驚豔於 jQuery 的簡便、易用。&lt;br /&gt;例如選擇 DOM 裡面某個 id 的元素，單純的 Javascript 寫法是：&lt;br /&gt;&lt;pre class="brush:js"&gt;var a = document.getElementById("some_id");&lt;br /&gt;&lt;/pre&gt;使用 jQuery 則可以這樣寫：&lt;br /&gt;&lt;pre class="brush:js"&gt;var a = $("#some_id");&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;＊&lt;br /&gt;&lt;br /&gt;【Mootools】&lt;br /&gt;&lt;br /&gt;MooTools 是一個用 JavaScript 原本應有的方式來寫 JavaScript 的框架（Framework）。&lt;br /&gt;其立意是實作一個跟 JavaScript 非常相似的 API 並且針對各個部分加以強化。&lt;br /&gt;&lt;br /&gt;引入 Mootools：&lt;br /&gt;&lt;pre class="brush:xml"&gt;&lt;script src="http://mootools.net/download/get/mootools-core-1.3-full-compat.js"&gt;&lt;/script&gt;&lt;br /&gt;&lt;/pre&gt;＊&lt;br /&gt;&lt;br /&gt;【YUI】&lt;br /&gt;&lt;br /&gt;YUI 使用：&lt;br /&gt;&lt;pre class="brush:xml"&gt;&lt;script src="http://yui.yahooapis.com/3.1.1/build/yui/yui-min.js"&gt;&lt;/script&gt;&lt;br /&gt;&lt;script src="http://yui.yahooapis.com/3.2.0/build/simpleyui/simpleyui-min.js"&gt;&lt;/script&gt;&lt;br /&gt;&lt;/pre&gt;＊&lt;br /&gt;&lt;br /&gt;【ExtJS】&lt;br /&gt;&lt;br /&gt;ExtJS 使用：&lt;br /&gt;&lt;pre class="brush:xml"&gt;&lt;script src="http://rightjs.org/hotlink/right.js"&gt;&lt;/script&gt;&lt;br /&gt;&lt;/pre&gt;＊&lt;br /&gt;&lt;br /&gt;【RightJS】&lt;br /&gt;&lt;br /&gt;RightJS 使用：&lt;br /&gt;&lt;pre class="brush:xml"&gt;&lt;link rel="stylesheet" type="text/css" href="Your ExtJS Path/resources/css/ext-all.css" /&gt;&lt;br /&gt;&lt;script type="text/javascript" src="Your ExtJS Path/adapter/ext/ext-base.js"&gt;&lt;/script&gt;&lt;br /&gt;&lt;script type="text/javascript" src="Your ExtJS Path/ext-all.js"&gt;&lt;/script&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;＊&lt;br /&gt;&lt;br /&gt;Roadmap&lt;br /&gt;&lt;br /&gt;http://docs.jquery.com/JQuery_1.5_Roadmap&lt;br /&gt;http://www.sencha.com/products/js/roadmap.php&lt;br /&gt;http://yuilibrary.com/projects/yui3/roadmap&lt;br /&gt;http://rightjs.org/blog&lt;br /&gt;&lt;br /&gt;＊&lt;br /&gt;&lt;br /&gt;Reference：&lt;br /&gt;01. http://www.ibm.com/developerworks/cn/web/wa-jsframeworks&lt;br /&gt;02. http://www.ibm.com/developerworks/web/library/wa-aj-extjs&lt;br /&gt;03. http://clay0529.blogspot.com/2010/02/yui-3.html&lt;br /&gt;04. http://yufei34514.blog.163.com/blog/static/407836552009114154340&lt;br /&gt;05. http://www.ajaxray.com/blog/2009/04/05/extjs-quick-start-guide-for-jquery-developers-javascript-howto&lt;br /&gt;06. http://jqueryvsmootools.com&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18689056-3465821329980395320?l=zx-1986.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://zx-1986.blogspot.com/feeds/3465821329980395320/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://zx-1986.blogspot.com/2010/11/javascript-frameworks.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18689056/posts/default/3465821329980395320'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18689056/posts/default/3465821329980395320'/><link rel='alternate' type='text/html' href='http://zx-1986.blogspot.com/2010/11/javascript-frameworks.html' title='Javascript Frameworks'/><author><name>張旭</name><uri>https://profiles.google.com/105134833883146274095</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-pO0m_C6_zQw/AAAAAAAAAAI/AAAAAAAAD0c/h7KNyAUN14w/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18689056.post-896981182608305474</id><published>2011-02-07T12:54:00.000+08:00</published><updated>2011-02-07T12:54:33.484+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='javascript'/><title type='text'>Javascript</title><content type='html'>&lt;del&gt;&lt;br /&gt;初次接觸 Javascript 時，沒有認真把它當成一門程式語言來對待。&lt;br /&gt;我想，這應該也是許多人的通病。&lt;br /&gt;&lt;br /&gt;它的名字真的害人不淺，如果本身有以貌取人的毛病，那慘了：&lt;br /&gt;「輕量級的 Java 語言嘛，Java 式的 Script 嘛，對吧？」&lt;br /&gt;&lt;br /&gt;千　萬　別　這　麼　想　！&lt;br /&gt;&lt;br /&gt;Javascript 跟 Java 沒有關係！&lt;br /&gt;Javascript 絕對不只是 Script 那麼單純！&lt;br /&gt;&lt;br /&gt;最近要做一份 Javascript Frameworks 的文件。&lt;br /&gt;我發現，如果要寫一份關於 Javascript Frameworks 的文件，&lt;br /&gt;沒有先弄清楚 Javascript，似乎不大對。&lt;br /&gt;&lt;br /&gt;但是要全部記錄在同一篇，也太自不量力了。&lt;br /&gt;Javascript Frameworks 每一套幾乎都可以各自出一本書了。&lt;br /&gt;Javascript 當然更不用說了，市面上 Javascript 的書成百上千。&lt;br /&gt;&lt;br /&gt;我寫這篇文章，記錄跟整理我對 Javascript 的瞭解，幫自己作個備忘。&lt;br /&gt;內容會持續更新與修正，希望大家指正與教導！&lt;br /&gt;&lt;/del&gt;&lt;br /&gt;&lt;br /&gt;＊&lt;br /&gt;&lt;br /&gt;資訊技術的世界，一個十年大概就像社會中一個世紀那麼遙遠。&lt;br /&gt;Javascript 的出現，對 2010 的我們來說，就像是曾祖輩的事情。&lt;br /&gt;雖然 Javascript 第一次出現只不過是在 1995 年而已。&lt;br /&gt;&lt;br /&gt;有些古老的歷史對現在新接觸 Javascript 的人來說，似乎不是那麼重要了。&lt;br /&gt;因爲瀏覽器大戰實在太遙遠了，就像是第一次世界大戰那樣。&lt;br /&gt;但 Javascript 的由來、爲何而存在、是怎麼樣的一個存在，我想都應該值得搞清楚。&lt;br /&gt;&lt;br /&gt;＊&lt;br /&gt;&lt;br /&gt;故事的開始，要從網際網路（Internet）說起。&lt;br /&gt;&lt;br /&gt;Internet 的出現，最初是美國在學術與軍事應用上的考量。&lt;br /&gt;從學術方面簡單說，就是爲了讓各地學術單位、研究人員可以交流分享成果。&lt;br /&gt;&lt;br /&gt;那該怎麼樣來呈現 Internet 上的資訊呢？&lt;br /&gt;又該用什麼樣的工具來瀏覽 Internet 上的資訊呢？&lt;br /&gt;於是，HTML 和瀏覽器粉末登場。&lt;br /&gt;&lt;br /&gt;從學術分享的目的出發，HTML 最初設計出來就是爲了呈現文字。&lt;br /&gt;因爲科學研究報告的許多內容就是文字，或者再加上些圖片。&lt;br /&gt;&lt;br /&gt;HTML 完整的稱呼是 HyperText Markup Language。&lt;br /&gt;&lt;br /&gt;Markup Language 是標記語言，就是用規定的格式將某些內容標記起來。&lt;br /&gt;例如，買手搖式飲料的時候，老闆會在杯子上面寫好哪杯是珍奶，哪杯是綠茶。&lt;br /&gt;老闆「寫上去」那個動作就是「標記」的意思。&lt;br /&gt;&lt;br /&gt;Hyper 在英文中則有過度的、超過的等意思。&lt;br /&gt;爲什麼叫它過度的文字，或者說它是超越文字的文字？&lt;br /&gt;因爲 HTML 除了可以標記出內容的結構：哪邊是段落、哪邊是標題、哪些又是表格；&lt;br /&gt;HTML 還可以標記出「連結」：從這裡可以連結到哪個文件、哪個位置。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18689056-896981182608305474?l=zx-1986.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://zx-1986.blogspot.com/feeds/896981182608305474/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://zx-1986.blogspot.com/2011/01/javascript.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18689056/posts/default/896981182608305474'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18689056/posts/default/896981182608305474'/><link rel='alternate' type='text/html' href='http://zx-1986.blogspot.com/2011/01/javascript.html' title='Javascript'/><author><name>張旭</name><uri>https://profiles.google.com/105134833883146274095</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-pO0m_C6_zQw/AAAAAAAAAAI/AAAAAAAAD0c/h7KNyAUN14w/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18689056.post-2658569479908333336</id><published>2011-01-30T22:14:00.002+08:00</published><updated>2011-01-30T22:42:21.752+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='web'/><title type='text'>Web Servers</title><content type='html'>Apache（httpd）&lt;br /&gt;Lighttpd&lt;br /&gt;Nginx&lt;br /&gt;Passenger&lt;br /&gt;Unicorn&lt;br /&gt;Mongrel&lt;br /&gt;Thin&lt;br /&gt;GWS（Google Web Server）&lt;br /&gt;IIS（Internet Information Services）&lt;br /&gt;&lt;br /&gt;Reference：&lt;br /&gt;01. http://wiki.nginx.org/Chs&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18689056-2658569479908333336?l=zx-1986.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://zx-1986.blogspot.com/feeds/2658569479908333336/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://zx-1986.blogspot.com/2011/01/web-servers.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18689056/posts/default/2658569479908333336'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18689056/posts/default/2658569479908333336'/><link rel='alternate' type='text/html' href='http://zx-1986.blogspot.com/2011/01/web-servers.html' title='Web Servers'/><author><name>張旭</name><uri>https://profiles.google.com/105134833883146274095</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-pO0m_C6_zQw/AAAAAAAAAAI/AAAAAAAAD0c/h7KNyAUN14w/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18689056.post-1573687770721024032</id><published>2011-01-28T13:50:00.002+08:00</published><updated>2011-01-30T22:19:48.137+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='system'/><title type='text'>Storage Area Network</title><content type='html'>LUN&lt;br /&gt;&lt;br /&gt;Reference：&lt;br /&gt;01. http://en.wikipedia.org/wiki/Storage_area_network&lt;br /&gt;02. http://en.wikipedia.org/wiki/Logical_Unit_Number&lt;br /&gt;03. http://en.wikipedia.org/wiki/ISCSI&lt;br /&gt;04. http://en.wikipedia.org/wiki/Fibre_Channel&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18689056-1573687770721024032?l=zx-1986.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://zx-1986.blogspot.com/feeds/1573687770721024032/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://zx-1986.blogspot.com/2011/01/storage-area-network.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18689056/posts/default/1573687770721024032'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18689056/posts/default/1573687770721024032'/><link rel='alternate' type='text/html' href='http://zx-1986.blogspot.com/2011/01/storage-area-network.html' title='Storage Area Network'/><author><name>張旭</name><uri>https://profiles.google.com/105134833883146274095</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-pO0m_C6_zQw/AAAAAAAAAAI/AAAAAAAAD0c/h7KNyAUN14w/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18689056.post-590801211314662789</id><published>2011-01-26T18:40:00.011+08:00</published><updated>2011-01-30T22:19:15.283+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><category scheme='http://www.blogger.com/atom/ns#' term='php'/><category scheme='http://www.blogger.com/atom/ns#' term='ubuntu'/><title type='text'>Plurk 機器人</title><content type='html'>做一個 Plurk 機器人其實不難，只是相關的文章好像都很少。&lt;br /&gt;或許太簡單了，大家都懶得寫。&lt;br /&gt;但我這種容易忘的人還是幫自己記錄一下好了。&lt;br /&gt;初次接觸的人也可以一起參詳一下，大家一起做寫有趣的應用。&lt;br /&gt;&lt;br /&gt;＊&lt;br /&gt;&lt;br /&gt;其實許多程式機器人的原理都是差不多的。&lt;br /&gt;假設你已經很熟悉 Plurk 的使用了，你想要做提供用餐建議的機器人，該怎麼做呢？&lt;br /&gt;請你先想象一下你自己就是這個機器人（機器人其實就是模擬「人」，對吧？）。&lt;br /&gt;&lt;br /&gt;你的工作情境是：&lt;br /&gt;&lt;pre class="brush:xml; gutter:false;"&gt;　　&lt;br /&gt;你的 Plurk 帳號會允許所有使用者的好友請求，並且把對方也加入爲好友。&lt;br /&gt;&lt;br /&gt;假設有 10 位 Plurk 使用者加你好友，你也會加他們到你的好友清單。&lt;br /&gt;這樣一來，你的 Plurk 河道上就會追蹤到這 10 位使用者的 plurks 了。&lt;br /&gt;&lt;br /&gt;你「每一分鐘」檢查一次自己的 Plurk 河道是否有新的未讀訊息。&lt;br /&gt;檢查的條件：&lt;br /&gt;1）訊息狀態是否爲「好奇（wonder）」；&lt;br /&gt;2）訊息內容是否爲「早餐」或「中餐」或「晚餐」；&lt;br /&gt;3）符合以上條件，則回應用餐建議到該訊息。&lt;br /&gt;&lt;br /&gt;回應的流程：&lt;br /&gt;1）根據「早」、「中」、「晚」餐，從對應的用餐建議庫裡隨機選出一個；&lt;br /&gt;2）組合成完整的回應內容，回覆到對應的訊息底下。&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18689056-590801211314662789?l=zx-1986.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://zx-1986.blogspot.com/feeds/590801211314662789/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://zx-1986.blogspot.com/2011/01/plurk-robot.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18689056/posts/default/590801211314662789'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18689056/posts/default/590801211314662789'/><link rel='alternate' type='text/html' href='http://zx-1986.blogspot.com/2011/01/plurk-robot.html' title='Plurk 機器人'/><author><name>張旭</name><uri>https://profiles.google.com/105134833883146274095</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-pO0m_C6_zQw/AAAAAAAAAAI/AAAAAAAAD0c/h7KNyAUN14w/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18689056.post-7947498741802215017</id><published>2011-01-16T22:54:00.002+08:00</published><updated>2011-01-31T10:26:22.360+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='system'/><title type='text'>LDAP</title><content type='html'>Reference：&lt;br /&gt;01. http://linux.vbird.org/somepaper/20050817-ldap-1.pdf&lt;br /&gt;02. http://www.howtoforge.com/install-and-configure-openldap-on-centos-5&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18689056-7947498741802215017?l=zx-1986.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://zx-1986.blogspot.com/feeds/7947498741802215017/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://zx-1986.blogspot.com/2011/01/ldap.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18689056/posts/default/7947498741802215017'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18689056/posts/default/7947498741802215017'/><link rel='alternate' type='text/html' href='http://zx-1986.blogspot.com/2011/01/ldap.html' title='LDAP'/><author><name>張旭</name><uri>https://profiles.google.com/105134833883146274095</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-pO0m_C6_zQw/AAAAAAAAAAI/AAAAAAAAD0c/h7KNyAUN14w/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18689056.post-1283449639711990712</id><published>2010-11-10T10:53:00.004+08:00</published><updated>2010-11-10T10:55:35.681+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='network'/><title type='text'>中華電信網路工程師</title><content type='html'>Cisco - Network Operating System&lt;br /&gt;點對點 - 專綫介面卡 - 介面卡櫃&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18689056-1283449639711990712?l=zx-1986.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://zx-1986.blogspot.com/feeds/1283449639711990712/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://zx-1986.blogspot.com/2010/11/hinet-network-engineer.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18689056/posts/default/1283449639711990712'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18689056/posts/default/1283449639711990712'/><link rel='alternate' type='text/html' href='http://zx-1986.blogspot.com/2010/11/hinet-network-engineer.html' title='中華電信網路工程師'/><author><name>張旭</name><uri>https://profiles.google.com/105134833883146274095</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-pO0m_C6_zQw/AAAAAAAAAAI/AAAAAAAAD0c/h7KNyAUN14w/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18689056.post-3481692627356819375</id><published>2010-09-25T11:20:00.000+08:00</published><updated>2010-09-25T11:20:04.848+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='coscup2010'/><category scheme='http://www.blogger.com/atom/ns#' term='GNOME.Asia'/><title type='text'>COSCUP 2010 札記</title><content type='html'>COSCUP 2010 + GNOME.Asia 2010&lt;br /&gt;&lt;br /&gt;這是我第一次參加 COSCUP，今年還與 GNOME.Asia 合辦，實在是非常豐富。&lt;br /&gt;而且 COSCUP 團隊竟然還搞到中央研究院這種場地，it's freaking COOL！&lt;br /&gt;&lt;br /&gt;＊2010/08/14&lt;br /&gt;&lt;br /&gt;開場演講是 HTML5 – More Web for More people，&lt;br /&gt;講者是 Opera 的 CSO（Chief Standards Officer，首席網路標準長）Charles McCathieNevile。&lt;br /&gt;其實我聽不是很懂，坐後排聲音很小，加上我英文也不是那麼好。&lt;br /&gt;他曾在 W3C 制定網路標準，如 HTML、CSS 等，我想正是他在 Opera 擔任 CSO 的原因。&lt;br /&gt;對於網頁設計師、網路程式師來說，他簡直就是衆神之一，因爲都得照他們訂的規則來玩。&lt;br /&gt;當他談到 HTML5 在無障礙方面的設計時，我死命地用力聽。&lt;br /&gt;我吃了不少無障礙的苦頭。&lt;br /&gt;但對於他能從身障者的角度出發，設計能照顧到所有人的網頁規則，我真的很佩服。&lt;br /&gt;這是真正的大愛。&lt;br /&gt;無障礙設計對網頁設計師來說可能有點綁手綁腳，&lt;br /&gt;可是如果有天我手腳或眼不便，而又需要上網時，我將會非常感謝製作無障礙網頁的人。&lt;br /&gt;（延伸閱讀：http://www.ifanr.com/18070）&lt;br /&gt;&lt;br /&gt;下一個 session 我其實很猶豫，我在想要不要去 Sahana Taiwan Development 那場，&lt;br /&gt;因爲它可能會和我以後在氣象局的服役工作有關。&lt;br /&gt;不過最後還是在國際會議廳坐滿了 HTML5 for Programmers 與 HTML5: Building the Next Generation Web Applications 這兩場。&lt;br /&gt;當然，也因此錯過了 CSS3 新功能大補帖那場。&lt;br /&gt;&lt;br /&gt;這兩場的講者分別是 Mike Smith 與 Eric Bidelman，&lt;br /&gt;前者在 W3C 與 WHATWG（http://www.whatwg.org）負責 HTML5，&lt;br /&gt;後者是 Google 工程師，Google Docs 是他幹的。&lt;br /&gt;當然，我還是有聽沒有懂，不過他們介紹了兩個自己爲 HTML5 做的 demo 網站，都非常酷！&lt;br /&gt;Slide 那個我之前有看過，另一個很適合做 HTML5 入門教程。&lt;br /&gt;http://slides.html5rocks.com/&lt;br /&gt;http://www.html5rocks.com/&lt;br /&gt;&lt;br /&gt;中午免費的魚翅（魚排雞翅）便當後，是此次贊助商之一的 Nokia 來講 Meego。&lt;br /&gt;其實 Qt 做出來的介面我還蠻喜歡的，有質感，場外也有 Nokia N900 給大家試用。&lt;br /&gt;只是主講的 Nokia 技術經理張弛先生，有點貴氣逼人的味道。&lt;br /&gt;他這個人讓我覺得很有距離感，而且商業氣息很濃厚。&lt;br /&gt;我在猜，中國大陸現階段企業內管理階級的人是不是都這個態勢？&lt;br /&gt;&lt;br /&gt;下午我選的場次是 Doxygen 程式說明文件產生器與 Gettext 網站多國語系製作。&lt;br /&gt;講者分別是 Thinker（http://www.codemud.net/~thinker）與 Tsung（http://plog.longwin.com.tw）。&lt;br /&gt;&lt;br /&gt;Thinker 使用他的一個專案 MadButterfly 當作例子，示範 Doxygen 怎麼運作。&lt;br /&gt;附帶一提，MadButterfly 是一個非常酷的 SVG 專案（http://www.assembla.com/wiki/show/MadButterfly）。&lt;br /&gt;簡單說，Doxygen 是一個輔助產生程式說明文件的工具。&lt;br /&gt;使用前，先將 Doxygen 配置好，設定文字編碼（例如：utf-8）等參數。&lt;br /&gt;在程式碼中進行註解時，只要引入 Doxygen 看得懂的區隔符號（例如：/*! 註解 */），&lt;br /&gt;執行 doxygen 指令時，Doxygen 就會抓取這些內容產生有條不紊的 html 檔或 pdf 檔。&lt;br /&gt;這種東西需要親手做過一次，就會馬上懂了。&lt;br /&gt;詳細操作需要翻一下手冊（http://www.stack.nl/~dimitri/doxygen/manual.html）。&lt;br /&gt;&lt;br /&gt;Gettext（http://zh.wikipedia.org/wiki/Gettext）是 GNU 一套常用的多語系製作工具。&lt;br /&gt;會產生 .po 與 .mo 檔，前者是人類看得懂要翻譯內容的檔案，後者是編譯後的二進位檔。&lt;br /&gt;其實我是今天聽講才知道 .po .mo 檔，因爲從沒參與過 Open Source 的翻譯工作 ...&lt;br /&gt;簡單說，就是把需要翻譯的字詞抽取出來放到 .po ，人們編輯 .po 檔，把翻譯寫進去。&lt;br /&gt;.po 檔完成後，再編譯成二進位的 .mo 檔，程式執行時照 Gettext 的規矩就可以取用了。&lt;br /&gt;最後，Tsung 提了一個三分鐘就可以完成全網站多語系製作的方法：Google Translator。&lt;br /&gt;我當下真是嚇一跳，是真的嚇一跳！一語驚醒夢中人！&lt;br /&gt;雖然講者可能是半開玩笑，可是我真的覺得取用 Google 的輪子就好了！&lt;br /&gt;&lt;a href="http://www.boston.com/bigpicture/2010/09/around_the_solar_system.html"&gt;The Big Picture &lt;/a&gt; 就把它用得很好。&lt;br /&gt;&lt;br /&gt;之後我前往了 Processing – 專為設計師、建築師、藝術家設計的簡易又強大的數位藝術工具，以及自由軟體於互動技術。講者分別是沈聖博（http://arrowkey.net）與甘泰瑋（http://www.twkan.com）。&lt;br /&gt;&lt;br /&gt;Processing 是一套底層爲 Java 的設計工具，它強調是數位藝術工具，&lt;br /&gt;它使用起來有點像在寫 OpenGL，又像是寫 SVG，可是並不會那麼複雜，&lt;br /&gt;且使用對像包括藝術家，不會有程式門檻，只要會英文，基本上就可以寫了。&lt;br /&gt;它很明顯是一套玩弄數位影像的工具，一張很普通的圖片丟進去，可以有很藝術的變化。&lt;br /&gt;聽起來有點像 photoshop 的濾鏡，只是它可以是動畫的。&lt;br /&gt;另外講者自己設計的 slide 也很有趣，tag 在上面漂啊漂的，也是用 Processing 做的，&lt;br /&gt;他有提供 code 出來（http://arrowkey.net/openCode/tagSlides/）。&lt;br /&gt;&lt;br /&gt;互動技術談到擴增實境（Augmented Reality, AR），那是我研究所其他幾位同學的題目，&lt;br /&gt;講者在做的是用 QR Codes  當作 AR 的辨識標記，自己寫了掃描讀取的工具。&lt;br /&gt;他的作品還上過 SIGGRAPH，非常屌！&lt;br /&gt;講者有許多筆記在他的部落格（http://jwill.pixnet.net/blog）。&lt;br /&gt;&lt;br /&gt;接下來我跳了兩個 session，分別是以中文的名义融入开源世界與 Jetpack SDK。&lt;br /&gt;講者是黃鵬（https://launchpad.net/~shawn-p-huang）與尤孝庭（http://blog.littleb.tc）。&lt;br /&gt;&lt;br /&gt;黃鵬是個很了不起的傢伙！&lt;br /&gt;Linux 底下許多許多許多許多許多的中文化都是他幹的。&lt;br /&gt;我現在正在用來打字產生這篇文章的 ibus 輸入法平臺也是他寫。&lt;br /&gt;（雖然在 KDE 與 Chrome 底下還有點毛病啦，哈。）&lt;br /&gt;他在這場演講談了許多開源中文字型的故事，不過我聽過就忘啦！&lt;br /&gt;現在中文字型我都是選用文泉微正黑體，Google Droid 在簡體中文的方面並不是很好。&lt;br /&gt;我注意到他講話很溫吞、優雅，感覺像是老北京衚衕裡，住在三合院內的生活大師。&lt;br /&gt;不知道他是不是北京人？&lt;br /&gt;&lt;br /&gt;尤孝庭是臺灣的 Mozilla 親善大師，他做了些很有趣的 Firefox 套件（https://addons.mozilla.org/en-US/firefox/user/2627913）。&lt;br /&gt;爲了玩 Voyage 那個套件，我還特地打開許久沒用的 Firefox，瀏覽一堆網站製作記錄。&lt;br /&gt;他介紹的 Jetpack 是一套開發 Firefox 套件的 SDK，雖然我不大懂，不過這東西很酷！&lt;br /&gt;你只要使用 HTML、CSS、Javascript 就可以瞬間爲自己寫一個 Firefox 外掛。&lt;br /&gt;未來 Firefox 4 的外掛應該是以這個爲平臺，安裝或卸載外掛也不需重啓 Firefox。&lt;br /&gt;&lt;br /&gt;晚餐大會提供了一大堆半徑爲 z，高爲 a 的圓柱體食物（pi*z*z*a），還有可樂。&lt;br /&gt;當然，全部都是免費的。爽！free software，free food。&lt;br /&gt;&lt;br /&gt;吃飽後在 Ubuntu 的 BOF（Birds Of a Feather）玩。&lt;br /&gt;下午的我是 Programmer 我也想當 Musician 那場的講師張正一，他是 Ubuntu Studio 玩家。&lt;br /&gt;他介紹了一套 drum machine 軟體：Hydrogen（http://www.hydrogen-music.org）。&lt;br /&gt;他還現場表演打擊了一段，實在是非常的 rock！&lt;br /&gt;Ubuntu Studio 真的很「工作室」，玩起來跟在做 3D 動畫沒兩樣（它也真的可以做 3D）。&lt;br /&gt;會後我跑去問他些問題，因爲我也曾夢想有一套自己的爵士鼓，沒錢買鼓，敲電腦總行吧？&lt;br /&gt;他拉我到場外從樂理開始聊起，哈哈！oh，my！&lt;br /&gt;我說有一把吉他，可是不會彈。&lt;br /&gt;他隨身竟然拿出一把烏克麗麗！開始從最基本的和弦爲我講起。&lt;br /&gt;我真的很不好意思，他講得很認真，我這音痴只好努力地聽。&lt;br /&gt;&lt;br /&gt;晚上回去的路上，同車除了我的音樂老師張正一，（笑）&lt;br /&gt;還有 CrBoy（http://blog.crboy.net）與一位 COSCUP 工作人員。&lt;br /&gt;我記得火車上，張魔法設計師正一還拿出烏克麗麗來彈小曲，真是太愜意了！&lt;br /&gt;我一定得學好吉他。&lt;br /&gt;&lt;br /&gt;我幾乎每次參加自由社群的活動都是扮演吃白食的角色。&lt;br /&gt;沒啥貢獻，沒有能力，沒有東西可以分享 :-(&lt;br /&gt;所以在 Ubuntu BOF 上，我只能掏錢買些貼紙，&lt;br /&gt;小小些錢，希望社群能有些小小補，這是我目前力所能及了 ...&lt;br /&gt;&lt;br /&gt;不過最近對宇宙、黑洞、大爆炸倒有些心得，不知道這種能不能分享，哈。&lt;br /&gt;&lt;br /&gt;＊2010/08/15&lt;br /&gt;&lt;br /&gt;第二天的開場演講是 Road to GNOME 3，講者是 Brian Cameron。&lt;br /&gt;&lt;br /&gt;Brian 是 GNOME 基金會的指導董事，現任職於 Oracle。&lt;br /&gt;他 demo 了新一代 GNOME 的樣子（http://www.youtube.com/watch?v=oYOe9INyy88）。&lt;br /&gt;好吧，我得老實說：我嚇到了。where is my application menu !? where is task bar !?&lt;br /&gt;GNOME 3 應該算是 UI 上的大革命，真的很眩目。&lt;br /&gt;但是我想，很多人應該跟我一樣，對於習慣新的革命性的東西，多少都會有點恐懼。&lt;br /&gt;畢竟革命是需要破壞的，破壞原有的習慣、原有的流程。&lt;br /&gt;其實看到 demo 畫面的當下，我馬上決定回家後要裝 KDE 起來用看看了。&lt;br /&gt;我想先習慣一下，以後 GNOME 3 真的變這樣的時候，至少我還多一個選擇。&lt;br /&gt;我後來發現，GNOME 3 的多個桌面其實就是 KDE 裡面 Activities 的概念。&lt;br /&gt;說不定之後會很快習慣 GNOME 3，說不定習慣後會很有效率？who know.&lt;br /&gt;&lt;br /&gt;Tea Break 後，我還是去了 GNOME 的 session。&lt;br /&gt;&lt;br /&gt;Building and Using a Memory Profiler，講者 Holger Hans Peter Freyther。&lt;br /&gt;完。全。聽。不。懂！&lt;br /&gt;感覺是記憶體效能調校的事情，好像在教一些技巧，還是在做一些 hacks？&lt;br /&gt;好像是講解怎麼去優化 GNOME 底下程式對記憶體的存取（?）&lt;br /&gt;&lt;br /&gt;接着是 xPad – Building Simple Tablet OS with Gtk/WebKit，講者 Penk，陳品勳。&lt;br /&gt;Penk 來頭可不小，他是 xPUD 的老爹（http://www.xpud.org）。&lt;br /&gt;這場人突然爆多的，像是熱門院線片。&lt;br /&gt;Penk 也沒有讓大家失望，除了預告新東西外，他整場真是活力滿滿。&lt;br /&gt;雖然技術細節我還是聽不懂，可是這場真的很 party，damn happy!&lt;br /&gt;&lt;br /&gt;The Culture of Sharing，講者 Sascha Pallenberg。&lt;br /&gt;在談 Open Source 文化、心態、思想的事情。&lt;br /&gt;&lt;br /&gt;App Engine 大爆料，講者葉平，是位物理學家，待過 NASA，目前在 Google 服務。&lt;br /&gt;主要在分享這次 COSCUP 報名系統使用 Google App Engine 處理的小故事。&lt;br /&gt;提醒大家，程式務必要記得做 exception 處理。&lt;br /&gt;&lt;br /&gt;之後我聽了 The NoSQL Movement 與 Implementation of websocket server program。&lt;br /&gt;講者分別是周立瑋與彭兆蔚。&lt;br /&gt;&lt;br /&gt;NoSQL 那場講者講話也很優雅、緩慢，所以我差點睡着了。&lt;br /&gt;他本來要介紹 Couch Database，可是前面鋪陳太久了，剛要開始提就結束了。&lt;br /&gt;NoSQL 有點像在談雲計算時代的資料庫應該是怎麼樣的。&lt;br /&gt;有篇文章可以參考一下：http://oss-tw.blogspot.com/2010/04/nosql.html&lt;br /&gt;NoSQL 現在被解釋爲 Not Only SQL。&lt;br /&gt;&lt;br /&gt;websocket 這場的彭兆蔚他很酷，他本來是臺大心理系的，自修考上了臺大資工所。&lt;br /&gt;他擅長 Java，目前在資策會服務，開講前他好像酸了一下當前的瀏覽器大戰，哈。&lt;br /&gt;我對這場的印象就是，websocket 像是 AJAX 的正式化了，就是文件中有它了。&lt;br /&gt;從舊有的 Client 跟 Server 要哪些東西，Server 才給 Client 哪些東西；&lt;br /&gt;變成只要 Client 告訴 Server 哪些是需要的， Server 主動推這些資訊給 Client。&lt;br /&gt;但 websocket 的內容還是草案，講者也強調他現在都是根據 draft 在寫 websocket 程式。&lt;br /&gt;我覺得它非常麻煩，head 裡面個很怪的密碼規則，而且還得 coder 自行處理加解密！&lt;br /&gt;因爲一定有安全性問題，總不能隨便接收一個不知道是不是真的 Server 推來的檔案吧？&lt;br /&gt;coder 得根據 websocket 的草案自行寫程式在 Server 端處理加解密問題。&lt;br /&gt;我在想，這之後一定會 API 或人家弄好的標準工具，Apache 可能也會有大改版支援。&lt;br /&gt;但講者直接點出，國外有草案就馬上在做新的東西了，我們不能總是等工具出來才創新！&lt;br /&gt;真是有骨氣、有志氣、有才幹 ...&lt;br /&gt;真羨慕。&lt;br /&gt;&lt;br /&gt;之後回到國際會議廳，是一連串的 Cloud 相關技術與工具。&lt;br /&gt;說起來我應該覺得熟悉才是，可我知道的跟議題相比，真是小巫見大巫了。&lt;br /&gt;Building a Cloud Computing Platform by Using Open Source Software - Michael Pan&lt;br /&gt;快速佈署叢集式的搜尋引擎（CrawlZilla） - 郭文傑&lt;br /&gt;Yahoo Traffic Server, a Powerful Cloud Gatekeeper - Shih-Yong Wang&lt;br /&gt;Solr on Cassandra - Gasol&lt;br /&gt;這些都得多聽幾次才會有概念。&lt;br /&gt;&lt;br /&gt;當然，我還有一些遺珠之憾：&lt;br /&gt;Sahana Taiwan Development - 胡崇偉 Marr (中研院, 研究助理)&lt;br /&gt;網頁設計師必備: CSS3 新功能大補帖 - 謝子斌 (Web Evangelist, Opera)&lt;br /&gt;由馬鈴薯小子看軟體在地化 - 黃佑仁 Rock (台大資工)&lt;br /&gt;Cloud Experience — from Google to Delta - 翟本喬 (台達電子, 資深處長)&lt;br /&gt;Javascript in Linux Desktop - yurenju&lt;br /&gt;&lt;br /&gt;好在每次 COSCUP 都有錄影和投影片備份：&lt;br /&gt;http://plog.longwin.com.tw/my_note/2010/09/23/coscup-note-ppt-2010&lt;br /&gt;&lt;br /&gt;＊&lt;br /&gt;&lt;br /&gt;這種活動真的是好康到極點！&lt;br /&gt;但好康的東西背後總是會有一堆不求好康的人在默默付出。&lt;br /&gt;每次 COSCUP 的籌備到舉辦是由一羣志工拚出來的，&lt;br /&gt;這羣人到頭來可能還沒辦法好好聽完一場演講。&lt;br /&gt;他們給我的感覺，很像學校社團在出服務隊的那種樣子。&lt;br /&gt;我懂那種團隊間創造革命情感的過程。&lt;br /&gt;敬你們一杯！&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18689056-3481692627356819375?l=zx-1986.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://zx-1986.blogspot.com/feeds/3481692627356819375/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://zx-1986.blogspot.com/2010/08/coscup-gnomeasia.html#comment-form' title='4 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18689056/posts/default/3481692627356819375'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18689056/posts/default/3481692627356819375'/><link rel='alternate' type='text/html' href='http://zx-1986.blogspot.com/2010/08/coscup-gnomeasia.html' title='COSCUP 2010 札記'/><author><name>張旭</name><uri>https://profiles.google.com/105134833883146274095</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-pO0m_C6_zQw/AAAAAAAAAAI/AAAAAAAAD0c/h7KNyAUN14w/s512-c/photo.jpg'/></author><thr:total>4</thr:total><georss:featurename>115 Taiwan Taipei City Nangang District中研里</georss:featurename><georss:point>25.0405918 121.6122646</georss:point><georss:box>25.0357318 121.6049691 25.045451800000002 121.6195601</georss:box></entry><entry><id>tag:blogger.com,1999:blog-18689056.post-5005163015271872813</id><published>2010-09-24T16:24:00.001+08:00</published><updated>2011-11-08T12:58:18.745+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='git'/><category scheme='http://www.blogger.com/atom/ns#' term='ubuntu'/><category scheme='http://www.blogger.com/atom/ns#' term='svn'/><title type='text'>Git 使用手冊</title><content type='html'>Git（http://git-scm.com/）是一套分散式的版本管理系統。&lt;br /&gt;類似 SVN（Subversion）或 CVS（Concurrent Version System）對程式碼或文件進行管理。&lt;br /&gt;&lt;br /&gt;Git 的概念很單純，想像一下：&lt;br /&gt;你的書櫃裡有許多書，偶而有新書進來，有舊書捐出去。&lt;br /&gt;有時候你還會在某些書上作筆記、寫心得、畫畫。&lt;br /&gt;你在書櫃的側邊貼上一張「大大的白紙」，對書櫃裡的所有變動作紀錄。&lt;br /&gt;紀錄新書擺入的時間，擺放的位置，甚至後面加個註記：『購於網路拍賣』；&lt;br /&gt;紀錄舊書清除的時間，原本的位置，加個註記：『oh，好捨不得』；&lt;br /&gt;紀錄某書寫入筆記的時間，什麼樣的筆記，心得或隨手塗鴉；&lt;br /&gt;紀錄……&lt;br /&gt;當然很少人會這麼費工書寫自己書櫃的變遷歷史。&lt;br /&gt;但這張書櫃側邊貼著的「大大白紙」就類似於 Git，而且 Git 會做得更鉅細靡遺。&lt;br /&gt;&lt;br /&gt;當你對一個資料夾啟用 Git 進行追蹤管理與控制時（其實就是 Git 初始化），&lt;br /&gt;Git 程式會在該資料夾底下新增一個名為「.git」的隱藏資料夾。&lt;br /&gt;「.git」類似於前面提到那張「大大的白紙」，裡面紀錄了檔案的變化史。&lt;br /&gt;「.git」會對該資料夾內所有的檔案與其底層的所有資料夾進行紀錄追蹤。&lt;br /&gt;不過，Git 並不會主動、自動紀錄，必須靠使用者操作。使用者類似於史官的角色。&lt;br /&gt;當然，Git 的背後的運作方式更為聰明而且複雜。&lt;br /&gt;&lt;br /&gt;Git 的功能不僅僅如此。&lt;br /&gt;團隊合作時，同樣一個文件，在你手上跟在他人手上，可能有不一樣的變化史。&lt;br /&gt;當你的檔案要與他人的合併時，內容有出入的地方，Git 會協助進行處理。&lt;br /&gt;（例如開發同一個程式，你寫的 code 可能被他人改動到，或反之。）&lt;br /&gt;&lt;br /&gt;Git 還有其他許多功能與應用，請慢慢挖掘。&lt;br /&gt;&lt;br /&gt;＊&lt;br /&gt;&lt;br /&gt;建議先執行以下指令，將系統預設編輯器選擇為 Vim：&lt;br /&gt;&lt;pre class="brush:bash"&gt;sudo update-alternatives --config editor&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;＊&lt;br /&gt;&lt;br /&gt;Ubuntu 底下安裝 Git 非常簡單，只要在終端機執行：&lt;br /&gt;&lt;pre class="brush: bash"&gt;sudo apt-get install git-core git-doc&lt;br /&gt;&lt;/pre&gt;[ 註：亦可以使用 tarball 進行安裝。]&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;每個使用者帳號都會有它自己的 Git 設定檔，通常是：&lt;br /&gt;&lt;pre class="brush: bash"&gt;~/.gitconfig&lt;br /&gt;&lt;/pre&gt;例如我的設定檔內容是：&lt;br /&gt;&lt;pre class="brush: bash"&gt;[user]&lt;br /&gt;        name = Z&lt;br /&gt;        email = zx1986@gmail.com&lt;br /&gt;&lt;br /&gt;[color]&lt;br /&gt;        diff = auto&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;設定完成後可以開一個新的資料夾進行練習。&lt;br /&gt;&lt;br /&gt;設計上 Git 不會把空的資料夾加入控管。&lt;br /&gt;建議可以在空的資料夾底下建立一個隱藏檔，例如：.gitignore&lt;br /&gt;執行以下指令產生 .gitignore：&lt;br /&gt;&lt;pre class="brush:bash"&gt;tocuh .gitignore&lt;br /&gt;&lt;/pre&gt;.gitignore 可以寫入「不希望被 Git 控管的檔案」，例如：&lt;br /&gt;&lt;pre class="brush:bash"&gt;*.log&lt;br /&gt;*.o&lt;br /&gt;*.so&lt;br /&gt;*.a&lt;br /&gt;*.exe&lt;br /&gt;*~&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;執行以下指令初始化 Git（資料夾內會多出一個名為 .git 的隱藏資料夾）：&lt;br /&gt;&lt;pre class="brush: bash"&gt;git init&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;之後只要每次修改或新增檔案後，執行以下兩個指令，Git 就會做一次紀錄：&lt;br /&gt;&lt;pre class="brush:bash"&gt;git add .&lt;br /&gt;git commit -a -m '關於此次修改的描述訊息'&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;好了，您已經開始在使用 Git 啦！&lt;br /&gt;&lt;br /&gt;＊&lt;br /&gt;&lt;br /&gt;執行：&lt;br /&gt;&lt;pre class="brush: bash"&gt;git&lt;br /&gt;&lt;/pre&gt;會顯示常用的 Git 指令與參數，例如：&lt;br /&gt;&lt;pre class="brush:bash"&gt;git add&lt;br /&gt;git commit&lt;br /&gt;git clone&lt;br /&gt;git pull&lt;br /&gt;git status&lt;br /&gt;git rm&lt;br /&gt;git mv&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;在整個 Git 指令後面加上 -h 參數，能夠查詢該指令可以附加哪些參數，例如：&lt;br /&gt;&lt;pre class="brush:bash"&gt;git add -h&lt;br /&gt;git commit -h&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;要查詢完整的指令手冊，可以執行：&lt;br /&gt;&lt;pre class="brush:bash"&gt;git help 指令名稱&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;＊&lt;br /&gt;&lt;br /&gt;【關於 Git Repository】&lt;br /&gt;&lt;br /&gt;一個被 Git 所追蹤管理的專案，稱為一個 Git Repository（倉儲）。&lt;br /&gt;&lt;br /&gt;Git Repository 裡預設的 Trunk（主幹）稱為「master」，&lt;br /&gt;Git Repository 裡其他的 Branch（分支）則由使用者命名。&lt;br /&gt;&lt;br /&gt;Git 是一個分散式的版本控制系統，不同於 SVN 傳統的 Server/Client 架構。&lt;br /&gt;Git 不需要像 SVN 必須有一個 Repository Server 作為主要的儲存倉儲。&lt;br /&gt;Git 只要安裝好，預設就可以使用 ssh 互相進行 Repository 傳輸了。&lt;br /&gt;&lt;br /&gt;當使用 git clone 指令從遠端複製一個 Git Repository 到本地端電腦上時，&lt;br /&gt;遠端的 Git Repository 通常稱為「origin」；&lt;br /&gt;本地端的 Git Repository 則沒有特殊的名稱（或許可稱為「Local Trunk」？）。&lt;br /&gt;&lt;br /&gt;＊&lt;br /&gt;&lt;br /&gt;一般應用情形是這樣：&lt;br /&gt;&lt;br /&gt;假設遠端的電腦叫做 Remote；本地端的電腦叫做 Local。&lt;br /&gt;Remote 上面有一個 Git Repository 資料夾叫做 remote_repository。&lt;br /&gt;&lt;br /&gt;要將 remote_repository 整個複製到 Local 上並命名為 local_repository，在 Local 上執行：&lt;br /&gt;&lt;pre class="brush:bash"&gt;Local$ git clone 「Remote 使用者帳號@Remote 位址」:「remote_repository 在 Remote 上的路徑」   local_repository&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;複製完成（git clone）後，Local 與 Remote 已經可以分開獨立工作了。&lt;br /&gt;Git 不必拘泥於一定要把修改過的檔案更新存回當初取得檔案的地方。&lt;br /&gt;Remote 可以在 remote_repository 裡發展它的檔案；&lt;br /&gt;Local 可以在 local_repository 裡發展它的檔案。&lt;br /&gt;&lt;br /&gt;等到哪天 Remote 突然想取得並合併 Local 發展的檔案，可以在 Remote 上執行：&lt;br /&gt;&lt;pre class="brush:bash"&gt;Remote$ git pull 「Local 使用者帳號@Local 位址」:「local_repository 在 Local 上的路徑」&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;當然，如果 Local 想取得與合併其他人發展的檔案，可以在 Local 上執行：&lt;br /&gt;&lt;pre class="brush:bash"&gt;Local$ git pull 「使用者帳號@位址」:「路徑」&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;＃特別說明&lt;br /&gt;git pull - Fetch from and merge with another repository or a local branch&lt;br /&gt;git fetch - Download objects and refs from another repository&lt;br /&gt;&lt;br /&gt;官方文件對這兩個指令是這般解釋的，看起來似乎是「git pull」會多進行一項合併的動作。&lt;br /&gt;簡單說，「git pull」其實等於先執行了「git fetch」，然後再自動執行「git merge」。&lt;br /&gt;有人建議少用「git pull」，多用「git fetch」然後「git merge」，請見 Reference 05。&lt;br /&gt;&lt;br /&gt;透過底下這張圖可以稍微了解一下 Local 與 Remote 間的關係：&lt;br /&gt;&lt;br /&gt;&lt;img alt="Git Repository" src="http://zh-tw.whygitisbetterthanx.com/images/local-remote.png" /&gt;&lt;br /&gt;上圖中間黃色部份的「Staging Area」工作階段是一個緩衝地帶，&lt;br /&gt;它讓只有被 add 過的東西，才可以被 commit。&lt;br /&gt;可以直接觀察下圖了解其間的關係：&lt;br /&gt;&lt;br /&gt;&lt;img src="http://zh-tw.whygitisbetterthanx.com/images/index1.png" /&gt;&lt;br /&gt;&lt;br /&gt;＊&lt;br /&gt;&lt;br /&gt;【SVN 式的往日時光】&lt;br /&gt;&lt;br /&gt;之前，我在不同的電腦上修改程式，有可能是研究室的電腦、宿舍的電腦或筆記型電腦。&lt;br /&gt;所以我在研究室的一台主機上架了 SVN 伺服器，程式主要版本儲存在 SVN 伺服器上。&lt;br /&gt;每當在不同的電腦進行程式編輯時，會先從 SVN 伺服器上抓最新版本的程式下來。&lt;br /&gt;編輯告一段落後，再把修改過的程式上傳回 SVN 伺服器。&lt;br /&gt;簡單而言，程式集中在一台 SVN 伺服器上，要編輯時從上面更新下來，編輯完再更新回去。&lt;br /&gt;&lt;br /&gt;像我這種從 SVN 轉換到 Git 的使用者，還很習慣於從前 SVN 那種模式：&lt;br /&gt;1] 使用 svn checkout 從 SVN 伺服器將整個 Repository 複製到本機端。&lt;br /&gt;2] 本機端對 Repository 的內容進行編輯、修改、新增、刪除等等。&lt;br /&gt;3] 使用 svn update 檢查 SVN 伺服器有沒有其他更新與自己修改的內容有衝突。&lt;br /&gt;4] 解決內容衝突的情況。&lt;br /&gt;5] 使用 svn commit 將自己本機端的所有修改上傳到 SVN 伺服器。&lt;br /&gt;&lt;br /&gt;怎麼用 Git 做到類似 SVN 那樣的情形？&lt;br /&gt;有個簡單的方法。&lt;br /&gt;&lt;br /&gt;首先，選定一台要當 Repository Server 的機器，假設叫 Server。&lt;br /&gt;在 Server 開一個空的資料夾，假設叫 origin，並切換到該資料夾下。&lt;br /&gt;&lt;pre class="brush:bash"&gt;Server$ mkdir origin&lt;br /&gt;Server$ cd origin&lt;br /&gt;&lt;/pre&gt;在空資料夾底下執行：&lt;br /&gt;&lt;pre class="brush:bash"&gt;Server$ git init --bare&lt;br /&gt;&lt;/pre&gt;該資料夾底下會產生以下檔案與資料夾：&lt;br /&gt;&lt;pre class="brush:bash"&gt;branches/&lt;br /&gt;config&lt;br /&gt;description&lt;br /&gt;HEAD&lt;br /&gt;hooks/&lt;br /&gt;info/&lt;br /&gt;objects/&lt;br /&gt;refs/&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;本地端的電腦，假設叫 Local。&lt;br /&gt;Local 上一個叫 local_project 的資料夾要上傳到 Server 進行統一管理。&lt;br /&gt;&lt;br /&gt;切換到該資料夾底下，執行：&lt;br /&gt;&lt;pre class="brush:bash"&gt;Local$ git add .&lt;br /&gt;Local$ git commit -a -m 'initialization'&lt;br /&gt;Local$ git remote add origin 「Server 使用者帳號@Server 位址」:「Server 上 origin 資料夾的路徑」&lt;br /&gt;Local$ git push origin master&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;完成以後，其他的電腦就可以使用以下指令，&lt;br /&gt;從 Server 上的 origin 複製 local_project 的內容：&lt;br /&gt;&lt;pre class="brush:bash"&gt;Other$ git clone 「Server 使用者帳號@Server 位址」:「Server 上 origin 資料夾的路徑」 「自訂的資料夾名稱」&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;其他電腦要將其修改的內容傳回 Server，可以使用：&lt;br /&gt;&lt;pre class="brush:bash"&gt;Other$ git push origin master&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;＊&lt;br /&gt;&lt;br /&gt;【Git Repository Hosting】&lt;br /&gt;&lt;br /&gt;Git Repository 還可以使用 http 等其他方式傳輸、瀏覽、管理。&lt;br /&gt;&lt;br /&gt;- gitosis&lt;br /&gt;- gitorious&lt;br /&gt;&lt;br /&gt;使用 Github.com：&lt;br /&gt;1] 執行 ssh-keygen -t rsa -C "你的電子信箱"&lt;br /&gt;2] 一直壓 enter 使用預設值&lt;br /&gt;3] 複製 ~/.ssh/id_rsa.pub 的全部內容&lt;br /&gt;4] 貼上至 github 帳號底下的 SSH Public Keys&lt;br /&gt;5] 執行 ssh git@github.com&lt;br /&gt;&lt;br /&gt;＊&lt;br /&gt;&lt;br /&gt;Git 常用指令：&lt;br /&gt;&lt;pre class="brush:bash"&gt;git init                # 將當前資料夾進行 Git 初始化&lt;br /&gt;&lt;br /&gt;git add .               # 將當前資料夾內所有檔案加入 Git 追蹤（tracking 或 staging）&lt;br /&gt;git add 檔案名稱         # 把當前資料夾內某個檔案加入 Git 追蹤（tracking 或 staging）&lt;br /&gt;&lt;br /&gt;git commit -a           # 將目前的變動送繳 Git 進行紀錄，會進入編寫修改訊息的畫面&lt;br /&gt;git commit -a -m "*"    # commit 時直接寫入修改訊息，不進入編寫修改訊息的畫面&lt;br /&gt;&lt;br /&gt;git tag v1.0            # 將當前 commit 過後的檔案版本命名為 v1.0&lt;br /&gt;&lt;br /&gt;git status              # 查詢從上一次 commit 到現在，資料夾裡有哪些變化，各個檔案處於什麼狀況&lt;br /&gt;&lt;br /&gt;git diff                                # 比較所有檔案的內容與上一次 commit 時有何差異&lt;br /&gt;git diff v1.0 v2.0                      # 比較 v1.0 與 v2.0 兩個版本間所有檔案的內容&lt;br /&gt;git diff v1.0:檔案名稱 v2.0:檔案名稱      # 比較 v1.0 與 v2.0 兩個版本間某個檔案的內容&lt;br /&gt;&lt;br /&gt;git log                         # 查詢所有版本的修改狀況，顯示各版本的 hash 編號&lt;br /&gt;git log -p                      # 查詢哪幾行被修改&lt;br /&gt;git log --stat --summary        # 查詢每個版本間變動的檔案跟行數&lt;br /&gt;&lt;br /&gt;git show v1.0                   # 查詢 v1.0 版裡的修改內容&lt;br /&gt;git show v1.0:檔案名稱           # 查詢某個檔案在 v1.0 時的內容&lt;br /&gt;&lt;br /&gt;git show HEAD             # 看此版本修改的資料&lt;br /&gt;git show HEAD^            # 看此版本前一版的修改的資料&lt;br /&gt;git show HEAD^^           # 看此版本前前一版的修改的資料&lt;br /&gt;&lt;br /&gt;git grep "*" v1.0       # 查詢 0.01 版裡頭有沒有某些內容&lt;br /&gt;git grep "*"            # 查詢現在的版本裡有沒有某些內容&lt;br /&gt;&lt;br /&gt;git branch                     # 查看現有的分支&lt;br /&gt;git branch 分支名稱             # 建立新的分支&lt;br /&gt;git branch 分支名稱 v1.0        # 依照 v1.0 版本裡的內容來建立一個分支&lt;br /&gt;git branch -d 分支名稱          # 刪除某個分支&lt;br /&gt;&lt;br /&gt;git merge 某個分支名稱    # 將當前所在的分支與某個分支合併，如果出現衝突，會紀錄在有衝突的檔案中&lt;br /&gt;&lt;br /&gt;git checkout master       # 切換到主幹上&lt;br /&gt;git checkout 分支名稱      # 切換到某個分支上&lt;br /&gt;&lt;br /&gt;git checkout HEAD   # 將所有檔案恢復到上次 commit 的狀態&lt;br /&gt;git checkout -- 檔案名稱   # 將某個檔案恢復到上次 commit 的狀態&lt;br /&gt;&lt;br /&gt;git reset --hard 某個版本的 hash 編號   # 整個 Repository 恢復到某個版本的狀態&lt;br /&gt;&lt;br /&gt;git count-objects     # 分析 Git 資料庫狀況，計算鬆散的物件&lt;br /&gt;git gc                # 維護 Git 資料庫，重組物件&lt;br /&gt;git fsck --full       # 應該是類似 Git 磁碟重組之類的東西&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Reference：&lt;br /&gt;&lt;a href="http://zh-tw.whygitisbetterthanx.com/"&gt;http://zh-tw.whygitisbetterthanx.com&lt;/a&gt;&lt;br /&gt;&lt;a href="http://walkingice.twbbs.org/blog/archives/504"&gt;http://walkingice.twbbs.org/blog/archives/504&lt;/a&gt;&lt;br /&gt;&lt;a href="http://ihower.tw/blog/archives/3843"&gt;http://ihower.tw/blog/archives/3843&lt;/a&gt;&lt;br /&gt;&lt;a href="http://longair.net/blog/2009/04/16/git-fetch-and-merge/"&gt;http://longair.net/blog/2009/04/16/git-fetch-and-merge&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18689056-5005163015271872813?l=zx-1986.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://zx-1986.blogspot.com/feeds/5005163015271872813/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://zx-1986.blogspot.com/2010/08/git-manual.html#comment-form' title='2 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18689056/posts/default/5005163015271872813'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18689056/posts/default/5005163015271872813'/><link rel='alternate' type='text/html' href='http://zx-1986.blogspot.com/2010/08/git-manual.html' title='Git 使用手冊'/><author><name>張旭</name><uri>https://profiles.google.com/105134833883146274095</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-pO0m_C6_zQw/AAAAAAAAAAI/AAAAAAAAD0c/h7KNyAUN14w/s512-c/photo.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18689056.post-3431155766739283758</id><published>2010-09-24T10:59:00.011+08:00</published><updated>2010-09-24T16:26:02.340+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='mysql'/><category scheme='http://www.blogger.com/atom/ns#' term='php'/><category scheme='http://www.blogger.com/atom/ns#' term='apache'/><category scheme='http://www.blogger.com/atom/ns#' term='ubuntu'/><title type='text'>Ubuntu LAMP 環境架設</title><content type='html'>＃Ubuntu 架設 Apache、MySQL、PHP&lt;br /&gt;＃LAMP：Linux + Apache + MySQL + PHP&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush:bash"&gt;sudo apt-get install apache2&lt;br /&gt;&lt;/pre&gt;&lt;pre class="brush:bash"&gt;sudo apt-get install php5 libapache2-mod-php5&lt;br /&gt;sudo service apache2 restart&lt;br /&gt;&lt;/pre&gt;&lt;pre class="brush:bash"&gt;sudo apt-get install mysql-server&lt;br /&gt;sudo apt-get install libapache2-mod-auth-mysql php5-mysql &lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Apache 設定檔：&lt;br /&gt;/etc/apache2/apache2.conf&lt;br /&gt;/etc/apache2/ports.conf&lt;br /&gt;/etc/apache2/*&lt;br /&gt;&lt;br /&gt;PHP 設定檔：&lt;br /&gt;/etc/php5/apache2/php.ini&lt;br /&gt;&lt;br /&gt;MySQL 設定檔：&lt;br /&gt;/etc/mysql/my.cnf&lt;br /&gt;&lt;br /&gt;MySQL shell login：&lt;br /&gt;mysql -h 127.0.0.1 -u root -p&lt;br /&gt;&lt;br /&gt;mysql&gt;?&lt;br /&gt;mysql&gt;SHOW DATABASES;&lt;br /&gt;mysql&gt;CREATE DATABASE 資料庫名稱;&lt;br /&gt;mysql&gt;DROP DATABASE 資料庫名稱;&lt;br /&gt;mysql&gt;SHOW VARIABLES LIKE 'char%' ;&lt;br /&gt;mysql&gt;SHOW COLLATION LIKE 'utf8%';&lt;br /&gt;mysql&gt;SHOW CHARACTER SET;&lt;br /&gt;&lt;br /&gt;utf-8 is utf8 in MySQL. &lt;br /&gt;&lt;br /&gt;Reference：&lt;br /&gt;01. http://www.phpwact.org/php/i18n/utf-8/mysql&lt;br /&gt;02. http://islandlinux.org/howto/migrating-mysql-utf-8-encoding&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18689056-3431155766739283758?l=zx-1986.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://zx-1986.blogspot.com/feeds/3431155766739283758/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://zx-1986.blogspot.com/2010/09/lamp-on-ubuntu.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18689056/posts/default/3431155766739283758'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18689056/posts/default/3431155766739283758'/><link rel='alternate' type='text/html' href='http://zx-1986.blogspot.com/2010/09/lamp-on-ubuntu.html' title='Ubuntu LAMP 環境架設'/><author><name>張旭</name><uri>https://profiles.google.com/105134833883146274095</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-pO0m_C6_zQw/AAAAAAAAAAI/AAAAAAAAD0c/h7KNyAUN14w/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18689056.post-2343104030521913663</id><published>2010-09-05T10:55:00.000+08:00</published><updated>2011-10-24T15:50:20.765+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ubuntu'/><title type='text'>Ubuntu 美化與調校</title><content type='html'>僅適用於 Ubuntu 10.10 以下的系列！&lt;br /&gt;&lt;br /&gt;註：「Super 鍵」即「Windows 鍵」。&lt;br /&gt;&lt;br /&gt;＊&lt;br /&gt;&lt;br /&gt;【Macbuntu】&lt;br /&gt;&lt;br /&gt;到 http://sourceforge.net/projects/macbuntu/ 下載原始檔，解壓縮。&lt;br /&gt;切換到該資料夾，以一般使用者身份執行 ./install.sh。&lt;br /&gt;&lt;br /&gt;安裝過程中會有許多調教、配置的問項，都是很簡單的英文，可以看一下再選擇。&lt;br /&gt;如果一路 enter 到底使用預設的選項，也沒有差。&lt;br /&gt;&lt;br /&gt;最後會跳出推薦的 Chrome 跟 Firefox 佈景套件，可以不用裝。&lt;br /&gt;&lt;br /&gt;登出 Gnome 桌面，再登入，就完成了。&lt;br /&gt;&lt;br /&gt;登入後，畫面底下那條工具列是 Docky。&lt;br /&gt;不喜歡的 Docklet（程式圖示）可以直接拖拉出來，讓它消失。&lt;br /&gt;如果不習慣它一直固定在那裡，點一下最左邊那個 Docklet 進行設定。&lt;br /&gt;把 Hiding 選項選到 Autohide 就可以了。&lt;br /&gt;&lt;br /&gt;畫面最上方 Panel 的左端是 Macbuntu 預設的 Main Menu，可以通通按右鍵刪掉。&lt;br /&gt;再右鍵 &gt; Add to Panel，選擇新增 Menu Bar。右鍵 &gt; Move 可以調整位置。&lt;br /&gt;&lt;br /&gt;＊&lt;br /&gt;&lt;br /&gt;【My Fonts Setting】&lt;br /&gt;&lt;br /&gt;系統的字型調整，可以到桌面上點右鍵 &gt; Change Desktop Background &gt; Fonts&lt;br /&gt;推薦使用 WenQuanYi Zen Hei（文泉驛正黑體），或 WenQuanYi Micro Hei。&lt;br /&gt;字體大小依個人喜好調整。&lt;br /&gt;&lt;br /&gt;修改 ~/.fonts.conf 變成以下內容：&lt;br /&gt;&lt;pre class="brush:bash"&gt;&lt;?xml version='1.0'?&gt;&lt;br /&gt;&lt;!DOCTYPE fontconfig SYSTEM 'fonts.dtd'&gt;&lt;br /&gt;&lt;fontconfig&gt;&lt;br /&gt;    &lt;match target="font" &gt;&lt;br /&gt;        &lt;edit mode="assign" name="autohint" &gt;&lt;br /&gt;            &lt;bool&gt;true&lt;/bool&gt;&lt;br /&gt;        &lt;/edit&gt;&lt;br /&gt;    &lt;/match&gt;&lt;br /&gt;    &lt;match target="font" &gt;&lt;br /&gt;        &lt;edit mode="assign" name="rgba" &gt;&lt;br /&gt;            &lt;const&gt;none&lt;/const&gt;&lt;br /&gt;        &lt;/edit&gt;&lt;br /&gt;    &lt;/match&gt;&lt;br /&gt;    &lt;match target="font" &gt;&lt;br /&gt;        &lt;edit mode="assign" name="hinting" &gt;&lt;br /&gt;            &lt;bool&gt;false&lt;/bool&gt;&lt;br /&gt;        &lt;/edit&gt;&lt;br /&gt;    &lt;/match&gt;&lt;br /&gt;    &lt;match target="font" &gt;&lt;br /&gt;        &lt;edit mode="assign" name="hintstyle" &gt;&lt;br /&gt;            &lt;const&gt;hintnone&lt;/const&gt;&lt;br /&gt;        &lt;/edit&gt;&lt;br /&gt;    &lt;/match&gt;&lt;br /&gt;    &lt;match target="font" &gt;&lt;br /&gt;        &lt;edit mode="assign" name="antialias" &gt;&lt;br /&gt;            &lt;bool&gt;true&lt;/bool&gt;&lt;br /&gt;        &lt;/edit&gt;&lt;br /&gt;    &lt;/match&gt;&lt;br /&gt;&lt;br /&gt;    &lt;match target="pattern"&gt;&lt;br /&gt;        &lt;test name="family" qual="any"&gt;&lt;br /&gt;            &lt;string&gt;serif&lt;/string&gt;&lt;br /&gt;        &lt;/test&gt;&lt;br /&gt;        &lt;edit binding="strong" mode="prepend" name="family"&gt;&lt;br /&gt;            &lt;string&gt;WenQuanYi Zen Hei&lt;/string&gt;&lt;br /&gt;            &lt;string&gt;LiHei Pro&lt;/string&gt;&lt;br /&gt;            &lt;string&gt;Bitstream Vera Serif&lt;/string&gt;&lt;br /&gt;            &lt;string&gt;DejaVu Serif&lt;/string&gt;&lt;br /&gt;            &lt;string&gt;AR PL UMing TW&lt;/string&gt;&lt;br /&gt;            &lt;string&gt;AR PL UMing TW MBE&lt;/string&gt;&lt;br /&gt;            &lt;string&gt;AR PL UMing HK&lt;/string&gt;&lt;br /&gt;            &lt;string&gt;AR PL UMing CN&lt;/string&gt;&lt;br /&gt;        &lt;/edit&gt;&lt;br /&gt;    &lt;/match&gt;&lt;br /&gt;    &lt;match target="pattern"&gt;&lt;br /&gt;        &lt;test name="family" qual="any"&gt;&lt;br /&gt;            &lt;string&gt;sans-serif&lt;/string&gt;&lt;br /&gt;        &lt;/test&gt;&lt;br /&gt;        &lt;edit binding="strong" mode="prepend" name="family"&gt;&lt;br /&gt;            &lt;string&gt;WenQuanYi Zen Hei&lt;/string&gt;&lt;br /&gt;            &lt;string&gt;LiHei Pro&lt;/string&gt;&lt;br /&gt;            &lt;string&gt;Bitstream Vera Sans&lt;/string&gt;&lt;br /&gt;            &lt;string&gt;DejaVu Sans&lt;/string&gt;&lt;br /&gt;            &lt;string&gt;AR PL UMing TW&lt;/string&gt;&lt;br /&gt;            &lt;string&gt;AR PL ShanHeiSun Uni&lt;/string&gt;&lt;br /&gt;            &lt;string&gt;AR PL UKai TW&lt;/string&gt;&lt;br /&gt;            &lt;string&gt;AR PL ZenKai Uni&lt;/string&gt;&lt;br /&gt;        &lt;/edit&gt;&lt;br /&gt;    &lt;/match&gt;&lt;br /&gt;    &lt;match target="pattern"&gt;&lt;br /&gt;        &lt;test name="family" qual="any"&gt;&lt;br /&gt;            &lt;string&gt;monospace&lt;/string&gt;&lt;br /&gt;        &lt;/test&gt;&lt;br /&gt;        &lt;edit binding="strong" mode="prepend" name="family"&gt;&lt;br /&gt;            &lt;string&gt;WenQuanYi Zen Hei&lt;/string&gt;&lt;br /&gt;            &lt;string&gt;LiHei Pro&lt;/string&gt;&lt;br /&gt;            &lt;string&gt;AR PL UMing TW&lt;/string&gt;&lt;br /&gt;            &lt;string&gt;AR PL UMing TW MBE&lt;/string&gt;&lt;br /&gt;            &lt;string&gt;AR PL UMing HK&lt;/string&gt;&lt;br /&gt;            &lt;string&gt;AR PL UMing CN&lt;/string&gt;&lt;br /&gt;        &lt;/edit&gt;&lt;br /&gt;    &lt;/match&gt;&lt;br /&gt;&lt;/fontconfig&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;＊&lt;br /&gt;&lt;br /&gt;【The Chrome Style Firefox】&lt;br /&gt;&lt;br /&gt;我一直很喜歡這款簡潔美觀的 Firefox theme：&lt;br /&gt;https://addons.mozilla.org/en-US/firefox/addon/chromifox-basic/&lt;br /&gt;&lt;br /&gt;打開 Firefox，連過去，安裝，重新啓動 Firefox，that's it!&lt;br /&gt;披着 Chrom 大衣的 Firefox。&lt;br /&gt;&lt;br /&gt;＊&lt;br /&gt;&lt;br /&gt;【Faenza】&lt;br /&gt;&lt;br /&gt;方正又圓融的圖示集：&lt;br /&gt;http://gnome-look.org/content/show.php/Faenza?content=128143&lt;br /&gt;&lt;br /&gt;安裝：&lt;br /&gt;sudo add-apt-repository ppa:tiheum/equinox&lt;br /&gt;sudo apt-get update &amp;&amp; sudo apt-get install faenza-icon-theme&lt;br /&gt;&lt;br /&gt;啓用：&lt;br /&gt;桌面右鍵 &gt; Change Desktop Background &gt; Theme &gt; Customize &gt; Icons &gt; Faenza &lt;br /&gt;&lt;br /&gt;＊&lt;br /&gt;&lt;br /&gt;【Gnome Do】&lt;br /&gt;&lt;br /&gt;快捷鍵啓動的新體驗：&lt;br /&gt;http://do.davebsd.com&lt;br /&gt;&lt;br /&gt;安裝：&lt;br /&gt;sudo add-apt-repository ppa:do-core/ppa&lt;br /&gt;sudo apt-get update &amp;&amp; sudo apt-get upgrade&lt;br /&gt;sudo apt-get install gnome-do&lt;br /&gt;&lt;br /&gt;預設啓動鍵：&lt;br /&gt;Super + Space（Windows 鍵 + 空白鍵）&lt;br /&gt;&lt;br /&gt;叫出 Gnome Do 的視窗後，直接輸入要啓動的程式名稱或關鍵字，&lt;br /&gt;Gnome Do 會找出相對應的程式，壓 enter 之後就會啓動，不用動到滑鼠。&lt;br /&gt;&lt;br /&gt;Gnome Do 視窗右上角的箭頭 &gt; Preferences &gt; Appearance&lt;br /&gt;在 Selected Theme 選擇喜歡的佈景樣式，把 Always show result window 打勾。&lt;br /&gt;&lt;br /&gt;Gnome Do 視窗右上角的箭頭 &gt; Preferences &gt; General&lt;br /&gt;可以把 Start Gnome Do at Login 取消掉。&lt;br /&gt;&lt;br /&gt;＊&lt;br /&gt;&lt;br /&gt;【Gnome Startup】&lt;br /&gt;&lt;br /&gt;隨着 Gnome 桌面一起啓動的還有使用者安裝的常駐程式。&lt;br /&gt;這些常駐程式有時會拖慢 Gnome 桌面的登入速度，可以到這查看有哪些：&lt;br /&gt;System &gt; Preferences &gt; Startup Applications&lt;br /&gt;&lt;br /&gt;逐一檢查，並把不需要的勾掉，例如：Bluetooth Manager、Update Notifier&lt;br /&gt;Gnome Do 或 Dropdox 的自動啓動也可以取消掉，記得程式本身的自動啓動也要設成取消！&lt;br /&gt;可以自己寫一個啓動的腳本替代。&lt;br /&gt;&lt;br /&gt;以 Gnome Do 爲例：&lt;br /&gt;1」System &gt; Preferences &gt; Startup Applications &gt; Gnome Do&lt;br /&gt;2」取消它，然後點一下 Edit，複製 Command 欄位的內容&lt;br /&gt;3」編輯一個腳本檔：~/my_startup.sh&lt;br /&gt;4」內容：&lt;br /&gt;&lt;pre class="brush:bash"&gt;#!/bin/bash&lt;br /&gt;sleep 10 ; gnome-do &amp;&lt;br /&gt;sleep 15 ; 其他程式的啓動命令 &amp;&lt;br /&gt;&lt;/pre&gt;5」System &gt; Preferences &gt; Startup Applications &gt; Add&lt;br /&gt;6」新增一個啓動名稱，Command 欄位填上：~/my_starup.sh&lt;br /&gt;7」登出再登入，測試腳本&lt;br /&gt;&lt;br /&gt;＊&lt;br /&gt;&lt;br /&gt;【Gnome Shortcuts】&lt;br /&gt;&lt;br /&gt;Gnomo 預設的快捷鍵很好用，可以到這裡查看或修改：&lt;br /&gt;System &gt; Preferences &gt; Keyboard Shortcuts&lt;br /&gt;&lt;br /&gt;Alt + F1：應用程式選單&lt;br /&gt;Alt + F2：快速執行指令&lt;br /&gt;Alt + F3：啓動 Terminal（我個人的手動設定）&lt;br /&gt;Alt + F8：調整視窗大小&lt;br /&gt;Alt + F9：最小化視窗&lt;br /&gt;Alt + F10：最大化視窗&lt;br /&gt;Ctrl + Alt + s：隱藏視窗&lt;br /&gt;Ctrl + Alt + d：顯示桌面&lt;br /&gt;Ctrl + Alt + 右箭頭：旋轉到右邊的 Workspace&lt;br /&gt;Ctrl + Alt + 左箭頭：旋轉到右邊的 Workspace&lt;br /&gt;Shift + Ctrl + Alt + 右箭頭：將當前視窗移到右邊的 Workspace&lt;br /&gt;Shift + Ctrl + Alt + 左箭頭：將當前視窗移到左邊的 Workspace&lt;br /&gt;&lt;br /&gt;＊&lt;br /&gt;&lt;br /&gt;【Compiz】&lt;br /&gt;&lt;br /&gt;Ubuntu 預設就有安裝了 Compiz，不過需要手動啓用：&lt;br /&gt;桌面右鍵 &gt; Change Desktop Background &gt; Visual Effects &gt; Extra&lt;br /&gt;&lt;br /&gt;Ubuntu 會自動連上 Internet 安裝對應的顯示卡驅動，弄好後，檢查視窗是否有果凍效果。&lt;br /&gt;（如果已經安裝了 Macbuntu，它應該幫忙處理好了。）&lt;br /&gt;&lt;br /&gt;Compiz 非常強大，而且難以駕馭。&lt;br /&gt;以致於有了一套 CompizConfig Settings Manager 輔助設定軟體還不夠，&lt;br /&gt;還需要另一套簡單版的 Simple CompizConfig Settings Manager 輔助設定軟體。&lt;br /&gt;&lt;br /&gt;安裝：&lt;br /&gt;sudo apt-get install compizconfig-settings-manager&lt;br /&gt;sudo apt-get install simple-ccsm&lt;br /&gt;&lt;br /&gt;啓動：&lt;br /&gt;System &gt; Preferences &gt; CompizConfig Settings Manager&lt;br /&gt;System &gt; Preferences &gt; Simple CompizConfig Settings Manager&lt;br /&gt;&lt;br /&gt;設定：&lt;br /&gt;[ Simple CompizConfig Settings Manager ]&lt;br /&gt;&lt;pre class="brush:bash"&gt;Effects &gt; Switcher &gt; Shift Switcher (Cover)&lt;br /&gt;&lt;/pre&gt;[ CompizConfig Settings Manager ]&lt;br /&gt;&lt;pre class="brush:bash"&gt;Accessibility &gt; Show mouse：[ Super + k]&lt;br /&gt;Desktop &gt; Expo &gt; Expo Key：[ Super + e]&lt;br /&gt;Desktop &gt; Desktop Cube &gt; Unfold：[ Control + Alt + Down]&lt;br /&gt;Effects &gt; Paint fire on the screen &gt; Initiate (button)：[ Shift + Super + 左鍵 ]&lt;br /&gt;Effects &gt; Paint fire on the screen &gt; Clear (key)：[ Shift + Super + c ]&lt;br /&gt;Extra &gt; Window Preview&lt;br /&gt;Utility &gt; Crash handle&lt;br /&gt;Utility &gt; Resize info&lt;br /&gt;Window Management &gt;  Shift Switcher &gt; Next Window：[ Alt + Tab ]&lt;br /&gt;Window Management &gt;  Shift Switcher &gt; Next Window (All Workspace)：[ Super + Tab ]&lt;br /&gt;Window Management &gt; Resize Window &gt; Initiate Rectangle Window Resize：[ Alt + F8 ]&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Reference：&lt;br /&gt;01. http://zx-1986.blogspot.com/2010/08/my-ubuntu-setup.html&lt;br /&gt;02. http://playubuntu.blogspot.com/2010/09/ubuntugdm.html&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18689056-2343104030521913663?l=zx-1986.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://zx-1986.blogspot.com/feeds/2343104030521913663/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://zx-1986.blogspot.com/2011/03/beauty-up-ubuntu.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18689056/posts/default/2343104030521913663'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18689056/posts/default/2343104030521913663'/><link rel='alternate' type='text/html' href='http://zx-1986.blogspot.com/2011/03/beauty-up-ubuntu.html' title='Ubuntu 美化與調校'/><author><name>張旭</name><uri>https://profiles.google.com/105134833883146274095</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-pO0m_C6_zQw/AAAAAAAAAAI/AAAAAAAAD0c/h7KNyAUN14w/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18689056.post-5372956234547693818</id><published>2010-08-22T13:54:00.005+08:00</published><updated>2010-11-10T11:12:08.494+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><title type='text'>X11, GTK, QT</title><content type='html'>X11：X Window System Protocol Version 11。&lt;br /&gt;X server 與 X client 間的通訊協定。&lt;br /&gt;X server 是在 xfree86/xorg 驅動下顯示：滑鼠、鍵盤、設備等的通稱。&lt;br /&gt;X client 通过 X11 協定與 xfree86/xorg 實做的 X server 通訊。&lt;br /&gt;例如 X client 告訴 X server 畫一個左上角坐標（x，y），寬 w，高 h 的視窗，&lt;br /&gt;xfree86 就把螢幕上的小燈（像素）打亮，然後你就看到了一個要求的視窗。&lt;br /&gt;&lt;br /&gt;為了方便開發人員編寫 X clients，就有了 Xlib 來封裝 X11 協定；&lt;br /&gt;Xlib 不够方便，又有了 QT（Q Toolkit）與 GTK（GIMP ToolKit），提供了很多視窗元件（widgets）。&lt;br /&gt;&lt;br /&gt;為了方便使用者，於是出现了 GNOME 和 KDE 等『桌面管理系统』。&lt;br /&gt;GNOME 使用的是 GTK 函式庫。&lt;br /&gt;KDE 使用的是 QT 函式庫。&lt;br /&gt;&lt;br /&gt;Reference：&lt;br /&gt;01. &lt;a href="http://blog.chinaunix.net/u2/78601/showart_1918209.html"&gt;http://blog.chinaunix.net/u2/78601/showart_1918209.html&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18689056-5372956234547693818?l=zx-1986.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://zx-1986.blogspot.com/feeds/5372956234547693818/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://zx-1986.blogspot.com/2010/08/x11-gtk-qt.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18689056/posts/default/5372956234547693818'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18689056/posts/default/5372956234547693818'/><link rel='alternate' type='text/html' href='http://zx-1986.blogspot.com/2010/08/x11-gtk-qt.html' title='X11, GTK, QT'/><author><name>張旭</name><uri>https://profiles.google.com/105134833883146274095</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-pO0m_C6_zQw/AAAAAAAAAAI/AAAAAAAAD0c/h7KNyAUN14w/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18689056.post-8912203268326018437</id><published>2010-08-21T11:59:00.002+08:00</published><updated>2010-11-10T11:12:53.827+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='web'/><title type='text'>我的 Plurk 設定</title><content type='html'>body, html&lt;br /&gt;{&lt;br /&gt;font-family:LiHeiPro !important; 微軟正黑體;&lt;br /&gt;font-size:13px !important; &lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;.text_holder &lt;br /&gt;{ &lt;br /&gt;font-family:LiHeiPro !important; 微軟正黑體;&lt;br /&gt;font-size:13px !important; &lt;br /&gt;line-height:16px; &lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;#author&lt;br /&gt;{&lt;br /&gt;/* http://www.plurk.com/medicalwei */&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;#timeline_holder div.plurk&lt;br /&gt;{&lt;br /&gt;-webkit-transition: top 0.5s ease,-webkit-transform 0.5s ease;&lt;br /&gt;-webkit-transform: rotate(5deg);&lt;br /&gt;-webkit-transform-origin: 0 0;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;#timeline_holder div.plurk .dots&lt;br /&gt;{&lt;br /&gt;position: absolute;&lt;br /&gt;left: -1000em;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;#timeline_holder div.plurk .td_img&lt;br /&gt;{&lt;br /&gt;opacity: 0;&lt;br /&gt;-webkit-transition: opacity 0.5s ease;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;#timeline_holder div.link_extend, &lt;br /&gt;#timeline_holder div.plurk_box&lt;br /&gt;{&lt;br /&gt;-webkit-transition: -webkit-transform 0.5s ease;&lt;br /&gt;-webkit-transform-origin: 0 0;&lt;br /&gt;-webkit-transform: rotate(0deg);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;#timeline_holder div.link_extend .td_img, &lt;br /&gt;#timeline_holder div.plurk_box .td_img&lt;br /&gt;{&lt;br /&gt;opacity: 1;&lt;br /&gt;-webkit-transition: opacity 0.5s ease;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;::-webkit-scrollbar &lt;br /&gt;{&lt;br /&gt;background: #ccc;&lt;br /&gt;width: 10px;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;::-webkit-scrollbar-thumb &lt;br /&gt;{&lt;br /&gt;background: #999;&lt;br /&gt;border-radius: 10px;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;::-webkit-scrollbar-thumb:hover &lt;br /&gt;{&lt;br /&gt;background: #666;&lt;br /&gt;border-radius: 10px;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;.response_time&lt;br /&gt;{&lt;br /&gt;-webkit-transform:rotate(5deg);&lt;br /&gt;-webkit-transform-origin: 0 0;&lt;br /&gt;margin-left:-10px;&lt;br /&gt;-webkit-box-shadow: 0.1px 2px 5px rgba(0,0,0,0.5);&lt;br /&gt;border-radius: 5px;&lt;br /&gt;border: none;&lt;br /&gt;opacity: 0.5;&lt;br /&gt;-webkit-transition: opacity 0.2s ease;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;.response_time:hover&lt;br /&gt;{&lt;br /&gt;opacity: 1;&lt;br /&gt;-webkit-transition: opacity 0.2s ease;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;#timeline_holder .plurk_cnt&lt;br /&gt;{&lt;br /&gt;-webkit-box-shadow: 0.2px 4px 8px rgba(0,0,0,0.4);&lt;br /&gt;border-radius: 5px;&lt;br /&gt;-webkit-transition: -webkit-box-shadow 0.5s ease, background 0.5s ease;&lt;br /&gt;border: none;&lt;br /&gt;background: rgba(255,255,255,0.5) !important;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;#timeline_holder div.link_extend .plurk_cnt, &lt;br /&gt;#timeline_holder div.plurk_box .plurk_cnt&lt;br /&gt;{&lt;br /&gt;-webkit-box-shadow: 0 4px 24px rgba(0,0,0,0.2);&lt;br /&gt;-webkit-transition: -webkit-box-shadow 0.2s ease, background 0.5s ease;&lt;br /&gt;background: rgba(255,255,255,0.8) !important;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;#timeline_holder div.plurk_box .plurk_cnt&lt;br /&gt;{&lt;br /&gt;border-radius: 5px 5px 0 0;&lt;br /&gt;-webkit-transition: background 0.5s ease;&lt;br /&gt;background: rgba(255,255,255,1) !important;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;#form_holder div.list&lt;br /&gt;{&lt;br /&gt;-webkit-transition: height 0.5s ease;&lt;br /&gt;}&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18689056-8912203268326018437?l=zx-1986.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://zx-1986.blogspot.com/feeds/8912203268326018437/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://zx-1986.blogspot.com/2010/08/my-plurk-profile-settings.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18689056/posts/default/8912203268326018437'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18689056/posts/default/8912203268326018437'/><link rel='alternate' type='text/html' href='http://zx-1986.blogspot.com/2010/08/my-plurk-profile-settings.html' title='我的 Plurk 設定'/><author><name>張旭</name><uri>https://profiles.google.com/105134833883146274095</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-pO0m_C6_zQw/AAAAAAAAAAI/AAAAAAAAD0c/h7KNyAUN14w/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18689056.post-5350618847246901329</id><published>2010-08-19T10:50:00.014+08:00</published><updated>2010-11-10T11:05:01.466+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='google'/><title type='text'>我的 Chrome 必備套件</title><content type='html'>Essential Extensions for Chrome&lt;br /&gt;&lt;br /&gt;Cooliris&lt;br /&gt;&lt;a href="https://chrome.google.com/extensions/detail/noocneohefmdhonidldnlhaainpiomkp"&gt;https://chrome.google.com/extensions/detail/noocneohefmdhonidldnlhaainpiomkp&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Feedly&lt;br /&gt;&lt;a href="https://chrome.google.com/extensions/detail/ndhinffkekpekljifjkkkkkhopnjodja"&gt;https://chrome.google.com/extensions/detail/ndhinffkekpekljifjkkkkkhopnjodja&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Last.fm Free Music Player&lt;br /&gt;&lt;a href="https://chrome.google.com/extensions/detail/bbncpldmanoknoahidbgmkgobgmhnafh"&gt;https://chrome.google.com/extensions/detail/bbncpldmanoknoahidbgmkgobgmhnafh&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Awesome Screenshot&lt;br /&gt;&lt;a href="https://chrome.google.com/extensions/detail/alelhddbbhepgpmgidjdcjakblofbmce"&gt;https://chrome.google.com/extensions/detail/alelhddbbhepgpmgidjdcjakblofbmce&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Image Zoom&lt;br /&gt;&lt;a href="https://chrome.google.com/extensions/detail/nonjdcjchghhkdoolnlbekcfllmednbl"&gt;https://chrome.google.com/extensions/detail/nonjdcjchghhkdoolnlbekcfllmednbl&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Chrmoe Sniffer&lt;br /&gt;&lt;a href="https://chrome.google.com/extensions/detail/homgcnaoacgigpkkljjjekpignblkeae"&gt;https://chrome.google.com/extensions/detail/homgcnaoacgigpkkljjjekpignblkeae&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;CSSViewer&lt;br /&gt;&lt;a href="https://chrome.google.com/extensions/detail/ggfgijbpiheegefliciemofobhmofgce"&gt;https://chrome.google.com/extensions/detail/ggfgijbpiheegefliciemofobhmofgce&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Regular Expression Checker&lt;br /&gt;&lt;a href="https://chrome.google.com/extensions/detail/pgnkpcgniljiolidjmodgfljeomjjiha"&gt;https://chrome.google.com/extensions/detail/pgnkpcgniljiolidjmodgfljeomjjiha&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;XML Tree&lt;br /&gt;&lt;a href="https://chrome.google.com/extensions/detail/gbammbheopgpmaagmckhpjbfgdfkpadb"&gt;https://chrome.google.com/extensions/detail/gbammbheopgpmaagmckhpjbfgdfkpadb&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;JSON Tree&lt;br /&gt;&lt;a href="https://chrome.google.com/extensions/detail/chklaanhfefbnpoihckbnefhakgolnmc"&gt;https://chrome.google.com/extensions/detail/chklaanhfefbnpoihckbnefhakgolnmc&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Resolution Test&lt;br /&gt;&lt;a href="https://chrome.google.com/extensions/detail/idhfcdbheobinplaamokffboaccidbal"&gt;https://chrome.google.com/extensions/detail/idhfcdbheobinplaamokffboaccidbal&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Google Calendar Checker&lt;br /&gt;&lt;a href="https://chrome.google.com/extensions/detail/ookhcbgokankfmjafalglpofmolfopek"&gt;https://chrome.google.com/extensions/detail/ookhcbgokankfmjafalglpofmolfopek&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Google Mail Checker Plus&lt;br /&gt;&lt;a href="https://chrome.google.com/extensions/detail/gffjhibehnempbkeheiccaincokdjbfe"&gt;https://chrome.google.com/extensions/detail/gffjhibehnempbkeheiccaincokdjbfe&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Google Dictionary&lt;br /&gt;&lt;a href="https://chrome.google.com/extensions/detail/mgijmajocgfcbeboacabfgobmjgjcoja"&gt;https://chrome.google.com/extensions/detail/mgijmajocgfcbeboacabfgobmjgjcoja&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Google URL Shortener&lt;br /&gt;&lt;a href="https://chrome.google.com/extensions/detail/iblijlcdoidgdpfknkckljiocdbnlagk"&gt;https://chrome.google.com/extensions/detail/iblijlcdoidgdpfknkckljiocdbnlagk&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;renren.com Modifier&lt;br /&gt;&lt;a href="https://chrome.google.com/extensions/detail/bafellppfmjodafekndapfceggodmkfc"&gt;https://chrome.google.com/extensions/detail/bafellppfmjodafekndapfceggodmkfc&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Chromed Bird&lt;br /&gt;&lt;a href="https://chrome.google.com/extensions/detail/encaiiljifbdbjlphpgpiimidegddhic?hl=en"&gt;https://chrome.google.com/extensions/detail/encaiiljifbdbjlphpgpiimidegddhic&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Sexy Undo Close Tab&lt;br /&gt;&lt;a href="https://chrome.google.com/extensions/detail/bcennaiejdjpomgmmohhpgnjlmpcjmbg?hl=en"&gt;https://chrome.google.com/extensions/detail/bcennaiejdjpomgmmohhpgnjlmpcjmbg&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Clearlook Scrollbar Theme&lt;br /&gt;&lt;a href="https://chrome.google.com/extensions/detail/ppfdcmehpgiojcjgpclmfnbnpdmcmbgo"&gt;https://chrome.google.com/extensions/detail/ppfdcmehpgiojcjgpclmfnbnpdmcmbgo&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Stylebot&lt;br /&gt;&lt;a href="https://chrome.google.com/extensions/detail/oiaejidbmkiecgbjeifoejpgmdaleoha"&gt;https://chrome.google.com/extensions/detail/oiaejidbmkiecgbjeifoejpgmdaleoha&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;---&lt;br /&gt;&lt;br /&gt;The Best：&lt;br /&gt;&lt;a href="https://chrome.google.com/extensions/detail/mabenbhpjlchigbbpafligkdnlhjbmel"&gt;https://chrome.google.com/extensions/detail/mabenbhpjlchigbbpafligkdnlhjbmel&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18689056-5350618847246901329?l=zx-1986.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://zx-1986.blogspot.com/feeds/5350618847246901329/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://zx-1986.blogspot.com/2010/08/essential-extensions-for-chrome.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18689056/posts/default/5350618847246901329'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18689056/posts/default/5350618847246901329'/><link rel='alternate' type='text/html' href='http://zx-1986.blogspot.com/2010/08/essential-extensions-for-chrome.html' title='我的 Chrome 必備套件'/><author><name>張旭</name><uri>https://profiles.google.com/105134833883146274095</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-pO0m_C6_zQw/AAAAAAAAAAI/AAAAAAAAD0c/h7KNyAUN14w/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18689056.post-5182208591562243042</id><published>2010-08-18T12:30:00.040+08:00</published><updated>2011-01-19T14:58:52.125+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='ubuntu'/><title type='text'>我的 Ubuntu 手冊</title><content type='html'>My Ubuntu Desktop Manual&lt;br /&gt;&lt;br /&gt;＃Ubuntu Desktop 預設的桌面環境是 Gnome&lt;br /&gt;&lt;br /&gt;安裝前建議先考慮好硬碟的分割配置。&lt;br /&gt;Linux 作業系統至少需要 / 與 swap 兩個分割區。&lt;br /&gt;可以將 /home 也獨立切割成一個分割區。&lt;br /&gt;Ubuntu 預設會將程式配置檔、環境設定檔等存在使用者的家目錄。&lt;br /&gt;獨立的 /home 分割區等於獨立備份使用者的設定與配置。&lt;br /&gt;&lt;br /&gt;可以的話，建議裝 Ubuntu 與 Windows XP 雙作業系統。&lt;br /&gt;有些很難避免的情況，還是需要回到 Windows 環境。&lt;br /&gt;先安裝 Windows 再安裝 Ubuntu，Ubuntu 會偵測其他系統並安排到開機選單。&lt;br /&gt;&lt;br /&gt;以我到桌上型主機為例，160 GB 硬碟。&lt;br /&gt;使用 20 GB 先安裝了 Windows XP 作業系統；&lt;br /&gt;扣除 Ubuntu 會使用到的容量，剩餘的硬碟空間全部切割成 NTFS；&lt;br /&gt;Ubuntu 作業系統則作如下配置：&lt;br /&gt;&lt;pre class="brush:bash"&gt;30 GB：/&lt;br /&gt; 4 GB：/home&lt;br /&gt; 4 GB：swap&lt;br /&gt;&lt;/pre&gt;/，根目錄（root）給 30 GB 已經很夠了，甚至再塞 KDE 桌面環境進去還是很空。&lt;br /&gt;/home，4 GB 對我而言有點嫌多，因爲多數資料我會儲存在 NTFS 檔案系統。&lt;br /&gt;swap，一般而言是設定成記憶體大小的兩倍。&lt;br /&gt;&lt;br /&gt;規劃好硬碟配置後，就可以開始安裝了。&lt;br /&gt;放入 Ubuntu 光碟，BIOS 選擇從光碟機開機。&lt;br /&gt;&lt;br /&gt;可以選擇中文安裝，不過最好先接上網路。&lt;br /&gt;Ubuntu 會自動偵測網路，中文安裝可能需要下載一些語言套件包。&lt;br /&gt;沒有網路也無所謂，裝好後設定完網路，再更新即可。&lt;br /&gt;&lt;br /&gt;安裝的過程非常簡單，安裝指引是漂亮的圖形介面，照着指示做就可以了。&lt;br /&gt;安裝完成會退出光碟片，把光碟片取下，壓一下 enter 就會重新啓動了。&lt;br /&gt;&lt;br /&gt;＊&lt;br /&gt;&lt;br /&gt;【sudo apt-get update &amp;&amp; sudo apt-get upgrade】&lt;br /&gt;&lt;br /&gt;第一次啓動後，請先設定好網路：&lt;br /&gt;系統 &gt; 偏好設定 &gt; 網路連線&lt;br /&gt;&lt;br /&gt;如果是 DHCP 自動取得 IP 就不用特別設定了。&lt;br /&gt;&lt;br /&gt;確定網路 ok 後，前往：&lt;br /&gt;系統 &gt;  管理 &gt; 軟體來源&lt;br /&gt;&lt;br /&gt;把第一個分頁以及第三個分頁（更新）裡面的來源全部勾選，然後關閉。&lt;br /&gt;系統會重載來源清單並進行更新。&lt;br /&gt;&lt;br /&gt;喝杯咖啡，靜待更新完成。&lt;br /&gt;&lt;br /&gt;＊&lt;br /&gt;&lt;br /&gt;【Compiz】&lt;br /&gt;&lt;br /&gt;不管是 ATi、NVIDIA 或其他品牌顯示晶片，Ubuntu 都會自動偵測硬體驅動。&lt;br /&gt;可以照以下步驟自行來啓用最新的驅動：&lt;br /&gt;系統 &gt; 管理 &gt; 硬體驅動&lt;br /&gt;&lt;br /&gt;點選最新的驅動啓用即可。&lt;br /&gt;完成後可能需要重新開機&lt;br /&gt;&lt;br /&gt;顯示驅動更新後，可以在桌面上：&lt;br /&gt;點右鍵 &gt; 更換桌面背景 &gt; 視覺效果&lt;br /&gt;&lt;br /&gt;最下面那個終極選項壓下去就對了！&lt;br /&gt;Ubuntu 會啓用預設安裝的 Compiz 的多項視覺特效，非常酷！&lt;br /&gt;&lt;br /&gt;Compiz 的各項效果可以透過 CCSM 與 Simple CCSM 兩個套件進行微調。&lt;br /&gt;可以使用以下指令進行安裝：&lt;br /&gt;&lt;pre class="brush:bash"&gt;sudo apt-get install compizconfig-settings-manager&lt;br /&gt;sudo apt-get install simple-ccsm&lt;br /&gt;&lt;/pre&gt;安裝完成後，在「系統 &gt; 偏好設定」裡面可以找到。&lt;br /&gt;託自由軟體工作者的福，它們的中文化已經做得很好了，請盡情嘗試各項效果。&lt;br /&gt;&lt;br /&gt;＊&lt;br /&gt;&lt;br /&gt;【程式開發編譯必備元件】&lt;br /&gt;&lt;pre class="brush:bash"&gt;sudo apt-get install build-essential&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;＊&lt;br /&gt;&lt;br /&gt;【Non-Free】&lt;br /&gt;&lt;br /&gt;多媒體影音方面，可能得用到部分非開源的編碼系統。&lt;br /&gt;執行以下指令安裝：&lt;br /&gt;&lt;pre class="brush:bash"&gt;sudo apt-get install ubuntu-restricted-extras&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;安裝應付 Windows 的壓縮與解壓縮套件，執行：&lt;br /&gt;&lt;pre class="brush:bash"&gt;sudo apt-get install p7zip-full unrar cabextract p7zip-rar&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;＊&lt;br /&gt;&lt;br /&gt;【Plymouth】&lt;br /&gt;&lt;br /&gt;從 Ubuntu 10.04 起開機動畫改用 Plymouth 取代了舊有的 Xsplash，可參考 Reference 04。&lt;br /&gt;簡單說一下怎麼裝一些新的開機動畫、怎麼選擇新的開機動畫。&lt;br /&gt;執行：&lt;br /&gt;&lt;pre class="brush:bash"&gt;sudo apt-get install plymouth-theme-*&lt;br /&gt;sudo update-alternatives --config default.plymouth&lt;br /&gt;# 輸入編號選擇開機動畫，可以用名稱到 YouTube 搜尋預覽。&lt;br /&gt;sudo update-initramfs -u&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;有時候，非開放性的顯示驅動會導致開機動畫的解析度變差，或沒有動畫。&lt;br /&gt;可以照以下步驟修改：&lt;br /&gt;&lt;pre class="brush:bash"&gt;a] 執行 sudo apt-get install v86d&lt;br /&gt;b] 執行 gksu gedit /etc/default/grub，修改 grub 檔&lt;br /&gt;c] 修改 GRUB_CMDLINE_LINUX_DEFAULT="quiet splash" 成為 GRUB_CMDLINE_LINUX_DEFAULT="quiet splash nomodeset video=uvesafb:mode_option=1280x1024-24,mtrr=3,scroll=ywrap"&lt;br /&gt;d] 修改＃GRUB_GFXMODE=640x480 成為 GRUB_GFXMODE=1280x1024&lt;br /&gt;e] 注意！1280x1024 不一定是正確的解析度，通常筆電寬螢幕會是 1280x800，請自行確認。&lt;br /&gt;f] 修改完成請儲存關閉 grub 檔&lt;br /&gt;g] 執行 gksu gedit /etc/initramfs-tools/modules，修改 modules 檔&lt;br /&gt;h] 在檔案最末加上 uvesafb mode_option=1280x1024-24 mtrr=3 scroll=ywrap&lt;br /&gt;i] 注意！1280x1024 不一定是正確的解析度，請自行確認。&lt;br /&gt;j] 修改完成請儲存關閉 modules 檔&lt;br /&gt;k] 執行 echo FRAMEBUFFER=y | sudo tee /etc/initramfs-tools/conf.d/splash&lt;br /&gt;l] 執行 sudo update-grub&lt;br /&gt;m] 執行 sudo update-initramfs -u&lt;br /&gt;n] 重新啟動檢查開機動畫&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;＊&lt;br /&gt;&lt;br /&gt;【Ubuntu Tweak】&lt;br /&gt;&lt;br /&gt;Ubuntu Tweak 是一套圖形介面的 Ubuntu 設定、調教軟體。&lt;br /&gt;可以把它想成類似 Windows XP  的控制臺。&lt;br /&gt;請前往它的官方網站下載 deb 套件進行安裝：&lt;br /&gt;http://ubuntu-tweak.com/&lt;br /&gt;&lt;br /&gt;＊&lt;br /&gt;&lt;br /&gt;【More Zooty!】&lt;br /&gt;&lt;br /&gt;安裝 Gnome-Do，請執行：&lt;br /&gt;&lt;pre class="brush:bash"&gt;sudo add-apt-repository ppa:do-core/ppa &lt;br /&gt;sudo aptitude update&lt;br /&gt;sudo aptitude install gnome-do&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;安裝 Conky，請執行：&lt;br /&gt;&lt;pre class="brush:bash"&gt;sudo apt-get install conky&lt;/pre&gt;&lt;br /&gt;＊&lt;br /&gt;&lt;br /&gt;【Gnome Themes】&lt;br /&gt;&lt;br /&gt;[ &lt;a href="http://gnome-look.org/content/show.php?content=121881"&gt;Equinox GTK Engine&lt;/a&gt; ]&lt;br /&gt;[ &lt;a href="http://gnome-look.org/content/show.php?content=128143"&gt;Faenza&lt;/a&gt; ]&lt;br /&gt;&lt;br /&gt;另外還有個不錯的主題套件庫（Reference 07），執行以下指令安裝：&lt;br /&gt;&lt;pre class="brush:bash"&gt;sudo add-apt-repository ppa:bisigi&lt;br /&gt;sudo aptitude update&lt;br /&gt;sudo aptitude install bisigi-themes&lt;br /&gt;&lt;/pre&gt;要移除請執行：&lt;br /&gt;&lt;pre class="brush:bash"&gt;sudo aptitude remove bisigi-themes&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;＊&lt;br /&gt;&lt;br /&gt;【Gedit Themes】&lt;br /&gt;&lt;br /&gt;http://live.gnome.org/GtkSourceView/StyleSchemes&lt;br /&gt;http://github.com/mig/gedit-themes&lt;br /&gt;&lt;br /&gt;＊&lt;br /&gt;&lt;br /&gt;sudo update-alternatives --config editor&lt;br /&gt;&lt;br /&gt;在終端機執行：&lt;br /&gt;&lt;pre class="brush:bash"&gt;gconf-editor&lt;/pre&gt;進入 Ubuntu 微調設定，可以參考 [ &lt;a href="http://playubuntu.blogspot.com/2010/06/ubuntu-1004.html"&gt;手把手玩 Ubuntu&lt;/a&gt; ]&lt;br /&gt;&lt;br /&gt;[ &lt;a href="http://wiki.ubuntu-tw.org/index.php?title=Ubuntu_%E5%B8%B8%E7%94%A8%E8%BB%9F%E9%AB%94%E4%BB%8B%E7%B4%B9"&gt;Ubuntu 常用軟體&lt;/a&gt; ] &lt;br /&gt;&lt;br /&gt;[ &lt;a href="https://help.ubuntu.com/6.06/ubuntu/desktopguide/C/desktop-tips.html"&gt;Ubuntu 桌面技巧&lt;/a&gt; ]&lt;br /&gt;&lt;br /&gt;＊&lt;br /&gt;&lt;br /&gt;Reference：&lt;br /&gt;01. http://www.omgubuntu.co.uk/2010/04/10-things-to-do-after-installing-ubuntu.html&lt;br /&gt;02. https://launchpad.net/~shawn-p-huang/+archive/ppa&lt;br /&gt;03. http://www.kdenlive.org/&lt;br /&gt;04. http://blog.roodo.com/rocksaying/archives/12306099.html&lt;br /&gt;05. https://help.ubuntu.com/10.04/basic-commands/C/&lt;br /&gt;06. https://help.ubuntu.com/10.04/serverguide/C/index.html&lt;br /&gt;07. http://www.ubuntugeek.com/nice-themes-for-ubuntu-10-04-lucid-lynx-users.html&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18689056-5182208591562243042?l=zx-1986.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://zx-1986.blogspot.com/feeds/5182208591562243042/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://zx-1986.blogspot.com/2010/08/my-ubuntu-setup.html#comment-form' title='1 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18689056/posts/default/5182208591562243042'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18689056/posts/default/5182208591562243042'/><link rel='alternate' type='text/html' href='http://zx-1986.blogspot.com/2010/08/my-ubuntu-setup.html' title='我的 Ubuntu 手冊'/><author><name>張旭</name><uri>https://profiles.google.com/105134833883146274095</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-pO0m_C6_zQw/AAAAAAAAAAI/AAAAAAAAD0c/h7KNyAUN14w/s512-c/photo.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18689056.post-2671781278472783113</id><published>2010-08-18T12:24:00.034+08:00</published><updated>2011-10-26T09:23:28.259+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='ubuntu'/><title type='text'>我的 Kubuntu 手冊</title><content type='html'>My Kubuntu Manual&lt;br /&gt;&lt;br /&gt;＃預設環境是英文介面，所以會以英文標示選單步驟，請自行轉換對應的語言。&lt;br /&gt;&lt;br /&gt;＊&lt;br /&gt;&lt;br /&gt;Kubuntu 底下，對任何一個應用程式 icon 壓右鍵，都可以針對其進行獨立的特別設定。&lt;br /&gt;&lt;br /&gt;Kubuntu 底下，很多時候對 icon 只壓一下左鍵，就會進行開啟或執行的動作了。&lt;br /&gt;如果不習慣的話，可以到這邊修改：&lt;br /&gt;Settings &gt; System Settings &gt; Keyboard &amp; Mouse &gt; Mouse &gt; General&lt;br /&gt;&lt;br /&gt;Kubuntu 的應用程式選單稱為『Application Launcher』，預設是 Kickoff 樣式。&lt;br /&gt;不習慣的話可以在左下角的 KDE icon 上壓右鍵，選擇『Switch to Classic Menu Style』。&lt;br /&gt;如果還是不滿意，可以安裝 Lancelot：&lt;br /&gt;&lt;pre class="brush: shell"&gt;sudo apt-get install plasma-widget-lancelot&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;＊&lt;br /&gt;&lt;br /&gt;要新增系統語言，執行：&lt;br /&gt;Settings &amp;gt; System Settings &amp;gt; Regional &amp;amp; Language &amp;gt; install NEW Language&lt;br /&gt;&lt;br /&gt;要改變系統預設語言，執行：&lt;br /&gt;Settings &amp;gt; System Settings &amp;gt; Regional &amp;amp; Language &amp;gt; Select System Language&lt;br /&gt;&lt;br /&gt;＊&lt;br /&gt;&lt;br /&gt;安裝 ibus 與中文拼音輸入法，執行：&lt;br /&gt;&lt;pre class="brush: shell"&gt;sudo apt-get install ibus ibus-pinyin  ibus-qt4 ibus-gtk&lt;br /&gt;&lt;/pre&gt;啟動 ibus，執行：&lt;br /&gt;&lt;pre class="brush: shell"&gt;ibus-daemon -x -r -d&lt;br /&gt;&lt;/pre&gt;在右下角找到 ibus 的圖示，壓右鍵選擇『Preferences』，新增自己喜歡的輸入法。&lt;br /&gt;&lt;br /&gt;設定 ibus 開機自行啟動：&lt;br /&gt;Settings &amp;gt; System Settings &amp;gt; Advanced &amp;gt; Autostart &amp;gt; Add Program&lt;br /&gt;填入『ibus-daemon -x -r -d』，然後重新登入。&lt;br /&gt;&lt;br /&gt;＊&lt;br /&gt;&lt;br /&gt;Kubuntu 的桌面效果設定可以到：&lt;br /&gt;Settings &amp;gt; System Settings &amp;gt; General &amp;gt; Desktop&lt;br /&gt;&lt;br /&gt;Desktop &amp;gt; Desktop Effects &amp;gt; General：&lt;br /&gt;調整視窗切換動畫、桌面切換動畫，還有所有動畫的播放速度。&lt;br /&gt;&lt;br /&gt;Desktop &amp;gt; Desktop Effects &amp;gt; All Effects：&lt;br /&gt;Wobbly Windows = 果凍視窗效果&lt;br /&gt;Magic Lamp = 視窗收縮效果&lt;br /&gt;...&lt;br /&gt;&lt;br /&gt;Desktop &amp;gt; Multiple Desktops：&lt;br /&gt;多重桌面設定，可以設定桌面數量與切換動畫。&lt;br /&gt;&lt;br /&gt;Desktop &amp;gt; Screen Edges：&lt;br /&gt;設定滑鼠移動到各個桌面角落時的動作，以及視窗移動到桌面各邊緣的動作。&lt;br /&gt;&lt;br /&gt;Desktop &amp;gt; Screen Saver：&lt;br /&gt;設定螢幕保護程式&lt;br /&gt;&lt;br /&gt;＊&lt;br /&gt;&lt;br /&gt;Kubuntu 的主題樣式、系統字型、視窗樣式、開機畫面等可以到這裡調整：&lt;br /&gt;Settings &amp;gt; System Settings &amp;gt; Appearance&lt;br /&gt;&lt;br /&gt;＊&lt;br /&gt;&lt;br /&gt;Kubuntu 的桌面是一個稱為『Plasma Workspaces』的環境。&lt;br /&gt;Kubuntu 的工作列（Taskbar）稱做 Panel。&lt;br /&gt;[ 注：請參考 Reference 03 與 04 ]&lt;br /&gt;&lt;br /&gt;初次接觸可能會不大習慣，多壓右鍵，會發現可以設定的地方很多。&lt;br /&gt;畫面的右上角一個小扇型，是預設的 Plasma 主控選單。&lt;br /&gt;畫面的右下角一個小扇型，點一下可以對 Plane 進行各種調整。&lt;br /&gt;&lt;br /&gt;Plasma 底下有一個『活動』（Activity）的概念。&lt;br /&gt;『活動』（Activity）與『虛擬桌面』（Virtual Desktops）很像，可是不大一樣。&lt;br /&gt;『活動』類似於可以自訂一個新的工作桌面環境。&lt;br /&gt;例如可以自訂一個專門處理美工事務時的桌面、一個專門處理程式設計時的桌面等。&lt;br /&gt;&lt;br /&gt;如果不小心刪除工作列收放程式的區域（程式縮小時顯示的地方），可以這樣叫回：&lt;br /&gt;Panel 上壓右鍵 &amp;gt; Panel Options &amp;gt; Add Widgets &amp;gt; Task Manager&lt;br /&gt;&lt;br /&gt;＊&lt;br /&gt;&lt;br /&gt;Kubuntu 的套件管理程式稱為『KPackageKit』：&lt;br /&gt;System &amp;gt; Software Management&lt;br /&gt;&lt;br /&gt;安裝完建議先來這邊設定軟體來源：&lt;br /&gt;system &amp;gt; Software Management &amp;gt; Settings &amp;gt; Edit Software Source&lt;br /&gt;建議把 Kubuntu Software，Other Software，Updates 底下的來源都打勾，然後執行更新。&lt;br /&gt;&lt;br /&gt;要安裝任何新的軟體套件，都可以先來這邊搜尋，類似 Ubuntu 的 Software Center。&lt;br /&gt;例如安裝一個叫『Kinfo Center』的套件，可以搜尋 kinfo，選取，然後 Apply。&lt;br /&gt;&lt;br /&gt;如果不習慣 KPackageKit，可以另外安裝 Synaptic：&lt;br /&gt;&lt;pre class="brush: shell"&gt;sudo apt-get install synaptic&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;＊&lt;br /&gt;&lt;br /&gt;安裝應付 Windows 的壓縮與解壓縮套件，執行：&lt;br /&gt;&lt;pre class="brush: shell"&gt;sudo apt-get install p7zip-full unrar cabextract p7zip-rar&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;＊&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush: shell"&gt;sudo apt-get install kubuntu-restricted-extras&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;＊&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush: shell"&gt;sudo apt-add-repository ppa:kubuntu-ppa/ppa&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;＊&lt;br /&gt;&lt;br /&gt;Kubuntu 的 KDE Wallet 類似於 Ubuntu 的 GNOME Keyring。&lt;br /&gt;&lt;br /&gt;＊&lt;br /&gt;&lt;br /&gt;Reference：&lt;br /&gt;01. &lt;a href="http://wiki.ubuntu.org.cn/index.php?title=Qref/Lucid/Kubuntu"&gt;http://wiki.ubuntu.org.cn/index.php?title=Qref/Lucid/Kubuntu&lt;/a&gt;&lt;br /&gt;02. &lt;a href="http://en.wikipedia.org/wiki/Taskbar"&gt;http://en.wikipedia.org/wiki/Taskbar&lt;/a&gt;&lt;br /&gt;03. &lt;a href="http://en.wikipedia.org/wiki/Plasma_(KDE)"&gt;http://en.wikipedia.org/wiki/Plasma_(KDE)&lt;/a&gt;&lt;br /&gt;04. &lt;a href="http://userbase.kde.org/Plasma/zh-tw"&gt;http://userbase.kde.org/Plasma/zh-tw&lt;/a&gt;&lt;br /&gt;05. &lt;a href="http://wiki.ubuntu.org.cn/Kubuntu"&gt;http://wiki.ubuntu.org.cn/Kubuntu&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18689056-2671781278472783113?l=zx-1986.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://zx-1986.blogspot.com/feeds/2671781278472783113/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://zx-1986.blogspot.com/2010/08/my-kubuntu-manual.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18689056/posts/default/2671781278472783113'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18689056/posts/default/2671781278472783113'/><link rel='alternate' type='text/html' href='http://zx-1986.blogspot.com/2010/08/my-kubuntu-manual.html' title='我的 Kubuntu 手冊'/><author><name>張旭</name><uri>https://profiles.google.com/105134833883146274095</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-pO0m_C6_zQw/AAAAAAAAAAI/AAAAAAAAD0c/h7KNyAUN14w/s512-c/photo.jpg'/></author><thr:total>0</thr:total><georss:featurename>Taipei City, Taiwan</georss:featurename><georss:point>25.091075 121.5598345</georss:point><georss:box>24.976033 121.401906 25.206117 121.71776299999999</georss:box></entry><entry><id>tag:blogger.com,1999:blog-18689056.post-668819790633739715</id><published>2010-08-17T19:19:00.011+08:00</published><updated>2010-11-10T11:05:21.986+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='microsoft'/><title type='text'>我的 Windows XP 必備軟體</title><content type='html'>Essential Softwares for Windows XP&lt;br /&gt;&lt;br /&gt;Notepad++&lt;br /&gt;&lt;a href="http://notepad-plus-plus.org/"&gt;http://notepad-plus-plus.org/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;PPStream&lt;br /&gt;&lt;a href="http://dl.pps.tv/"&gt;http://dl.pps.tv/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;PuTTY&lt;br /&gt;&lt;a href="http://www.chiark.greenend.org.uk/~sgtatham/putty"&gt;http://www.chiark.greenend.org.uk/~sgtatham/putty&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;CCleaner&lt;br /&gt;&lt;a href="http://www.piriform.com/ccleaner"&gt;http://www.piriform.com/ccleaner&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Defraggler&lt;br /&gt;&lt;a href="http://www.piriform.com/defraggler"&gt;http://www.piriform.com/defraggler&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Speccy&lt;br /&gt;&lt;a href="http://www.piriform.com/speccy"&gt;http://www.piriform.com/speccy&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;FastStone Capture&lt;br /&gt;&lt;a href="http://www.faststone.org/"&gt;http://www.faststone.org/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Fences&lt;br /&gt;&lt;a href="http://www.stardock.com/products/fences"&gt;http://www.stardock.com/products/fences&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;FreeCommander&lt;br /&gt;&lt;a href="http://www.freecommander.com/"&gt;http://www.freecommander.com/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;GOM Player&lt;br /&gt;&lt;a href="http://www.gomlab.com/"&gt;http://www.gomlab.com/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;AppLocale&lt;br /&gt;&lt;a href="http://www.chweng.idv.tw/swintro/apploc.php"&gt;http://www.chweng.idv.tw/swintro/apploc.php&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;EFix&lt;br /&gt;&lt;a href="http://reinfors.blogspot.com/"&gt;http://reinfors.blogspot.com/&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18689056-668819790633739715?l=zx-1986.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://zx-1986.blogspot.com/feeds/668819790633739715/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://zx-1986.blogspot.com/2010/08/my-windows-xp-manual.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18689056/posts/default/668819790633739715'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18689056/posts/default/668819790633739715'/><link rel='alternate' type='text/html' href='http://zx-1986.blogspot.com/2010/08/my-windows-xp-manual.html' title='我的 Windows XP 必備軟體'/><author><name>張旭</name><uri>https://profiles.google.com/105134833883146274095</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-pO0m_C6_zQw/AAAAAAAAAAI/AAAAAAAAD0c/h7KNyAUN14w/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18689056.post-2701733527161744912</id><published>2010-08-13T16:17:00.001+08:00</published><updated>2010-08-16T17:30:20.929+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='fedora'/><title type='text'>Fedora 開機模式與自動啟動設定</title><content type='html'>將想要開機執行的命令新增在此檔案中：&lt;br /&gt;/etc/rc.d/rc.local&lt;br /&gt;&lt;br /&gt;例如：&lt;br /&gt;&lt;br /&gt;# 啟動 tarball 安裝的 Apache&lt;br /&gt;/im/apache2/bin/apachectl start&lt;br /&gt;&lt;br /&gt;# 啟動 tarball 安裝的 MySQL&lt;br /&gt;/im/mysql5/share/mysql/mysql.server start&lt;br /&gt;&lt;br /&gt;# 啟動 rpm 安裝的 VSFTP&lt;br /&gt;/etc/rc.d/init.d/vsftpd start&lt;br /&gt;&lt;br /&gt;# 啟動 rpm 安裝的 Samba&lt;br /&gt;/etc/rc.d/init.d/smb start&lt;br /&gt;/etc/rc.d/init.d/nmb start&lt;br /&gt;&lt;br /&gt;---&lt;br /&gt;&lt;br /&gt;Fedora 圖形介面或文字介面開機模式設定檔：&lt;br /&gt;/etc/inittab&lt;br /&gt;&lt;br /&gt;# 文字模式啟動&lt;br /&gt;id:3:initdefault:&lt;br /&gt;&lt;br /&gt;# 圖形介面啟動&lt;br /&gt;id:5:initdefault:&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18689056-2701733527161744912?l=zx-1986.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://zx-1986.blogspot.com/feeds/2701733527161744912/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://zx-1986.blogspot.com/2010/08/fedora-boot-up-setting.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18689056/posts/default/2701733527161744912'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18689056/posts/default/2701733527161744912'/><link rel='alternate' type='text/html' href='http://zx-1986.blogspot.com/2010/08/fedora-boot-up-setting.html' title='Fedora 開機模式與自動啟動設定'/><author><name>張旭</name><uri>https://profiles.google.com/105134833883146274095</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-pO0m_C6_zQw/AAAAAAAAAAI/AAAAAAAAD0c/h7KNyAUN14w/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18689056.post-1200753659502809593</id><published>2010-08-13T16:11:00.003+08:00</published><updated>2010-11-10T11:13:41.529+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='web'/><title type='text'>MediaWiki 備份與遷移</title><content type='html'>＊基本原理：&lt;br /&gt;把舊有的 MySQL 資料庫備份起來。&lt;br /&gt;新安裝一個資料庫，名稱和之前一模一樣，然後把新裝的資料庫砍掉，匯入舊的資料庫內容。&lt;br /&gt;讓新安裝的 MediaWiki 去存取該資料庫。&lt;br /&gt;&lt;br /&gt;備份資料庫：&lt;br /&gt;使用 mysqldump 或第三方管理軟體（ex: phpMyAdmin）備份整個 MediaWiki 資料庫。&lt;br /&gt;所有資料表和內容存成一個 *.sql 檔案，設定成 utf8 的儲存格式。&lt;br /&gt;&lt;br /&gt;備份資料夾：&lt;br /&gt;images&lt;br /&gt;skins&lt;br /&gt;extensions&lt;br /&gt;&lt;br /&gt;備份檔案：&lt;br /&gt;LocalSettings.php&lt;br /&gt;&lt;br /&gt;---&lt;br /&gt;&lt;br /&gt;edit: LocalSetting.php&lt;br /&gt;&lt;br /&gt;#不同的主機 ProxyKey 值會不一樣！&lt;br /&gt;$wgProxyKey = &lt;br /&gt;&lt;br /&gt;#設定 mediawiki 資料庫內資料表的前置名稱&lt;br /&gt;$wgDBprefix = "prefix_";&lt;br /&gt;&lt;br /&gt;#設定首頁 Logo 圖片的位址&lt;br /&gt;$wgLogo="URL://somewhere";&lt;br /&gt;#編寫和瀏覽權限設定&lt;br /&gt;$wgGroupPermissions['*']['createaccount'] = true;&lt;br /&gt;$wgGroupPermissions['*']['read'] = true;&lt;br /&gt;$wgGroupPermissions['*']['edit'] = false;&lt;br /&gt;$wgGroupPermissions['*']['createpage'] = false;&lt;br /&gt;$wgGroupPermissions['*']['createtalk'] = false;&lt;br /&gt;&lt;br /&gt;#圖片上傳設定&lt;br /&gt;$WGAllowExternalImages = true;&lt;br /&gt;&lt;br /&gt;#時間區域和計算設定&lt;br /&gt;$wgLocaltimezone = "Asia/Taipei";&lt;br /&gt;$oldtz = getenv("TZ");&lt;br /&gt;putenv("TZ=$wgLocaltimezone");&lt;br /&gt;$wgLocalTZoffset = date("Z")/60;&lt;br /&gt;putenv("TZ=$oldtz");&lt;br /&gt;&lt;br /&gt;＊注意：安裝完成後如果修改 MediaWiki 目錄的名稱會導致無法正常連線。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18689056-1200753659502809593?l=zx-1986.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://zx-1986.blogspot.com/feeds/1200753659502809593/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://zx-1986.blogspot.com/2010/08/migration-of-mediawiki.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18689056/posts/default/1200753659502809593'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18689056/posts/default/1200753659502809593'/><link rel='alternate' type='text/html' href='http://zx-1986.blogspot.com/2010/08/migration-of-mediawiki.html' title='MediaWiki 備份與遷移'/><author><name>張旭</name><uri>https://profiles.google.com/105134833883146274095</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-pO0m_C6_zQw/AAAAAAAAAAI/AAAAAAAAD0c/h7KNyAUN14w/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18689056.post-4389252590491358521</id><published>2010-08-13T16:02:00.006+08:00</published><updated>2010-09-24T16:50:06.792+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='mysql'/><title type='text'>使用 SQL 指令建新資料庫</title><content type='html'>使用 SQL 文字命令架設資料庫及新增帳號。&lt;br /&gt;&lt;br /&gt;1. 利用 MySQL 的 root 身份建立資料庫與帳號：&lt;br /&gt;&lt;br /&gt;shell&gt; mysql -u root -p&lt;br /&gt;Enter password:&lt;br /&gt;# 輸入你的 MySQL 的 root 密碼&lt;br /&gt;&lt;br /&gt;mysql&gt; create database DBNAME; &lt;br /&gt;# 建立一個新的資料庫名稱為「DBNAME」，注意每個指令後面要加上「;」&lt;br /&gt;&lt;br /&gt;mysql&gt; grant all privileges on DBNAME.* to DBID@localhost identified by 'your.password' ;&lt;br /&gt;# 將剛剛建立的「DBNAME」這個資料庫的權限指定給「DBID」這個帳號！&lt;br /&gt;# 如果「DBID」這個不存在，系統會自動新建這個帳號，&lt;br /&gt;# 並讓它擁有「DBNAME」這個資料庫的權限。&lt;br /&gt;# 在 'your.password' 中填上自己要設定給「DBID」這個帳號的密碼！&lt;br /&gt;&lt;br /&gt;mysql&gt; exit&lt;br /&gt;&lt;br /&gt;2. 測試剛剛建立的資料庫與帳號是否可以使用：&lt;br /&gt;&lt;br /&gt;[root@test root]# mysql -u 資料庫帳號 -p&lt;br /&gt;Enter password:&lt;br /&gt;&lt;br /&gt;mysql&gt; connect 資料庫名稱;&lt;br /&gt;&lt;br /&gt;mysql&gt; exit&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18689056-4389252590491358521?l=zx-1986.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://zx-1986.blogspot.com/feeds/4389252590491358521/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://zx-1986.blogspot.com/2010/08/using-command-line-in-mysql.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18689056/posts/default/4389252590491358521'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18689056/posts/default/4389252590491358521'/><link rel='alternate' type='text/html' href='http://zx-1986.blogspot.com/2010/08/using-command-line-in-mysql.html' title='使用 SQL 指令建新資料庫'/><author><name>張旭</name><uri>https://profiles.google.com/105134833883146274095</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-pO0m_C6_zQw/AAAAAAAAAAI/AAAAAAAAD0c/h7KNyAUN14w/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18689056.post-8988462651656593579</id><published>2010-08-13T15:58:00.004+08:00</published><updated>2010-09-24T11:51:58.429+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='mysql'/><title type='text'>轉出 UTF8 編碼的 MySQL 檔</title><content type='html'>這真的是非常煩人的又浪費美好生命的古老問題！&lt;br /&gt;&lt;br /&gt;如果您跟別人介紹您是一位網頁設計師，您寫 html，您設計 CSS，您使用 MySQL，&lt;br /&gt;可是您不知道什麼是 utf8（！？）&lt;br /&gt;拜託搞清楚它，拜託…&lt;br /&gt;&lt;br /&gt;網頁是 utf8 編碼，可傳送到 MySQL 時是用 latin1 編碼，存到 MySQL 也是 latin1 編碼。&lt;br /&gt;那這個資料庫用 phpMyAdmin 來瀏覽，將會是非常不堪的。&lt;br /&gt;不管用什麼編碼都無法讓 phpMyAdmin 介面正常顯示資料庫內的中文。&lt;br /&gt;( P.S. 請參考 Reference 01 的狀況二 )&lt;br /&gt;&lt;br /&gt;請使用 cmd 模式進入 MySQL 的 bin 目錄，執行：&lt;br /&gt;mysqldump --default-character-set=latin1 -u root -p 資料庫名稱 &gt; 待處理成 utf8 的資料庫.sql&lt;br /&gt;&lt;br /&gt;這時候產生的「待處理成 utf8 的資料庫.sql」檔案是一個 ANSI 編碼的東西，&lt;br /&gt;&lt;br /&gt;在 Winodws 底下，可以用 notepad++ 之類的編輯器開啟「待處理成 utf8 的資料庫.sql」，&lt;br /&gt;然後轉存成 utf8 編碼，按鈕在最上面「檔案、檢視…」那排，麻煩找一下。&lt;br /&gt;&lt;br /&gt;在 Linux 底下，可以使用：&lt;br /&gt;iconv -f big5 -t utf8 待處理成 utf8 的資料庫.sql &gt; utf8 編碼的資料庫.sql&lt;br /&gt;&lt;br /&gt;不過還有更重要的一點！&lt;br /&gt;並不是這樣轉檔完就好了！&lt;br /&gt;&lt;br /&gt;開啟轉成 utf8 編碼的 .sql 檔後，應該會發現裡面有些地方還有：&lt;br /&gt;「DEFAULT CHARSET=latin1」&lt;br /&gt;這些句子都是惡魔！魔鬼！該下地獄的該死東西！&lt;br /&gt;&lt;br /&gt;用 vim 或隨便什麼編輯器，甚至 Microsoft Word！把 latin1 取代！取代！取代！全部取代！&lt;br /&gt;&lt;br /&gt;在 vim 使用：&lt;br /&gt;%s/latin1/utf8/g&lt;br /&gt;&lt;br /&gt;阿彌陀佛，放下 big5，立地成佛。&lt;br /&gt;&lt;br /&gt;Reference :&lt;br /&gt;01. http://www.adsenseor.com/mysql/256.html&lt;br /&gt;02. http://blog.derjohng.com/2006/01/18/backup-mysql-utf8-data/&lt;br /&gt;03. http://a-wei.net/archives/4&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18689056-8988462651656593579?l=zx-1986.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://zx-1986.blogspot.com/feeds/8988462651656593579/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://zx-1986.blogspot.com/2010/08/utf8-in-mysql.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18689056/posts/default/8988462651656593579'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18689056/posts/default/8988462651656593579'/><link rel='alternate' type='text/html' href='http://zx-1986.blogspot.com/2010/08/utf8-in-mysql.html' title='轉出 UTF8 編碼的 MySQL 檔'/><author><name>張旭</name><uri>https://profiles.google.com/105134833883146274095</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-pO0m_C6_zQw/AAAAAAAAAAI/AAAAAAAAD0c/h7KNyAUN14w/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18689056.post-6897264280122190464</id><published>2010-08-13T15:51:00.005+08:00</published><updated>2011-09-28T14:02:47.491+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='xml'/><category scheme='http://www.blogger.com/atom/ns#' term='php'/><title type='text'>使用 PHP 動態產生 XML</title><content type='html'>直接看一個靜態的例子：&lt;br /&gt;&lt;pre class="brush: php"&gt;&amp;lt;?php&lt;br /&gt;ob_start();&lt;br /&gt;header('Content-Type: text/xml');&lt;br /&gt;&lt;br /&gt;$dom = new DOMDocument('1.0');&lt;br /&gt;$dom-&gt;encoding = 'UTF-8';&lt;br /&gt;&lt;br /&gt;// 建立母節點 $root&lt;br /&gt;$root = $dom-&gt;createElement('root');&lt;br /&gt;$dom-&gt;appendChild($root);&lt;br /&gt;&lt;br /&gt;// 設定屬性&lt;br /&gt;$root-&gt;setAttribute('name', 'xxx');&lt;br /&gt;&lt;br /&gt;// 建立 $root 的子節點 $child&lt;br /&gt;$child = $dom-&gt;createElement('child');&lt;br /&gt;$root-&gt;appendChild($child);&lt;br /&gt;&lt;br /&gt;// 建立文字節點 $text&lt;br /&gt;$text = $dom-&gt;createTextNode('文字');&lt;br /&gt;&lt;br /&gt;// $text 加到 $child 節點底下&lt;br /&gt;$child-&gt;appendChild($text);&lt;br /&gt;&lt;br /&gt;$xmlStr = $dom-&gt;saveXML();&lt;br /&gt;echo $xmlStr;&lt;br /&gt;&lt;br /&gt;?&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;底下是一個從資料庫撈資料動態產生 RSS 檔的例子：&lt;br /&gt;&lt;pre class="brush: php"&gt;&amp;lt;?php&lt;br /&gt;ob_start();&lt;br /&gt;header('Content-Type: text/xml');&lt;br /&gt;&lt;br /&gt;$dom = new DOMDocument('1.0');&lt;br /&gt;$dom-&gt;encoding = 'UTF-8';&lt;br /&gt;&lt;br /&gt;// 建立母節點 $rss&lt;br /&gt;$rss = $dom-&gt;createElement('rss');&lt;br /&gt;$dom-&gt;appendChild($rss);&lt;br /&gt;$rss-&gt;setAttribute('version', '2.0');&lt;br /&gt;&lt;br /&gt;// 建立第一子節點 $channel&lt;br /&gt;$channel = $dom-&gt;createElement('channel');&lt;br /&gt;$rss-&gt;appendChild($channel);&lt;br /&gt;&lt;br /&gt;// $channel 底下的節點及其文字內容&lt;br /&gt;$title = $dom-&gt;createElement('title');&lt;br /&gt;$titleText = $dom-&gt;createTextNode('您的 RSS 標題');&lt;br /&gt;$title-&gt;appendChild($titleText);&lt;br /&gt;$channel-&gt;appendChild($title);&lt;br /&gt;&lt;br /&gt;$link = $dom-&gt;createElement('link');&lt;br /&gt;$linkText = $dom-&gt;createTextNode('http://您的網站連結/');&lt;br /&gt;$link-&gt;appendChild($linkText);&lt;br /&gt;$channel-&gt;appendChild($link);&lt;br /&gt;&lt;br /&gt;$description = $dom-&gt;createElement('description');&lt;br /&gt;$descriptionText = $dom-&gt;createTextNode('您的描述');&lt;br /&gt;$description-&gt;appendChild($descriptionText);&lt;br /&gt;$channel-&gt;appendChild($description);&lt;br /&gt;&lt;br /&gt;// 查詢資料庫，撈資料來建立 item 節點&lt;br /&gt;require_once("您的資料庫連結檔，包括資料庫名稱，帳號，密碼，連結等.php");&lt;br /&gt;$query = "您的 SQL 子句";&lt;br /&gt;$result = mysql_query($query, 連結);&lt;br /&gt;&lt;br /&gt;while($row = @mysql_fetch_assoc($result))&lt;br /&gt;{&lt;br /&gt;$item = $dom-&gt;createElement('item');&lt;br /&gt;$channel-&gt;appendChild($item);&lt;br /&gt;&lt;br /&gt;$title = $dom-&gt;createElement('title');&lt;br /&gt;$titleText = $dom-&gt;createTextNode($row['文章標題']);&lt;br /&gt;$title-&gt;appendChild($titleText);&lt;br /&gt;$item-&gt;appendChild($title);&lt;br /&gt;&lt;br /&gt;$pubDate = $dom-&gt;createElement('pubDate');&lt;br /&gt;$pubDateText = $dom-&gt;createTextNode($row['文章日期']);&lt;br /&gt;$pubDate-&gt;appendChild($pubDateText);&lt;br /&gt;$item-&gt;appendChild($pubDate);&lt;br /&gt;&lt;br /&gt;$description = $dom-&gt;createElement('description');&lt;br /&gt;$descriptionText = $dom-&gt;createTextNode($row['文章描述']);&lt;br /&gt;$description-&gt;appendChild($descriptionText);&lt;br /&gt;$item-&gt;appendChild($description);&lt;br /&gt;&lt;br /&gt;$link = $dom-&gt;createElement('link');&lt;br /&gt;$linkText = $dom-&gt;createTextNode('您的連結');&lt;br /&gt;$link-&gt;appendChild($linkText);&lt;br /&gt;$item-&gt;appendChild($link);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;$xmlStr = $dom-&gt;saveXML();&lt;br /&gt;echo $xmlStr;&lt;br /&gt;&lt;br /&gt;mysql_close($link);&lt;br /&gt;?&gt;&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18689056-6897264280122190464?l=zx-1986.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://zx-1986.blogspot.com/feeds/6897264280122190464/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://zx-1986.blogspot.com/2010/08/generating-xml-by-php.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18689056/posts/default/6897264280122190464'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18689056/posts/default/6897264280122190464'/><link rel='alternate' type='text/html' href='http://zx-1986.blogspot.com/2010/08/generating-xml-by-php.html' title='使用 PHP 動態產生 XML'/><author><name>張旭</name><uri>https://profiles.google.com/105134833883146274095</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-pO0m_C6_zQw/AAAAAAAAAAI/AAAAAAAAD0c/h7KNyAUN14w/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18689056.post-5750664247184064028</id><published>2010-08-13T15:43:00.005+08:00</published><updated>2011-09-28T14:03:25.013+08:00</updated><title type='text'>Blogger 安裝 SyntaxHighlighter</title><content type='html'>&lt;a href="http://en.wikipedia.org/wiki/Syntax_highlighting"&gt;Syntax Highlight&lt;/a&gt; - 語法高亮度顯示&lt;br /&gt;&lt;br /&gt;Blogger 安裝 SyntaxHighlighter 3 教學&lt;br /&gt;&lt;br /&gt;進入你的 blogger 設計頁面，選擇編輯 html。&lt;br /&gt;找到 &amp;lt;head&amp;gt; 標籤，在標籤後空一行，貼入以下語法：&lt;br /&gt;&lt;pre class="brush: xml"&gt;&lt;!-- post by user --&gt;&lt;br /&gt;&lt;!-- 選用的主題樣式 --&gt;&lt;br /&gt;&lt;link href='http://alexgorbatchev.com/pub/sh/current/styles/shCoreMidnight.css' rel='stylesheet' type='text/css'/&gt;&lt;br /&gt;&lt;!-- essential ! --&gt;&lt;br /&gt;&lt;link href='http://alexgorbatchev.com/pub/sh/current/styles/shCore.css' rel='stylesheet' type='text/css'/&gt;&lt;br /&gt;&lt;script src='http://alexgorbatchev.com/pub/sh/current/scripts/shCore.js' type='text/javascript'/&gt;&lt;br /&gt;&lt;!-- 啟用的程式語言筆刷 --&gt;&lt;br /&gt;&lt;script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushXml.js' type='text/javascript'/&gt;&lt;br /&gt;&lt;script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushPhp.js' type='text/javascript'/&gt;&lt;br /&gt;&lt;script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushCpp.js' type='text/javascript'/&gt;&lt;br /&gt;&lt;script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushSql.js' type='text/javascript'/&gt;&lt;br /&gt;&lt;script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushBash.js' type='text/javascript'/&gt;&lt;br /&gt;&lt;script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushPython.js' type='text/javascript'/&gt;&lt;br /&gt;&lt;script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushRuby.js' type='text/javascript'/&gt;&lt;br /&gt;&lt;script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushJscript.js' type='text/javascript'/&gt;&lt;br /&gt;&lt;script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushCss.js' type='text/javascript'/&gt;&lt;br /&gt;&lt;!-- essential ! --&gt;&lt;br /&gt;&lt;script type='text/javascript'&gt;SyntaxHighlighter.all()&lt;/script&gt;&lt;br /&gt;&lt;!-- post by user --&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;其他主題樣式與程式語言筆刷可以到以下網址參考：&lt;br /&gt;http://alexgorbatchev.com/SyntaxHighlighter/hosting.html&lt;br /&gt;&lt;br /&gt;在編輯文章時，將要 highlight 的片段用以下標籤包裹：&lt;br /&gt;&lt;code&gt;&lt;br /&gt;&amp;lt;pre class="brush: 程式語言種類"&amp;gt;&lt;br /&gt;// 您的程式碼&lt;br /&gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;Reference：&lt;br /&gt;01. http://alexgorbatchev.com/SyntaxHighlighter/&lt;br /&gt;02. http://shiouhhc.blogspot.com/2007/08/blogger_27.html&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18689056-5750664247184064028?l=zx-1986.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://zx-1986.blogspot.com/feeds/5750664247184064028/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://zx-1986.blogspot.com/2010/08/syntaxhighlighter-in-blogger.html#comment-form' title='2 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18689056/posts/default/5750664247184064028'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18689056/posts/default/5750664247184064028'/><link rel='alternate' type='text/html' href='http://zx-1986.blogspot.com/2010/08/syntaxhighlighter-in-blogger.html' title='Blogger 安裝 SyntaxHighlighter'/><author><name>張旭</name><uri>https://profiles.google.com/105134833883146274095</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-pO0m_C6_zQw/AAAAAAAAAAI/AAAAAAAAD0c/h7KNyAUN14w/s512-c/photo.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18689056.post-8091644361119393774</id><published>2010-08-13T15:25:00.009+08:00</published><updated>2011-09-28T14:03:20.161+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='ubuntu'/><title type='text'>使用 MRTG 監控系統效能</title><content type='html'>軟體：Multi Router Traffic Grapher&lt;br /&gt;環境：Ubuntu 9.10 Server&lt;br /&gt;&lt;br /&gt;＃請先切換到 root 身份。&lt;br /&gt;&lt;br /&gt;首先，要先裝好 Apache 與 PHP：&lt;br /&gt;apt-get install apache2&lt;br /&gt;apt-get install php5 libapache2-mod-php5&lt;br /&gt;&lt;br /&gt;接著安裝 SNMP：&lt;br /&gt;apt-get install snmpd&lt;br /&gt;&lt;br /&gt;修改 SNMP 設定檔：&lt;br /&gt;vim /etc/snmp/snmpd.conf&lt;br /&gt;&lt;br /&gt;把 snmpd.conf 的 sec.name source community 部份修改如下：&lt;br /&gt;# com2sec paranoid default public&lt;br /&gt;com2sec readonly default public&lt;br /&gt;#com2sec readwrite default private&lt;br /&gt;&lt;br /&gt;重新啟動 SNMP 服務：&lt;br /&gt;/etc/init.d/snmpd restart&lt;br /&gt;&lt;br /&gt;安裝 MRTG：&lt;br /&gt;apt-get install mrtg&lt;br /&gt;&lt;br /&gt;建立 MRTG 的網頁資料夾：&lt;br /&gt;mkdir /var/www/mrtg&lt;br /&gt;&lt;br /&gt;編輯 MRTG 設置檔：&lt;br /&gt;vim /etc/mrtg.cfg&lt;br /&gt;&lt;br /&gt;在檔案內 Global Settings 那段，修改成如下設定：&lt;br /&gt;RunAsDaemon: yes&lt;br /&gt;EnableIPv6: no&lt;br /&gt;WorkDir: /var/www/mrtg&lt;br /&gt;Options[_]: bits, growright&lt;br /&gt;WriteExpires: Yes&lt;br /&gt;Title[^]: Traffic Analysis For&lt;br /&gt;&lt;br /&gt;查看 /etc/cron.d/mrtg 檔案，編輯 MRTG 的自動排程。&lt;br /&gt;內容類似：&lt;br /&gt;*/5 * * * * root if [ -x /usr/bin/mrtg ] &amp;amp;&amp;amp; [ -r /etc/mrtg.cfg ]; then env LANG=C /usr/bin/mrtg /etc/mrtg.cfg &gt;&gt; /var/log/mrtg/mrtg.log 2&gt;&amp;1; fi&lt;br /&gt;或：&lt;br /&gt;*/5 * * * * root if [ ! -d /var/lock/mrtg ]; then mkdir /var/lock/mrtg; fi; if [ -x /usr/bin/mrtg ] &amp;amp;&amp;amp; [ -r /etc/mrtg.cfg ]; then env LANG=C /usr/bin/mrtg /etc/mrtg.cfg 2&gt;&amp;amp;1 | tee -a /var/log/mrtg/mrtg.log ; fi&lt;br /&gt;&lt;br /&gt;執行下列指令，產生本機監控設置：&lt;br /&gt;cfgmaker public@localhost &gt; /etc/mrtg.cfg&lt;br /&gt;&lt;br /&gt;&lt;del&gt;Creating a configuration file for a device using：&lt;br /&gt;cfgmaker public@192.168.0.1 &gt;&gt; /etc/mrtg.cfg&lt;/del&gt;&lt;br /&gt;&lt;br /&gt;使用 indexmaker 產生 MRTG 頁面：&lt;br /&gt;indexmaker /etc/mrtg.cfg &gt; /var/www/mrtg/index.html&lt;br /&gt;&lt;br /&gt;執行以下指令三次，直到沒有錯誤訊息：&lt;br /&gt;env LANG=C /usr/bin/mrtg /etc/mrtg.cfg&lt;br /&gt;&lt;br /&gt;使用瀏覽器連線到本機的 MRTG 頁面資料夾觀察流量頁面：&lt;br /&gt;http://localhost/mrtg/&lt;br /&gt;&lt;br /&gt;＊&lt;br /&gt;&lt;br /&gt;搭配 sysstat 工具監控 CPU 負載量&lt;br /&gt;&lt;br /&gt;安裝 sysstat 工具：&lt;br /&gt;apt-get install sysstat&lt;br /&gt;&lt;br /&gt;sysstat 指令簡單說明：&lt;br /&gt;sar -u 1 3 # 每一秒鐘測一次 CPU，三次後計算平均。&lt;br /&gt;sar -r 3 3 # 每三秒測一次實體與虛擬記憶體用量，三次後計算平均。&lt;br /&gt;&lt;br /&gt;執行以下指令測試一下：&lt;br /&gt;/usr/bin/sar -u 1 3&lt;br /&gt;&lt;br /&gt;在 MRTG 網頁目錄下新增一個 CPU 目錄：&lt;br /&gt;mkdir /var/www/mrtg/cpu&lt;br /&gt;cd /var/www/mrtg/cpu&lt;br /&gt;&lt;br /&gt;編寫 CPU 監控的 bash script：&lt;br /&gt;vim cpu.sh&lt;br /&gt;&lt;br /&gt;cpu.sh 內容如下：&lt;br /&gt;&lt;pre class="brush: bash"&gt;#!/bin/bash&lt;br /&gt;# 開始使用 sar 來監測 CPU 的 user 及 System 負載率&lt;br /&gt;  cpuusr=`/usr/bin/sar -u 1 3 | grep Average | awk '{print $3}'`&lt;br /&gt;  cpusys=`/usr/bin/sar -u 1 3 | grep Average | awk '{print $5}'`&lt;br /&gt;  UPtime=`/usr/bin/uptime | awk '{print $3 " " $4 " " $5}'`&lt;br /&gt;&lt;br /&gt;# 列出四個數據（前兩個為數字）&lt;br /&gt;  echo $cpuusr&lt;br /&gt;  echo $cpusys&lt;br /&gt;  echo $UPtime&lt;br /&gt;  echo localhost&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;修改執行權限：&lt;br /&gt;chmod 755 cpu.sh&lt;br /&gt;&lt;br /&gt;編寫監控 CPU 的 MRTG 設置檔：&lt;br /&gt;vim cpu.cfg&lt;br /&gt;&lt;br /&gt;cpu.cfg 內容如下：&lt;br /&gt;&lt;pre class="brush: bash"&gt;### Global Config Options&lt;br /&gt;### To get bits instead of bytes and graphs growing to the right&lt;br /&gt;WorkDir: /var/www/mrtg/cpu/&lt;br /&gt;Language: utf8&lt;br /&gt;Target[localhost]: `/var/www/mrtg/cpu/cpu.sh`&lt;br /&gt;MaxBytes[localhost]: 100&lt;br /&gt;Options[localhost]: gauge, nopercent, growright&lt;br /&gt;YLegend[localhost]: CPU loading (%)&lt;br /&gt;ShortLegend[localhost]: %&lt;br /&gt;LegendO[localhost]: &amp;amp;nbsp; CPU sys;&lt;br /&gt;LegendI[localhost]: &amp;amp;nbsp; CPU usr;&lt;br /&gt;Title[localhost]: CPU Utilization&lt;br /&gt;PageTop[localhost]: &amp;lt;h1&amp;gt;localhost CPU usage&amp;lt;/h1&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;執行以下指令三次，直到沒有錯誤訊息：&lt;br /&gt;env LANG=C /usr/bin/mrtg /var/www/mrtg/cpu/cpu.cfg&lt;br /&gt;&lt;br /&gt;編輯系統排程檔：&lt;br /&gt;vim /etc/crontab&lt;br /&gt;&lt;br /&gt;寫入以下內容：&lt;br /&gt;&lt;pre class="brush: bash"&gt;*/5 * * * * root /usr/bin/mrtg /var/www/mrtg/cpu/cpu.cfg &gt; /dev/null 2&gt;&amp;1&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;使用瀏覽器觀察 CPU 負載頁面：&lt;br /&gt;http://localhost/mrtg/cpu/localhost.html&lt;br /&gt;&lt;br /&gt;Reference：&lt;br /&gt;01. http://www.debianhelp.co.uk/mrtg.htm&lt;br /&gt;02. http://www.linuxhomenetworking.com/wiki/&lt;br /&gt;03. http://noc.navi.net/mrtg-conf.html&lt;br /&gt;04. http://linux.vbird.org/linux_security/old/04mrtg.php&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18689056-8091644361119393774?l=zx-1986.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://zx-1986.blogspot.com/feeds/8091644361119393774/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://zx-1986.blogspot.com/2010/08/using-mrtg-to-monitor-cpu-usage.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18689056/posts/default/8091644361119393774'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18689056/posts/default/8091644361119393774'/><link rel='alternate' type='text/html' href='http://zx-1986.blogspot.com/2010/08/using-mrtg-to-monitor-cpu-usage.html' title='使用 MRTG 監控系統效能'/><author><name>張旭</name><uri>https://profiles.google.com/105134833883146274095</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-pO0m_C6_zQw/AAAAAAAAAAI/AAAAAAAAD0c/h7KNyAUN14w/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18689056.post-5657052115839333378</id><published>2010-08-13T15:23:00.003+08:00</published><updated>2011-09-28T14:03:29.907+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><title type='text'>使用 Cacti 監控系統效能</title><content type='html'>＃如果有套件管理軟體，請盡量用套件管理軟體裝就好了，不要為自己找麻煩 ...&lt;br /&gt;&lt;br /&gt;Multi CPU Utilization Graph&lt;br /&gt;http://forums.cacti.net/about11615.html&lt;br /&gt;&lt;br /&gt;Reference：&lt;br /&gt;01. http://cacti.xxoo.net/&lt;br /&gt;02. http://forum.icst.org.tw/phpbb/viewtopic.php?t=7671&lt;br /&gt;03. http://itgroup.blueshop.com.tw/towns/hc?n=wodvew&amp;i=401&lt;br /&gt;04. http://cha.homeip.net/blog/archives/2006/03/cacti.html&lt;br /&gt;05. http://blog.pmail.idv.tw/index.php?load=read&amp;id=373&lt;br /&gt;06. http://www.ubuntugeek.com/&lt;br /&gt;&lt;br /&gt;Further Reading：&lt;br /&gt;http://ycfunet.blogspot.com/2008/05/rrdtool.html&lt;br /&gt;http://www.study-area.org/tips/rrdtool/rrdtool.html&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18689056-5657052115839333378?l=zx-1986.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://zx-1986.blogspot.com/feeds/5657052115839333378/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://zx-1986.blogspot.com/2010/08/using-cacti.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18689056/posts/default/5657052115839333378'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18689056/posts/default/5657052115839333378'/><link rel='alternate' type='text/html' href='http://zx-1986.blogspot.com/2010/08/using-cacti.html' title='使用 Cacti 監控系統效能'/><author><name>張旭</name><uri>https://profiles.google.com/105134833883146274095</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-pO0m_C6_zQw/AAAAAAAAAAI/AAAAAAAAD0c/h7KNyAUN14w/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18689056.post-7739793066081921564</id><published>2010-08-13T15:17:00.004+08:00</published><updated>2010-08-16T17:34:57.068+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='dns'/><category scheme='http://www.blogger.com/atom/ns#' term='freebsd'/><title type='text'>在 FreeBSD 內更新 DNS 設定</title><content type='html'>DNS 的設定檔通常在 /etc/namedb/ 資料夾底下。&lt;br /&gt;&lt;br /&gt;領域資料檔更新時，記得更新裡面的 serial number。&lt;br /&gt;&lt;br /&gt;通常會用「更新日期 + 編號」當作 serial number。&lt;br /&gt;&lt;br /&gt;修改完領域資料檔，執行：&lt;br /&gt;rndc flush&lt;br /&gt;&lt;br /&gt;重開 DNS 服務，執行：&lt;br /&gt;/etc/rc.d/named restart&lt;br /&gt;&lt;br /&gt;Reference：&lt;br /&gt;01. http://teacher.tysh.tyc.edu.tw/~t333/wiki/doku.php?id=freebsd:dns&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18689056-7739793066081921564?l=zx-1986.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://zx-1986.blogspot.com/feeds/7739793066081921564/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://zx-1986.blogspot.com/2010/08/update-dns-in-freebsd.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18689056/posts/default/7739793066081921564'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18689056/posts/default/7739793066081921564'/><link rel='alternate' type='text/html' href='http://zx-1986.blogspot.com/2010/08/update-dns-in-freebsd.html' title='在 FreeBSD 內更新 DNS 設定'/><author><name>張旭</name><uri>https://profiles.google.com/105134833883146274095</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-pO0m_C6_zQw/AAAAAAAAAAI/AAAAAAAAD0c/h7KNyAUN14w/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18689056.post-3491138189089065393</id><published>2010-08-13T15:09:00.003+08:00</published><updated>2011-01-18T08:08:24.457+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='grid'/><category scheme='http://www.blogger.com/atom/ns#' term='ubuntu'/><category scheme='http://www.blogger.com/atom/ns#' term='globus'/><title type='text'>安裝 TKG 網格機器</title><content type='html'>主題：在 Ubuntu 9.10 環境 ( x86_32 或 x86_64 ) 安裝 Globus Toolkit 4。&lt;br /&gt;&lt;br /&gt;***************************&lt;br /&gt;&lt;br /&gt;零、環境說明&lt;br /&gt;&lt;br /&gt;TKG 網格主機，作業系統的預設使用者：&lt;br /&gt;user008&lt;br /&gt;&lt;br /&gt;# user008 的密碼為 TKG 的專用密碼。&lt;br /&gt;# 請詢問老師或學長姐。&lt;br /&gt;&lt;br /&gt;---------&lt;br /&gt;&lt;br /&gt;TKG Globus 網格使用者名稱：&lt;br /&gt;user008&lt;br /&gt;&lt;br /&gt;# user008 的密碼為 TKG 的專用密碼。&lt;br /&gt;# 請詢問老師或學長姐。&lt;br /&gt;&lt;br /&gt;---------&lt;br /&gt;&lt;br /&gt;「TKG Globus 網格使用者 user008」映對到「TKG 網格主機作業系統使用者 user008」。&lt;br /&gt;&lt;br /&gt;「TKG Globus 網格使用者 user008」使用網格主機作業系統中的 user008 帳號存取主機資源。&lt;br /&gt;&lt;br /&gt;---------&lt;br /&gt;&lt;br /&gt;安裝過程中，需要設定密碼或要求輸入密碼的地方，請都使用 TKG 的專用密碼。&lt;br /&gt;&lt;br /&gt;***************************&lt;br /&gt;&lt;br /&gt;一、網路設定&lt;br /&gt;&lt;br /&gt;執行：&lt;br /&gt;sudo su -&lt;br /&gt;&lt;br /&gt;執行：&lt;br /&gt;vim /etc/network/interface&lt;br /&gt;&lt;br /&gt;將 eth0 的內容改為如下：&lt;br /&gt;auto eth0&lt;br /&gt;iface eth0 inet static&lt;br /&gt;address 192.168.100.(主機號碼)&lt;br /&gt;netmask 255.255.255.0&lt;br /&gt;network 192.168.100.0&lt;br /&gt;broadcast 192.168.100.255&lt;br /&gt;gateway 192.168.100.1&lt;br /&gt;dns-nameservers (資管系 DNS 主機位址)&lt;br /&gt;&lt;br /&gt;執行：&lt;br /&gt;/etc/init.d/networking restart&lt;br /&gt;&lt;br /&gt;執行：&lt;br /&gt;vim /etc/hostname&lt;br /&gt;&lt;br /&gt;將內容修改為：&lt;br /&gt;im(主機號碼).im.ncue.edu.tw&lt;br /&gt;&lt;br /&gt;存檔離開，執行：&lt;br /&gt;reboot&lt;br /&gt;&lt;br /&gt;重開機之後，使用以下指令檢查一下主機名稱：&lt;br /&gt;/bin/hostname&lt;br /&gt;&lt;br /&gt;使用以下指令檢查一下網路設定：&lt;br /&gt;ifconfig&lt;br /&gt;&lt;br /&gt;然後執行：&lt;br /&gt;ping 192.168.100.1&lt;br /&gt;ping (資管系 DNS 主機位址)&lt;br /&gt;&lt;br /&gt;***************************&lt;br /&gt;&lt;br /&gt;二、下載相關檔案&lt;br /&gt;&lt;br /&gt;執行：&lt;br /&gt;cd /opt&lt;br /&gt;&lt;br /&gt;執行：&lt;br /&gt;scp -r user008@192.168.100.1:/opt/globus_ubuntu /opt&lt;br /&gt;&lt;br /&gt;執行：&lt;br /&gt;cd /opt/globus_ubuntu&lt;br /&gt;&lt;br /&gt;執行：&lt;br /&gt;ls -lh&lt;br /&gt;&lt;br /&gt;顯示：&lt;br /&gt;apache-ant-1.7.1-bin.tar.gz&lt;br /&gt;globus_simple_ca_502cf2ea_setup-0.19.tar.gz&lt;br /&gt;grid-mapfile&lt;br /&gt;gt4.0.8-all-source-installer.tar.gz&lt;br /&gt;gt4.2.1-all-source-installer.tar.gz&lt;br /&gt;jdk-6u17-linux-i586.bin&lt;br /&gt;jdk-6u17-linux-x64.bin&lt;br /&gt;junit-4.3.1.jar&lt;br /&gt;ld.so.conf&lt;br /&gt;mpich.tar.gz&lt;br /&gt;pre-requisites.sh&lt;br /&gt;profile&lt;br /&gt;xinetd.d_gsiftp&lt;br /&gt;xinetd.d_gsigatekeeper&lt;br /&gt;&lt;br /&gt;***************************&lt;br /&gt;&lt;br /&gt;三、安裝必備軟體 ( prerequisite softwares )&lt;br /&gt;&lt;br /&gt;執行：&lt;br /&gt;cd /opt/globus_ubuntu&lt;br /&gt;&lt;br /&gt;執行：&lt;br /&gt;./pre-requisites.sh&lt;br /&gt;&lt;br /&gt;系統進行安裝確認時，請輸入：Y&lt;br /&gt;&lt;br /&gt;***************************&lt;br /&gt;&lt;br /&gt;四、獨立安裝必備軟體：Java 與 Apache Ant&lt;br /&gt;&lt;br /&gt;Java 的安裝。&lt;br /&gt;&lt;br /&gt;執行：&lt;br /&gt;cd /opt/globus_ubuntu&lt;br /&gt;&lt;br /&gt;如果是 x86_32 環境請執行：&lt;br /&gt;./jdk-6u17-linux-i586.bin&lt;br /&gt;&lt;br /&gt;如果是 x86_64 環境請執行：&lt;br /&gt;./jdk-6u17-linux-x64.bin&lt;br /&gt;&lt;br /&gt;顯示：&lt;br /&gt;Java 的 license terms，請壓一下 q，然後輸入 yes，按 enter。&lt;br /&gt;Java 自解壓縮安裝完成後，請壓幾下 enter 結束安裝。&lt;br /&gt;&lt;br /&gt;執行：&lt;br /&gt;mv jdk1.6.0_17 ../java&lt;br /&gt;&lt;br /&gt;---------&lt;br /&gt;&lt;br /&gt;Apache Ant 的安裝。&lt;br /&gt;&lt;br /&gt;執行：&lt;br /&gt;cd /opt/globus_ubuntu&lt;br /&gt;&lt;br /&gt;執行：&lt;br /&gt;tar zxvf apache-ant-1.7.1-bin.tar.gz&lt;br /&gt;&lt;br /&gt;執行：&lt;br /&gt;mv apache-ant-1.7.1 ../ant&lt;br /&gt;&lt;br /&gt;執行：&lt;br /&gt;cp junit-4.3.1.jar ../ant/lib/&lt;br /&gt;&lt;br /&gt;---------&lt;br /&gt;&lt;br /&gt;匯入環境變數。&lt;br /&gt;&lt;br /&gt;執行：&lt;br /&gt;cd /opt/globus_ubuntu&lt;br /&gt;&lt;br /&gt;執行：&lt;br /&gt;more profile &gt;&gt; /etc/profile&lt;br /&gt;&lt;br /&gt;執行：&lt;br /&gt;source /etc/profile&lt;br /&gt;&lt;br /&gt;# 先忽略 -su: /opt/globus/etc/globus-user-env.sh: No such file or directory 錯誤。&lt;br /&gt;&lt;br /&gt;測試 Java，執行：&lt;br /&gt;java -version&lt;br /&gt;&lt;br /&gt;測試 Apache Ant，執行：&lt;br /&gt;ant -version&lt;br /&gt;&lt;br /&gt;***************************&lt;br /&gt;&lt;br /&gt;五、安裝 Globus Toolkit&lt;br /&gt;&lt;br /&gt;# 研究室舊有的網格使用的是 Globus Toolkit 4.0.* 版本的。&lt;br /&gt;# Globus Toolkit 4.0.* 與 Globus Toolkit 4.2.* 是不相通的。&lt;br /&gt;&lt;br /&gt;執行：&lt;br /&gt;cd /opt/globus_ubuntu&lt;br /&gt;&lt;br /&gt;執行：&lt;br /&gt;tar zxvf gt4.0.8-all-source-installer.tar.gz&lt;br /&gt;&lt;br /&gt;執行：&lt;br /&gt;mkdir /opt/globus&lt;br /&gt;&lt;br /&gt;執行：&lt;br /&gt;cd /opt/globus_ubuntu/gt4.0.8-all-source-installer&lt;br /&gt;&lt;br /&gt;執行：&lt;br /&gt;./configure --prefix=/opt/globus&lt;br /&gt;&lt;br /&gt;執行：&lt;br /&gt;make | tee gt_make.log&lt;br /&gt;&lt;br /&gt;# 編譯如果出現問題，請追蹤一下 gt_make.log 檔案，尋找錯誤訊息。&lt;br /&gt;&lt;br /&gt;編譯完成，執行：&lt;br /&gt;make install&lt;br /&gt;&lt;br /&gt;安裝完成，執行：&lt;br /&gt;cd /opt/globus_ubuntu&lt;br /&gt;&lt;br /&gt;執行：&lt;br /&gt;more ld.so.conf &gt;&gt; /etc/ld.so.conf&lt;br /&gt;&lt;br /&gt;執行：&lt;br /&gt;ldconfig&lt;br /&gt;&lt;br /&gt;***************************&lt;br /&gt;&lt;br /&gt;六、設置 Grid Security Infrastructure&lt;br /&gt;&lt;br /&gt;# 由於 TKG 已有架設好的 SimpleCA Server ( 192.168.100.1 )，&lt;br /&gt;# 直接使用 TKG 的 globus_simple_ca_502cf2ea_setup-0.19.tar.gz 檔案。&lt;br /&gt;&lt;br /&gt;執行：&lt;br /&gt;cp /opt/globus_ubuntu/globus_simple_ca_502cf2ea_setup-0.19.tar.gz /opt/globus/&lt;br /&gt;&lt;br /&gt;執行：&lt;br /&gt;cd /opt/globus&lt;br /&gt;&lt;br /&gt;如果是 x86_32 環境，執行：&lt;br /&gt;gpt-build globus_simple_ca_502cf2ea_setup-0.19.tar.gz gcc32dbg&lt;br /&gt;&lt;br /&gt;如果是 x86_64 環境，執行：&lt;br /&gt;gpt-build globus_simple_ca_502cf2ea_setup-0.19.tar.gz gcc64dbg&lt;br /&gt;&lt;br /&gt;gpt-build 完成後，執行：&lt;br /&gt;gpt-postinstall&lt;br /&gt;&lt;br /&gt;執行：&lt;br /&gt;/opt/globus/setup/globus_simple_ca_502cf2ea_setup/setup-gsi -default&lt;br /&gt;&lt;br /&gt;***************************&lt;br /&gt;&lt;br /&gt;七、設置 gsiftp 與 gsigatekeeper&lt;br /&gt;&lt;br /&gt;執行：&lt;br /&gt;cd /opt/globus_ubuntu&lt;br /&gt;&lt;br /&gt;執行：&lt;br /&gt;cp xinetd.d_gsiftp /etc/xinetd.d/gsiftp&lt;br /&gt;&lt;br /&gt;執行：&lt;br /&gt;cp xinetd.d_gsigatekeeper /etc/xinetd.d/gsigatekeeper&lt;br /&gt;&lt;br /&gt;執行：&lt;br /&gt;/etc/init.d/xinetd restart&lt;br /&gt;&lt;br /&gt;***************************&lt;br /&gt;&lt;br /&gt;八、主機認證與使用者認證&lt;br /&gt;&lt;br /&gt;TKG 網格主機認證：&lt;br /&gt;&lt;br /&gt;# TKG 網格 SimpleCA Server 為 192.168.100.1，主機名稱是 im1.im.ncue.edu.tw。&lt;br /&gt;# SimpleCA Server 的管理者為 im1.im.ncue.edu.tw 作業系統中的 root 帳號。&lt;br /&gt;&lt;br /&gt;執行：&lt;br /&gt;scp user008@192.168.100.1:/etc/hosts /etc/hosts&lt;br /&gt;&lt;br /&gt;執行：&lt;br /&gt;vim /etc/hosts &lt;br /&gt;# 將本機的 IP 與 hostname 對映寫入並存檔。&lt;br /&gt;# 例如：192.168.100.256 im256.im.ncue.edu.tw im256&lt;br /&gt;&lt;br /&gt;確認主機名稱符合格式，執行：&lt;br /&gt;hostname&lt;br /&gt;&lt;br /&gt;# 以 TKG 網格為例，名稱應該是 im主機號碼.im.ncue.edu.tw 這樣的格式。&lt;br /&gt;# 若主機名稱有出入，請修改 /etc/hostname 並重新開機。&lt;br /&gt;&lt;br /&gt;切換到 root 身份，執行：&lt;br /&gt;cd /etc/grid-security/&lt;br /&gt;&lt;br /&gt;執行：&lt;br /&gt;grid-cert-request -host `hostname`&lt;br /&gt;&lt;br /&gt;以上指令會在 /etc/grid-security 底下產生：&lt;br /&gt;hostcert.pem&lt;br /&gt;hostcert_request.pem&lt;br /&gt;hostkey.pem&lt;br /&gt;&lt;br /&gt;將 hostcert_request.pem 傳送到 im1 (192.168.100.1)，執行：&lt;br /&gt;scp hostcert_request.pem user008@im1:~/temp/&lt;br /&gt;&lt;br /&gt;# 對 hostcert_request.pem 檔進行認證，需要登入到 SimpleCA Server 進行操作。&lt;br /&gt;# 請另外開啟一個 SSH 連線，以 user008 帳號登入 im1 (192.168.100.1)。&lt;br /&gt;&lt;br /&gt;@im1 執行：&lt;br /&gt;sudo su -&lt;br /&gt;&lt;br /&gt;@im1 執行：&lt;br /&gt;cd /home/user008/temp&lt;br /&gt;&lt;br /&gt;@im1 執行：&lt;br /&gt;grid-ca-sign -in hostcert_request.pem -out hostcert.pem&lt;br /&gt;&lt;br /&gt;回到認證中的網格主機，切換到 root 身份，執行：&lt;br /&gt;cd /etc/grid-security/&lt;br /&gt;&lt;br /&gt;從 SimpleCA Server 將認證產生的 hostcert.pem 取回，執行：&lt;br /&gt;scp user008@im1:~/temp/hostcert.pem /etc/grid-security/hostcert.pem&lt;br /&gt;&lt;br /&gt;---------&lt;br /&gt;&lt;br /&gt;TKG 網格使用者認證：&lt;br /&gt;&lt;br /&gt;# TKG 網格中只有一個「網格使用者 user008」，因此直接取用認證過 user008 身份的驗證檔案即可。&lt;br /&gt;&lt;br /&gt;執行：&lt;br /&gt;su - user008&lt;br /&gt;&lt;br /&gt;執行：&lt;br /&gt;cd /home/user008&lt;br /&gt;&lt;br /&gt;執行：&lt;br /&gt;scp -r user008@im1:~/.globus /home/user008/&lt;br /&gt;&lt;br /&gt;執行：&lt;br /&gt;grid-proxy-init&lt;br /&gt;&lt;br /&gt;顯示：&lt;br /&gt;Your identity: /O=ncue/OU=tkgroup/OU=im.ncue.edu.tw/OU=im.ncue.edu.tw/CN=user008&lt;br /&gt;Enter GRID pass phrase for this identity: # 輸入 TKG 專用密碼&lt;br /&gt;&lt;br /&gt;grid-proxy-init 順利初始化，代表認證成功。&lt;br /&gt;&lt;br /&gt;***************************&lt;br /&gt;&lt;br /&gt;九、關於 grid-mapfile&lt;br /&gt;&lt;br /&gt;執行：&lt;br /&gt;sudo su -&lt;br /&gt;&lt;br /&gt;# 為了讓網格中其他的機器也可以透過作業系統的 user008 帳號來運用本機資源&lt;br /&gt;&lt;br /&gt;執行：&lt;br /&gt;cp /opt/globus_ubuntu/grid-mapfile /etc/grid-security/&lt;br /&gt;&lt;br /&gt;***************************&lt;br /&gt;&lt;br /&gt;十、安裝 MPICH&lt;br /&gt;&lt;br /&gt;執行：&lt;br /&gt;cd /opt/globus_ubuntu/&lt;br /&gt;&lt;br /&gt;執行：&lt;br /&gt;tar zxvf mpich.tar.gz&lt;br /&gt;&lt;br /&gt;執行：&lt;br /&gt;mkdir /opt/mpich&lt;br /&gt;&lt;br /&gt;執行：&lt;br /&gt;cd mpich-1.2.7p1/&lt;br /&gt;&lt;br /&gt;x86_32 環境執行：&lt;br /&gt;./configure --prefix=/opt/mpich/ --with-device=globus2:-flavor=gcc32dbg&lt;br /&gt;&lt;br /&gt;x86_64 環境執行：&lt;br /&gt;./configure --prefix=/opt/mpich/ --with-device=globus2:-flavor=gcc64dbg&lt;br /&gt;&lt;br /&gt;執行：&lt;br /&gt;make | tee mpich_make.log&lt;br /&gt;&lt;br /&gt;執行：&lt;br /&gt;make install&lt;br /&gt;&lt;br /&gt;執行：&lt;br /&gt;su - user008&lt;br /&gt;&lt;br /&gt;執行：&lt;br /&gt;cp /opt/mpich/examples/cpi.c .&lt;br /&gt;&lt;br /&gt;執行：&lt;br /&gt;mpicc cpi.c -o cpi&lt;br /&gt;&lt;br /&gt;在同一個目錄底下，執行：&lt;br /&gt;vim machines&lt;br /&gt;&lt;br /&gt;編寫 machines 檔，內容是：&lt;br /&gt;"本機的 hostname" 1&lt;br /&gt;&lt;br /&gt;編輯完成後，執行：&lt;br /&gt;grid-proxy-init&lt;br /&gt;&lt;br /&gt;Grid Proxy 起始化後，執行：&lt;br /&gt;mpirun -np 1 cpi&lt;br /&gt;&lt;br /&gt;順利的話，螢幕會印出 Pi 的值與執行的主機名稱。&lt;br /&gt;&lt;br /&gt;***************************&lt;br /&gt;&lt;br /&gt;附錄：&lt;br /&gt;&lt;br /&gt;pre-requisites.sh 內容：&lt;br /&gt;#!/bin/bash&lt;br /&gt;sudo apt-get upgrade&lt;br /&gt;sudo apt-get update&lt;br /&gt;sudo apt-get install \&lt;br /&gt;openssh-server \&lt;br /&gt;libssl-dev \&lt;br /&gt;zlib-bin \&lt;br /&gt;zlib1g \&lt;br /&gt;zlib1g-dev \&lt;br /&gt;gcc \&lt;br /&gt;g++ \&lt;br /&gt;xinetd \&lt;br /&gt;&lt;br /&gt;echo "*** DO NOT FORGET JAVA SDK &amp; APACHE-ANT :-) ***"&lt;br /&gt;&lt;br /&gt;globus_ubuntu/profile 內容：&lt;br /&gt;export ANT_HOME=/opt/ant&lt;br /&gt;export JAVA_HOME=/opt/java&lt;br /&gt;export MPICH_HOME=/opt/mpich&lt;br /&gt;export GLOBUS_LOCATION=/opt/globus&lt;br /&gt;export PATH=$GLOBUS_LOCATION/bin:$GLOBUS_LOCATION/sbin:$MPICH_HOME/bin:$ANT_HOME/bin:$JAVA_HOME/bin:$PATH&lt;br /&gt;source $GLOBUS_LOCATION/etc/globus-user-env.sh&lt;br /&gt;&lt;br /&gt;xinetd.d_gsiftp 內容：&lt;br /&gt;service gsiftp&lt;br /&gt;{&lt;br /&gt;disable = no&lt;br /&gt;instances = 100&lt;br /&gt;socket_type = stream&lt;br /&gt;wait = no&lt;br /&gt;user = root&lt;br /&gt;env += GLOBUS_LOCATION=/opt/globus&lt;br /&gt;env += LD_LIBRARY_PATH=/opt/globus/lib&lt;br /&gt;server = /opt/globus/sbin/globus-gridftp-server&lt;br /&gt;server_args = -i&lt;br /&gt;log_on_success += DURATION&lt;br /&gt;nice = 10&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;xinetd.d_gsigatekeeper 內容：&lt;br /&gt;service gsigatekeeper&lt;br /&gt;{&lt;br /&gt;disable = no&lt;br /&gt;socket_type = stream&lt;br /&gt;protocol = tcp&lt;br /&gt;wait = no&lt;br /&gt;user = root&lt;br /&gt;env = LD_LIBRARY_PATH=/opt/globus/lib&lt;br /&gt;server = /opt/globus/sbin/globus-gatekeeper&lt;br /&gt;server_args = -conf /opt/globus/etc/globus-gatekeeper.conf&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;***************************&lt;br /&gt;&lt;br /&gt;Reference：&lt;br /&gt;01. http://tkg.im.ncue.edu.tw/&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18689056-3491138189089065393?l=zx-1986.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://zx-1986.blogspot.com/feeds/3491138189089065393/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://zx-1986.blogspot.com/2010/08/setup-tkg-grid-machine.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18689056/posts/default/3491138189089065393'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18689056/posts/default/3491138189089065393'/><link rel='alternate' type='text/html' href='http://zx-1986.blogspot.com/2010/08/setup-tkg-grid-machine.html' title='安裝 TKG 網格機器'/><author><name>張旭</name><uri>https://profiles.google.com/105134833883146274095</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-pO0m_C6_zQw/AAAAAAAAAAI/AAAAAAAAD0c/h7KNyAUN14w/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18689056.post-6419378879124705430</id><published>2010-08-13T15:06:00.003+08:00</published><updated>2010-08-16T17:40:31.715+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='mpich'/><category scheme='http://www.blogger.com/atom/ns#' term='grid'/><category scheme='http://www.blogger.com/atom/ns#' term='ubuntu'/><category scheme='http://www.blogger.com/atom/ns#' term='globus'/><title type='text'>安裝 Globus 與 MPICH</title><content type='html'>＊此篇安裝記錄的各項設定主要是針對彰化師大資管 TKG ( TK group ) 研究室的作業環境。&lt;br /&gt;＊如果您熟悉 Linux 系統，您可以自行修改安裝路徑、使用者帳號等參數以符合您的需求。&lt;br /&gt;&lt;br /&gt;主題：在 Ubuntu 9.10 環境 ( x86_32 或 x86_64 ) 安裝 Globus Toolkit 4 ( 4.0.* 或 4.2.* )。&lt;br /&gt;&lt;br /&gt;關於 Globus Toolkit 網格 ( Grid ) 環境：&lt;br /&gt;在網格環境中，使用者通常會有一個網格身份，使用者透過該網格身份來使用網格的資源。&lt;br /&gt;某個有限範圍的網格，通常會稱為一個 Virtual Organization ( VO )，網格身份就是指使用者在 VO 中的身份。&lt;br /&gt;# 關於 VO 可以參考 [Reference 01]。&lt;br /&gt;VO 可以用 domain name 來命名，例如彰師資管可以使用 im.ncue.edu.tw。&lt;br /&gt;而「hostname.im.ncue.edu.tw」可以用來識別 im.ncue.edu.tw 這個 VO 內的某台主機，hostname 即主機名稱。&lt;br /&gt;主機作業系統中的使用者身份和 VO 中的網格身份是不同的。&lt;br /&gt;主機作業系統中的使用者身份和 VO 中的網格身份是一個對映 ( mapping ) 關係。&lt;br /&gt;&lt;br /&gt;例如：&lt;br /&gt;PC-A 作業系統中有一個使用者帳號 userA。&lt;br /&gt;PC-B 作業系統中有一個使用者帳號 userB。&lt;br /&gt;PC-A 和 PC-B 屬於同一個網格 ( 同一個 VO )。&lt;br /&gt;網格 ( VO ) 中的一個網格身份 grid_user 對映到 PC-A 的 userA 與 PC-B 的 userB，&lt;br /&gt;只要有 grid_user 這個網格身份的使用權，就可以使用 grid_user 身份對映到 userA 及 userB，&lt;br /&gt;並透過 userA 和 userB 這兩個身份分別使用 PC-A 與 PC-B 的資源。&lt;br /&gt;&lt;br /&gt;更詳細的 Globus Toolkit 說明，可以參考：......&lt;br /&gt;&lt;br /&gt;***************************&lt;br /&gt;&lt;br /&gt;零、說明&lt;br /&gt;&lt;br /&gt;TKG 網格的主機，作業系統的預設使用者帳號是：user008&lt;br /&gt;user008 的密碼為 TKG 的專用密碼，請詢問老師或學長姐。&lt;br /&gt;&lt;br /&gt;安裝軟體時的身份皆是「作業系統的 root」，執行某些動作時，如需切換身份，會特別說明。&lt;br /&gt;安裝完成的 Globus Toolkit 網格管理者是「作業系統的 root」。&lt;br /&gt;安裝完成的 Globus Toolkit 對映到的作業系統帳號是「作業系統的 user008」。&lt;br /&gt;安裝完成的 Globus Toolkit 網格使用者是「VO 的 user008」。&lt;br /&gt;&lt;br /&gt;# 「網格使用者的帳號」跟「對映到的作業系統帳號」是否使用相同的名稱，是見仁見智的。&lt;br /&gt;&lt;br /&gt;***************************&lt;br /&gt;&lt;br /&gt;一、網路設定&lt;br /&gt;&lt;br /&gt;TKG 網格使用的是 192.168.100.0/24 這個 Private Network，請先將您的機器加入這個 LAN。&lt;br /&gt;&lt;br /&gt;# 請先熟悉一下 vim 的模式切換、編輯指令、存檔指令（例如：Esc，i，:w，:q）。&lt;br /&gt;# 請先使用「sudo su -」指令切換成作業系統的 root 身份。&lt;br /&gt;&lt;br /&gt;例如，您將使用的 IP 是：192.168.100.256&lt;br /&gt;# be careful with this IP :-)&lt;br /&gt;&lt;br /&gt;在 Ubuntu 底下，請執行：&lt;br /&gt;vim /etc/network/interface&lt;br /&gt;&lt;br /&gt;將 eth0 的內容改為如下：&lt;br /&gt;auto eth0&lt;br /&gt;iface eth0 inet static&lt;br /&gt;address 192.168.100.256&lt;br /&gt;netmask 255.255.255.0&lt;br /&gt;network 192.168.100.0&lt;br /&gt;broadcast 192.168.100.255&lt;br /&gt;gateway 192.168.100.1&lt;br /&gt;dns-nameservers ( 請依據情況設定，通常是一個 Public IP )&lt;br /&gt;&lt;br /&gt;然後執行：&lt;br /&gt;/etc/init.d/networking restart&lt;br /&gt;&lt;br /&gt;# 如果您是使用 SSH 遠端連線，連線會中斷。&lt;br /&gt;# 請將你的 SSH Client 也加入 192.168.100.0/24 這個 LAN，再重新連線到剛剛設定的電腦。&lt;br /&gt;&lt;br /&gt;接下來，需要修改主機的名稱，使用 im*.im.ncue.edu.tw 這個格式。&lt;br /&gt;例如，您使用的 IP 是 192.168.100.256，主機名稱會是：im256.im.ncue.edu.tw&lt;br /&gt;&lt;br /&gt;請執行：&lt;br /&gt;vim /etc/hostname&lt;br /&gt;&lt;br /&gt;將內容修改為：&lt;br /&gt;im256.im.ncue.edu.tw&lt;br /&gt;&lt;br /&gt;存檔離開後，請執行：&lt;br /&gt;reboot&lt;br /&gt;&lt;br /&gt;重開機之後，使用以下指令檢查一下主機名稱：&lt;br /&gt;/bin/hostname&lt;br /&gt;&lt;br /&gt;使用以下指令檢查一下網路設定：&lt;br /&gt;ifconfig&lt;br /&gt;&lt;br /&gt;然後執行：&lt;br /&gt;ping 192.168.100.1&lt;br /&gt;ping ( 您的 DNS IP )&lt;br /&gt;&lt;br /&gt;兩個 ping 測試都成功，請繼續下一步驟。&lt;br /&gt;&lt;br /&gt;***************************&lt;br /&gt;&lt;br /&gt;二、下載相關檔案&lt;br /&gt;&lt;br /&gt;# 請先使用「sudo su -」指令切換成作業系統的 root 身份。&lt;br /&gt;&lt;br /&gt;執行：&lt;br /&gt;cd /opt&lt;br /&gt;&lt;br /&gt;執行：&lt;br /&gt;scp -r user008@192.168.100.1:/opt/globus_ubuntu /opt&lt;br /&gt;&lt;br /&gt;執行：&lt;br /&gt;cd /opt/globus_ubuntu&lt;br /&gt;&lt;br /&gt;執行：&lt;br /&gt;ls -lh&lt;br /&gt;&lt;br /&gt;應該有這些檔案，總共大約 427 MB：&lt;br /&gt;apache-ant-1.7.1-bin.tar.gz&lt;br /&gt;globus_simple_ca_502cf2ea_setup-0.19.tar.gz&lt;br /&gt;grid-mapfile&lt;br /&gt;gt4.0.8-all-source-installer.tar.gz&lt;br /&gt;gt4.2.1-all-source-installer.tar.gz&lt;br /&gt;jdk-6u17-linux-i586.bin&lt;br /&gt;jdk-6u17-linux-x64.bin&lt;br /&gt;junit-4.3.1.jar&lt;br /&gt;ld.so.conf&lt;br /&gt;mpich.tar.gz&lt;br /&gt;pre-requisites.sh&lt;br /&gt;profile&lt;br /&gt;xinetd.d_gsiftp&lt;br /&gt;xinetd.d_gsigatekeeper&lt;br /&gt;&lt;br /&gt;請繼續下一步驟。&lt;br /&gt;&lt;br /&gt;***************************&lt;br /&gt;&lt;br /&gt;三、安裝必備軟體 ( prerequisite softwares )&lt;br /&gt;&lt;br /&gt;# 注意：這是個人測試 Ubuntu Server 環境下的必備軟體清單。&lt;br /&gt;# 注意：如果您的環境不一樣，請檢查 Globus Toolkit 官方 prerequisite softwares 清單，補足缺少的軟體。&lt;br /&gt;# 請先使用「sudo su -」指令切換成作業系統的 root 身份。&lt;br /&gt;&lt;br /&gt;執行：&lt;br /&gt;cd /opt/globus_ubuntu&lt;br /&gt;&lt;br /&gt;執行：&lt;br /&gt;./pre-requisites.sh&lt;br /&gt;&lt;br /&gt;pre-requisites.sh 的內容是：&lt;br /&gt;#!/bin/bash&lt;br /&gt;sudo apt-get upgrade&lt;br /&gt;sudo apt-get update&lt;br /&gt;sudo apt-get install \&lt;br /&gt;openssh-server \&lt;br /&gt;libssl-dev \&lt;br /&gt;zlib-bin \&lt;br /&gt;zlib1g \&lt;br /&gt;zlib1g-dev \&lt;br /&gt;gcc \&lt;br /&gt;g++ \&lt;br /&gt;xinetd \&lt;br /&gt;&lt;br /&gt;echo "*** DO NOT FORGET JAVA SDK &amp; APACHE-ANT :-) ***"&lt;br /&gt;&lt;br /&gt;系統進行安裝確認時，請輸入：Y&lt;br /&gt;&lt;br /&gt;請繼續下一步驟。&lt;br /&gt;&lt;br /&gt;***************************&lt;br /&gt;&lt;br /&gt;四、獨立安裝必備軟體：Java 與 Apache Ant&lt;br /&gt;&lt;br /&gt;# 請先使用「sudo su -」指令切換成作業系統的 root 身份。&lt;br /&gt;&lt;br /&gt;首先，進行 Java 的安裝。&lt;br /&gt;&lt;br /&gt;執行：&lt;br /&gt;cd /opt/globus_ubuntu&lt;br /&gt;&lt;br /&gt;如果是 x86_32 環境請執行：&lt;br /&gt;./jdk-6u17-linux-i586.bin&lt;br /&gt;&lt;br /&gt;如果是 x86_64 環境請執行：&lt;br /&gt;./jdk-6u17-linux-x64.bin&lt;br /&gt;&lt;br /&gt;會出現 Java 的 license terms，請壓一下 q，然後輸入 yes，按 enter。&lt;br /&gt;Java 自解壓縮安裝，完成後請壓幾下 enter 結束安裝。&lt;br /&gt;&lt;br /&gt;執行：&lt;br /&gt;mv jdk1.6.0_17 ../java&lt;br /&gt;&lt;br /&gt;接下來，進行 Apache Ant 的安裝。&lt;br /&gt;&lt;br /&gt;執行：&lt;br /&gt;cd /opt/globus_ubuntu&lt;br /&gt;&lt;br /&gt;執行：&lt;br /&gt;tar zxvf apache-ant-1.7.1-bin.tar.gz&lt;br /&gt;&lt;br /&gt;執行：&lt;br /&gt;mv apache-ant-1.7.1 ../ant&lt;br /&gt;&lt;br /&gt;執行：&lt;br /&gt;cp junit-4.3.1.jar ../ant/lib/&lt;br /&gt;&lt;br /&gt;接下來匯入環境變數，以測試安裝。&lt;br /&gt;&lt;br /&gt;執行：&lt;br /&gt;cd /opt/globus_ubuntu&lt;br /&gt;&lt;br /&gt;執行：&lt;br /&gt;more profile &gt;&gt; /etc/profile&lt;br /&gt;&lt;br /&gt;globus_ubuntu/profile 的內容是：&lt;br /&gt;export ANT_HOME=/opt/ant&lt;br /&gt;export JAVA_HOME=/opt/java&lt;br /&gt;export MPICH_HOME=/opt/mpich&lt;br /&gt;export GLOBUS_LOCATION=/opt/globus&lt;br /&gt;export PATH=$GLOBUS_LOCATION/bin:$GLOBUS_LOCATION/sbin:$MPICH_HOME/bin:$ANT_HOME/bin:$JAVA_HOME/bin:$PATH&lt;br /&gt;source $GLOBUS_LOCATION/etc/globus-user-env.sh&lt;br /&gt;&lt;br /&gt;執行：&lt;br /&gt;source /etc/profile&lt;br /&gt;&lt;br /&gt;# 暫時忽略 -su: /opt/globus/etc/globus-user-env.sh: No such file or directory 這行錯誤。&lt;br /&gt;&lt;br /&gt;測試 Java，執行：&lt;br /&gt;java -version&lt;br /&gt;&lt;br /&gt;測試 Apache Ant，執行：&lt;br /&gt;ant -version&lt;br /&gt;&lt;br /&gt;測試成功，請繼續下一步驟。&lt;br /&gt;&lt;br /&gt;***************************&lt;br /&gt;&lt;br /&gt;五、安裝 Globus Toolkit&lt;br /&gt;&lt;br /&gt;研究室舊有的網格使用的是 Globus Toolkit 4.0.* 版本的。&lt;br /&gt;Globus Toolkit 4.0.* 與 Globus Toolkit 4.2.* 是不相通的。&lt;br /&gt;如果您打算搭建一個全新的網格環境，不考慮與舊環境的銜接問題，請使用 Globus Toolkit 4.2.* 版本。&lt;br /&gt;因研究室需求，在此以安裝舊版 Globus Toolkit 4.0.* 為例。&lt;br /&gt;&lt;br /&gt;# 請先使用「sudo su -」指令切換成作業系統的 root 身份。&lt;br /&gt;&lt;br /&gt;執行：&lt;br /&gt;cd /opt/globus_ubuntu&lt;br /&gt;&lt;br /&gt;執行：&lt;br /&gt;tar zxvf gt4.0.8-all-source-installer.tar.gz&lt;br /&gt;&lt;br /&gt;執行：&lt;br /&gt;mkdir /opt/globus&lt;br /&gt;&lt;br /&gt;執行：&lt;br /&gt;cd /opt/globus_ubuntu/gt4.0.8-all-source-installer&lt;br /&gt;&lt;br /&gt;執行：&lt;br /&gt;./configure --prefix=/opt/globus&lt;br /&gt;&lt;br /&gt;執行：&lt;br /&gt;make | tee gt_make.log&lt;br /&gt;&lt;br /&gt;編譯時間根據機器的性能不一，這時可以起來走跳一下，看看窗外綠葉。&lt;br /&gt;編譯如果出現問題，請追蹤一下 gt_make.log 檔案，尋找錯誤訊息。&lt;br /&gt;&lt;br /&gt;編譯如果順利完成，請執行：&lt;br /&gt;make install&lt;br /&gt;&lt;br /&gt;如果順利安裝完成，執行：&lt;br /&gt;cd /opt/globus_ubuntu&lt;br /&gt;&lt;br /&gt;執行：&lt;br /&gt;more ld.so.conf &gt;&gt; /etc/ld.so.conf&lt;br /&gt;&lt;br /&gt;執行：&lt;br /&gt;ldconfig&lt;br /&gt;&lt;br /&gt;***************************&lt;br /&gt;&lt;br /&gt;六、設置 Grid Security Infrastructure ( with/without SimpleCA Server )&lt;br /&gt;&lt;br /&gt;前面的步驟執行完，Globus Toolkit 其實已經安裝完，&lt;br /&gt;但仍需進行 GSI ( Grid Security Infrastructure ) 的設置才可以使用。&lt;br /&gt;&lt;br /&gt;GSI 的設置需要搭配一套 CA 認證系統，可以使用 Globus Toolkit 附帶 SimpleCA 模組。&lt;br /&gt;安裝 SimpleCA Server 模組的時候，會產生一個 globus_simple_ca_HASH_setup.tar.gz 檔案。&lt;br /&gt;Globus Toolkit 會使用該檔案來進行 gpt-build，完成 GSI 設置。&lt;br /&gt;# HASH 是一串 16 進位亂數。&lt;br /&gt;# 請先使用「sudo su -」指令切換成作業系統的 root 身份。&lt;br /&gt;&lt;br /&gt;---------&lt;br /&gt;&lt;br /&gt;with SimpleCA Server already：&lt;br /&gt;&lt;br /&gt;由於 TKG 已有架設好的 SimpleCA Server ( 192.168.100.1 )，&lt;br /&gt;可以直接使用 TKG 的 globus_simple_ca_502cf2ea_setup-0.19.tar.gz 檔案。&lt;br /&gt;&lt;br /&gt;執行：&lt;br /&gt;cp /opt/globus_ubuntu/globus_simple_ca_502cf2ea_setup-0.19.tar.gz /opt/globus/&lt;br /&gt;&lt;br /&gt;執行：&lt;br /&gt;cd /opt/globus&lt;br /&gt;&lt;br /&gt;如果是 x86_32 環境請執行：&lt;br /&gt;gpt-build globus_simple_ca_502cf2ea_setup-0.19.tar.gz gcc32dbg&lt;br /&gt;&lt;br /&gt;如果是 x86_64 環境請執行：&lt;br /&gt;gpt-build globus_simple_ca_502cf2ea_setup-0.19.tar.gz gcc64dbg&lt;br /&gt;&lt;br /&gt;gpt-build 順利執行完成後，請執行：&lt;br /&gt;gpt-postinstall&lt;br /&gt;&lt;br /&gt;以上指令會在 /opt/globus/setup 資料夾底下產生 globus_simple_ca_502cf2ea_setup 資料夾，&lt;br /&gt;執行 globus_simple_ca_502cf2ea_setup 資料夾底下的 setup-gsi 檔案，進行 GSI 設置。&lt;br /&gt;&lt;br /&gt;執行：&lt;br /&gt;/opt/globus/setup/globus_simple_ca_502cf2ea_setup/setup-gsi -default&lt;br /&gt;&lt;br /&gt;以上指令會在 /etc 底下產生一個 grid-security 資料夾，涉及後續的主機認證和網格使用者對映。&lt;br /&gt;&lt;br /&gt;---------&lt;br /&gt;&lt;br /&gt;without SimpleCA Server：&lt;br /&gt;&lt;br /&gt;如果是全新安裝的網格，尚無 CA Server，可以使用 Globus Toolkit 附帶的 SimpleCA 模組建立一個。&lt;br /&gt;&lt;br /&gt;執行：&lt;br /&gt;$GLOBUS_LOCATION/setup/globus/setup-simple-ca&lt;br /&gt;&lt;br /&gt;以上指令執行時，會進行新建網格的設定，需要自訂組織名稱，網格管理密碼等等。&lt;br /&gt;# SimpleCA 安裝說明請先暫時參考 [Reference 04]。&lt;br /&gt;&lt;br /&gt;執行完成會在 $GLOBUS_LOCATION/setup/ 底下產生一個 globus_simple_ca_HASH_setup 資料夾。&lt;br /&gt;# HASH 是一串 16 進位亂數。&lt;br /&gt;&lt;br /&gt;執行：&lt;br /&gt;$GLOBUS_LOCATION/setup/globus_simple_ca_HASH_setup/setup-gsi -default&lt;br /&gt;# HASH 是一串 16 進位亂數。&lt;br /&gt;&lt;br /&gt;以上指令會在 root 的家目錄產生一個 .globus 資料夾，裡面有一個名為 simpleCA 的資料夾。&lt;br /&gt;simpleCA 資料夾即為新安裝 SimpleCA Server 的內容。&lt;br /&gt;simpleCA 資料夾內會有一個 globus_simple_ca_HASH_setup.tar.gz 檔案，取用該檔案進行 gpt-build 即可。&lt;br /&gt;&lt;br /&gt;執行：&lt;br /&gt;cp /root/.globus/simpleCA/globus_simple_ca_HASH_setup.tar.gz /opt/globus/&lt;br /&gt;# HASH 是一串 16 進位亂數。&lt;br /&gt;&lt;br /&gt;執行：&lt;br /&gt;cd /opt/globus&lt;br /&gt;&lt;br /&gt;如果是 x86_32 環境請執行：&lt;br /&gt;gpt-build globus_simple_ca_HASH_setup.tar.gz gcc32dbg&lt;br /&gt;# HASH 是一串 16 進位亂數。&lt;br /&gt;&lt;br /&gt;如果是 x86_64 環境請執行：&lt;br /&gt;gpt-build globus_simple_ca_HASH_setup.tar.gz gcc64dbg&lt;br /&gt;# HASH 是一串 16 進位亂數。&lt;br /&gt;&lt;br /&gt;gpt-build 順利執行完成後，請執行：&lt;br /&gt;gpt-postinstall&lt;br /&gt;&lt;br /&gt;以上指令會在 /opt/globus/setup 資料夾底下產生 globus_simple_ca_HASH_setup 資料夾，&lt;br /&gt;執行 globus_simple_ca_HASH_setup 資料夾底下的 setup-gsi 檔案，進行 GSI 設置。&lt;br /&gt;# HASH 是一串 16 進位亂數。&lt;br /&gt;&lt;br /&gt;執行：&lt;br /&gt;/opt/globus/setup/globus_simple_ca_HASH_setup/setup-gsi -default&lt;br /&gt;&lt;br /&gt;以上指令會在 /etc 底下產生一個 grid-security 資料夾，涉及後續的主機認證和網格使用者對映。&lt;br /&gt;&lt;br /&gt;***************************&lt;br /&gt;&lt;br /&gt;七、設置 gsiftp 與 gsigatekeeper&lt;br /&gt;&lt;br /&gt;# 請先使用「sudo su -」指令切換成作業系統的 root 身份。&lt;br /&gt;&lt;br /&gt;執行：&lt;br /&gt;cd /opt/globus_ubuntu&lt;br /&gt;&lt;br /&gt;執行：&lt;br /&gt;cp xinetd.d_gsiftp /etc/xinetd.d/gsiftp&lt;br /&gt;&lt;br /&gt;執行：&lt;br /&gt;cp xinetd.d_gsigatekeeper /etc/xinetd.d/gsigatekeeper&lt;br /&gt;&lt;br /&gt;執行：&lt;br /&gt;/etc/init.d/xinetd restart&lt;br /&gt;&lt;br /&gt;xinetd.d_gsiftp 內容：&lt;br /&gt;service gsiftp&lt;br /&gt;{&lt;br /&gt;disable = no&lt;br /&gt;instances = 100&lt;br /&gt;socket_type = stream&lt;br /&gt;wait = no&lt;br /&gt;user = root&lt;br /&gt;env += GLOBUS_LOCATION=/opt/globus&lt;br /&gt;env += LD_LIBRARY_PATH=/opt/globus/lib&lt;br /&gt;server = /opt/globus/sbin/globus-gridftp-server&lt;br /&gt;server_args = -i&lt;br /&gt;log_on_success += DURATION&lt;br /&gt;nice = 10&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;xinetd.d_gsigatekeeper 內容：&lt;br /&gt;service gsigatekeeper&lt;br /&gt;{&lt;br /&gt;disable = no&lt;br /&gt;socket_type = stream&lt;br /&gt;protocol = tcp&lt;br /&gt;wait = no&lt;br /&gt;user = root&lt;br /&gt;env = LD_LIBRARY_PATH=/opt/globus/lib&lt;br /&gt;server = /opt/globus/sbin/globus-gatekeeper&lt;br /&gt;server_args = -conf /opt/globus/etc/globus-gatekeeper.conf&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;***************************&lt;br /&gt;&lt;br /&gt;八、主機認證與使用者認證&lt;br /&gt;&lt;br /&gt;主機認證：&lt;br /&gt;&lt;br /&gt;主機認證很好理解，目的就是確認網格中的主機是合法的，不是外面阿貓阿狗假冒的。&lt;br /&gt;首先必須先確認網格中的 SimpleCA Server 是哪一台機器，接下來的認證動作需要跟它溝通。&lt;br /&gt;&lt;br /&gt;以 TKG 網格為例，SimpleCA Server 為 192.168.100.1，主機名稱是 im1.im.ncue.edu.tw。&lt;br /&gt;SimpleCA Server 的管理者為 im1.im.ncue.edu.tw 中作業系統的 root 帳號，密碼為 TKG 專用密碼。&lt;br /&gt;&lt;br /&gt;# 請先使用「sudo su -」指令切換成作業系統的 root 身份。&lt;br /&gt;&lt;br /&gt;先與環境中主機的 hosts 檔進行同步，執行：&lt;br /&gt;scp user008@192.168.100.1:/etc/hosts /etc/hosts&lt;br /&gt;# user008@192.168.100.1 的密碼是 TKG 的專用密碼。&lt;br /&gt;&lt;br /&gt;[注意！] 請將本機 IP 與 hostname 對映也編輯進入 /etc/hosts 檔案中。&lt;br /&gt;[注意！] 執行：vim /etc/hosts 將本機的 IP 與 hostname 寫入並存檔。&lt;br /&gt;&lt;br /&gt;試著 ping 一下：&lt;br /&gt;ping im1&lt;br /&gt;&lt;br /&gt;若 ping 成功，請繼續後續步驟。&lt;br /&gt;&lt;br /&gt;執行：&lt;br /&gt;cd /etc/grid-security/&lt;br /&gt;&lt;br /&gt;再次確認一下主機名稱符合格式，執行：&lt;br /&gt;hostname&lt;br /&gt;# 以 TKG 網格為例，名稱應該是 im*.im.ncue.edu.tw 這樣的格式，* 代表數字。&lt;br /&gt;# 若主機名稱有出入，請修改 /etc/hostname 並重新開機。&lt;br /&gt;&lt;br /&gt;接下來要產生主機認證檔，執行：&lt;br /&gt;grid-cert-request -host `hostname`&lt;br /&gt;&lt;br /&gt;以上指令會在 /etc/grid-security 底下產生：&lt;br /&gt;hostcert.pem&lt;br /&gt;hostcert_request.pem&lt;br /&gt;hostkey.pem&lt;br /&gt;&lt;br /&gt;其中 hostcert.pem 目前暫時為空，大小是 0K。&lt;br /&gt;要傳送 hostcert_request.pem 到 SimpleCA Server 進行認證，才會產生一個可用的 hostcert.pem。&lt;br /&gt;&lt;br /&gt;接下來將 hostcert_request.pem 傳送到 im1 (192.168.100.1)，執行：&lt;br /&gt;scp hostcert_request.pem user008@im1:~/temp/&lt;br /&gt;&lt;br /&gt;接著要對 hostcert_request.pem 檔進行認證，需要登入到 SimpleCA Server 進行操作。&lt;br /&gt;請另外開啟一個 SSH 連線，以 user008 這個帳號登入 im1 (192.168.100.1)。&lt;br /&gt;&lt;br /&gt;執行：&lt;br /&gt;ssh user008@im1&lt;br /&gt;&lt;br /&gt;@im1 執行：&lt;br /&gt;sudo su -&lt;br /&gt;&lt;br /&gt;@im1 執行：&lt;br /&gt;cd /home/user008/temp&lt;br /&gt;&lt;br /&gt;@im1 執行：&lt;br /&gt;grid-ca-sign -in hostcert_request.pem -out hostcert.pem&lt;br /&gt;&lt;br /&gt;以上指令會要求 SimpleCA Server 的管理密碼，密碼為 TKG 專用密碼。&lt;br /&gt;完成後就可以結束對 im1 的連線了。&lt;br /&gt;&lt;br /&gt;回到認證中的網格主機，切換到 root 身份，然後執行：&lt;br /&gt;cd /etc/grid-security/&lt;br /&gt;&lt;br /&gt;從 SimpleCA Server 將認證產生的 hostcert.pem 取回，執行：&lt;br /&gt;scp user008@im1:~/temp/hostcert.pem /etc/grid-security/hostcert.pem&lt;br /&gt;&lt;br /&gt;執行：&lt;br /&gt;ls -lh&lt;br /&gt;&lt;br /&gt;檢查 hostcert.pem 大小是否仍為 0K。&lt;br /&gt;&lt;br /&gt;---------&lt;br /&gt;&lt;br /&gt;TKG 網格使用者認證：&lt;br /&gt;&lt;br /&gt;TKG 網格中只有一個 VO 使用者 user008，因此直接取用認證過 user008 身份的驗證檔案即可。&lt;br /&gt;# 上一行中的 user008 指的是「網格使用者 user008」，不是「作業系統使用者 user008」。&lt;br /&gt;&lt;br /&gt;[注意！] 首先，切換身份成「作業系統使用者 user008」：&lt;br /&gt;su - user008&lt;br /&gt;&lt;br /&gt;執行：&lt;br /&gt;cd /home/user008&lt;br /&gt;&lt;br /&gt;直接取用認證好的網格使用者檔案，執行：&lt;br /&gt;scp -r user008@im1:~/.globus /home/user008/&lt;br /&gt;&lt;br /&gt;執行：&lt;br /&gt;grid-proxy-init&lt;br /&gt;&lt;br /&gt;顯示：&lt;br /&gt;Your identity: /O=ncue/OU=tkgroup/OU=im.ncue.edu.tw/OU=im.ncue.edu.tw/CN=user008&lt;br /&gt;Enter GRID pass phrase for this identity: # 輸入 TKG 專用密碼&lt;br /&gt;&lt;br /&gt;grid-proxy-init 順利初始化，代表認證成功。&lt;br /&gt;&lt;br /&gt;---------&lt;br /&gt;&lt;br /&gt;新網格使用者認證：&lt;br /&gt;&lt;br /&gt;若要用「作業系統使用者 user008」認證建立一個名稱非 user008 的新網格使用者，&lt;br /&gt;[注意！]請先切換身份成「作業系統使用者 user008」：&lt;br /&gt;su - user008&lt;br /&gt;&lt;br /&gt;執行：&lt;br /&gt;cd ~&lt;br /&gt;&lt;br /&gt;執行：&lt;br /&gt;grid-cert-request&lt;br /&gt;&lt;br /&gt;顯示：&lt;br /&gt;Enter your name, e.g., John Smith: # 請輸入新網格使用者名稱&lt;br /&gt;Enter PEM pass phrase: # 請輸入新網格使用者的密碼&lt;br /&gt;Verifying - Enter PEM pass phrase: # 請輸入新網格使用者的密碼&lt;br /&gt;&lt;br /&gt;以上執行完畢會在 user008 家目錄底下產生一個 .globus 資料夾，裡面有：&lt;br /&gt;usercert.pem&lt;br /&gt;usercert_request.pem&lt;br /&gt;userkey.pem&lt;br /&gt;&lt;br /&gt;其中 usercert.pem 目前暫時為空，大小是 0K。&lt;br /&gt;要傳送 usercert_request.pem 到 SimpleCA Server 進行認證，才會產生一個可用的 usercert.pem。&lt;br /&gt;&lt;br /&gt;接下來將 usercert_request.pem 傳送到 im1 (192.168.100.1)，執行：&lt;br /&gt;scp ~/.globus/usercert_request.pem user008@im1:~/temp/&lt;br /&gt;&lt;br /&gt;接著要對 usercert_request.pem 檔進行認證，需要登入到 SimpleCA Server 進行操作。&lt;br /&gt;請另外開啟一個 SSH 連線，以 user008 這個帳號登入 im1 (192.168.100.1)。&lt;br /&gt;&lt;br /&gt;執行：&lt;br /&gt;ssh user008@im1&lt;br /&gt;&lt;br /&gt;@im1 執行：&lt;br /&gt;sudo su -&lt;br /&gt;&lt;br /&gt;@im1 執行：&lt;br /&gt;cd /home/user008/temp&lt;br /&gt;&lt;br /&gt;@im1 執行：&lt;br /&gt;grid-ca-sign -in usercert_request.pem -out usercert.pem&lt;br /&gt;&lt;br /&gt;以上指令會要求 SimpleCA Server 的管理密碼，密碼為 TKG 專用密碼。&lt;br /&gt;完成後就可以結束對 im1 的連線了。&lt;br /&gt;&lt;br /&gt;回到進行身份認證的主機，切換到正在認證網格身份的「作業系統使用者帳號」：&lt;br /&gt;su - user008&lt;br /&gt;&lt;br /&gt;執行：&lt;br /&gt;cd ~&lt;br /&gt;&lt;br /&gt;從 SimpleCA Server 將認證產生的 usercert.pem 取回，執行：&lt;br /&gt;scp user008@im1:~/temp/usertcert.pem ~/.globus/usercert.pem&lt;br /&gt;&lt;br /&gt;執行：&lt;br /&gt;ls -lh .globus&lt;br /&gt;&lt;br /&gt;檢查 usercert.pem 大小是否仍為 0K。&lt;br /&gt;&lt;br /&gt;執行：&lt;br /&gt;grid-proxy-init&lt;br /&gt;&lt;br /&gt;grid-proxy-init 順利初始化，代表認證成功。&lt;br /&gt;&lt;br /&gt;***************************&lt;br /&gt;&lt;br /&gt;九、關於 grid-mapfile&lt;br /&gt;&lt;br /&gt;grid-mapfile 是記錄「網格使用者」和「作業系統使用者」的映對檔。&lt;br /&gt;&lt;br /&gt;以 TKG 網格為例，grid-mapfile 的內容類似於：&lt;br /&gt;"/O=ncue/OU=tkgroup/OU=im.ncue.edu.tw/OU=im.ncue.edu.tw/CN=user008" user008&lt;br /&gt;&lt;br /&gt;「/O=ncue/OU=tkgroup/OU=im.ncue.edu.tw/OU=im.ncue.edu.tw」代表 im.ncue.edu.tw 這個虛擬組織（VO）。&lt;br /&gt;「/CN=user008」代表虛擬組織（VO）內的 user008 這位使用者。&lt;br /&gt;「"虛擬組織（VO）/CN=使用者"」後，空一格，接著的是作業系統中 user008 這個使用者帳號。&lt;br /&gt;&lt;br /&gt;整行的意思是：&lt;br /&gt;虛擬組織（VO）內的 user008 這位使用者，可以透過作業系統中的 user008 帳號運用系統資源。&lt;br /&gt;&lt;br /&gt;如此就很好理解了，相當於網格中的某個使用者要來運用這台主機資源時，該用哪個相對的帳號來登入。&lt;br /&gt;&lt;br /&gt;# 請先使用「sudo su -」指令切換成作業系統的 root 身份。&lt;br /&gt;&lt;br /&gt;為了讓網格中其他的機器也可以來運用本機資源，執行：&lt;br /&gt;cp /opt/globus_ubuntu/grid-mapfile /etc/grid-security/&lt;br /&gt;&lt;br /&gt;***************************&lt;br /&gt;&lt;br /&gt;十、安裝 MPICH&lt;br /&gt;&lt;br /&gt;# 請先使用「sudo su -」指令切換成作業系統的 root 身份。&lt;br /&gt;&lt;br /&gt;執行：&lt;br /&gt;cd /opt/globus_ubuntu/&lt;br /&gt;&lt;br /&gt;執行：&lt;br /&gt;tar zxvf mpich.tar.gz&lt;br /&gt;&lt;br /&gt;執行：&lt;br /&gt;mkdir /opt/mpich&lt;br /&gt;&lt;br /&gt;執行：&lt;br /&gt;cd mpich-1.2.7p1/&lt;br /&gt;&lt;br /&gt;x86_32 環境執行：&lt;br /&gt;./configure --prefix=/opt/mpich/ --with-device=globus2:-flavor=gcc32dbg&lt;br /&gt;&lt;br /&gt;x86_64 環境執行：&lt;br /&gt;./configure --prefix=/opt/mpich/ --with-device=globus2:-flavor=gcc64dbg&lt;br /&gt;&lt;br /&gt;執行：&lt;br /&gt;make | tee mpich_make.log&lt;br /&gt;&lt;br /&gt;執行：&lt;br /&gt;make install&lt;br /&gt;&lt;br /&gt;接下來測試一下 MPICH 是否可以運作，先切換到有認證進網格的作業系統使用者 user008。&lt;br /&gt;&lt;br /&gt;執行：&lt;br /&gt;su - user008&lt;br /&gt;&lt;br /&gt;執行：&lt;br /&gt;cp /opt/mpich/examples/cpi.c .&lt;br /&gt;&lt;br /&gt;執行：&lt;br /&gt;mpicc cpi.c -o cpi&lt;br /&gt;&lt;br /&gt;在同一個目錄底下，執行：&lt;br /&gt;vim machines&lt;br /&gt;&lt;br /&gt;編寫 machines 檔，內容是：&lt;br /&gt;"本機的 hostname" 1&lt;br /&gt;&lt;br /&gt;編輯完成後，執行：&lt;br /&gt;grid-proxy-init&lt;br /&gt;&lt;br /&gt;Grid Proxy 起始化後，執行：&lt;br /&gt;mpirun -np 1 cpi&lt;br /&gt;&lt;br /&gt;順利的話，螢幕會印出 Pi 的值與執行的主機名稱。&lt;br /&gt;&lt;br /&gt;***************************&lt;br /&gt;&lt;br /&gt;Reference :&lt;br /&gt;01. http://en.wikipedia.org/wiki/Virtual_Organization&lt;br /&gt;02. http://www.globus.org/security/overview.html&lt;br /&gt;03. http://www.globus.org/security/&lt;br /&gt;04. http://blog.tmu.edu.tw/tedyeng/000071.html&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18689056-6419378879124705430?l=zx-1986.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://zx-1986.blogspot.com/feeds/6419378879124705430/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://zx-1986.blogspot.com/2010/08/setup-globus-toolkit-and-mpich.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18689056/posts/default/6419378879124705430'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18689056/posts/default/6419378879124705430'/><link rel='alternate' type='text/html' href='http://zx-1986.blogspot.com/2010/08/setup-globus-toolkit-and-mpich.html' title='安裝 Globus 與 MPICH'/><author><name>張旭</name><uri>https://profiles.google.com/105134833883146274095</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-pO0m_C6_zQw/AAAAAAAAAAI/AAAAAAAAD0c/h7KNyAUN14w/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18689056.post-4318707321878682966</id><published>2010-08-13T15:04:00.003+08:00</published><updated>2010-08-16T17:40:12.336+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='grid'/><category scheme='http://www.blogger.com/atom/ns#' term='globus'/><title type='text'>Globus Toolkit 概要</title><content type='html'>Globus Toolkit (GT) 是一套網格中介軟體，是網格的基礎建設。&lt;br /&gt;如果所有主機都佈署 GT，那麼網格裡某個 node 的使用者就可以透過 GT 使用其他 node 的資源。&lt;br /&gt;＃最新版本是 Globus Toolkit 5.0.0 （2010/03）&lt;br /&gt;&lt;br /&gt;概念類似於 Web Service，大家遵循一定的規範將主機資源對外開放，外界對其存取有必需的流程及限制。&lt;br /&gt;&lt;br /&gt;當然，背後的運作還有許多事情需要處理，&lt;br /&gt;例如：資源的搜尋；使用者認證與授權；任務的分發；結果的傳遞；錯誤處理 ......。&lt;br /&gt;這些使用者都不用去操心，Globus Toolkit 都會幫您處理好，這也是為什麼它叫基礎建設的原因。&lt;br /&gt;&lt;br /&gt;其中在安全機制方面，Globus Toolkit 預設提供有 SimpleCA 認證模組，&lt;br /&gt;使用者可以安裝自己的 SimpleCA Server，認證網格機器。&lt;br /&gt;&lt;br /&gt;「Globus Toolkit 網格使用者」和「主機作業系統使用者」是不一樣的。&lt;br /&gt;通常會在 Globus Toolkit 的 grid-mapfile 檔案裡作一個映對。&lt;br /&gt;＃grid-mapfile 一般在 /etc/grid-security/ 底下。&lt;br /&gt;&lt;br /&gt;一組映對通常是這樣子的：&lt;br /&gt;"//U=網格使用者名稱" 作業系統使用者帳號&lt;br /&gt;&lt;br /&gt;所以網格使用者對主機的存取權限會為所映對的使用者帳號在該主機的權限所影響。&lt;br /&gt;&lt;br /&gt;Linux 使用者可以試著執行：&lt;br /&gt;globus-job-run 主機名稱 /bin/whoami&lt;br /&gt;檢查網格使用者在該主機所映對的作業系統使用者帳號。&lt;br /&gt;&lt;br /&gt;Globus Toolkit 4.2.x 和 Globus Toolkit 4.0.x 是沒有辦法兼容的。&lt;br /&gt;官方推薦的 4.0.x 版本是 4.0.8。&lt;br /&gt;官方推薦的 4.2.x 版本是 4.2.1。 &lt;br /&gt;&lt;br /&gt;編譯安裝 Globus Toolkit 之前，有一些前置工作。&lt;br /&gt;&lt;br /&gt;首先先確認您的網格主機都使用在一個網域（domain），例如：*.example.org&lt;br /&gt;&lt;br /&gt;編輯您的 /etc/hosts 檔案，讓主機名稱與 IP 位址正確映對。&lt;br /&gt;&lt;br /&gt;安裝編譯 Globus Toolkit 所必需的軟體，官方有其必需軟體清單：&lt;br /&gt;//&lt;br /&gt;//&lt;br /&gt;&lt;br /&gt;除了 Apache Ant 和 Java SDK，建議直接使用 apt-get 安裝以上軟體和函式庫。&lt;br /&gt;&lt;br /&gt;Apache Ant 和 Java SDK 可以直接解壓縮到 /opt 目錄底下使用。&lt;br /&gt;&lt;br /&gt;編輯 /etc/profile 檔案，將 Java 和 Apache Ant 的 bin 目錄加入環境變數。&lt;br /&gt;假設 Globus Toolkit 將安裝在 /opt/globus 底下，則將 GLOBUS_LOCATION 變數也加入 shell 環境中：&lt;br /&gt;&lt;br /&gt;JAVA_HOME=/opt/java&lt;br /&gt;ANT_HOMT=/opt/ant&lt;br /&gt;GLOBUS_LOCATION=/opt/globus&lt;br /&gt;&lt;br /&gt;PATH=$GLOBUS_LOCATION/bin:$GLOBUS_LOCATION/sbin:$JAVA_HOME/bin:$ANT_HOME/bin:$PATH;&lt;br /&gt;&lt;br /&gt;在最後加上以下指令，以便之後每次登入都自動匯入 Globus 環境變數：&lt;br /&gt;. $GLOBUS_LOCATION/.../globus-user-env.sh&lt;br /&gt;&lt;br /&gt;然後使用 source 指令讓 /etc/profile 的設定立即生效：&lt;br /&gt;source /etc/profile&lt;br /&gt;&lt;br /&gt;＃先不用理會 gloubs-user-env.sh 無效的通知，因為還不存在。&lt;br /&gt;&lt;br /&gt;將 Globus Toolkit 原始碼檔案解壓縮，進入其資料夾，使用以下指令 configure 產生 make 檔：&lt;br /&gt;./configure --prefix=/opt/globus&lt;br /&gt;&lt;br /&gt;順利設定完成便可以用以下指令進行編譯：&lt;br /&gt;make | tee gt_make.log&lt;br /&gt;&lt;br /&gt;編譯產生的訊息會儲存到 gt_make.log 檔案中，以便除錯。&lt;br /&gt;&lt;br /&gt;順利編譯完成便可以用以下指令進行安裝：&lt;br /&gt;make install&lt;br /&gt;&lt;br /&gt;接下來是 Globus Toolkit 的後置部署，使用 gpt-build 這個指令。&lt;br /&gt;這部分主要是 Globus Toolkit 安全機制 GSI 的部署。&lt;br /&gt;&lt;br /&gt;全新安裝的網格通常還沒有 SimpleCA Server，可以使用 Globus Toolkit 所附帶的 SimpleCA，&lt;br /&gt;第一臺安裝 Globus Toolkit 的機器可以身兼 SimpleCA Server。&lt;br /&gt;&lt;br /&gt;安裝 SimpleCA Server ...&lt;br /&gt;&lt;br /&gt;每個 Globus Toolkit 的 SimpleCA Server 都會有唯一一個網格認證檔，檔案名稱會是：&lt;br /&gt;globus_HASH_.....&lt;br /&gt;＃HASH 是一串亂數編碼。&lt;br /&gt;&lt;br /&gt;非 SimpleCA Server 的機器進行 Globus Toolkit 後置部署需要 SimpleCA Server 的網格認證檔。&lt;br /&gt;&lt;br /&gt;將網格認證檔複製到 /opt/globus 底下，并切換到該目錄，使用以下指令：&lt;br /&gt;32 位元環境：gpt-build globus_HASH_..... gcc32dbg&lt;br /&gt;64 位元環境：gpt-build globus_HASH_..... gcc64dbg&lt;br /&gt;&lt;br /&gt;然後執行：&lt;br /&gt;gpt-postinstall&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18689056-4318707321878682966?l=zx-1986.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://zx-1986.blogspot.com/feeds/4318707321878682966/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://zx-1986.blogspot.com/2010/08/globus-toolkit-overview.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18689056/posts/default/4318707321878682966'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18689056/posts/default/4318707321878682966'/><link rel='alternate' type='text/html' href='http://zx-1986.blogspot.com/2010/08/globus-toolkit-overview.html' title='Globus Toolkit 概要'/><author><name>張旭</name><uri>https://profiles.google.com/105134833883146274095</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-pO0m_C6_zQw/AAAAAAAAAAI/AAAAAAAAD0c/h7KNyAUN14w/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18689056.post-2595527802500680490</id><published>2010-08-13T15:02:00.002+08:00</published><updated>2010-08-13T15:02:29.848+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='kvm'/><category scheme='http://www.blogger.com/atom/ns#' term='ubuntu'/><title type='text'>Kernel-based Virtual Machines</title><content type='html'># 作業系統環境：Ubuntu 9.10 Server x86_64&lt;br /&gt;&lt;br /&gt;一、安裝 KVM (Kernel-based Virtual Machines)&lt;br /&gt;&lt;br /&gt;首先，確認 CPU 是否支援虛擬指令集。&lt;br /&gt;&lt;br /&gt;開啟終端機，執行：&lt;br /&gt;egrep '(vmx|svm)' --color=always /proc/cpuinfo&lt;br /&gt;&lt;br /&gt;如果畫面印出相關資訊，並且有 highlight 的 vmx 或 svm 的字串，代表 CPU 有支援。&lt;br /&gt;&lt;br /&gt;執行：&lt;br /&gt;sudo apt-get update &amp;&amp; sudo apt-get upgrade&lt;br /&gt;&lt;br /&gt;執行：&lt;br /&gt;sudo aptitude install kvm libvirt-bin ubuntu-vm-builder bridge-utils&lt;br /&gt;&lt;br /&gt;# 安裝過程中會出現 Postfix 的問項，可以選 Internet。&lt;br /&gt;&lt;br /&gt;安裝完成，執行：&lt;br /&gt;sudo adduser `id -un` libvirtd&lt;br /&gt;&lt;br /&gt;將當前登入的使用者加入 libvirtd 群組，方能執行 virsh 指令。&lt;br /&gt;執行完畢，請登出，再重新登入，讓設定生效。&lt;br /&gt;&lt;br /&gt;執行：&lt;br /&gt;virsh -c qemu:///system list&lt;br /&gt;&lt;br /&gt;有成功印出訊息，代表安裝成功。&lt;br /&gt;&lt;br /&gt;＊＊＊&lt;br /&gt;&lt;br /&gt;二、設定橋接網路 ( bridge network )&lt;br /&gt;&lt;br /&gt;# 如果您打算使用 KVM 預設 NAT 網路，請直接跳過這一步驟。&lt;br /&gt;# 但在新增虛擬機器的時候，請注意調整符合的網路參數！&lt;br /&gt;# 以下操作可能無法從遠端執行，因為涉及網路的中斷及重開。&lt;br /&gt;&lt;br /&gt;安裝橋接用的套件，執行：&lt;br /&gt;sudo apt-get install bridge-utils&lt;br /&gt;&lt;br /&gt;# 注意！執行以下指令會讓網路切斷，SSH 將無法遠端連線！&lt;br /&gt;為了確保設定期間沒有特殊問題，要先停掉網路服務，執行：&lt;br /&gt;sudo invoke-rc.d networking stop&lt;br /&gt;&lt;br /&gt;先備份原始網路設定檔：&lt;br /&gt;sudo cp /etc/network/interfaces /etc/network/interfaces-backup&lt;br /&gt;&lt;br /&gt;執行:&lt;br /&gt;sudo vim /etc/network/interfaces&lt;br /&gt;&lt;br /&gt;將 interfaces 內容編輯成類似：&lt;br /&gt;# 以下為 TKG 網格的 Private Network 設定，請根據需求自行調整。&lt;br /&gt;auto lo&lt;br /&gt;iface lo inet loopback&lt;br /&gt;&lt;br /&gt;auto eth0&lt;br /&gt;iface eth0 inet manual&lt;br /&gt;&lt;br /&gt;auto br0&lt;br /&gt;iface br0 inet static&lt;br /&gt;address 192.168.100.主機號碼&lt;br /&gt;network 192.168.100.0&lt;br /&gt;netmask 255.255.255.0&lt;br /&gt;broadcast 192.168.100.255&lt;br /&gt;gateway 192.168.100.1&lt;br /&gt;bridge_ports eth0&lt;br /&gt;bridge_stp off&lt;br /&gt;bridge_fd 0&lt;br /&gt;bridge_maxwait 0&lt;br /&gt;&lt;br /&gt;存檔離開後，執行：&lt;br /&gt;sudo invoke-rc.d networking stop &amp;&amp; sudo /etc/init.d/networking restart&lt;br /&gt;&lt;br /&gt;網路順利啟動後，可以試著用 SSH 遠端登入看看。&lt;br /&gt;可以執行更新或 ping DNS 等動作進行測試。&lt;br /&gt;&lt;br /&gt;虛擬機器的各項預設值，可以參考 /etc/vmbuilder/libvirt/libvirtxml.tmpl 檔案。&lt;br /&gt;&lt;br /&gt;＊＊＊&lt;br /&gt;&lt;br /&gt;三、安裝第一台虛擬機器&lt;br /&gt;&lt;br /&gt;KVM 目前有三套主流管理工具：&lt;br /&gt;virt-manager：一個圖形介面的管理工具，可以安裝在有 X window 的 Linux 機器上。&lt;br /&gt;virt-install：一個用 python 撰寫的文字介面管理工具，Red Hat 開發。&lt;br /&gt;ubuntu-vm-builder：文字介面管理工具，Canonical 開發。&lt;br /&gt;&lt;br /&gt;virt-install 有比較大的操作自由度，所以選用它進行管理操作。&lt;br /&gt;&lt;br /&gt;先把它裝起來，執行：&lt;br /&gt;sudo apt-get install python-virtinst&lt;br /&gt;&lt;br /&gt;查看 virt-install 各項的參數，執行：&lt;br /&gt;virt-install --help&lt;br /&gt;&lt;br /&gt;查看 virt-install 完整的使用說明，執行：&lt;br /&gt;man virt-install&lt;br /&gt;&lt;br /&gt;執行：&lt;br /&gt;virt-install \&lt;br /&gt;--connect qemu:///system \&lt;br /&gt;--name=虛擬機器的名稱 \&lt;br /&gt;--ram=分配的記憶體大小 [MB] \&lt;br /&gt;--os-type=作業系統類型 [ex: linux] \&lt;br /&gt;--os-variant=作業系統的版本名稱 [ex: ubuntujaunty] \&lt;br /&gt;--hvm [全虛擬化，hvm 與 paravirt 擇其一，請參考附錄] \&lt;br /&gt;--paravirt [半虛擬化，hvm 與 paravirt 擇其一，請參考附錄] \&lt;br /&gt;--accelerate [KVM 加速器] \&lt;br /&gt;--cdrom=系統安裝光碟的路徑 [ex: *.iso] \&lt;br /&gt;--file=虛擬硬碟的路徑 [ex: *.qcow2] \&lt;br /&gt;--file-size=虛擬硬碟的大小 [GB] \&lt;br /&gt;--bridge=br0 [注意：如果您沒有使用橋接網路，請設定成 --network=default] \&lt;br /&gt;--vnc \&lt;br /&gt;--noautoconsole \&lt;br /&gt;--debug&lt;br /&gt;&lt;br /&gt;一個完整的例子如下：&lt;br /&gt;virt-install \&lt;br /&gt;--connect qemu:///system \&lt;br /&gt;--name=imVM \&lt;br /&gt;--ram=1024 \&lt;br /&gt;--os-type=linux \&lt;br /&gt;--os-variant=ubuntujaunty \&lt;br /&gt;--hvm \&lt;br /&gt;--accelerate \&lt;br /&gt;--cdrom=~/ubuntu-9.04.iso \&lt;br /&gt;--file=~/imVM.qcow2 \&lt;br /&gt;--file-size=8 \&lt;br /&gt;--bridge=br0 \&lt;br /&gt;--vnc \&lt;br /&gt;--noautoconsole \&lt;br /&gt;--debug&lt;br /&gt;&lt;br /&gt;順利執行完畢，虛擬機器就存在了。&lt;br /&gt;新建的虛擬機器，其描述檔為：&lt;br /&gt;/etc/libvirt/qemu/虛擬機器名稱.xml&lt;br /&gt;&lt;br /&gt;要將新建的虛擬機器進行第一次開機，執行：&lt;br /&gt;virsh&lt;br /&gt;&lt;br /&gt;virsh # start 虛擬機器名稱&lt;br /&gt;virsh # list --all&lt;br /&gt;virsh # quit&lt;br /&gt;&lt;br /&gt;確定虛擬機器開機後，到 X window 環境的機器底下，執行：&lt;br /&gt;sudo apt-get install virt-viewer&lt;br /&gt;&lt;br /&gt;執行：&lt;br /&gt;virt-viewer --connect qemu+ssh://使用者帳號@虛擬機器的母體主機位址/system 虛擬機器名稱&lt;br /&gt;&lt;br /&gt;成功登入之後，將會出現遠端的虛擬機器畫面。&lt;br /&gt;進行正常的作業系統安裝動作，完成後關機。&lt;br /&gt;&lt;br /&gt;再次進入 virsh 開機，然後從其他機器 SSH 連線測試。&lt;br /&gt;如果出現問題，請使用 virt-viewer 檢查虛擬機器狀況。&lt;br /&gt;&lt;br /&gt;＊＊＊&lt;br /&gt;&lt;br /&gt;四、使用已存在的虛擬硬碟檔安裝新的虛擬機器&lt;br /&gt;&lt;br /&gt;執行：&lt;br /&gt;virt-install \&lt;br /&gt;--connect=qemu:///system \&lt;br /&gt;--name=新的虛擬機器名稱 \&lt;br /&gt;--ram=新的虛擬機器記憶體大小 [MB] \&lt;br /&gt;--os-type=作業系統類型 \&lt;br /&gt;--os-variant=作業系統名稱 \&lt;br /&gt;--accelerate \&lt;br /&gt;--file=已存在的虛擬硬碟路徑 [ex: *.qcow2] \&lt;br /&gt;--bridge=br0 [注意：如果您沒有使用橋接網路，請設定成 --network=default] \&lt;br /&gt;--vnc \&lt;br /&gt;--noautoconsole \&lt;br /&gt;--debug \&lt;br /&gt;--import&lt;br /&gt;&lt;br /&gt;＊＊＊&lt;br /&gt;&lt;br /&gt;五、複製虛擬機器&lt;br /&gt;&lt;br /&gt;執行：&lt;br /&gt;virt-clone \&lt;br /&gt;--connect=qemu:///system \&lt;br /&gt;-o 舊的虛擬機器名稱 \&lt;br /&gt;-n 新的虛擬機器名稱 \&lt;br /&gt;-f 新的虛擬硬碟路徑 [ex: *.qcow2]&lt;br /&gt;&lt;br /&gt;＊＊＊&lt;br /&gt;&lt;br /&gt;六、虛擬機器的管理&lt;br /&gt;&lt;br /&gt;執行：&lt;br /&gt;virsh&lt;br /&gt;&lt;br /&gt;# 查看所有可以用指令&lt;br /&gt;virsh # help&lt;br /&gt;&lt;br /&gt;# 取出虛擬機器描述檔&lt;br /&gt;virsh # dumpxml 虛擬機器名稱 /tmp/虛擬機器描述檔 [ex: *.xml]&lt;br /&gt;&lt;br /&gt;# 使用虛擬機器描述檔建立虛擬機器&lt;br /&gt;virsh # define /etc/libvirt/qemu/虛擬機器描述檔 [ex: *.xml]&lt;br /&gt;&lt;br /&gt;# 移除虛擬機器&lt;br /&gt;virsh # undefine 虛擬機器名稱&lt;br /&gt;&lt;br /&gt;# 列出所有虛擬機器&lt;br /&gt;virsh # list --all&lt;br /&gt;&lt;br /&gt;# 啟動虛擬機器&lt;br /&gt;virsh # start 虛擬機器名稱&lt;br /&gt;&lt;br /&gt;# 關閉虛擬機器&lt;br /&gt;virsh # shutdown 虛擬機器名稱&lt;br /&gt;&lt;br /&gt;# 拔除虛擬機器電源&lt;br /&gt;virsh # destory 虛擬機器名稱&lt;br /&gt;&lt;br /&gt;＊＊＊&lt;br /&gt;&lt;br /&gt;附錄：&lt;br /&gt;&lt;br /&gt;Full Virtualization specific options&lt;br /&gt;&lt;br /&gt;Parameters specific only to fully virtualized guest installs.&lt;br /&gt;&lt;br /&gt;--sound&lt;br /&gt;Attach a virtual audio device to the guest.&lt;br /&gt;&lt;br /&gt;--noapic&lt;br /&gt;Override the OS type / variant to disables the APIC setting for fully virtualized guest.&lt;br /&gt;&lt;br /&gt;--noacpi&lt;br /&gt;Override the OS type / variant to disables the ACPI setting for fully virtualized guest.&lt;br /&gt;&lt;br /&gt;Virtualization Type options&lt;br /&gt;&lt;br /&gt;Options to override the default virtualization type choices.&lt;br /&gt;&lt;br /&gt;-v, --hvm&lt;br /&gt;Request the use of full virtualization, if both para &amp; full virtualization are available on the host. This parameter may not be available if connecting to a Xen hypervisor on a machine without hardware virtualization support. This parameter is implied if connecting to a QEMU based hypervisor.&lt;br /&gt;&lt;br /&gt;-p, --paravirt&lt;br /&gt;This guest should be a paravirtualized guest. If the host supports both para &amp; full virtualization, and neither this parameter nor the "--hvm" are specified, this will be assumed.&lt;br /&gt;&lt;br /&gt;--accelerate&lt;br /&gt;When installing a QEMU guest, make use of the KVM or KQEMU kernel acceleration capabilities if available. Use of this option is recommended unless a guest OS is known to be incompatible with the accelerators. The KVM accelerator is preferred over KQEMU if both are available.&lt;br /&gt;&lt;br /&gt;＊＊＊&lt;br /&gt;&lt;br /&gt;Reference :&lt;br /&gt;01. https://help.ubuntu.com/community/KVM&lt;br /&gt;02. http://thundersha.blogspot.com/2008/07/ubuntu-kvmgui-sector2.html&lt;br /&gt;03. http://www.boobooke.com/v/bbk1819/&lt;br /&gt;04. http://southbrain.com/south/2009/08/youtube-examples-of-xvm-virtin.html&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18689056-2595527802500680490?l=zx-1986.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://zx-1986.blogspot.com/feeds/2595527802500680490/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://zx-1986.blogspot.com/2010/08/kernel-based-virtual-machines.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18689056/posts/default/2595527802500680490'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18689056/posts/default/2595527802500680490'/><link rel='alternate' type='text/html' href='http://zx-1986.blogspot.com/2010/08/kernel-based-virtual-machines.html' title='Kernel-based Virtual Machines'/><author><name>張旭</name><uri>https://profiles.google.com/105134833883146274095</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-pO0m_C6_zQw/AAAAAAAAAAI/AAAAAAAAD0c/h7KNyAUN14w/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18689056.post-6916593480399138963</id><published>2010-08-13T14:56:00.003+08:00</published><updated>2010-08-16T17:36:27.130+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><title type='text'>使用 tar 指令</title><content type='html'>使用範例：將整個 /etc 目錄下的檔案全部打包到 /tmp 底下&lt;br /&gt;&lt;br /&gt;[root@linux ~]# tar -cvf /tmp/etc.tar /etc &lt;==僅打包，不壓縮！&lt;br /&gt;[root@linux ~]# tar -zcvf /tmp/etc.tar.gz /etc &lt;==打包後，以 gzip 壓縮 &lt;br /&gt;[root@linux ~]# tar -jcvf /tmp/etc.tar.bz2 /etc &lt;==打包後，以 bzip2 壓縮&lt;br /&gt;&lt;br /&gt;在參數 f 之後的檔案檔名是自己取的，習慣上都用 .tar 來作為辨識。&lt;br /&gt;如果加 z 參數，則以 .tar.gz 或 .tgz 來代表 gzip 壓縮過的 tar file。&lt;br /&gt;如果加 j 參數，則以 .tar.bz2 來作為附檔名。&lt;br /&gt;&lt;br /&gt;上述指令在執行的時候，會顯示一個警告訊息：&lt;br /&gt;『tar: Removing leading `/' from member names』&lt;br /&gt;這是關於絕對路徑的特殊設定。&lt;br /&gt;&lt;br /&gt;解壓縮：&lt;br /&gt;[root@linux ~]# tar zxvf /tmp/etc.tar.gz &lt;==解開 gzip&lt;br /&gt;[root@linux ~]# tar jxvf /tmp/etc.tar.bz2 &lt;==解開 bzip2&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18689056-6916593480399138963?l=zx-1986.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://zx-1986.blogspot.com/feeds/6916593480399138963/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://zx-1986.blogspot.com/2010/08/using-tar.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18689056/posts/default/6916593480399138963'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18689056/posts/default/6916593480399138963'/><link rel='alternate' type='text/html' href='http://zx-1986.blogspot.com/2010/08/using-tar.html' title='使用 tar 指令'/><author><name>張旭</name><uri>https://profiles.google.com/105134833883146274095</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-pO0m_C6_zQw/AAAAAAAAAAI/AAAAAAAAD0c/h7KNyAUN14w/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18689056.post-5487917292521220909</id><published>2010-08-13T14:46:00.010+08:00</published><updated>2010-09-06T18:03:13.762+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='ubuntu'/><title type='text'>星際譯王</title><content type='html'>星際譯王是一套相當好用的翻譯軟體。&lt;br /&gt;Ubuntu 底下安裝星際譯王（StarDict）非常簡單。&lt;br /&gt;可以在終端機中執行以下指令：&lt;br /&gt;&lt;pre class="brush:bash"&gt;sudo apt-get install stardict&lt;br /&gt;&lt;/pre&gt;安裝完成後，可以到 http://stardict.sourceforge.net/Dictionaries.php 下載字典檔。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;選擇自己喜歡的字典檔下載即可。&lt;br /&gt;下載後，可以使用以下指令解壓縮：&lt;br /&gt;&lt;pre class="brush:bash"&gt;tar -jxvf 字典檔.tar.bz2 &lt;br /&gt;&lt;/pre&gt;把解壓縮後的字典檔資料夾搬到 /usr/share/stardict/dic/ 底下就可以使用了。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;再來到 http://stardict.sourceforge.net/download.php 下載發音檔。&lt;br /&gt;下載後，使用以下指令解壓縮：&lt;br /&gt;&lt;pre class="brush:bash"&gt;tar -jxvf WyabdcRealPeopleTTS.tar.bz2 &lt;br /&gt;&lt;/pre&gt;把解壓縮後的 WyabdcRealPeopleTTS 資料夾搬到 /usr/share/ 底下。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;開啟星際譯王，點一下右下角的小扳手進行設定。&lt;br /&gt;點選 字典（Dictionary） 底下的 聲音（Sound）選項 ，將聲音播放的命令從 play 改成 aplay。&lt;br /&gt;現在收尋的單字應該可以發音了&lt;br /&gt;&lt;br /&gt;有興趣的人還可以試一下 QStarDict，是以 Qt 為基礎開發使用者介面的 StarDict。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18689056-5487917292521220909?l=zx-1986.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://zx-1986.blogspot.com/feeds/5487917292521220909/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://zx-1986.blogspot.com/2010/08/setup-stardict.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18689056/posts/default/5487917292521220909'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18689056/posts/default/5487917292521220909'/><link rel='alternate' type='text/html' href='http://zx-1986.blogspot.com/2010/08/setup-stardict.html' title='星際譯王'/><author><name>張旭</name><uri>https://profiles.google.com/105134833883146274095</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-pO0m_C6_zQw/AAAAAAAAAAI/AAAAAAAAD0c/h7KNyAUN14w/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18689056.post-3321105528338049053</id><published>2010-08-13T14:45:00.002+08:00</published><updated>2010-09-15T16:39:37.443+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='ubuntu'/><title type='text'>使用 UUID 開機自動掛載硬碟</title><content type='html'>UUID（Universally Unique Identifier）&lt;br /&gt;&lt;br /&gt;維基百科：&lt;br /&gt;UUID 的目的，是讓分散式系統中的所有元素，都能有唯一的辨識資訊，&lt;br /&gt;而不需要透過中央控制端來做辨識資訊的指定。&lt;br /&gt;如此一來，每個人都可以建立不與其它人衝突的 UUID。&lt;br /&gt;&lt;br /&gt;使用以下指令查詢所有掛載磁區的 UUID，&lt;br /&gt;但必須小心確認哪一個磁區對應的是哪一個 UUID：&lt;br /&gt;&lt;pre class="brush:bash"&gt;ls -l /dev/disk/by-uuid/&lt;/pre&gt;&lt;br /&gt;可以使用 blkid 查詢指定磁區的 UUID，例如查詢 sda1：&lt;br /&gt;&lt;pre class="brush:bash"&gt;blkid /dev/sda1&lt;/pre&gt;&lt;br /&gt;開機自動掛載的磁區通常紀錄在 /etc/fstab 檔案。&lt;br /&gt;要設定開機掛載就需要修改 /etc/fstab 檔案。&lt;br /&gt;直接看一下 /etc/fstab 的內容：&lt;br /&gt;&lt;br /&gt;---&lt;br /&gt;&lt;br /&gt;# /etc/fstab: static file system information.&lt;br /&gt;#&lt;br /&gt;# Use 'blkid -o value -s UUID' to print the universally unique identifier&lt;br /&gt;# for a device; this may be used with UUID= as a more robust way to name&lt;br /&gt;# devices that works even if disks are added and removed. See fstab(5).&lt;br /&gt;#&lt;br /&gt;# &lt;br /&gt;proc /proc proc defaults 0 0&lt;br /&gt;&lt;br /&gt;# / was on /dev/sda1 during installation&lt;br /&gt;UUID=根目錄磁區的UUID / ext4 errors=remount-ro 0 1&lt;br /&gt;&lt;br /&gt;# /home was on /dev/sda3 during installation&lt;br /&gt;UUID=家目錄磁區的UUID /home ext4 defaults 0 2&lt;br /&gt;&lt;br /&gt;# swap was on /dev/sda2 during installation&lt;br /&gt;UUID=置換空間磁區的UUID none swap sw 0 0&lt;br /&gt;&lt;br /&gt;# 光碟機的掛載設定&lt;br /&gt;/dev/scd0 /media/cdrom0 udf,iso9660 user,noauto,exec,utf8 0 0&lt;br /&gt;&lt;br /&gt;# 以上是一般 /etc/fstab 基本內容&lt;br /&gt;# 以下可以新增自己的掛載磁區，以掛載 Windows 系的 NTFS 檔案系統為例&lt;br /&gt;&lt;br /&gt;# 使用者自行設定的掛載&lt;br /&gt;UUID=磁碟磁區的UUID 自行設置的掛載目錄路徑 ntfs defaults 0 0&lt;br /&gt;&lt;br /&gt;---&lt;br /&gt;&lt;br /&gt;將編輯完成的 /etc/fstab 存檔後重新開機。&lt;br /&gt;如果順利開機成功，便是設置完成了。&lt;br /&gt;&lt;br /&gt;一般建議先備份一個原始的 /etc/fstab 檔再進行編輯。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18689056-3321105528338049053?l=zx-1986.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://zx-1986.blogspot.com/feeds/3321105528338049053/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://zx-1986.blogspot.com/2010/08/mount-hard-disk-by-uuid.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18689056/posts/default/3321105528338049053'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18689056/posts/default/3321105528338049053'/><link rel='alternate' type='text/html' href='http://zx-1986.blogspot.com/2010/08/mount-hard-disk-by-uuid.html' title='使用 UUID 開機自動掛載硬碟'/><author><name>張旭</name><uri>https://profiles.google.com/105134833883146274095</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-pO0m_C6_zQw/AAAAAAAAAAI/AAAAAAAAD0c/h7KNyAUN14w/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18689056.post-9156263520896877964</id><published>2010-08-13T14:41:00.005+08:00</published><updated>2011-12-05T16:24:33.038+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='ssh'/><category scheme='http://www.blogger.com/atom/ns#' term='ubuntu'/><title type='text'>SSH 免密碼登入</title><content type='html'>Linux/Ubuntu 底下，假設您要從 PC-A 的 user1 免密碼驗證 SSH 登入到 PC-B 的 user2。&lt;br /&gt;如果兩台機器的使用者您都很信得過，覺得大家互相登入來登入去，ok 的！&lt;br /&gt;那底下是直接的指令，只有 3 行，照著執行完就可以了：&lt;br /&gt;&lt;br /&gt;user1@PC-A:~$ ssh-keygen -t rsa&lt;br /&gt;&lt;br /&gt;user1@PC-A:~$ cp ~/.ssh/id_rsa.pub ~/.ssh/authorized_keys&lt;br /&gt;&lt;br /&gt;user1@PC-A:~$ scp -r ~/.ssh user2@PC-B:~/&lt;br /&gt;&lt;br /&gt;＊輸入第一行指令後一直壓 enter，都使用預設或空白的設定即可。&lt;br /&gt;＊注意：操作完成，PC-A 的 user1 和 PC-B 的 user2 是可以「互相」免密碼登入的唷！&lt;br /&gt;&lt;br /&gt;如果遇到 ssh host key check 的問題，可以在登入的 ssh 指令後加上：&lt;br /&gt;-o StrictHostKeyChecking=no&lt;br /&gt;&lt;br /&gt;強制忽略欲登入主機的 host key 檢查，例如：&lt;br /&gt;user1@PC-A:~$ ssh -o StrictHostKeyChecking=no user2@PC-B&lt;br /&gt;&lt;br /&gt;---&lt;br /&gt;&lt;br /&gt;基本的原理就是使用一對「公鑰/私鑰」。&lt;br /&gt;欲登入方持有私鑰，被登入方持有公鑰。&lt;br /&gt;以自動驗證公鑰、私鑰是否成對來進行登入確認。&lt;br /&gt;&lt;br /&gt;公鑰、私鑰是成對的，只要產生一組並且把它們保存好，就可以一直用。&lt;br /&gt;公鑰、私鑰驗證的細節是很神奇的數學，這就不談了，因為我也不懂。&lt;br /&gt;我只簡單地、直接地說一下免密碼登入怎麼設定，更多內容可以參考 reference。&lt;br /&gt;&lt;br /&gt;user1 先在 PC-A 下先產生一對公鑰、私鑰，使用：&lt;br /&gt;ssh-keygen -t rsa&lt;br /&gt;&lt;br /&gt;它會請您設定鑰匙存放的路徑、以及一個使用時的 passphrase。&lt;br /&gt;＊請務必使用預設即可！&lt;br /&gt;＊一直壓 enter 鍵就好了！&lt;br /&gt;&lt;br /&gt;完成後，user1 的家目錄底下會有 .ssh 這個資料夾，使用：&lt;br /&gt;cd ~/.ssh/&lt;br /&gt;ls -l ~/.ssh/&lt;br /&gt;&lt;br /&gt;裡面至少會有這兩個檔案：&lt;br /&gt;id_rsa&lt;br /&gt;id_rsa.pub&lt;br /&gt;&lt;br /&gt;id_rsa 就是這次產生的私鑰，id_rsa.pub 則是這次產生的公鑰。&lt;br /&gt;&lt;br /&gt;接下來，如果您很懶，直接使用：&lt;br /&gt;cp id_rsa.pub authorized_keys&lt;br /&gt;&lt;br /&gt;將公鑰複製成檔名為 authorized_keys 的檔案。&lt;br /&gt;&lt;br /&gt;然後使用：&lt;br /&gt;scp -r ~/.ssh user2@PC-B:~/&lt;br /&gt;&lt;br /&gt;將 user1 在 PC-A 上的整個 .ssh 資料夾複製到 PC-B 的 user2 家目錄下。&lt;br /&gt;＊注意：如此一來，不僅 user1 可以從 PC-A 直接免密碼登入 PC-B 的 user2。&lt;br /&gt;＊注意：如此一來，就連 PC-B 的 user2 也可以直接免密碼登入 PC-A 的 user1！&lt;br /&gt;&lt;br /&gt;如果您不希望 PC-B 的 user2 免密碼登入 PC-A 的 user1，上面步驟做完後，&lt;br /&gt;登入 PC-B 的 user2，使用：&lt;br /&gt;cd ~/.ssh/&lt;br /&gt;&lt;br /&gt;再使用：&lt;br /&gt;rm id_rsa id_rsa.pub&lt;br /&gt;&lt;br /&gt;在 user2 的 .ssh 資料夾裡僅留下 authorized_keys 檔案即可。&lt;br /&gt;&lt;br /&gt;Reference：&lt;br /&gt;01. http://josephjiang.com/article/understand-ssh-key/&lt;br /&gt;02. http://help.github.com/linux-key-setup/&lt;br /&gt;03. http://linuxcommando.blogspot.com/2008/10/how-to-disable-ssh-host-key-checking.html&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18689056-9156263520896877964?l=zx-1986.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://zx-1986.blogspot.com/feeds/9156263520896877964/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://zx-1986.blogspot.com/2010/08/login-without-password.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18689056/posts/default/9156263520896877964'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18689056/posts/default/9156263520896877964'/><link rel='alternate' type='text/html' href='http://zx-1986.blogspot.com/2010/08/login-without-password.html' title='SSH 免密碼登入'/><author><name>張旭</name><uri>https://profiles.google.com/105134833883146274095</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-pO0m_C6_zQw/AAAAAAAAAAI/AAAAAAAAD0c/h7KNyAUN14w/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18689056.post-6373357343696602951</id><published>2010-08-13T14:40:00.001+08:00</published><updated>2010-08-16T17:39:24.032+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='ubuntu'/><title type='text'>Gnome 鑰匙圈</title><content type='html'>忘記 Gnome Keyring 的密碼。&lt;br /&gt;&lt;br /&gt;Empathy 預設好像會請求設定一個 keyring，來防止別人隨便登入你的 IM。&lt;br /&gt;有時候挺麻煩的，因為 desktop 都自己在用，有時候覺得其實不需要。&lt;br /&gt;然後有一天可能突然就忘了那個密碼到底設定啥來著。&lt;br /&gt;&lt;br /&gt;執行：&lt;br /&gt;cd ~/.gnome2/keyrings/&lt;br /&gt;&lt;br /&gt;可以看到相關的檔案，不過密碼內容是編碼過的。&lt;br /&gt;&lt;br /&gt;執行：&lt;br /&gt;rm ~/.gnome2/keyrings/*&lt;br /&gt;&lt;br /&gt;就可以讓預設 keyring 密碼為空了。&lt;br /&gt;&lt;br /&gt;Reference:&lt;br /&gt;http://live.gnome.org/GnomeKeyring&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18689056-6373357343696602951?l=zx-1986.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://zx-1986.blogspot.com/feeds/6373357343696602951/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://zx-1986.blogspot.com/2010/08/gnome-keyring.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18689056/posts/default/6373357343696602951'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18689056/posts/default/6373357343696602951'/><link rel='alternate' type='text/html' href='http://zx-1986.blogspot.com/2010/08/gnome-keyring.html' title='Gnome 鑰匙圈'/><author><name>張旭</name><uri>https://profiles.google.com/105134833883146274095</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-pO0m_C6_zQw/AAAAAAAAAAI/AAAAAAAAD0c/h7KNyAUN14w/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18689056.post-2151923481431128446</id><published>2010-08-13T14:37:00.003+08:00</published><updated>2011-09-28T14:04:31.606+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='ubuntu'/><title type='text'>Launchapd PPA &amp; GPG</title><content type='html'>PPA（Personal Package Archive）&lt;br /&gt;&lt;br /&gt;在說 PPA 之前，先來談一下 Launchpad（https://launchpad.net/）。&lt;br /&gt;&lt;br /&gt;維基百科告訴我們：&lt;br /&gt;Launchpad 是 Ubuntu 母公司 Canonical 所架設的網站，&lt;br /&gt;是一個提供維護、支援或連絡「Ubuntu 開發者」的平台。&lt;br /&gt;&lt;br /&gt;Launchpad 是一個軟體合作平台，註冊帳號之後，你可以在上面開啟或參與軟體專案。&lt;br /&gt;Inkscape、MySQL 等都有使用 Launchpad 做 code hosting。&lt;br /&gt;Ubuntu 預設的標準套件庫也是連到 Launchpad。&lt;br /&gt;Launchpad 幾乎是所有 Ubuntu package 的維護中心。&lt;br /&gt;&lt;br /&gt;Every individual and team in Launchpad can have one or more PPAs, each with its own URL.&lt;br /&gt;&lt;br /&gt;前面說過，只要有註冊 Launchpad 的帳號，&lt;br /&gt;個人或組織可以在上面展開一個或多個軟體專案。&lt;br /&gt;一個 Launchpad 帳號即有一個 PPA（Personal Package Archive）。&lt;br /&gt;我暫時翻為：個人套件庫&lt;br /&gt;例如：Chrome for ubuntu（https://launchpad.net/~chromium-daily/）&lt;br /&gt;其中小波浪（~）後面跟著的 chromium-daily 就是 Launchpad 帳號了。&lt;br /&gt;&lt;br /&gt;Using a Personal Package Archive (PPA), you can distribute software and updates directly to Ubuntu users. Create your source package, upload it and Launchpad will build binaries and then host them in your own apt repository.&lt;br /&gt;&lt;br /&gt;你在 PPA 底下開發的軟體，是可以直接發佈或更新給 Ubuntu 的使用者的。&lt;br /&gt;只要該使用者取得你 PPA 的位址，並且將該 PPA 位址加入他的來源清單。&lt;br /&gt;他之後就可以使用 apt-get 指令從你的 PPA 安裝或更新軟體。&lt;br /&gt;&lt;br /&gt;Ubuntu 9.10 版之後，新增一個 PPA 來源很簡單。&lt;br /&gt;只要連到欲加入 PPA 的 Launchpad 網頁（PPA's overview page），&lt;br /&gt;找到類似底下型式的 PPA 位址：&lt;br /&gt;&lt;pre class="brush:bash"&gt;ppa:某個 Launchpad 帳號/名稱&lt;br /&gt;（例如：ppa:chromium-daily/stable）&lt;br /&gt;&lt;/pre&gt;在終端機底下執行：&lt;br /&gt;&lt;pre class="brush:bash"&gt;sudo add-apt-repository ppa:某個 Launchpad 帳號/名稱&lt;br /&gt;（例如：sudo add-apt-repository ppa:chromium-daily/stable）&lt;br /&gt;&lt;/pre&gt;最後，再執行一下：&lt;br /&gt;&lt;pre class="brush:bash"&gt;sudo apt-get update&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;---&lt;br /&gt;&lt;br /&gt;而舊版 Ubuntu 的 PPA 來源新增，一樣需要到該 PPA 的 Launchpad 網頁，&lt;br /&gt;找到類似底下型式的位址：&lt;br /&gt;&lt;pre class="brush:bash"&gt;deb http://ppa.launchpad.net/某個 Launchpad 帳號/名稱/ubuntu 你的 Ubuntu 版本代號 main&lt;br /&gt;deb-src http://ppa.launchpad.net/某個 Launchpad 帳號/名稱/ubuntu 你的 Ubuntu 版本代號 main&lt;br /&gt;（例如：deb http://ppa.launchpad.net/chromium-daily/stable/ubuntu lucid main）&lt;br /&gt;（例如：deb-src http://ppa.launchpad.net/chromium-daily/stable/ubuntu lucid main ）&lt;br /&gt;&lt;/pre&gt;複製這兩行來源位址，新增到以下的檔案的最末行：&lt;br /&gt;/etc/apt/sources.list&lt;br /&gt;&lt;br /&gt;將 sources.list 存檔，關閉。&lt;br /&gt;回到該 PPA 的 Launchpad 網頁（PPA's overview page），&lt;br /&gt;找到類似底下字串的簽名金鑰（Signing key），例如它可能是：&lt;br /&gt;1024R/4E5E17B5&lt;br /&gt;＊注意：這只是例子，你要新增的 PPA 的金鑰跟上面那行字串可能是不同的。&lt;br /&gt;&lt;br /&gt;複製後面的 4E5E17B5，到終端機底下執行：&lt;br /&gt;&lt;pre class="brush:bash"&gt;sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 4E5E17B5&lt;br /&gt;＊注意：記得把 4E5E17B5 換成你真正要新增的 PPA 的金鑰。&lt;br /&gt;&lt;/pre&gt;最後，再執行一下：&lt;br /&gt;&lt;pre class="brush:bash"&gt;sudo apt-get update&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;---&lt;br /&gt;&lt;br /&gt;如果是使用桌面版的 Ubuntu，套件來源以及 PPA 的管理可以到：&lt;br /&gt;System -&gt; Administration -&gt; Software Source&lt;br /&gt;＊注：我是裝英文版 Ubuntu，我想中文應該是翻成：系統 -&gt; 管理 -&gt; 軟體來源&lt;br /&gt;&lt;br /&gt;---&lt;br /&gt;&lt;br /&gt;GPG（GNU Privacy Guard）&lt;br /&gt;&lt;br /&gt;GPG（或稱 GnuPG）是使用公開金鑰（Public Key）的加密系統。&lt;br /&gt;其中 OpenPGP、PGP、GPG/GnuPG 是三個不一樣的東西。&lt;br /&gt;&lt;br /&gt;OpenPGP 是一套加密技術的標準規範，並不是一套程式。&lt;br /&gt;PGP 是 Pretty Good Privacy 的縮寫，是根據 OpenPGP 規範實作的一套程式。&lt;br /&gt;GPG/GnuPG 是 GNU Privacy Guard 的縮寫，是根據 OpenPGP 規範實作的一套程式。&lt;br /&gt;&lt;br /&gt;Ubuntu 預設安裝的是 GPG/GnuPG，可以執行以下指令查看說明：&lt;br /&gt;gpg --help&lt;br /&gt;&lt;br /&gt;你可以 GPG 來產生自己的金鑰，可以加密電子郵件、製作電子簽名等等。&lt;br /&gt;Launchpad 也是使用 GPG 作加密驗證。&lt;br /&gt;&lt;br /&gt;GPG 的公鑰與私鑰是成對的。&lt;br /&gt;&lt;br /&gt;---&lt;br /&gt;&lt;br /&gt;透過 Proxy 來取得 gpg key：gpg --keyserver-options http-proxy --keyserver keyserver.ubuntu.com --recv-key E5267A6C&lt;br /&gt;&lt;br /&gt;keyserver 出狀況時，只好手動來了&lt;br /&gt;wiki.debian.org/SecureApt&lt;br /&gt;1] get the public key file&lt;br /&gt;2] apt-key add the_public_key_file&lt;br /&gt;&lt;br /&gt;---&lt;br /&gt;&lt;br /&gt;Reference：&lt;br /&gt;http://wiki.ubuntu-tw.org/index.php?title=Launchpad&lt;br /&gt;https://help.launchpad.net/Packaging/PPA&lt;br /&gt;https://help.ubuntu.com/community/GnuPrivacyGuardHowto&lt;br /&gt;http://wiki.debian.org.hk/w/Add_software_repositories_in_Ubuntu&lt;br /&gt;&lt;br /&gt;Further Reading：&lt;br /&gt;http://zh-tw.whygitisbetterthanx.com/&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18689056-2151923481431128446?l=zx-1986.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://zx-1986.blogspot.com/feeds/2151923481431128446/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://zx-1986.blogspot.com/2010/08/ppa-gpg.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18689056/posts/default/2151923481431128446'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18689056/posts/default/2151923481431128446'/><link rel='alternate' type='text/html' href='http://zx-1986.blogspot.com/2010/08/ppa-gpg.html' title='Launchapd PPA &amp; GPG'/><author><name>張旭</name><uri>https://profiles.google.com/105134833883146274095</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-pO0m_C6_zQw/AAAAAAAAAAI/AAAAAAAAD0c/h7KNyAUN14w/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18689056.post-3853430837922772133</id><published>2010-08-13T12:17:00.010+08:00</published><updated>2011-09-28T14:04:39.766+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ubuntu'/><title type='text'>Ubuntu 套件庫</title><content type='html'>類似 Ubuntu 的作業系統中（其實就是 Debian 系的 GNU/Linux 作業系統），&lt;br /&gt;軟體程式通常是使用 .deb 套件的方式來封裝，&lt;br /&gt;相對於 Red Hat 系的 GNU/Linux 作業系統就是使用 .rpm 套件。&lt;br /&gt;&lt;br /&gt;一個 .deb 套件通常包括了一個程式與其所需要的函式庫，可以透過網路或 CD 得到它們。&lt;br /&gt;而 Repositories（套件庫）則是專門儲存各式套件的伺服器，&lt;br /&gt;可以透過類似 Synaptic 的軟體來存取套件庫。&lt;br /&gt;或桌面左上角 Application（應用程式） -&gt; Ubuntu Software Center（Ubuntu 軟體中心）。&lt;br /&gt;&lt;br /&gt;Ubuntu 套件庫以四大類區分（＊可參考 reference 03）：&lt;br /&gt;Main - Ubuntu 官方支援的套件&lt;br /&gt;Restricted - Ubuntu 官方支援，但並非完全開源的套件&lt;br /&gt;Universe - 非 Ubuntu 官方支援，但是由自由社群維護著的套件&lt;br /&gt;Multiverse - 非開源套件&lt;br /&gt;&lt;br /&gt;Ubuntu 套件庫清單儲存在：&lt;br /&gt;&lt;pre class="brush: bash"&gt;/etc/apt/source.list&lt;/pre&gt;&lt;br /&gt;編輯前建議先使用以下指令備份：&lt;br /&gt;&lt;pre class="brush: bash"&gt;sudo cp /etc/apt/sources.list /etc/apt/sources.list.backup&lt;/pre&gt;&lt;br /&gt;/etc/apt/source.list 的內容是許多類似下列的東西：&lt;br /&gt;&lt;pre class="brush: bash"&gt;# deb cdrom:[Ubuntu 10.04 LTS _Lucid Lynx_ - Release i386 (20100429)]/ lucid main restricted&lt;br /&gt;# See http://help.ubuntu.com/community/UpgradeNotes for how to upgrade to newer versions of the distribution.&lt;br /&gt;deb http://tw.archive.ubuntu.com/ubuntu/ lucid main restricted&lt;br /&gt;deb-src http://tw.archive.ubuntu.com/ubuntu/ lucid main restricted&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;# 開頭的是註解。&lt;br /&gt;deb 開頭，表示其包括了預先編譯或已編譯完成的套件執行檔，適合使用者。&lt;br /&gt;deb-src 開頭，表示其包括了套件的未編譯原始碼，適合開發者。&lt;br /&gt;在套件庫位址後空一格緊跟著的是 Ubuntu 的版本代號，例如：lucid、hardy。&lt;br /&gt;在版本代號後空一格緊跟著的是套件庫的四大分類名稱，可以填很多個，使用空格分開。&lt;br /&gt;&lt;br /&gt;要刪除某些套件庫位址，可以在其位址最前加上 # 號，或將其整列刪除。&lt;br /&gt;&lt;br /&gt;要新增某些套件庫位址，可以新增在 /etc/apt/source.list 檔案最末列之後。&lt;br /&gt;例如將以下內容加入 /etc/apt/source.list 將其存檔關閉：&lt;br /&gt;&lt;pre class="brush: bash"&gt;deb http://ppa.launchpad.net/chromium-daily/ppa/ubuntu lucid main &lt;br /&gt;deb-src http://ppa.launchpad.net/chromium-daily/ppa/ubuntu lucid main&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;以上例子是加入 PPA 套件庫，所以還必須讓系統記錄該 PPA 套件庫的公開金鑰，&lt;br /&gt;從該 PPA 套件庫的 Launchpad 網頁取得金鑰後，假設是：&lt;br /&gt;&lt;pre class="brush: bash"&gt;4E5E17B5&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;則執行：&lt;br /&gt;&lt;pre class="brush: bash"&gt;#&lt;br /&gt;sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 4E5E17B5&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;然後執行：&lt;br /&gt;&lt;pre class="brush: bash"&gt;sudo apt-get update &amp;&amp; sudo apt-get upgrade&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;若順利執行完成則代表套件庫新增成功。&lt;br /&gt;&lt;br /&gt;Ubuntu  9.10 之後，可以使用 add-apt-repository 工具，新增 PPA 套件庫更為簡單。&lt;br /&gt;若無此工具，可以執行以下指令安裝：&lt;br /&gt;&lt;pre class="brush: bash"&gt;sudo apt-get install python-software-properties&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;使用 add-apt-repository 新增套件庫時，可以執行以下指令：&lt;br /&gt;&lt;pre class="brush: bash"&gt;sudo add-apt-repository ppa:[repository-name]&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;其中 [repository-name] 從 Launchpad 頁面取得，通常是一個 Launchpad 帳號。&lt;br /&gt;有時候會加一個 /，後面指定該 Launchpad 帳號下的某個套件庫分支（branch），&lt;br /&gt;例如：&lt;br /&gt;ppa:chromium-daily/stable&lt;br /&gt;&lt;br /&gt;任何時候修改完 /etc/apt/source.list，請務必執行 sudo apt-get update 檢查。&lt;br /&gt;&lt;br /&gt;Reference：&lt;br /&gt;01. https://help.ubuntu.com/community/Repositories&lt;br /&gt;02. https://help.ubuntu.com/community/Repositories/Ubuntu&lt;br /&gt;03. http://www.ubuntu.com/project/about-ubuntu/components&lt;br /&gt;04. https://help.ubuntu.com/community/Repositories/CommandLine&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18689056-3853430837922772133?l=zx-1986.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://zx-1986.blogspot.com/feeds/3853430837922772133/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://zx-1986.blogspot.com/2010/08/ubuntu-repositories.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18689056/posts/default/3853430837922772133'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18689056/posts/default/3853430837922772133'/><link rel='alternate' type='text/html' href='http://zx-1986.blogspot.com/2010/08/ubuntu-repositories.html' title='Ubuntu 套件庫'/><author><name>張旭</name><uri>https://profiles.google.com/105134833883146274095</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-pO0m_C6_zQw/AAAAAAAAAAI/AAAAAAAAD0c/h7KNyAUN14w/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18689056.post-1376491880688674673</id><published>2008-11-02T12:07:00.015+08:00</published><updated>2010-03-22T01:37:01.223+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><title type='text'>zx1986's LAMP Guide (2008/11/02)</title><content type='html'>＃即將安裝的路徑預定為：&lt;br /&gt;　Apache 裝在 /imhere/apache2/&lt;br /&gt;　MySQL 裝在 /imere/mysql5/&lt;br /&gt;　PHP 裝在 /imere/php5/&lt;br /&gt;　Apache 的預設檔案路徑將設為 /imhere/www/&lt;br /&gt;　&lt;br /&gt;＃先將所有檔案下載至 /imhere/LAMP 下：&lt;br /&gt;　tar zxvf *.tar.gz 解壓縮；&lt;br /&gt;　tar jxvf *.tar.bz2 解壓縮。&lt;br /&gt;　[x = extract (from Archive)]&lt;br /&gt;　[z / j = gzip / bzip2 compressed , and now need to be uncompressed]&lt;br /&gt;&lt;br /&gt;＃下文「藍色」部份為指令碼（command line）&lt;br /&gt;&lt;br /&gt;-----------------------------------------------&lt;br /&gt;＃安裝 mysql-5.1.23-rc&lt;br /&gt;　&lt;br /&gt;01、Shell&gt; &lt;span class="Apple-style-span" style="color: rgb(51, 102, 255);"&gt;tar zxvf /imhere/LAMP/mysql-5.1.29-rc.tar.gz&lt;/span&gt;&lt;br /&gt;　&lt;br /&gt;02、Shell&gt; &lt;span class="Apple-style-span" style="color: rgb(51, 102, 255);"&gt;cd /imhere/LAMP/mysql-5.1.29-rc&lt;/span&gt;&lt;br /&gt;　&lt;br /&gt;03、Shell&gt; &lt;span class="Apple-style-span" style="color: rgb(51, 102, 255);"&gt;./configure --prefix=/imhere/mysql5 --localstatedir=/imhere/mysql5/var&lt;/span&gt;&lt;br /&gt;　　[--prefix : 設定 MySQL 安裝路徑]&lt;br /&gt;　　[--localstatedir : MySQL 資料庫的資料檔存放的目錄]&lt;br /&gt;　&lt;br /&gt;04、Shell&gt; &lt;span class="Apple-style-span" style="color: rgb(51, 102, 255);"&gt;make&lt;/span&gt;&lt;br /&gt;　&lt;br /&gt;05、Shell&gt; &lt;span class="Apple-style-span" style="color: rgb(51, 102, 255);"&gt;make install&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;06、Shell&gt; &lt;span class="Apple-style-span" style="color: rgb(51, 102, 255);"&gt;/imhere/mysql5/bin/mysql_install_db&lt;/span&gt;&lt;br /&gt;　　MySQL 灌好之後，需先執行一個 Script。&lt;br /&gt;　　讓 MySQL 系統產生「mysql」這個資料庫及一些必要的 Tables (user , db, … 等)。&lt;br /&gt;　　這個 Script 順利執行後，將會在 /im/mysql5/ 下新增出一個 var 資料夾。&lt;br /&gt;　&lt;br /&gt;07、Shell&gt; &lt;span class="Apple-style-span" style="color: rgb(51, 102, 255);"&gt;chmod 700 /imhere/mysql5/share/mysql/mysql.server&lt;/span&gt;&lt;br /&gt;　　將 mysql.server 改成只有 Owner 才有權限的執行檔。&lt;br /&gt;　&lt;br /&gt;08、Shell&gt; &lt;span class="Apple-style-span" style="color: rgb(51, 102, 255);"&gt;adduser mysql&lt;/span&gt;&lt;br /&gt;　　新增一個 Linux 的系統帳號，名稱為： mysql。&lt;br /&gt;&lt;br /&gt;09、Shell&gt; &lt;span class="Apple-style-span" style="color: rgb(51, 102, 255);"&gt;chown -R mysql /imhere/mysql5/var&lt;/span&gt;&lt;br /&gt;　　此為 MySQL 資料庫的資料檔所在目錄，將其 Owner 設為剛剛新增的 mysql。&lt;br /&gt;　&lt;br /&gt;10、Shell&gt; &lt;span class="Apple-style-span" style="color: rgb(51, 102, 255);"&gt;/imhere/mysql5/share/mysql/mysql.server start&lt;/span&gt;&lt;br /&gt;　　啟動 MySQL 資料庫程式，出現「確定」即表示成功啟動。&lt;br /&gt;&lt;br /&gt;-----------------------------------------------&lt;br /&gt;＃安裝 httpd-2.2.8（Apache）&lt;br /&gt;　&lt;br /&gt;01、Shell&gt; &lt;span class="Apple-style-span" style="color: rgb(51, 102, 255);"&gt;tar zxvf /imhere/LAMP/httpd-2.2.10.tar.gz&lt;/span&gt;&lt;br /&gt;　&lt;br /&gt;02、Shell&gt; &lt;span class="Apple-style-span" style="color: rgb(51, 102, 255);"&gt;cd /imhere/LAMP/httpd-2.2.10&lt;/span&gt;&lt;br /&gt;　&lt;br /&gt;03、Shell&gt;&lt;span class="Apple-style-span" style="color: rgb(51, 102, 255);"&gt; ./configure --prefix=/imhere/apache2 --enable-so [--enable-ssl]&lt;/span&gt;&lt;br /&gt;　　[--prefix：設定 Apache 安裝路徑]&lt;br /&gt;　　[--enable-so：設定 Apache 啟動 so 模組，讓 Apache 能夠載入 shared modules (例如 PHP)]&lt;br /&gt;　　[--enable-ssl：是否開啟 ssl 連線功能，可以不開啟]&lt;br /&gt;　&lt;br /&gt;04、Shell&gt; &lt;span class="Apple-style-span" style="color: rgb(51, 102, 255);"&gt;make&lt;/span&gt;&lt;br /&gt;　&lt;br /&gt;05、Shell&gt; &lt;span class="Apple-style-span" style="color: rgb(51, 102, 255);"&gt;make install&lt;/span&gt;&lt;br /&gt;　&lt;br /&gt;06、Shell&gt; &lt;span class="Apple-style-span" style="color: rgb(51, 102, 255);"&gt;/imhere/apahce2/bin/apachectl start&lt;/span&gt;&lt;br /&gt;　　啟動 Apache，連線到 http://127.0.0.1，出現「It's Work!」即表示啟動成功。&lt;br /&gt;&lt;br /&gt;-----------------------------------------------&lt;br /&gt;＃以下組件請下載至 /imhere/LAMP 進行解壓縮並使用 tarball 安裝。&lt;br /&gt;＃安裝 GD（GD 為一組繪圖的 Library，可經由 PHP 呼叫，於網頁上即時繪圖）&lt;br /&gt;&lt;br /&gt;ａ」安裝 zlib（壓縮函式庫）&lt;br /&gt;01、Shell&gt; &lt;span class="Apple-style-span" style="color: rgb(51, 102, 255);"&gt;tar zxvf zlib-1.2.3.tar.gz&lt;/span&gt;&lt;br /&gt;02、Shell&gt; &lt;span class="Apple-style-span" style="color: rgb(51, 102, 255);"&gt;cd zlib-1.2.3&lt;/span&gt;&lt;br /&gt;03、Shell&gt; &lt;span class="Apple-style-span" style="color: rgb(51, 102, 255);"&gt;./configure&lt;/span&gt;&lt;br /&gt;04、Shell&gt; &lt;span class="Apple-style-span" style="color: rgb(51, 102, 255);"&gt;make&lt;/span&gt;&lt;br /&gt;05、Shell&gt; &lt;span class="Apple-style-span" style="color: rgb(51, 102, 255);"&gt;make install&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;ｂ」安裝 libpng（支援 png graphics format）&lt;br /&gt;01、Shell&gt; &lt;span class="Apple-style-span" style="color: rgb(51, 102, 255);"&gt;tar zxvf libpng-1.2.32.tar.gz&lt;/span&gt;&lt;br /&gt;02、Shell&gt; &lt;span class="Apple-style-span" style="color: rgb(51, 102, 255);"&gt;cd libpng-1.2.32&lt;/span&gt;&lt;br /&gt;03、Shell&gt;&lt;span class="Apple-style-span" style="color: rgb(51, 102, 255);"&gt; ./configure&lt;/span&gt;&lt;br /&gt;04、Shell&gt;&lt;span class="Apple-style-span" style="color: rgb(51, 102, 255);"&gt; make&lt;/span&gt;&lt;br /&gt;05、Shell&gt; &lt;span class="Apple-style-span" style="color: rgb(51, 102, 255);"&gt;make install&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;ｃ」安裝 jpeg-6b（支援 jpeg graphics format）&lt;br /&gt;01、Shell&gt; &lt;span class="Apple-style-span" style="color: rgb(51, 102, 255);"&gt;tar zxvf jpeg-6b.tar.gz&lt;/span&gt;&lt;br /&gt;02、Shell&gt; &lt;span class="Apple-style-span" style="color: rgb(51, 102, 255);"&gt;cd jpeg-6b&lt;/span&gt;&lt;br /&gt;03、Shell&gt; &lt;span class="Apple-style-span" style="color: rgb(51, 102, 255);"&gt;./configure&lt;/span&gt;&lt;br /&gt;04、Shell&gt; &lt;span class="Apple-style-span" style="color: rgb(51, 102, 255);"&gt;make&lt;/span&gt;&lt;br /&gt;05、Shell&gt; &lt;span class="Apple-style-span" style="color: rgb(51, 102, 255);"&gt;make install&lt;/span&gt;&lt;br /&gt;＊在 make install 時會出現錯誤，內容是找不到 /usr/local/man/man1 這個目錄，&lt;br /&gt;　而 jpeg 此安裝需 copy 一些說明手冊（manual）至此目錄，解決之道就是建這麼個目錄。&lt;br /&gt;　Shell&gt; &lt;span class="Apple-style-span" style="color: rgb(51, 102, 255);"&gt;mkdir /usr/local/man&lt;/span&gt;&lt;br /&gt;　Shell&gt; &lt;span class="Apple-style-span" style="color: rgb(51, 102, 255);"&gt;mkdir /usr/local/man/man1&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;ｄ」安裝 GD&lt;br /&gt;01、Shell&gt; &lt;span class="Apple-style-span" style="color: rgb(51, 102, 255);"&gt;tar zxvf gd-2.0.35.tar.gz&lt;/span&gt;&lt;br /&gt;02、Shell&gt; &lt;span class="Apple-style-span" style="color: rgb(51, 102, 255);"&gt;cd gd-2.0.35&lt;/span&gt;&lt;br /&gt;03、Shell&gt; &lt;span class="Apple-style-span" style="color: rgb(51, 102, 255);"&gt;./configure&lt;/span&gt;&lt;br /&gt;04、Shell&gt; &lt;span class="Apple-style-span" style="color: rgb(51, 102, 255);"&gt;make&lt;/span&gt;&lt;br /&gt;05、Shell&gt; &lt;span class="Apple-style-span" style="color: rgb(51, 102, 255);"&gt;make install&lt;/span&gt;&lt;br /&gt;　&lt;br /&gt;-----------------------------------------------&lt;br /&gt;＃安裝 php-5.2.5&lt;br /&gt;　&lt;br /&gt;01、Shell&gt;&lt;span class="Apple-style-span" style="color: rgb(51, 102, 255);"&gt; tar zxvf php-5.2.6.tar.gz&lt;/span&gt;&lt;br /&gt;　&lt;br /&gt;02、Shell&gt; &lt;span class="Apple-style-span" style="color: rgb(51, 102, 255);"&gt;cd php-5.2.6&lt;/span&gt;&lt;br /&gt;　&lt;br /&gt;03、Shell&gt; &lt;span class="Apple-style-span" style="color: rgb(51, 102, 255);"&gt;./configure --prefix=/imhere/php5 --with-config-file-path=/imhere/php5 --with-apxs2=/imhere/apache2/bin/apxs --with-mysql=/imhere/mysql5 --with-gd --with-jpeg-dir=/usr/local --with-png-dir=/usr/local --with-zlib-dir=/usr/local --enable-mbstring&lt;/span&gt;&lt;br /&gt;　　[--prefix：設定 PHP 安裝路徑]&lt;br /&gt;　　[--with-apxs2：代表希望安裝 PHP 成為 Apache 的 shared modules，並將該 modules 置於 /im/apache2/bin/apxs]&lt;br /&gt;　　[--with-config-file-path：設定 PHP 組態檔（php.ini）所在目錄]&lt;br /&gt;　　[--with-mysql：讓 PHP 支援 MySQL]&lt;br /&gt;　　[--with-gd / zlib / jpeg / png：讓 PHP 支援 GD，Zlib，Jpeg，PNG 等]&lt;br /&gt;　　[--enable-mbstring：讓 PHP 支援 multi-byte string ]&lt;br /&gt;　&lt;br /&gt;04、Shell&gt;&lt;span class="Apple-style-span" style="color: rgb(51, 102, 255);"&gt; make&lt;/span&gt;&lt;br /&gt;　&lt;br /&gt;05、Shell&gt; &lt;span class="Apple-style-span" style="color: rgb(51, 102, 255);"&gt;make install&lt;/span&gt;&lt;br /&gt;　&lt;br /&gt;06、Shell&gt;&lt;span class="Apple-style-span" style="color: rgb(51, 102, 255);"&gt; cp php.ini-dist /imhere/php5/php.ini&lt;/span&gt;&lt;br /&gt;　　將 PHP 的預設設定檔複製到 /im/php5 底下，並同時更名為：php.ini&lt;br /&gt;&lt;br /&gt;-----------------------------------------------&lt;br /&gt;＃設定 Apache（編輯 httpd.conf 檔）&lt;br /&gt;　&lt;br /&gt;01、Shell&gt;&lt;span class="Apple-style-span" style="color: rgb(51, 102, 255);"&gt; vi /imhere/apache2/conf/httpd.conf&lt;/span&gt;&lt;br /&gt;　　在檔案最末加入：AddType application/x-httpd-php .php .php3 .phtml&lt;br /&gt;　　加入這行的意思是讓 Apache 知道要處理的檔案是 php，php3，phtml 時，&lt;br /&gt;　　知道應該交給 PHP 模組來處理。&lt;br /&gt;　&lt;br /&gt;02、Shell&gt; &lt;span class="Apple-style-span" style="color: rgb(51, 102, 255);"&gt;vi /imhere/apache2/conf/httpd.conf&lt;/span&gt;&lt;br /&gt;　　搜尋「DirectoryIndex」，修改為：DirectoryIndex index.html index.php index.htm&lt;br /&gt;　　搜尋「DocumentRoot」，將路徑改為：DocumentRoot "/imhere/www"&lt;br /&gt;　　搜尋「htdoc」，修改為：/imhere/www&lt;br /&gt;　　（重新設定 DocumentRoot 的路徑，共需修改這「兩處」！）&lt;br /&gt;　&lt;br /&gt;03、編寫一個php測試檔案，內容為：&lt;br /&gt;&lt;br /&gt;&lt;code class="html"&gt; &amp;lt;?php&lt;br /&gt;phpinfo();&lt;br /&gt;?&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;　　另存至 /imhere/www/ 資料夾下，檔名為：index.php&lt;br /&gt;　&lt;br /&gt;03、Shell&gt; &lt;span class="Apple-style-span" style="color: rgb(51, 102, 255);"&gt;/imhere/apache2/bin/apachectl restart&lt;/span&gt;&lt;br /&gt;　　重新啟動 Apache，連線至 http://127.0.0.1，出現伺服器資訊頁面，即表示 PHP 與 Apache 正常運作。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18689056-1376491880688674673?l=zx-1986.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://zx-1986.blogspot.com/feeds/1376491880688674673/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://zx-1986.blogspot.com/2008/11/sun9s-lamp-guide-20081102-hard-disk.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18689056/posts/default/1376491880688674673'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18689056/posts/default/1376491880688674673'/><link rel='alternate' type='text/html' href='http://zx-1986.blogspot.com/2008/11/sun9s-lamp-guide-20081102-hard-disk.html' title='zx1986&apos;s LAMP Guide (2008/11/02)'/><author><name>張旭</name><uri>https://profiles.google.com/105134833883146274095</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-pO0m_C6_zQw/AAAAAAAAAAI/AAAAAAAAD0c/h7KNyAUN14w/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18689056.post-2299471138455429410</id><published>2008-04-04T13:43:00.012+08:00</published><updated>2010-03-22T01:37:01.223+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><title type='text'>zx1986's LAMP Guide (2008/04/04)</title><content type='html'>&lt;span style="font-weight: bold;font-family:arial;font-size:130%;"&gt;Hard Disk :  IBM 30GB (IDE)&lt;br /&gt;&lt;/span&gt;&lt;ul  style="font-family:arial;"&gt;&lt;li&gt;&lt;span style="font-weight: bold;font-size:130%;"&gt;    / : 14GB&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul  style="font-family:arial;"&gt;&lt;li&gt;&lt;span style="font-weight: bold;font-size:130%;"&gt;/swap : 1GB&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul  style="font-family:arial;"&gt;&lt;li&gt;&lt;span style="font-weight: bold;font-size:130%;"&gt;  /im : 15GB&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-family:arial;"&gt;-----------------------------------------------&lt;/span&gt;&lt;span style="color: rgb(51, 102, 255);font-family:arial;"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;br /&gt;＃即將安裝的路徑預定為：&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);font-family:arial;"&gt;　Apache 裝在 &lt;span style="color: rgb(255, 0, 0);"&gt;/im/apache2/&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);font-family:arial;"&gt;　MySQL 裝在&lt;span style="color: rgb(255, 0, 0);"&gt; /im/mysql5/&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0);font-family:arial;"&gt;　PHP 裝在 &lt;span style="color: rgb(255, 0, 0);"&gt;/im/php5/&lt;/span&gt;&lt;br /&gt;　Apache 的預設檔案路徑將設為 &lt;span style="color: rgb(255, 0, 0);"&gt;/im/www/&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0);font-family:arial;"&gt;　&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0);font-family:arial;"&gt;＃先將所有檔案&lt;span style="color: rgb(255, 0, 0);"&gt;下載至 /opt&lt;/span&gt; 下：&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0);font-family:arial;"&gt;　tar zxvf *.tar.gz 解壓縮；&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0);font-family:arial;"&gt;　tar jxvf *.tar.bz2 解壓縮。&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0);font-family:arial;"&gt;　[x = extract (from Archive)]&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);font-family:arial;"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;　[z / j = gzip / bzip2 compressed , and now need to be uncompressed]&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(51, 102, 255);font-family:arial;"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;＃下文&lt;/span&gt;「藍色」&lt;span style="color: rgb(0, 0, 0);"&gt;部份為指令碼（command line）&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:arial;"&gt;-----------------------------------------------&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;＃安裝 mysql-5.1.23-rc&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);font-family:arial;"&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;　&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 51, 51);"&gt;01、Shell&gt;&lt;/span&gt; tar zxvf mysql-5.1.23-rc.tar.gz&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);font-family:arial;"&gt;　&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;02、Shell&gt;&lt;/span&gt; cd /opt/mysql-5.1.23-rc&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);font-family:arial;"&gt;　&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;03、Shell&gt;&lt;/span&gt; ./configure --prefix=/im/mysql5 --localstatedir=/im/mysql5/var &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;　　[--prefix : 設定 MySQL 安裝路徑]&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;　　[--localstatedir : MySQL 資料庫的資料檔存放的目錄]&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;　&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);font-family:arial;"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;04、Shell&gt;&lt;/span&gt; make&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);font-family:arial;"&gt;　&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;05、Shell&gt;&lt;/span&gt; make install&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;06、&lt;/span&gt;&lt;span style="color: rgb(51, 102, 255);font-family:arial;"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;Shell&gt;&lt;/span&gt; /im/mysql5/bin/mysql_install_db&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:arial;"&gt;　　MySQL 灌好之後，需先執行一個 Script。&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;　　讓 MySQL 系統產生「mysql」這個資料庫及一些必要的 Tables (user , db, … 等)。&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;　　這個 Script 順利執行後，將會在 /im/mysql5/ 下新增出一個 var 資料夾。&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;　&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;07、&lt;/span&gt;&lt;span style="color: rgb(51, 102, 255);font-family:arial;"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;Shell&gt;&lt;/span&gt; chmod 700 /im/mysql5/share/mysql/mysql.server&lt;br /&gt;　　&lt;/span&gt;&lt;span style="font-family:arial;"&gt;將 mysql.server 改成只有 Owner 才有權限的執行檔。&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;　&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);font-family:arial;"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;08、&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(51, 102, 255);font-family:arial;"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;Shell&gt;&lt;/span&gt; adduser mysql&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:arial;"&gt;　　新增一個 Linux 的系統帳號，名稱為： mysql。&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;09、&lt;/span&gt;&lt;span style="color: rgb(51, 102, 255);font-family:arial;"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;Shell&gt;&lt;/span&gt; chown -R mysql /im/mysql5/var&lt;br /&gt;　　&lt;/span&gt;&lt;span style="font-family:arial;"&gt;此為 MySQL 資料庫的資料檔所在目錄，將其 Owner 設為剛剛新增的 mysql。&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;　&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;10、&lt;/span&gt;&lt;span style="color: rgb(51, 102, 255);font-family:arial;"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;Shell&gt; &lt;/span&gt;/im/mysql5/share/mysql/mysql.server start&lt;br /&gt;　　&lt;/span&gt;&lt;span style="font-family:arial;"&gt;啟動 MySQL 資料庫程式，出現「確定」即表示成功啟動。&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-family:arial;font-size:130%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:arial;"&gt;-----------------------------------------------&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;＃安裝 httpd-2.2.8（Apache）&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;　&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0);font-family:arial;"&gt;01、&lt;/span&gt;&lt;span style="color: rgb(51, 102, 255);font-family:arial;"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;Shell&gt;&lt;/span&gt; tar zxvf /opt/httpd-2.2.8.tar.gz&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);font-family:arial;"&gt;　&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;02、Shell&gt; &lt;/span&gt;cd /opt/httpd-2.2.8&lt;br /&gt;　&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;03、&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(51, 102, 255);font-family:arial;"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;Shell&gt;&lt;/span&gt; ./configure --prefix=/im/apache2 --enable-so [--enable-ssl]&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;　　[--prefix：設定 Apache 安裝路徑]&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;　　[--enable-so：設定 Apache 啟動 so 模組，讓 Apache 能夠載入 shared modules (例如 PHP)]&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;　　[--enable-ssl：是否開啟 ssl 連線功能，可以不開啟]&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;　&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;04、Shell&gt; &lt;/span&gt;&lt;span style="color: rgb(51, 102, 255);font-family:arial;"&gt;make&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;　&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;05、&lt;/span&gt;&lt;span style="color: rgb(51, 102, 255);font-family:arial;"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;Shell&gt; &lt;/span&gt;make install&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;　&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;06、Shell&gt; &lt;/span&gt;&lt;span style="color: rgb(51, 102, 255);font-family:arial;"&gt;/im/apahce2/bin/apachectl start&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;　　啟動 Apache，連線到 http://127.0.0.1，出現「It's Work!」即表示啟動成功。&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;-----------------------------------------------&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);font-family:arial;font-size:100%;"&gt;＃&lt;/span&gt;&lt;span style="font-family:arial;"&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;以下組件請下載至 /usr/local 進行解壓縮並使用 tarball 安裝。&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:arial;"&gt;＃安裝 GD（GD 為一組繪圖的 Library，可經由 PHP 呼叫，於網頁上即時繪圖）&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;ａ」安裝 zlib（壓縮函式庫）&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);font-family:arial;"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;01、Shell&gt;&lt;/span&gt; tar zxvf zlib-1.2.3.tar.gz&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);font-family:arial;"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;02、Shell&gt;&lt;/span&gt; cd zlib-1.2.3&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);font-family:arial;"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;03、Shell&gt;&lt;/span&gt; ./configure&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);font-family:arial;"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;04、Shell&gt;&lt;/span&gt; make&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);font-family:arial;"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;05、Shell&gt;&lt;/span&gt; make install&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;ｂ」安裝 libpng（支援 png graphics format）&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);font-family:arial;"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;01、Shell&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(51, 102, 255);font-family:arial;"&gt; tar zxvf libpng-1.2.25.tar.gz&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);font-family:arial;"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;02、Shell&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(51, 102, 255);font-family:arial;"&gt; cd libpng-1.2.25&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);font-family:arial;"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;03、Shell&gt; &lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(51, 102, 255);font-family:arial;"&gt;./configure&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);font-family:arial;"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;04、Shell&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(51, 102, 255);font-family:arial;"&gt; make&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);font-family:arial;"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;05、Shell&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(51, 102, 255);font-family:arial;"&gt; make install&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;ｃ」安裝 jpeg-6b（支援 jpeg graphics format）&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);font-family:arial;"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;01、Shell&gt; &lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(51, 102, 255);font-family:arial;"&gt;tar zxvf jpegsrc.v6b.tar.gz&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);font-family:arial;"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;02、Shell&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(51, 102, 255);font-family:arial;"&gt; cd jpeg-6b&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);font-family:arial;"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;03、Shell&gt; &lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(51, 102, 255);font-family:arial;"&gt;./configure&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);font-family:arial;"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;04、Shell&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(51, 102, 255);font-family:arial;"&gt; make&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);font-family:arial;"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;05、Shell&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(51, 102, 255);font-family:arial;"&gt; make install&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:arial;"&gt;＊在 make install 時會出現錯誤，內容是找不到 /usr/local/man/man1 這個目錄，&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;　而 jpeg 此安裝需 copy 一些說明手冊（manual）至此目錄，解決之道就是建這麼個目錄。&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);font-family:arial;"&gt;　&lt;span style="color: rgb(0, 0, 0);"&gt;Shell&gt;&lt;/span&gt; mkdir /usr/local/man&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);font-family:arial;"&gt;　&lt;span style="color: rgb(0, 0, 0);"&gt;Shell&gt;&lt;/span&gt; mkdir /usr/local/man/man1&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;ｄ」安裝 GD&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);font-family:arial;"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;01、Shell&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(51, 102, 255);font-family:arial;"&gt; tar zxvf gd-2.0.35.tar.gz&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);font-family:arial;"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;02、Shell&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(51, 102, 255);font-family:arial;"&gt; cd gd-2.0.35&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);font-family:arial;"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;03、Shell&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(51, 102, 255);font-family:arial;"&gt; ./configure&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);font-family:arial;"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;04、Shell&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(51, 102, 255);font-family:arial;"&gt; make&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);font-family:arial;"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;05、Shell&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(51, 102, 255);font-family:arial;"&gt; make install&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;　&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;-----------------------------------------------&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;＃安裝 php-5.2.5&lt;/span&gt;&lt;span style="color: rgb(51, 102, 255);font-family:arial;"&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;&lt;br /&gt;　&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;01、Shell&gt;&lt;/span&gt; tar zxvf php-5.2.5.tar.gz&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);font-family:arial;"&gt;　&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;02、Shell&gt;&lt;/span&gt; cd /opt/php-5.2.5&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);font-family:arial;"&gt;　&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;03、Shell&gt;&lt;/span&gt; ./configure --prefix=/im/php5 --with-config-file-path=/im/php5&lt;/span&gt;&lt;span style="color: rgb(51, 102, 255);font-family:arial;"&gt; --with-apxs2=/im/apache2/bin/apxs --with-mysql=/im/mysql5&lt;/span&gt;&lt;span style="color: rgb(51, 102, 255);font-family:arial;"&gt; --with-gd --with-jpeg-dir=/usr/local --with-png-dir=/usr/local&lt;/span&gt;&lt;span style="color: rgb(51, 102, 255);font-family:arial;"&gt; --with-zlib-dir=/usr/local --enable-mbstring&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:arial;"&gt;　　[--prefix：設定 PHP 安裝路徑]&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;　　[--with-apxs2：代表希望安裝 PHP 成為 Apache 的 shared modules，並將該 modules 置於 /im/apache2/bin/apxs]&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;　　[--with-config-file-path：設定 PHP 組態檔（php.ini）所在目錄]&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;　　[--with-mysql：讓 PHP 支援 MySQL]&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;　　[--with-gd / zlib / jpeg / png：讓 PHP 支援 GD，Zlib，Jpeg，PNG 等]&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;　　[--enable-mbstring：讓 PHP 支援 multi-byte string ]&lt;/span&gt;&lt;span style="color: rgb(51, 102, 255);font-family:arial;"&gt;&lt;br /&gt;　&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;04、Shell&gt;&lt;/span&gt; make&lt;br /&gt;　&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;05、Shell&gt;&lt;/span&gt; make install&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;　&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0);font-family:arial;"&gt;06、&lt;/span&gt;&lt;span style="color: rgb(51, 102, 255);font-family:arial;"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;Shell&gt; &lt;/span&gt;cp php.ini-dist /im/php5/php.ini&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;　　將 PHP 的預設設定檔複製到 /im/php5 底下，並同時更名為：php.ini&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;-----------------------------------------------&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;＃設定 Apache（編輯 httpd.conf 檔）&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;　&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0);font-family:arial;"&gt;01、&lt;/span&gt;&lt;span style="color: rgb(51, 102, 255);font-family:arial;"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;Shell&gt;&lt;/span&gt; vi /im/apache2/conf/httpd.conf&lt;br /&gt;　　&lt;span style="color: rgb(0, 0, 0);"&gt;在檔案最末加入&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;：&lt;/span&gt;AddType application/x-httpd-php .php .php3 .phtml&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;　　加入這行的意思是讓 Apache 知道要處理的檔案是 php，php3，phtml 時，&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;　　知道應該交給 PHP 模組來處理。&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;　&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0);font-family:arial;"&gt;02、&lt;/span&gt;&lt;span style="color: rgb(51, 102, 255);font-family:arial;"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;Shell&gt;&lt;/span&gt; vi /im/apache2/conf/httpd.conf &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);font-family:arial;"&gt;　　&lt;/span&gt;&lt;span style="color: rgb(51, 102, 255);font-family:arial;"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;搜尋「DirectoryIndex」，修改為：&lt;span style="color: rgb(255, 0, 0);"&gt;DirectoryIndex index.html index.php index.htm&lt;/span&gt; &lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);font-family:arial;"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;　　搜尋&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);font-family:arial;"&gt;「DocumentRoot」，將路徑改為：&lt;/span&gt;&lt;span style="color: rgb(51, 102, 255);font-family:arial;"&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;DocumentRoot "/im/www"&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);font-family:arial;"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;　　搜尋「htdoc」，修改為：&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;/&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;im/www&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);font-family:arial;"&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;　　&lt;span style="color: rgb(0, 0, 0);"&gt;（&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;重新設定 DocumentRoot 的路徑，共需修改這&lt;/span&gt;「兩處」&lt;span style="color: rgb(0, 0, 0);"&gt;！）&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:arial;"&gt;　&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;03、編寫一個測試檔案，內容為（&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);font-family:arial;"&gt;請自行修改成半形英文！&lt;/span&gt;&lt;span style="font-family:arial;"&gt;）：&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 0, 0);font-family:arial;"&gt;　　&lt;？ｐｈｐ&lt;span style="color: rgb(255, 0, 0);"&gt;&lt;br /&gt;　　　　ｐｈｐｉｎｆｏ();&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;　　？&gt;&lt;/span&gt;&lt;br /&gt;　　&lt;span style="color: rgb(0, 0, 0);"&gt;另存至 /im/www/ 資料夾下，檔名為：index.php&lt;/span&gt;&lt;br /&gt;　&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;03、Shell&gt;&lt;/span&gt; &lt;span style="color: rgb(51, 102, 255);"&gt;/im/apache2/bin/apachectl restart&lt;/span&gt;&lt;br /&gt;　　&lt;span style="color: rgb(51, 51, 51);"&gt;重新啟動 Apache，連線至 http://127.0.0.1，出現伺服器資訊頁面，即表示 PHP 與 Apache 正常運作。&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:arial;"&gt;-----------------------------------------------&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 0, 0);font-family:arial;"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;＃安裝 phpMyAdmin-2.11.5.1&lt;/span&gt;&lt;br /&gt;　&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;01、Shell&gt;&lt;/span&gt; &lt;span style="color: rgb(51, 102, 255);"&gt;cd /im/www&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;　　切換到 /im/www 目錄底下。&lt;/span&gt;&lt;br /&gt;　&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;02、Shell&gt;&lt;/span&gt; &lt;span style="color: rgb(51, 102, 255);"&gt;tar zxvf /usr/local/phpMyAdmin-2.11.5.1.tar.gz&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;　　將 phpMyAdmin 直接解壓縮到 /im/www。&lt;/span&gt;&lt;br /&gt;　&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;03、使用網頁瀏覽器連線到 http://127.0.0.1/phpMyAdmin，使用預設無密碼的 root 登入，即可使用。&lt;br /&gt;　　&lt;span style="color: rgb(255, 0, 0);"&gt;登入後請務必使用 phpMyAdmin 的「權限」功能為 root 新增一個密碼！&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18689056-2299471138455429410?l=zx-1986.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://zx-1986.blogspot.com/feeds/2299471138455429410/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://zx-1986.blogspot.com/2008/04/sun9s-lamp-guide-20080404.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18689056/posts/default/2299471138455429410'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18689056/posts/default/2299471138455429410'/><link rel='alternate' type='text/html' href='http://zx-1986.blogspot.com/2008/04/sun9s-lamp-guide-20080404.html' title='zx1986&apos;s LAMP Guide (2008/04/04)'/><author><name>張旭</name><uri>https://profiles.google.com/105134833883146274095</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-pO0m_C6_zQw/AAAAAAAAAAI/AAAAAAAAD0c/h7KNyAUN14w/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18689056.post-6948611242687090399</id><published>2008-01-11T12:06:00.001+08:00</published><updated>2010-03-22T01:37:01.224+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><title type='text'>zx1986's LAMP Guide (2008/01/11)</title><content type='html'>﹍﹍﹍﹍﹍﹍﹍﹍﹍﹍﹍﹍﹍﹍﹍﹍﹍﹍﹍﹍﹍&lt;br /&gt;　&lt;br /&gt;＃使用 VMWare 5 安裝 Linux [Fedora 8 i386]。&lt;br /&gt;　&lt;br /&gt;01、安裝 VMWare 5。&lt;br /&gt;　&lt;br /&gt;02、使用預設值新增「New Virtual Machine」。&lt;br /&gt;　　作業系統類型修改為「Other Linux」。&lt;br /&gt;　　&lt;span style="color: rgb(255, 0, 0);"&gt;建議將虛擬硬碟調整為 10GB！&lt;/span&gt;&lt;br /&gt;　　將新機器命名為「fedora8」。&lt;br /&gt;　&lt;br /&gt;03、建議調整「fedora8」的記憶體至少為 512MB。&lt;br /&gt;　&lt;br /&gt;04、「fedora8」開機的時候，按 F2 進入 BIOS 畫面，到 Boot 選項將「光碟機」設為優先開機裝置。&lt;br /&gt;　&lt;br /&gt;05、放入 Linux 光碟，將「fedora8」重開機，進入 Linux 的安裝畫面。&lt;br /&gt;　&lt;br /&gt;06、直接按 Enter 進入 Linux 的圖形安裝介面，跳過光碟檢查（Skip CD Check）。&lt;br /&gt;　&lt;br /&gt;07、設定完語系和鍵盤後，會去抓取硬碟，如果出現類似格式化的問題，按下「確定」執行格式化。&lt;br /&gt;　&lt;br /&gt;08、順利讀取到「fedora8」的虛擬硬碟應該有 &lt;span style="color: rgb(255, 0, 0);"&gt;10GB&lt;/span&gt;，選擇「刪除所有 Partitions」，並勾選「現在分割硬碟」選項。&lt;br /&gt;　&lt;br /&gt;09、如果讀取的虛擬硬碟預先便有分割設定，將其全部刪除，讓整顆虛擬硬碟完全恢復到未配置的狀態。&lt;br /&gt;　&lt;br /&gt;10、以此例來說，我們將要配置三個 Partitions，分別掛載：「&lt;span style="color: rgb(255, 0, 0);"&gt;/&lt;/span&gt;」、「&lt;span style="color: rgb(255, 0, 0);"&gt;swap&lt;/span&gt;」、「&lt;span style="color: rgb(255, 0, 0);"&gt;/im&lt;/span&gt;」。&lt;br /&gt;　&lt;br /&gt;11、「/」設為 &lt;span style="color: rgb(255, 0, 0);"&gt;8GB&lt;/span&gt; (ext3)，「swap」設為 512MB (swap)，剩下空間 (ext3) 配置給「/im」。&lt;br /&gt;　&lt;br /&gt;12、「開機管理程式 (GRUB)」、「網路設定」皆使用預設值，「主機名稱」則可以修改成自己喜歡的。&lt;br /&gt;　&lt;br /&gt;13、設定時區請選擇「亞洲/台北」，不要勾選「UTC 時間」。&lt;br /&gt;　&lt;br /&gt;14、設定 root 帳號的密碼，不得少於六個字元。&lt;br /&gt;　&lt;br /&gt;15、勾選三大類別的安裝套件，並選擇「立即自訂」。&lt;br /&gt;　&lt;br /&gt;16、桌面環境：擇一勾選即可。&lt;br /&gt;　　 應用程式：除了「遊戲娛樂」和「影音多媒體」，其他請全部勾選。&lt;br /&gt;　　 程式開發：全部勾選。&lt;br /&gt;　　 　伺服器：全部「不要」勾選！&lt;br /&gt;　　 基礎系統：除了「虛擬化」，全部勾選。&lt;br /&gt;　　 　　語言：選擇「繁體中文」即可。&lt;br /&gt;　&lt;br /&gt;17、選擇「下一步」之後，安裝程式會檢查所有欲安裝程式的關聯性，檢查完畢會自動進行安裝。&lt;br /&gt;　&lt;br /&gt;18、安裝完成後請取出 Linux 安裝光碟，第一次開機會進入設定畫面。&lt;br /&gt;　&lt;br /&gt;19、關閉「防火牆」，關閉「SELinux」，設定日期和時間，偵測音效卡，新增一位 root 以外的使用者。&lt;br /&gt;　&lt;br /&gt;20、開機後，使用 root 身份登入，到「系統」-&gt;「管理」-&gt;「網路」，依照自己的網路類型設定網路：&lt;br /&gt;　　＊使用 ADSL 連線者請新增一個「xDSL 連線」，並設定 ISP 提供的連線帳號、密碼。&lt;br /&gt;　　＊使用區域網路連線者請使用「乙太網路連線」，並設定 ip 位址、子網路遮罩、閘道器、DNS。&lt;br /&gt;　　&lt;span style="color: rgb(255, 0, 0);"&gt;＊設定網路時請先確定已經將 Windows 內建的防火牆關閉！&lt;/span&gt;&lt;br /&gt;　&lt;br /&gt;　&lt;br /&gt;﹍﹍﹍﹍﹍﹍﹍﹍﹍﹍﹍﹍﹍﹍﹍﹍﹍﹍﹍﹍﹍﹍﹍﹍﹍﹍﹍﹍﹍﹍﹍﹍﹍﹍﹍﹍﹍﹍﹍﹍﹍﹍&lt;br /&gt;　&lt;br /&gt;　&lt;br /&gt;＃MySQL 5 + PHP 5 + Apache2　[Tarball 安裝手冊]&lt;br /&gt;　&lt;br /&gt;＊Tarball 安裝的四大步驟：&lt;br /&gt;1」解壓縮&lt;br /&gt;2」./configure&lt;br /&gt;3」make&lt;br /&gt;4」make install&lt;br /&gt;　&lt;br /&gt;＊安裝順序和詳細的版本資訊（下載：&lt;a href="ftp://ftp.im.ncue.edu.tw/teachers/tkwu/apache"&gt;ftp://ftp.im.ncue.edu.tw/teachers/tkwu/apache&lt;/a&gt;）：&lt;br /&gt;　&lt;br /&gt;1」&lt;a href="ftp://ftp.im.ncue.edu.tw/teachers/tkwu/apache/mysql-5.1.22-rc.tar.gz"&gt;mysql-5.1.22-rc&lt;/a&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;　[rc：Release Candidate]&lt;/span&gt;&lt;br /&gt;　　↓&lt;br /&gt;2」&lt;a href="ftp://ftp.im.ncue.edu.tw/teachers/tkwu/apache/httpd-2.2.6.tar.bz2"&gt;httpd-2.2.6&lt;/a&gt;&lt;br /&gt;　　↓&lt;br /&gt;3」&lt;a href="ftp://ftp.im.ncue.edu.tw/teachers/tkwu/apache/zlib-1.2.3.tar.gz"&gt;zlib-1.2.3&lt;/a&gt;&lt;br /&gt;　　↓&lt;br /&gt;4」&lt;a href="ftp://ftp.im.ncue.edu.tw/teachers/tkwu/apache/libpng-1.2.16.tar.gz"&gt;libpng-1.2.16&lt;/a&gt;&lt;br /&gt;　　↓&lt;br /&gt;5」&lt;a href="ftp://ftp.im.ncue.edu.tw/teachers/tkwu/apache/jpegsrc.v6b.tar.gz"&gt;jpegsrc.v6b&lt;/a&gt;&lt;br /&gt;　　↓&lt;br /&gt;6」&lt;a href="ftp://ftp.im.ncue.edu.tw/teachers/tkwu/apache/gd-2.0.34.tar.gz"&gt;gd-2.0.34&lt;/a&gt;&lt;br /&gt;　　↓&lt;br /&gt;7」&lt;a href="ftp://ftp.im.ncue.edu.tw/teachers/tkwu/apache/php-5.2.4.tar.bz2"&gt;php-5.2.4&lt;/a&gt;&lt;br /&gt;　　↓&lt;br /&gt;8」&lt;a href="ftp://ftp.im.ncue.edu.tw/teachers/tkwu/apache/phpMyAdmin-2.9.2.tar.gz"&gt;phpMyAdmin-2.9.2&lt;/a&gt;&lt;br /&gt;　&lt;a href="ftp://ftp.im.ncue.edu.tw/teachers/tkwu/apache"&gt;&lt;/a&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;＃即將安裝的路徑預定為：&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;　Apache 裝在 &lt;span style="color: rgb(255, 0, 0);"&gt;/im/apache2/&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;　MySQL 裝在&lt;span style="color: rgb(255, 0, 0);"&gt; /im/mysql5/&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;　PHP 裝在 &lt;span style="color: rgb(255, 0, 0);"&gt;/im/php5/&lt;/span&gt;&lt;br /&gt;　Apache 的預設檔案路徑將設為 &lt;span style="color: rgb(255, 0, 0);"&gt;/im/www/&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;　&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;＃先將所有檔案&lt;span style="color: rgb(255, 0, 0);"&gt;下載至 /usr/local&lt;/span&gt; 下：&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;　tar zxvf *.tar.gz 解壓縮；&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;　tar jxvf *.tar.bz2 解壓縮。&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;　[x = extract (from Archive)]&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;　[z / j = gzip / bzip2 compressed , and now need to be uncompressed]&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;＃下文&lt;/span&gt;「藍色」&lt;span style="color: rgb(0, 0, 0);"&gt;部份為指令碼（command line）&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;　&lt;br /&gt;﹍﹍﹍﹍﹍﹍﹍﹍﹍﹍﹍﹍﹍﹍﹍﹍﹍﹍﹍﹍﹍&lt;br /&gt;　&lt;br /&gt;＃安裝 mysql-5.1.22-rc&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;　&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 51, 51);"&gt;01、Shell&gt;&lt;/span&gt; tar zxvf mysql-5.1.22-rc.tar.gz&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;　&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;02、Shell&gt;&lt;/span&gt; cd /usr/local/mysql-5.1.22-rc&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;　&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;03、Shell&gt;&lt;/span&gt; ./configure --prefix=/im/mysql5 --localstatedir=/im/mysql5/var &lt;/span&gt;&lt;br /&gt;　　[--prefix : 設定 MySQL 安裝路徑]&lt;br /&gt;　　[--localstatedir : MySQL 資料庫的資料檔存放的目錄]&lt;br /&gt;　&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;04、Shell&gt;&lt;/span&gt; make&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;　&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;05、Shell&gt;&lt;/span&gt; make install&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;06、&lt;span style="color: rgb(51, 102, 255);"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;Shell&gt;&lt;/span&gt; /im/mysql5/bin/mysql_install_db&lt;br /&gt;&lt;/span&gt;　　MySQL 灌好之後，需先執行一個 Script。&lt;br /&gt;　　讓 MySQL 系統產生「mysql」這個資料庫及一些必要的 Tables (user , db, … 等)。&lt;br /&gt;　　這個 Script 順利執行後，將會在 /im/mysql5/ 下新增出一個 var 資料夾。&lt;br /&gt;　&lt;br /&gt;07、&lt;span style="color: rgb(51, 102, 255);"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;Shell&gt;&lt;/span&gt; chmod 700 /im/mysql5/share/mysql/mysql.server&lt;br /&gt;　　&lt;/span&gt;將 mysql.server 改成只有 Owner 才有權限的執行檔。&lt;br /&gt;　&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;08、&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;Shell&gt;&lt;/span&gt; adduser mysql&lt;br /&gt;&lt;/span&gt;　　新增一個 Linux 的系統帳號，名稱為： mysql。&lt;br /&gt;&lt;br /&gt;09、&lt;span style="color: rgb(51, 102, 255);"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;Shell&gt;&lt;/span&gt; chown -R mysql /im/mysql5/var&lt;br /&gt;　　&lt;/span&gt;此為 MySQL 資料庫的資料檔所在目錄，將其 Owner 設為剛剛新增的 mysql。&lt;br /&gt;　&lt;br /&gt;10、&lt;span style="color: rgb(51, 102, 255);"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;Shell&gt; &lt;/span&gt;/im/mysql5/share/mysql/mysql.server start&lt;br /&gt;　　&lt;/span&gt;啟動 MySQL 資料庫程式，出現「確定」即表示成功啟動。&lt;br /&gt;　&lt;br /&gt;﹍﹍﹍﹍﹍﹍﹍﹍﹍﹍﹍﹍﹍﹍﹍﹍﹍﹍﹍﹍﹍&lt;br /&gt;　&lt;br /&gt;＃安裝 httpd-2.2.6（Apache）&lt;br /&gt;　&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;01、&lt;/span&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;Shell&gt;&lt;/span&gt; tar jxvf /usr/local/httpd-2.2.6.tar.bz2&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;　&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;02、Shell&gt; &lt;/span&gt;cd /usr/local/httpd-2.2.6&lt;br /&gt;　&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;03、&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;Shell&gt;&lt;/span&gt; ./configure --prefix=/im/apahce2 --enable-so [--enable-ssl]&lt;/span&gt;&lt;br /&gt;　　[--prefix：設定 Apache 安裝路徑]&lt;br /&gt;　　[--enable-so：設定 Apache 啟動 so 模組，讓 Apache 能夠載入 shared modules (例如 PHP)]&lt;br /&gt;　　[--enable-ssl：是否開啟 ssl 連線功能，可以不開啟]&lt;br /&gt;　&lt;br /&gt;04、Shell&gt; &lt;span style="color: rgb(51, 102, 255);"&gt;make&lt;/span&gt;&lt;br /&gt;　&lt;br /&gt;05、&lt;span style="color: rgb(51, 102, 255);"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;Shell&gt; &lt;/span&gt;make install&lt;/span&gt;&lt;br /&gt;　&lt;br /&gt;06、Shell&gt; &lt;span style="color: rgb(51, 102, 255);"&gt;/im/apahce2/bin/apachectl start&lt;/span&gt;&lt;br /&gt;　　啟動 Apache，連線到 http://127.0.0.1，出現「It's Work!」即表示啟動成功。&lt;br /&gt;　&lt;br /&gt;﹍﹍﹍﹍﹍﹍﹍﹍﹍﹍﹍﹍﹍﹍﹍﹍﹍﹍﹍﹍﹍&lt;br /&gt;　&lt;br /&gt;＃安裝 GD（GD 為一組繪圖的 Library，可經由 PHP 呼叫，於網頁上即時繪圖）&lt;br /&gt;&lt;br /&gt;ａ」安裝 zlib（壓縮函式庫）&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;01、Shell&gt;&lt;/span&gt; tar zxvf zlib-1.2.3.tar.gz&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;02、Shell&gt;&lt;/span&gt; cd zlib-1.2.3&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;03、Shell&gt;&lt;/span&gt; ./configure&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;04、Shell&gt;&lt;/span&gt; make&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;05、Shell&gt;&lt;/span&gt; make install&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;ｂ」安裝 libpng（支援 png graphics format）&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;01、Shell&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(51, 102, 255);"&gt; tar zxvf libpng-1.2.16.tar.gz&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;02、Shell&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(51, 102, 255);"&gt; cd libpng-1.2.16&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;03、Shell&gt; &lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;./configure&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;04、Shell&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(51, 102, 255);"&gt; make&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;05、Shell&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(51, 102, 255);"&gt; make install&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;ｃ」安裝 jpeg-6b（支援 jpeg graphics format）&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;01、Shell&gt; &lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;tar zxvf jpegsrc.v6b.tar.gz&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;02、Shell&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(51, 102, 255);"&gt; cd jpeg-6b&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;03、Shell&gt; &lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;./configure&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;04、Shell&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(51, 102, 255);"&gt; make&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;05、Shell&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(51, 102, 255);"&gt; make install&lt;br /&gt;&lt;/span&gt;＊在 make install 時會出現錯誤，內容是找不到 /usr/local/man/man1 這個目錄，&lt;br /&gt;　而 jpeg 此安裝需 copy 一些說明手冊（manual）至此目錄，解決之道就是建這麼個目錄。&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;　&lt;span style="color: rgb(0, 0, 0);"&gt;Shell&gt;&lt;/span&gt; mkdir /usr/local/man&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;　&lt;span style="color: rgb(0, 0, 0);"&gt;Shell&gt;&lt;/span&gt; mkdir /usr/local/man/man1&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;ｄ」安裝 GD&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;01、Shell&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(51, 102, 255);"&gt; tar zxvf gd-2.0.34.tar.gz&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;02、Shell&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(51, 102, 255);"&gt; cd gd-2.0.34&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;03、Shell&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(51, 102, 255);"&gt; ./configure&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;04、Shell&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(51, 102, 255);"&gt; make&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;05、Shell&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(51, 102, 255);"&gt; make install&lt;/span&gt;&lt;br /&gt;　&lt;br /&gt;﹍﹍﹍﹍﹍﹍﹍﹍﹍﹍﹍﹍﹍﹍﹍﹍﹍﹍﹍﹍﹍&lt;br /&gt;　&lt;br /&gt;＃安裝 php-5.2.4&lt;span style="color: rgb(51, 102, 255);"&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;&lt;br /&gt;　&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;01、Shell&gt;&lt;/span&gt; tar jxvf php-5.2.4.tar.bz2&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;　&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;02、Shell&gt;&lt;/span&gt; cd /usr/local/ php-5.2.4&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;　&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;03、Shell&gt;&lt;/span&gt; ./configure --prefix=/im/php5 --with-config-file-path=/im/php5&lt;/span&gt;&lt;span style="color: rgb(51, 102, 255);"&gt; --with-apxs2=/im/apache2/bin/apxs --with-mysql=/im/mysql5&lt;/span&gt;&lt;span style="color: rgb(51, 102, 255);"&gt; --with-gd --with-jpeg-dir=/usr/local --with-png-dir=/usr/local&lt;/span&gt;&lt;span style="color: rgb(51, 102, 255);"&gt; --with-zlib-dir=/usr/local --enable-mbstring&lt;br /&gt;&lt;/span&gt;　　[--prefix：設定 PHP 安裝路徑]&lt;br /&gt;　　[--with-apxs2：代表希望安裝 PHP 成為 Apache 的 shared modules，並將該 modules 置於 /im/apache2/bin/apxs]&lt;br /&gt;　　[--with-config-file-path：設定 PHP 組態檔（php.ini）所在目錄]&lt;br /&gt;　　[--with-mysql：讓 PHP 支援 MySQL]&lt;br /&gt;　　[--with-gd / zlib / jpeg / png：讓 PHP 支援 GD，Zlib，Jpeg，PNG 等]&lt;br /&gt;　　[--enable-mbstring：讓 PHP 支援 multi-byte string ]&lt;span style="color: rgb(51, 102, 255);"&gt;&lt;br /&gt;　&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;04、Shell&gt;&lt;/span&gt; make&lt;br /&gt;　&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;05、Shell&gt;&lt;/span&gt; make install&lt;/span&gt;&lt;br /&gt;　&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;06、&lt;/span&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;Shell&gt; &lt;/span&gt;cp php.ini-dist /im/php5/php.ini&lt;/span&gt;&lt;br /&gt;　　將 PHP 的預設設定檔複製到 /im/php5 底下，並同時更名為：php.ini&lt;br /&gt;　&lt;br /&gt;﹍﹍﹍﹍﹍﹍﹍﹍﹍﹍﹍﹍﹍﹍﹍﹍﹍﹍﹍﹍﹍&lt;br /&gt;　&lt;br /&gt;＃設定 Apache（編輯 httpd.conf 檔）&lt;br /&gt;　&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;01、&lt;/span&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;Shell&gt;&lt;/span&gt; vi /im/apache2/conf/httpd.conf&lt;br /&gt;　　&lt;span style="color: rgb(0, 0, 0);"&gt;在檔案最末加入&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;：&lt;/span&gt;AddType application/x-httpd-php .php .php3 .phtml&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;　　加入這行的意思是讓 Apache 知道要處理的檔案是 php，php3，phtml 時，&lt;br /&gt;　　知道應該交給 PHP 模組來處理。&lt;br /&gt;　&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;02、&lt;/span&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;Shell&gt;&lt;/span&gt; vi /im/apache2/conf/httpd.conf &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;　　&lt;/span&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;搜尋「DirectoryIndex」，修改為：&lt;span style="color: rgb(255, 0, 0);"&gt;DirectoryIndex index.html index.php index.htm&lt;/span&gt; &lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;　　搜尋&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;「DocumentRoot」，將路徑改為：&lt;/span&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;DocumentRoot "/im/www"&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;　　搜尋「htdoc」，修改為：&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;/&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;im/www&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;　　&lt;span style="color: rgb(0, 0, 0);"&gt;（&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;重新設定 DocumentRoot 的路徑，共需修改這&lt;/span&gt;「兩處」&lt;span style="color: rgb(0, 0, 0);"&gt;！）&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;　&lt;br /&gt;03、編寫一個測試檔案，內容為（&lt;span style="color: rgb(255, 0, 0);"&gt;請自行修改成半形英文！&lt;/span&gt;）：&lt;br /&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;　　&lt;？ｐｈｐ&lt;span style="color: rgb(255, 0, 0);"&gt;&lt;br /&gt;　　　　ｐｈｐｉｎｆｏ();&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;　　？&gt;&lt;/span&gt;&lt;br /&gt;　　&lt;span style="color: rgb(0, 0, 0);"&gt;另存至 /im/www/ 資料夾下，檔名為：index.php&lt;/span&gt;&lt;br /&gt;　&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;03、Shell&gt;&lt;/span&gt; &lt;span style="color: rgb(51, 102, 255);"&gt;/im/apache2/bin/apachectl restart&lt;/span&gt;&lt;br /&gt;　　&lt;span style="color: rgb(51, 51, 51);"&gt;重新啟動 Apache，連線至 http://127.0.0.1，出現伺服器資訊頁面，即表示 PHP 與 Apache 正常運作。&lt;/span&gt;&lt;br /&gt;　&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;﹍﹍﹍﹍﹍﹍﹍﹍﹍﹍﹍﹍﹍﹍﹍﹍﹍﹍﹍﹍﹍&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;　&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;＃安裝 phpMyAdmin-2.9.2&lt;/span&gt;&lt;br /&gt;　&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;01、Shell&gt;&lt;/span&gt; &lt;span style="color: rgb(51, 102, 255);"&gt;cd /im/www&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;　　切換到 /im/www 目錄底下。&lt;/span&gt;&lt;br /&gt;　&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;02、Shell&gt;&lt;/span&gt; &lt;span style="color: rgb(51, 102, 255);"&gt;tar zxvf /usr/local/phpMyAdmin-2.9.2.tar.gz&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;　　將 phpMyAdmin 直接解壓縮到 /im/www。&lt;/span&gt;&lt;br /&gt;　&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;03、使用網頁瀏覽器連線到 http://127.0.0.1/phpMyAdmin，使用預設無密碼的 root 登入，即可使用。&lt;br /&gt;　　&lt;span style="color: rgb(255, 0, 0);"&gt;登入後請務必使用 phpMyAdmin 的「權限」功能為 root 新增一個密碼！&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;　&lt;br /&gt;　&lt;br /&gt;　&lt;br /&gt;　&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18689056-6948611242687090399?l=zx-1986.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://zx-1986.blogspot.com/feeds/6948611242687090399/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://zx-1986.blogspot.com/2008/01/sun9s-lamp-guide.html#comment-form' title='1 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18689056/posts/default/6948611242687090399'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18689056/posts/default/6948611242687090399'/><link rel='alternate' type='text/html' href='http://zx-1986.blogspot.com/2008/01/sun9s-lamp-guide.html' title='zx1986&apos;s LAMP Guide (2008/01/11)'/><author><name>張旭</name><uri>https://profiles.google.com/105134833883146274095</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-pO0m_C6_zQw/AAAAAAAAAAI/AAAAAAAAD0c/h7KNyAUN14w/s512-c/photo.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18689056.post-1065745096420447872</id><published>2007-11-19T17:17:00.000+08:00</published><updated>2010-03-22T01:37:25.342+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><title type='text'>TKWu's Tarball Guide (2007/10/26)</title><content type='html'>MySQL 5.1.22-rc + PHP 5.2.4 + Apache 2.2.6 完整安裝手冊（Tarball安裝法）&lt;br /&gt;// PHP5 + Apache2 + MySQL5 安裝方法 For Linux / FreeBSD&lt;br /&gt;// Written by Tung-Kuang Wu&lt;br /&gt;// Updated 2007/10/26&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 51, 255);"&gt;/***&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 51, 255);"&gt;Apache 裝在 /www/&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 51, 255);"&gt;PHP 裝在 /www/php/&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 51, 255);"&gt;MySQL 裝在 /www/mysql/&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 51, 255);"&gt;***/&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;--&lt;br /&gt;1. 先將下列檔案拷貝至 /usr/local 下，並用：&lt;br /&gt;tar zxvf xxxxx.tar.gz 解壓縮；&lt;br /&gt;tar jxvf xxxxx.tar.bz2 解壓縮。&lt;br /&gt;[x = extract (from Archive)]&lt;br /&gt;[z / j = gzip / bzip2 compressed, and now need to be uncompressed]&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;以下軟體均可於 ftp://ftp.im.ncue.edu.tw/teachers/tkwu/apache/ 下載：&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;‧httpd-2.2.6.tar.bz2  (&lt;a href="http://www.apache.org/"&gt;http://www.apache.org/&lt;/a&gt;)&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;‧mysql-5.1.22-rc.tar.gz  (&lt;a href="http://www.mysql.com/"&gt;http://www.mysql.com/&lt;/a&gt;) [rc：Release Candidate]&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;‧php-5.2.4.tar.bz2  (&lt;a href="http://www.php.net/"&gt;http://www.php.net/&lt;/a&gt;)&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;‧phpMyAdmin-2.9.2.tar.gz  (&lt;a href="http://www.phpmyadmin.net/"&gt;http://www.phpmyadmin.net/&lt;/a&gt;)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;--&lt;br /&gt;2. 安裝 mysql-5.1.22-rc&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;//安裝之前，檢查 /etc/my.cnf，更改 datadir 與 socket 如下：&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;　datadir=/www/mysql/var　&lt;span style="color: rgb(0, 0, 0);"&gt;[假設安裝 mysql 於 /www/mysql ]&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;　socket=/tmp/mysql.sock&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Shell&gt; tar zxvf mysql-5.1.22-rc.tar.gz&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;Shell&gt; cd /usr/local/mysql-5.1.22-rc&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;Shell&gt; ./configure --prefix=/www/mysql --localstatedir=/www/mysql/var &lt;/span&gt;&lt;br /&gt;[--prefix : 設定 Mysql 安裝路徑]&lt;br /&gt;[--localstatedir : MySQL 的資料庫檔存放的目錄]&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;Shell&gt; make&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;Shell&gt; make install&lt;br /&gt;或&lt;br /&gt;Shell&gt; make ; make install&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;當 MySQL 灌好之後，需先執行一個 Script&lt;br /&gt;讓 MySQL 系統產生 mysql 這個資料庫及一些必要的 Tables (user , db, … 等)。&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;Shell&gt; /www/mysql/bin/mysql_install_db&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;建立好系統必要的 Grant Tables 之後我們就可以啟動 MySQL 資料庫。&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;Shell&gt; chmod 700 /www/mysql/share/mysql/mysql.server&lt;/span&gt;&lt;br /&gt;[將 mysql.server 改成可執行檔]&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;Shell&gt; adduser mysql&lt;/span&gt;&lt;br /&gt;[新增一個 mysql 帳號]&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;Shell&gt; chown -R mysql /www/mysql/var&lt;/span&gt;&lt;br /&gt;[此為MySQL資料庫的資料檔所在，設其 Owner 為 mysql ]&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;Shell&gt; /www/mysql/share/mysql/mysql.server start&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;Shell&gt; /www/mysql/bin/mysqladmin -u root password 'Your Password'&lt;/span&gt;&lt;br /&gt;[設定 root 存取 MySQL 之帳號密碼]&lt;br /&gt;&lt;br /&gt;--&lt;br /&gt;3. 安裝 Apache (httpd-2.2.6)&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;Shell&gt; tar jxvf /usr/local/httpd-2.2.6.tar.bz2&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;Shell&gt; cd /usr/local/httpd-2.2.6&lt;br /&gt;&lt;br /&gt;./configure --prefix=/www --enable-mods-shared=all --enable-module=so&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;Shell&gt; ./configure --prefix=/www --enable-so [--enable-ssl]&lt;/span&gt;&lt;br /&gt;[--prefix : 設定 Apache httpd 安裝路徑]&lt;br /&gt;[--enable-so : 告訴 Apache 啟動 so 模組，讓 Apache 能夠載入 shared modules (例如 PHP)]&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;&lt;br /&gt;Shell&gt; make; make install&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;--&lt;br /&gt;4. 安裝 GD&lt;br /&gt;[在灌 FreeBSD / Linux 時要安裝 C Development 和 Development Libaries]&lt;br /&gt;[gd 為一組繪圖的 Library, 可經由 PHP 呼叫, 於網頁上即時繪圖]&lt;br /&gt;&lt;br /&gt;a. 安裝 zlib (壓縮函式庫)&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;Shell&gt; tar zxvf zlib-1.2.3.tar.gz&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;Shell&gt; cd zlib-1.2.3&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;Shell&gt;./configure&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;Shell&gt; make&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;Shell&gt; make install&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;b. 安裝 libpng (png graphics format)&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;Shell&gt; tar zxvf libpng-1.2.16.tar.gz&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;Shell&gt; cd libpng-1.2.16&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;Shell&gt;./configure&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;Shell&gt; make&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;Shell&gt; make install&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;c. 安裝 jpeg-6b (jpeg graphics format)&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;Shell&gt; tar zxvf jpegsrc.v6b.tar.gz&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;Shell&gt; cd jpeg-6b&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;Shell&gt;./configure&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;Shell&gt; make&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;Shell&gt; make install&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;//在 make install 時會出現錯誤, 內容是找不到 /usr/local/man/man1 這個目錄，&lt;br /&gt;　而 jpeg 此安裝需 copy 一些說明手冊 (manual) 至此目錄，&lt;br /&gt;　解決之道就是建這麼個目錄 … (see below)&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;Shell&gt; mkdir /usr/local/man&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;Shell&gt; mkdir /usr/local/man/man1&lt;/span&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;d. 安裝 GD&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;Shell&gt; tar zxvf gd-2.0.34.tar.gz&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;Shell&gt; cd gd-2.0.34&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;Shell&gt;./configure&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;Shell&gt; make&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;Shell&gt; make install&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;&lt;/span&gt;&lt;br /&gt;--&lt;br /&gt;5. 安裝 php-5.2.4&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;&lt;br /&gt;Shell&gt;ln -s /usr/local/lib/libiconv.so.2 /usr/lib/libiconv.so.2&lt;br /&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;//For unknow reason，PHP configure procedure insists on looking&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;//for libiconv.so.2 in /usr/lib directory。So there we go ...&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;Shell&gt; tar jxvf php-5.2.4.tar.bz2&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;Shell&gt; cd /usr/local/ php-5.2.4&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;Shell&gt;./configure --prefix=/www/php --with-config-file-path=/www/php&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;--with-apxs2=/www/bin/apxs --with-mysql=/www/mysql&lt;/span&gt;&lt;span id="zoom"&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(51, 102, 255);"&gt; --with-gd --with-jpeg-dir=/usr/local --with-png-dir=/usr/local&lt;/span&gt;&lt;span style="color: rgb(51, 102, 255);"&gt; --with-zlib-dir=/usr/local --enable-mbstring&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;//Again，PHP configure seems to have some trouble including "iconv" library ...&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;//So there we go again ...&lt;/span&gt;&lt;br /&gt;Shell&gt;vi Makefile&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;　　　//... in around line 84&lt;br /&gt;　　　EXTRA_LIBS =&lt;span style="color: rgb(255, 0, 0);"&gt; -liconv&lt;/span&gt; -lcrypt ... (加上 -liconv)&lt;br /&gt;&lt;br /&gt;Shell&gt; make;make install&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;[--prefix : 設定 PHP 安裝路徑]&lt;br /&gt;[--with-apxs2 : 代表希望安裝 PHP 成為 Apache 的 shared modules，&lt;br /&gt;　　　　　　　並將該 modules 置於 /www/bin/apxs]&lt;br /&gt;[--with-config-file-path : 設定 PHP 組態檔 (php.ini) 所在目錄]&lt;br /&gt;[--with-mysql : 讓 PHP 支援 MySQL]&lt;br /&gt;[--with-gd / zlib / jpeg / png : 讓 PHP 支援 GD, Zlib, Jpeg, PNG 等]&lt;br /&gt;[--enable-mbstring：讓 PHP 支援 multi-byte string ]&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;Shell&gt; cp php.ini-dist /www/php/php.ini&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;--&lt;br /&gt;6. 在 httpd.conf 中加入以下&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;Shell&gt;vi /www/conf/httpd.conf&lt;br /&gt;　　　AddType application/x-httpd-php .php .php3 .phtml&lt;/span&gt;&lt;br /&gt;// 加入這行的意思是讓 Apache 知道當有使用者點選的 link 的 file extension 是&lt;br /&gt;　 php, php3, phtml (後兩者為早期 php 的 file extension) 時, 知道應該交給 PHP 模組來處理&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;Shell&gt;vi /www/conf/httpd.conf&lt;br /&gt;　　　DocumentRoot "/www/htdocs"&lt;br /&gt;　　　DirectoryIndex index.html index.php index.htm&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;//設定預設目錄與網頁&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;--&lt;br /&gt;7. 最後我們就可以啟動 Apache Web Server 了。&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;Shell&gt;/www/bin/apachectl start&lt;/span&gt;&lt;br /&gt;["/www" 需換成您當初--prefix 安裝 Apache 的目錄)]&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;--&lt;br /&gt;&lt;br /&gt;/***************************************************************/&lt;br /&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;Apache無法載入PHP 模組的問題&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;Shell&gt; apachectl start&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;　　　Syntax error on line 232 of /app/apache2.0.55/conf/httpd.conf:&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;　　　Cannot load /app/apache2.0.55/modules/libphp4.so into server: &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;&lt;br /&gt;　　　/app/apache2.0.55/modules/libphp4.so: cannot restore segment prot after&lt;/span&gt;&lt;span style="color: rgb(51, 102, 255);"&gt; reloc: Permission denied&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;總是無法載入 libphp4.so，這是 SELinux 的原因, 請將 SELinux 關了：&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;Shell&gt; vi /etc/selinux/config&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;找到這段：&lt;br /&gt;SELINUX = enforcing&lt;br /&gt;修改為：&lt;br /&gt;SELINUX=disabled&lt;br /&gt;然後再確認一下 /etc/sysconfig/selinux 中相同內容&lt;br /&gt;SELINUX = enforcing&lt;br /&gt;改為&lt;br /&gt;SELINUX=disabled (如果已經是 disabled 就不用改了)&lt;br /&gt;最後重啟系統，Apache啟動正常了!&lt;br /&gt;/***************************************************************/&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18689056-1065745096420447872?l=zx-1986.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.tkwu.net' title='TKWu&apos;s Tarball Guide (2007/10/26)'/><link rel='replies' type='application/atom+xml' href='http://zx-1986.blogspot.com/feeds/1065745096420447872/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://zx-1986.blogspot.com/2007/11/document-tkwus-tarball-guide-20071026.html#comment-form' title='1 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18689056/posts/default/1065745096420447872'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18689056/posts/default/1065745096420447872'/><link rel='alternate' type='text/html' href='http://zx-1986.blogspot.com/2007/11/document-tkwus-tarball-guide-20071026.html' title='TKWu&apos;s Tarball Guide (2007/10/26)'/><author><name>張旭</name><uri>https://profiles.google.com/105134833883146274095</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-pO0m_C6_zQw/AAAAAAAAAAI/AAAAAAAAD0c/h7KNyAUN14w/s512-c/photo.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18689056.post-3973753767954246429</id><published>2007-09-19T14:10:00.000+08:00</published><updated>2010-03-22T01:37:25.343+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><title type='text'>TKWu's Tarball Guide (2007/04/12)</title><content type='html'>MySQL 4.1.22 + PHP 4.4.6 + Apache 2.2.4 完整安裝手冊（Tarball安裝法）&lt;br /&gt;// PHP4 + Apache + MySQL 安裝方法  For Linux / FreeBSD&lt;br /&gt;// Written by Tung-Kuang Wu, 2007/03/25&lt;br /&gt;// Updated 2007/04/12, 17:18 PM&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 51, 255);"&gt;/***&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 51, 255);"&gt;Apache 裝在 /www/&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 51, 255);"&gt;PHP 裝在 /www/php/&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 51, 255);"&gt;  MySQL 則裝在 /www/mysql/&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 51, 255);"&gt;***/&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;--&lt;br /&gt;1. 先將下列檔案拷備至 /usr/local 下，並用 tar  zxvf  xxxxx.tar .gz 解壓縮。&lt;br /&gt;[x = extract (from Archive)]&lt;br /&gt;[z = compressed, and now need to be uncompressed]&lt;br /&gt;[以下軟體均可於  ftp://ftp.im.ncue.edu.tw/teachers/tkwu/apache/ 下載]&lt;br /&gt;‧httpd_2.2.4.tar .gz (http://www.apache.org/)&lt;br /&gt;‧mysql-4.1.22.tar .gz (http://www.mysql.com/)&lt;br /&gt;‧php-4.4.6.tar .gz (http://www.php.net/)&lt;br /&gt;‧phpMyAdmin-2.9.2.tar .gz (http://www.phpmyadmin.net/)&lt;br /&gt;&lt;br /&gt;--&lt;br /&gt;2. 安裝 mysql-4.1.22&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;Shell&gt; tar zxvf mysql-4.1.22.tar .gz&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;Shell&gt; cd /usr/local/mysql-4.1.22&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;Shell&gt; ./configure --prefix=/www/mysql --localstatedir=/www/mysql/var  &lt;/span&gt;&lt;br /&gt;[--prefix : 設定 Mysql 安裝路徑]&lt;br /&gt;[--localstatedir : MySQL 的資料庫檔存放的目錄]&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;Shell&gt; make&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;Shell&gt; make install 或 Shell&gt; make ; make install&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;當 MySQL 灌好之後，需先執行一個 Script&lt;br /&gt;讓 MySQL 系統產生 mysql 這個資料庫及一些必要的 Tables (user , db, … 等)。&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;Shell&gt; /www/mysql/bin/mysql_install_db&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;建立好系統必要的 Grant  Tables 之後我們就可以啟動 MySQL 資料庫。&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;Shell&gt; chmod 700 /www/mysql/share/mysql/mysql.server&lt;/span&gt;&lt;br /&gt;[將 mysql.server 改成可執行檔]&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;Shell&gt; adduser mysql&lt;/span&gt;&lt;br /&gt;[新增一個 mysql 帳號]&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;Shell&gt; chown -R mysql /www/mysql/var&lt;/span&gt;&lt;br /&gt;[此為MySQL資料庫的資料檔所在,設其 Owner 為 mysql ]&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;Shell&gt; /www/mysql/share/mysql/mysql.server start&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;Shell&gt; /www/mysql/bin/mysqladmin -u root password 'Your Password'&lt;/span&gt;&lt;br /&gt;[設定 root 存取 MySQL 之帳號密碼]&lt;br /&gt;&lt;br /&gt;--&lt;br /&gt;3. 安裝 GD&lt;br /&gt;[在灌  FreeBSD / Linux 時要安裝 C Development 和 Development Libaries]&lt;br /&gt;[gd 為一組繪圖的 Library, 可經由 PHP 呼叫, 於網頁上即時繪圖]&lt;br /&gt;&lt;br /&gt;a. 安裝 zlib&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;Shell&gt; tar zxvf zlib-1.2.3.tar .gz&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;Shell&gt; cd zlib-1.2.3&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;Shell&gt;./configure&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;Shell&gt; make&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;Shell&gt; make install&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;b. 安裝 libpng&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;Shell&gt; tar zxvf libpng-1.2.16.tar .gz&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;Shell&gt; cd libpng-1.2.16&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;Shell&gt;./configure&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;Shell&gt; make&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;Shell&gt; make install&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;c. 安裝 jpeg-6b&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;Shell&gt; tar zxvf jpegsrc.v6b.tar .gz&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;Shell&gt; cd jpeg-6b&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;Shell&gt;./configure&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;Shell&gt; make&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;Shell&gt; make install&lt;/span&gt;&lt;br /&gt;//　在 make  install 時會出現錯誤, 內容是找不到 /usr/local/man/man1 這個目錄,&lt;br /&gt;　　而 jpeg 此安裝需 copy 一些說明手冊 (manual) 至此目錄,&lt;br /&gt;　　解決之道就是建這麼個目錄 …  (see below)&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;Shell&gt; mkdir /usr/local/man&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;Shell&gt; mkdir /usr/local/man/man1&lt;/span&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;d. 安裝 GD&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;Shell&gt; tar zxvf gd-2.0.34.tar .gz&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;Shell&gt; cd gd-2.0.34&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;Shell&gt;./configure&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;Shell&gt; make&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;Shell&gt; make install&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;--&lt;br /&gt;4. 安裝 Apache  (httpd-2.2.4)&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;Shell&gt; tar jxvf /usr/local/httpd-2.2.4.tar .bz2&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;Shell&gt; cd /usr/local/httpd-2.2.4&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;Shell&gt; ./configure --prefix=/www --enable-so    [--enable-ssl]&lt;/span&gt;&lt;br /&gt;[--prefix : 設定 Apache httpd 安裝路徑]&lt;br /&gt;[--enable-so : 告訴 Apache 啟動 so 模組, 讓 Apache 能夠載入 shared modules (例如 PHP)]&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;Shell&gt; make; make install&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;--&lt;br /&gt;5. 安裝 php-4.4.6&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;Shell&gt; tar zxvf   php-4.4.6.tar .gz&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;Shell&gt; cd /usr/local/ php-4.4.6&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;Shell&gt;./configure --prefix=/www/php --with-config-file-path=/www/php&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;            --with-apxs2=/www/bin/apxs --with-mysql=/www/mysql&lt;/span&gt;&lt;span id="zoom"&gt; &lt;span style="color: rgb(255, 0, 0);"&gt;--enable-mbstring=all&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(51, 102, 255);"&gt; --with-gd&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;            --with-zlib-dir=/usr/local&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;Shell&gt; make;make install&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;[--prefix : 設定 PHP 安裝路徑]&lt;br /&gt;[--with-apxs2 : 代表希望安裝 PHP 成為 Apache 的 shared modules,&lt;br /&gt;　　　　　　　並將該 modules 置於 /www/bin/apxs]&lt;br /&gt;[--with-config-file-path : 設定 PHP 組態檔 (php.ini) 所在目錄]&lt;br /&gt;[--with-mysql : 讓 PHP 支援 MySQL]&lt;br /&gt;[--with-gd / zlib / jpeg / png : 讓 PHP 支援 GD, Zlib, Jpeg, PNG 等]&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;Shell&gt; cp php.ini-dist /www/php/php.ini&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;--&lt;br /&gt;6. 在 httpd.conf 中加入以下一行&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;AddType application/x-httpd-php .php .php3 .phtml&lt;/span&gt;&lt;br /&gt;// 加入這行的意思是讓 Apache 知道當有使用者點選的 link 的 file  extension 是&lt;br /&gt;　 php, php3, phtml (後兩者為早期 php 的 file  extension) 時, 知道應該交給 PHP 模組來處理&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;--&lt;br /&gt;7. 最後我們就可以啟動 Apache Web Server 了。&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;Shell&gt; /www/bin/apachectl start&lt;/span&gt;&lt;br /&gt;["/www" 需換成您當初--prefix 安裝 Apache 的目錄)]&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;--&lt;br /&gt;&lt;br /&gt;/***************************************************************/&lt;br /&gt;Apache無法載入PHP 模組的問題&lt;br /&gt;Shell&gt; apachectl start&lt;br /&gt;Syntax error on line 232 of /app/apache2.0.55/conf/httpd.conf:&lt;br /&gt;Cannot load /app/apache2.0.55/modules/libphp4.so  into  server:&lt;br /&gt;/app/apache2.0.55/modules/libphp4.so: cannot restore segment prot after&lt;br /&gt;reloc:  Permission  denied&lt;br /&gt;總是無法載入 libphp4.so，這是 SELinux 的原因, 請將 SELinux 關了:&lt;br /&gt;Shell&gt; vi /etc/selinux/config&lt;br /&gt;找到這段：&lt;br /&gt;S E L I N U X = e n f o r c i n g&lt;br /&gt;修改為：&lt;br /&gt;SELINUX=disabled&lt;br /&gt;然後再確認一下 /etc/sysconfig/selinux 中相同內容&lt;br /&gt;S E L I N U X = e n f o r c i n g&lt;br /&gt;改為&lt;br /&gt;SELINUX=disabled  (如果已經是 disabled 就不用改了)&lt;br /&gt;最後重啟系統, Apache啟動正常了!&lt;br /&gt;/***************************************************************/&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18689056-3973753767954246429?l=zx-1986.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.tkwu.net/' title='TKWu&apos;s Tarball Guide (2007/04/12)'/><link rel='replies' type='application/atom+xml' href='http://zx-1986.blogspot.com/feeds/3973753767954246429/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://zx-1986.blogspot.com/2007/09/document-tkwu-s-tarball-guide.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18689056/posts/default/3973753767954246429'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18689056/posts/default/3973753767954246429'/><link rel='alternate' type='text/html' href='http://zx-1986.blogspot.com/2007/09/document-tkwu-s-tarball-guide.html' title='TKWu&apos;s Tarball Guide (2007/04/12)'/><author><name>張旭</name><uri>https://profiles.google.com/105134833883146274095</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-pO0m_C6_zQw/AAAAAAAAAAI/AAAAAAAAD0c/h7KNyAUN14w/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18689056.post-113154437141318144</id><published>2005-11-09T21:51:00.003+08:00</published><updated>2010-08-13T15:39:24.837+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><title type='text'>重置 MBR</title><content type='html'>＊誠如 asou 桑所說，真的是光碟機（還是該說光碟呢）的問題！　　&lt;br /&gt;&lt;br /&gt;＊BIOS 的開機設定全是從光碟機開機（All boot from CD-R）。　&lt;br /&gt;&lt;br /&gt;＊用工具光碟開機，順利進入工具畫面。　&lt;br /&gt;&lt;br /&gt;＊利用裡面的 SPFdisk 做了一個動作：重置MBR　&lt;br /&gt;&lt;br /&gt;＊完成這個動作後，boot from Hard Disk ...　&lt;br /&gt;&lt;br /&gt;＊直接進入XP畫面了。&lt;br /&gt;&lt;br /&gt;＊重新開機。　&lt;br /&gt;&lt;br /&gt;＊先設定BIOS的開機順序： CD-R -&gt; Floppy -&gt; Hard Disk　&lt;br /&gt;&lt;br /&gt;＊順利開機，讀 CD-R -&gt; 讀 Floppy -&gt; 讀 Hard Disk　&lt;br /&gt;&lt;br /&gt;＊直接跳到XP的開機畫面，Good！　&lt;br /&gt;&lt;br /&gt;我猜：1。我已經把 LILO 成功的刪除了。　　　&lt;br /&gt;&lt;br /&gt;　　　2。這表示我可以找時間直接再 try 一次 Mandrake/Mandriva 10。　　　&lt;br /&gt;&lt;br /&gt;　　　3。RedHat 之後再說，據說除了曼陀羅，其他的發行版都會自動清理舊的開機程式。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18689056-113154437141318144?l=zx-1986.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://zx-1986.blogspot.com/feeds/113154437141318144/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://zx-1986.blogspot.com/2005/11/linux-mbr.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18689056/posts/default/113154437141318144'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18689056/posts/default/113154437141318144'/><link rel='alternate' type='text/html' href='http://zx-1986.blogspot.com/2005/11/linux-mbr.html' title='重置 MBR'/><author><name>張旭</name><uri>https://profiles.google.com/105134833883146274095</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-pO0m_C6_zQw/AAAAAAAAAAI/AAAAAAAAD0c/h7KNyAUN14w/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18689056.post-113154327997235820</id><published>2005-11-09T21:32:00.003+08:00</published><updated>2010-03-24T18:04:32.299+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><title type='text'>猴急重灌的結果</title><content type='html'>＊今天在圖書館看到一本「Mandrake 10 系統與架站」，當下連安裝片都帶回來了。&lt;br /&gt;&lt;br /&gt;＊試著用 asou 桑教的指令去嘗試進入 X window，失敗。&lt;br /&gt;&lt;br /&gt;＊結果和我之前亂試的那樣，差不多類似的文字跑出來。&lt;br /&gt;&lt;br /&gt;＊但這樣至少讓我猜到，startx 和 kde (小寫的 X window 名) 這些指令可能有相關。&lt;br /&gt;&lt;br /&gt;＊而且可以肯定我的 X windows 可能安裝失敗了。&lt;br /&gt;&lt;br /&gt;＃急著想要安裝 Mandrake10 之餘，在 WinXP 底下就把原本的 Linux 磁區整個刪掉了！&lt;br /&gt;　&lt;br /&gt;　磁碟管理 -&gt; 刪除磁碟分割 -&gt; 刪除磁碟配置&lt;br /&gt;&lt;br /&gt;＊放入 Mandrake10 的第一片重開機。&lt;br /&gt;&lt;br /&gt;＊LILO 重新跳出來的時候真是讓我追悔未及加驚嚇一百。&lt;br /&gt;&lt;br /&gt;＊果然，選擇 Linux 開機進去它是空的。&lt;br /&gt;&lt;br /&gt;＊重新設定 BIOS，全部的開機順序都是設成 CD-ROM。&lt;br /&gt;&lt;br /&gt;＊重開機，BIOS 跳到 Boot from CD-ROM ...&lt;br /&gt;&lt;br /&gt;＊直接跳過，跳到一行數字，磁碟機動了 ...&lt;br /&gt;&lt;br /&gt;＊又跳過，LILO 再次出現讓我驚嚇羞愧無言發愣無法靠北一百。&lt;br /&gt;&lt;br /&gt;＊好個 LInux's LOader！&lt;br /&gt;&lt;br /&gt;結論：１‧Linux 的有些指令長得不一樣但卻會有奇妙且合理的相關性。　　　&lt;br /&gt;　　　&lt;br /&gt;　　　２‧LILO (或者其他的開機管理程式) 是裝在 MBR (or else)，並沒有比 BIOS 大！&lt;br /&gt;&lt;br /&gt;︿可是很奇怪的是，LILO 不是安裝在 MBR 區的嗎！？&lt;br /&gt;&lt;br /&gt;︿MBR 是在硬碟上的呀！&lt;br /&gt;&lt;br /&gt;︿我的 BIOS 開機設定順序都是 CD-ROM ㄝ！&lt;br /&gt;&lt;br /&gt;︿為什麼還是會跳到硬碟！？&lt;br /&gt;&lt;br /&gt;︿而且 LILO 竟然沒有 boot from CD-ROM 選項＝..＝&lt;br /&gt;&lt;br /&gt;目前的窘境，上網找辦法解決中...&lt;br /&gt;http://fanqiang.chinaunix.net/a1/b1/20010827/1000001190_b.html&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18689056-113154327997235820?l=zx-1986.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://zx-1986.blogspot.com/feeds/113154327997235820/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://zx-1986.blogspot.com/2005/11/linux.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18689056/posts/default/113154327997235820'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18689056/posts/default/113154327997235820'/><link rel='alternate' type='text/html' href='http://zx-1986.blogspot.com/2005/11/linux.html' title='猴急重灌的結果'/><author><name>張旭</name><uri>https://profiles.google.com/105134833883146274095</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-pO0m_C6_zQw/AAAAAAAAAAI/AAAAAAAAD0c/h7KNyAUN14w/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18689056.post-113124930511752241</id><published>2005-11-06T11:54:00.000+08:00</published><updated>2005-11-06T11:55:05.123+08:00</updated><title type='text'>=..=</title><content type='html'>&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18689056-113124930511752241?l=zx-1986.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://zx-1986.blogspot.com/feeds/113124930511752241/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://zx-1986.blogspot.com/2005/11/blog-post.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18689056/posts/default/113124930511752241'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18689056/posts/default/113124930511752241'/><link rel='alternate' type='text/html' href='http://zx-1986.blogspot.com/2005/11/blog-post.html' title='=..='/><author><name>張旭</name><uri>https://profiles.google.com/105134833883146274095</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-pO0m_C6_zQw/AAAAAAAAAAI/AAAAAAAAD0c/h7KNyAUN14w/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry></feed>
