Plone 2 安裝筆記

遠凡札記 Yuanfarn's Notes

最後更新日期:Feb. 11, 2007.

開始之前:安裝 Python 及 Zope 的方法隨作業系統的不同而有差異,但是 Zope Product 如 CMF、Plone 等的安裝則大致上相同,不受作業系統的影響。

這一篇筆記的安裝環境是在 Micorsoft Windows XP Professional with Service Pack 2,而 Linux 及 BSD 的使用者請參考 Song 前輩及 tcc 前輩的文章安裝 Python 及 Zope。另外,感謝讚展兄測試發現在 Windows XP Home 安裝後無法啟動 Zope。

在 Linux 系統安裝時,請先確定安裝妥 Python 及 PILCJKCodecs[*]PyXML 等 packages,再接著進行安裝 Zope,最後才是 Product 的安裝。

在 Windows 安裝則因為 Zope 的 Windows installer 已經包含所需的 Python,次序為先安裝 Zope,然後設定好 Zope's Python 的 Install Path,或是完整安裝一份 Python,再以 Windows installer 安裝 PIL、PyXML 這些 packages 的。

目錄:

安裝 Zope

  1. http://www.zope.org 下載 Windows installer,建議使用 Zope 2.9 的版本,這篇筆記以 Zope 2.9.6 (Zope-2.9.6-win32.exe) 為例。

  2. 在安裝過程中需要設定管理者(預設帳號為 admin)的密碼。

  3. 使用預設安裝(full)即可,並設為 Win32 的 Service。

  4. 完裝後,啟動 Zope,在 ZMI 根目錄的 Properties Tab 新增一個 property:

    Name : management_page_charset
    Type : string
    Value: UTF-8

    由 ZopeChinaPak 的 README 得知,自 ZopeChinaPak 0.3.1 起會偵測這個 property 是否存在,若不存在時將會自動加入,稍後將安裝 ZopeChinaPak 這個 Product,因此可以省略這個步驟,交由 ZopeChinaPak 自動處理。

  5. 將 Zope 安裝在 C:\Zope\2.9.6 這個目錄中,並指定 D:\ZODB\Instance 這個目錄為 Zope-Instance,所以接下來的內容裡,將使用以下幾個變數:

    $ZopeHome 代表路徑 C:\Zope\2.9.6

    $ZopeInstance 代表路徑 D:\ZODB\Instance

  6. 修改 $ZopeInstance\etc\zope.conf 讓 reStructuredText (reST) 使用 UTF-8:

    rest-input-encoding utf-8
    rest-output-encoding utf-8

建立第二個以上的 Zope-Instance 目錄

  1. 在前述安裝 Zope 時已經建立一個 Instance 目錄,但是有時需要嘗試某些 Product 或測試 Product 的升級是否能順利進行,例如將 Archetypes 由 1.2.5-rc5 升級為 1.3.3-final,為了避免破壞原來的 ZODB (Data.fs),我建議另外建立一個供測試用的 Instance 目錄,在這篇筆記中,我另外建立 C:\Zope\Zope-Developing 這個目錄來作為測試用的。

  2. 開啟 Windows 的「命令提示字元(command prompt window)」,執行

    $ZopeHome\Python\python.exe $ZopeHome\Zope\bin\mkzopeinstance.py

    這個指令,建立 C:\Zope\Zope-Developing 作為 Instance 目錄並設定管理者 admin 的密碼。

  3. 接下來的內容採用的路徑變數為:

    $DevInstance 代表路徑 C:\Zope\Zope-Developing

  4. 參考前述安裝 Zope 的筆記新增 management_page_charset 這個 property,及修改 $DevInstance\etc\zope.conf 使 reStructuredText (reST) 使用 UTF-8。

  5. 修改 $DevInstance\etc\zope.conf 這個檔案,變更 http-server 及 ftp-server 的 port,這樣才能同時啟動 $ZopeInstance 及 $DevInstance。

    <http-server>
    # valid keys are "address" and "force-connection-close"
    address 9673
    # force-connection-close on
    </http-server>

    <ftp-server>
    # valid key is "address"
    address 9621
    </ftp-server>

    註:$ZopeInstance 使用 Zope 預設的 8080 (http) 及 8021 (ftp) 兩個 port。

  6. 可以在命令提示字元視窗中執行 $DevInstance\bin\runzope.bat 啟動 $DevInstance。

    也可以執行這個命令將 $DevInstance 執行的記錄同時寫入 $DevInstance\log\dmesg.txt 這個文字檔中:

    $DevInstance\bin\runzope.bat > $DevInstance\log\dmesg.txt 2>&1

    若需要在開機便自動載入 $DevInstance,可以在命令提示字元視窗中執行

    $ZopeHome\Python\python.exe $DevInstance\bin\zopeservice.py --startup auto install

    將 $DevInstance 安裝為 Win32 Service,這樣便會隨著電腦開機自動載入。

關於 Zope 的其它項目

  • 之前使用 Zope 2.7 時,在 Plone Site 或 Zwiki Site 中以 reST 撰寫 Zwiki page 時,如果會出現 zh.py 不存在的錯誤,可參考 Docutils Internationalization 及潘俊勇的“新结构化文本reStructuredText的国际化支持”這篇文章,分別在以下的兩個目錄中各自產生 zh.py 檔案即可。

    $ZopeHome\lib\python\docutils\languages 目錄中新增一個檔案 zh.py,可以直接複製 en.py

    同樣的,在 $ZopeHome\lib\python\docutils\parsers\rst\languages 目錄中新增一個檔案 zh.py,同樣可以直接複製該目錄中的 en.py

    Zope 2.7.4 將 Docutils 升級至 0.3.7 版,在上述的兩個目錄中各存在一個 zh_tw.py 檔案,因此繁體中文的使用者應該可以省略這一個步驟。此外,將 Zope 安裝在 GNU/Linux 的使用者也可以不用執行這一個步驟。

    這裡提到的 Docutils 路徑 $ZopeHome\lib\python\docutils 是 Zope 2.8/2.7 以前的,Zope 2.9.6 已經將路徑改為 $ZopeHome\Zope\lib\python\docutils。

安裝 Python

Zope installer 包含了執行 Zope 所需要的 Python,在較舊版的 Zope 時,我還是習慣再安裝一份完整的 Python,這樣可以用 insaller 來安裝 PIL 等 package,而不用下載源碼自行編譯。

Zope 2.9 版自 2.9.6 開始,提供了一個很貼心的 script,若使用者不願安裝一份完整的 Python,也可以直接設定 Zope's Python 的 Install Path,這個 script 會在 Windows 的機碼中寫入 Python 的安裝路徑等資訊,當使用者要安裝 PIL 時一樣只需下載 Windows installer 安裝就行了。

因此,現在使用者只要決定選擇設定 Zope's Python Install path 或是完整安裝一份 Python。

快速安裝 Python - 設定 Zope's Python Install Path

  1. 執行程式集裡的“Zope 2.9.6 -> Python -> Set InstallPath”,這個捷徑會執行

    $ZopeHome\Python\python.exe $ZopeHome\Zope\bin\setup_install_path.py -verbose -set

    將 Zope's Python 的 Install Path 設定好。

完整安裝 Python

  1. http://www.python.org 下載 Python 的 Windows installer,下載的版本必須和 Zope 搭配或更新版,我比較建議使用和 Zope 同樣的版本,Zope 所使用的 Python 版本在 ZMI 中可以查知,如 Zope 2.7.2-0 採用了 Python 2.3.3,而 Zope 2.9.6 則改採用 Python 2.4.3。

  2. 可以將 Python 安裝在預設的目錄內,如 Python 2.3.5 預設安裝目錄為 C:\Python23,但這麼一來可能得修改 $ZopeInstance\bin\zopeservice.py 或是 Python 的一些路徑參數等,然後才能將 Zope 啟動為 Win32 service,不過呢…到目前為止仍未嘗試成功。

    如上述若將 Python 安裝在預設目錄時,修改 $ZopeInstance\bin\runzope.bat 這個檔案裡的路徑參數,就可以在 console 中啟動 Zope,因為並不是啟動為 Win32 service,缺點是該 console 一旦關閉,Zope 也就跟著關閉了。

  3. 我建議將 Python 安裝在 $ZopeHome\Python\ 這個目錄,直接覆蓋掉 Zope 提供的 Python,這樣的好處是不用修改任何的路徑參數,就能直接將 Zope 啟動為 Win32 service。

    用這個方式安裝 Python 前請記得先關閉 Zope service,這樣還可以省去必須重開機的麻煩。

安裝 Python CJKCodecs module

  1. 安裝 CJKCodecs 或 ChineseCodecs 的目的均在使 Python 可以處理 big5 碼,但根據 CZUG.org 在 ChineseCodecs 的說明中指出,ChineseCodecs 這個產品已經有些過時了,所以建議採用 CJKCodecs。

  2. http://cjkpython.i18n.org/ 下載 CJKCodecs for Python 的 Windows installer 安裝即可。下載時請注意 Python 的版本,如使用 Python 2.3.x 時請下載 cjkcodecs-1.1.win32-py2.3.exe 這個檔案。

    在 CJKCodecs 的網頁 http://cjkpython.berlios.de/ 提到,Python 2.4 已經整合了 CJKCodecs:

    CJKCodecs has been integrated into Python 2.4 and you will have it by default.

    因此,Python 2.4 的使用者不必再安裝 CJKCodecs 了。

  3. 安裝後,可以參考 Song 兄在 InstallPythonCJKCodecs 這篇文章中的方法測試:

    # python
    Python 2.3.3 (#1, Feb 7 2004, 17:28:49)
    [GCC 3.3.2 20031022 (Red Hat Linux 3.3.2-1)] on linux2
    Type "help", "copyright", "credits" or "license" for more information.
    >>> a='中'
    >>> unicode(a, 'big5')
    u'\u4e2d'
    >>>

以下記錄一些關於 CJKCodecs 的事項:

  • 在 CZUG.org 有一篇討論「Plone的中文支持」的文章,摘錄這篇文章中幾個要點供參考:

    • panjy 於 Fri, Jun. 04, 2004 提到:“如果你選擇最新的ZopeChinaPak(0.3.1 版),在 Windows 則完全不需要安裝 CJKCodecs。”

    • xyb 在 Thu, Jun. 24, 2004 提到:“CJKCodecs 1.0.3 已經自動加入常用別名,所以不再需要定制 sitecustomizations.py。以下是該篇文章中的 sitecustomizations.py 的內容:

      import sys
      from encodings import aliases

      sys.setdefaultencoding("utf-8")
      aliases.aliases.update({'gb2312':'cjkcodecs.gb2312',
      'big5':'cjkcodecs.big5',
      'cp950':'cjkcodecs.cp950',
      'gbk':'cjkcodecs.gbk',
      'gb18030':'cjkcodecs.gb18030'})
  • 如果想下載源碼自行編譯 CJKCodecs,必須先安裝 Visual C++ 6.0,否則編譯過程中會出現如下的訊息:

    error: Python was built with version 6 of Visual Studio, and extensions need to
    be built with the same version of the compiler, but it isn't installed.

安裝 Python Imaging Library (PIL)

  1. http://www.pythonware.com/products/pil/ 下載 Python Imaging Library (PIL) 的 Windows installer 安裝即可。下載時必須注意 Python 版本,如使用 Python 2.4 時請下載 PIL-1.1.6.win32-py2.4.exe 這個檔案。

  2. 安裝後,可以參考 Song 兄在 InstallPythonImagingLibrary 這篇文章中的方法測試:

    # python
    # Python 2.3.3 (#1, Feb 7 2004, 17:28:49)
    # [GCC 3.3.2 20031022 (Red Hat Linux 3.3.2-1)] on linux2
    # Type "help", "copyright", "credits" or "license" for more information.
    # >>> import Image
    # >>>

安裝 Python ElementTree

  1. ElementTree 是一個和 xml 相關的套件,在 http://effbot.org/zone/element-index.htm 這個網頁有詳盡的說明。

    http://effbot.org/downloads/#elementtree 下載 elementtree-1.2.6-20050316.win32.exe。

  2. 安裝後,可以用這個方法測試:


    # Python 2.4.4 (#71, Oct 18 2006, 08:34:43) [MSC v.1310 32 bit (Intel)] on win32
    # Type "help", "copyright", "credits" or "license" for more information.
    # >>> import elementtree.ElementTree as ET
    # >>>

安裝 Python XML

  1. PyXML package 是包含了 Python 處理 XML 所需要的 library 的集合。其實純粹使用 Plone 2 並不需要安裝 PyXML,由於之前測試的其它 Product 疑似需要,也就習慣將 PyXML 一併安裝起來。

  2. http://sourceforge.net/projects/pyxml/ 下載 PyXML 的 Windows Installer 安裝即可。下載必須注意 Python 版本,例如使用 Python 2.4 則必須下載 for Python 2.4 的安裝程式:PyXML-0.8.4.win32-py2.4.exe。

安裝 CJKSplitter

  1. CJKSplitter 是支援中日韓三種語言的全文檢索斷字模組,它和標準的英文 Splitter 相容,且提供 CJK Splitter (unicode/utf-8)、CJK GB Splitter (unicode、gb18030 等簡體中文編碼) 及 CJK BIG5 Splitter (unicode/big5) 支援。

  2. 舊版本的 CJKSplitter 並不支援單一中文漢字查詢,所以有些使用者可能會考慮嘗試使用 CSplitter,不過,CJKSplitter 自 0.6 版開始已經支援單一中文漢字查詢。

    hhttp://zopen.cn/products/open/CJKSplitter/http://www.zope.org/Members/panjunyong/CJKSplitter 下載 CJKSplitter 0.7.3 版(cjksplitter-0_7_3.tgz)。

  3. 解開後,複製到 $ZopeInstance\Products 目錄。

安裝 ZopeChinaPak

  1. ZopeChinaPak 是一個 Zope 的中文補丁集合,提供中文的 Zope/Plone 使用者更完整的中文支援。

  2. http://zopen.cn/products/open/ZopeChinaPak/http://plone.org/products/zopechinapak 下載 ZopeChinaPak 0.8.2 (zopechinapak-0_8_2.tgz)。

  3. 解開後,複製到 $ZopeInstance\Products 目錄。

以下記錄關於 ZopeChinaPak 的其它事項:

  • 有時可以在 http://download.zopechina.com/ 取得較新版的 CJKSplitter 及 ZopeChinaPak。

  • ZopeChinaPak 已支援中文 ID 的物件,但在 Plone 2.0 會使中文的 ID 會形成中文的網址,因此如果妳仍然使用 Plone 2.0 的版本,並不建議採用中文 ID 的物件。

    先前使用 ZopeChinaPak 0.4 時必須修改 $ZopeInstance\Products\ZopeChinaPak\conf.py 的 LOCAL_FTP_ENCODING 參數,Windows 平台設定為 mbcs,Linux 平台則設為 gb18030big5,如此才能使 FTP 及 WebDav 支援中文 ID。其中的 mbcs 應該是 Multibyte Character Set 的簡稱。

    http://www.czug.org/newsitems/zopechinapak-0.5 得知,ZopeChinaPak 0.5 已可以自動辨別支援的中文編碼,然而繁體中文的使用者必須調整 config.py 的編碼序列,將 big5 放到最前面,修改後如下:

    FTP_CLIENT_ENCODINGS = ('big5', 'gb18030', 'gbk', 'gb2312')
  • ZopeChinaPak 會自動在 ZMI 中設置 management_page_charset 屬性。[*]

安裝 CMF 與 Plone

  1. Plone 是基於 CMF 而建構的一個 Product,自從 Plone 2.0 final 以後的版本,在 http://plone.orghttp://sourceforge.net/projects/plone/ 所下載 for all platforms 的 Product package 檔案已經將所需要的 CMF、PlacelessTranslationService 等 Product 包含進來了,所以可以不用分別下載了。

  2. 目前的穩定版本為 2.5.2 版,將下載的 Plone package (Plone-2.5.2-1.tar.gz) 解開後,將所有的目錄複製到 $ZopeInstance\Products 目錄。

  3. 重新啟動 zope 後就可以建立 Plone site,接下來的內容將以 /portal 代表一個 Plone site。

    如果存在使用較早版本建立的 Plone site,安裝 Plone 後,請參考“升級舊有的 Plone Site(Portal Migration)”一節由 /portal/portal_migration 將舊有的 Plone site 升級。

  4. 建立 Plone Site 時,選擇 Default Chinese Plone 就可以建立一個支援中文的 Plone site。

註1:Plone 2.0 使用 Epoz 這個 WYSIWYG 編輯器,然而使用者也可以在 http://kupu.oscom.org/ 下載 Kupu 這個 WYSIWYG 編輯器。而 Plone 2.5 則改用 Kupu 這個 WYSIWYG 編輯器。

安全補丁 - Hotfix

http://zope.org/http://plone.org 會發佈一些 Hotfix,通常會跟漏洞及安全性的臭蟲有關,所以平時也要留意是否有 Hotfix 需要安裝。另外,在 Zope 或其它 Product 升級後也須注意是否有那些 Hotfix 必須被移除。

Hotfix 的安裝也很簡單,大部分只要下載後解開到 $ZopeInstance/Products 即可。

附錄 A

升級舊有的 Plone Site(Portal Migration)

參考 http://plone.org 網站的“FAQ: How do I upgrade to a newer release of Plone?”,安裝新版的 Plone 後,必須在 ZMI 中由 Plone site 的 portal_migration 將 Plone site 升級,同時也必須由 portal_atct (ATContentTypes Tool) 檢查 ATContentTypes 是否也升級妥當。

例如,原本我的 Plone site 在 Plone 2.5.1 運作,當 Plone 2.5.2 在 2007 年 1 月 17 日釋出後,我下載了 Plone 2.5.2 的 Plone package 檔案(Plone-2.5.2-1.tar.gz),並且依“安裝 CMF 與 Plone 2.0”一節的說明安裝。

  1. 重新啟動 Zope 後,在 ZMI 中進入 /portal/portal_migration,會看到如下一段文字:

    If you wish to upgrade to a new Plone instance, go to migrate.

    點擊 migrate 後,會見到如下的狀態:

    Instance version: 2.5.1
    File system version: 2.5.2

    其中的 Instance version 是原來 Plone site 的版本,而 File system version 則表示目前安裝的 Plone Product 的版本,這表示將由 2.5.1 升級至 2.5.2 版。

    按下 Upgrade 進行升級的動作。

  2. 接著進入 /portal/portal_atct,點擊 Version Migration tab.,同樣會見到 ATContentTypes 的版本狀態:

    Instance version: 1.1.3-final
    File system version: 1.1.4-final

    其中的 Instance version 是原來 ATContentTypes 的版本,而 File system version 則表示目前安裝的 ATContentTypes 的版本,這表示將 ATContentTypes 由 1.1.3-final 升級至 1.1.4-final 版。

    按下 Upgrade 進行升級的動作。

這樣便完成了 Plone 的升級手續了。

如果妳原來的 Plone 是 2.0 版,那麼在升級前,建議先閱讀 http://plone.org 網站的“Migrating a Plone 2.0 site to Plone 2.1”這篇文章,因為 Plone 2.0 預設的 CMF Types 在 Plone 2.1 則改為基於 Archetypes 的 AT Content Types,在升級上更需要小心處理。

我在另外一篇筆記中,將之前嘗試由 Plone 2.0 升級到 Plone 2.1 的過程作了些記錄,內容有些許雜亂,不過還是覺得若是刪了也有點可惜。

設定 Plone 的語系為 zh-TW

設定「plone Setup」/「Portal Setting」的「預設語言(Default Language)」為 Chinese 時,卻是設為 zh-CN,而不是 zh-TW。

我們可以修改 portal_skins/plone_scripts/availableLanguages 加入:

('zh-TW', 'Chinese (Traditional)'),

另一個方法是修改

$ZopeInstance\Products\CMFPlone\skins\plone_scripts\availableLanguages.py

加入:

('zh-TW', 'Chinese (Traditional)'),

這樣的好處是所有的 Plone site 都可以套用到這項修正,而不用一個個修改。

以下是用 diff 指令比較修改 availableLanguages.py 前後的差異:

--- availableLanguages.py.old 2004-04-18 20:22:42.000000000 +0800
+++ availableLanguages.py 2004-08-06 20:05:04.851865600 +0800
@@ -150,6 +150,7 @@
('yo', 'Yorouba'),
('za', 'Zhuang'),
('zh', 'Chinese'),
+ ('zh-TW', 'Chinese (Traditional)'),
('zu', 'Zulu')
]

修改 Plone Site 屬性

在 Plone 2.0 已由 portal_skins/plone_styles/base_properties 取代 Plone 1.0 的 portal_skins/plone_styles/stylesheet_properties。

  1. Plone 2.0 的使用者可以修改 portal_skins/plone_styles/base_properties 的 fontBaseSize 屬性將字體大小調整至適當大小。

使用者註冊時如何不分配使用者目錄?

Plone Site 的預設狀態是,當使用者註冊帳號時,就會在 Members 目錄下新增一個使用者的目錄,但有時可能因為網站的性質而不需要提供這樣功能時,該如何關閉它呢?

方法很簡單,到 plone/portal_membership,按下 turn folder creation offControl creation of member areas 設為 off 的狀態,這樣使用者註冊帳號時,就不會產生使用者目錄了。

另外,更可以到 plone/portal_membership 按下 Actions Tab.,將 My Folder 這個 Action 的 Visible 選項取消,更可以確保 Plone Site 的個人列中不再出現 My Folder 的連結。

完整取消 Plone Site 註冊新帳號的功能

  1. 取消 Anonymous 瀏覽 join_form 的權限:

    將 /portal_skins/plone_login/join_form 這個檔案 customize 到 /portal_skins/custom 目錄中,接著到 Security Tab 修改 "View" permission,將它限制給 Manager。

  2. 設定只有 Site Manager 可以新增使用者帳號:

    在 Plone Site 根目錄的 Security Tab 中,將 "Add portal member" permission 限制給 Manager。

  3. 進入 portal_registration 將 Join 這個 Action 的「Visible?」選項取消,就可以取消 Personal Bar 上註冊的項目。

  4. 若該 Plone Site 原本就是一個 Private Plone Site,點選根目錄 index_html 的 Security Tab,將 "View" permission 開放給 Anonymous ,這樣在進入該 Plone Site 就不會出現要求使用者登入的畫面,而是秀出 index_html 的內容。

啟動 Zope 時發生找不到 pywintypes23.dll 的錯誤

在使用 runzope 啟動 Zope 2.8.0 及 Zope 2.7.7 時,均出現 “這個應用程式無法啟動,因為找不到 pywintypes23.dll,重新安裝應用程式可能可以解決這個問題。” 的對話視窗,在關閉該視窗後,Zope 仍然可以啟動。使用 runzope > dmesg.log 2>&1 指令將啟動 Zope 的記錄寫入 dmesg.log 檔案中,在 dmesg.log 中可以發現這段訊息:

2005-07-11T01:38:02 ERROR(200) Archetypes None
Traceback (most recent call last):
File "D:\Zope-Instance\Products\Archetypes\content_driver\__init__.py", line 15, in ?
import MSWord
File "D:\Zope-Instance\Products\Archetypes\content_driver\MSWord.py", line 25, in ?
from OfficeDocumentCOM import OfficeDocument
File "D:\Zope-Instance\Products\Archetypes\content_driver\OfficeDocumentCOM.py", line 1, in ?
import win32com, sys, string, win32api, traceback, re, tempfile, os
File "C:\Zope\Zope-2.7.7-final\bin\Lib\site-packages\win32com\__init__.py", line 5, in ?
import win32api, sys, os
ImportError: DLL load failed: 找不到指定的模組。
------
2005-07-11T01:38:02 INFO(0) Archetypes Products\Archetypes\content_driver\__init__.py[25]:?
Unable to import MSWord content driver, this is most likely due to
missing the win32 extensions on win32 for which COM is used to support
document conversion. See the README.txt

若想解決方法這個問題,可以到 https://sourceforge.net/projects/pywin32/ 下載 Python Extensions for Windows (pywin32) 來安裝,由於 Zope 2.7.7 仍然使用 Python 2.3.5,所以下載 pywin32-204.win32-py2.3.exe 這個檔案並安裝就可以解決這個錯誤了。

Change log.

Feb. 11, 2007

  • 內容修訂。