「MediaWikiの設定 - さくらインターネット」の版間の差分

ナビゲーションに移動 検索に移動
(Wiki がページ「カテゴリ:MochiuWikiの設定 - さくらインターネット」を「MochiuWikiの設定 - さくらインターネット」に、リダイレクトを残さずに移動しました)
4行目: 4行目:


== SyntaxHighlight Geshi ==
== SyntaxHighlight Geshi ==
==== 旧版MediaWikiのSyntaxHighlight Geshiを使用する方法 ====
MediaWikiの配布ファイルに標準添付されているが、MediaWiki 1.31以降の同梱版ではPython3が必要である。<br>
MediaWikiの配布ファイルに標準添付されているが、MediaWiki 1.31以降の同梱版ではPython3が必要である。<br>
<br>
<br>
さくらインターネットのレンタルサーバには、Python2のみインストールされているため、<br>
さくらインターネットのレンタルサーバには、Python2のみインストールされているため、<br>
MediaWiki 1.31以降をインストールする場合、SyntaxHighlight Geshiは動作せず、<br>
MediaWiki 1.31以降をインストールする場合、SyntaxHighlight Geshiは動作せず、<br>
<syntaxhighlight>タグが含まれるページを編集すると"構文ハイライトエラーがあるページ"になる。<br>
<nowiki><syntaxhighlight></nowiki>タグが含まれるページを編集すると"構文ハイライトエラーがあるページ"になる。<br>
<br>
<br>
解決方法は、MediaWiki 1.30に含まれるSyntaxhighlight Geshiディレクトリにあるpygmentsディレクトリをコピーする。<br>
解決方法は、MediaWiki 1.30に含まれるSyntaxhighlight Geshiディレクトリにあるpygmentsディレクトリをコピーする。<br>
18行目: 19行目:
<br>
<br>
ただし、この方法で不具合が出ないとも限らないので、自己責任で行うこと。<br>
ただし、この方法で不具合が出ないとも限らないので、自己責任で行うこと。<br>
<br>
==== Python3を使用する方法 ====
ホームディレクトリにPython3をインストールして、Python3を参照するようにSyntaxHighlight Geshiの設定を変更する。<br>
手順は、以下の通りである。<br>
# Python3のインストール
#: Python3のセクションの手順を行う。
#: <u>ただし、Pyenvのインストールと設定は不要である。</u>
#: <br>
# SyntaxHighlightの編集
#: 編集するファイルは、<MediaWikiのディレクトリ>/extensions/SyntaxHighlight_GeSHi/pygments/create_pygmentize_bundleファイルである。
#: <br>
#: cd <MediaWikiのディレクトリ>/extensions/SyntaxHighlight_GeSHi/pygments
#: <br>
#: まず、バックアップを作成する。
#: cp create_pygmentize_bundle create_pygmentize_bundle_org
#: mv pygmentize pygmentize_org  (pygmentizeファイルは再作成するため、mvコマンドを実行している)
#: <br>
#: 次に、create_pygmentize_bundleファイルを、以下のように修正する。
<syntaxhighlight lang="python">
#!/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))
</syntaxhighlight>
<br>
次に、上記で編集したcreate_pygmentize_bundleファイルを使用して、pygmentizeを再作成する。<br>
/home/<ユーザ名>/<python3のインストールディレクトリ>/bin/python3 ./create_pygmentize_bundle
<br>
pygmentizeファイルに実行権限を付加する。<br>
chmod +x pygmentize
<br>
最後に、Webブラウザのキャッシュを削除して、Syntaxhighlight Geshiが正常に動作しているか確認する。<br>
<br><br>
<br><br>


案内メニュー