:::
顯示具有 政大圖檔 標籤的文章。 顯示所有文章

談DSpace-DLLL系統

談DSpace-DLLL系統

image

政大圖檔所於2011年5越27日舉辦了「數位檔案加值與教學應用研討會」。早上的場次中,我的指導老師陳志銘教授(真‧教授囉!)參與主講「DSpace-DLLL開放源碼數位典藏系統建置與應用」,講述我們實驗室DSpace改良開發成DSpace-DLLL,並應用於臺灣百年圖書館史數位圖書館全國通識網課程資料庫的內容。

以下是演講時的投影片:(SkyDrive下載)


關於DSpace-DLLL

如果常常閱讀這個Blog的人,一定知道這個「DSpace-DLLL」就是我在寫書中做出來的系統。這個演講底下的意義是為了書的出版鋪路,老師也很有良心,不把研討會當廣告臺,所以演講中並沒有提到書的事情,而是私下詢問時才會透漏給有興趣的人知道。


由於之前我在準備博士班的考試,老師並沒有特別告知我要進行這篇的演講,而是在我博士班筆試都考完之後才請我做投影片,所以我是最近才知道這篇文章的內文在講些什麼。儘管作為一個熟悉者,可以看得出學弟妹整理的文章中有很多破綻,不過將自己做的作品分享出去這件事情,還是挺令人驕傲的。而且這篇文章的發表也能幫學弟妹抵免資格考,這對學生來說才是數位典藏系統的「加值應用」啊。

關於DSpace-DLLL的細節,我在書本中已經有詳細地說明。目前書本正在二校中,博士班筆試結束之後,我也比較能夠專心投入這塊。希望能儘快出版呢。


回應項潔館長的問題

在議程結束前的發問期間,項潔館長質疑我們做DSpace-DLLL是否有其必要性,應該是多跟臺大圖書館合作,這樣才是真正的「不必自行重複開發」。王梅玲老師認為小型團體仍有建置獨立數位典藏系統的需求,但項館長則反駁說,那應該是去購買雲端服務即可。而會議議程時間不夠,實際上的主講者陳老師卻沒有參與這個討論,就結束了這段議程。

說實話,我不是很清楚跟臺大合作的方式是如何。感覺上應該是類似企業外包委託案那種方式進行吧?如果真的要做大的話,臺大圖書館也的確可以用雲端運作模式來提供合作服務也說不定。

DSpace-DLLL的「不必重複建置數位典藏系統」,是真的只是在講這個技術平台。在數位典藏計畫裡面,技術平台只是一個環節,無法取代委託整個數位典藏計畫的作法。不過即使如此,對於很多人來說還是很有意義。舉例來說,教師在教數位典藏課程時,就能夠讓學生真的有一個系統平台可以去架設、管理、自行建置,讓他們真的體驗到「如何規劃、建置一個數位典藏計畫」的經驗。這種價值在政大圖檔所中也時常體現,我也從老師們教學使用上的回饋來修正DSpace-DLLL的缺點。另一方面,DSpace-DLLL可以成為想要獨自架設數位典藏系統的單位有一個比原始DSpace更好上手的起點。

尤其是後者,對我來說有著更深遠的含義。DSpace-DLLL是以開放原始碼的模式分享技術,我們站在DSpace這個巨人的肩膀上,往理想的方向踏出了一步,然後再成為其他人的基石,幫助他人更進一步。就像DSpace仍有許多缺點,而我們改善之後以DSpace-DLLL釋出一樣,未來也希望會有人再改進DSpace-DLLL,而釋出更好的開放原始碼數位典藏系統。

以一個系統開發者的角度來說,讓技術在開放原始碼的環境下自由地成長,這是很有意義的貢獻。


未來的方向

作為DSpace-DLLL的開發者,先不論老師在接手之後怎麼繼續改進,我必須補充一下老師在影片中尚未提及的幾個注意事項。

大前提是,這不是企業化、大團隊製作的成品,因此請勿期待不太會成為完美的方案,只能成為備選方案之一。

虛擬機器的限制
image

DSpace-DLLL封裝在虛擬機器VirtualBox進行安裝。我寫了一個Windows XP的安裝精靈,方便Windowx XP使用者來架設。而VirtualBox是跨平台的虛擬機器,因此熟悉的使用者也可以拿著硬碟檔架設在Linux平台上。

使用虛擬機器封裝的理由很單純:安裝簡易。DSpace的原始安裝方式是以Java Servlet來進行配置,但是技術難度高,而太多外部依賴元件需要額外下載。在DSpace-DLLL中加入的多媒體轉檔功能,也需要依賴非DSpace原始檔中的OpenOfficeFFmpegMEncoder套件。為了避免大家光是安裝就弄昏了頭,所以我把它通通打包在虛擬機器中,方便轉移與應用。這種概念可是雲端模式的基礎呢。

虛擬機器的意思是在電腦上再模擬一個電腦,對於效能不佳的電腦來說,虛擬機器的負荷很大,因此穩定度跟服務負荷量有待評估。

理論上,若將DSpace-DLLL裡面的系統移植到實體電腦上,應該是會有比較好的運作效能。不過各元件是否能夠順利搭配這點我就不敢保證,Linux最為人詬病的就是套件相依性太高,要完美地安裝一個系統,我一直都沒有確切的把握。

大量資料的處理

繼承前一點,虛擬機器的DSpace-DLLL在大量資料的存取下是否能夠正常運作,這是需要評估的。除此之外,在系統功能上也還有許多需要改進的地方。

對於數位典藏工作人員來說,最需要的就是批次匯入機制。DSpace有提供後台的匯入,但是批次檔的撰寫對一般人來說並不友善。同樣的,對於大量資料的修改、調整,DSpace也沒有批次修改的功能。因此在大量資料的管理上,還有很多的不便。

這是DSpace尚未達到的境界,而DSpace-DLLL也繼承下來,一樣有這種問題。

但是這並不是做不到:DSpace的批次匯入其實真的很好用,只是不太友善。有心要修改的人,應該是能夠輕易地將他實作成前臺網頁可以直接執行的功能吧。

權限控管與付費機制

這是非常重要的一個未解決問題,如果你的計畫想要以DSpace-DLLL作為起點,那麼權限是不得不考量的一個議題。

DSpace提供以帳號來控管權限功能,可以控制內容層級每一層的新增、遞交、編輯、刪除權限,控管上非常詳盡。但是就跟大量資料管理缺乏批次處理功能一樣,大量的權限設定也就變成一個難題。另一個問題,就是權限控管的需求不只有帳號這一種方式,常見的還有IP、國家等限制,而DSpace還沒考量到這點。

DSpace已經有良好的權限控管基礎,但仍需要有人進一步地改良,這也是DSpace-DLLL未解決的問題。

至於付費機制上,原本是為公開取用的DSpace就離這個功能更是八竿子打不著的關係,請營利公司自行加油吧。

分類與介面
image

作為一個泛用型典藏系統,DSpace的預設範本很樸實。我在DSpace-DLLL中修改了一些小細節,但是並沒有去調整他的設計,因此介面依然是很單調。

今天研討會時王老師提問說能不能更簡單地調整網頁的樣式,並且建立漂亮的分類架構。這也是她長久以來的一個疑惑。

用簡單的方式來修改網頁介面,例如拖曳、新增網頁元素、套用簡易範本,這在大多數CMS當中都已經是非常成熟的技術,不過DSpace在介面調整支援上,還不能簡單地使用。提示是XMLUI,但至今我仍未參透這個功能就是。

至於分類架構上,這可是一塊非常、非常、非常大的研究議題了。原本作為機構典藏之用的DSpace,將內容層級架構分成community、collection、item等層級,許多國外數位典藏系統也都是依照此架構在使用。但是數位典藏不像檔案管理有一套全宗原則,往往還是以客製化的方式設計分類架構為多。

這個客製化的要求並不是說DSpace的內容層級架構不能實作出來,事實上,像林巧敏老師負責的教育部中綱計畫成果資訊網就是一個很適合的例子。不過系統技術人員眼中的分類架構跟數位典藏人員來說有很大的差別。對於數位典藏人員來說,他們更在意的是對於每一種分類導覽功能的客製化。

image

以中綱計畫成果資訊網來說,在一個子計畫瀏覽中又可以依照藏品的類型來分類。若以DSpace實作,一個子計畫則是一個community,每一種藏品的類型是各自的collection,而底下每一筆資料則就是一筆item。那麼DSpace在介面呈現上能不能做到像中綱計畫成果資訊網一樣呈現?作為技術人員的我一定會跟你說:可以,但是要自己改。而這對許多不懂技術的人來說來說,其意義就與DSpace無法做到這種分類架構是同樣的答案。

總而言之,到頭來還是介面上的問題。而且這對泛用型典藏系統的DSpace來說,都已經快要是非戰之罪了。

然而,我認為DSpace在介面功能上的強大,對技術人員來說會有直接的感受。受惠於DSpace嚴謹地設計模式、詳盡的註解說明,技術人員可以輕易地利用DSpace的內容層級架構、瀏覽、搜尋功能做出各種客製化的分類架構,就像全國通識網課程資料庫一樣。我看過一些商用軟體的程式碼都還沒DSpace漂亮,這是真的。DSpace的程式非常嚴謹且靈活,不僅是容易使用,也很值得學習。


全文檢索的中文斷詞改善

在全文檢索的功能中,DSpace會依據檔案內文製作倒置索引檔,以此來達到全文檢索的功能。然而MIT與HP為西方人設計的DSpace並沒有很完美地考慮到各國的國情,中文斷詞只用二字詞的方式來切截。這會影響搜尋結果並不是十分漂亮。

中文斷詞全文檢索是一塊門檻不低的議題,DSpace-DLLL也沒有解決這個議題,但是未來仍可以從DSpace提供的plugin機制來進行修改,讓中文斷詞更為漂亮。


PDF的HTML網頁化

儘管現在PDF已經如此盛行,但我們真正要使用的時候,還是會希望他是以HTML網頁的方式呈現。只有網頁,才能讓我們能夠為他加上更多的服務,例如標註功能。

其實這幾乎脫離了DSpace原本的要求,但這也的確是我想做的一個功能。未來有機會的話再來挑戰看看吧。



DSpace-DLLL與我

如果有人欣賞DSpace-DLLL,那我會感到非常欣慰,辛苦努力總算有了代價。而DSpace-DLLL會不會像上述的未來發展一樣繼續改進,我希望會,但我也希望會有人來接手。至於我自己,也希望能有這個機緣能夠繼續改進。

機緣,那是很重要的條件。那就是有沒有繼續做下去的價值。也許很多人會認為「有!」,但那是站在使用者的立場來說的。作為開發者的我來說,有沒有價值,那又是另外一回事。


興趣來做的DSpace-DLLL,是以延畢換來的

我在政大圖檔所念了快要四年才完成學業,不瞞大家說,因為我都在玩──最後玩出這個DSpace-DLLL。

在幫忙百年圖書館史、教育部計畫、甚至是寫書的時候,儘管老師並沒有要求很多,但我卻仍會任性地挑戰自我。於是後設資料編輯功能出來了、虛擬機器出來了、更簡單的系統管理方式出來了、一本介紹DSpace的專書也快要出來了。

這並不是為了錢、也不是為了名聲、也不是為了他人(包括老師或是計畫助理),而是為了自己的興趣。那種「想看看跨越山丘之後的景色」是我持續前進的動力,這也往往讓我沉迷在此、樂在其中而不可自拔。

儘管學習的過程讓我感到開心,但我也知道,這其實並不是什麼值得驕傲的事情。當我每天在實驗室修改程式碼的時候,有些老師則是直接對我嘆氣:「唉,你怎麼都在搞這個,幹嘛還不畢業。」

我大概花了將近兩年的時間專搞DSpace,論文幾乎是寫完計劃書之後就放置不理了。每次陳老師想拿我來當學弟妹借鏡的時候,我內心其實都會為這種不顧學生畢業本分而玩樂於DSpace的行為感到汗顏。

在金錢上,因為幫忙計畫事宜,所以當時老師給的人事費仍可以補足日常生活所需。儘管如此,每學期的學雜住宿費仍得仰賴父母的支援。這對一個當時的年紀是應該在外面工作、養活自己的人來說,我這種為了興趣不顧一切的行為並不可取。


只是為了自我成就

DSpace-DLLL的發展並不像是國科會、教育部計畫一樣,是有實質的經費支援。它也不是我的畢業論文,對我的畢業也沒有實質的助力。這種基礎的系統建設並沒有太多學術上值得一提的研究價值,這也不是我想做的研究題目。

它就真的,只是我的興趣,只是一種自我成就,是幫忙計畫專案之後,學習了Java Servlet、AJAX、Linux、虛擬機器、自動安裝之後的一個成果產出與分享,就只是如此。


不能一直玩下去

人不去面對現實也要有個限度,至少這點我還是知道的。為自己設定一個折返點,做到一個程度就該收手,不能一輩子這樣玩下去。我想,這才是一個社會人應有的常識。

我玩得很開心,但是差不多了。

儘管如此,不會對DSpace-DLLL感到滿足的人總是會期望我或實驗室能夠繼續開發下去。我也希望如此,不過我更希望的是看到有人能接手,基於現在的基礎上,繼續深入開發。所以我寫書,我釋出系統,這是我的願望。

至於我自己能不能繼續做,那麼就要回歸現實問題,有沒有經費支援?對於我未來學業、工作上有沒有幫助?有多少經費做多少事情,這才是一種正常的運作模式。在沒有經費、憑著熱情來開發、供人自由取用的火柴人行為,這是可以拿來自己說笑的故事,但卻不是作為要求別人的條件。

所以誰誰誰快來聘我去工作吧,我就能名正言順地繼續玩DSpace了!!


結語

原本只是想記錄一下DSpace-DLLL的介紹投影片,沒想到越寫越多,就變成這樣落落長的一篇了。原本是打算花一個小時來寫,不過實際上似乎是寫了快三個小的樣子。都已經半夜兩點了,好睏。

那麼接下來就是努力讓DSpace-DLLL可以順利出版啦,加油~

(more...)

碩士畢業

碩士畢業

CameraZOOM-20110315194847

經過將近四年漫長的碩士生涯,今日我終於拿到畢業證書。

儘管這張畢業證書領取的過程實在是風風雨雨,什麼出人意料之外的情況都發生了,但真正地拿到手之後,之間那些緊張、焦慮的心情馬上變成令人值得咀嚼、賞玩的回憶。

我很開心,已經很久沒有這樣子讓我單純地表現出「開心」的心情,也許這種心情也不會持續很久,但至少這一刻我很開心。我開心地在MSN、噗浪上炫耀、開心地跟港味食堂老闆娘炫耀(她還送了我糖果,就是照片中畢業證書上面的糖果)、開心地拿著糖果分跟還在研究室奮鬥的學妹們、開心地拿著實體的畢業證書來炫耀。

而且更開心的是,我總算可以來寫blog、整理碩士四年以來的各種文件、還有去找每一位叫我趕快畢業的人吃飯聊天。

希望這種開心的心情,也能夠分享給正在看這篇文章的你。

我終於畢業了,耶!

(more...)

布丁的自我簡介(2010年版)

布丁的自我簡介(2010年版)

pudding(500px)
姓名 陳勇汀(ㄊㄧㄥ)
暱稱 布丁 (布丁布丁吃布丁)
e-mail puddingchen.35@gmail.com
專長 以網頁程式為主:JavaScript (jQuery)、CSSPHP,略懂Java跟JSP
對於網路伺服器管理、電腦維護也頗有心得。
興趣 找些有趣的系統功能或演算法來實作。

自我期許

研究所已經唸到第四年了,回首過往種種,還真是做了一堆其他人難以理解的事情。

我一直不是以「畢業」為目標在念書,「學習」的成就才是驅動我的動力。而學習之後連帶的就是「分享」的行為,不僅是在「布丁布丁吃?」、在其他的期刊上,甚至我也跟老師一起寫書,將我所學得、自己覺得有價值的事物,不斷地與大家分享,回饋給這個世界。

我很感激這個世界能讓我學習到各種知識,而今後我也會抱持著感激的心情,努力地將畢業論文做好而畢業。

學歷:該不會這輩子都是社會科系圖資人吧?

著作目錄

政大圖檔
  • Chih-Ming Chen;Yong-Ting Chen, 2010.09, "Developing a Taiwan Library History Digital Library with Reader Knowledge Archiving and Sharing Mechanisms Based on the DSpace Platform," The Electronic Library,.(SSCI) (本論著未刊登但已被接受)
  • 陳志銘;陳勇汀;林筱芳, 2010.07, "通識教育開放式課程數位典藏建置之研究," 大學圖書館,.(THCI)(本論著未刊登但已被接受)
  • Chih-Ming Chen and Yong-Ting Chen, "Digital Library with Reading Annotation Tool for Supporting Effective Reading Learning," the 9th IEEE International Conference on Advanced Learning Technologies (ICALT 2009). (研討會論文)
  • 王梅玲, 蔡明月, 陳志銘, 柯雲娥, 蔡佳縈, 陳勇汀, 林怡甄, "台灣圖書館史數位圖書館建構之研究," 圖書館學與資訊科學, 34卷1期, 頁15-38, 2008.
  • 陳勇汀, "基於閱讀標註策略之知識萃取在支援數位學習上的應用研究", 第一屆圖資系所論文聯合發表暨觀摩研討會, 頁155-165, 2009.
輔大圖資

參與活動、計畫與成果

從最近發生的到最早發生的順序來撰寫。

DSpace開放源碼數位典藏系統建置理論與實務」專書撰寫(民國98年到99年)

這是我與陳志銘老師將在研究所鑽研DSpace,以及老師們教授數位典藏的課堂內容結合而成的一本結合理論與實務的DSpace專書。由陳志銘老師實驗室中老師、學生、助理們共同撰寫的努力成果。本書從理論、實務到案例研討,深入淺出完整介紹數位典藏系統建置所需的相關觀念與技術,為一本適合於數位典藏實作教學與有志於建置數位典藏系統之單位或個人專業用書。

值得一提的是,書中內附一功能強大的開放源碼數位典藏系統DSpace-DLLL,可以利用虛擬機器方式架設於Microsoft Windows的作業系統環境中,安裝程序快速而簡單。DSpace-DLLL除了具備一般數位典藏系統所具有的典藏、搜尋功能外,主要功能特色在於可以依據典藏需求彈性的設計後設資料與規劃後設資料遞交工作流程;也具有支援高達四十幾種數位媒體格式的展示介面,可以針對目前常用的不同型態數位典藏內容進行線上展示,為建置數位典藏系統之絕佳利器。本書也針對如何修改DSpace-DLLL的使用者介面進行介紹,俾利讀者依據典藏內容展示需求,設計美觀之使用者介面。

本書預定民國99年9月底或10月初出版,希望能對有興趣學習數位典藏、DSpace系統的人有所幫助。撰寫本書的經過與心得我寫在「寫書初稿完成!」這一篇中,書中內容不斷校改之後,刪去部分章節與文章內容,是為小小的遺憾。

圖書館事業服務2009青年論壇與談人(民國98年)
20090606 圖資青年論壇 與談人名牌

2009年6月6日國圖服務年,一群年輕有為的圖資部落客、圖資學生、圖書館相關領域的工作人員齊聚一堂,為各校輪流舉辦的圖資青年論壇畫下句點。而我則是跟洪先生、陳老師、謝學長等人一同上台,以「技術新浪潮──傳統再感動」這個主題進行報告。我報告的題目是「標註應用於數位典藏」,簡短的投影片介紹各種標註相關應用,希望帶給圖書館一些新的應用面向。

國中圖獎助博碩士班學生研撰圖書資訊學位論文獲選(民國98年)

我在2008年底完成論文計劃書口試之後,馬上將計劃書修正,並寄去申請獎助國中圖博碩士論文,沒想到居然獲選了。評審的意見給了我的論文很大的信心,例如:「論文題目新穎、前衛,未來的研究成果對數位圖書資訊的應用將呈現新風貌。」在2009年三月時我前往國中圖簽訂獎助契約並接受採訪,期限是一年之內要完成學位論文,但可再多延期一年。而現今撰寫這段介紹的我已經經過當時的一年半以上了,真的能夠如期完成嗎?

教育部全國通識教育資源平台建構與永續發展計畫 (民國97年到99年)

此為開發通識教材與教師資料的典藏計畫,陳志銘老師負責此計畫中技術部份的子計畫4,底下聘有多位助理,而身為兼任助理的我則是負責以DSpace為主的技術指導兼部分程式開發。

民國98年時我進入碩三時期,教育部計畫人事大為變更,走了舊人來了新人,與其他子計畫之間的合作也有許多變化。因為眼看當時的助理無法完成DSpace平台的計畫開發,我乾脆捲起袖子來撐起計畫的系統,並讓後半年的期中報告安然過關。

而後至民國99年,我決定開始專心於之前與老師決定的DSpace技術專書,指導助理們與實驗室的學弟妹一起來參與書本的各章節撰寫。撰寫專書的同時,我也將DSpace的相關技術回饋到教育部計畫當中,同時偶爾也作為DSpace技術顧問,回答DSpace的技術問題。

我的Blog上發佈了數篇關於DSpace的教學與開發的功能供人參考 (http://0rz.tw/5a4Uj),這些技術不僅與陳志銘老師、林筱芳助理一同發表在大學圖書館、民國99年底也要匯集成為DSpace的專書,請各位不吝指教。

政大圖檔所:數位圖書館暨數位學習實驗室管理員 (民國96年到97年)

陳志銘老師所領導的實驗室在今年教育部計畫3台伺服器加入之前,伺服器數量多達9台。當時我跟學長負責維護這些伺服器及本所的電腦,除了實驗室佈線、器材管理、IP分配、電腦安裝重灌之外,對於Windows、Linux也略有心得,熟悉操作ApacheIISApache TomcatMySQLPostgreSQL(還不敢說熟)等網頁與資料庫伺服器,安裝並修改過XOOPSMediaWikiDSpace等系統,後來更將部份伺服器規劃虛擬化運作。實驗室的伺服器就跟我的玩具一樣親密。

政大圖檔所中華民國圖書館學會九十七學年度「數位典藏實務與加值服務研習班」 (民國97年)

由於台灣百年圖書館史計畫的公開,DSpace的操作遂成為本所教學內容。不僅在王梅玲老師的技術服務課堂中讓學生們操作、上傳,更在暑假期間的研習班中開班授課,我在數位典藏系統與平台設計裡面擔任DSpace的操作與設定說明,授課內容請看數位典藏系統與平台設計—以DSPACE為例 (http://0rz.tw/1e4Sd)。

政大圖檔所台灣百年圖書館史暨數位圖書館先導計畫 (民國96年)

第一次參加具有數十人規模團隊的數位典藏計畫,我在陳志銘老師帶領之下從學長接手DSpace系統開發,對於初學Java&JSP的我來說修改得仍不是很成熟,但大部分功能修改已經不成問題。

台灣百年圖書館史在作為數位圖書館的功能有張敦媛學姐的標註功能(http://0rz.tw/e34Xs)跟SRU(Search and Retrieve via URL) (http://0rz.tw/5f4V2)開放查詢檢索的結果。技術服務期末報告就探討SRU對於數位典藏開放的議題

之後陳志銘老師與我將此系統加入了張敦媛學姊標註功能,並發表了「Digital Library with Reading Annotation Tool for Supporting Effective Reading Learning」跟「Developing a Taiwan Library History Digital Library with Reader Knowledge Archiving and Sharing Mechanisms Based on the DSpace Platform」兩篇期刊論文。書目請見上方的著作目錄。

輔大圖資林麗娟老師的國科會計畫 (民國92年到95年)
  • 民國92及93年,「資訊科技應用與創意教學專案 」(NSC 93-2511-S-030-001)
  • 民國93年,「資訊融入自然領域專題式學習」 (NSC 93-2520-S-030-001)
  • 民國94年,「由動機談討電腦人因網路互動學習」 (NSC 94-2520-S-030-002)
  • 民國95年,「網路學習知討論表現與不同個人特質分析」(NSC 95-2520-S-030-001)

image 大學二年級時林麗娟老師招攬我進實驗室,主要負責伺服器維護、系統架設與開發以及分析研究內容。這是我接觸網頁伺服器的開始,在此打下對於Linux、Apache、PHP等技術的基礎。在這些計畫當中,我投注心力最多的是大家e起來互動式計分討論區,除了繼承學長的系統之外,還開發了網路線上問卷功能。

輔大圖資國科會95年大專生參與專題研究計畫「網路非同步互動引言機制之建置與分析」(民國95年)

clip_image002[1]

林麗娟老師建議我對於自己加上去的「互動引言功能」去探討其對學生非同步討論學習的影響,這是我第一次獨立進行研究。本研究使用了內容分析法、訪談法來得知此系統對於學生的影響,一邊做研究一邊跑去上研究所中邱子恆老師的質性研究課程,最後從質性與量化分析驗證互動引言機制的成效。

然而對於當時學術研究能力不足的我來說,本研究不盡如人意,但卻也成為我後來的苦膽,時時提醒我不可再犯當時的研究失誤。


相隔兩年以來的自我簡介更新,這次加入了一些著作目錄與參與計畫的經驗,也算是作為自己這幾年來的一個回顧。2008年舊版的自我簡介請看這篇。那麼就請大家多多指教囉。

(more...)

學弟妹計劃書口試旁聽心得

布丁布丁吃布丁

學弟妹計劃書口試旁聽心得

2010-01-07-308

研究所上學期期末,也就是計劃書口試的旺季。本實驗室的學弟妹四人進度雖然比其他人慢了一點,但也終於在上週完成了計劃書口試,並且全部順利通過了。在此也特別恭賀他們一下!

四位學弟妹分成兩組,各找了兩位口委,分成兩場舉辦。而這兩場計劃書口試,我也跑過去參了一腳。除了過去幫忙做點紀錄之外,也聽一聽其他老師到底是怎樣批評學生的論文、怎樣才是好的論文。


四位老師中雖然有幾位是在圖書館領域,但我認為他們更傾向於教育這塊領域。而這四位的論文題目,也多少都跟教育有關,但很巧的是,四位學生的背景也都跟教育無關XD

在這兩場口試當中,我看到了很漂亮的研究架構圖、很認真的實驗過程;也看到口委老師是如何從研究目的、研究問題,一路提出修正的建議;然後口試結束後,可以與大家討論一下修正的方向、可行性等議題。因為實驗室的學弟妹們都蠻認真的(講這話多少抱有期許的意味),這兩場下來,真讓我獲益不少。

他們的論文我在之前meeting時都有聽過,但是寫得好的我沒什麼意見就算了,寫得混亂不已的,我也是提不出什麼中肯的建議。所以當口委老師提出他們的看法時,總讓我有種「喔!原來也可以這樣做」的感嘆。

有些老師意見不多、有些老師一字一句都有意見,整本計劃書到處都是摺角(表示這一頁有問題)。以前會聽同學老是會抱怨口委問題太多,「你有沒有要大改?哈~好可憐喔~」的這種態度我頗不以為然。有人幫你修正論文方向、讓你論文寫得更好,特別是幫方向未明的題目討論出一個較為明確、可行的作法,反而當老師沒有提出我困惑的地方時,就會不禁覺得有點遺憾——也就是學生仍是得獨自面對這些問題,而沒有個方向。

老實說,在聽學弟報告時,好多地方都看得到以往我的影子。有些顯而易見的錯誤,現在也看得一清二楚。所以聽完這兩場之後,有種恨不得把論文計劃書重寫的衝動。不過先不說那些論文的寫法,在我系統架構確定之後,整本論文勢必得要重寫,倒也是理所當然的功課啦。


從大前年的學姐,前年的我自己,到今年的學弟妹,我以寫論文之前、自己的論文、正在寫論文中這三種不同的角度,經歷了三回論文計劃書口試。

我也不是喜歡研究、想讀博士班,只是想把自己的論文寫得更好,就這樣而已。

就在這研究所裡面,繼續掙扎吧。

(more...)

研究生的畢業典禮

布丁布丁吃布丁

研究生的畢業典禮

tn_IMG_3097

某位研究所唸了四年的學長老是在說:「研究生的畢業典禮不會讓你真的畢業。」儘管如此,這對我來說,依然是人生階段中的一個有意義的活動,所以我說要參加畢業典禮,我是非常開心的。

這一篇要講的,是對於在2009年6月13日政治大學舉辦的畢業典禮的一些感想。


由於人數過多的原因,政大舉辦畢業典禮時將學生分成兩群,大學部在山下舉辦,而研究所、博士班學生,則是在山上的大禮堂舉辦。

畢業典禮過程就普普通通,但讓我感到興趣的活動則是「撥穗」:

畢業典禮過程中,最為引人注目的是頒發「畢業証書」以及「撥穗禮」;據了解,撥穗的意義,代表稻穗或麥穗成熟,象徵畢業生已學有所成,可以展翅高飛。

引自國家圖書館 - 參考諮詢服務

這篇頁首的照片,就是撥穗及領取畢業證書的過程。一個學院一個學院輪流每個人上台,由該所或該系的主任、所長來幫同學撥穗,並授予畢業證書。撥穗的動作是將學士帽上的「穗」(就是金色那根)從學生的右側撥到左側,即是代表該生已經成熟、學有所成之意。然後拿著畢業證書與校長合照,最後轉身下台。

此儀式只是做個意義,手上假的畢業證書在轉身之後隨即回收,瞬間有種畢業脫手而飛的錯覺。(誤)


畢業典禮另外一件大事,是我家人的參與。

 

當天,我家人遠從台中驅車來到政大與我一同參加畢業典禮,而這也是我在政大待了快兩年之後,他們的第一次來訪。

自從上台北唸書之後,我回家的次數跟時間逐漸地縮短中。(對了,我在寫這篇文章時,我剛好在家裏喔。家裏真超冷的啦!)因此,有時候家裏並不太知道我在遙遠的台北到底在幹麼、做了什麼事情、在什麼樣的地方過活。每次在不長的回家時間中,總覺得很難把這些事情說明得很清楚。

這次他們過來,我帶他們爬上層層樓梯,到了九舍餐廳吃了自助餐跟芒果牛奶;也待他們到所上看看、逛逛,還遇到了所長,講了講客套話。這樣下來,他們會比較知道我在幹什麼嗎?不知道會不會因此讓家人比較放心一點呢?

最後,他們參加完畢業典禮之後,匆匆忙忙地又趕著回家。畢竟那時間回到台中大概也已經天黑,真是辛苦大家了。


我覺得,研究所畢業典禮跟以往最大的不同,在於這對每個人來說,意義都不盡相同。

對有些人來說,他是真的畢業典禮,因為他已經完成了論文。很快地可以把手上假的那張畢業證書,換成一個真正的畢業證書。

對另一些人來說,那只是個象徵意義的儀式—— 既不會讓他真的畢業,歡樂的氣氛中,也帶上了幾分諷刺。而我也屬於這些人當中。

 

我延畢了。

 

是的,當別人高興於畢業時,我也確定延畢。對我來說,儘管這是歡慶的典禮,但更是自我警惕的一個警示。

而當我寫這篇的時候,班上幾乎只剩下我還沒畢業(把工作看得比學業還重,跑去工作的同學不在此限)。因為我跟同學們選擇不一樣的路,雖然都是在念研究所,但我選擇了一條非常辛苦的方法再進行我的學業。所以我走得很慢、走得很久。

走著走著,身邊的人,也都一個一個離開了。

 

即使如此,我還是會繼續走下去。

繼續把論文、寫書完成。

然後再好好地拿這張畢業證書吧。

(more...)

DSpace建置數位典藏資料 投影片

布丁布丁吃布丁

DSpace建置數位典藏資料 投影片

image

這一份是給陳志銘老師在政大圖檔所數位典藏學程上課時使用的投影片。改進了以前DSpace資料結構的講法,加上一些簡單的例子,應該會比較容易理解。

2010-01-02_230149

特別的是,編輯遞交表單是我另外設計的功能。它改良了原始DSpace在編輯input-forms.xml的門檻,用圖形化介面來編輯input-forms.xml的內容。至於程式的部份,我想等到寫書告一段落,到程式穩定之後,再行公開。

(more...)

圖書館事業服務─2009青年論壇

圖書館事業服務─2009青年論壇

20090606 圖資青年論壇 與談人名牌

2009年6月6日,一群圖資部落客在國家圖書館舉辦了2009年青年論壇,而我被點名,上台當了個與談人,跟大家談談「找尋技術新浪潮」這回事。

這個青年論壇是當時各校輪流舉辦的巡迴場中的最終場,也是最盛大的一場。老實說,當時忙於教育部計畫的我,幾乎完全沒有參與青年論壇的打算。但最後還是被點名了,這個謎底至今仍沒人告訴我答案。

我的場次是下午的「技術新浪潮——傳統再感動」,與部落格觀察創辦人洪進吉、中研院陳亞寧老師、師大圖書館謝順宏大師兄一同上台,以這個主題各自報告。

我報告的主題是「標註應用於數位典藏」,也只不過是把我論文講標註的一些相關應用拿出來講一講。而且因為時間不多,也沒講得多詳細。儘管如此,這個主題的決定讓我猶豫了好一段時間。

這篇帶有濃厚諷刺意味的投影片才是我原本想講的主題。我想要藉由諷刺現在研究生裹足於使用者研究的層次,等待別人開發技術、而無法做出創新研究。其中我提出的簡單例子,是我在2009年5月的時候,利用Plurk機器人進行參考服務的想法。我提出來給學弟妹作為論文題目的參考,可惜沒人採用。而過了不久,Plurk機器人大紅大紫,可見我當時預測的準確性。


整個青年論壇的活動其實我不是覺得很完美。與其說是第一屆,不如說來的聽眾不太青年、台上有些主題也太過青年。

「想要高談闊論自己的想法是不錯,但我寧願選擇默默地創作、研發,然後再來對我的成品高談闊論。」這是我對2009青年論壇的最大感想。其他想法太過零碎也不值得一提,就這樣吧。

(more...)

第一屆圖資系所論文聯合發表暨觀摩研討會

布丁布丁吃布丁

第一屆圖資系所論文聯合發表暨觀摩研討會

DSCN4712

2009年6月3日,國家圖書館策劃的一連串「論文公開.知識傳播」活動中,舉辦了第一屆圖資系所論文聯合發表暨觀摩研討會。本次研討會中共有21位研究生發表。其中,在這6月初的時程中,多數進度正常研究生多有研究成果,而我則仍停留在計劃書的階段。這21位研究生中,4位來自於政大圖檔所的學生,本所真是報名踴躍啊。

20090712-pudding-0044

輔大的同學對於我論文的系統頗感興趣,真是欣慰。當我把見證書寄回家的時候,我媽也很開心。可惜從計劃書通過到現在已經一年了,我還是沒什麼進度,真是心虛 OTL

(more...)

2010,新年新願望

布丁布丁吃布丁

2010,新年新願望

2010-01-01-292 

本來今年預期的跨年會是很平淡的,結果多虧了身邊的朋友、大學的朋友還有遠在台中的朋友們,讓整個跨年歡樂到不行。

也許有人發現到了,這個blog已經很久沒有更新。原因很簡單,看看副標題「布丁的研究之路(是的,我正在繞遠路)」,因為我覺得有些事情跟研究沒什麼關係,所以也就沒有把他發佈在網際網路的動力。就如很久以前說的,我現在大部分私事都在Plurk上面聊。這個blog則是長篇文字、心得的發表空間。

不過,2010年整理書桌、電腦檔案時,倒也找出了不少值得一談的東西。在這剩餘1.5天的跨年連續假期,就讓我像是暑假日記作業最後一天才寫的小學生一樣地,一篇一篇挖掘這些事情吧。而這一篇要談的,則就是去年到今年的跨年活動。


這件事情就從跨年前兩週左右談起好了。我試著詢問研究所實驗室的大家,但大家跨年意願似乎不高,有伴的隨伴去、沒伴的說要寫論文。而我這個沒伴又沒在寫論文(因為在寫書)、也是本來就不太想辦活動的我,也只是想慵懶地渡過今年的最後一天,然後用爬山來迎接2010年的曙光!

後來得知mabinogi有巴哈玩家舉辦音樂會,由於聖誕節時舉辦的氣氛還不錯,所以有點想參加。接著也知道大學社團在政大附近舉辦跨年聚,很久沒跟大家聚一聚了,也是想參加。而且本來預定在跨年夜meeting的時段,也挪到了前一天去而空了下來。隨著跨年時間將近,小頭對於跨年活動的關注似乎提高了不少。煮火鍋麻煩、辦活動不想,那……就還是一如往常一樣,吃晚餐吧。

是的,我只是想悠閒地跨個年,跟往常一樣地吃個飯、說聲掰掰而離開,這樣就好。但,有件事情誰都知道,那就是計畫永遠趕不上變化……


終於來到了12/31跨年當天。早上meeting完後,老闆請了各助理吃了尾牙。大家隨興聊聊,回到實驗室時也快接近下班,數人準備收拾收拾行李、離開這個實驗室(離職的意思)。我小憩一下,收到大學朋友阿逼說一小時候過來的MSN之後,便與小頭、傻殿下山吃飯,一如往常……

但因為堅持、客滿與奇怪的原因,最後我們居然在寒風中走到了捷運動物園站的麥當勞吃飯。講清楚一點就是,我們走到了距離政大正門步行約20分鐘的麥當勞,而不是選擇政大正門口的麥當勞!雖然每個人都以為我吃得是吃到飽餐,但很遺憾的,我只是用吃到飽餐的價位,去吃了一般餐點!

結果2009年最後我吃了一年才吃兩三次的速食作結,某種意義上還真是特別。晚餐的特別節目是黑特大會,人少就是有這種好處。


「我到你實驗室樓下了,你在哪裡?」當接到阿逼打過來的電話時,我差點嚇到把啃到一半的麥克雞腿掉到地上。本來預期我們會在正門口吃飯的現在,他居然在距離這麼遙遠的地方來找我,實在是失策。阿逼,對不起!

「喂,我要從新店過去,你可以幫我買晚餐嗎?」當接到阿誠打電話過來時,我一邊因為啃太多麥克雞腿而感到膩口,一邊再想現在到底是怎麼回事。大家都是要去大學社團那邊聚,所以先過來嗎?但偏偏我現在又不在政大啊啊啊啊~~只好勉強地指示個等待地點給阿誠,還是把這餐好好吃完再看看吧。

結果最後吃離開、回到政大接到他們兩個的時候,已經是九點的事情了。


雖然我們這三人後來回到實驗室發呆的時候,有種懶得離開這邊去找社團跨年的想法,不過還好最後有過去——社團的人聚集了超過30個,我每年都要驚訝輔漫居然如此蓬勃發展!

一群人在阿曉他家地下室聚會。但這地下室有沙發、有大桌子、有電視、有卡啦OK,一整個就是比我家客廳還要高級是怎麼回事?總而言之,人多玩起來就是開心,打牌的打牌、桌遊的桌遊、FF13打到Wii新老馬,彷彿回到了輔大社辦一樣。

11點40時,主辦人提醒大家可以上頂樓看101迎接跨年,一群人傭傭懶懶地離開座位走到外面時,才發現一件殘酷的事情:我們距離頂樓有21層,人數30多人,但電梯一次只能搭5人!雖然我似乎是搭上了最後一班電梯,但還是不少人發揮火災怪力,爬了21層而在最後一刻趕上,真是辛苦了。

101煙火就那樣,人民的稅金一直在爆炸。然後接下來是景美溪沿岸的爆炸(煙火),甚至連求救信號彈都出來了!附帶一提,這個煙火放到了早上都還沒停,大家真是太有心(=$)了。

下樓時,我們這群搭電梯上來的改走樓梯下去。繞著逃生梯轉了21圈,彷彿有種無限迴廊般的暈眩,甚至有人走到一半不支蹲地休息。看個煙火變成爬樓梯健身大會,也太讓人印象深刻了XDD


跨年不久收到了大個子的消息,看來爬山團最後只剩下我跟阿逼,為此我大概兩點多就倒在沙發上。儘管小睡一下稍微有點精神,但阿逼跟那群大學生徹夜遊完的樣子真的是太青春了。青春到五點半我們跟大家揮手道別離開時,他走路看起來有點不太穩XD

吃了早餐、買了點東西之後,我們就照預定地從蔣公銅像走向政大後山的樟山寺。路燈昏暗的道路上,卻已經有不少媽媽級山友的身影。「我們應該是元旦登山團中最年輕的吧!」仔細想想,那天也的確只有碰到一個跟我們年紀差不多的人而已。

我們的計畫是一路走到樟山寺看個日出,作為一年健康的開始,但走到一半天就亮了啊啊啊!而且因為昨晚怕冷,身上穿一堆衣服、外套,還背著筆電,加上昨晚體力消耗尚未恢復,爬這樓梯還真是夠漫長的了。

一路上邊走邊聊,一邊跟擦身而過的山友道聲「新年快樂」,抵達樟山寺的時候意外地沒什麼人,有也是那些路上走在我們前面的山友們。

2010-01-01-291

我跟阿逼就如這篇頁首那張照片一樣。在還沒什麼人插的香爐上,插上了今年開始的頭幾炷香,希望能求個好兆頭。

2010-01-01-293

接著架個桌子椅子,我的早餐是御飯糰跟香菇雞湯,感覺真清爽。

吃完後,我們帶著疲憊不堪的身心很快地下了山。送走了騎車的阿逼,我回到宿舍洗澡、整理衣物、睡覺,結束了整個跨年的活動。


2010年的到來,我應該是比普通人更有感觸。

12/31跨年晚餐前我躺在行軍床上睡覺時,我一直在想,如果我繼續這樣躺著、睡著,是不是我身邊的人事物就不會改變?

但是,那是不可能的事情。會離開的,就是會離開。不管我有多任性,都無法改變這種事情。

我的新年新願望,就如以往一樣地任性,就如以往一樣地不可能實現。

 

希望,每天都能平淡地渡過,那就是對我來說最好的日子了。

(more...)

延畢確定

布丁布丁吃布丁

延畢確定

 

剛入學的時候,迎新茶會上老師們聲稱我們最快可以兩年畢業,這是政大圖檔所的特色。

在跟陳志銘老師meeting的時候,也常常聽到老師勉勵著學生兩年畢業。

不只是陳老師,我也不時聽到其他老師極力地推著學生完成論文、無不希望學生早點畢業的消息。

學生們也都用兩年畢業來勉勵自己。在碩一下決定題目,花半年完成計劃書,然後再用碩二下半年來把論文完成,順利畢業,找到工作。

高等教育評鑑裡面,本所的就業率非常地高,而且大部分畢業的學長姊找到的工作都是與圖書館、檔案館相關 (並不是去賣雞排,雖然這比較賺)。


現在是碩二下,我進來圖檔所已經兩年。

我的同學當中,不乏有已經被圖書館挑上,預備一畢業就進去辦公室坐的預備館員;也有翻著圖書館徵人公告,問我這邊到底好不好的人。

儘管同學們一邊抱怨著論文難寫、指導教授囉唆、問卷收不回來,但還是確實地朝著完成畢業論文的方向前進。

「我們一定要兩年畢業喔。」這句打氣的話,不知道在同學之間已經說過多少次。

一開始,我也相信這是可能的,因為我們都是同學,我們都在百年樓上課,我們都是在優秀的老師指導,我們都一樣努力,所以理所當然的,我們會一起畢業。

逐漸地,我終於發現,原來看似一樣的我們,走的是截然不同的道路。

你們為了「畢業」而努力。

我則是背對與「畢業」南轅北轍,日夜不息地狂奔中。

同學們會順利畢業,而我註定延畢。(除了跑去美國留學的跟晚了半年進來的那幾位,我們就一起留下來吧XD)


當我發現的時候,那些諷刺研究生生活的種種笑話,我已經視之習以為常。

要找新穎議題的資料,首先會想到要找電子資料庫當中的英文paper,而且習以為常地閱讀英文paper。對了,我也是計畫書口試的時候才被口委老師點出,原來我的中文參考文獻居然這麼少。

幫老師做事理所當然,因為老師很辛苦、事務繁雜,想像一下如果你自己是老師的話,就能夠稍微體會到老師到底有多累了。所以在自己的能力範圍內,盡可能地幫老師的忙吧。

寫論文、做工作就要專心地做。能夠心無旁鶩地整天待在實驗室進行研究,然後抱著期待的心情等待成果「蹦」出來的那一瞬間,不是很令人興奮嗎?電影、電動?有比我花了好幾天努力建置的成果還要有趣嗎?

對我來說,研究所中最重要的工作不是畢業,是論文。論文是自己第一本著作、意義非凡,而且可以不用理會商業價值、可以做出基於前人研究的更進一步發展,這是證明自己所學所得的具體呈現,「用自己的雙手去發掘這世界裡面你尚未發現的真相」的開始,怎能不叫人興奮、不想要好好地完成論文呢?

也因此,自己才深深地感覺到知識的無止盡。短短的研究所兩年的時間,用半年的時間就要把論文做完,我怎樣都覺得好像哪裡不夠。所以想要攻讀博士班,繼續這種頹廢生活,倒也是不錯的人生選項之一。

雖然同學一窩風在找工作、找打工,但我仍抱持著「趁老爸老媽還可以養我的時候趕快享受學生生活」的頹廢想法,利用所上跟老師提供的資源,日以繼夜地學習、學習、再學習。


很奇怪嗎?很像違心之論嗎?我倒是覺得還蠻正常的,也不過就是日常生活的大小事而已。

只是有時候會覺得有點悶。

悶在當同學興高采烈地嚷嚷著「畢業才是真的」、其他人一起附和的時候,我這個覺得那其實還好、重要的是其他的事情。

悶在老是聽到「你好辛苦」、「你好厲害」、「我都做不來」但卻沒有手來幫我一個忙之後,聽到他們有說有聊地討論晚餐吃完要去看哪部電影,而自己像事傻瓜一樣留著繼續做別人不願意做的工作。

悶在老師堅持自己上課要弄出來的系統、研討會要佈置的完善、計畫要做得出成果,卻不會想到學生為了老師其實沒什麼時間寫論文,然後還要承受「什麼?看你不是每天都在所上晃來晃去很閒嗎?怎麼沒時間寫論文?還會延畢?」的罪名。

悶在人情債進化成人情討債公司的時候,來討債的人只會給我無奈的表情,告訴我他也沒辦法。

悶在急著想要寫論文,可是卻有一堆雜事纏身。(教授,我好想寫論文啊!)


後來我終於發現了,其實這麼悶,也只是我自己的問題。

是的,我何必去煩惱自己怎麼過得跟其他同學不太一樣,因為我們本來就走在不同的道路上,擁有不同的價值觀、做著不同的事情。這社會有著多元的價值觀,除了尊重對方的想法,也不必強求自己一定要這樣做。

我要把論文寫好,完整地建構系統、費心地安排實驗、仔細地收集數據、謹慎地寫下結論!

在這之前,我要把教育部計畫做好,讓研究已久的DSpace系統作到一種能讓自己抬頭挺胸說:「這是我的心血成果」的程度!

在這之前,我要把我不會的東西都學好,善用大學豐沛的藏書、實驗室購書的經費、還有優秀的老師們,好好地把不懂地方的搞懂!

在這之前,我會延畢。

因為我喜歡這種生活,所以我得要抬頭挺胸地說出這種頹廢生活的好處,這樣就行了!

2009-05-16-701

p.s. 對了,在問我為什麼圖資人要看「物件導向程式設計」、「UML」或是「極致軟體製程」之前,可以先問你一下,你覺得學生的工作是來學東西的呢?還是來跟別人說「這個我不會」的呢?

(more...)

談DSpace 1.5.1備份機制

布丁布丁吃布丁

談DSpace 1.5.1備份機制

繼前一篇「DSpace 1.5.1安裝法」之後,今天我們來談談DSpace的備份機制,其實1.4.2或1.5.1都可以適用,因為基本架構並沒有差別太多,但本篇則是以1.5.1為主要適用對象。

要備份,就要先知道你要備份什麼東西。DSpace這個系統又區分成很多個部份,重要性不一、檔案大小也都不一定。我建議將備份機制分成這四個部份來看:

  1. DSpace原始程式的備份與還原
  2. DSpace安裝程式(排除掉assetstore)的備份與還原
  3. DSpace安裝程式中的assetstore的備份與還原
  4. DSpace資料庫的備份與還原

以下一一說明他們的功能、位置、備份與還原機制。由於大部分指令都相同,我只會在「DSpace原始程式備份與還原」有比較詳細的說明,其他的部份則挑重點說明而已。

為了方便大家安裝、使用,我先在開頭增加「快速安裝」小節,需要詳細的說明,再看看後面的小節吧。


快速安裝

  1. 下載備份與還原的腳本程式
    SkyDrive空間,zip壓縮檔,6.7KBhttp://0rz.tw/bdpr0
  2. 你可以利用Pietty或SFTP的軟體(如FileZilla)把上面下載的檔案上傳到/root/資料夾當中。
  3. 接下來解壓縮指令為unzip,然後使用chmod將權限改成700,作法大致如下:
    [root@dspace ~]# ls
    DSpace_backup_scripts.zip
    [root@dspace ~]# unzip DSpace_backup_scripts.zip
    Archive:  DSpace_backup_scripts.zip
      inflating: backup_dspace-assetstore.sh
      inflating: backup_dspace-database.sh
      inflating: backup_dspace-src.sh
      inflating: backup_dspace.sh
      inflating: backup_search.sh
      inflating: restore_dspace-database.sh
    [root@dspace ~]# chmod 700 *.sh
    [root@dspace ~]# ll
    總計 60
    -rwx------ 1 root root 2135  3月 19  2009 backup_dspace-assetstore.sh
    -rwx------ 1 root root 1727  3月 19  2009 backup_dspace-database.sh
    -rwx------ 1 root root 2139  3月 19  2009 backup_dspace.sh
    -rwx------ 1 root root 2174  3月 19  2009 backup_dspace-src.sh
    -rwx------ 1 root root 2288  3月 20  2009 backup_search.sh
    -rw-r--r-- 1 root root 7074  3月 19 15:53 DSpace_backup_scripts.zip
    -rwx------ 1 root root 3603  3月 19  2009 restore_dspace-database.sh
  4. 共有六個檔案,功能簡述如下:
    1. backup_dspace-src:備份DSpace原始程式,預設將/opt/dspace-1.5.1-src-release備份到/opt/backup/dspace-src當中
    2. backup_dspace.sh:備份DSpace安裝檔,但排除裡面的assetstore資料夾。預設將/dspace備份到/opt/backup/dspace當中
    3. backup_dspace-assetstore.sh:備份DSpace安裝檔當中的assetstore資料夾。預設將/dspace/assetstore備份到/opt/backup/dspace-assetstore當中
    4. backup_search.sh:尋找備份檔當中指定的檔案,以便於還原
    5. backup_dspace-database.sh:備份DSpace在PostgreSQL資料庫當中的資料。預設備份到/opt/backup/dspace-database當中
    6. restore_dspace-database.sh:還原資料庫資料
  5. 設定自動排程,利用vim編輯器把排程指令加入。時間可以依照實際情況進行修改,詳情請看crontab的資料。大致作法如下:
    [root@dspace ~]$ crontab -e
    ※此時會進入vim的編輯畫面讓您編輯工作!注意到,每項工作都是一行。 
    #DSpace自動備份指令,請插入在文件最後
    #每週一早上3點,執行DSpace原始程式備份
    0 3  *  *  1 /root/backup_dspace-src.sh
    #每週一早上3點30分,執行DSpace安裝程式備份
    30 3  *  *  1 /root/backup_dspace.sh
    #每週一早上4點,執行DSpace的assetstore資料備份
    0 4  *  *  1 /root/backup_dspace-assetstore.sh
    #每週一早上2點30分,執行DSpace原始程式備份
    30 2  *  *  1 /root/backup_dspace-database.sh
    #分 時 日 月 週 |<========指令========>|
  6. 設定PostgreSQL資料自動認證,注意底下設定的資料需要依據你實際的情況自行修改
    [root@dspace /]# vim ~/.pgpass
    ※請用vim編輯器輸入以下資料
    個別是「資料庫位置:資料庫連接埠:資料庫名稱:使用者名稱:使用者密碼」
    localhost:5432:dspace:dspace:dspacepassword [root@dspace /]# chmod 600 ~/.pgpass
  7. 備份的資料夾,預設是在/opt/backup當中,底下依照類型區分成四個子資料夾,各子資料夾底下再依日期建立資料夾,然後底下才是實際的備份檔。四個子資料夾個別是:
    1. dspace-src:DSpace原始程式,預設來自/opt/dspace-1.5.1-src-release
    2. dspace:DSpace安裝程式,預設來自/dspace
    3. dspace-assetstore:DSpace的assetstore資料夾,預設來自/dspace/assetstore
    4. dspace-database:DSpace的資料庫資料,預設來自於PostgreSQL
  8. 要在備份檔當中搜尋特定檔案,請執行backup_search.sh:
    [root@dspace ~]# /root/backup_search.sh
  9. 要還原資料庫資料,請執行restore_dspace-database.sh:
    [root@dspace ~]# /root/restore_dspace-database.sh

DSpace原始程式備份與還原

  • 預設位置:/opt/dspace-1.5.1-src-release
  • 備份位置:/opt/backup/dspace-src/
  • 估計壓縮之後備份檔案大小估計
    完全備份檔案大小:443MB
    最小差異備份檔案大小:16K
  • 重要性:●○○○○ 大約1周備份一次
  • 備份類型:差異備份 (只有上次備份之後變更的檔案才會納入這次備份當中)
功能與重要性說明

DSpace最原始的安裝程式,通常是由「dspace-1.5.1-src-release.tar.gz 」解壓縮而來的資料夾。這是保留了DSpace系統最原始的程式碼。修改DSpace的時候,通常都會修改原始程式,然後再進行「mvn package」等指令進行編譯。在DSpace說明書裡,通常以[dspace-src]代稱。

不過通常我在修改DSpace的時候,都是在Windows環境底下利用Dreamweaver或EmEditor之類的軟體修改、儲存,然後修改完成之後再上傳到伺服器。因此即使伺服器上的原始程式不存在也無所謂,只要重新上傳即可。

另一方面,不採用「完整備份」的理由在於DSpace原始程式在執行「mvn package」編譯之後,會佔用相當大的空間。如果每次都執行完整備份,想必硬碟空間很快就會被佔滿了。故採用差異備份,只有距離上次備份之後修改的檔案才會被納入新的備份檔案當中。

備份腳本程式(script)

接下來我們說明備份的腳本程式。程式內有些設定的部份,請依照你實際的狀況進行修改。

#!/bin/bash
# File Name: backup_dspace-src.sh
# Program:
#       這隻程式將會備份DSpace原始程式
# History:
# 2009/03/18    Pudding First release
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin
export PATH

#顯示開始訊息
echo '執行DSpace原始程式備份…'

#取得今天日期,格式為「YYYYMMDD」,例如「20090318」
dt=`date +%Y%m%d`

#設定要備份的目標資料夾
target_path='/opt/dspace-1.5.1-src-release'
#設定要排除的目標資料夾(輸入「''」空值表示沒有資料要排除)
exclude_path=''
#設定備份的路徑(實際上會在該路徑底下建立以日期為名稱的資料夾,備份檔案則放在該資>料夾底下)
backup_path='/opt/backup/dspace-src'
#設定備份檔的檔案名稱
backup_filename='dspace-src-'$dt'.tar.gz'
#是否為差異備份?(是則填「true」,否則填「false」)

backup_differential="true"      #true || false
#設定擁有者的名稱
owner_name='dspace'
#設定擁有者的群組
owner_group='dspace'

#取得最新暫存檔的時間,存入變數$time
cd $backup_path
for i in *
do
         last_backup_time=$i
done
#把最新的時間存入變數$last_backup_time
#last_backup_time=$i

#在備份路徑底下建立資料夾,資料夾名稱為今天的日期
mkdir -p $backup_path/$dt

#設定備份的指令:差異更新
if [ "$backup_differential" == "true" ]; then
        cmd_newer="--newer="$last_backup_time
else
        cmd_newer=""
fi

#設定備份的指令:排除備份
if [ "$exclude_path" == "" ]; then
        cmd_exclude=""
else
        cmd_exclude="--exclude="$exclude_path
fi

#備份目標的檔案
tar -zcpvf $backup_path/$dt/$backup_filename $target_path $cmd_newer $cmd_exclude
#修改備份檔的擁有者
chown -R $owner_name:$owner_group $backup_path/$dt
#修改備份檔的權限,只有擁有者才能存取、寫入與執行,其他人則不行
chmod -R 700 $backup_path/$dt

#顯示備份結果相關訊息
echo "=========================================="
echo '備份的目標:'$target_path
echo '備份檔位置:'
du -h -s $backup_path"/"$dt"/"$backup_filename

#顯示結束訊息
echo '備份完成!'

請以root的身份,把這個腳本檔儲存在「/root/backup_dspace-src.sh 」當中,利用chmod將權限設定為700,然後試著執行看看能不能顯示:

[root@dspace ~]# vim /root/backup_dspace-src.sh
※請利用vim編輯器把上面的程式碼加入
[root@dspace ~]# chmod 700 /root/backup_dspace-src.sh
[root@dspace ~]# /root/backup_dspace-src.sh
執行DSpace原始程式備份…
※中間會顯示很多目錄,這是tar在打包與壓縮的檔案清單
==========================================
備份的目標:/opt/dspace-1.5.1-src-release
備份檔位置:
443M       /opt/backup/dspace-src/20090318/dspace-src-20090318.tar.gz
備份完成!
[root@dspace ~]# ll -h /opt/backup/dspace-src/20090318
總計 444M
-rwx------ 1 dspace dspace 443M  3月 18 10:17 dspace-1.5.1-src-release.bak.tar.gz
※如果有看到本日的備份檔案,表示備份完成!
排程自動執行備份

確認腳本程式可以執行之後,我們把這個程式排入自動排程當中。執行「crontab -e」指令,開啟自動排程的列表,並且在最後加入以下排程指令。排程當中的週一或3點都可以照你的意思變更,週的範圍為「0~7」,0或7都表示星期天;小時的範圍則是0~23。

[root@dspace ~]$ crontab -e
※此時會進入vim的編輯畫面讓您編輯工作!注意到,每項工作都是一行。
#每週一早上3點,執行DSpace原始程式備份
0 3  *  *  1 /root/backup_dspace-src.sh
#分 時 日 月 週 |<========指令========>|

如此就安裝完成啦。

備份檔的還原

差異備份雖然能夠節省空間,但缺點是檔案零碎,難以還原。舉例來說,我要備份test.txt的時候,會因為test.txt的修改時間不同,而會加入不同的備份檔當中。今天修改的檔案,只會加入明天的備份檔裡面。如果沒有再更動的話,則之後的備份檔都不會納入這個檔案。

備份時間點 test.txt修改時間 備份檔檔名 test.txt是否加入備份檔中?
3/17 3/16 …/20090317/backup.tar.gz
3/18 3/16 …/20090318/backup.tar.gz
3/19 3/19 …/20090319/backup.tar.gz
3/20 3/19 …/20090320/backup.tar.gz

.因此,還原前的第一步是找尋該檔案存放在哪個備份檔裡面,或著是說,看你要還原的時間點在何時。

我撰寫了一個查詢備份檔的程式,可以在多個備份檔當中,找到具有包含你指定檔名或路徑的備份檔。程式碼如下:

#!/bin/bash
# File Name: backup_search.sh
# Program:
#       找尋具有指定檔名的備份檔
# History:
# 2009/03/18    Pudding First release
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin
export PATH

#設定備份檔案的根目錄位置
backup_root_path_default='/opt/backup'

#提示使用者輸入根目錄位置,否則自行設定預設值
read -p "請輸入備份檔根目錄的位置(預設為$backup_root_path_default):" backup_root_path
        if [ "$backup_root_path" == "" ];then
                backup_root_path=$backup_root_path_default
        fi

#移動到備份檔案根目錄,顯示有哪些備份檔類型,然後設定其一為預設值
cd $backup_root_path
echo "以下是在備份目錄當中的備份檔類型:"
ls
for d in *dspace*
do
        backup_path_default=$d
        break
done

#提示使用者輸入
read -p "請輸入備份檔的位置(預設為/opt/backup/dspace-src):" backup_path
read -p "請輸入要查詢的檔名:" filename

如果沒有輸入檔名,則結束程式
if [ "$filename" == "" ]; then
       echo "沒有要查詢的檔案,結束程式。"
       exit 0
fi

#設定路徑預設值
if [ "$backup_path" == "" ]; then
        backup_path='/opt/backup/dspace-src'
fi

#顯示訊息
echo "搜尋開始"
echo "====================================="

#要查詢的檔案列表
folder_list=$(ls $backup_path/ | tac)
for folder in $folder_list
do
        file=$(ls $backup_path/$folder/*.tar.gz)
        for f in $file
        do
                getfile=$(tar -zt -f $f | grep $filename)

                getflag="false"
                for g in $getfile
                do
                        if [ $g != "" ]; then
                                getflag="true"
                                break
                        fi
                done
                if [ "$getflag" == "true" ]; then
                        echo "[備份檔中有目標檔案:"$f"]";
                        for g in $getfile
                        do
                                echo $g
                        done
                fi
        done
done

#顯示訊息
echo "====================================="
echo "搜尋完畢"

使用方法,請直接執行之後,程式會詢問你要查詢的備份檔路徑以及你要查詢的檔名,然後稍等一下,他就會把找到的資料回報再畫面上囉,日期最新的會優先搜尋。以查詢「dspace.cfg」為例,操作過程如下,如果已經找到你要的檔案,那麼你隨時可以按「Ctrl + c」來中斷搜尋過程。

[root@dspace ~]# /root/backup_search.sh
請輸入備份檔的位置(預設為/opt/backup/dspace-src):/opt/backup/dspace-src 
請輸入要查詢的檔名:dspace.cfg 
搜尋開始
=====================================
[備份檔中有目標檔案:/opt/backup/dspace-src/20090318/dspace-1.5.1-src-release.bak.tar.gz]
opt/dspace-1.5.1-src-release/dspace/config/dspace.cfg~
opt/dspace-1.5.1-src-release/dspace/config/dspace.cfg
opt/dspace-1.5.1-src-release/dspace/target/dspace-1.5.1-build.dir/config/dspace.cfg
opt/dspace-1.5.1-src-release/dspace/target/archive-tmp/dspace.cfg.766468355.filtered
[備份檔中有目標檔案:/opt/backup/dspace-src/20090317/dspace-1.5.1-src-release.bak.tar.gz]
opt/dspace-1.5.1-src-release/dspace/config/dspace.cfg
opt/dspace-1.5.1-src-release/dspace/target/dspace-1.5.1-build.dir/config/dspace.cfg
opt/dspace-1.5.1-src-release/dspace/target/archive-tmp/dspace.cfg.766468355.filtered
=====================================
搜尋完畢
[root@dspace ~]#

找到那些備份檔,然後你可以估算一下要還原到多久之前的檔案,並利用tar指令來解壓縮,然後用cp指令覆蓋過去。 如果不熟悉Bash指令的操作,也可以用圖形介面來操作啦。指令的操作過程大致如下:

移動到有備份檔的目錄底下 
[root@dspace ~]# cd /opt/backup/dspace-src/20090317/
以tar解壓縮,解壓縮完畢之後,在該資料夾底下會建立opt目錄,也就是存放備份檔的目錄 
[root@dspace 20090317]# tar -zxf dspace-1.5.1-src-release.bak.tar.gz
移動到備份檔案裡面 
[root@dspace 20090317]# cd opt/dspace-1.5.1-src-release/dspace/config/
利用ls指令,查看是否有「dspace.cfg」 
[root@dspace config]# ls
controlled-vocabularies  item-submission.xml
crosswalks               log4j-console.properties
dc2mods.cfg              log4j-handle-plugin.properties
default.context.xml      log4j.properties
default.license          log4j.xml
dspace.cfg               Message_zh_TW_TLH.properties
dspace.cfg~              news-side.html
dstat.cfg                news-top.html
dstat.map                news-xmlui.xml
emails                   oaicat.properties
input-forms.dtd          registries
input-forms.xml          xmlui.dtd
item-submission.dtd      xmlui.xconf
利用cp指令複製dspace.cfg到現在程式的位置底下 
[root@dspace config]# cp -r dspace.cfg /opt/dspace-1.5.1-src-release/dspace/config/
cp:是否覆寫 ‘/opt/dspace-1.5.1-src-release/dspace/config/dspace.cfg’? y
移動到剛剛的備份檔目錄當中 
[root@dspace config]# cd /opt/backup/dspace-src/20090317/
利用rm指令刪除已經使用完畢的opt目錄 
[root@dspace 20090317]# rm -rf opt

DSpace安裝程式(排除掉assetstore)的備份與還原

  • 預設位置:/dspace (排除/dspace/assetstore)
  • 備份位置:/opt/backup/dspace/
  • 估計壓縮之後備份檔案大小:
    完整備份:123M
    最小差異備份:69K
  • 重要性:●●○○○ 大約1周備份一次
  • 備份類型:差異備份 (只有上次備份之後變更的檔案才會納入這次備份當中)
功能與重要性說明

DSpace在經過mvn package與ant fresh_install等安裝步驟之後,預設會安裝到「/dspace」目錄底下,你可以在原始程式的[dspace-src]/dspace/config/dspace.cfg修改這個路徑。通常在DSpace的說明書裡面,會以[dspace]代稱。這裡的資料會影響到DSpace系統的設定與運作,特別是/dspace/config裡面的設定資料。

由於DSpace安裝程式基本上也是從原始程式編譯而來,也就是說有原始程式的話,安裝程式相對上也不需要太過重複備份。因此我們採用的是差異備份,只有距離上次備份之後變更的檔案,才會被納入這次的備份檔當中。

值得一提的是/dspace/assetstore的部份需要另外處理,因為這是DSpace中典藏的數位檔案資料預設位置,不僅重要、也會佔去許多空間,下一節會有更詳細的說明。

備份腳本程式、自動排程與還原

大致上與DSpace原始程式的備份方法差不多,但是要考慮到排除/dspace/assetstore路徑底下的資料。如果你的備份路徑有所修改的話,請依照程式中的註解來修改實際的設定:

#!/bin/bash
# File Name: backup_dspace.sh
# Program:
#       這隻程式將會備份DSpace安裝程式(排除assetstore)
# History:
# 2009/03/19    Pudding First release
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin
export PATH

#顯示開始訊息
echo '執行DSpace安裝程式備份(排除assetstore)…'

#取得今天日期,格式為「YYYYMMDD」,例如「20090318」
dt=`date +%Y%m%d`

#設定要備份的目標資料夾
target_path='/dspace'
#設定要排除的目標資料夾(輸入「''」空值表示沒有資料要排除)
exclude_path=$target_path'/assetstore'
#設定備份的路徑(實際上會在該路徑底下建立以日期為名稱的資料夾,備份檔案則放在該資>料夾底下)
backup_path='/opt/backup/dspace'
#設定備份檔的檔案名稱
backup_filename='dspace-'$dt'.tar.gz'
#是否為差異備份?(是則填「true」,否則填「false」)backup_differential="true"      #true || false
#設定擁有者的名稱
owner_name='dspace'
#設定擁有者的群組
owner_group='dspace'

#取得最新暫存檔的時間,存入變數$last_backup_time
cd $backup_path
for i in *
do
         last_backup_time=$i
done

#在備份路徑底下建立資料夾,資料夾名稱為今天的日期
mkdir -p $backup_path/$dt

#設定備份的指令:差異更新
if [ "$backup_differential" == "true" ]; then
        cmd_newer="--newer="$last_backup_time
else
        cmd_newer=""
fi

#設定備份的指令:排除備份
if [ "$exclude_path" == "" ]; then
        cmd_exclude=""
else
        cmd_exclude="--exclude="$exclude_path
fi

#備份目標的檔案
tar -zcpvf $backup_path/$dt/$backup_filename $target_path $cmd_newer $cmd_exclude
#修改備份檔的擁有者
chown -R $owner_name:$owner_group $backup_path/$dt
#修改備份檔的權限,只有擁有者才能存取、寫入與執行,其他人則不行
chmod -R 700 $backup_path/$dt

#顯示備份結果相關訊息
echo "=========================================="
echo '備份的目標:'$target_path
echo '備份檔位置:'
du -h -s $backup_path"/"$dt"/"$backup_filename

#顯示結束訊息
echo '備份完成!'

跟之前的作法一樣,請以root的身份,把這個腳本檔儲存在「/root/backup_dspace.sh 」當中,利用chmod將權限設定為700,然後利用crontab -e指令加入自動排程中吧。

[root@dspace ~]$ vim /root/backup_dspace.sh
※請把上面的程式碼插入backup_dspace.sh檔案中吧!
[root@dspace ~]$ crontab -e
※此時會進入vim的編輯畫面讓您編輯工作!注意到,每項工作都是一行。
#每週一早上3點30分,執行DSpace安裝程式備份
30 3  *  *  1 /root/backup_dspace.sh
#分 時 日 月 週 |<========指令========>|

還原方法也都跟之前相同,請利用backup_search.sh來找到保存之前檔案的備份檔吧。 


DSpace安裝程式中的assetstore的備份與還原

  • 預設位置:/dspace/assetstore
  • 備份位置:/opt/backup/dspace-assetstore/
  • 估計壓縮之後備份檔案大小:
    最大備份檔大小:端看你系統當中的資料量
    最小差異備份檔案大小:4K
  • 重要性:●●●○○ 大約3天備份一次
  • 備份類型:差異備份 (只有上次備份之後變更的檔案才會納入這次備份當中)
功能與重要性說明

DSpace當中的assetstore是存放使用者上傳資料到DSpace系統當中的實體資料資料夾。是的,你所上傳的那些圖片、影片都不會存在資料庫,而是存在這個資料夾當中。預設會安裝到「/dspace/assetstore」目錄底下,你可以在原始程式的[dspace-src]/dspace/config/dspace.cfg修改這個路徑。

assetstore資料跟資料庫的東西一樣重要、無可取代!只是變動的頻率不大。當身為機構典藏系統的DSpace運作時間一久,assetstore資料夾將會大的跟怪物一樣,因此在此我們採用差異備份策略,並縮短備份的執行時間。如果你覺得很assetstore很重要,又有足夠的空間可以做完整備份,你也可以修改備份腳本程式裡面的設定以執行完整備份。

備份腳本程式、自動排程與還原

備份腳本檔跟之前的一樣,如果你的備份路徑有所修改的話,請依照程式中的註解來修改實際的設定:

#!/bin/bash
# File Name: backup_dspace-assetstore.sh
# Program:
#       這隻程式將會備份DSpace中的assetstore
# History:
# 2009/03/19    Pudding First release
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin
export PATH

#顯示開始訊息
echo '執行DSpace的assetstore資料備份…'

#取得今天日期,格式為「YYYYMMDD」,例如「20090318」
dt=`date +%Y%m%d`

#設定要備份的目標資料夾
target_path='/dspace/assetstore'
#設定要排除的目標資料夾(輸入「''」空值表示沒有資料要排除)
exclude_path=''
#設定備份的路徑(實際上會在該路徑底下建立以日期為名稱的資料夾,備份檔案則放在該資>料夾底下)
backup_path='/opt/backup/dspace-assetstore'
#設定備份檔的檔案名稱
backup_filename='dspace-assetstore-'$dt'.tar.gz'
#是否為差異備份?(是則填「true」,否則填「false」)backup_differential="true"      #true || false
#設定擁有者的名稱
owner_name='dspace'
#設定擁有者的群組
owner_group='dspace'

#取得最新暫存檔的時間,存入變數$last_backup_time
cd $backup_path
for i in *
do
         last_backup_time=$i
done

#在備份路徑底下建立資料夾,資料夾名稱為今天的日期
mkdir -p $backup_path/$dt

#設定備份的指令:差異更新
if [ "$backup_differential" == "true" ]; then
        cmd_newer="--newer="$last_backup_time
else
        cmd_newer=""
fi

#設定備份的指令:排除備份
if [ "$exclude_path" == "" ]; then
        cmd_exclude=""
else
        cmd_exclude="--exclude="$exclude_path
fi

#備份目標的檔案
tar -zcpvf $backup_path/$dt/$backup_filename $target_path $cmd_newer $cmd_exclude
#修改備份檔的擁有者
chown -R $owner_name:$owner_group $backup_path/$dt
#修改備份檔的權限,只有擁有者才能存取、寫入與執行,其他人則不行
chmod -R 700 $backup_path/$dt

#顯示備份結果相關訊息
echo "=========================================="
echo '備份的目標:'$target_path
echo '備份檔位置:'
du -h -s $backup_path"/"$dt"/"$backup_filename

#顯示結束訊息
echo '備份完成!'

跟之前的作法一樣,請以root的身份,把這個腳本檔儲存在「/root/backup_dspace-assetstore.sh 」當中,利用chmod將權限設定為700,然後利用crontab -e指令加入自動排程中吧。

[root@dspace ~]$ vim /root/backup_dspace-assetstore.sh
※請把上面的程式碼插入backup_dspace-assetstore.sh檔案中吧! 
[root@dspace ~]$ crontab -e
※此時會進入vim的編輯畫面讓您編輯工作!注意到,每項工作都是一行。
#每週一早上4點,執行DSpace的assetstore資料備份
0 4  *  *  1 /root/backup_dspace-assetstore.sh
#分 時 日 月 週 |<========指令========>|

還原方法也都跟之前相同,請利用backup_search.sh來找到保存之前檔案的備份檔吧。


DSpace資料庫的備份與還原

  • 預設位置:從PostgreSQL資料庫當中匯出
    ※實體檔案在PostgreSQL預設安裝位置/var/lib/pgsql/data/base/當中,但不同電腦的PostgreSQL並不能用這些檔案來作匯出匯入,要實際執行匯出匯入指令才行!
  • 備份位置:/opt/backup/dspace-database/
  • 估計壓縮之後備份檔案大小估計:
    最小備份檔案:32K
  • 重要性:●●●●● 大約每天備份一次
  • 備份類型:完整備份 (每一份備份檔都能夠完整還原)
功能與重要性說明

DSpace系統使用資料庫,預設是使用PostgreSQL,我們這邊介紹的也是針對PostgreSQL的備份與還原方法。資料庫的資料變更頻率非常高,同樣的也是無可取代的珍貴資料,建議每天備份一次。DSpace在PostgreSQL中的資料幾乎都是文字資料,因此壓縮之後的檔案大小也應該可以接受。有個參考數據是,某教育部計畫的DSpace塞了12萬多筆item之後,每次資料庫完整備份大小約40MB。至於實體的檔案則是保存在[dspace]/assetstore當中,資料庫只有儲存實體檔案的相關資訊與位置等資料,而不是真正佔吃空間的部份。

備份腳本程式(script)

這次的備份腳本跟之前不同,由於資料來源是要從PostgreSQL資料庫當中匯出,所以作法有些改變。另外程式內有些設定的部份,請依照你實際的狀況進行修改。

有一個部份必需要特別說明,PostgreSQL可以把資料庫匯出成為sql或tar打包檔,但是根據我自己的測試,只有匯出成tar打包檔才能正確地再度匯入以還原資料庫。故以下的程式當中我們是把資料庫的資料匯出成為tar檔,再進行壓縮的動作。而還原的時候我們也是以tar打包檔的狀態還原,請看下一節的程式碼說明吧。

#!/bin/bash
# File Name: backup_dspace-database.sh
# Program:
#       這隻程式將會備份DSpace的資料庫
# History:
# 2009/03/19    Pudding First release
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin
export PATH

#顯示開始訊息
echo '執行DSpace資料庫備份…'

#取得今天日期,格式為「YYYYMMDD」,例如「20090318」
dt=`date +%Y%m%d`

#設定要備份的資料庫名稱
database_name='dspace'
#設定資料庫的擁有者
database_owner='dspace'
#設定備份的路徑(實際上會在該路徑底下建立以日期為名稱的資料夾,備份檔案則放在該資>料夾底下)
backup_path='/opt/backup/dspace-database'
#設定備份檔的檔案名稱
backup_filename='dspace-database-'$dt'.gz'
#設定擁有者的名稱
owner_name='dspace'
#設定擁有者的群組
owner_group='dspace'

#匯出的打包檔檔名 
database_tar=$(echo $backup_filename | sed s/".gz"/""/g)

#在備份路徑底下建立資料夾,資料夾名稱為今天的日期
mkdir -p $backup_path/$dt
#移動到備份資料夾
cd $backup_path/$dt

#資料庫匯出,重整資料庫,然後壓縮
pg_dump $database_name -U $database_owner | gzip > $backup_filename

#修改備份檔的擁有者
chown -R $owner_name:$owner_group $backup_path/$dt
#修改備份檔的權限,只有擁有者才能存取、寫入與執行,其他人則不行
chmod -R 700 $backup_path/$dt

#顯示備份結果相關訊息
echo '備份目標資料庫:'$database_name
echo '備份檔位置:'
du -h -s $backup_path"/"$dt"/"$backup_filename

#顯示結束訊息
echo '備份完成!'

請以root的身份,把這個腳本檔儲存在「/root/backup_dspace-database.sh 」當中,利用chmod將權限設定為700,然後試著執行看看能不能顯示:

[root@dspace ~]# vim backup_dspace-database.sh
※請利用vim編輯器把上面的程式碼加入
[root@dspace ~]# chmod 700 /root/backup_dspace-database.sh
[root@dspace ~]# /root/backup_dspace-database.sh
執行DSpace資料庫備份…
備份目標資料庫:dspace
備份檔位置:
32K     /opt/backup/dspace-database/20090319/dspace-database-20090319.tar.gz
備份完成!
[root@dspace ~]# ll -h /opt/backup/dspace-database/20090319
總計 32K
-rwx------ 1 dspace dspace 27K  3月 19 06:33 dspace-database-20090319.tar.gz
※如果有看到本日的備份檔案,表示備份完成!
設定PostgreSQL自動認證功能

如果你的PostgreSQL連線設定(/var/lib/pgsql/data/pg_hba.conf)中連線類型不是trust,那麼在執行上面的備份指令時,系統會提示你輸入密碼。

[root@dspace ~]# /root/backup_dspace-database.sh
執行DSpace資料庫備份…
密碼:
※出現「密碼:」的時候,你要手動輸入資料庫密碼才行 
==========================================
備份目標資料庫:dspace
備份檔位置:
32K     /opt/backup/dspace-database/20090319/dspace-database-20090319.tar.gz
備份完成!

為了能讓自動備份的時候順利進行,免去輸入密碼的困擾,我們要在使用者家目錄底下新增.pgpass檔案,輸入自動認證的資料。作法如下:

[root@dspace /]# vim ~/.pgpass
※請用vim編輯器輸入以下資料,個別是「資料庫位置:資料庫連接埠:資料庫名稱:使用者名稱:使用者密碼」 localhost:5432:dspace:dspace:dspacepassword
[root@dspace /]# chmod 600 ~/.pgpass
※修改權限才能生效! 

詳細的作法,可以參考我寫的另外一篇說明「PostgreSQL連線設定與DSpace資料庫備份設定」。

排程自動執行備份

自動排程的設定沒有差別,大致上設定如下:

[root@dspace ~]$ crontab -e
※此時會進入vim的編輯畫面讓您編輯工作!注意到,每項工作都是一行。
#每週一早上2點30分,執行DSpace原始程式備份
30 2  *  *  1 /root/backup_dspace-database.sh
#分 時 日 月 週 |<========指令========>|
備份檔的還原

資料庫的備份檔案,要用資料庫的匯出指令來還原,我寫了一份還原的腳本程式。你需要指定備份檔的位置、日期、檔名、資料庫名稱、資料庫使用者。內容如下:

#!/bin/bash
# File Name: restore_dspace-database.sh
# Program:
#       這隻程式將會還原PostgreSQL資料庫的資料
# History:
# 2009/03/19    Pudding First release
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin
export PATH

#提示使用者輸入備份檔的位置
read -p "請輸入備份檔的位置(預設為/opt/backup/dspace-database):" backup_path
	#設定備份檔位置的預設值
	if [ "$backup_path" == "" ]; then
	        backup_path='/opt/backup/dspace-database'
	fi

#顯示該備份檔位置底下,有哪些日期,並將預設值設為最新的日期
echo "(該備份檔位置底下有以下日期的資料:)"
ls $backup_path
backup_dates=$(ls $backup_path | tac)
for d in $backup_dates
do
	backup_date_default=$d
	break
done

#提示使用者輸入備份檔的日期
read -p "請輸入備份檔的日期(格式為YYYYMMDD,預設為$backup_date_default):" backup_date
	#設定預設備份檔的日期
	if [ "$backup_date" == "" ]; then
	        backup_date=$backup_date_default
	fi

#顯示該路徑底下有哪些備份檔案,並取得預設備份檔的檔名
echo "(該日期的備份檔位置底下有以下備份檔的資料:)"
ls $backup_path"/"$backup_date
cd $backup_path"/"$backup_date
backup_files=$(ls *.gz)
for f in $backup_files
do
	backup_filename_default=$f
	break
done

#提示使用者輸入預設檔名
read -p "請輸入備份檔的檔名(預設為$backup_filename_default):" backup_filename
	#設定備份檔的預設值
	if [ "$backup_filename" == "" ]; then
		backup_filename=$backup_filename_default
	fi

#提示使用者輸入資料庫相關資訊
read -p "請輸入要還原的資料庫名稱(預設是dspace):" database_name
read -p "請輸入要還原的資料庫擁有者(預設是dspace):" database_owner

#設定預設值
if [ "$database_name" == "" ]; then
        database_name='dspace'
fi
if [ "$database_owner" == "" ]; then
        database_owner='dspace'
fi

#提示使用者是否要先備份資料庫
read -p "是否要先備份資料庫?(y或是n,預設是y)" backup_before
if [ "$backup_before" == "" ]; then
        backup_before='y'
fi
database_tar=$(echo $backup_filename | sed s/".gz"/""/g)

#如果要先做備份的話,則執行以下指令
if [ "$backup_before" == "y" ]; then
	read -p "資料庫備份的腳本檔案是?(預設是/root/backup_dspace-database.sh)" backup_script
	if [ "$backup_script" == "" ]; then
		backup_script="/root/backup_dspace-database.sh"
	fi
	$backup_script
fi

#提示確認還原
echo "還原目標資料庫:"$database_name
echo '來源的備份檔:'$backup_path"/"$backup_date"/"$backup_filename

echo "請確認上面訊息是否正確,還原資料庫將會覆蓋現有資料庫的所有資料!"
read -p "如要繼續,請輸入yes:" restore_check

if [ "$restore_check" != "yes" ]; then
        echo "取消還原!"
        exit 0
fi

#顯示開始訊息
echo '=========================================='
echo '執行DSpace資料庫還原作業…'

#移動到備份檔所在位置
cd $backup_path"/"$backup_date

is_targz=$(echo "$backup_filename" | grep ".tar.gz")
if [ "$is_targz" == "" ]; then
	#gz式匯入法
	echo "以psql還原……"
	gunzip -c $backup_filename | psql $database_name -U $database_owner
else
	#tar.gz式pg_restore法
	echo "以pg_restore還原……"
	#解壓縮檔案
	tar -zxf $backup_filename
	#匯入PostgreSQL
	pg_restore -c -d $database_name -U $database_owner -W $database_tar
	#移除剛剛解壓縮的備份檔
	rm -f $database_tar
fi


#重整PostgreSQL
echo "重整PostgreSQL…"
psql -c ANALYZE -U $database_owner

#顯示備份結果相關訊息
echo '=========================================='
echo '還原目標資料庫:'$database_name
echo '來源的備份檔:'$backup_path"/"$backup_date"/"$backup_filename

#顯示結束訊息
echo '還原完成!'

請利用vim編輯器把以上程式碼加入/root/restore_dspace-database.sh。執行資料庫還原腳本程式,程式會提醒你輸入相關的資訊。還原資料庫需要多多注意,進行還原的時候會覆蓋原有資料庫的資料!實際操作的情況如下:

[root@dspace ~]# /root/restore_dspace-database.sh
請輸入備份檔的位置(預設為/opt/backup/dspace-database):
(該備份檔位置底下有以下日期的資料:)
20090318  20090319
請輸入備份檔的日期(格式為YYYYMMDD,預設為20090319):
(該日期的備份檔位置底下有以下備份檔的資料:)
dspace-database-20090319.tar  dspace-database-20090319.tar.gz
請輸入備份檔的檔名(預設為dspace-database-20090319.tar.gz):
請輸入要還原的資料庫名稱(預設是dspace):
請輸入要還原的資料庫擁有者(預設是dspace):
是否要先備份資料庫?(y或是n,預設是y)
資料庫備份的腳本檔案是?(預設是/root/backup_dspace-database.sh)
執行DSpace資料庫備份:
==========================================
備份目標資料庫:dspace
備份檔位置:
32K     /opt/backup/dspace-database/20090319/dspace-database-20090319.tar.gz
備份完成!
==========================================
還原目標資料庫:dspace
來源的備份檔:/opt/backup/dspace-database/20090319/dspace-database-20090319.tar.gz
請確認上面訊息是否正確,還原資料庫將會覆蓋現有資料庫的所有資料!
如要繼續,請輸入yes:yes
==========================================
執行DSpace資料庫還原作業…
密碼:
※如果出現提示,此處需要輸入資料庫密碼!
pg_restore: [壓縮器(db)] PROCESSING TOC時發生錯誤:
pg_restore: [壓縮器(db)] TOC記錄5有錯誤;2615 2200 SCHEMA public postgres
pg_restore: [壓縮器(db)] could not execute query: 錯誤:  必須是schema public的擁有者
    Command was: DROP SCHEMA public;
pg_restore: [壓縮器(db)] could not execute query: 錯誤:  schema "public"已經存在
    Command was: CREATE SCHEMA public;
pg_restore: [壓縮器(db)] TOC記錄1949有錯誤;0 0 COMMENT SCHEMA public postgres
pg_restore: [壓縮器(db)] could not execute query: 錯誤:  必須是schema public的擁有者
    Command was: COMMENT ON SCHEMA public IS 'Standard public schema';
pg_restore: WARNING:  無法取消任何權限
pg_restore: WARNING:  無法取消任何權限
pg_restore: WARNING:  未被賦予任何權限
pg_restore: WARNING:  未被賦予任何權限
警告,還原時忽略錯誤:3
※還原的時候出現以上錯誤,這是很正常的!
重整PostgreSQL…
WARNING:  忽略"pg_authid" -- 只有資料表或資料庫擁有者能進行分析
WARNING:  忽略"pg_tablespace" -- 只有資料表或資料庫擁有者能進行分析
WARNING:  忽略"pg_pltemplate" -- 只有資料表或資料庫擁有者能進行分析
WARNING:  忽略"pg_shdepend" -- 只有資料表或資料庫擁有者能進行分析
WARNING:  忽略"pg_auth_members" -- 只有資料表或資料庫擁有者能進行分析
WARNING:  忽略"pg_database" -- 只有資料表或資料庫擁有者能進行分析
ANALYZE
※分析的時候出現以上錯誤,這也是很正常的! 
==========================================
還原目標資料庫:dspace
來源的備份檔:/opt/backup/dspace-database/20090319/dspace-database-20090319.tar.gz
還原完成!
[root@dspace ~]#

後記

終於把整個備份機制都好好地重整一遍了。光這一篇就寫了兩天……好累……不過也多虧寫這一篇,改進了很多原來我在伺服器上撰寫的不友善程式碼。

寫到最後連後記都不知道要寫什麼了……我越來越習慣Linux的Bash Shell操作,算是好事吧。

後來又加了快速安裝的章節,也發現自己少了一大部分沒有撰寫,然後又為backup_search.sh增加了一些功能……

希望這一篇會對使用DSpace的機構單位有所幫助!加油!<-- Post Catalog -->

(more...)

DSpace 1.5.1安裝法

布丁布丁吃布丁

DSpace 1.5.1安裝法

image
DSpace在1.4.2之後安裝方法有些改變,也為了補完之前那篇技術文件說明實在不是很清楚,所以我打算重新整理一下DSpace 1.5.1的安裝方法

作業系統:CentOS

本次安裝使用的是CentOS 5.2,可從義守大學的FTP下載:
感謝義守大學,每次要找這種超大型的開放原始碼作業系統,都有你們的陪伴。
至於CentOS的安裝方法,雖然說也夠簡單的了,請參考SmallKen's Blog的CentOS 5 Linux 系統安裝教學,圖文並茂十分易懂。
image
安裝時,有幾點要注意的:
  1. 我是選用圖形介面,也比較好操作。
  2. 磁碟分割方法請見下一節的說明。
  3. 選擇安裝其他套件時,記得要額外勾選安裝PostgreSQL跟Apache、PHP(方便之後安裝phpPgAdmin)喔!
  4. 開放8080連接埠
  5. 建立一個名為「dspace」帳號,或是在安裝完成之後利用useradd指令新增帳號。

CentOS磁碟分割

為了之後便於針對磁碟分割進行映像檔備份,建議把以下特別會使用到的目錄掛載點給予單獨的磁碟分割,並說明建議的分割大小:
  • /dspace:預設DSpace執行程式的安裝位置,裡面也有預設的bitstream數位檔案保存路徑(/dspace/assetstore/),會隨著保存越多檔案而越來越龐大!考慮空間的時候,除了/dspace基本安裝約需要100MB之外,還要把之後典藏的檔案也一併考慮進去,
  • /opt:DSpace的原始檔跟其他環境所需的套件都會擺在這邊,大約最少需要1GB來擺放比較穩定。
當然,如果可以的話,還是給上述的資料夾更多位置比較好。磁碟分割的意義,可以參考鳥哥的Linux私房菜當中的Linux 磁碟與檔案系統管理Linux 硬體偵測與維護(談LVM的部份)

CentOS遠端連線

安裝完CentOS之後,並設定好網路連線,你就可以用遠端操控SSH來連線到CentOS,而不需要待在本機端才能工作囉。
因為以下操作我們都是用指令列進行,並且輔以檔案的上傳,所以我在此介紹兩個好用的管理工具:
  • Pietty:可以以SSHTelnet遠端連線的方便工具,自由軟體、不需要安裝可直接執行。而且在Windows當中把檔案拖曳到連線中的Pietty視窗還可以執行上傳動作!(這好像很多人都不知道)
  • FileZilla Portable:SSH支援類似FTPSFTP檔案傳輸功能,而FileZilla則是專門負責檔案上傳、下載的傳輸工具。自由軟體,Portable版本則免安裝即可執行。

JAVA環境:Java SE Development Kit(JDK)

請以root登入,此時位置在「/root/」當中。將上面的檔案下載到CentOS主機當中,可利用wget指令下載:
[root@dspace ~]# wget http://
或是使用SFTP、Pietty的SCP功能(直接把檔案拖曳到連線中的Pietty視窗)上傳到/root目錄。
這是一個bin壓縮檔,需要執行以解壓縮。首先要利用chmod指令修改權限,再執行該檔案以解壓縮:

[root@dspace ~]# chmod 755 jdk-6u12-linux-i586-rpm.bin
[root@dspace ~]# ./jdk-6u12-linux-i586-rpm.bin

image (執行解壓縮)
image (解壓縮進行中)
image (解壓縮完畢)
解壓縮過程當中會詢問是否要解壓縮,請回答「yes」確定,解壓縮檔案之後的jdk-6u12-linux-i586.rpm會位於該帳號的家目錄中,以root帳號來說就是「/root」。
接下來執行rpm安裝
[root@dspace ~]# rpm -ivh jdk-6u12-linux-i586.rpm

image
如果安裝完成之後,可以檢查看有沒有「/usr/java/jdk1.6.0_12/」目錄,如果有此目錄表示安裝成功。可以利用cd指令來移動目錄看看:
[root@dspace ~]# cd /usr/java/jdk1.6.0_12/

DSpace安裝所需套件1:Maven (Mvn)

接下來的步驟是建立/opt目錄、改變/opt權限為755,切換到/opt目錄,在本機端下載Maven後上傳到/opt目錄,然後利用tar解壓縮Maven。
[root@dspace ~]# mkdir /opt
[root@dspace ~]# chmod 755 /opt
[root@dspace ~]# cd /opt
[root@dspace opt]# tar -zxvf apache-maven-2.0.9-bin.tar.gz

以上步驟完成之後會建立「/opt/apache-maven-2.0.9-bin/」目錄。最後還要修改/etc/profile才算安裝完成,這部份作法留到最後後面的部份再來說明。

DSpace安裝所需套件2:Ant

接下來的步驟類似上一節Maven的作法,一樣是把檔案下載之後上傳到/opt,然後解壓縮。
[root@dspace opt]# cd /opt
[root@dspace opt]# tar -zxvf apache-ant-1.7.1-bin.tar.gz
以上步驟完成之後會建立「/opt/apache-ant-1.7.1-bin/」目錄。一樣的還要修改/etc/profile才算完成。

DSpace伺服器環境:Tomcat

作法同上:
[root@dspace opt]# cd /opt
[root@dspace opt]# tar -zxvf apache-tomcat-6.0.13.tar.gz
然後修改連線編碼為「UTF-8」。
[root@get ~]# vim /opt/apache-tomcat-6.0.13/conf/server.xml

找到下面設定:
<Connector port="8080" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" />

改為以下設定,利用vim編輯器加入紅字的「URIEncoding="UTF-8」:
<Connector port="8080" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443"
               URIEncoding="UTF-8" />

設定環境變數:/etc/profile

接下來是修改/etc/profile的環境變數,為了體貼不會使用文字編輯器vim的使用者,這節以下一步一步地說明,請照著作吧,但之後的vim編輯器就不寫這麼詳細囉:
  1. 利用vim開啟/etc/profile。如果沒有vim,那也可以用vi。
    [root@dspace opt]# vim /etc/profile
  2. 移動游標,找到「export PATH……」開頭的內文,如下:
    export PATH USER LOGNAME MAIL HOSTNAME HISTSIZE INPUTRC
  3. 在該行上方按「a」按鍵,此時進入編輯模式,可以自由編輯該檔案。
  4. 插入以下紅色部份的程式碼,包括在2所指的「export PATH……」後面加入其他環境變數。
    if [ -z "$INPUTRC" -a ! -f "$HOME/.inputrc" ]; then
        INPUTRC=/etc/inputrc
    fi
    
    JAVA_OPTS="-Xmx2048M -Xms2048M -Dfile.encoding=UTF-8"
    ANT_HOME=/opt/apache-ant-1.7.1
    JAVA_HOME=/usr/java/jdk1.6.0_12
    CATALINA_HOME=/opt/apache-tomcat-6.0.13
    CLASSPATH=$CATALINA_HOME/common/lib/servlet-api.jar
    PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$ANT_HOME/bin:$PATH:/opt/apache-maven-2.0.9/bin
    export PATH USER LOGNAME MAIL HOSTNAME HISTSIZE INPUTRC ANT_HOME JAVA_HOME CATALINA_HOME CLASSPATH
    
    for i in /etc/profile.d/*.sh ; do
    image
  5. 按「Esc」鍵,結束編輯模式。
  6. 輸入「:」,跳到命令模式。
  7. 輸入「wq」然後按下「enter」鍵,表示儲存並且離開vim編輯器。
  8. 然後利用source指令重新載入/etc/profile。
    [root@dspace opt]# source /etc/profile
這樣就把JAVA環境變數、MAVEN、ANT跟Tomcat一起安裝完了。

PostgreSQL資料庫

如果照著上面CentOS安裝步驟中所說的來作,您現在的CentOS當中應該安裝了PostgreSQL。接下來的步驟則是設定PostgreSQL,以提供DSpace的順利安裝。
  1. 設定PostgreSQL的連線設定,請修改「/var/lib/pgsql/data/pg_hba.conf」
    [root@dspace opt]# vim /var/lib/pgsql/data/pg_hba.conf
    找到檔案「# Put your actual configuration here」以下的設定,把所有「ident sameuser」改成「trust」。原始的設定如下:(注意一下換行的問題)
    # TYPE  DATABASE    USER        CIDR-ADDRESS          METHOD
    
    # "local" is for Unix domain socket connections only
    local   all         all                               ident sameuser
    # IPv4 local connections:
    host    all         all         127.0.0.1/32          ident sameuser
    # IPv6 local connections:
    host    all         all         ::1/128               ident sameuser
    把method(連線方式)中的「ident sameuser」改成「trust」,修改後如紅字的部份:
    # TYPE  DATABASE    USER        CIDR-ADDRESS          METHOD
    
    # "local" is for Unix domain socket connections only
    local   all         all                               trust #ident sameuser
    # IPv4 local connections:
    host    all         all         127.0.0.1/32          trust #ident sameuser
    # IPv6 local connections:
    host    all         all         ::1/128               trust #ident sameuser
    然後在檔案最後插入dspace資料庫的連線設定:
    #DSpace
    host    dspace  dspace  127.0.0.1       255.255.255.255 trust
    
    image 
  2. 啟動PostgreSQL
    [root@dspace opt]# /etc/init.d/postgresql start
  3. 在PostgreSQL資料庫中新增「dspace」帳號,系統會提示你輸入dspace帳號的密碼,先假設為「dspacepassword」好了。接著建立資料庫「dspace」:
    [root@dspace opt]# createuser -U postgres -d -A -P dspace
    [root@dspace opt]# createdb -U dspace -E UNICODE dspace
  4. 利用su指令切換到postgres帳號(指CentOS的實體帳號),在PostgreSQL資料庫中新增「dspace」帳號,系統會提示你輸入dspace帳號的密碼,先假設為「dspacepassword」好了。然後輸入「exit」指令脫離su,回到root帳號底下。
    [root@dspace opt]# su postgres
    bash-3.2$ createuser -U postgres -d -A -P dspace
    bash-3.2$ exit
    image
  5. 再用su指令切換到dspace帳號,建立名為「dspace」的資料庫(你也可以改用其他資料庫名稱)。然後再用exit指令脫離su。
    [root@dspace opt]# su dspace
    [dspace@dspace opt]# createdb -U dspace -E UNICODE dspace
    
    [dspace@dspace opt]# exit
    image 
  6. 設定PostgreSQL可連線的位置,請修改「/var/lib/pgsql/data/postgresql.conf」,把「#listen_addresses = "localhost"」的註解「#」拿掉。
    [root@dspace opt]# vim /var/lib/pgsql/data/postgresql.conf
    找到以下文字
    #listen_addresses = "localhost"
    刪除開頭的注解符號「#」,改成以下文字
    listen_addresses = "localhost"

DSpace安裝前設定調整

下載後上傳到/opt目錄,然後解壓縮。
[root@dspace opt]# cd /opt
[root@dspace opt]# tar -zxvf dspace-1.5.1-src-release.tar.gz

vim開啟DSpace的設定檔「/opt/dspace-1.5.1-src-release/dspace/config/dspace.cfg」。
[root@get ~]# vim /opt/dspace-1.5.1-src-release/dspace/config/dspace.cfg

設定項目繁多,但以下幾項是必需要調整的,前面黑色的字是項目名稱(有些被註解符號「#」註解掉了,請取消註解吧),紅色的字是可以調整的值,請跟著一起設定吧
  1. 設定DSpace程式安裝位置為「/dspace」目錄
    dspace.dir = /dspace
  2. DSpace的網址,如果你的hostname是「dspace.lias.nccu.edu.tw」的話,那麼就這樣寫:
    dspace.url = http://dspace.lias.nccu.edu.tw:8080/jspui
    dspace.hostname = dspace.lias.nccu.edu.tw
  3. 設定資料庫連線位置、連接埠跟資料庫名稱:
    db.url = jdbc:postgresql://localhost:5432/dspace
  4. 設定資料庫連線的帳號與密碼,剛剛設定的帳號為「dspace」,密碼假設為「dspacepassword」好了:
    db.username = dspace
    db.password = dspacepassword
  5. 設定mail server(郵件伺服器)的位置,不然沒辦法送出註冊信:
    mail.server=localhost
  6. 設定handle前置代號為你自己單位的代號,這會影響到DSpace每一頁的網址,預設是「123456789」,你可以改成任何你自己想要的英文或數字代號,例如「dspace」的話就是:
    # CNRI Handle prefix
    handle.prefix = dspace
  7. 設定語言選項為「zh_TW」(繁體中文):
    default.locale = zh_TW
    webui.supported.locales = zh_TW, en  #這行要自己加上去
    default.language = zh_TW
最後建立DSpace程式安裝位置「/dspace」目錄,然後設定擁有者為「dspace」。
[root@dspace opt]# mkdir /dspace
[root@dspace opt]# chown dspace:dspace /dspace

DSpace安裝步驟

Step 1. 利用maven建立檔案:移動到DSpace原始程式目錄底下的「dspace」目錄,執行「mvn package」編譯DSpace原始程式。第一次執行「mvn package」指令的時候,會從網路上下載很多需要的元件,大約需要30分鐘才能完成編譯。
[root@dspace ~]# cd /opt/dspace-1.5.1-src-release/dspace/

[root@dspace dspace]# mvn package
image (第一次執行時需要下載很多檔案)

Step 2. 用ant來部屬:接著移動到DSpace原始程式目錄底下的dspace當中的target當中的dspace-1.5.1-build.dir目錄,並執行「ant fresh_install」。這個步驟會把編譯好的檔案移到安裝目錄「/dspace」底下。
[root@dspace ~]# cd /opt/dspace-1.5.1-src-release/dspace/target/dspace-1.5.1-build.dir/
[root@dspace dspace-1.5.1-build.dir]# ant fresh_install

Step 3. 移動JSP網頁檔:複製DSpace安裝目錄裡面的「webapps/jspui」到Tomcat裡面:
[root@dspace ~]# \cp -rf /dspace/webapps/jspui /opt/apache-tomcat-6.0.13/webapps/

Step 4. 建立DSpace管理者帳號:執行DSpace中的「create-administrator」功能,建立登入DSpace系統的帳號,DSpace會要求你輸入e-mail、first name、last name跟password 。
[root@dspace ~]#  /dspace/bin/create-administrator

Step 5. 啟動Tomcat服務
[root@get ~]# /opt/apache-tomcat-6.0.13/bin/startup.sh

以上工作做完之後,就可以用瀏覽器連到DSpace啦,網址是如之前設定的「http://dspace.lias.nccu.edu.tw:8080/jspui」或是「http://localhost:8080/jspui」(如果你是在本機端,那就可以如此查看),如果順利地顯示了DSpace的畫面,那麼就是安裝成功囉。(如下圖)
image

其他功能排程執行

DSpace有些功能是需要定期去執行,才能夠順利運作的。包括搜尋引擎的索引、上傳圖片的縮圖、站內寄信、計算資料總量、清理資料庫等等工作。
在CentOS裡面,請以root或dspace帳號(如果你的dspace帳號能夠執行/dspace裡面的資料的話)執行排程指令
crontab -e

然後插入以下敘述,我附上翻譯的說明:
#時間與指令說明
#分 時 月 日 周 要執行的指令
# 每天早上01:00送出訂閱的e-mail
0 1 * * * /dspace/bin/sub-daily
# 每天早上02:00執行縮圖程式(media filter)
0 2 * * * /dspace/bin/filter-media
# 每天早上03:00確認資料總量
0 3 * * * /dspace/bin/checker -lp
# 每天早上04:00把結果寄給系統管理者
0 4 * * * /dspace/bin/dsrun org.dspace.checker.DailyReportEmailer -c

# 每天早上04:20清理資料庫(這是PostgreSQL的指令)
20 4 * * * vacuumdb --analyze dspace > /dev/null 2>&1

# 每天早上01:00執行統計運算,每天早上02:00產生統計報表
0 1 * * * /dspace/bin/stat-general
0 1 * * * /dspace/bin/stat-monthly
0 2 * * * /dspace/bin/stat-report-general
0 2 * * * /dspace/bin/stat-report-monthly
image 


但是光是安裝完成、可以運作,其實還是不夠的,你還要定期排程執行備份工作,並且有要有還原的機制。
上面的步驟我也自己做了一遍,應該都沒錯了。這篇已經寫得夠長了,有空的話我們再來慢慢聊吧。 (more...)