:::

Thomas的VDI修改記事

前言

繼以VirtualBox架設Koha的緣由,這一篇記錄從Thomas取得的VDI檔案之後修改的過程。原本該討論主題主張以trac + svn聯合多人共同開發koha軟體,但是我其實只求能架設、使用Koha即可,並沒有準備要到參與開發的程度。

在修改Thomas原始的VDI檔時,恐怕有破壞原有計畫的疑慮,因此才打算撰寫本篇以茲說明。另一方面也是為自己摸索Linux (Thomas是使用Debian發行版)的過程留下記錄。

最後修改過的VDI檔案在下方。使用的時候,除了網路設定(/etc/network/interfaces)保留以DHCP開啟之外,其他的修改都不需要再修改。之後我會以此檔案再寫一篇以VirtualBox架設Koha的方法作為詳細說明。

koha-vdi-20080408 (分流1)

koha-vdi-20080411(分流2)

※註:內有VirtualBox 5.6.1與虛擬機器設定檔

關於虛擬機器VirtualBox與VDI動態擴充映像檔

VDI是VirtualBox架設虛擬機器時的硬碟檔案,透過以VDI架設起的VirtualBox虛擬機器,你可以快速地在任何作業系統上重現一台已經架設完成的伺服器,而不需要再從無到有第一步一步安裝設定。

然而這只是理論,實際上我也只嘗試在WindowsXP跟Windows 2003上成功架設過,尚未測試各種的情況,不能給予完美的保證。至於詳細的架設過程,請參考另一篇虛擬機器VirtualBox架設Koha。

關於Thomas的VDI硬碟檔案

Thomas架設的環境如下:

  • Linux debian 2.6.18
  • Koha 2.2.9 (已經預設是zh_TW中文環境)
  • 硬碟虛擬空間4.88GB
  • 硬碟檔案實際大小2.09GB:VDI動態擴充映像檔會隨著映像檔內安裝的實際檔案大小來改變,而不會強求一定要虛擬空間這麼大。
  • Linux登入
    帳號:koha (也可用root登入)
    密碼:ilovekoha

也許有人會對於硬碟不到3GB的剩餘空間感到憂心,但我想對於中小型圖書館來說應該已經是綽綽有餘,因此這個問題先不在研究範圍內。

以Thomas的VDI架設起的Koha,我遇到了以下問題:

  1. 鍵盤配置錯誤:執行dpkg-reconfigure console-data修正
  2. 抓不到網路卡:停止udev自動新增網路卡
  3. 語系錯誤:修改語系為zh_TW.UTF-8
  4. Koha的OPAC非預設的80 port:重新設定/etc/Koha-http.conf
  5. 修改Koha OPAC與Intranet的一些程式

以下將各問題與處理方式一一詳述。

操作方法及使用軟體

以下操作剛開始是以root身分登入本機電腦。網路可以連線之後,則改用SSH遠端登入、FileZillar上傳檔案。


鍵盤配置錯誤

一開始以root登入Linux的時候,是完全以命令列來操作,必須要依靠鍵盤輸入指令。如果你發現你打的字跟你的鍵盤不吻合,那麼得先調整鍵盤配置。

  1. 輸入「dpkg-reconfigure console-data」,開啟藍底設定畫面
  2. 按「tab」跳到「ok」,「enter」進到下一頁
  3. 選擇最後一項「Select keymap from full list」,按「enter」
  4. 選擇「pc / qwerty / US american / Standard / US Internation (ISO 8859-1)」,按「enter」

如果您連怎麼輸入「dpkg-reconfigure console-data」都做不到,那請試著按「↑」回溯一下之前的指令找找看吧。

我安裝在第二台電腦的時候才發生了這個問題,即使現在設定過配置,之後可能設定還會跑掉,這時就得照著這個步驟重做一次。


解決抓不到網路卡的問題

開機的過程中,預設的eth0並沒有被抓到,這是由於網路卡的MAC碼並不相同的緣故。

接下來修改設定我是使用vim,這個文字編輯器對於初學者來說可能不太友善,詳細的操作方式請參考基本 VIM 操作指令

debian:~#vim /etc/udev/rules.d/z25_persistent-net.rules

在udev的管理之下,從這邊會記錄著該台虛擬機器曾經安裝過的網路卡,而你目前安裝的網路卡應該會被排到最後一個去,可能被當成eth1或eth2。預設/etc/network/interface僅有自動啟動eth0,故其他的eth1或eth2自然是無法啟動了。

因此,我打算把udev自動增加網路卡的功能取消掉,方法如下。

debian:~#vim /etc/udev/rules.d/z45_persistent-net-generator.rules

將以下兩行註解掉(在該行前面加上「#」(井字號),這樣程式就不會去執行這行指令)。

#ACTION!="add", GOTO="persistent_net_generator_end"

#KERNEL=="eth*|ath*|wlan*|ra*|sta*", DRIVERS=="?*",\

接著清空vim /etc/udev/rules.d/z25_persistent-net.rules網路卡的資料。清空之後只會剩下以下五行註解文字:

# This file was automatically generated by the /lib/udev/write_net_rules
# program, probably run by the persistent-net-generator.rules rules file.
#
# You can modify it, as long as you keep each rule on a single line.
# MAC addresses must be written in lowercase.

以上方法可以解決udev自動增加網路卡的問題。

接著是設定網路,預設是將eth0以DHCP(動態主機設定協定)啟動,這是只有在VitualBox網路設定為NAT的情況下才需要用的。如果要作為伺服器,最好給予網路卡一個靜態的IP,關於VirtualBox的網路設定請參考另一篇「 VirtualBox用網路橋接器設定虛擬機器的固定IP」,以下則是示範在Linux debian裡面設定網路的步驟。

先用VIM開啟/etc/network/interfaces/

debian:~# vim /etc/network/interfaces

將原本的DHCP註解掉,然後取消靜態網路的註解(刪掉行前的#),設定如下:

#iface eth0 inet dhcp

iface eth0 inet static
address 172.20.0.15
netmask 255.255.255.0
gateway 172.20.0.1

以上的adress、netmask、gateway請改成您網路環境所使用的設定。關於network interface的詳細解說,可以參考「/etc/network/interfaces 集網路設定之大成」。

修改完成之後,請執行以下指令或重開機以重新啟動網路:

debian:~# /etc/init.d/networking restart


改用PieTTY遠端操控虛擬機器

網路設定完成之後,您應該可以用PieTTY之類的軟體來連線到虛擬機器了。由於PieTTY操作起來比起在虛擬機器VirtualBox上操作更為順手,所以接下來我們的操作都改在PieTTY上進行(我是使用PieTTY 0.3.27版本)。當然,這並非必要步驟,你也可以繼續在虛擬機器上操作Linux。

在開始之前,要記得修改字元編碼為UTF,步驟在上方工具列「選項 / 字元編碼 / Unicode UTF-8」。


修改語系

有些Koha的設定檔(如/etc/koha-http.conf)寫入了中文字,然而這在預設的狀態下會變成亂碼,因此得修改語系以正確顯示才行。

請輸入以下指令:

debian:~# export LC_ALL=zh_TW.UTF-8

接著再開啟/etc/koha-http.conf的時候,就能夠顯示正確的編碼了。

但是在虛擬機器上看起來還都是亂碼,這個我就沒有繼續研究了。


用80 port開啟Opac

預設的設定中,開啟虛擬機器的網址,只會跑出一個「It works!」的字樣。根據/etc/koha-http.conf的說明,還需要修改很多部份才能順利開啟,因此我想改成直接以80 port(如此一來,網址就不需要加上:80連接埠),並能夠保持phpmyadmin的功能。

用vim開啟/etc/koha-http.conf

debian:~# vim /etc/koha-httpd.conf

全部檔案內容設定如下,紅字的部份是我修改過的,e-mail記得要改成自己的喔:

# Koha 2.2 阿帕契(Apache)虛擬主機設定檔
#
# 在你的阿帕契(Apache)設定,包含這個檔案。
# 最好的方法依據你的網站設定。
# 有一些像是一個 Include 加到 /etc/apache/httpd.conf
# 且有一些寧願一個 symlink 從一些目錄到這個檔案。
# 請參考你的系統手冊。

# 針對 Koha 監聽埠號
# 無法評論這些,假如它們已經不在主要 httpd.conf
#
Listen 8080
#Listen 8081

# NameVirtualHost 被用在其中一個設定檔,詳細如下:
# 還沒註解以前,請確認這行是否正確。
# 參考 http://httpd.apache.org/docs/vhosts/ 一些手冊。

#NameVirtualHost 11.22.33.44
NameVirtualHost *:80
NameVirtualHost *:8080


# KOHA's OPAC 設定

ServerAdmin administrator@email DocumentRoot /usr/local/koha/opac/htdocs
ServerName *:80
ScriptAlias /cgi-bin/koha/ /usr/local/koha/opac/cgi-bin/
Redirect permanent index.html http://*/cgi-bin/koha/opac-main.pl
ErrorLog /usr/local/koha/log/opac-error_log
TransferLog /usr/local/koha/log/opac-access_log
SetEnv PERL5LIB "/usr/local/koha/intranet/modules"
SetEnv KOHA_CONF "/etc/koha.conf"
Alias /phpmyadmin /usr/share/phpmyadmin/

Options Indexes MultiViews
AllowOverride None
Order allow,deny
Allow from all



# KOHA's INTRANET 設定

ServerAdmin administrator@email
DocumentRoot /usr/local/koha/intranet/htdocs
ServerName *:8080
ScriptAlias /cgi-bin/koha/ "/usr/local/koha/intranet/cgi-bin/"
Redirect permanent index.html http://*:8080/cgi-bin/koha/mainpage.pl
ErrorLog /usr/local/koha/log/koha-error_log
TransferLog /usr/local/koha/log/koha-access_log
SetEnv PERL5LIB "/usr/local/koha/intranet/modules"
SetEnv KOHA_CONF "/etc/koha.conf"


# 假如你想要使用虛擬主機(Virtual Hosting):
# 1. 移除兩個監聽行(Listen lines)
# 2. 取代 *:80 成為你的 opac 領域名稱(domainname)埠號
# 3. 取代主機名稱(ServerName) * 你的 opac 領域名稱(domainname)
# 4. 取代 *:8080 你的 intranet 領域名稱(domainname)埠號
# 5. 取代主機名稱 * 你的 intranet 領域名稱(domainname)
#
# 假如你想要使用 NameVirtualHost'ing (一個 ip 使用兩個名稱):
# 1. 依照以上 1-5 的步驟
# 2. 沒有註解 NameVirtualHost 行並解設定正確 ip 位址

修改完成之後,重新啟動Apache 2才會生效,請輸入以下指令:

debian:~# /etc/init.d/apache2 reload

如果沒有出現錯誤訊息的話,那麼就成功了。

可以直接用http://虛擬機器的網址/開啟Koha的OPAC。

用http://虛擬機器的網址:8080/開啟Koha內部網路。附帶一提,預設的帳號密碼是kohaadmin、ilovekoha。

也可以用http://虛擬機器的網址/phpmyadmin開啟phpymymin了。一樣附帶一提,預設的帳號密碼是root、ilovekoha。


修改Koha的機讀格式

這版本的Koha似乎是使用中國機讀格式CMARC3,隱藏了許多欄位,最後僅剩24段。我做了以下修改:

  • 有顯示名稱的欄名,皆加上國家圖書館CMARC3的說明連結,作為編目人員的快速參考。
    例如:
    700
    人名-主要著者

    其中惟有856電子資源位址及取得方法並非CMARC3擁有的欄位,故改以CMARC民國90年修訂版的說明連結。
  • 700$a標目主體使用了權威記錄PER,在尚未釐清權威記錄的用法之前,我先將之拿掉,變成可以自由輸入的欄位。
  • 606 主體標題欄位改成可重複,610非控制主題詞彙分欄$a標目主體改成可重複。
  • 995$o改以允許値,因為只有流通與不流通兩種
  • 修正欄位名稱200$h 編次(Number of a part)

修改OPAC顯示

檔案是/home/koha/svn/trunk/opac-html/opac-tmpl/npl/zh_TW/opac-detail.tmpl跟/home/koha/svn/trunk/opac-html/opac-tmpl/npl/zh_TW/images/ BOOK.gif,詳細內容我就省略了。

修改外掛程式

  • 欄位100:日期修正、設定預設值
    /home/koha/svn/trunk/intranet-cgi/value_builder/unimarc_field_100.pl
    /home/koha/svn/trunk/intranet-html/intranet-tmpl/npl/zh_TW/value_builder/unimarc_field_100.tmpl
  • 欄位105:修正錯字
    /home/koha/svn/trunk/intranet-html/intranet-tmpl/npl/zh_TW/value_builder/unimarc_field_105.tmpl

修正z39.50無法使用的問題

因為沒有Perl模組的Text::Trim,我在Koha臺灣論壇裡面有提問過,已經獲得解決,請在Linux命令列輸入以下指令安裝缺失的模組:

perl -MCPAN -e 'install "Text::Trim"'

修改無法查詢沒有前後切截的問題

關鍵在於koha/intranet/modules/C4/SearchMarc.pm的create_request函式,裡面查詢MySQL的語法是使用like,規則是「低於4個字元長度以下,則把%去掉」(%是切截功能的萬用字元),但是這規則並沒有自動加上%的功能,因此我加了「高於4個字元長度,則在前後加上%」,以方便查詢的進行。再把這個4的參數改成Koha的系統設定變數「truncation」,以方便管理者控制。需要精確查詢的時候,建議改用新增機讀格式(MARC)欄位查詢吧。

此外,加上了查詢結果顯示查詢字的功能,因此要修改的有三個檔案。

/home/koha/svn/trunk/modules/C4/SearchMarc.pm
/home/koha/svn/trunk/intranet-cgi/search.marc/search.pl
/home/koha/svn/trunk/intranet-html/intranet-tmpl/npl/zh_TW/search.marc/result.tmpl


Thomas VDI內Koha系統的SVN版本控制系統

檔案位置看起來不太像是Koha的安裝位置(/usr/local/koha/),這是由於Thomas的VDI裡面的系統是用SVN版本控制系統,但是我對這方面沒有研究,故沒有參與,僅僅只有說明。


小結與感言

從取得VDI檔案、摸索Koha系統、到操作,甚至是修改程式碼,這些過程真的是花了不少功夫, 也讓這一篇修修改改地拖了好久才寫完。跟上次玩DSpace一樣,這次玩Koha也個老師沒教的摸索過程,不同的是,這次有個可以問的前輩們,再次感謝Koha Taiwan的毛老師、龍山與Thomas等人的努力與幫助!