미디어위키/미디어위키 설치 및 관리

미디어위키(Mediawiki) 1.32 공식 지원 익스텐션 통합 설치

씨실과 날실 2019. 8. 6. 09:00


주의

개인적으로 미디어위키 공식 사이트의 익스텐션 검색 기능을 활용하여 자신에게 필요한 익스텐션들만 개별적으로 설치하시기를 강력히 권장합니다. 미디어위키의 익스텐션이 근 800개에 가까우므로 이들을 모두 다운 받는 것은 자원 낭비일 뿐만 아니라 각 익스텐션별로 추가적인 작업이 필요한 경우가 많아 그 수많은 예외 사항을 일일이 확인하여 설치하기에는 들여야 하는 시간과 노력이 너무 큽니다.

다시금 말씀드리지만 아래 내용은 이런 내용도 있다 정도만 알고 넘어가시기 바랍니다.

알림

미디어위키 익스텐션 통합 설치에 대한 자세한 설명은 아래 링크를 꼭 참고하시기 바랍니다.

미디어위키 1.32 지원 익스텐션 목록


Git으로 설치

Git을 사용할 줄 안다면 Git을 이용해 내려받으실 것을 강력히 권장합니다. 이유는 다음과 같습니다.

익스텐션의 업데이트 등으로 익스텐션의 파일명이 바뀌는 경우가 있습니다. 따라서 이번 글에 익스텐션의 URL 주소를 공개한다 하더라도 언제든지 파일명이 바뀌어 내려받지 못할 수 있습니다. 실제로 이번 연재를 준비하면서 해당 경우를 여러번 겪었습니다. 그러나 Git을 이용하면 언제나 최신 정보로 유지되기 때문에 파일명이 바뀔 것을 걱정하지 않아도 됩니다.

미디어위키 익스텐션 Git 저장소에는 1.32 익스텐션은 785개가 관리되고 이쑈습니다.

기존 extensions 폴더 이름 변경

study@study-VirtualBox:/var/www/html/w$ sudo mv extensions extensions_old

이렇게 기존 익스텐션 디렉토리 이름을 변경하는 이유는 Git으로 미디어위키의 익스텐션을 Clone할 때 extensions 디렉토리가 이미 존재하면 아래와 같은 문구를 출력하며 실행되지 않기 때문입니다.

study@study-VirtualBox:/var/www/html/w$ sudo git clone https://gerrit.wikimedia.org/r/mediawiki/extensions --branch REL1_32
[sudo] study의 암호:
fatal: 대상 경로가('extensions') 이미 있고 빈 디렉터리가 아닙니다.

익스텐션 통합 Git Clone(복제)

study@study-VirtualBox:/var/www/html/w$ sudo git clone https://gerrit.wikimedia.org/r/mediawiki/extensions --branch REL1_32

익스텐션 통합 git submodule update

study@study-VirtualBox:/var/www/html/w$ cd ./extensions
study@study-VirtualBox:/var/www/html/w/extensions$ sudo git submodule update --init --recursive

익스텐션이 출시 된 이후에도 업데이트되는 경우가 있으므로  위 git submodule update를 익스텐션 설치 후에도 가끔씩 실행해주시면 좋습니다.

미디어위키 버전 변경 후 익스텐션 대응 브랜치로 변환

study@study-VirtualBox:/var/www/html/w/extensions$ sudo git submodule foreach 'git checkout -b REL1_33 origin/REL1_33 || :'

사용하는 미디어위키의 버전을 바꾼 경우 해당 브랜치에 맞게 익스텐션의 버전도 바꿔주어야 합니다. 위와 같은 코드를 이용하시면 됩니다.

LocalSettings.php 파일에 익스텐션 등록

익스텐션 디렉토리명 목록 파일로 저장

study@study-VirtualBox:/var/www/html/w/extensions$ find . -maxdepth 1 -type d > ~/다운로드/mediawiki/extensions/REL1_32/ext_list.txt

위 명령은 익스텐션 디렉토리에 존재하는 1단계 하위 디렉토리의 목록을 텍스트 파일로 뽑는 명령입니다.

이렇게 생성된 파일 내용은 아래와 같습니다.

.
./ShoutWikiAPI
./MsLinks
./WikiLovesMonuments
./SemanticDrilldown
./UnicodeConverter
./HashTables
./Screenplay
./OpenID
... 생략 ....

익스텐션 등록 코드 생성

study@study-VirtualBox:~/다운로드/mediawiki/extensions/REL1_32$ sed -i "s/^../wfLoadExtension( '/g" ~/다운로드/mediawiki/extensions/REL1_32/ext_list.txt

study@study-VirtualBox:~/다운로드/mediawiki/extensions/REL1_32$ sed -i "s/$/' );/g" ~/다운로드/mediawiki/extensions/REL1_32/ext_list.txt

위 명령어는 리눅스의 sed와 표현정규식을 이용한 문자열 치환 명령어입니다.

파일 내용은 아래와 같이 치환될 것입니다.

위 코드들 중 첫 줄의 .' )와 wfLoadExtension( '.git' ); 줄을 삭제하고 나머지 코드들을 LocalSettings.php 파일의 익스텐션 등록 부분에 추가해주시면 됩니다.

참고로 위 코드들 중

wfLoadExtension( '익스텐션명' );

코드가 아닌

require_once "$IP/extensions/익스텐션명/익스텐션명.php";

과 같은 구식 코드를 사용하는 경우가 있습니다. 따라서 위와 같이 일괄적으로 wfLoadExtension( '익스텐션명' ); 코드를 쓸 수 있는 것은 아닙니다. 따라서 어떤 코드를 써야할 지는 각 익스텐션의 공식 페이지에서 일일이 확인해야 합니다. 이런 면을 봐서도 통합 설치는 결코 쉽지 않습니다.

위 작업만으로 설치가 완료되는 익스텐션이 있는가 하면 DB 업데이트가 필요한 익스텐션도 있습니다. 그런 경우 아래와 같이 미디어위키의 DB를 업데이트해주어야 합니다.

미디어위키 DB update 실행

study@study-VirtualBox:/var/www/html/w/maintenance$ sudo php update.php

그러나 통합 설치할 때는 DB 업데이트를 실행하면 아래와 같은 문구가 출력됩니다.

study@study-VirtualBox:/var/www/html/w/maintenance$ sudo php update.php
[sudo] study의 암호:
PHP Fatal error:  Uncaught Exception: /var/www/html/w/extensions/SemanticDrilldown/extension.json does not exist! in /var/www/html/w/includes/registration/ExtensionRegistry.php:107
Stack trace:
#0 /var/www/html/w/includes/GlobalFunctions.php(50): ExtensionRegistry->queue('/var/www/html/w...')
#1 /var/www/html/w/LocalSettings.php(287): wfLoadExtension('SemanticDrilldo...')
#2 /var/www/html/w/includes/Setup.php(94): require_once('/var/www/html/w...')
#3 /var/www/html/w/maintenance/doMaintenance.php(81): require_once('/var/www/html/w...')
#4 /var/www/html/w/maintenance/update.php(248): require_once('/var/www/html/w...')
#5 {main}
  thrown in /var/www/html/w/includes/registration/ExtensionRegistry.php on line 107

문제가 발생한 익스텐션의 문제를 해결하거나 설치에서 제거하더라도(미디어위키 새로 설치 시에는 익스텐션 설치 체크 해제, 기존 미디어위키에 익스텐션만 추가하는 경우에는 해당 익스텐션 디렉토리와 등록 코드를 제거) 문제가 발생하는 또다른 익스텐션에 대한 오류 메시지가 출력됩니다.

study@study-VirtualBox:/var/www/html/w/maintenance$ sudo php update.php
[sudo] study의 암호:
PHP Fatal error:  Uncaught Exception: /var/www/html/w/extensions/HashTables/extension.json does not exist! in /var/www/html/w/includes/registration/ExtensionRegistry.php:107
Stack trace:
#0 /var/www/html/w/includes/GlobalFunctions.php(50): ExtensionRegistry->queue('/var/www/html/w...')
#1 /var/www/html/w/LocalSettings.php(290): wfLoadExtension('HashTables')
#2 /var/www/html/w/includes/Setup.php(94): require_once('/var/www/html/w...')
#3 /var/www/html/w/maintenance/doMaintenance.php(81): require_once('/var/www/html/w...')
#4 /var/www/html/w/maintenance/update.php(248): require_once('/var/www/html/w...')
#5 {main}
  thrown in /var/www/html/w/includes/registration/ExtensionRegistry.php on line 107
study@study-VirtualBox:/var/www/html/w/maintenance$

즉 문제가 있는 익스텐션이 한꺼번에 출력되는 것이 아니라 한번에 하나씩만 출력되기 때문에 이것을 해결하려면 출력되는 익스텐션을 일일이 확인하고 해결해야 하기 때문에 굉장히 오랜 시간이 걸립니다.

또한 문제가 익스텐션의 오류 발생 원인은 다양합니다. 의존성 등 해당 익스텐션이 요구하는 모든 조건을 충족해야만 올바르게 설치할 수 있습니다. 그 조건은 각 익스텐션의 공식 페이지에서 확인해야 합니다.

그마저도 구식 정보여서 올바른 정보를 얻지 못하는 경우도 왕왕 있습니다. 그럴 땐 끝없는 구글링만이 유일한 해결책입니다. 아니면 해당 익스텐션 공식 페이지의 토론 페이지나 스택오버플로 등 전문 QnA 사이트에 직접 영어로 질문을 올려 답변이 올라오기를 기다리든지 말이지요.

이런저런 이유로 근 800개에 이르는 익스텐션을 한번에 설치한다는 것은 거의 불가능합니다. 물론 굳이 꼭 해야겠다고 마음먹고 매달리면 못할 것은 없겠지만 그러기에는 포기해야할 기회비용이 너무나 큽니다.

따라서 다시금 말씀드립니다만 익스텐션의 통합 설치는 하지 마시고 그냥 필요 익스텐션을 검색하여 개별적으로 설치하시기를 바랍니다.

익스텐션 다운로드 URL 활용

위 내용은 미디어위키 공식 사이트 안의 익스텐션 배포 페이지에 등록된 익스텐션 각각의 공개 URL 주소입니다. 1.31 기준으로 Git에는 780개가 등록되어 있지만 익스텐션 배포 페이지에는 753개만 공개되어 있습니다.

위 내용 그대로 문서를 생성하여 한번에 다운받습니다. 저는 ~/다운로드/mediawiki/extensions/REL1_32 디렉토리 안에 mw_extensions_01.txt 라는 파일로 저장했습니다.

study@study-VirtualBox:~/다운로드/mediawiki/extensions/REL1_32$ wget -i mw_extensions_01.txt

위 코드를 사용하면 해당 파일이 존재하는 디렉토리에 익스텐션 압축 파일들이 다운됩니다.

참고로 '# 익스텐션명'은 미디어위키 해당 버전 또는 브랜치를 지원하지 않은 익스텐션들입니다. 제가 일일이 확인하여 미지원 익스텐션을 적어 놓은 것입니다.

http://나 https://, ftp:// 등으로 시작하지 않기 때문에 해당 줄은 wget이 아래와 같이 오류를 출력하며 건너뛰게 됩니다.

study@study-VirtualBox:~/다운로드/mediawiki/extensions/REL1_32$ wget -i mw_extensions_01.txt
mw_extensions_01.txt: Invalid URL http://## 기본 제공 익스텐션 ##: Invalid host name
mw_extensions_01.txt: Invalid URL http://## 추가 설치 익스텐션 ##: Invalid host name
mw_extensions_01.txt: Invalid URL http://# AnonPrivacy: Invalid host name
mw_extensions_01.txt: Invalid URL http://# ArticleMetaDescription: Invalid host name
mw_extensions_01.txt: Invalid URL http://# AuthenticatedKeyValueStore: Invalid host name
mw_extensions_01.txt: Invalid URL http://## BlueSpice 익스텐션 모음 시작 ##: Invalid host name
mw_extensions_01.txt: Invalid URL http://# BlueSpiceCategoryCheck: Invalid host name
mw_extensions_01.txt: Invalid URL http://# BlueSpiceExpiry: Invalid host name
mw_extensions_01.txt: Invalid URL http://# BlueSpiceExtensions: Invalid host name
mw_extensions_01.txt: Invalid URL http://# BlueSpiceFilterableTables: Invalid host name

... 하략 ....

다운이 완료 후 터미널에서 위와 같이 다운받아진 파일 개수와 걸린 시간 등의 정보를 확인할 수 있습니다.

FINISHED --2019-07-24 15:28:38--
Total wall clock time: 9m 40s
Downloaded: 705 files, 341M in 6m 53s (846 KB/s)
study@study-VirtualBox:~/다운로드/mediawiki/extensions$

완료 후 터미널에 출력된 정보들을 편집 - 모두 선택 - 복사를 한 후 문서 편집 프로그램을 열어 복사한 내용을 붙인 다음 아래의 구문을 검색해줍니다.

response... 404 Not Found

그러면 내려받지 못한 익스텐션 목록을 확인할 수 있습니다.

--2019-07-24 15:25:26--  https://extdist.wmflabs.org/dist/extensions/LDAPAuthentication2-REL1_31-f493308.tar.gz
Reusing existing connection to extdist.wmflabs.org:443.
HTTP request sent, awaiting response... 404 Not Found
2019-07-24 15:25:26 ERROR 404: Not Found.

response... 404 Not Found 문구 두 줄 위를 보면 받지 못한 익스텐션의 파일 경로를 확인할 수 있습니다.

이 익스텐션은 업데이트 등의 이유로 해당 익슽첸션의 파일 이름이 변경된 경우입니다. 그런 경우 미디어위키 익스텐션 배포 페이지에서 검색하여 올바른 주소를 확인해서 내려받으시면 됩니다.

알림

참고로 예시로 든 위 회색 상자  내용 자체는 지난 미디어위키 1.31 공식 지원 익스텐션 통합 설치 게시물에 사용된 것입니다. 그러나 예시로 든 내용과 실제 출력될 내용은 대동소이하므로 이해하시는데 큰 문제는 없을 것입니다.

LocalSettings.php 파일에 익스텐션 등록

위에 상술한 동일 이름의 항목을 참고하시기 바랍니다.

미디어위키 DB update 실행

위에 상술한 동일 이름의 항목을 참고하시기 바랍니다.




앞서 안내해드렸습니다만 이 내용은 이런 것들이 있더라 하는 정도로만 짚고 넘어 가시고 실제로 통합 설치는 하지 않으시기를 바랍니다. 물론 공부삼아 해보시는 것까지는 말리지 않습니다.

위 내용은 제가 현재 연재 기준이 되는 미디어위키 1.31 기반 안내입니다. 미디어위키 1.32와 1.33 용 익스텐션 통합 설치 안내는 내용을 최소한으로 줄일 예정입니다.