:::
顯示具有 網站服務 標籤的文章。 顯示所有文章

將OpenVZ架設的虛擬機器轉換為虛擬應用樣板的作法 / Package OpenVZ Container to Template

將OpenVZ架設的虛擬機器轉換為虛擬應用樣板的作法 / Package OpenVZ Container to Template

800px-OpenVZ-logo

使用Proxmox VEOpenVZ建立好虛擬機器(Container),並在裡面安裝好必要的服務之後,接著可以把它轉換成虛擬應用樣板(template),方便其他人從樣板建立起一模一樣的虛擬機器。以下這篇我就教大家在Proxmox 1.9版底下將OpenVZ的虛擬機器轉換成虛擬應用樣板的方法。

Once you create a OpenVZ container with a application system in Proxmox VE, you can package the container to a template and distribute it to others for installing and using. I wrote a script to do this job. Following is the usage guide.


背景與動機 / Background

由於Proxmox VE用OpenVZ架設起來的虛擬機器(Container)運作效率高、速度又快,所以後來我很多服務都以OpenVZ建立起來,甚至原本是用KVM架設的服務,後來也一併轉換成OpenVZ,運作效率也比KVM高上許多。

我們這邊時常需要將同樣的系統複製很多份,老師上課之用。原本我也可以用Proxmox VE的匯入與匯出來複製虛擬機器,但那究竟不太方便。我當然還是希望能做到像是Turnkey Linux那樣,把服務都包成一個漂亮的虛擬應用樣板,方便給人下載與安裝。

我之前文章中也想過建立虛擬應用樣板。如果要從實體機器或是其他虛擬機器中建立樣板,的確是不容易。但是如果要從OpenVZ建立好的虛擬機器中建立樣板,那就不難了。只要用tar打包起來,並依照正確的方式命名即可。

這篇就是在講如何從OpenVZ建立的虛擬機器(Container)中打包成虛擬應用樣板(template)。

Proxmox VE準備 / Proxmox VE Preparation

image

要使用OpenVZ,Proxmox VE絕對是目前的首選。這篇的指令也是基於Proxmox VE 3來測試。但是因為Proxmox VE 1跟2的目錄結構都一樣,所以也一樣可以使用這篇文章的教學來製作虛擬應用樣板。至於其他的OpenVZ系統,我就不敢保證了。

因為我們要把既有的虛擬機器轉換成虛擬應用樣板,所以Proxmox VE裡面必須要有一台以OpenVZ架設的虛擬機器。在此我用VMID (虛擬機器的ID編號) 100的ownCloud作為轉換的對象。

image

打包的動作是要用指令列來操作,而且必須要有root權限。我建議你使用Proxmox VE的SSH通訊協定連線操作比較方便。上圖是我使用的是mRemoteNG中的PieTTY來連線。

虛擬機器轉換虛擬應用樣板操作 / Packager Script Usage Guide

登入root之後,請輸入以下指令下載我製作的轉換腳本檔:

然後把該腳本檔加上可以執行的權限:

chmod +x openvz_CT_to_template.sh

再來執行腳本檔:

./openvz_CT_to_template.sh

腳本檔會顯示歡迎訊息,然後提示你輸入OpenVZ虛擬機器的VMID,預設編號為100:

Please enter OpenVZ Container's VMID: [100] 

然後它會檢查你的Proxomx VE有沒有這台虛擬機器,有的話它接著會問你樣板名稱的一些訊息。OpenVZ的樣板是仰賴檔案名稱來辨識訊息,必須要輸入正確的格式,Proxmox VE才能正確地使用樣板。

腳本檔會先問你的作業系統及其版本,例如centos-5、debain-6.0、ubuntu-10.04。預設使用centos-5。注意,裡面要包含「-」。

Please enter template OS (ex: centos-5, debain-6.0, ubuntu-10.04): [centos-5] 

接著會問你樣板的名稱。此處請輸入你的應用系統的名字,例如standard、moodle、dspace-dlll。預設使用custom。注意,裡面不可以包含「_」。

Please enter template name (ex: standard, moodle, dspace-dlll): [custom] 

接著是版本名稱。例如5.6-1、10.04-4。預設使用1.0-0。注意,裡面必須包含「.」跟「-」。

Please enter template version (ex: 5.6-1, 10.04-4): [1.0-0] 

接著問你樣板的架構,例如i386。預設也是用i386。

Please enter template arch. (ex: i386): [i386]

然後最後確定一下要轉換的項目無誤,腳本檔就會開始打包,並存放到Proxmox VE放置樣本檔的目錄中了。

轉換腳本檔 / Packager Script

我已經將轉換腳本檔openvz_CT_to_template.sh上傳到GitHub,這連結中的版本會是最新的。以下是目前腳本檔的內容,你可以從註解來看每一段程式要做的工作:

   1: #!/bin/bash
   2: # Program:
   3: #   For Proxmox VE (1~3). Convert OpenVZ Container to Template
   4: #   在Proxmox VE (1到3版都可以使用)中,將OpenVZ的虛擬機器(Container)轉換成虛擬應用樣板(Template)
   5: # History:
   6: # 2013/07/13    Pulipuli Chen   First release
   7:  
   8: # 歡迎訊息
   9: echo "========================================="
  10: echo "  OpenVZ Container to Template Packager"
  11: echo "========================================="
  12:  
  13: # 宣告目錄參數
  14: container_dir=/var/lib/vz/private/
  15: template_dir=/var/lib/vz/template/cache/
  16: if [ ! -d $container_dir ] || [ ! -d $template_dir ]; then
  17:     echo "This script only for Proxmox VE 1~3"
  18:     echo "http://www.proxmox.com/downloads/category/iso-images-pve"
  19:     echo "Abort"
  20:     exit 0
  21: fi
  22:  
  23: # 請輸入要轉換的VMID
  24: read -p "Please enter OpenVZ container's VMID: [100] " vmid
  25: if [ -z $vmid ]; then
  26:       vmid=100
  27: fi
  28:  
  29: # 回傳訊息,告知使用者要轉換的VMID
  30: echo "You want to package container VMID $vmid to template"
  31:  
  32: # 宣告虛擬機器的目錄
  33: ct_dir=$container_dir/$vmid
  34:  
  35: # 檢查該VMID的虛擬機器是否存在
  36: if [ -d $ct_dir ]; then
  37:  
  38:     # 如果存在的話
  39:     
  40:     # 詢問作業系統與其版本
  41:     read -p "Please enter template's OS and version (ex: centos-5, debain-6.0, ubuntu-10.04): [centos-5] " template_os
  42:     if [ -z $template_os ]; then
  43:       template_os=centos-5
  44:     fi
  45:     until [[ "$template_os" == *"-"* ]]; do
  46:         echo "Template's OS and version should include '-', ex: centos-5, debain-6.0, ubuntu-10.04. "
  47:         read -p "Please enter template's OS and version again : [centos-5]" template_os
  48:         if [ -z $template_os ]; then
  49:           template_os=centos-5
  50:         fi
  51:     done
  52:  
  53:     # 詢問應用系統的名字
  54:     read -p "Please enter template's application name (ex: standard, moodle, dspace-dlll): [custom] " name
  55:     if [ -z $name ]; then
  56:       name=custom
  57:     fi
  58:     until [[ "$name" != *"_"* ]]; do
  59:         echo "Template's application name should NOT include '_', ex: standard, moodle, dspace-dlll."
  60:         read -p "Please enter template's application name again : [custom] " name
  61:         if [ -z $name ]; then
  62:           name=custom
  63:         fi
  64:     done
  65:  
  66:     # 詢問應用系統的版本號
  67:     read -p "Please enter template's application version (ex: 5.6-1, 10.04-4): [1.0-0] " version
  68:     if [ -z $version ]; then
  69:       version=1.0-0
  70:     fi
  71:     until [[ "$version" == *"."*"-"* ]]; do
  72:         echo "Template's application version should include '.' and '-', ex: 5.6-1, 10.04-4."
  73:         read -p "Please enter template's application version again : [1.0-0] " version
  74:         if [ -z $version ]; then
  75:           version=1.0-0
  76:         fi
  77:     done
  78:  
  79:     # 詢問樣板的架構
  80:     read -p "Please enter template's architecture (arch.) (ex: i386): [i386] " template_arch
  81:     if [ -z $template_arch ]; then
  82:       template_arch=i386
  83:     fi
  84:  
  85:     template_tar=${template_os}-${name}_${version}_${template_arch}.tar.gz
  86:  
  87:     # 確認轉換項目
  88:     read -p "Do you wish to package container VMID $vmid to template $template_tar? [Y/n] " RESP
  89:     if [ "$RESP" = "n" ]; then
  90:       echo "Abort"
  91:       exit 0
  92:     fi
  93:  
  94:     # 檢查是否有同樣名稱的樣板
  95:     template_path=${template_dir}${template_tar}
  96:     if [ -d $template_path ]; then
  97:         read -p "${template_tar} existed. Do you wish to overwrite it? [Y/n] " overwrite
  98:         if [ "$overwrite" = "n" ]; then
  99:             echo "Abort"
 100:             exit 0
 101:         fi
 102:     fi
 103:  
 104:     # 停止運作中的虛擬機器
 105:     echo "Stop VMID $vmid..."
 106:     vzctl stop $vmid
 107:  
 108:     # 開始進行轉換
 109:     echo "Start to package VMID $vmid to template $template_tar ..."
 110:     cd $ct_dir
 111:     tar -czvf --overwrite ${template_path} ./ 
 112:  
 113:     # 完成訊息
 114:     echo "Package complete!"
 115:     echo "You can use template $template_tar in your Proxmox VE now."
 116:     echo "Template location path is $template_path"
 117: else
 118:  
 119:     # 如果沒有該虛擬機器,則停止腳本檔
 120:     echo "VMID $vmid not exist"
 121:     echo "Abort"
 122: fi

感謝鳥哥的Shell Scripts教學還有Adam Bellaire的萬用字元教學,這次複習了Shell Scripts很多指令,包括read、test判斷式、until,感覺又對Linux了解更多了一點。Linux的Shell Scripts真是強大,好用。


結語:還要加上系統更新功能 / Conclusion: Need System Update Function

系統整個打包成OpenVZ的虛擬應用樣板之後,我們就能夠方便地把完整的系統提供給其他人使用。這時候再加上系統更新功能,讓他能從GitHub下載最新版程式碼到虛擬機器上,再進行編譯、安裝等動作,那麼就能確保使用者手上拿到的虛擬機器會包含目前最新的程式碼。

實際上我已經做了一個DSpace-DLLL的OpenVZ虛擬應用樣板:centos-5-standard_1.0-0-dspace-dlll.tar.gz。樣板檔案有2.2GB之大,但已經比KVM版本的3.69GB還要小很多了。只要用dspace登入後輸入「./update_system.sh」,就會自動從GitHub下載程式碼、編譯並重新啟動系統喔。

我開始感覺到自己也逐漸邁入一個產品發佈的流程中。實在是很有趣。以後也會逐漸朝向把做好的系統打包成OpenVZ,再搭配GitHub更新系統的功能,然後把這樣子完整的虛擬機器發佈給要使用的人。

可是光有OpenVZ虛擬應用樣板還不購,我還還缺乏Proxmox VE的安裝教學。以後有機會再來寫吧。


修改記錄

  • 20130723:將腳本下載網址從https改成http,這樣才能正常下載。而且為文章補上之前忘記加入的類別。
(more...)

Zentyal 3.0動手做模組入門 / Zentyal 3.0 Module Development

Zentyal 3.0動手做模組入門 / Zentyal 3.0 Module Development

image

Zentyal是一個強大的路由器套裝軟體,他也提供了客製化製作模組的功能。我參考Zentyal的說明建立了一個修改SSH連接埠的功能,並記錄一下製作模組時的一些步驟。

Zentyal is a powerful Router and could install custom module. Base on Zentyal module development tutorial, I created a SSH module for modifying SSH port. Following is my create steps.


安裝Zentyal / Install Zentyal & Configuration

image

我安裝的是zentyal-3.0-2-amd64.iso,Zentyal 3.0 64位元版本。安裝在VirtualBox上,並配置兩張網卡:eth0為Host-only,設定為內網;eth1為NAT,作為外網。

我將預設帳號設為Linux的root群組,以省去每次都要sudo的困擾。所以下指令我都不用sudo,因為已經假設是root權限了。

然後我也關閉了Zentyal的桌面功能,作法參考這篇,語法是:

sudo mv /etc/init/lxdm.conf /etc/init/lxdm.conf.nostart

最後我安裝了pound作為後續研究的需要,語法是:

apt-get install pound

Zentyal雖然不難裝,但是也有些稜稜角角的小細節需要額外下指令去克服。詳細安裝細節此處就省略。

Zentyal模組開發教學 / Zentyal module development tutorial

Zentyal已經提供了模組開發教學的網頁文件。我大致上是照著這個步驟來操作,不過有遇到一些問題,此篇一一記錄細節。

安裝開發環境 / Development Environment

要開發Zentyal的模組需要安裝很多東西,以下列出我安裝的東西:

apt-get install build-essential gcc zbuildtools fakeroot

然後在家目錄中下載Zentyal的鷹架工具skel,並調整鷹架工具的權限:

wget https://raw.github.com/Zentyal/zentyal/master/extra/scripts/zentyal-module-skel
chmod +x zentyal-module-skel

這樣就準備好可以開發了。

建立SSH模組鷹架 / SSH Module Scaffolding

我們可以用鷹架工具skel來建立SSH模組鷹架。現在位置是在家目錄(cd ~)底下,指令為:

./zentyal-module-skel SSH ssh

然後就冒出一個空的模組啦。這到這邊為止的進度是教學中的Scaffolding

修改SSH模組 / Revise SSH Module

鷹架模組無法正常運作,所以我們要進行修改。修改的方式教學中寫得很清楚,請看這個網頁。修改之後的結果請看我上傳到GitHub的程式碼

主要修改的程式為:

跟教學文件相比,修改的差異在於設定檔是SSH的/etc/ssh/sshd_config,而參數的樣板service.conf.mas也差異很大。

必須特別要說明的是在參數樣板中要加入#開頭的註解文件時,必須要用以下語法來加入:

% print "# the setting of \"PermitRootLogin without-password\".\n";

注意雙引號""中間要記得脫逸,還有最後要加上\n表示換行。

編譯並安裝SSH模組 / Compile & Install SSH Module

編譯的方法是先移動到模組目錄,然後輸入zentyal-package指令:

cd ~/ssh
zentyal-package

編譯成功的話,模組目錄底下會冒出debs_ppa,裡面是可以安裝的檔案。再來就是安裝編譯好的檔案:

dpkg -i ~/ssh/debs-ppa/zentyal-ssh_3.0_all.deb

如果安裝時沒有特別的錯誤,那就是安裝完成了。我猜這個安裝檔應該可以轉給其他Zentyal系統,讓他們也能安裝你自己製作的模組。

啟用SSH模組 / Enable SSH Module

image

安裝好SSH模組之後,導覽列Core底下會出現SSH。但是它目前還沒啟動,要先到Module Status中,在SSH的Status裡打勾,然後再右上角Sava changes。

這樣就之後就可以正常使用SSH模組了。


結語:只是開始 / Conclusion: Just Begin…

摸了一整天總算搞懂怎麼修改Zentyal。意外地發現它的工具寫得很好用,也不難理解。只是一些細節它沒有說明,讓我試誤了好一陣子。這些細節解決之後,我想要開發新功能應該是得心應手吧。

我目前想要做一個整合pound反向代理伺服器的功能。然後再做一個DNS + NAT Port Forwarding + Reverse Proxy綜合控制的介面,讓管理者可以一口氣在一個介面設定這些東西。

不過目前進度到這邊得暫停來做一下開會的準備了orz

(more...)

對於雲端技術中的PaaS一些看法 / Thinking of PaaS

對於雲端技術中的PaaS一些看法 / Thinking of PaaS

3 levels

(來自於雲端開發測試平台 Cloud Open Lab

最近在研究雲端技術時,開始興起朝PaaS去研究的想法。以下是整理一下最近看的東西,以及對PaaS的一些發想。

I have studied the cloud technology for some time. Recently I was interested in PaaS. The following is some relevant information of PaaS, and my thoughts on PaaS.


雲端服務的三層次 / Three Levels of Cloud Service Structure

目前大家對雲端技術的三層次大概都很明確了。簡單來說,在使用工具的時候,我們只想關注、調整我們需要的重點(層次),而其他更基礎的東西則交給雲端系統去自動化處理,讓後面系統包裝成服務給我們使用。

雲端技術發展到現在,重點層次已經凝聚成共識,目前可以分成三層次:

  1. IaaS 設備即服務:重點在於電腦主機伺服器,而它的架設、管理與使用都可以用雲端系統提供服務的方式操作。這是雲端架構的基礎。
  2. PaaS 平台即服務:重點在於要運作一個系統,類似網頁或是Java程式。系統所需要的運作環境跟資料庫則由雲端系統提供。這是給應用程式開發者使用的層次。
  3. SaaS 軟體即服務:重點在於可以用的工具。現在許多以網站提供的工具都算是SaaS。

為了管理大量伺服器,我一開始踏入的是IaaS。我研究了VirtualBox,也研究Proxmox VE,現在也想用OpenNebula (Ezilla)。但是這些只能說是方便整合那堆放置難以管理的實體伺服器,還不能達到我想要解決的問題。

開發之前還要配置環境的痛苦 / Preparing Development Environment is Very BORING

DSC_0534

到了現在,實驗室許多學生在開發時,他們只需要環境,不需要從整個伺服器開始學起。他們只需要搞懂PHP、JSP跟MySQL、PostgreSQL之間怎麼運作,不想要再學Linux的bash如何操作。

儘管對於ssh的遠端登入、chmod修改權限、設定cron等Linux指令對我們這些習慣管理Linux的人來說駕輕就熟,但對於連PHP跟資料庫要怎麼連線都還在摸索的程式入門學生來說,要如何操作作業系統又會是一大難題。

「現在的學生怎麼這麼不耐操?連這點小事情都不肯學?」

旁觀者肯定會說出這種風涼話,但簡單地想一下就知道:開發能解決研究問題的系統工具,跟搞懂Linux伺服器,哪一個是優先要處理的事情呢?答案當然是前者,而且我寧願學生把搞懂Linux所花的時間全部投注在主要系統的開發,專心做好能跟研究直接相關的工作。

好吧,老實說,這也是我懶啦。每次都在幫人家配置那些環境很煩耶!就算駕輕就熟還是很麻煩啊!身為程式人員的耐心在重複的事情出現第二次之後就會按奈不住了啊!

所以我需要一個方案,能自動幫我把環境配置好。我們只要專心投入在開發工作上即可。

自行架設私有PaaS / PaaS Services

現在提供PaaS服務的公司很多。但是因為我是在學校,我想要長久使用,所以基本上並不考慮收費方案。扣掉這點,能剩下的選擇就很少了。

再來就是要找尋提供我所需要運作環境的平台。Google知名的PaaS Google App Engine在少數流量下可免費使用,勉強納入我的考量,但是他只能用Python跟JAVA開發這點讓我又把它移出了考量清單。同樣的,RedHat的OpenShift也只是支援Java,但它用Git儲存庫來佈署這點我蠻喜歡的。不過上述這些都只有公司提供服務,不能架設在自己的單位。

stackato-by-activestate_1000px

Stackato是架設私有PaaS的另一個選擇,也有免費方案,蠻符合我自行架設的需求。Stackato以ownCloud來佈署開發程式,可以跑Java跟PHP,也能支持許多資料庫。就功能來說我很感興趣,可是這不是開放原始碼,免費版本的Stackato的限制令我卻步。

header-logo.gif

WSO2可真的是開放原始碼的PaaS架構了,而且也支援PHP、MySQL與Tomcat插件。其中提到一個特點:

Traditional, non-cloud-aware application platform containers, such as PHP and MySQL, can be extended into a multi-tenant cloud deployment.

傳統上,非雲端的應用平台程式,像是PHP與MySQL,可以發展成「多用戶雲端佈署應用」。

我想像多重租貸模式會是一個框架,它把應用程式(也就是網站)的對外窗口跟抽象化之後的服務接軌。但是細節的部份我還沒仔細摸,不知道能不能提供我需要的服務,有待研究。

一開始在摸的時候,我一直在想,PaaS不就是很久以前很流行的「免費架站空間」嗎?我們向公司請求一個可以運作PHP的空間、MySQL資料庫與網站連線的網址,然後透過FTP上傳我們的程式碼,然後就能夠正常運作。不過意外的是,這些傳統的架站空間似乎都不被當做是一種PaaS,大概是作法實在是太傳統了吧。

我對PaaS的期許 / My Expectation of PaaS

我是希望未來我的網站可以打包成一個像上面WSO2所講的多用戶模式。這個框架會是標準格式,我只要在我的開發環境做好、將框架打包好,然後就可以透過Git之類的程式碼儲存庫佈署到任意的PaaS當中。

應用程式中的設定將不會在開發時寫成固定值,而是做成需要透過框架去向外面服務請求設定的對外窗口。這些對外窗口包括資料庫連線與建置調整、排程工作的需求(開關機時執行的指令、定期執行的指令)、大量資料的儲存位置。舉例來說,我在本機開發時,對外窗口向本機端請求了MySQL的服務;而移到PaaS上的時候,對外窗口則是向PaaS提供的服務要求MySQL的位置。

而PaaS提供的服務則是可擴充的、可動態分配的架構。當對外窗口要求一個MySQL資料庫的時候,它其實是連到提供MySQL負載平衡的中介伺服器上,然後依照框架設定、背後有複數的MySQL資料庫來提供穩定的資料庫服務。同樣的,資料儲存位置使用的服務背後也可能是整合性的機制,不會因為單一機器毀損而遺失資料。

跟一般把服務全部包在虛擬機器裡面的IaaS比起來,PaaS把服務拆得更細,因此就能夠提供更穩定的服務架構。

從PaaS回到IaaS來看 / Deploy IaaS Like PaaS

PaaS把應用程式與服務拆開來,以提供更穩定的架構。不過反過來說,因為服務拆得更細的關係,在有個標準之前,恐怕常常還是會覺得要做什麼事情都是綁手綁腳的不自由。

舉例來說,我的PHP程式想要用命令列來控制FFmpeg轉檔程式,那我就得在Liunx安裝FFmpeg套件,但是在現在PaaS的架構中這應該是不太可能做得到的事情,必須要在IaaS的層級中才有這般自由。

是的,有權限控制一整台伺服器就是網管人員最開心的事情。我在想,如果我們可以在IaaS層級中使用PaaS的作法,那應該會很方便。我的網站架設在虛擬主機中,預設是以虛擬主機自身提供的服務來運作。不過如果我有需要,我可以透過對外窗口自動將設定改成外部的服務,像是使用另一台虛擬主機架設的資料庫。

因此,IaaS層級的虛擬機器就會分成三種類型:一種是多租貸模式的主機,它必須提供對外的窗口供統一管理與設定,讓管理者不必登入到IaaS的主機中修改設定檔;第二種是專門運作資料庫、檔案伺服器的主機,但是它們並不是直接給多租貸模式的主機使用,而是隸屬於第三種主機底下;第三種類型真正提供服務的中介主機,像是資料庫的負載平衡器、分散式檔案系統的管理器,可將背後大量的實體服務集叢化。

image

以MySQL舉例來說,上圖的(1)是運作Drupal的PHP伺服器,(2)是重複多個的Slave MySQL資料庫伺服器,而(3)則是統一管理這些資料庫伺服器的Master主要MySQL資料庫伺服器。圖片的架構參考自ㄚ忠的MySQL Replication(Master Slave負載平衡),我一直想做做看,可是目前並沒有這個機會。

另一方面,資料庫架構(schema)自動配置的功能目前並沒有統一。我也需要找一些方便來進行資料庫架構配置,像是Database version control這個。

如果這些架構都要以獨立主機來進行開發的話,虛擬化的負載肯定是很令人頭大。因為現今主流的KVM、VMware雖然號稱效能直逼實體主機,但老實說,一台普通的伺服器跑3、4個KVM,能順利運作就謝天謝地了。

800px-OpenVZ-logo

這邊我又再度提到我最喜歡的虛擬化技術OpenVZ。反正每個虛擬機器提供的服務都很單純,根本就不需要像KVM那樣包山包海,那以OpenVZ為基礎建設這些服務不就好了嗎?跟現在主流的KVM、VMware相比,限定運作Linux的OpenVZ檔案小又高效率,非常深得我心。我現在已經把很多應用系統打包成OpenVZ,方便讓實驗室成員輕易建置一個可以用的應用,這包括了DSpace-DLLL

然而IaaS最大的問題:網路,至今依然沒有很好的解法。我們沒有無限的IP可以使用,可是又想要建設大量的虛擬機器並同時提供服務,那就得要倚賴DHCP加上Port Forwarding。如果能夠搭配DNS的話,那就能做到DNS、DHCP與reverse proxy。不過我找到現在,還是沒看到DNS、DHCP與Reverse Proxy能夠完美搭配的組合。所以最近我想要自己來寫就是。


哎呀,我寫到這邊真是令人手癢,可是不行不行,我的本務好像不是在摸這個啊……

(more...)

從日曆上看RSS:RSS轉換成iCalendar格式

布丁布丁吃布丁

從日曆上看RSS:RSS轉換成iCalendar格式

 

20121231-003507

許多網站服務都提供資訊饋送RSS Feed的服務,可供Google Reader之類的RSS閱讀器來訂閱。大部分的RSS閱讀器都是以一篇一篇的形式瀏覽文章,但是如果能從日期來回溯看過的RSS文章,那RSS就不只能當做新聞閱讀,還能典藏資訊供之後的調閱。

現在的日曆軟體也有訂閱功能,例如Google Calendar,可惜它訂閱的是iCalendar格式,跟RSS的XML格式差別很大。今天我找到了Yahoo Pipes這個有趣的程式化Feed改造服務,作了一個RSS to iCalendar服務供大家使用。

這篇是教大家如何使用RSS to iCalendar服務,並放你的Google Calendar的方法。


1. 準備你要轉換的RSS Feed網址

首先,你應該會有一個想要轉換成可在日曆上看到的資訊來源。Blog是一個很好的例子,如果可以從日曆上看到你是什麼時候寫的Blog,那不就像是日記一樣地實用嗎?

image

以下我就用你現在看到的這個Blog「布丁布丁吃什麼?」的RSS來介紹。我想把最新發表的文章放到日曆中,那麼我透過一些調查知道這個RSS Feed網址是:

記好這個網址,待會會用到喔。

2. 進入RSS to iCalendar設定資料

20121231-005109

請開啟RSS to iCalendar網頁,網址如下:

請在中間兩個欄位輸入資料,這兩個欄位各別是:

image

  • 請輸入RSS/ATOM網址 (Feed URL):輸入剛剛查到的RSS Feed網址「http://pulipuli.blogspot.tw/feeds/posts/default
  • 請輸入標題的前贅詞,以方便分辨RSS/ATOM來源 (Prefix of every item title):這個日曆我希望標題開頭都帶有容易分辨的標籤,所以填入「[BLOG]」

接著按下右邊的「Run Pipe」,等待Yahoo Pipes擷取你的Feed資料吧。

image

如果順利的話,下面的List會列出我的Blog文章標題與內容,也就是Feed的資料。你可以發現標題都被加入了[BLOG]字串

3. 取得iCal網址

20121231-001955

接著我們要取得可以匯入日曆的iCal網址,它的位置是在List上面那排分享工具列最右邊的「More options」裡面的「image Get as iCal」,請按右鍵來「複製連結網址」。這些位置不太好找,請參考上圖來操作。

最後取得到iCal網址為:

http://pipes.yahoo.com/pipes/pipe.run?_id=2f8dc3f91998456a835b5c86d91e9ce1&_render=ical&feed=http%3A%2F%2Fpulipuli.blogspot.com%2Ffeeds%2Fposts%2Fdefault&prefix=%5BBLOG%5D

4. 匯入到Google Calendar中

20121231-001706

日曆軟體很多,在此我是以最常用的Google Calendar來說明。在Google Calendar左下角有個「其他日曆」的位置,它的標題右邊有個下拉式三角形箭頭按鈕image ,開啟選單進入「輸入網址以新增」。操作位置請參考上圖。

image

接著請輸入剛剛取得的iCal網址,按下「新增日曆」,然後稍待一下。

image

如果順利的話,Google Calendar會建立一個「RSS to Calendar (iCal)」的日曆。

20121231-001857

如果不幸出現了「無法為 …… 於 http://pipes.yahoo.com/pipes/pipe.run?_id=2f8dc3f91998456a835b5c86d91e9ce1&_render=ical&feed=http%3A%2F%2Fpulipuli.blogspot.com%2Ffeeds%2Fposts%2Fdefault&prefix=%5BBLOG%5D 中新增匯入的日記」這種訊息,請試著換台電腦再操作看看吧,你可能被Google Calendar擋下來了。

6. 設定RSS to iCalendar(iCal)日曆

image

接著教你如何修改RSS to iCalendar (iCal)的名稱跟顏色。請按下該日曆右邊的箭頭開啟選單 image,你可以在此選擇日曆的顏色,然後進入「日曆設定」。

image

在日曆設定中,你可以設定日曆名稱。現在我們把「RSS to iCalendar(iCal)」改成「布丁布丁吃什麼?」,然後按下上面的「儲存」按鈕吧。

image

日曆名稱改成「布丁布丁吃什麼?」囉。

這樣子你要新增下一個RSS to iCalendar的時候,就不會因為日曆名稱一樣而被搞混了。


結語:用日曆來「彙整」日記

用日曆來寫日記這種概念很多人都有過,但是用日曆來「彙整」日記這想法似乎就很少人提過。

傳統對於日記的概念大多是撰寫成一份供人閱讀的文件,但是在網路時代中,我們的日常記錄卻常常是以不同的形式分散在網路的各個地方:在Blogger寫的文章、在Plurk發的牢騷、在Picasa建立的相簿、在Facebook舉辦的活動、在Evernote保存的網頁。

有些網站服務是專門彙整你在網路上活動的社群網站記錄,但是卻很少看到這些服務是以日曆的方式來保存。

最近一天,我忽然發現我想要找三年前某一天的活動照片跟聊天討論時,我開始驚覺到用日期來找尋日記這件事情有多麼的重要。所以現在才會著手研究RSS轉成iCalendar保存在Google Calendar的方法。

當然,放在Google Calendar的日曆不僅可以從日期來瀏覽,也支援全文搜尋的功能,讓你更方便找到以前的日記喔。

(more...)