MediaWikiの設定 - さくらインターネット

提供: MochiuWiki : SUSE, EC, PCB

概要

さくらインターネットにおいて、MediaWikiを構築する場合の設定を記載する。


SyntaxHighlight Geshi

旧版MediaWikiのSyntaxHighlight Geshiを使用する方法

MediaWikiの配布ファイルに標準添付されているが、MediaWiki 1.31以降の同梱版ではPython3が必要である。

さくらインターネットのレンタルサーバには、Python2のみインストールされているため、
MediaWiki 1.31以降をインストールする場合、SyntaxHighlight Geshiは動作せず、
<syntaxhighlight>タグが含まれるページを編集すると"構文ハイライトエラーがあるページ"になる。

解決方法は、MediaWiki 1.30に含まれるSyntaxhighlight Geshiディレクトリにあるpygmentsディレクトリをコピーする。
pygmentsディレクトリのみを変更することにより、さくらインターネットのPython2でも使用できるようになる。

cd <MediaWikiのフルパス>/extensions
mv SyntaxHighlight_GeSHi/pygments SyntaxHighlight_GeSHi/pygments_org
fetch https://extdist.wmflabs.org/dist/extensions/SyntaxHighlight_GeSHi-REL1_30-87392f1.tar.gz
tar zxvf SyntaxHighlight_GeSHi-REL1_30-87392f1.tar.gz SyntaxHighlight_GeSHi/pygments/


ただし、この方法で不具合が出ないとも限らないので、自己責任で行うこと。

Python3を使用する方法

ホームディレクトリにPython3をインストールして、Python3を参照するようにSyntaxHighlight Geshiの設定を変更する。
手順は、以下の通りである。

  1. Python 3のインストール
    まず、Python 3のインストールディレクトリを作成する。
    mkdir -p $HOME/local/python

    Python 3.7.9をダウンロードして解凍する。
     wget https://www.python.org/ftp/python/3.7.9/Python-3.7.9.tar.xz
     tar -xf Python-3.7.9.tar.xz
    

    Python-3.7.9ディレクトリに移動する。
    cd Python-3.7.9

    Python 3をインストールする。
     ./configure \
     CPPFLAGS="-I/usr/local/ssl/include" LDFLAGS="-L/usr/local/ssl/lib" \
     --prefix=$HOME/local/python
     --enable-optimizations \
     
     make
     make install
    

    Python 3.7.9ディレクトリを削除する。
    rm -rf $HOME/Python-3.7.9

    Pyenvのインストールは不要である。

  2. SyntaxHighlightの編集
    編集するファイルは、<MediaWikiのディレクトリ>/extensions/SyntaxHighlight_GeSHi/pygments/create_pygmentize_bundleファイルである。

    cd $HOME/<MediaWikiのディレクトリ>/extensions/SyntaxHighlight_GeSHi/pygments

    まず、バックアップを作成する。
     cp create_pygmentize_bundle create_pygmentize_bundle_org
     mv pygmentize pygmentize_org  # pygmentizeファイルは再作成するため、mvコマンドを実行している
    

    次に、create_pygmentize_bundleファイルを、以下のように修正する。
     #!/home/<ユーザ名>/local/python/bin/python3  # 変更する箇所
     # -*- coding: utf-8 -*-
     """
      Create a standalone, executable 'pygmentize' bundle.
      Author: Ori Livneh
     
     """
     import hashlib
     import io
     import os
     import stat
     import textwrap
     import urllib.request
     import xmlrpc.client
     import zipfile
     
     PYGMENTIZE_LAUNCHER = textwrap.dedent('''\
      #!/home/<ユーザ名>/local/python/bin/python3  # 変更する箇所
     
      import sys
      import pygments.cmdline
      try:
          sys.exit(pygments.cmdline.main(sys.argv))
      except KeyboardInterrupt:
          sys.exit(1)
     ''')
     
     print('Querying PyPI for the latest Pygments release...')
     pypi = xmlrpc.client.ServerProxy('https://pypi.python.org/pypi')
     latest_version = pypi.package_releases('Pygments')[0]
     url = None
     for release in pypi.release_urls('Pygments', latest_version):
        if (release['packagetype'] == 'bdist_wheel' and
                release['python_version'].startswith('py2')):
            url = release['url']
            md5_digest = release['md5_digest']
            break
     
     if not url:
            raise RuntimeError('No suitable package found.')
     
     print('Retrieving version %s (%s)...' % (latest_version, url))
     req = urllib.request.urlopen(url)
     buf = io.BytesIO(req.read())
     
     print('Verifying...')
     if hashlib.md5(buf.getvalue()).hexdigest() != md5_digest:
        raise RuntimeError('MD5 checksum mismatch.')
     
     print('Creating executable ZIP bundle...')
     with zipfile.ZipFile(buf, 'a') as zf:
        zf.writestr('__main__.py', PYGMENTIZE_LAUNCHER)
     
     data = buf.getvalue()
     script_dir = os.path.dirname(os.path.abspath(__file__))
     file_path = os.path.join(script_dir, 'pygmentize')
     with open(file_path, 'wb') as f:
        f.write(b'#!/home/<ユーザ名>/local/python/bin/python3\n')  # 変更する箇所
        f.write(data)
     
     file_st = os.stat(file_path)
     os.chmod(file_path, file_st.st_mode | stat.S_IEXEC)
     
     with open(os.path.join(script_dir, 'VERSION'), 'w') as f:
        f.write(latest_version + '\n')
     
     print('Done. Wrote %s bytes to %s' % (len(data), file_path))
    

  3. 次に、上記で編集したcreate_pygmentize_bundleファイルを使用して、pygmentizeを再作成する。
    /home/<ユーザ名>/local/python/bin/python3 ./create_pygmentize_bundle

  4. pygmentizeファイルに実行権限を付加する。
    chmod +x pygmentize

  5. 最後に、Webブラウザのキャッシュを削除して、Syntaxhighlight Geshiが正常に動作しているか確認する。



Python3のインストール

pyenvをインストールして、Pythonのバージョンを簡単に切り替えるように設定する。

pyenvのインストールするため、以下のコマンドを実行する。

git clone --depth 1 https://github.com/yyuu/pyenv.git ~/.pyenv


pyenv-virtualenvをインストールするため、以下のコマンドを実行する。

git clone --depth 1 https://github.com/yyuu/pyenv-virtualenv.git ~/.pyenv/plugins/pyenv-virtualenv


次に、.bashrcファイルに以下の設定を追記する。

export PYENV_ROOT="$HOME/.pyenv"
export PATH="$PYENV_ROOT/bin:$PATH"
export TMPDIR="$HOME/tmp"
export PYTHON_PATH=./
eval "$(pyenv init -)"
eval "$(pyenv virtualenv-init -)"


.bashrcファイルの設定を反映させる。

source ~/.bashrc


pyenvを使用して、Pythonをインストールする。

# インストールできるPythonのバージョンを表示する
pyenv install --list

# Pythonのバージョンを指定して、Pythonをインストールする
pyenv install 3.8.7


以下に示すように、confファイルを開くことができないというメッセージが出力されるが、正常にインストールされる。

Downloading Python-3.8.7.tgz...
-> https://www.python.org/ftp/python/3.7.6/Python-3.8.7.tgz
Installing Python-3.8.7...
pkg: Unable to open '/usr/local/etc/pkg/repos//sakura11-repo.conf':Permission denied
pkg: Insufficient privileges to query the package database
pkg: Unable to open '/usr/local/etc/pkg/repos//sakura11-repo.conf':Permission denied
pkg: Insufficient privileges to query the package database
Installed Python-3.8.7 to /home/beginner/.pyenv/versions/3.8.7


Pythonが正常にインストールされているか確認する。

/home/hogehoge/.pyenv/versions/3.8.7/bin/python3 --version


使用できるPythonのバージョンを確認する。

pyenv versions
* system (set by /home/hogehoge/.pyenv/version)
  3.8.7


特定のPythonのバージョンに変更する。

pyenv global 3.8.7


現在、設定されているPythonのバージョンを確認する。

python -V