2009年8月21日 星期五

[Unix] 使用 Tarball 安裝 Apache + PHP @ FreeBSD

由於 lab 電腦得還回去,使得程式的開發無法在用 VMWare 了,因此,又回歸到在工作站架設自己需要的環境啦!順便要把自己降級,用用 Tarball 吧!說真的,這也是我覺得工作站好用之處。寫個筆記給自己。


安裝 Apache HTTPD



  1. 下載 HTTPD - http://httpd.apache.org/


  2. 解壓縮 # tar -xvf httpd-2.2.13.tar.gz ,之後就會在所在目錄蹦出 httpd-2.2.13/ 目錄

  3. 設定編譯等環境

    • # ./configure --prefix=/home/user/tmp_for_httpd --enable-so --enable-ssl

    • 如加入 https 的需求等



  4. 編譯和安裝

    • # make && make install



  5. 設定 httpd.conf

    • User / Group

    • Listen Port_Number

    • Include conf/extra/httpd-ssl.conf

    • 家目錄 DocumentRoot 等



  6. 產生憑證

    • # cd /home/user/tmp_for_httpd/conf

    • # openssl genrsa -des3 -out server.key 4096
      # openssl req -new -key server.key -out server.csr
      # openssl x509 -req -days 3650 -in server.csr -signkey server.key -out server.crt
      # openssl rsa -in server.key -out server.key

    • 記得在 chmod 600 server.key 吧

    • 另外,要跑的 https port 也要記得在 conf/extra/httpd-ssl.conf 修改

      • <VirtualHost _default_:HTTPS_Port>

      • ServerName www.example.com:HTTPS_Port

      • 家目錄 DocumentRoot 等





  7. 運行與測試

    • # /home/user/tmp_for_httpd/bin/apachectl start

    • # telnet localhost Port_Number

      • 連得上後,請打 GET / 即可,算是簡單的測試



    • 有任何問題,請留意 logs/error_log 訊息




安裝 PHP



  1. 下載 PHP - http://www.php.net/


  2. 解壓縮 # tar -xvf php-5.2.9.tar.bz2 ,之後就會在所在目錄蹦出 php-5.2.9/ 目錄

  3. 設定編譯等環境

    • # ./configure --with-apxs2=/home/user/tmp_for_httpd/bin/apxs --prefix=/home/user/tmp_for_php --without-pear --with-openssl --enable-mbstring --with-curl --with-imap --with-mcrypt --with-imap-ssl --with-gd

    • 此例為啟用 Curl 、OpenSSL、IMAP、mbstring、Mcrypt、GD 等函式庫,詳請請試著到 PHP 官網查尋,上頭都會敘述函式庫在編譯時要下什麼關鍵字。



  4. 編譯和安裝

    • # make && make install



  5. 修改 httpd.conf

    • AddType application/x-httpd-php .php

    • <IfModule dir_module>
          DirectoryIndex index.php index.html
      </IfModule>




以上就完成兩者的結合了,記得安裝完 PHP 或設定 PHP 完後,都要重新啟動 HTTPD 啦


比賽的開始與結束









終於走完 2009 趨勢雲端程式比賽,感觸良多,原先我只是想要在僅剩的學生生涯裡,透過比賽摸索自己的實作能力。一開始規劃參加Android跟趨勢比賽,但基於時間關係僅參加趨勢比賽,沒想到很幸運地通過趨勢的初賽(那時可還是口試前2個禮拜),並在複賽中經歷著 48 小時的努力,十分感謝隊友的付出,一起完成了這個足跡。


回顧起來,雖然對 Hadoop 不懂,但熱心的趨勢科技,主動開了幾堂課,因此稍稍地了解,只是面對著新穎的開發環境,常常讓自己困惑,像是演算法在此架構對不對、記憶體管控會不會爆掉等等的遲疑,多少影響開發信心與效率,這點又再一次驗證「思而不學則殆」的古語!凡事由基石建起,真的要花點時間了解 Hadoop 環境跟架構。


初賽期一開始花三天熟悉並使用 Java 語言和 Hadoop 環境,沒想到第四天又走使用 C/C++ streaming 的方式,最後花了一天做 Web 介面的流程掌控和報告。程式部分,主要提出一種資料儲存的設計,提出一次 Map & Reduce 做 Counting ,再一次 Map & Reduce 做 Sorting,以此完成 Term Counting & Sorting 服務,並保有一點點資料索引的特性。這就是初賽過程,除了報告上的應用呈述外,可能有實作 Web 介面而沾到點分數。儘管我們幾乎是在初賽那幾天才初探 Hadoop ,但基於老師在日常生活中教導的資料處理方式,讓我們很快地適應 Map & Reduce 架構,這應該算是另類的優勢吧。


複賽,還滿刺激的,很多題目甚至專有名詞我都搞不懂,只好先處理基本題目,再套上初賽的 Web 介面、流程,除此之外,初賽的程式完全沒用到了,比較慶幸的,賽前三天有稍微討論一下可能出題的方向,恰好想過如何處理差集的實作,再一次被幸運的女神眷顧啦。分工上比初賽更好,主要先解決幾題基本題跟網頁介面,其他重要議題的構想、實作、演算法驗證,則依序由隊友大力扛下啊,真是太讚了,以至於最後 8 小時工作效率大增,彼此的整合也更加順利。


連續 48 小時比賽,真的滿累的,比賽期間超過 24 小時沒睡。經過一天沉澱才越來越能接受手中的獎牌,而團體的努力是有加乘的效應的, 1 + 1 > 2 啊。比較深刻的回憶是比賽期間有段撞牆期,看不懂題目,只是不斷地實作出想要的工具或介面,幸運的是在倒數 8 小時內,像似打通任督二脈般地,一不會兒就用之前開發的工具整合出雛型。只是距離別隊還是有段小差距,大概就像別人的成果是 Product 而我們實作的就只能稱作 Project 吧!


anyway, 很高興有這份機會參加活動,希望自己能保有這份活力地面對未來的工作啦!


相關連結:



2009年8月15日 星期六

電影 變身西裝/帥哥西裝 - 主題曲 My Revolution









這首是電影變身西裝的主題曲,看完這齣戲讓我回想起韓劇大長今更深一層的意境,在電影中所呈現的:「變成最酷最帥的人,卻也是最爛的人」,讓我回想起大長今裡,那些追求著高位權力者。真巧,這部搭著大長今的渲染,中和起來真是不錯!


記得幾個月前,有稍微使用這個電影跟家人分享,關於外人第一眼還是看人外表的事情,不過,這則故事反而重心不在那邊,而是如何保有最初的幸福並好好珍惜。


2009年8月13日 星期四

未來~

前陣子因比賽關係,熬夜沒睡,倒是跟同學一起吃了早餐,那次大概是唯一一次跟大家吃早餐吧。記得第十九集的幽遊白書,似乎經歷許多大風大浪地,隨口地說出「未來」兩字…,現在的感覺,類似…儘管沒做出什麼大事業。









作詞:鍾成虎
作曲:盧廣仲

整個世界 停止 不轉動 很寂寞
走在海邊 數著 螢火蟲 好困惑
想要的生活怎麼有一百種
不想掉進這深深 漩渦

整個海洋 擺動 柔軟地 舉起我
孤獨給我 自由 猶豫得 好感動
想要的生活怎麼有一百種
該怎麼走 誰來告訴我 wow

每當我背對星空
抱著地球
發現自己其實脆弱 不敢說
當我背對星空
不斷摸索
愛情漸漸萎縮 我猜不透
無邊的宇宙 哪裡有我要的生活

整個海洋 擺動 柔軟地 舉起我
孤獨給我 自由 猶豫得 好感動
想要的生活怎麼有一百種
該怎麼走 誰來告訴我 wow

每當我背對星空
抱著地球
發現自己其實脆弱 不敢說
當我背對星空
不斷摸索
愛情漸漸萎縮 我猜不透
無邊的宇宙 哪裡有我(想)要的生活

每當我背對星空
抱著地球
發現自己其實脆弱 不敢說
當我背對星空
不斷摸索
愛情漸漸萎縮 我猜不透
無邊的宇宙 哪裡有我要的生活
原來一百種
要在很久很久以後才會懂


說真的,想要的生活沒規劃,沒仔細想過,然而,前陣子看了韓劇大長今,卻又蹦出許多感觸,像似「明知山有虎,偏向虎山行。」,好像很難擺脫,但到底什麼生活是我想要的呢?或許就像這首 100 種生活 歌詞,要等到很久以後,才會明瞭吧。


上次北上時跟學長閒聊買屋等事,台北 40 坪差不多要 1200 萬。假設貸款九成,那自備款 120 萬,20 年以年率 3 % 來看,一個月利息該還 ( 1080 * 3% / 12 ) = 2.7 萬,本金償還 ( 1080 / 20 / 12 ) = 4.5 萬,一個月總共要付出 7.2 萬耶,真不少。


今天謝師宴,似乎是個結尾,卻又看不到任何終點?這就是人生吧,永遠只有持續走下去這條路。


2009年8月11日 星期二

Hadoop 0.20 安裝設定筆記

@2010/02/07,此篇是記錄從原先 0.18 版提升至 0.20 版的過程,若須由重頭安裝的,請參考以下兩篇:



下載位置:



從 0.18 版升到 0.20 版,順一次最初的 VMWare Image 檔,其為 0.18 版、CentOS,以下用 root 帳號操作:



  1. 更新軟體 (安裝軟體用 root 身份)

    • # yum -y install screen





    • 安裝 screen

      • # yum -y install screen





    • 安裝 lftp

      • # yum -y install lftp





    • 安裝 apache web server 和 php


      • # yum -y install httpd php



    • 設定 HTTPD

      • # vim /etc/httpd/conf/httpd.conf



    • 啟動 HTTPD

      • # /etc/init.d/httpd start





  2. 設定或建立 .screenrc (可用 hadoop身份)

    • # vim ~/.screenrc 加入一行即可

      • caption always "%{bw}%M/%d %c %{wb} %-w%{c}%n %t%{w}%+w%{k} %=%{G}[%H] %l%"






Hadoop 設定,以下用 hadoop 帳號操作:



  1. 抓 hadoop 0.20 至 hadoop 根目錄 (/home/hadoop, 即 hadoop 帳號登入的預設位置)

    • # wget http://apache.ntu.edu.tw/hadoop/core/hadoop-0.20.0/hadoop-0.20.0.tar.gz



  2. 解壓縮即安裝

    • # tar -xvf hadoop-0.20.0.tar.gz



  3. 切換至 hadoop-0.20.0 (之後的目錄都是指 hadoop-0.20.0)

    • # cd /home/hadoop/hadoop-0.20.0/



  4. 設定 hadoop-env.sh

    • # vim /home/hadoop/hadoop-0.20.0/conf/hadoop-env.sh 加入一行

      • export JAVA_HOME=/usr/lib/jre1.6.0_13






以上即完成單機版 hadoop 的環境,接著可以啟動跟查看目前所在目錄的資料夾與檔案



  1. # ./bin/start-all.sh

  2. # ./bin/hadoop dfs -ls


以下是設定 hadoop dfs 環境,使用 hadoop 身份



  1. 複製 hadoop 0.18 設定檔

    • # cp /home/hadoop/start-hadoop /home/hadoop/hadoop-0.20.0/

    • # cp /home/hadoop/stop-hadoop /home/hadoop/hadoop-0.20.0/

    • # cp /home/hadoop/conf/hadoop-site.tmp /home/hadoop/hadoop-0.20.0/conf

    • 並編輯 /home/hadoop/hadoop-0.20.0/start-hadoop 和 /home/hadoop/hadoop-0.20.0/stop-hadoop

      • 更新 Hadoophome="/home/hadoop" 為 Hadoophome="/home/hadoop/hadoop-0.20.0"





  2. 產生設定檔

    • 純粹用來產生 conf/hadoop-site.xml 資料, 但新版已不用此設定檔

      • # /home/hadoop/hadoop-0.20.0/start-hadoop

      • # /home/hadoop/hadoop-0.20.0/stop-hadoop



    • # cp conf/hadoop-site.xml conf/core-site.xml

    • # vim conf/core-site.xml


      •   <property>
            <name>fs.default.name</name>
            <value>hdfs://IP:9000</value>
          </property>
         <property>
            <name>mapred.job.tracker</name>
            <value>localhost:9002</value>
          </property>
         <property>
            <name>dfs.replication</name>
            <value>1</value>
          </property>

          <property>
            <name>hadoop.tmp.dir</name>
            <value>/tmp/hadoop-${user.name}</value>
            <description>A base for other temporary directories.</description>
          </property>
          <property>
            <name>dfs.name.dir</name>
            <value>${hadoop.tmp.dir}/dfs/name</value>
          </property>
          <property>
            <name>dfs.data.dir</name>
            <value>${hadoop.tmp.dir}/dfs/data</value>
          </property>

          <property>
            <name>dfs.http.address</name>
            <value>0.0.0.0:50070</value>
          </property>
          <property>
            <name>mapred.job.tracker.http.address</name>
            <value>0.0.0.0:50030</value>
          </property>

          <property>
            <name>dfs.datanode.address</name>
            <value>0.0.0.0:50010</value>
          </property>
          <property>
            <name>dfs.datanode.ipc.address</name>
            <value>0.0.0.0:50020</value>
          </property>
          <property>
            <name>dfs.datanode.http.address</name>
            <value>0.0.0.0:50075</value>
          </property>
          <property>
            <name>dfs.datanode.https.address</name>
            <value>0.0.0.0:50475</value>
          </property>





  3. 格式化 namenode (原先存在的資料將被清光)

    • # ./bin/hadoop namenode -format



  4. 啟動 hadoop 前修改 start-hadoop 檔

    • # vim /home/hadoop/hadoop-0.20.0/start-hadoop

      • 把第九行用 # 註解掉  ( #sed "s/\$hostip/$host_ip/g........ ) 不弄的話也沒關係, 只是會一直蹦訊息而已





  5. 接著就像 0.18 一樣正常操作了

    • [hadoop@hadoop hadoop-0.20.0]$ ./start-hadoop
      Starting Hadoop ...
      Job Admin: http://IP:50030/
      HDFS: http://IP:50070/
      [hadoop@hadoop hadoop-0.20.0]$ ./bin/hadoop dfs -ls
      ls: Cannot access .: No such file or directory.
      [hadoop@hadoop hadoop-0.20.0]$ ./bin/hadoop dfs -mkdir input
      [hadoop@hadoop hadoop-0.20.0]$ ./bin/hadoop dfs -ls
      Found 1 items
      drwxr-xr-x   - hadoop supergroup          0 2009-08-12 15:00
      /user/hadoop/input




錯誤訊息及修正:



  • list 可以有東西出來,但只要新增資料進去就會出錯,蹦一堆訊息,經過查詢發現是 datanode 沒有跑起來

    • # ./bin/hadoop dfs -ls

      • OK



    • # ./bin/hadoop dfs -put test .

      • ERROR





    • # ./bin/hadoop dfsadmin -report

      • 顯示 Datanodes available: 0 (0 total, 0 dead)



    • 解決方式, 是將原本 0.18 建立的 datanode 資訊砍掉重建, 即可處理,但將損失資料,最好請參考 Trouble Shooting 的解法 

      • # ./stop-hadoop

      • # rm /tmp/hadoop*

      • # ./bin/hadoop namenode -format

      • # ./start-hadoop





  • Trouble Shooting

    • If nameNode or file can not put into.

      • Better solution

        • # hadoop fsck



      • Worst solution (data will all lost)

        • # stop-all.sh

        • # rm -fr /fs/HDFS

        • # mkdir /fs/HDFS

        • # hadoop namenode -format

        • # start-all.sh







    • 如果dfs只能看到自已

      • 手動清掉所有node的hadoop tmp目錄(default: /tmp/hadoop-root)再重啟 dfs