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" \
    --enable-optimizations --prefix=$HOME/local/python \
    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

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

4. 最後に、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