關於本報

自由軟體鑄造場電子報
報主:中央研究院資創中心
創刊日期:2004-06-03
發報頻率:雙週刊
訂閱人數:3,349
官網:

近期電子報


訂閱便利貼


將貼紙語法置入您的網站或部落格當中, 訪客可以輸入mail取得認證信,並按下確認連結後, 快速訂閱您的報紙。
預覽圖
訂閱自由軟體鑄造場電子報報
自由軟體鑄造場電子報
-----------------------------------------------------------------------------------------------------
Plurk FaceBook Twitter 收進你的MyShare個人書籤 MyShare
  顯示內嵌語法

自由軟體鑄造場電子報
發報時間: 2011-12-14 16:00:00 / 報主:OSSF
[公益聯播]鸚鵡螺小房子 社區參與工作坊
本期目錄
[技術專欄] PHP extension management tools - Pecl and Pear
[技術專欄] CPAN - Comprehensive Perl Archive Network
[技術專欄] RubyGems─管理你的紅寶石
[技術專欄] Python 套件管理程式簡介
[技術專欄] NPM - Node Package Manager
[源碼快訊] Open Source Apps on Mobile 國際研討會-以開源軟體打造行動生活
[源碼快訊] WAUS 軟體創作研討會 邀你看論文也看軟體實作
[技術專欄] 麥克阿忠的 Ruby on Rails 實務─熟悉 MVC
[技術專欄] 利用 FreeNAS 打造儲存設備 (7)─Failover(故障轉移)
[技術專欄] 基於 KVM 與 libvirt 的虛擬化叢集系統-儲存空間的配置
[自由文化] 維基化.話維基(3)-誰是條目的所有人?
[自由文化] 鄉鎮逐時天氣預報與開放資料
[自由文化] 你覺得什麼是資訊時代的共有資源?「資訊時代的共有資源」活動記實
[自由文化] 香港、台灣與開放政府
[技術專欄] PHP extension management tools - Pecl and Pear
黃崇閔 / 文

簡介

[技術專欄] PHP extension management tools - Pecl and Pear [技術專欄] PHP extension management tools - Pecl and PearPHP 從 1995 年發展至今已有十多年的歷史。因為學習門檻低,許多人在摸索一段時間後即可快速上手,PHP 就成為許多人第一次接觸 web base 程式設計時所使用的程式語言。隨著網路興起,越來越多程式語言加入 web base 的開發行列。其中,JAVA 程式語言因為擁有豐富的 API 可以直接套用在 JSP 及 Servlet 中,讓已經熟悉開發 JAVA 應用程式的程式設計師可以無痛轉移到 web base 的開發行列。而使用 Asp.Net 的開發者,也可以結合 C# 及 VB 等程式語言直接進行 web base 開發。

面對其他程式語言的競爭,PHP 陣營提供了許多套件供開發者直接使用,Pear (PHP Extension and Application Repository) 的作者 Stig S. Bakken 於 1999 年底推出 Pear,目的是讓 PHP 的開發者能重複利用相同功能的元件,有效減少開發過程中繁雜的工作內容,進而達到事半功倍的效果。從 Pear 問世至今,除了 Pear 這套函式庫外,也發展了許多其他的函式庫,例如 CodeIgniter 及 Zend Framework 等。這些工具除了讓 PHP 開發者擁有多元的選擇性外,每個套件也各有其愛好者。

除了 Pear 外,還有 Pecl 的 PHP 擴展模組方式。兩者的不同之處在於,Pear 是純粹用 PHP 程式語言撰寫的擴展模組,而 Pecl 則是用 C 或 C++ 程式語言撰寫的。

[技術專欄] CPAN - Comprehensive Perl Archive Network
BlueT / Matthew Lien / 練喆明 / 文

簡介

CPAN - Comprehensive Perl Archive Network 的中文名稱為「Perl 綜合典藏網」,是各種程式語言線上典藏網的始祖,在它之後許多語言也複製類似的模式,比如 R 語言的 CRAN、Tex 語言 CTAN、Python 語言的 PyPI 與 PHP 語言的 PEAR 等。

CPAN 網站自從 1995 年十月上線以來,已經累積了 101,232 個 Perl 模組,共 23,715 個套件,9330 個作者,在全世界有 269 個鏡像伺服器,而且這些數字還在迅速累加。幾乎開發者需要的所有功能在 CPAN 網站上都能找得到實作,而且因為 Perl 程式語言秉持 TMTOWTDI (There's More Than One Way To Do It) 的哲學,針對不同特性強化的實作往往不只一個,讓開發者與使用者可以選擇最適合自己的模組。

 

CPAN 的使用分成兩個部份:CPAN 網站,以及使用者本機電腦上的工具程式。

  • CPAN 網站:線上列表、查詢模組和各種相關資訊,甚至有線上一鍵安裝的功能,以及針對不同需求發展的介面,例如:
    • 經典站:CPAN.org
    • 搜尋網站:Search.CPAN.org
    • 類似 Google 介面:MetaCPAN.org
  • 工具指令程式:本機端的工具指令程式,可以自動化查詢與安裝模組。大部分為文字介面,但也有開發圖形化介面的工具。
    • 經典老工具:
      • cpan: 通常只要裝了 Perl 就會附上這個最傳統的工具。
    • 強大的 CPANPLUS
      • cpanp: 自 2007 年開始加入預載的強大 CPAN 工具。
    • 方便好用的 cpanminus
      • cpanm: 新的工具,資源消耗量少,不需繁雜的設定,極為推薦。
    • ActiveState 公司的 perl package manager
      • ppm: 專有工具,不支援某些模組。

[技術專欄] RubyGems─管理你的紅寶石
林健欣 / 文

前言

[技術專欄] RubyGems─管理你的紅寶石RubyGems 是 Ruby 社群最常使用的套件管理系統,如同 Perl 的 CPAN 或 Python 的 EasyInstall / pip,使用者可以很簡易地安裝及管理套件。與其它的套件管理系統一樣,RubyGems 也有版本與相依性管理。

RubyGems 大致可以分為兩個部份。一個是 gem 命令,另一個則是在 runtime 中管理可用的 gems 與其版本。在這篇淺談中,將不會介紹所有的功能與選項,使用者請自行參閱 gem help

 

[技術專欄] Python 套件管理程式簡介
林錦賜 (pct) / 文

前言

對任何作業系統以及程式語言而言,管理「擴充套件」是非常重要的一環。有了擴充套件,可以更容易地操作電腦,程式設計師寫程式也變得更輕鬆。

您也許聽過「不要重造輪子」這句話,或是 DRY (Don't Repeat Yourself),講得就是「別人已經寫好的東西,就拿去用吧,不用自己再重新寫一套」。

本次介紹的 easy_install 以及 pip,正是 Python 程式語言的套件管理程式,讓您可以直接使用前人的心血結晶。

以下敘述的指令,以 # 開頭的,請用 root 權限;以 $ 開頭的,使用一般使用者權限即可。

 


[技術專欄] NPM - Node Package Manager
xpsteven / 文

簡介

[技術專欄] NPM - Node Package Manager

npm (Node Package Manager) 是 Node.js 下的主流套件管理程式。因為 javascript 易開發的特性,Node.js 的套件數量龐大,目前有 4,468 個套件發佈登記在 npm 的資料庫中。透過 npm 可以協助開發者安裝與移除 Node.js 套件,並發佈自己開發的套件。
[源碼快訊] Open Source Apps on Mobile 國際研討會-以開源軟體打造行動生活
OSSF/編述

[源碼快訊]  Open Source Apps on Mobile 國際研討會-以開源軟體打造行動生活行動裝置與雲端服務近年快速成長,除了在使用上走入大型的商業服務,並漸漸成為多數人日常生活不可或缺的重要元素!而許多走在時代尖端的大專院校與公司組織,也搭上此波風潮、開始採用各類雲端式的資訊處理平台,同步搭配行動裝置來進行機構的資訊同步與更新,以替代與簡化傳統的行政紙本作業程序,加速組織內的資訊分享,並活絡資訊傳遞的效率與速度。有鑑於此、自由軟體鑄造場基於推廣自由開源軟體技術與媒介國際資訊趨勢的立場,將於 12 月 28、29 日,與國家高速網路與計算中心、軟體自由協會,假中研院人文社會館 102 會議室與國研院國家高速網路與計算中心 104 階梯教室,共同舉辦跨台北與新竹地界的 Open Source Apps on Mobile 國際研討會。

 

本次活動邀請到 Kurogo 校園資訊系統主要開發者與 Modo Labs 創辦人 Andrew Yu 先生來台,為參與者說明 Kurogo 的技術框架,並分享經驗說明其如何將此原生自美國麻省理工學院的校園專案,轉植到許多美國東岸如哈佛大學等知名院校的行動校園網,由於機會難得、所以同步在 28 號與 29 號的新竹場皆安排了相關議程;而在 28 號台北場的下午,更加碼邀集了三位國內對於行動裝置應用程式有實務開發與推展經歷的專家,透過本次的活動將其在行動裝置軟體應用方面的寶貴經驗分享給與會的大家。預計活動的參與者,將可以第一手面對面的學習到如何善用自由開源軟體的既成工具與框架,快速地建置自己想要的行動裝置應用程式,並繼以開發自己心目中期待的 SaaS 與 PaaS 雲端式解決方案,而大專院校或中大型企業的資訊系統建置人員,更可以吸收到麻省理工學院校內資訊服務系統的建設原理,並據以調整改善手上承接的服務性資訊平台!

歡迎各界有興趣的朋友踴躍報名、共襄盛舉!

 

Open Source Apps on Mobile 國際研討會台北場

◎ 活動時間:2011 年 12 月 28 日(三)上午 09:00 ~ 16:20
◎ 活動地點:中央研究院 人文社會科學館 第二會議室:http://www.openfoundry.org/tw/activities/venueevents/29-2nd-Conference-Room-HSS
◎ 主辦單位:中研院 資創中心 自由軟體鑄造場國家高速網路與計算中心軟體自由協會
◎ 協辦單位:Modo Labs智新資通
◎ 媒體夥伴:破週報
◎ 活動網頁:http://www.openfoundry.org/tw/activities/details/240-open-source-apps-on-mobile


Open Source Apps on Mobile 國際研討會新竹場

◎ 活動時間:2011 年 12 月 29 日(四)上午 09:00 ~ 12:00
◎ 活動地點:國家高速網路與計算中心 104 階梯教室:http://www.nchc.org.tw/tw/about/traffic/index.php
◎ 主辦單位:中研院 資創中心 自由軟體鑄造場國家高速網路與計算中心軟體自由協會
◎ 協辦單位:Modo Labs智新資通
◎ 媒體夥伴:破週報
◎ 活動網頁:http://www.openfoundry.org/tw/activities/details/255-apps-shin

[源碼快訊] WAUS 軟體創作研討會 邀你看論文也看軟體實作
OSSF 工作團隊/編述

WAUS 軟體創作研討會的全稱為「Workshop on Advanced and Usable Software」,這是一個兼顧軟體創作性與實用性的技術分享研討會,將於本月份 23 號假大同大學尚志教育館 106 室,舉辦為期一天的論文發表與軟體展示活動。有鑑於國內資通訊領域裡,多重於硬體生產而疏於軟體創作,導致許多大專院校在軟體教學上,常過於偏向理論架構,而輕忽程式寫作,故本次的 WAUS 研討會特別徵求不論在學術創作上、軟體應用上,皆具一定成熟度及可利用性的軟體專案,透過 WAUS 創作研討會這個活動來推廣這些專案的開發創意與技術內容,以表彰其軟體專案的創作性與實用性,並進而提升國內資通訊領域的軟體程式實作風氣。

本研討會即日起開放免費註冊報名,對全天的參與者亦將提供午餐便當。而研討會發表的所有內容,皆將同時具有論文報告與軟體專案的產出,並將在活動當天由作者現場進行實機操作與技術說明,歡迎各界對研討會內容有興趣的朋友,可以踴躍報名、共襄盛舉!

[技術專欄] 麥克阿忠的 Ruby on Rails 實務─熟悉 MVC
麥克阿忠 / 文

前言

相信讀者在前篇文章依照內容操作一遍後,對於 CRUD 的應用邏輯與設計,以及 RoR 的架構都有了些許認識。只要多加實做,將會覺得 Rails 開發的作業時間短得不可思議。

Ruby on Rails 是一套架構很完善的 MVC Framework,這樣的開發架構可有效分隔出程式模組之間共同的資料傳遞方式,以及階層的物件概念,讓開發專案能以共同的標準鑄造程式碼,未來也讓開發員在進行維護與修正程式時容易閱讀。

 

什麼是 MVC

MVC 是一個軟體工程概念,意指 Model(模型)、View(檢視)、Controller(控制器)三個基本區塊。

MVC 架構的概觀

▲ 圖1:MVC 架構的概觀(圖片來源:http://upload.wikimedia.org/wikipedia/commons/f/f0/ModelViewControllerDiagramZh.png

  1. Model

資料模型,針對資料傳遞的邏輯方法與接受資料的操作處理方式。簡單說來是對於資料庫中的資料進行初始化,並等待接受其它區塊的指派再進行資料的處分。

  1. View

檢視,與使用者介面互動的區塊,有些框架會將程式碼與 HTML 混雜,一方面需要靠迴圈列印出資料,一方面需要依功能、操作性產生表單等等的界面。

  1. Controller

控制器,控制某段程式碼的流程運作。控制器會針對各種要求進行事件的傳遞或是處理方法,去向Model連結資料,再將結果傳遞至View。

為什麼要用 MVC

MVC 架構可運用於大型的多人開發專案,讓開發中人員能專精某個區塊,例如不需要顯示畫面的程式碼,只要在 Model 中撰寫即可。專精網頁 UI 的開發者可在 View 修改頁面,適合安全性內部的相關處理即可在 Controller 定義相關的程式碼。區塊的分隔讓開發員彼此間不會受到檔案被編修的干擾。

Rails MVC 的架構原理

第一篇文章中筆者提過 Rails 的 MVC 實際架構,在這裡重述一次加深讀者對此架構的印象。

Ruby on Rails MVC 架構與運作流程

▲ 圖2:Ruby on Rails MVC 架構與運作流程

  1. Route.rb 的應用方法詳解

圖 2 為流程示意圖。當使用者發出 Request 時,程式開始處理事件觸發的運作,從網址列的 Request 發送至 Routing 關卡,再由 Route.rb 的查表方式指定至某個 Action Controller。

例如在上篇的範例中網址為 http://localhost:3001/phone/index,則在 route.rb 裡頭就會有一行 get "phone/index" 的路由設定。

因此 RoR 就會到 app/controller/phone_controller.rb 程式碼中定義的 index 程式碼區塊執行指令。

如下圖 3 與圖 4 的範例:

route.rb 的設定

▲ 圖3:route.rb 的設定

action controller所定義的actions

▲ 圖4:action controller 所定義的 actions

由於現階段 Web 應用的 app 已被廣泛使用,再加上 Window form 的桌面程式設計入門困難,且有系統平台相容性的問題,因此許多 web 應用框架會在網址列加入 route 的功能應用,一方面為求 SEO,另一方面也是避免安全性的問題。未來傳統的網址參數傳遞方式將會式微。

該如何有效的運用 Route 功能?

RoR 在 Route 操作上實踐了 RESTful 的理論,因此在 CRUD 流程中可以依照慣例自動定義 URI 發出 Request 的動詞。這些動詞出自於將 POST、GET、PUT、DELETE 對應到資料的新增、讀取、更新、刪除四項操作。將 HTTP 動詞納入考慮後,我們再參考圖 3 所定義的 route 如下:

POST /phones 對應到 Controller 中的 create action
GET /phones/1 對應到 Controller 中的 show action
PUT /phones/1 對應到 Controller 中的 update action
DELETE /phones/1 對應到 Controller 中的 destroy action

按照慣例,你的 coltroller 名稱本來是單數的 phone,要轉化成 RESTful,最好的方式是變成複數 phones 來命名。若讀者已經按照前篇的範例實作,請砍掉重練。

在 route.rb 加上這一行程式碼:

resources :phones

這個 route 就會定義出以下七個 Action:

get    '/phones'  => "phones#index",   :as => "phones"
post '/phones' => "phones#create", :as => "phones"
get '/phones/:id' => "phones#show", :as => "phone"
put '/phones/:id' => "phones#update", :as => "phone"
delete '/phones/:id' => "phones#destroy", :as => "phone"
get '/phones/new' => "phones#new", :as => "new_phone"
get '/phones/:id/edit' => "phones#edit", :as => "edit_phone"


這七個路由可以先移除,只留下 resources:phone,就會發現這些定義非常方便實用。這七個 Action 方法的方法名稱,是 Rails 本身定義好的,無法修改,你可以這樣記:

show、new、edit、update、destroy 是單數,對單一筆資料操作
index、create 是複數,對群體資料操作
event_path(@phone) 需要參數,根據 HTTP 動作判定 show、update、destroy
events_path 不需參數,依照 HTTP 動作判定 index、create

而用了 RESTful 之後,其影響是表單所使用的 form_for、link_to 與 redirect_to 會修改成如下:

 phone_path(@phone), :method => :put do |f| %>


並且只需記得 resources 就能寫出 URL Helper,

[custom route]_phone[s]_path( phone ), :method => GET | POST | PUT | DELETE

可以不必再寫成如下的手動路由指定方式,

link_to phone.name, :controller => 'phones', :action => :show , :id =>phone.id

實際上 Routing 不是 MVC 一定會用到的技術,但 RoR 是個 Web framework,所以路由在此就會變得比較重要,本篇的重點是在 RoR 的 MVC 架構下說明,因此 Routing 就必須納入說明。

Model 模組

在撰寫程式的過程中,有經驗的工程師會將重複利用的程式碼另外封裝成模組,好讓程式在運作時直接以一行流的方式跑完十行的程式碼。

而在 RoR 中的 Model 大都是連結資料庫,並且在服務開始之後就會初始化資料表,將每個欄位載入成物件操作或是方法,因此在 phone 的範例中,可以在 app/model/pbook.rb 看到這個檔案,若沒有任何相關的特別設定,它通常會保留空白,然後就可以用 Phone.find(id) 的操作以 puts Phone.name 的方法把姓名印出。

通常在 RoR 中的 ActiveRecord 區塊就是 Model 的應用類別。

如果沒有特別的資料表關聯設定一般說來都保持這兩行的狀態

▲ 圖5:如果沒有特別的資料表關聯設定一般說來都保持這兩行的狀態

若在資料表之間有關聯的狀況或是需要轉換常數與變數的的程序,大多會在這裡設定

▲ 圖6:若在資料表之間有關聯的狀況,或是需要轉換常數與變數的的程序,大多會在這裡設定

所以如圖 5 與圖 6 的慣例,程式設計師若對於資料庫的關聯很專精,就會在這個區塊撰寫與資料表處理、關聯相關的程式碼。

  1. View 檢視

大部分的 web 應用程式一定會有一套完整的 UI 以供使用者操作,包含能控制鍵盤、滑鼠、螢幕繪製的項目。在 RoR 中,View 的區塊相當常見,而控制 View 相關畫面呈現的是靠 Action Controller 接受 Route 參數再繪製出 View。

另外,在其它篇被忽略的 Layout 是 RoR 中利用 View 的方式,以 ActionName.html.erb 帶入至 app/views/layouts/application.html.erb,並以 繪製出完整的畫面。

RoR輸出頁面的關係

▲ 圖7:RoR 輸出頁面的關係

在 app/views/layouts/application.html.erb 之中即有完整的 標籤,所以重視美工外觀的 HTML 設計人員就可以從這裡編修網頁美工,而圖片的路徑一律放在 /public/images,再使用 images_tag() 的內建函數產生連結圖片的標籤。

一般說來,這樣的關係是利用 Partial(局部樣板)的觀念拼湊出一張網頁,所以如果是一系列統一的網頁版型,通常只要修改 application.html.erb 檔案即可。

下圖範例中,資料都在 "body" 與 "/body" 之間變化,只要用 yield 這個內建的函數即可讓程式共用這一型的版面。

完整的 HTML 範例

▲ 圖8:application.html.erb 完整的 HTML 範例

如果還想在每一頁網頁的版頭放置登入狀態的功能,你可以在 application.html.erb 使用 "common/PartName" %>,那麼所建立的檔案名稱路目錄就在 app/views/common/_partName.html.erb,若有很多局部樣板需要共用的話,那麼未來這個 application.html.erb 大概就會長成下圖。

整個樣板 application.html.erb 套入多個局部樣板的程式碼

▲ 圖9:整個樣板 application.html.erb 套入多個局部樣板的程式碼

  1. Controller 控制器

RoR 的 Controller 扮演最重要的角色。它一方面接受由 Route 分析出來的路由,以決定哪個控制器該被執行,讓控制器執行某個動作,也就是在 app/controller 中 AppName_controller.rb 被定義的 Method。另一方面 Controller 也要和 Model 傳遞資料,以及跟 Views 處理輸出,看起來它相當忙啊。

有時一個專案在 app/controller/ 不一定只有一個控制器,所以就要在路由個別為它設定導引的描述。如下圖,

多個控制器的 RoR 專案

▲ 圖10:多個控制器的 RoR 專案

RoR 定義的 Actions

▲ 圖11:RoR 定義的 Actions

不過這個 Controller 的運作方式還是必須搭配 Route 一起說明,因此在這一段還是拿 Route 來補充。

如何知道該執行哪個控制器跟動作?如果網址如下:

http://localhost/shopping/computer/info/12333

那麼在 RoR 裡程式流程如下:

  1. 選擇 app/controller/Shopping_controller.rb 的控制器。
  2. 執行 Shopping_controller.rb 裡已定義 info 的動作。
  3. 由 info 所設計的程式碼,並將 id:12333,向 app/model/computers.rb 取出資料庫名為 computers 資料表中的資料。
  4. 將資料初始化之後由 Shopping_controller.rb 中的 info 動作,把 12333 的資料傳遞至 app/views/shopping/info.html.erb。
  5. 最後該控制器會把 info.html.erb 產生的結果整入至樣板 app/views/layouts/applications.html.erb 以完成整個網頁的輸出。

若要做出「將商品放入購物車」,網址大致如下:

http://localhost/shopping/cart/12333

結帳之後會是:

http://localhost/shopping/checkout

所以在 shopping_controller.rb 裡就會定義 cart 跟 checkout 的動作。而在 views 裡就會有 cart.html.erb 跟 checkout.html.erb 的局部頁面。

以上 RoR 的 MVC 就介紹到此,相信經過這樣有條理的說明,讀者們可以更加明暸它們之間的運作關係,也更容易導入設計專案時所相關連的檔案路徑,讓開發RoR的歷程不再困難重重。

作者簡介

麥克阿忠,資深網站程式開發者,興趣是攝影。目前擔任 Ruby on Rails 網站開發員,主要使用 Ubuntu Server 進行 Web 應用程式開發。

作者部落格 http://about.me/MichaelChen520
歡迎對 Ruby 有興趣的同好前來交流指教。

[技術專欄] 利用 FreeNAS 打造儲存設備 (7)─Failover(故障轉移)
Weithenn ( http://www.weithenn.org/ ) / 文
利用 FreeNAS 打造儲存設備 (7)─Failover(故障轉移)

前言

本文將實作建立 lagg 虛擬網路介面,以達到 FreeNAS 主機網路發生故障時的轉移功能,並且分別解說由 Console 或由 GUI 圖形介面進行的修改方式,設定完成後會進行 Lagg 故障轉移機制測試。

 

實作環境

- 作業系統:FreeNAS-8.0.2-RELEASE(32 位元版本)
- 網路卡:em0、em1
- 區域網路 IP 網段:10.10.75.0 / 255.255.255.0
- Default Gateway:10.10.75.254

Lagg 虛擬網路卡

Lagg 是將 FreeNAS 主機上多片實體網路卡群組之後所產生的一片虛擬網路卡,它可以讓實體網路卡具備故障轉移 (Failover),以及頻寬合併 (LACP、FEC) 或流量均衡負載 (Loadbalance, Round-robin) 的能力,若設定為 None 模式則會禁止任何網路流量,但不會禁止 lagg 介面的建立。

Console 設定 Lagg 故障轉移功能

要設定 FreeNAS 主機 Lagg 故障轉移功能以前,請先將網卡上的網路線拔除,以避免主機一開機就尋找區網內 DHCP Server 干擾設定。Console 介面手動設定固定 IP 位址的步驟如下:

02. 輸入「1」 進入「Configure Network Interfaces」:設定網卡 IP 位址
  • Select an interface (q to quit):請選擇要設定固定 IP 位址的實體網路卡編號,輸入「1」選擇剛才建立的「lagg0」網路卡。
  • Delete existing config? (y/n):是否要刪除已經存在的 IP 位址設定內容,輸入「n」表示 No。
  • Configure Interface for DHCP? (y/n):是否要啟用此網路卡的 DHCP Client 功能,輸入「n」表示 No。
  • Configure IPv4? (y/n):是否要設定此網路卡的 IPv4 位址資訊,輸入「y」表示 Yes。
  • Interface name [lagg0]:您可以輸入此網路卡的別名,若直接按下 Enter 則套用網路卡編號 lagg0。
  • IPv4 Address:請輸入 IPv4 位址格式,其中網路遮罩設定支援 Subnet mask 表示方式 255.255.255.0 以及 CIDR 表示方式 /24,輸入「10.10.75.10/24」設定固定 IP 位址。
  • Configure IPv6? (y/n):是否要設定此網路卡的 IPv6 位址資訊,輸入「n」表示 No。
  • Restarting network ok:設定完成後 FreeNAS 會重新啟動網路服務,並回到 Console 畫面。
03. 輸入「4」進入「Configure Default Route」:設定主機預設閘道 IP 位址
  • Configure IPv4 Default Route? (y/n):是否設定 IPv4 預設閘道資訊,輸入「y」表示 Yes。
  • IPv4 Default Route:請輸入區域網路中預設閘道的 IP 位址,輸入「10.10.75.254」。
  • Configure Ipv6 Default Route? (y/n):是否設定 Ipv6 預設閘道資訊,輸入「n」表示 No。
  • Restarting routing ok:設定完成後 FreeNAS 會重新啟動路由服務,並回到 Console 畫面。
04. 輸入「6」進入「Configure DNS」:設定主機使用名稱解析伺服器 IP 位址
  • DNS Domain [local]:請輸入主機的網域名稱(DNS 尾碼),此例輸入「weithenn.org」。
  • DNS Nameserver 1:請輸入主機使用的第一台 DNS 名稱解析伺服器 IP 位址,輸入「8.8.8.8」。
  • DNS Nameserver 2:請輸入主機使用的第二台 DNS 名稱解析伺服器 IP 位址,輸入「168.95.1.1」。
  • DNS Nameserver 3:請輸入主機使用的第三台 DNS 名稱解析伺服器 IP 位址,輸入「168.95.192.1」。
  • Reloading network config ok:設定完成後 FreeNAS 會重新載入網路設定,並回到 Console 畫面。
05. 輸入「10」進入「Reboot」選項重新啟動主機
  • Confirm reboot (y/n):是否確定要重新啟動主機,輸入「y」表示 Yes。
06.重新啟動主機的同時,請將主機網路卡 (em0、em1) 與網路交換器之間的網路線插上。
建立 Lagg 虛擬網路介面

▲ 圖1:建立 Lagg 虛擬網路介面

設定固定 IP 位址至 Lagg 網路介面

▲ 圖2:設定固定 IP 位址至 Lagg 網路介面

設定 Default Gateway 至 Lagg 網路介面

▲ 圖3:設定 Default Gateway 至 Lagg 網路介面

設定 Domain 及 DNS 至 Lagg 網路介面

▲ 圖4:設定 Domain 及 DNS 至 Lagg 網路介面

GUI 設定 Lagg 故障轉移功能

01. 先將 FreeNAS 主機其中一片網路卡接上網路線(只插 em0),區域網路中已有架設 DHCP 伺服器,主機由 em0 網路卡取得 IP 位址 10.10.75.52。
02. 開啟瀏覽器後於網址列輸入 FreeNAS 主機暫時的 IP 位址「http://10.10.75.52」,此時將自動登入 FreeNAS GUI 圖形介面(IE Browser 已可正常操作)。
[技術專欄] 基於 KVM 與 libvirt 的虛擬化叢集系統-儲存空間的配置
魏藥 /文

簡介

上次我們介紹了如何使用 KVM 與 libvirt 架設虛擬化叢集,其儲存方式是採用 NFS。但NFS 並非唯一的網路存取方案,本篇將會介紹另一種 iSCSI 的網路儲存方式。此外,也會針對 QEMU 特有的 qcow2 儲存格式進行介紹,希望協助讀者在實作時能更快上手。

 

iSCSI

iSCSI 是在 TCP/IP 通訊協定下的 SCSI 實作,這意味著您可以透過區域網路使用 iSCSI 連接其他電腦的硬碟設備,並直接與設備通訊。擔任過網管的朋友或許已經認識到 SCSI 以及 SAS 介面的儲存設備可提供良好的速度與穩定性。

這裡要特別提醒讀者,使用 iSCSI 連接時,建議多架設一組獨立的區域網路來部署,而不建議與原本的網路混雜,以避免降低存取效能。

架設 iSCSI 儲存設備

一般而言,您可以採購一組 SAN (storage area network) 來使用,也有一些作業系統發行版專門針對儲存用途作設計,例如 Openfiler、FreeNAS 等。在此作者將介紹如何使用 Debian 安裝相關套件滿足此需求。

01. 安裝作業系統與套件

請安裝乾淨的 Debian,分割硬碟時需獨立出數塊未分割的磁區,以作為將來虛擬機器使用的硬碟,在此建議用 LVM 來設定,因為比起 MS-DOS 的磁區分割模式,LVM 所允許的分割區數目較多,也更具延展彈性。安裝完 Debian 系統之後請安裝 iSCSI Target(伺服器軟體)。

安裝完作業系統以後,也請記得安裝 iscsitarget 以及 iscsitarget-dkms:

# aptitude install iscsitarget iscsitarget-dkms

設定 iSCSI Target 的 Logical Unit (LUN)

在此我們需要設定 iSCSI 參數,新增一個 Target 以及數個 LUN。

您需要一個 Target 名稱,依照 RFC 3720,Target 的名稱必須使用以下格式:

iqn.[年]-[月].[倒著寫的單位網域名稱]:[自己定義的名稱]
例如 iqn.2011-08.org.openfoundry:storage.vm1

您還需要磁碟分割區的裝置路徑,通常會在 /dev 裡面,如果您使用 LVM,在 /dev/[LVM 名稱] 裡面通常有不同的分割區。

因此請修改 /etc/iet/ietd.conf 並加入以下項目。本內容為 OpenFoudry 之設定,請適當修改為適合自己的環境:

Target iqn.2011-08.org.openfoundry:storage.vm1
Lun 0 Path=/dev/storage_vg/vol1,Type=blockio
Lun 1 Path=/dev/storage_vg/vol2,Type=blockio

我們的規劃中,一個 LUN 就相當於虛擬機器所使用的一個硬碟,在本範例中只有兩個 LUN,但您可以依照個人需求增加 LUN 數目。

設定 iSCSI Target 存取權限

修改 /etc/iet/initators.allow,將原本允許所有連線的 ALL ALL 設定以註解掉的方式使其失效,並參考以下範例輸入(IP 請輸入 VM host 端的位置或是網段)。本內容為 OpenFoudry 之設定,請依照自己的需求修改為適合自己機器的環境:

iqn.2011-08.org.openfoundry:storage.vm1 192.168.1.0/24

或是

iqn.2011-08.org.openfoundry:storage.vm1 192.168.1.1, 192.168.1.2

啟動 iSCSI Target

修改 /etc/defaul

轉寄『第 186 期 程式語言延伸模組管理系統』這期電子報

寄信人暱稱  寄信人email
收信人暱稱  收信人email

  • 社群留言
  • 留言報主