基本

zopeの基本的なインストールとディレクトリ構成についての説明を記述しています。

takanori

Windowsへのインストール

目次

ダウンロード[download]

Zope 2.7.4 のページから、 Zope-2.7.4-0-win32.exe を適当なフォルダにダウンロードします。

インストール[install]

ダウンロードしたファイルをダブルクリックなどして実行します。以下、画面とともに説明します。

  1. Setup Wizard画面

    これからZope 2.7.4のSetupがはじまりますよ。というだけなので、何も考えず Next をクリックします。

    Setup Wizard

  2. Install Directory設定画面

    次にZopeをインストールする場所を聞いてくるので、デフォルトの C:\Program Files\Zope-2.7.4-0 で問題なければ、そのまま Next をクリックします。

    Install Directory

  3. Select Components画面

    それ以前のZopeと違い、Zope2.7からはデータなどはインスタンスというところに入れるようになりました。で、そのインスタンスも一緒にインストールするか聞いてきます。ここでは一緒にインストールするので、そのまま Next をクリックします。

    Select Components

  4. Select Start Menu Folder画面

    次に、ZopeをWindowsのスタートメニューのどこに入れるかを選択します。このままで問題ないので Next をクリックします。

    Select Start Menu Folder

  5. Select Additional Tasks画面

    ここでは、ZopeをWindowsのサービスとして設定し、Windowsの起動時に自動的に立ち上げるかを聞いてきます。ここも、そのまま Next をクリックします。

    Select Additional Tasks

    自動起動をやめたい場合などは、スタートメニューのプログラム→管理ツール→サービスでWindowsのサービスを管理する画面を起動して、設定を変更することができます。

  6. Instance Setup画面-1

    Select Components画面 で選択したインスタンスをインストールするディレクトリを聞いてきます。デフォルトの C:\Zope-Instance で問題なければそのまま Next をクリックします。

    Instance Setup

  7. Instance Setup画面-1

    次に、そのインスタンスのadminユーザのパスワードを設定します。任意のパスワードを入力して(忘れないでください!)から Next をクリックします。

    Instance Setup

  8. Ready to Install画面

    これでやっと、インストールの準備が完了できました。ここまでに設定した内容でインストールして問題がなければ Install をクリックします。

    Ready to Install

  9. Completing Setup Wizard画面

    インストールが完了すると、インストールの完了画面が表示されます。早速Zopeを起動してアクセスしてみます。

    Instance Setup

Zopeへアクセス[access]

  1. Zopeトップページ

    Web Browserに http://localhost:8080/ というURLを入力して、インストールしたZopeのトップページが表示されるかを確認します。 正常にインストールしてZopeが起動できていれば、Zope Quick Start 画面が表示されます。

    Zope Quick Start

  2. Zope管理画面

    次に、Zopeの管理画面にアクセスします。

    Web Browserに http://localhost:8080/manage というURLを入力します。 するとパスワードの入力画面が表示されるので、ユーザ名 admin と先ほど設定したパスワードを入力します。

    Password Input

    正しくパスワードを入力すると、Zopeの管理画面が表示されます。

    Zope manage

アンインストール[uninstall]

Windows環境にインストールしたZopeをアンインストールするには、アプリケーションの追加と削除で Zope 2.7.4-0 を選択して 変更と削除 ボタンをクリックするだけです。

Uninstall zope

ただし、この作業だけではインスタンスと一部のファイルが残っているかもしれないので、完全に削除する場合は下記のディレクトリを削除して下さい。

  • C:\Zope-Instance
  • C:\Program Files\Zope-2.7.4-0

Windows環境でのディレクトリ構成

C:\Program Files\Zope-2.7.3-0

このディレクトリにはZopeを構成する基本的なファイルが入ります。 基本的に、ここにあるディレクトリやファイルを操作することはほとんどないと思います。

bin
Zopeを起動するために必要な python の実行ファイル等が入っています。
doc
Zopeに関する一般的な資料が入っています。
import
Zopeにインポートして使うファイルを入れます。最初から Examples.zexp と ZopeTutorialExamples.zexp という例となるファイルが入っています。
lib
Zopeを構成するソースコード等が入っています。
skel
インスタンスを新規に作成するときの雛形となるファイルが入っています。 ここに入っているファイルをもとにして、下の C:\Zope-Instance 等のインスタンスが作成されます。

C:\Zope-Instance

bin
このインスタンスを起動するためのスクリプトが入っています。
etc
zope.conf という名前の設定ファイルが入っています。ファイルの書き方は Apache の httpd.conf に似ています。 どのサービスを立ち上げるか、ポート番号を何番にするか、どこからアクセスできるかなど色々設定することができます。
Extensions
External Methodとして使用する python script を格納します。
import
Zopeにインポートして使うファイル(*.zexp)を入れます。
Products
このインスタンスで使用するZopeのプロダクツを入れます。
var
このインスタンスのデータを保存したZODBファイル Data.fs 等が入っています。

Vine Linuxへのインストール

インストール

もともとVine Linux 3.1ではZope 2.7.4がパッケージとして配布されているので、aptコマンドでインストールします。 なお、apt-get等のaptコマンドはroot権限で実行する必要があるので、sudoを使って実行します。

# apt-get update
# apt-get install Zope Zope-zserver

Zope 2.7.4がパッケージとして配布されるようになったので、以下の打ち消し線で消してある作業は不要になりました。すでにZope 2.7.2または2.7.3をVine Linuxにインストールしていて、アップグレードしたい人は、下記のコマンドを実行してください。

# apt-get update
# apt-get upgrade

また、owaさんの 象歩 というサイトで、Zope 2.7.3 の Vine Linxux 用パッケージが置いてあります。下記の2ファイルをダウンロードして、rpmコマンドを使ってアップグレードします。

% sudo rpm -Uvh Zope-2.7.3-0vl1.i386.rpm \
    Zope-zserver-2.7.3-0vl1.i386.rpm

Zopeへアクセス

  1. Zopeトップページ

    w3mや他のWeb Browserに http://localhost:8080/ というURLを入力して、インストールしたZopeのトップページが表示されるかを確認します。 正常にインストールしてZopeが起動できていれば、Zope Quick Start 画面が表示されます。

    他のマシンからアクセスする場合は、localhost の変わりにIPアドレスや適当なマシン名を入力してください。

    Zope Quick Start

  2. Zope管理画面

    次にZopeの管理画面にアクセスします。

    Web Browserに http://localhost:8080/manage というURLを入力します。 するとパスワードの入力画面が表示されるので、ユーザ名 admin と初期パスワード 123 入力します。(パスワードはあとで必ず変更してください)

    正しくパスワードを入力すると、Zopeの管理画面が表示されます。

    Zope manage

Vine Linux環境でのディレクトリ構成

Zopeパッケージ

以下はZopeパッケージでインストールされるディレクトリやファイルです。 下記のファイルの所有者/所有グループは全て root になります。

/usr/lib/zope/bin/
Zopeのインスタンス生成など、全体に関連する実行ファイルが入っています。
/usr/lib/zope/doc/
Zopeに関する一般的な資料が入っています。
/usr/lib/zope/import/
Zopeにインポートして使うファイルを入れます。 最初から Examples.zexp と ZopeTutorialExamples.zexp という例となるファイルが入っています。
/usr/lib/zope/lib/
Zopeを構成する python のソースコード等が入っています。
/usr/lib/zope/skel/
インスタンスを新規に作成するときの雛形となるファイルが入っています。 ここに入っているファイルをもとにして、下の /var/lib/zope 等のインスタンスが作成されます。

Zope-zserverパッケージ

以下はZope-zserverパッケージでインストールされるディレクトリやファイルです。

/var/lib/zope
このZopeインスタンスを構成するファイルが入っているディレクトリです。このディレクトリには下記のようなディレクトリが存在します。 また、これらのファイルの所有者/所有グループは全て zope になります。
Extensions/
External Methodとして使用する python script を格納します。
Products/
このインスタンスで使用するZopeのプロダクツを入れます。
bin/
このZopeインスタンスを起動するためのスクリプトが入っています。 Zopeがうまく起動しないときには、zope ユーザで bin/runzope コマンドを実行すると、詳細なメッセージが表示されるので問題点がわかりやすくなります。
import/
Zopeにインポートして使うファイル(*.zexp)を入れます。
log@
下に出てくる、/var/log/zope へのシンボリックリンクです。
var/
このインスタンスのデータを保存したZODBファイル Data.fs 等が入っています。
/etc/init.d/zope
このZopeインスタンスを起動/終了させるためのスクリプトです。 /etc/init.d/zope start /etc/init.d/zope stop といった形で実行できます。
/etc/zope.conf
このZopeインスタンスの設定ファイルです。ファイルの書き方は Apache の httpd.conf に似ています。 どのサービスを立ち上げるか、ポート番号を何番にするか、どこからアクセスできるかなど色々設定することができます。
/var/log/zope
このZopeインスタンスの実行時に出力されるログを保存するディレクトリです。

管理ユーザの変更

目次

  • 新しい管理ユーザを追加[add]
  • 新しい管理ユーザでログイン[login]
  • 古い管理ユーザの削除[delete]

新しい管理ユーザを追加[add]

まずはじめに、セキュリティのためにZopeを管理するユーザの変更、またはパスワードの変更をしましょう。(adminという名前のユーザは下記の手順で削除することをおすすめします) ユーザ情報は acl_users フォルダに入っているので、クリックします。

Select alc_users

するとユーザの一覧画面が表示されるので、Add... ボタンを押して新規ユーザを作成します。

Push add button

新しい管理ユーザの名前、パスワード(確認のため2回入力)、と権限(Roles)で Manager を選択してから、Add ボタンで新しい管理ユーザを追加します。

Add new user

すると下記のように、新規ユーザが作成されます。

admin and new admin

新しい管理ユーザでログイン[login]

ここで、今作成した新しい管理ユーザ(myadmin)でログインしなおします。 Zope管理画面の右上から Logout を選択します。

Logout from zope manage

すると、Web Browserからユーザ名とパスワードの入力プロンプトが表示されるので、新しい管理ユーザのユーザ名とパスワードを入力します。うまくログインできない場合は、一旦パスワードの入力をキャンセルしてから、もういちど http://localhost:8080/manage にアクセスして入りなおしてみてください。

正常にログインできると、以下のようにログインしたユーザ名が新しい管理ユーザの名前で表示されます。

Logged in as new admin uesr

古い管理ユーザの削除[delete]

新しい管理ユーザで入りなおしたら、もともとある管理ユーザ admin を削除します。ユーザの削除は簡単で acl_users に入って、削除したいユーザを選択して Delete ボタンを押すだけです。

Delete admin uesr

これで、adminユーザが存在しなくなったため、Zopeサーバに他の人が管理者となって侵入する可能性がの低くなりました。

管理画面の文字コード設定

目次

  • 日本語Titleのオブジェクトを作成[jtitle]
  • 管理画面の文字コードを設定[setcharset]

http://localhost:8080/manage で表示される管理画面では、さまざまなZopeのオブジェクトを作成することができます。 しかし、初期状態ではそれらのオブジェクトのタイトルに日本語を使うことができません。

日本語Titleのオブジェクトを作成[jtitle]

例えば、テスト用のコンテンツを保存する テスト という名前のフォルダを作成するとします。

まず、Zope管理画面の右上にあるリストボックスから、Folder を選択して追加します。

Add Folder

次にフォルダの作成画面が表示されるので、Idを 'Test'、Titleを テスト と入力して追加します。(Idに日本語を設定することはできません。)

Add Test Folder

新しいフォルダが作成されると、ルート('/)フォルダのコンテンツ一覧画面に戻ります。ここで、TestフォルダのTitle部分を見ると テ' とかいう謎な文字列が表示されています。

Broken title

管理画面の文字コードを設定[setcharset]

上記の様に文字化けしてしまう原因は、Zope管理画面の文字コードが設定されていないために発生します。文字コードが設定されていないと、入力された文字列がどのような内容なのかをZopeサーバが判断できないのです。

そのため、Zopeサーバに対して、管理画面の文字コードを指定する必要があります。 文字コードは対象となるフォルダ(この場合はルートフォルダ)に対するプロパティとして設定できます。プロパティを設定するためには、Properties タブをクリックします。

Select properties tab

Zope管理画面の文字コードを指定するために、下記の内容のプロパティを新規に作成します。

  • Name: management_page_charset
  • Type: string
  • Value: utf-8

ここでは utf-8 を文字コードとして指定していますが、euc-jp や shift_jis 等を指定することも可能です。

Set management_page_charset

新しく作成したフォルダ(Test2)では、日本語タイトルが正しく表示されることが確認できます。

Japanese title

構造化テキストの日本語対応

ploneで文書を書くときに(私は)よく使う構造化テキストでは、初期状態では一部日本語に対応していない部分があります。

具体的に説明すると "takanory.net":http://takanory.net/ と記述すると、takanory.net というようにリンクになります。 しかし、同様に "たかのりぃ.net":http://takanory.net/ と記述しても、"たかのりぃ.net" の部分にリンクがはられません。

これは、全角文字が入っていると、構造化テキストが「処理すべき文字列」と認識してくれないためです。

ファイルの修正

そこで、Zopeのソースコードを修正します。

修正するファイルは STletters.py というファイルで、このファイルは以下の場所にあります。

  • Windows環境: C:\Program Files\Zope-2.7.3-0\lib\python\StructuredText\STletters.py
  • Vine Linux環境: /usr/lib/zope/lib/python/StructuredText/STletters.py

ファイルをエディタ等で開いて、以下の部分を修正します。

  • 修正前:
        letters     = string.letters
    
  • 修正後:
        letters     = string.letters + '\200-\377\?\!'
    

Zopeの再起動

修正したコードを読み込ませるために、Zopeサーバを再起動します。 再起動はZopeの管理画面 http://localhost:8080/Control_Panel から Restart ボタンをクリックして行ないます。

再起動後に、正しく日本語を含んだ構造化テキストの処理ができていることを確認します。

参考) Zopeメモ日本語関連モジュール+α

プロダクトの追加

プロダクトを追加したい場合は、必要なプロダクトのアーカイブ('*.tar.gz'等)をダウンロードしてきて解凍し、そのファイルをZopeサーバのインスタンスにある Products ディレクトリに保存します。

ここでは、COREBlog というBlogを作成するためのプロダクトのインストールを例にして説明します。

他にも、Zopeで仕える有用なプロダクトが http://www.zope.org/ 等で公開されているので、色々探してみてください。

目次

  • ダウンロードとインストール[install]
  • Zopeサーバに認識させる[reboot]
  • オブジェクトを作成[create]

ダウンロードとインストール[install]

まず、プロダクトを構成するアーカイブファイル COREBlog10.tgz をダウンロードします。

次に、アーカイブを解凍します。すると COREBlog というディレクトリができます。このディレクトリを Products ディレクトリに移動します。デフォルトでは下記のディレクトリになります。

  • Windows環境: C:\Zope-Instance\Products
  • Vine Linux環境: /var/lib/zope/Products/

ただし、Vine Linux環境の場合は、プロダクトの所有者と所有グループを zope にしておく必要があります。下記のコマンドを実行して所有権の変更をしてください。

% sudo chown zope:zope /var/lib/zope/Products/COREBlog
% ls -l /var/lib/zope/Products/
drwxr-xr-x    6 zope  zope    4096 Dec 15 23:50 COREBlog/

Zopeサーバに認識させる[reboot]

ただし、Products ディレクトリにファイルを置いただけでは、まだCOREBlogを使用することはできません。Zopeサーバに新しいプロダクトを読み込ませなければなりません。

プロダクトを読み込むために手っ取り早いのは、Zopeサーバを再起動することです。

Zope管理画面のルートフォルダにある Control_Panel を選択すると、このZopeサーバに関する情報が表示されます。 ここで、Restart ボタンをクリックすると、Zopeサーバが再起動します。

Restart Zope server

再起動されたら、プロダクトが読み込まれたかを確認します。Zopeサーバで使用できるプロダクトの一覧は、Control_Panel の下の Product Management から参照できます。

Select Product Management

プロダクトの一覧を参照すると、COREBlog が正しく読み込まれていることが確認できます。(他のプロダクトはZopeにデフォルトでインストールされているものです)

Show Products Management

オブジェクトを作成[create]

新規プロダクトを使用したオブジェクトを作成します。 オブジェクトの作成の方法は、フォルダを作成したときと同様で、右上のリストボックスからここでは COREBlog を選択して作成します。

Add COREBlog

あとは、それぞれのプロダクトの説明などに従って利用してください。

pythonのライブラリインストール

ここでは日本語関連と、画像関連のpythonのライブラリをインストールします。

目次

ライブラリのインストール方法[install]

基本的なpythonのライブラリをインストールする方法は全て同じで。python setup.py install というコマンドを実行するのみです。

そうすると、ライブラリの生成とインストールが実行されます。ライブラリのインストール場所は Vine Linux でpython2.3を使用している場合は以下のディレクトリとなります。

  • /usr/lib/python2.3/site-packages/

日本語関連[japanese]

JapaneseCodecs[codecs]

JapaneseCodecsはUnicodeをサポートした最近のpythonに、EUC-JP、Shift_JIS、ISO-2022-JP等の日本語の文字エンコーディングを扱えるようにするためのものです。このライブラリをインストールすることにより、pythonで日本語の文字コードの変換を行なえるようになります。

PyKf[pykf]

PyKfは日本語の文字コードを相互に変換するためのライブラリです。また、JapaneseCodecsにない機能として、全角カタカナと半角カタカナの変換ができます。

kconv[kconv]

kconvも同様に日本語の文字コードを相互に変換するためのライブラリです。他のライブラリにない機能としては英数記号の全角と半角の変換、ひらがなとカタカナの変換、全角英字の大文字・小文字変換があります。

画像関連[image]

PIL[pil]

Python Imaging Libarary(PIL)は名前の通り画像を扱うライブラリです。このライブラリを使用することにより各種画像ファイルの情報取得・サイズ変更・変換等が行なえるようになります。

写真を扱うzope/ploneのプロダクトでよく利用されます。しかし、PILの画像のリサイズはちょっと処理が荒い気がするので、個人的には ImageMagick を併用することをおすすめします。(たいていのプロダクトは両方に対応しているので)

PIL 1.1.5 のインストールは下記のコマンドを実行して行います。

% python setup.py build_ext -i
% python selftest.py
% sudo python setup.py install

データのバックアップとパック

zopeのデータが入っている Data.fs ファイルには、変更履歴も残っていてアンドゥができるようになっています。 ただし、この情報をいつまでも残しているとデータがどんどん膨らんでしまうので、定期的に圧縮した方がいいと思います。

また、過去のデータをバックアップもした方がいいと思うので、データをまとめて Export するスクリプトを作成します。

以下のスクリプトを /etc/cron.weekly/packzodb というファイルで作成すると、週に一回実行されます。:

 cd /var/lib/zope/var
 rm root.4.zexp.gz
 mv root.3.zexp.gz root.4.zexp.gz
 mv root.2.zexp.gz root.3.zexp.gz
 mv root.1.zexp.gz root.2.zexp.gz
 mv root.zexp.gz root.1.zexp.gz
 wget -O /dev/null \
  --http-user=admin \
  --http-passwd=XXXXXXXX \
  http://localhost:8080/manage_exportObject
 mv .zexp root.zexp
 gzip root.zexp
 wget -O /dev/null \
  --http-user=admin \
  --http-passwd=XXXXXXXX \
  "http://localhost:8080/Control_Panel/Database/main/manage_pack?days:float=7"

このスクリプトの内容は以下のとおりです。

  • 1-6行目 まず、Data.fs が存在するディレクトリに移動して、過去のバックアップファイルの名前をずらします。
  • 7-10行目 http://localhost:8080/manage_exportObject にzopeの管理ユーザでアクセスし、.zexp という全データの入ったファイルを作成します。
  • 11-12行目 作成したファイルを root.zexp というファイル名に変更して圧縮します。
  • 13-16行目 7日より前の変更履歴を削除して、データをパックします。

PythonScript で標準以外のモジュールを使う

zope管理画面(ZMI) から作成できる Python Script には、セキュリティの観点から利用できるモジュールが極端に制限されています。(string, math, randam とか程度)

それだけじゃ不便で使いたいモジュールが存在する場合には、このモジュールを使えるようにするという設定を zope サーバに対して行う必要があります。

モジュール追加プロダクト作成

モジュールを追加するためには、モジュールを追加するという命令を記述したプロダクトを作成する必要があります。

といってもそんなに難しいわけではなく、雛形が用意されているのでそれを利用します。

まず、zope インスタンスの Products ディレクトリに GlobalModules とかいた適当なディレクトリを作成ます。

# cd /var/lib/zope/Products
# mkdir /var/lib/zope/Products/GlobalModules

次に、/usr/lib/zope/lib/python/Products/PythonScripts/ にあるサンプル(modyle_access_examples.py)を __init__.py という名前でコピーします。

# cp /usr/lib/zope/lib/python/Products/PythonScripts/module_access_examples.py \
  __init__.py

このスクリプトを見れば使い方がわかりますが allow_moduleallow_class という関数を使って利用可能なモジュールやクラスを指定します。

私の場合は以下の部分をコメントアウトして、refnmatch を利用できるようにしました。:

    ModuleSecurityInfo('fnmatch').declarePublic('fnmatch', 'fnmatchcase')

    ModuleSecurityInfo('re').declarePublic('compile', 'findall',
      'match', 'search', 'split', 'sub', 'subn', 'error',
      'I', 'L', 'M', 'S', 'X')
    import re
    allow_type(type(re.compile('')))
    allow_type(type(re.match('x','x')))

あとは zope サーバを再起動すると、これらのモジュールが Python Script から使えるようになります。