MediaWikiでアップロード可能なファイルサイズを変更する

これは、MediaWiki というよりも PHP の設定によっている。
php.ini を次のように変更する。

post_max_size = 10M
upload_max_filesize = 10M

で、サーバを再起動すると、アップロードできるファイルの最大サイズが10MBになった。

MediaWikiをためす

昨日、Hikiの引越しがうまくいった様なエントリを書いたけど、そのあとよくよく使ってみると、エラーが出て表示ができないページ(Encoding::CompatibilityError とあるからたぶんエンコーディングのエラー)があったり、編集して保存しようとすると「指定したタイトルは既に存在しています。」と出て保存できないページがあるなど、どうも動作がおぼつかない。
そこで、せっかくVertrigoServeでPHPとMySQLがインストールされているので、MediaWikiを試してみることにした。

MediaWiki のダウンロードと展開

以下のサイトから、安定バージョンの 1.21.1 をダウンロードした。

 cf. http://www.mediawiki.org/wiki/Download/ja

ダウンロードしたファイルは .tar.gz なので、まずは tar コマンドで展開。ところがエラーになる。コマンドはあってるはず(たぶん)なのに。

^o^ > tar zxvf mediawiki-1.21.1.tar.gz
tar: Cannot fork: Function not implemented
tar: Error is not recoverable: exiting now

仕方が無いので、gunzip で解凍してから、改めて tar で展開した。

^o^ > gunzip mediawiki-1.21.1.tar.gz

^o^ > tar xvf mediawiki-1.21.1.tar

無事完了。

MediaWiki のインストール

展開したディレクトリを、丸ごとC:\www\wiki にコピー。ブラウザから http://localhost/wiki/ にアクセスすると、MediaWiki のページが表示された。「LocalSettings.php not found.」とあるので、「complete the installation」のリンクをクリックして設定をする。
このあとは難しくない。基本的には質問に答えるだけでいい。強いて言えば、データベースの文字セットをUTF-8にしたくらいだ。
最後に、LocalSettings.php をダウンロードして、index.phpと同じディレクトリにコピーすれば完了。
さあ、ブラウザでアクセスしてみよう。無事メインページが表示されてインストールに成功した。
さて、MediaWiki の記法を覚えなきゃ。

パソコンが壊れたのでHikiを引越しした

WindwosXP が動いていた古いほうのPCが壊れた。といっても、ほぼネット専用機になっていたのでたいした実害は無いんだけど、ただ、いくつかWebアプリを動かしていたので、それをどうにかしないといけなくなった。
そのWebアプリのひとつが、WikiクローンのHikiで、幸いハードディスクは無事だったので、データを回収して新しいほうのPC(といってもWindows7)に引っ越すことにした。

VertrigoServ のインストール

何はともあれ、Webサーバが無くては何もできない。古いPCでは、VertrigoServ という、Apache と MySQL と PHP がセットになっているものを使っていた。なので、今回もこれを使うことにする。まずは以下のサイトから VertrigoServ をダウンロード。バージョンは2.29。

 cf. http://vertrigo.sourceforge.net/

ファイルは実行形式のインストーラになっているので、案内に従うだけで簡単にインストールできた。ひとつ注意点としては、インストール先をデフォルトの C:\Program Files (x86)\VertrigoServ ではなく、C:\VertrigoServ に変えたところ。こうしておかないとconfファイルの編集ができない。たぶんWindows7の権限の問題なんだと思うけどそれを追及するより楽な道を選んだ。
で、変えたところは次の2点。
1点めは、httpd.conf内のWebサーバのポート。デフォルトでは 8080 になっているのを 80 に変えた。

#Listen 8080
Listen 80

コメントアウトしてあるのがデフォルトの設定ね。

もう1点は、DocumentRoot。これはvertrigo.conf内に記述がある(vertrigo.confはhttpd.confにインクルードされている)。

#DocumentRoot "C:\VertrigoServ\www"
DocumentRoot "C:\www"
#<Directory "C:\VertrigoServ\www">
<Directory "C:\www">
    Options Indexes FollowSymLinks Includes
    AllowOverride All
    Order allow,deny
    Allow from All
</Directory>

最後に、C:\VertrigoServ\www を C:\www にコピーして終わり。ブラウザで http://localhost/ にアクセスすると無事、Welcome to VertrigoServ というページが表示された。

Hiki のインストール

Hikiは次のサイトからダウンロードした。

 cf. http://hikiwiki.org/ja/

バージョンは1.0.0。これも基本的にはダウンロードしたファイルを展開して、DocumentRoot以下(C:\www\hiki
に配置、いくつかの設定をするだけでいい……はずなんだけど、いざブラウザでアクセスしてみたら、docdiff/difference がロードできないと言うエラーが出た。配布物内の Gemfile を見ると、どうも docdiff という GEM が必要なようなので、インストールする。

^o^ > gem install docdiff

さて、今度は大丈夫かと思ったら、hikidoc がロードできない、というエラーが出たので、これまたインストール。

^o^ > gem install hikidoc

今度こそ大丈夫、無事 FromtPage が表示された。

Hiki のデータを引越し

最初、これはデータを上書きすればいいだけだと思っていた。が、そうはいかなかった。データは、WebサーバのDocumentRootのそと、C:\hiki_data に置いたんだけど、この中のtextディレクトリの中見たデータそのものなので、基本的にはここに以前のデータを放り込んでしまえばいいはずなんだけど、ブラウザからアクセスしたら、エラーになってしまった。なにやらエンコードの問題らしい。
考えてみれば、古いHikiのバージョンは、0.6.3 でエンコードはEUC、対して新しいほうのHiki(1.0.0)のエンコードはUTF-8らしい。ということはEUCからUTF-8にコンバートできればいいはず、と思って配布部図の中を眺めてみると、tool/convert.rb というスクリプトを発見。中を見るとなんかあたりっぽい。これを使ってコンバートした。

^o^ > ruby -Ic:\www\hiki c:\www\hiki\tool\convert.rb --data-directory=BSL -i euc
-jp -o utf-8

なんか warning がいっぱい出たけどとりあえず無視して、変更されたデータを丸ごとhiki_data/textにコピー。
改めてブラウザでアクセスすると、今度はうまく表示された。

virtualenvの仮想環境で作ったeggを別の仮想環境にインストールする

先週の続き。
今回も先週と同じ次のサイトを参考にした。

 cf. python開発環境の構築から作成したeggを別環境へインストールするまで

まずはvirtualenvで仮想環境をひとつ作る。

^o^ > virtualenv --no-site-packages myenvA
New python executable in myenvA\Scripts\python.exe
Installing Setuptools...........................................................
................................................................................
................................................................................
.........................done.
Installing Pip..................................................................
................................................................................
................................................................................
................................................................................
.......................done.

作った仮想環境の中に入ってアクティベートする。

^o^ > cd myenvA

^o^ > Scripts\activate
(myenvA) ^o^ >

Python では、Paster というeggの雛形を作ってくれるツールがあるようなので、それをインストールする。

(myenvA) ^o^ > pip install PasteScript

なんかいろいろとメッセージが出て、インストール完了。

(myenvA) ^o^ > pip list
Paste (1.7.5.1)
PasteDeploy (1.5.0)
PasteScript (1.7.5)
pip (1.4)
setuptools (0.9.7)

作れる雛形を確認。

(myenvA) ^o^ > paster create --list-template
Available templates:
  basic_package:  A basic setuptools-enabled package
  paste_deploy:   A web application deployed through paste.deploy

今回は basic_package の雛形を作る。コマンドを実行するといくつか質問をしてくるので適宜入力。

(myenvA) ^o^ > paster create -t basic_package MyPkg
Selected and implied templates:
  PasteScript#basic_package  A basic setuptools-enabled package

Variables:
  egg:      MyPkg
  package:  mypkg
  project:  MyPkg
Enter version (Version (like 0.1)) ['']: 0.1
Enter description (One-line description of the package) ['']: MyPkg
Enter long_description (Multi-line description (in reST)) ['']: MyPkg
Enter keywords (Space-separated keywords/tags) ['']:
Enter author (Author name) ['']: takatoh
Enter author_email (Author email) ['']: [email protected]
Enter url (URL of homepage) ['']:
Enter license_name (License name) ['']:
Enter zip_safe (True/False: if the package can be distributed as a .zip file) [F
alse]:
Creating template basic_package
Creating directory .\MyPkg
  Recursing into +package+
    Creating .\MyPkg\mypkg/
    Copying __init__.py to .\MyPkg\mypkg\__init__.py
  Copying setup.cfg to .\MyPkg\setup.cfg
  Copying setup.py_tmpl to .\MyPkg\setup.py
Running C:\Users\takatoh\Documents\w\myenvA\Scripts\python.exe setup.py egg_info

カレントディレクトリに MyPkg というディレクトリができて、次のようにファイルが追加されている。

(myenvA) ^o^ > dir MyPkg
 ドライブ C のボリューム ラベルは OS です
 ボリューム シリアル番号は FE2A-F7C6 です

 C:\Users\takatoh\Documents\w\myenvA\MyPkg のディレクトリ

2013/08/10  15:08    <DIR>          .
2013/08/10  15:08    <DIR>          ..
2013/08/10  15:08    <DIR>          mypkg
2013/08/10  15:08    <DIR>          MyPkg.egg-info
2013/08/10  15:08                51 setup.cfg
2013/08/10  15:08               672 setup.py
               2 個のファイル                 723 バイト
               4 個のディレクトリ  364,625,993,728 バイトの空き領域

作られたパッケージの中に、通常のパッケージと同じようにコードを書く。今回は参考サイトに倣って MyPkg/mypkg/utils.py を書く。

def somemethod():
    print "called somemethod()!!"

さて、egg を作るには Paster が出力してくれている setup.py を使う。

(myenvA) ^o^ > cd MyPkg

(myenvA) ^o^ > dir
 ドライブ C のボリューム ラベルは OS です
 ボリューム シリアル番号は FE2A-F7C6 です

 C:\Users\takatoh\Documents\w\myenvA\MyPkg のディレクトリ

2013/08/10  15:08    <DIR>          .
2013/08/10  15:08    <DIR>          ..
2013/08/10  15:17    <DIR>          mypkg
2013/08/10  15:08    <DIR>          MyPkg.egg-info
2013/08/10  15:08                51 setup.cfg
2013/08/10  15:08               672 setup.py
               2 個のファイル                 723 バイト
               4 個のディレクトリ  364,625,248,256 バイトの空き領域

(myenvA) ^o^ > python setup.py bdist_egg
running bdist_egg
running egg_info
writing MyPkg.egg-info\PKG-INFO
writing top-level names to MyPkg.egg-info\top_level.txt
writing dependency_links to MyPkg.egg-info\dependency_links.txt
writing entry points to MyPkg.egg-info\entry_points.txt
reading manifest file 'MyPkg.egg-info\SOURCES.txt'
writing manifest file 'MyPkg.egg-info\SOURCES.txt'
installing library code to build\bdist.win32\egg
running install_lib
running build_py
creating build
creating build\lib
creating build\lib\mypkg
copying mypkg\utils.py -> build\lib\mypkg
copying mypkg\__init__.py -> build\lib\mypkg
creating build\bdist.win32
creating build\bdist.win32\egg
creating build\bdist.win32\egg\mypkg
copying build\lib\mypkg\utils.py -> build\bdist.win32\egg\mypkg
copying build\lib\mypkg\__init__.py -> build\bdist.win32\egg\mypkg
byte-compiling build\bdist.win32\egg\mypkg\utils.py to utils.pyc
byte-compiling build\bdist.win32\egg\mypkg\__init__.py to __init__.pyc
creating build\bdist.win32\egg\EGG-INFO
copying MyPkg.egg-info\PKG-INFO -> build\bdist.win32\egg\EGG-INFO
copying MyPkg.egg-info\SOURCES.txt -> build\bdist.win32\egg\EGG-INFO
copying MyPkg.egg-info\dependency_links.txt -> build\bdist.win32\egg\EGG-INFO
copying MyPkg.egg-info\entry_points.txt -> build\bdist.win32\egg\EGG-INFO
copying MyPkg.egg-info\not-zip-safe -> build\bdist.win32\egg\EGG-INFO
copying MyPkg.egg-info\top_level.txt -> build\bdist.win32\egg\EGG-INFO
creating dist
creating 'dist\MyPkg-0.1dev-py2.7.egg' and adding 'build\bdist.win32\egg' to it
removing 'build\bdist.win32\egg' (and everything under it)

これで dist ディレクトリに MyPkg-0.1dev-py2.7.egg という eggファイルができている。

(myenvA) ^o^ > dir dist
 ドライブ C のボリューム ラベルは OS です
 ボリューム シリアル番号は FE2A-F7C6 です

 C:\Users\takathh\Documents\w\myenvA\MyPkg\dist のディレクトリ

2013/08/10  15:22    <DIR>          .
2013/08/10  15:22    <DIR>          ..
2013/08/10  15:22             1,788 MyPkg-0.1dev-py2.7.egg
               1 個のファイル               1,788 バイト
               2 個のディレクトリ  364,540,661,760 バイトの空き領域

じゃあ、次は別の仮想環境を作ってそこに今作ったeggをインストールしよう。

^o^ > virtualenv --no-site-packages myenvB
(略)

^o^ > cd myenvB

^o^ > Scripts\activate
(myenvB) ^o^ >

ここにさっき作ったeggを持ってきてインストールする。

(myenvB) ^o^ > copy ..\myenvA\MyPkg\dist\MyPkg-0.1dev-py2.7.egg
        1 個のファイルをコピーしました。

(myenvB) ^o^ > pip install MyPkg-0.1dev-py2.7.egg
Downloading/unpacking MyPkg-0.1dev-py2.7.egg
  Could not find any downloads that satisfy the requirement MyPkg-0.1dev-py2.7.e
gg
Cleaning up...
No distributions at all found for MyPkg-0.1dev-py2.7.egg
Storing complete log in C:\Users\hiro\Documents\pip\pip.log

おっと、eggのインストールに pip は使えないようだ。じゃ、easy_install で。

(myenvB) ^o^ > python -m easy_install MyPkg-0.1dev-py2.7.egg
Processing MyPkg-0.1dev-py2.7.egg
removing 'c:\users\takatoh\documents\w\myenvb\lib\site-packages\MyPkg-0.1dev-py2
.7.egg' (and everything under it)
creating c:\users\takatoh\documents\w\myenvb\lib\site-packages\MyPkg-0.1dev-py2.
7.egg
Extracting MyPkg-0.1dev-py2.7.egg to c:\users\takatoh\documents\w\myenvb\lib\sit
e-packages
MyPkg 0.1dev is already the active version in easy-install.pth

Installed c:\users\takatoh\documents\w\myenvb\lib\site-packages\mypkg-0.1dev-py2
.7.egg
Processing dependencies for MyPkg==0.1dev
Finished processing dependencies for MyPkg==0.1dev

(myenvB) ^o^ > pip list
mypkg (0.1dev)
pip (1.4)
setuptools (0.9.7)

さあ、うまくいっているかどうか試してみよう。
次のコードを書いて実行してみる。

from mypkg.utils import *

if __name__ == '__main__':
    somemethod()
(myenvB) ^o^ > python test.py
called somemethod()!!

うまくいった!!

Python の virtualenv をためす

virtualenv は Python の仮想環境。Python のバージョンとかインストールされているパッケージの異なった環境を作ることができるらしいので、ちょっとやってみる。
参考にしたサイトは:
 cf. python開発環境の構築から作成したeggを別環境へインストールするまで
 cf. VIRTUALENV について ― 今日のPython

インストール

インストールは簡単。pipで一発。

^o^ > pip install virtualenv

なんか長々とメッセージが出て、インストール完了。

^o^ > pip list
distribute (0.6.36)
Jinja2 (2.7)
MarkupSafe (0.18)
virtualenv (1.10)

ちゃんとインストールされている。

仮想環境の作成

仮想環境の作成には、virtualenv コマンドを使う。–no-site-packages オプションは、余計なパッケージをインストールしないオプション。

^o^ > virtualenv --no-site-packages myenv
New python executable in myenv\Scripts\python.exe
Installing Setuptools...........................................................
................................................................................
................................................................................
.........................done.
Installing Pip..................................................................
................................................................................
................................................................................
................................................................................
.......................done.

–no-site-packages オプションを指定しても Setuptools と pip はインストールされるみたいだ。
で、今作った myevn に移動して、仮想環境をアクティベートする。

^o^ > cd myenv

^o^ > Scripts\activate
(myenv) ^o^ >

アクティベートするには(Windowsなので)Scriptsフォルダのactivateを実行する。仮想環境がアクディブになるとプロンプトに (myenv) と出るようだ。
インストールされているパッケージを見ると pip と setuptools だけになっている。

(myenv) ^o^ > pip list
pip (1.4)
setuptools (0.9.7)

仮想環境から出るには、(Windowsなので)Scriptsフォルダのdeactivateを実行する。

(myenv) ^o^ > Scripts\deactivate
^o^ >

仮想環境のフォルダ構成

^o^ > dir
 ドライブ C のボリューム ラベルは OS です
 ボリューム シリアル番号は FE2A-F7C6 です

 C:\Users\takatoh\Documents\w\myenv のディレクトリ

2013/08/03  15:08    <DIR>          .
2013/08/03  15:08    <DIR>          ..
2012/12/23  17:22    <DIR>          Include
2013/08/03  15:09    <DIR>          Lib
2013/08/03  15:09    <DIR>          Scripts
               0 個のファイル                   0 バイト
               5 個のディレクトリ  364,815,224,832 バイトの空き領域

Include、Lib、Scripts の3つのフォルダができている。Include にはCのヘッダファイルが入っている。Lib はたぶんライブラリ、Scripts は実行ファイルが入っていて、Python 自体もここに入っている。

仮想環境にパッケージをインストール

せっかくなので、ためしにやってみよう。まずはもう一度アクティベートしてから、pip でインストールする。

(myenv) ^o^ > pip install Jinja2
Downloading/unpacking Jinja2
  Downloading Jinja2-2.7.tar.gz (377kB): 377kB downloaded
  Running setup.py egg_info for package Jinja2

    warning: no files found matching '*' under directory 'custom_fixers'
    warning: no previously-included files matching '*' found under directory 'do
cs\_build'
    warning: no previously-included files matching '*.pyc' found under directory
 'jinja2'
    warning: no previously-included files matching '*.pyc' found under directory
 'docs'
    warning: no previously-included files matching '*.pyo' found under directory
 'jinja2'
    warning: no previously-included files matching '*.pyo' found under directory
 'docs'
Downloading/unpacking markupsafe (from Jinja2)
  Downloading MarkupSafe-0.18.tar.gz
  Running setup.py egg_info for package markupsafe

Installing collected packages: Jinja2, markupsafe
  Running setup.py install for Jinja2

    warning: no files found matching '*' under directory 'custom_fixers'
    warning: no previously-included files matching '*' found under directory 'do
cs\_build'
    warning: no previously-included files matching '*.pyc' found under directory
 'jinja2'
    warning: no previously-included files matching '*.pyc' found under directory
 'docs'
    warning: no previously-included files matching '*.pyo' found under directory
 'jinja2'
    warning: no previously-included files matching '*.pyo' found under directory
 'docs'
  Running setup.py install for markupsafe

    building 'markupsafe._speedups' extension
    ==========================================================================
    WARNING: The C extension could not be compiled, speedups are not enabled.
    Failure information, if any, is above.
    Retrying the build without the C extension now.


    ==========================================================================
    WARNING: The C extension could not be compiled, speedups are not enabled.
    Plain-Python installation succeeded.
    ==========================================================================
Successfully installed Jinja2 markupsafe
Cleaning up...
(myenv) ^o^ > pip list
Jinja2 (2.7)
MarkupSafe (0.18)
pip (1.4)
setuptools (0.9.7)

パッケージは、Lib\site-packagesの中にインストールされるようだ。

さて、あとは必要なパッケージをインストールしてスクリプトを書くだけだ。そのうち書いたスクリプトを.eggファイルにする方法も試してみたい。