Thomas的VDI修改記事
前言
繼以VirtualBox架設Koha的緣由,這一篇記錄從Thomas取得的VDI檔案之後修改的過程。原本該討論主題主張以trac + svn聯合多人共同開發koha軟體,但是我其實只求能架設、使用Koha即可,並沒有準備要到參與開發的程度。
在修改Thomas原始的VDI檔時,恐怕有破壞原有計畫的疑慮,因此才打算撰寫本篇以茲說明。另一方面也是為自己摸索Linux (Thomas是使用Debian發行版)的過程留下記錄。
最後修改過的VDI檔案在下方。使用的時候,除了網路設定(/etc/network/interfaces)保留以DHCP開啟之外,其他的修改都不需要再修改。之後我會以此檔案再寫一篇以VirtualBox架設Koha的方法作為詳細說明。
※註:內有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,我遇到了以下問題:
- 鍵盤配置錯誤:執行dpkg-reconfigure console-data修正
- 抓不到網路卡:停止udev自動新增網路卡
- 語系錯誤:修改語系為zh_TW.UTF-8
- Koha的OPAC非預設的80 port:重新設定/etc/Koha-http.conf
- 修改Koha OPAC與Intranet的一些程式
以下將各問題與處理方式一一詳述。
操作方法及使用軟體
以下操作剛開始是以root身分登入本機電腦。網路可以連線之後,則改用SSH遠端登入、FileZillar上傳檔案。
鍵盤配置錯誤
一開始以root登入Linux的時候,是完全以命令列來操作,必須要依靠鍵盤輸入指令。如果你發現你打的字跟你的鍵盤不吻合,那麼得先調整鍵盤配置。
- 輸入「dpkg-reconfigure console-data」,開啟藍底設定畫面
- 按「tab」跳到「ok」,「enter」進到下一頁
- 選擇最後一項「Select keymap from full list」,按「enter」
- 選擇「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 設定
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等人的努力與幫助!