:::
顯示具有 Virtual Machine/OpenVZ 標籤的文章。 顯示所有文章

探究式課程與小論文寫作的結合:小論文寫作數位學習課程 / Inquiry-based Teaching in Inforation Literacy Education: A Research Paper Instruction E-learning Course for High School Students

探究式課程與小論文寫作的結合:小論文寫作數位學習課程 / Inquiry-based Teaching in Inforation Literacy Education: A Research Paper Instruction E-learning Course for High School Students

image

最近跟圖書館員合作,將現在DLLL實驗室發展的系統之一合作網頁科學探究學習環境系統CWISE應用於高中生小論文寫作教學上,做成一個數位學習的線上課程。以下將介紹這個線上課程的內容,以及製作參展海報與傳單的一些心得。

(more...)

OpenVZ虛擬應用範本備份 / Backup OpenVZ Format Virtual Templates

OpenVZ虛擬應用範本備份 / Backup OpenVZ Format Virtual Templates

image

最近在觀看Proxmox VE改版的時候才發現Proxmox VE已經捨棄使用OpenVZ虛擬化技術,而且虛擬應用範本主要的來源Turnkey Linux亦不再提供OpenVZ的格式。為了避免以後使用OpenVZ時找不到虛擬應用範本可供安裝,我認為需要趕快將手邊有的虛擬應用範本備份到其他地方,以供未來需要的時候還能找來下載。下面我以虛擬應用範本內含的系統來分類,有些混雜了下載自Proxmox VE跟我自己做的虛擬應用範本,全部一併備份吧。

(more...)

Docker到底哪裡比OpenVZ好? / Why Docker is better than OpenVZ?

Docker到底哪裡比OpenVZ好? / Why Docker is better than OpenVZ?

image

要說近年來虛擬化的革命性技術,大家都會講說是Docker,但是OpenVZ卻被遺忘在歷史的洪流中。由於Proxmox VE的緣故,我很常使用OpenVZ容器虛擬化技術。到底Docker是哪裡比較好呢?以下就讓我姑且做個簡單的比較吧。


Docker的入門手冊 / Guide to Docker

同樣是使用Container容器虛擬化技術,每次看到Docker 的熱門程度大幅度超越OpenVZ的時候,作為OpenVZ愛用者的我總是百感交集。最近利用Google Book看了一下GitBook中的《Docker —— 從入門到實踐­》,赫然發現……Docker真的很厲害,竟然把我想要實作的功能都內建了!

image

Docker到底哪裡好? / Advantages of Docker

跟我很熟的人應該都常常在聽我講OpenVZ的優點,主要是全虛擬機器封裝、運作快速等等。Docker作為OpenVZ的後起之輩,同樣採用容器虛擬化技術,但是在運作效率、資料管理、網路管理與映像檔發布上又有更好的作法:

效率部分 / System Efficiency

OpenVZ跟Docker採同樣的技術,但Docker在運作APP(不是手機的APP)時,只會啟動相關的process,因此資源消耗更低。細節請看5.1. 啟動

資料管理 / Data Management

OpenVZ是完整封裝一個虛擬機器,但Docker則是將一個虛擬機器拆分成多個層次:映像檔(包含作業系統)、資料卷或資料卷容器(存放設定檔與運作資料)。因此可以架設多個虛擬機器,但是存取同樣的資料卷,以達到分散式運作的架構。細節請看7.2. 資料卷容器

從這篇建置MongoDB Docker虛擬機器的教學來看,甚至連文件型資料庫(大多數關聯式資料庫都是文件型)的資料庫檔案都可以掛載在資料卷上。這個意思是說可以取代資料庫的高可用架構HA了嗎?

我現在在OpenVZ上使用NFS掛載,並另外架設資料庫HA,但是操作順序比較複雜,不是很好用。

網路管理 / Network Management

Docker內建連接埠轉遞的功能,細節請看9.4. 端口映射實作。雖然後來Proxmox VE也把連接埠轉遞做到Firewall裡面,但操作上仍比較麻煩。

我現在是架設Zentyal路由器來控制連接埠轉遞。優點是可以加上Pound實作反向代理伺服器,這就是Docker無法匹敵的功能了。

映像檔發佈與保存庫(倉庫) / Publish Image & Repository

Docker採用git版本控制技術來發布影像檔,官方也有Docker Hub集中保存的倉庫,細節請看 6. 倉庫。相較之下,OpenVZ的虛擬應用範本只能在論壇中自行貼上連結,連上傳空間都要自己想辦法。就算一個OpenVZ的虛擬應用範本只要200MB左右,要找地方擺放也是個麻煩。更何況版本一修改就要重新打包上傳,非常麻煩啊!

Docker的其他資源 / Resource for Docker

Docker的網頁圖形化管理介面:Panamax / Web GUI Management Tool for Docker: Panamax

marketing_screen_03_big

以前我會嫌Docker都要用指令來操作,還是很不成熟。就算CoreOS多穩定,也不能解決管理上的問題。但是現在已經出現像是Panamax這樣子的網頁管理工具,可以免去學習指令操作的學習曲線。

在Windows上運作Docker:Boot2Docker / Run Docker in Windows: Boot2Docker

0Z13V137-2

就連Windows上也可以直接運作Docker了,運作一個Docker只要佔用27MB的記憶體,並且只需要5秒就能起動,詳細請看這篇Boot2Docker的說明,或直接到Boot2docker專案首頁下載。


結語 / Conclusion

因此越看越覺得Docker真是令人心動,是不是該來裝個Core OS搭配網頁管理介面Panamax來玩玩看Docker呢?

備註:這篇本來只是想在Facebook上隨便寫寫,可是想說心得文應該寫在Blogger中,所以改用Android上的Blogger APP撰寫草稿,沒想到越寫越長。草稿打完之後改到電腦上用Windows Live Writer來撰寫,加了大量的鏈結與圖片,就變成這一篇一千多字的心得隨筆。根據以上經驗所獲得的結論是:還是用Evernote來寫比較好,Blogger的APP並不是一個稱職的豐富文本(Rich-text)編輯器啊。

(more...)

PostgreSQL高可用架構:pgpool2虛擬應用範本 / HA structure of PostgreSQL: pgpool2 Virtual Application Template

PostgreSQL高可用架構:pgpool2虛擬應用範本 / HA structure of PostgreSQL: pgpool2 Virtual Application Template

image

傳統的關聯式資料庫PostgreSQL一般而言都是裝在本機端上運作,但是搭配了pgpool中介工具,就能夠串聯多臺PostgreSQL伺服器,以達到高可用(High Available)的架構。我將pgpool與PosgreSQL的高可用架構做成了兩臺虛擬應用範本pgpool-master跟pgpool-slave提供大家下載,並說明擴充的方法。


什麼是pgpool? / What is pgpool?

pgpool是PostgreSQL的中介工具(middleware),現在的版本為pgpool-II,所以軟體名稱通常是pgpool2,以下內容翻譯自pgpool Wiki

pgpool-II採BSD開放原始碼授權,提供了以下功能:

  • 資料庫連線池管理(Connection Pooling):pgpool-II保存連線到PostgreSQL伺服器的連線,當同樣設定的人進行連線時,就拿以保存的連線來使用。這可以降低資料庫連線的額外負擔(overhead),並且改善系統整體效能。(布丁註:早期我在DSpace上使用Proxool也是同樣的目的)
  • 資料複製(replication):pgpool-II可以管理多個PostgreSQL伺服器。使用複製功能,可以即時將資料備份在2個或更多的實體硬碟中,如此一來即使硬碟損毀,伺服器仍然可以繼續提供服務。
  • 負載平衡(Load Balancing):當資料複製功能開啟時,在任何伺服器上執行SELECT查詢時的會獲得同樣地結果。pgpool-II將SELECT查詢分散到多個PostgreSQL伺服器上,以改進整體的效能。PostgreSQL伺服器的數量越多,效能提升的幅度越多。負載平衡特別適用於很多使用者同時執行大量查詢的時候。
  • 限制超量的資料庫連線:PostgreSQL會限制最大同時連線數量,超量的連線將會被拒絕。調整資料庫連線上限會增加資源消耗量,並影響系統效能。pgpool-II也可以設定連線數量的上限,而超過的連線將會列入等待,而不會立即回傳錯誤
  • 並行查詢(Parallel Query):使用並行查詢功能,查詢本身會切割成多個部分,並同時在多臺伺服器上同時進行查詢、取回資料、並進行合併,以此降低整體執行的時間。(布丁註:類似RAID-0的概念) 並行查詢的功能最適合用在查詢大規模的資料上。

pgpool-II將PostgreSQL伺服器作為後端與前端的通訊接口,並仰賴與伺服器之間的連線。因此,資料庫應用程式(前端,意思是網站)會將pgpool-II視為一臺PostgreSQL伺服器,而資料庫伺服器(後端)則會視pgpool-II為它的客戶端。因為pgpool-II對伺服器與客戶端來說都是透明的,因此既有的資料庫應用程式(網站)可以直接使用pgpool-II而幾乎不需要更改設定。(布丁註:通常修改連接埠即可)

(我翻譯完才發現pgpool有中文wiki…)

pgpool-II的配置 / Configuring pgpool-II

pgpool有很多模式,每一種模式都會啟用或關閉部分功能,詳細的設定一般會位於 /etc/pgpool.conf 與 /etc/pcp.conf。讓我們來看看pgpool的四種模式:

功能/模式 原始模式(*3) 複製模式 主/備模式 並行查詢模式
連接池管理 X O O O
資料複製 X O X (*1)
負載平衡 X O O (*1)
故障恢復 O O O X
線上恢復 X O (*2) X
並行查詢 X X X O
需要伺服器數量 1 或更多 2 或更多 2 或更多 2 或更多
是否需要系統資料庫
  • O表示可用、X表示不可用。
  • *1 並行模式需要同時打開複製與負載平衡的設定,但是複製和負載平衡無法用於並行查詢模式中的分佈式表。
  • *2 線上恢復可以和串流複製同時使用。
  • *3 客戶端僅是透過pgpool-II連接到PostgreSQL伺服器。這種模式僅用於限制連到伺服器的連接數,或著在多臺機器上啟用故障恢復的功能。

本文主要的目標在於第二種模式:複製模式。以下大致上說明安裝的過程,至於結果請直接用虛擬應用範本就好了。

安裝pgpool-II / Install pgpool-II

我以Turunkey Linux的PostgreSQL虛擬應用範本為基礎,以apt-get安裝pgpool2,然後修改配置後完成。大致做法如下:

  1. 下載Turnkey Linux Postgresql:這個虛擬應用範本做得很貼心,安裝完成之後可以自動提示設定PostgreSQL預設帳號postgres的密碼,使用https連線就會開啟phpPgAdmin
  2. 從虛擬應用範本建立虛擬機器:做法請看我之前寫的教學:Proxmox VE 3安裝與建立OpenVZ虛擬機器。建立的虛擬機器有兩臺,各別是pgpool-master與pgpool-slave。以下步驟大部分都會在這兩台上進行。這兩台伺服器的IP為:
    1. pgpool-master: 192.168.11.110
    2. pgpool-slave: 192.168.11.111
  3. 啟動Turnkey Linux Postgresql:Turnkey Linux的虛擬應用範本啟動時都要先進行初始化,大概要花10分鐘的時間。
  4. 安裝pgpool2:安裝指令為:
    apt-get install –y pgpool2
  5. 設定伺服器之間SSH的連線:
    1. 先設定postgres帳號的密碼:
      passwd postgres
      設定密碼為: password
    2. 切換到posgresql帳號:
      su postgres
    3. 在pgpool-master電腦上建立ssh金鑰:
      ssk-keygen
      當詢問passphrase的時候,直接enter就好了,不設定passphrase。
      image
    4. 複製金鑰到pgpool-slave:
      ssh-copy-id postgres@192.168.11.111
      詢問密碼時,輸入剛剛設定postgres的密碼:password
      image
  6. 設定PostgreSQL的連線權限:
    1. 修改/etc/postgresql/9.1/main/pg_hba.conf ,注意,路徑可能會因為PostgreSQL的版本而有所不同,我用的是9.1版本。
    2. 將METHOD中使用peer與md5的登入方式全部改成password。例如:
      host    all         all         0.0.0.0/0             password #md5
      image
  7. 設定 /etc/pgpool2/pcp.conf
    image
    1. 建立要連線帳號的md5密碼,我們用預設帳號postgres來做這件事情:
      pg_md5 postgres –p
    2. 輸入密碼,我建立公開範本的統一密碼都是password
    3. 取得md5編碼:「88e2d8cd1e92fd5544c8621508cd706b」
    4. 連同帳號組成「postgres:88e2d8cd1e92fd5544c8621508cd706b」,加到 /etc/pgpool2/pcp.conf最後一行
  8. 調整 /etc/pgpool2/pgpool.conf 基本設定:
    1. listen_addresses = '*' # 表示可讓任何其他伺服器連線到pgpool。
    2. replication_mode = on  # 啟用資料複製
    3. load_balance_mode = on # 啟用負載平衡
  9. 調整 /etc/pgpool2/pgpool.conf 連接PostgreSQL伺服器的設定,backend_hostname1就是pgpool-slave:
    backend_hostname1 = 'localhost'
    backend_port1 = 5432
    backend_weight1 = 1
    backend_hostname1 = '192.168.11.111'
    backend_port1 = 5432
    backend_weight1 = 1

    image
  10. 修改phpPgAdmin的連接埠設定 /etc/phppgadmin/config.inc.php:
    $conf['servers'][0]['port'] = 5433;
    這樣phppgadmin就會連到pgpool,而不是原本的PostgreSQL。
  11. 重新啟動pgpool-II跟PostgreSQL:
    service pgpool2 restart
    service pgpool2 postgresql
  12. 開啟phpPgAdmin看看成果:
    https://192.168.11.110
    image
    這個網址應該可以打開phpPgAdmin,然後請用postgres / password來登入。登入之後的任何操作都會在pgpool-master跟pgpool-slave上生效。這就代表成功了。

安裝pgpoolAdmin / Install pgpoolAdmin

pgpoolAdmin是用來管理pgpool-II的PHP網頁管理工具。我們可以用它來快速確認pgpool是否正常運作。安裝方法參考自Aric Gardner的PGPOOL-II-ADMIN安裝教學。我把pgpoolAdmin跟phpPgAdmin結合,大致上步驟如下:

  1. 下載pgpoolAdmin:
  2. 解壓縮後,更改目錄名為admin-tool
  3. 修改擁有者為root
    chown -R root admin-tool
  4. 修改目錄與檔案為777
    chmod 777 templates_c
    chmod 777 conf/pgmgt.conf.php
  5. 放置到phpPgAdmin的網頁目錄:/usr/share/phppgadmin/admin-tool/
  6. 開啟網頁 https://192.168.11.110/admin-tool/install,按照指示設定。主要設定包括了
    1. 修改以下目錄與檔案的修改為777 (使用chmod)
      1. /etc/pgpool2/pcp.conf
      2. /etc/pgpool2//etc/pgpool2/pgpool.conf
    2. pgpool.conf File (string): /etc/pgpool2/pgpool.conf
    3. Password File (string): /etc/pgpool2/pcp.conf
    4. pgpool Command (string): /usr/sbin/pgpool
    5. PCP Directory (string): /usr/sbin/
  7. 設定完成後,刪除install資料夾
    rm -rf /usr/share/phppgadmin/admin-tool/install/

開啟網頁:https://192.168.11.110/admin-tool/status.php

image

設定完成。


下載pgpool虛擬應用範本 / Download pgpool Virtual Application Template

經過以上漫長的安裝過程之後,最後成果就是pgpool-master跟pgpool-slave這兩個虛擬應用範本啦。

建立虛擬應用範本的方法請參考我之前寫的教學:Proxmox VE 3安裝與建立OpenVZ虛擬機器

image

建置好之後,設定啟動,預設就是這兩台伺服器的PostgreSQL高可用架構。


pgpool虛擬應用範本操作教學 / pgpool Virtual Application Guide

接下來我要說明使用教學。在以下教學中的網路設定如下:

  • pgpool-master: 192.168.11.110 (主要操作都在這進行)
  • pgpool-slave:192.168.11.111
  • pgpool-slave2 (複製pgpool-slave):192.168.11.112
如何操作pgpool?

請使用phpPgAdmin來操作pgpool,操作方式就跟原本操作PostgreSQL一樣!

image

網址是: https://[pgpool-master-ip]/

如何觀看pgpool的運作狀況?

請使用pgpoolAdmin,網址是:https://[pgpool-master-ip]/admin-tool/

image

如何連接到pgpool? / How to connect to pgpool?

很簡單,使用原本連接到PostgreSQL的設定方式,連線到pgpool-master,然後連接埠改成5433就可以了。(PostgreSQL預設連接埠為5432)

CodeIgnitor的資料庫連線設定來舉例,

原本的設定可能是連線到localhost本機端:
$db['default']['hostname'] = "localhost";
$db['default']['username'] = "root";
$db['default']['password'] = "password";
$db['default']['database'] = "database_name";
$db['default']['dbdriver'] = "postgres";

現在要改成連線到pgpool-master (假設IP為192.168.11.110),而且要指定連接埠為5433:
$db['default']['hostname'] = "192.168.11.110";
$db['default']['username'] = "root";
$db['default']['password'] = "password";
$db['default']['database'] = "database_name";
$db['default']['dbdriver'] = "postgres";
$db['default']['port'] = 5433;

如何增加pgpool的數量? / How to extend pgpool structure?

首先,我們要再建置一臺pgpool-slave,設定為pgpool-slave2,設定網路位址為192.168.11.112

2015-06-20_000510

然後來到pgpool-master上,修改 /etc/pgpool2/pgpool.conf。加入以下設定:(因為是第三臺,所以編號為2,下一臺編號就是3,依此類推)
backend_hostname2 = '192.168.11.112'
backend_port2 = 5432
backend_weight2 = 1

重新啟動pgpool:
service pgpool2 restart

從pgpoolAdmin來看,pgpool-slave2已經加入節點中。

image

有其他問題怎麼辦? / Other Questions

請使用Blogger的「張貼留言」來描述您的問題。


結論 / Conclusion

其實最近我連續做了很多個OpenVZ的虛擬應用範本,可是大部分是做給實驗室內部使用的,因此還沒能花時間轉換成可以發佈的版本。老實說,用OpenVZ製作虛擬應用範本有點麻煩。即使我用了Turnkey Linux來製作虛擬機器,可是檔案還是有200MB以上,要找到空間擺放,實在是不太容易。而且如果我要修改一個檔案,那就要重新打包、上傳,這樣子維護虛擬應用範本實在是太沒有效率。

OpenVZ虛擬應用範本在更新上實在很麻煩,因此我開始關注起Docker的倉庫運作方式。不知道這個倉庫的運作方不方便使用?

(more...)

用OpenVZ安裝Zentyal失敗記錄

用OpenVZ安裝Zentyal失敗記錄

openvz

為了繼續之前提出的DLLL-CIAS第四版架構,我開始試著在Proxmox VE 3.2上用OpenVZ來安裝Zentyal (附帶一提,Proxmox VE本身是以VirtualBox架設的,因此是全部都在虛擬機器下運作)。我以ubuntu-14.04-x86_64.tar.gz為基礎,用apt-get來安裝Zentyal。過程很順利,但問題卻卡在最後的網路上:無法建立具有內網與外網的NAT。我嘗試了很多方法來解決這個問題,但總歸來說,無法建立的原因可歸納為兩個門檻:1. OpenVZ的veth網卡只能連到未公開的虛擬網路;2. OpenVZ的veth與venet之間無法轉遞封包。以下來說明我遇到的這兩個問題。


1. OpenVZ的veth網卡只能連到未公開的虛擬網路

image

在討論這個問題之前,我們必須先釐清OpenVZ的兩種網路模式:venet跟veth。下表是veth跟venet的差異比較:

veth跟venet的差異
Feature
特徵
veth venet
可使用的虛擬機器類型 OpenVZ
KVM
OpenVZ
可透過網頁管理
直接配置網路IP
No Yes
MAC address
網卡位置
Yes No
Broadcasts inside CT
封包會在虛擬機器間廣播
Yes No
Traffic sniffing
封包攔截
Yes No
Network security
網路安全
Low High
Can be used in bridges
可否用於橋接器
Yes No
IPv6 ready
可否使用IPv6
Yes Yes
Performance
效能
Fast Fastest

OpenVZ預設使用的是venet (Virtual NETwork),可以直接給定IP,速度非常快。但是venet沒有MAC位址,使用上較為受限,可能不適合作為Zentyal的網路。因此這次我選擇使用veth (Virtual ETHernet)來架設,veth是用模擬真實的網卡的方式,可給虛擬機器安裝如「eth0」的虛擬網卡,因此配置上會比較貼近我們真實使用情境下安裝Zentyal的模式。

我原本是這樣想,但很遺憾的是,veth並沒有照我想的去運作。建立的veth網卡只能在虛擬機器之前彼此連線,但是卻無法連上網際網路。

用KVM的方式新增veth:失敗

我是以Ubuntu 14.04來建立虛擬機器(又稱為container),一開始是用類似KVM的方式來新增網卡,但沒有成功。大致上步驟如下:

  1. 將虛擬機器關機。
  2. 新增veth網卡,Bridge設為vmbr0 (預設),其他參數、包括MAC位址,全由Proxmox VE自動指定。
  3. 虛擬機器開機。
  4. 在console端進入虛擬機器的指令列,設定網路。 (因為網路尚未設定好,所以沒辦法用SSH連入)
    以下都是虛擬機器 (container) 中的操作。
  5. /etc/network/interfaces中設定eth0:
    auto eth0
    iface eth0 inet static
            address 192.168.11.118
            netmask 255.255.255.0
            gateway 192.168.11.99
  6. 重新啟動網路:
    [container]# /etc/init.d/networking restart
  7. 使用ifconfig,確認eth0有正常啟動
  8. 使用ping,無法連到網際網路。
參考OpenVZ的veth說明來設定:失敗

由於用KVM設定veth的方法失敗了,所以我改找OpenVZ官方網站的veth說明來操作。該網頁介紹了很多方法,從簡單的設定使用IPv4的直接路由使用IPv6的直接路由、或是建立橋接器(brdige)等等。我按照上面的指示操作,但大部分都失敗了。

在OpenVZ的介紹中有幾個動作是之前沒有做過的:

  • 確保vzethdev載入:
    modprobe vzethdev
  • 開啟網路卡的forwarding跟proxy_arp

    [host-node]# ifconfig veth101.0 0
    [host-node]# echo 1 > /proc/sys/net/ipv4/conf/veth101.0/forwarding
    [host-node]# echo 1 > /proc/sys/net/ipv4/conf/veth101.0/proxy_arp
    [host-node]# echo 1 > /proc/sys/net/ipv4/conf/eth0/forwarding
    [host-node]# echo 1 > /proc/sys/net/ipv4/conf/eth0/proxy_arp

其他設定網卡的方法大致上類似。但是很遺憾的是,這些設定依然是無法讓veth網卡連線到網際網路。

奇妙的是,網路上許多人在OpenVZ中使用veth看起來都很順利,可是我自己使用OpenVZ從以前到現在就沒有veth順利連線的印象,這究竟是怎麼會是呢?如果有高手看到我這篇的話,希望能夠在下面留言欄為我解惑解惑。


2. OpenVZ的veth與venet之間無法轉遞封包

由於veth未能照預期的形式運作,所以我改轉用venet來設定網卡。

Zentyal只能抓到venet一張網卡

image

儘管虛擬機器可以設定兩個venet的IP,各別配置對外網路用的IP: 192.168.11.117跟對內網路用的IP: 10.0.0.254,但結果會如上圖所示,Zentyal只能抓到一個venet網卡。

這是因為venet網卡只有venet0,兩個IP是用虛擬網路卡的方式模擬出來的。我們可以用ifconfig來觀察虛擬機器的設定:

image

[container]# ifconfig
lo        Link encap:Local Loopback
          inet addr:127.0.0.1  Mask:255.0.0.0
          UP LOOPBACK RUNNING  MTU:16436  Metric:1
          RX packets:200 errors:0 dropped:0 overruns:0 frame:0
          TX packets:200 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:10000 (10.0 KB)  TX bytes:10000 (10.0 KB)

venet0    Link encap:UNSPEC  HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
          inet addr:127.0.0.2  P-t-P:127.0.0.2  Bcast:0.0.0.0  Mask:255.255.255.255
          UP BROADCAST POINTOPOINT RUNNING NOARP  MTU:1500  Metric:1
          RX packets:35 errors:0 dropped:0 overruns:0 frame:0
          TX packets:46 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:4480 (4.4 KB)  TX bytes:6905 (6.9 KB)

venet0:0  Link encap:UNSPEC  HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
          inet addr:192.168.11.117  P-t-P:192.168.11.117  Bcast:192.168.11.117  Mask:255.255.255.255
          UP BROADCAST POINTOPOINT RUNNING NOARP  MTU:1500  Metric:1

venet0:1  Link encap:UNSPEC  HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
          inet addr:10.0.0.254  P-t-P:10.0.0.254  Bcast:10.0.0.254  Mask:255.255.255.255
          UP BROADCAST POINTOPOINT RUNNING NOARP  MTU:1500  Metric:1

 

Zentyal設定邏輯中對外網路與對內網路有相當大的差異,若使用venet會導致Zentyal無法判斷那一張網卡是對外網路(External, WAN)還是對內網路,因此並不是一個可行的方案。

venet可連上網際網路,但無法架設NAT

即使如此,若使用venet的兩個IP來設定,對內網路依然連得到對內網路的虛擬機器、對外網路則可以讓網際網路的電腦來連線。不過光是這樣依然無法做成NAT的網路架構。

一般使用情境下,只要在Zentyal當中設定好對外網路與對內網路的網卡,Zentyal就會自動設定成NAT。若是不仰賴套裝軟體,也可以用iptables來實作NAT。我參考Ubuntu Server 12.04 LTS 設定 iptables 實現 NAT Server這篇的做法來做,關鍵的設定是在設定 IP Forwarding and Masquerading:
iptables --table nat --append POSTROUTING --out-interface venet0:0 -j MASQUERADE
iptables --append FORWARD --in-interface venet0:1 -j ACCEPT

但是很遺憾的是,依然無法成功。然後我試著用veth來作為內部網路的網卡,結果反而連venet都無法連線。我猜是因為Zentyal會蓋掉Proxmox對虛擬機器的網路設定,兩者導致了衝突。


結論:應該使用KVM來架設Zentyal

直到剛剛我都還在嘗試各種設定,但是總是該設一個期限。當我把這篇失敗的記錄寫完之後,我想也差不多該終止以OpenVZ架設Zentyal的研究,而回歸到原本使用KVM架設的規劃

想來還是有點不甘心,以OpenVZ架設的Zentyal壓縮後的備份檔案大小只有800MB不到,而且啟動速度又快。回去使用KVM的話,虛擬網卡會有網路轉換的額外負荷,只能說是「可以用」但稱不上是「很有效率」。只是因為伺服器虛擬化之後管理起來比較方便而已。

好吧,雖然不是一篇成功的研究,不過總是該打起精神,這條路就先到此為止吧。

(more...)

OpenVZ虛擬應用範本:Koha / OpenVZ Virtual Application Template: Koha 3.16

OpenVZ虛擬應用範本:Koha / OpenVZ Virtual Application Template: Koha 3.16

2014-10-14_233823

我在Turnkey Linux的LAMP虛擬應用範本上安裝了圖書館自動化系統Koha 3.16,並打包成OpenVZ虛擬應用範本的格式分享給大家使用,讓大家更容易架設Koha。

I have packaged Koha 3.16 to an OpenVZ virtual application template which is based on Turnkey Linux LAMP. In this article, I share this template and show how to start it.


Koha: 圖書館自動化系統 / Koha: A Library System

Koha是一個開放原始碼的圖書館自動化系統,可供大家免費下載、架設與使用。Koha是使用Perl (CGI),運作在Apache上,資料庫使用MySQL。這些組合都是開放原始碼授權。

Koha本身具備了兩大界面,一個是供讀者查詢館藏用的OPAC,另一個是供館員管理用的Intra內部網頁。兩者會架設在同一台伺服器上,用不同的連接埠來區隔開來。

雖然Koha可以免費取得,但是作為一個複雜的圖書館自動化系統,通常需要經過訓練才能順利使用Koha。因此有許多公司提供Koha服務來收費,例如Koha使用訓練。

下載Koha虛擬應用範本 / Download

這是一個OpenVZ的虛擬應用範本檔案 (或稱之為虛擬應用樣板,請看我之前的介紹),檔案名字是「koha_3.16.04.000_20141014.tar.gz」,雖然看起來很像是tar.gz的壓縮檔案,但這檔案本身就是一個虛擬應用範本,不需要解壓縮即可使用。

安裝Koha虛擬機器 / Install

image

關於安裝的方法,請參考我之前寫的Proxmox VE 3安裝與建立OpenVZ虛擬機器,或是從架設OpenVZ虛擬機器這一串教學開始看起。

2014-10-15_105043

架設完成之後大致上長這樣子。

登入界面 / Login

初始化安裝的時候,我預設的密碼都是password,Linux使用的帳號是root、Koha使用的帳號是koha_library。

OPAC界面 / OPAC Interface

1780796_10202992796488596_3434819395203767946_n

一般讀者使用。

  • 網址:http://your-koha-server-ip:8081/
Intra 內部管理界面 / Intra Administration

1962728_10202992800288691_66897959114382669_n

  • 網址: http://your-koha-server-ip:8080/
  • 登入帳號:koha_library
  • 登入密碼:password
修改主要密碼 / Change Master Password

為了大家方便使用,除了Linux中root帳號使用的密碼會在建立OpenVZ時指定之外,Koha中預設的安裝密碼都是password。若要正式使用,請修改預設的密碼。

修改方法請參考How to change master password of Koha ?。做法如下:

  1. 以root身份登入Koha伺服器的命令列
  2. 進入MySQL管理界面,更改koha_library的密碼:
    mysql -u root -h localhost -p  
    [請輸入預設MySQL的root帳號的密碼 password]
    use mysql;
    SET PASSWORD FOR 'koha_library'@'localhost' = PASSWORD('新密碼');
    SET PASSWORD FOR 'root'@'localhost' = PASSWORD('新密碼');
    flush privileges;
    quit;
  3. 然後修改koha-conf.xml的密碼:
    nano /etc/koha/sites/library/koha-conf.xml
  4. 密碼的位置在最下面,請找到「<pass>password</pass>」,然後吧password替換成你要的新密碼即可。nano編輯器的操作方式請參考鳥哥的教學
    2014-10-15_110450 

開始使用Koha / How to Start Use Koha

我雖然把Koha架設起來了,可是老實說我也沒有仔細研究過怎麼使用。以下我整理一些Koha的使用教學,提供需要的使用者進一步閱讀。

不過在開始之前,有幾件工作需要進行:

  • 中文化:可以看一下Koha Translation Project的漢語(臺灣),研究一下如何安裝
  • 機讀格式:預設安裝時Koha提供了MARC21UNIMARC兩種格式,但沒有臺灣特製的CMARC。我安裝時使用的是MARC21。如果需要CMARC要另外想辦法。

有問題可以請教臺灣的Koha啟蒙大師:天主教輔仁大學圖書資訊學系毛慶禎教授


結語:更多的虛擬應用範本 / Conclusion: To Create More Virtual Application Template

之前有個想法,由於我覺得OpenVZ這種輕量級的虛擬化技術,運作Koha這種網頁管理系統真的是非常適合,因此讓我開始想要將許多系統打包成OpenVZ的形式來運作,所以就出現了這次的Koha虛擬應用範本。

其實這個是為了最近的圖書館領導人才菁英碩士學分班準備的內容。我想在大家面前展示一下,只要簡單的幾個操作就能夠架設一個Koha系統,這種感覺應該讓平常總是在跟幾十萬的圖書館自動化系統奮鬥的圖書館從業人員感到印象深刻吧。(雖然Koha原本的安裝方式也不能說很難就是了)

我的目的只是展示而已,所以做完後就沒有打算進一步深入研究了。有人需要就拿去用吧,有什麼感想或建議歡迎於下面留言發表。

(more...)