Open7

git-mediawiki を使って「ウィキじまい」をする

SigsignSigsign

MediaWiki の記事を静的ファイルに変換して「ウィキじまい」をする。

目標

  • git-remote-mediawiki を使って git リポジトリに変換する
  • 静的ファイルを生成して GitHub Pages のような形で公開する
SigsignSigsign

経緯

  • 設置していた Wiki が荒らされていたことに気付く
  • 復旧そのものは mysql コマンドを実行するだけなので簡単
    • automysqlbackup のおかげ
  • しかし、荒らされてから何ヶ月も気付かない(管理してない)のはダメだよね
    • 誹謗中傷や犯行予告が書き込まれていたら困る
  • 更新するつもりのない Wiki のために MariaDB を動かしているのは無駄
  • 良い機会なので MediaWiki をやめよう
SigsignSigsign

まずは荒らされた Wiki を復旧させる。復旧に必要なのはコマンド1行だけ。

$ sudo gunzip -c /var/lib/automysqlbackup/monthly/mediawiki/mediawiki_2024-10-01_06h25m.October.mediawiki.sql.gz | sudo mysql mediawiki
SigsignSigsign

画像は DB とは別で管理されているので、画像と DB の情報に齟齬が生まれないように気配りをする必要がある。

画像フォルダもちゃんとバックアップを取るべきだが、忘れられがち。

SigsignSigsign

Docker を使って git-mediawiki の環境をサクッと作る。

FROM debian:bookworm

ARG USERNAME=sigsign
ARG USER_UID=1000
ARG USER_GID=1000

ENV LANG=C.UTF-8

RUN groupadd -g ${USER_GID} ${USERNAME} && \
    useradd -u ${USER_UID} -g ${USER_GID} -G adm,sudo -m -s /bin/bash ${USERNAME}

RUN --mount=type=cache,target=/var/cache/apt,sharing=locked \
    --mount=type=cache,target=/var/lib/apt,sharing=locked \
    export DEBIAN_FRONTEND=noninteractive && \
    apt-get update && \
    apt-get upgrade -y && \
    apt-get install -y \
        bash-completion \
        curl \
        file \
        git \
        git-mediawiki \
        less \
        sudo \
        vim \
        whiptail \
        zip

RUN echo "${USERNAME} ALL=(ALL) NOPASSWD:ALL" > /etc/sudoers.d/user \
 && chmod 440 /etc/sudoers.d/user

USER ${USERNAME}
CMD [ "/bin/bash", "-l" ]
SigsignSigsign

git clone mediawiki::https://wiki.example.com/w では思うように動かなかった。

git-remote-mediawiki の実装を読んで、それっぽいオプションを適宜追加して試していく。

デフォルトでは remote.origin.fetchStrategyby_page が設定されている。
remote.origin.fetchStrategyby_rev を指定すると(MAIN 名前空間以外はスキップされてしまうものの)期待通りの動作をするようだ。
あとは remote.origin.namespaces に保存したい名前空間のリストをスペース区切りで追加すればよさそう。

$ git clone -c remote.origin.fetchStrategy="by_rev" -c remote.origin.namespaces="(Main) User User_talk ..." mediawiki::https://wiki.example.com/w

うまくいった。

SigsignSigsign

git-remote-mediawiki の不満なところ。

  • 階層化された Wiki ページがディレクトリ構造にならない
    • page/subpagepage%2Fsubpage.mw に保存される
    • page/subpage.mw に保存されてほしい
  • コミットのメールアドレスが USER@wiki.singnote.cc/w になる
    • USER@wiki.signote.cc になってほしい