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

Git으로 미디어위키(Mediawiki) 1.35 LTS 설치 - 최신 브랜치로 업데이트

씨실과 날실 2021. 5. 30. 09:00

안녕하세요. 씨실과 날실입니다.

3회에 걸쳐 Git을 이용해 미디어위키를 설치하고 버전 관리하는 방법에 대해 연재했었습니다. 그러나 개인적으로는 위키 관리자가 전문 개발자가 아니라면 Git을 통한 미디어위키 관리는 그다지 권하지 않는 편입니다.

그 이유는 Git을 어느 정도 다룰 줄 아는 분이라면 Git이 가져다 주는 버전 관리의 용이성때문에 미디어위키도 Git으로 관리하고자 할 것입니다만 만약 위키 관리자가 Git을 다루기 위한 필요 개념과 기술이 부족하면 버전이 꼬이는 등 여러 문제에 부딪치게 될 수 있기 때문입니다.

게다가 조금 번거롭기만 할 뿐 리눅스 미디어위키 공식 사이트에서 배포하는 Tarball 파일 등 압축 아카이브 파일을 가지고 리눅스 기본 명령과 DB 콘솔의 기본 명령만으로 얼마든지 버전을 관리할 수 있고 또한 이 압축 아카이브를 통한 설치는 각 버전이 각기 독립되어 있기 때문에 문제 발생시 초보자라도 손쉽게 복구할 수 있습니다.

그러나 Git을 통한은 버전은 각 버전이 연계되어 있고 Git 사용법을 숙지하고 있지 않으면 버전 관리가 오히려 어려울 수도 있습니다.

 

그래서 저는 Git을 이용한 미디어위키 버전 관리를 Git 초심자 눈높이에서 미디어위키 버전 관리에 필요한 최소한의 필수 명령만으로 버전 관리하는 방법을 연재했었습니다. 그러나 그것들은 미디어위키가 관리하는 Git 브랜치들 중 어느 정도 안정성을 확인하여 태그를 부여받은 버전들 간 전환을 주로 다룬것이었습니다.

그러나 위키 관리자들 중에는 현재 개발 중인 최신 기술이 적용된 미디어위키를 사용해보거나 사용자들에게 빠르게 선보이고 싶은 분들도 있을 수 있습니다. 만약 기능이 불안정하여 치명적인 문제를 야기하면 Git으로 버전을 되돌리면 문제가 쉽게 해결되므로 위험부담도 덜한 편입니다. 실제로 위키백과 등도 그러 식으로 운영되고 있고 말입니다.

 

그래서 이번에는 아직 태그가 정식으로 부여되지 않은, 현재 개발 중인 wmf-N 브랜치로 업그레이드하는 방법에 대해 적도록 하겠습니다.

 

본문으로 들어가기에 앞서 미디어위키를 실제 서비스로 운영하고자 하는 분들 중 Git을 다룰 줄 모르는 비개발자 분들은 가능하면 버전 관리를 Git이 아닌 공식 배포 Tarball 파일 등을 이용하실 것을 권장드립니다.

리눅스 및 미디어위키 초심자, 비개발자에게는 미디어위키 설치 권장 순서는 아래와 같습니다.

 

1. 미디어위키 공식 사이트에서 배포하는 최신 LTS 버전의 Tarball 압축 파일

2. 미디어위키 공식 사이트에서 배포하는 최신 Stable 버전의 Tarball 압축 파일

3. Git을 이용한 최신 LTS 버전 태그 브랜치 Clone

4. Git을 이용한 최신 Stable 버전 태그 브랜치 Clone

5. Git을 이용한 최신 태그 브랜치 Clone

6. Git을 이용한 비태크 개발 브랜치(wmf-N) Clone 

 


 

미디어위키 설치 디렉터리 이동

study@study-VirtualBox:~$ cd /var/www/html/w
study@study-VirtualBox:/var/www/html/w

미디어위키가 설치된 디렉터리 이동합니다. 물론 Git으로 설치된 미디어위키이어야 합니다.

 

시스템에 기록된 미디어위키 태그 확인

study@study-VirtualBox:/var/www/html/w$ git tag -l | sort -V
1.1.0
1.2.0
1.2.0rc1
1.2.0rc2
1.2.0rc3
1.2.1
1.2.2
1.2.3
1.2.4
1.2.5
1.2.6
1.3.0
1.3.0beta1
1.3.0beta2
1.3.0beta3
1.3.0beta4
1.3.0beta4a
1.3.0beta5
1.3.0beta6
1.3.1
1.3.2
1.3.3
1.3.4
1.3.5
1.3.6
1.3.7
1.3.8
1.3.9
1.3.10
1.3.11
1.3.12
1.3.13
1.3.14
1.3.15
1.3.16
1.3.17
1.3.18
1.4.0
1.4.0beta
1.4.0beta1
1.4.0beta2
1.4.0beta4
1.4.0beta5
1.4.0beta6
1.4.0rc1
1.4.1
1.4.2
1.4.3
1.4.4
1.4.5
1.4.6
1.4.7
1.4.8
1.4.9
1.4.10
1.4.11
1.4.12
1.4.13
1.4.14
1.4.15
1.5.0
1.5.0alpha1
1.5.0alpha2
1.5.0beta1
1.5.0beta2
1.5.0beta3
1.5.0beta4
1.5.0rc1
1.5.0rc2
1.5.1
1.5.2
1.5.3
1.5.4
1.5.5
1.5.6
1.5.7
1.5.8
1.6.0
1.6.1
1.6.2
1.6.3
1.6.4
1.6.5
1.6.6
1.6.7
1.6.8
1.6.9
1.6.10
1.6.11
1.6.12
1.7.0
1.7.1
1.7.2
1.7.3
1.8.0
1.8.1
1.8.2
1.8.3
1.8.4
1.8.5
1.9.0
1.9.0rc1
1.9.0rc2
1.9.1
1.9.2
1.9.3
1.9.4
1.9.5
1.9.6
1.10.0
1.10.0rc1
1.10.0rc2
1.10.1
1.10.2
1.10.3
1.10.4
1.11.0
1.11.0rc1
1.11.1
1.11.2
1.12.0
1.12.0rc1
1.12.1
1.12.2
1.12.3
1.12.4
1.13.0
1.13.0rc1
1.13.0rc2
1.13.1
1.13.2
1.13.3
1.13.4
1.13.5
1.14.0
1.14.0rc1
1.14.1
1.15.0
1.15.0rc1
1.15.1
1.15.2
1.15.3
1.15.4
1.15.5
1.16.0
1.16.0beta1
1.16.0beta2
1.16.0beta3
1.16.1
1.16.2
1.16.3
1.16.4
1.16.5
1.17.0
1.17.0beta1
1.17.0rc1
1.17.1
1.17.2
1.17.3
1.17.4
1.17.5
1.18.0
1.18.0beta1
1.18.0rc1
1.18.1
1.18.2
1.18.3
1.18.4
1.18.5
1.18.6
1.19.0
1.19.0beta1
1.19.0beta2
1.19.0rc1
1.19.1
1.19.2
1.19.3
1.19.4
1.19.5
1.19.6
1.19.7
1.19.8
1.19.9
1.19.10
1.19.11
1.19.12
1.19.13
1.19.14
1.19.15
1.19.16
1.19.17
1.19.18
1.19.19
1.19.20
1.19.21
1.19.22
1.19.23
1.19.24
1.20.0
1.20.0rc1
1.20.0rc2
1.20.1
1.20.2
1.20.3
1.20.4
1.20.5
1.20.6
1.20.7
1.20.8
1.21.0
1.21.1
1.21.2
1.21.3
1.21.4
1.21.5
1.21.6
1.21.7
1.21.8
1.21.9
1.21.10
1.21.11
1.22.0
1.22.0rc0
1.22.0rc1
1.22.0rc2
1.22.0rc3
1.22.0rc-FINAL
1.22.1
1.22.2
1.22.3
1.22.4
1.22.5
1.22.6
1.22.7
1.22.8
1.22.9
1.22.10
1.22.11
1.22.12
1.22.13
1.22.14
1.22.15
1.23.0
1.23.0rc0
1.23.0-rc.1
1.23.0-rc.2
1.23.0-rc.3
1.23.1
1.23.2
1.23.3
1.23.4
1.23.5
1.23.6
1.23.7
1.23.8
1.23.9
1.23.10
1.23.11
1.23.12
1.23.13
1.23.14
1.23.15
1.23.16
1.23.17
1.24.0
1.24.0-rc.0
1.24.0-rc.1
1.24.0-rc.2
1.24.0-rc.3
1.24.1
1.24.2
1.24.3
1.24.4
1.24.5
1.24.6
1.25.0
1.25.0-rc.0
1.25.1
1.25.2
1.25.3
1.25.4
1.25.5
1.25.6
1.26.0
1.26.1
1.26.2
1.26.3
1.26.4
1.27.0
1.27.0-rc.0
1.27.0-rc.1
1.27.1
1.27.2
1.27.3
1.27.4
1.27.5
1.27.6
1.27.7
1.28.0
1.28.0-rc.0
1.28.0-rc.1
1.28.1
1.28.2
1.28.3
1.29.0
1.29.0-rc.0
1.29.0-rc.1
1.29.1
1.29.2
1.29.3
1.30.0
1.30.0-rc.0
1.30.1
1.30.2
1.31.0
1.31.0-rc.0
1.31.0-rc.1
1.31.0-rc.2
1.31.1
1.31.2
1.31.3
1.31.4
1.31.5
1.31.6
1.31.7
1.31.8
1.31.9
1.31.10
1.31.11
1.31.12
1.31.13
1.31.14
1.32.0
1.32.0-rc.0
1.32.0-rc.1
1.32.0-rc.2
1.32.1
1.32.2
1.32.3
1.32.4
1.32.5
1.32.6
1.33.0
1.33.0-rc.0
1.33.1
1.33.2
1.33.3
1.33.4
1.34.0
1.34.0-rc.0
1.34.0-rc.1
1.34.1
1.34.2
1.34.3
1.34.4
1.35.0
1.35.0-rc.0
1.35.0-rc.1
1.35.0-rc.2
1.35.0-rc.3
1.35.1
1.35.2
1.36.0-rc.0
wmf-1.36.0-wmf.31-testing
study@study-VirtualBox:/var/www/html/w$ 

Git으로 미디어위키를 설치 한 후 미디어위키 개발 브랜치들 중 지금까지 사용된 태그들 목록입니다.

위에서 보듯 정말 많은 태그들을 확인할 수 있습니다. 이것만 보더라도 미디어위키 개발의 장구한 역사를 엿볼 수 있습니다. 그러나 실제로 사용자가 이용할 수 있는 태그는 얼마 되지 않습니다.  

 

미디어위키 로컬 저장소에서 사용 가능한 브랜치 확인

study@study-VirtualBox:/var/www/html/w$ git branch -r
  origin/HEAD -> origin/master
  origin/REL1_23
  origin/REL1_25
  origin/REL1_26
  origin/REL1_27
  origin/REL1_28
  origin/REL1_29
  origin/REL1_30
  origin/REL1_31
  origin/REL1_32
  origin/REL1_33
  origin/REL1_34
  origin/REL1_35
  origin/REL1_36
  origin/fundraising/REL1_27
  origin/fundraising/REL1_31
  origin/fundraising/REL1_35
  origin/master
  origin/wmf/1.36.0-wmf.31
  origin/wmf/1.36.0-wmf.32
  origin/wmf/1.36.0-wmf.33
  origin/wmf/1.36.0-wmf.34
  origin/wmf/1.36.0-wmf.35
  origin/wmf/1.36.0-wmf.36
  origin/wmf/1.36.0-wmf.37
  origin/wmf/1.36.0-wmf.38
  origin/wmf/1.37.0-wmf.1
  origin/wmf/1.37.0-wmf.2
  origin/wmf/1.37.0-wmf.3
study@study-VirtualBox:/var/www/html/w$ 

미디어위키 로컬 저장소는 Git으로 미디어위키가 설치된디렉터리를 말합니다. 시스템에서 사용할 수 있는 브랜치를 확인할 수 있습니다.

 

미디어위키 Git 저장소 최신 변경사항 가져와 병합하기

study@study-VirtualBox:/var/www/html/w$ sudo git pull
[sudo] study의 암호: 
remote: Counting objects: 2599, done
remote: Finding sources: 100% (6025/6025)
remote: Getting sizes: 100% (845/845)
remote: Compressing objects: 100% (2705984/2705984)
remote: Total 6025 (delta 4484), reused 5622 (delta 4256)
오브젝트를 받는 중: 100% (6025/6025), 6.47 MiB | 4.17 MiB/s, 완료.
델타를 알아내는 중: 100% (4484/4484), 로컬 오브젝트 818개 마침.
https://gerrit.wikimedia.org/r/mediawiki/core URL에서
   7b0ec17625..a3d2726bfd  REL1_31             -> origin/REL1_31
   37d6652145..9aa9950256  REL1_35             -> origin/REL1_35
   589fa3c5ba..19912dad7f  REL1_36             -> origin/REL1_36
   70ea526e9e..4b33035dd7  fundraising/REL1_31 -> origin/fundraising/REL1_31
   d449599540..8d4342c9da  fundraising/REL1_35 -> origin/fundraising/REL1_35
   3e71293b80..4444264dfe  master              -> origin/master
   e18b40c705..0d3c383b78  wmf/1.37.0-wmf.3    -> origin/wmf/1.37.0-wmf.3
 * [새로운 브랜치]         wmf/1.37.0-wmf.4    -> origin/wmf/1.37.0-wmf.4
 * [새로운 브랜치]         wmf/1.37.0-wmf.5    -> origin/wmf/1.37.0-wmf.5
 * [새로운 브랜치]         wmf/1.37.0-wmf.6    -> origin/wmf/1.37.0-wmf.6
 * [새로운 브랜치]         wmf/1.37.0-wmf.7    -> origin/wmf/1.37.0-wmf.7
 * [새로운 태그]           1.36.0              -> 1.36.0
Fetching submodule extensions/CategoryTree
https://gerrit.wikimedia.org/r/mediawiki/extensions/CategoryTree URL에서
   6933f5b..dc1a8bd  REL1_31          -> origin/REL1_31
   6a69f1a..67d9b60  REL1_35          -> origin/REL1_35
   7dbedfd..03489fc  REL1_36          -> origin/REL1_36
   9db8af8..be05304  master           -> origin/master
 * [새로운 브랜치]   wmf/1.37.0-wmf.4 -> origin/wmf/1.37.0-wmf.4
 * [새로운 브랜치]   wmf/1.37.0-wmf.5 -> origin/wmf/1.37.0-wmf.5
 * [새로운 브랜치]   wmf/1.37.0-wmf.6 -> origin/wmf/1.37.0-wmf.6
 * [새로운 브랜치]   wmf/1.37.0-wmf.7 -> origin/wmf/1.37.0-wmf.7
Fetching submodule extensions/Cite
https://gerrit.wikimedia.org/r/mediawiki/extensions/Cite URL에서
   db249bae..ad2fabcc  REL1_31          -> origin/REL1_31
   bc16b052..edba6489  REL1_35          -> origin/REL1_35
   d8504ae7..19564400  REL1_36          -> origin/REL1_36
   9fa1a9cb..d65b9a62  master           -> origin/master
 * [새로운 브랜치]     wmf/1.37.0-wmf.4 -> origin/wmf/1.37.0-wmf.4
 * [새로운 브랜치]     wmf/1.37.0-wmf.5 -> origin/wmf/1.37.0-wmf.5
 * [새로운 브랜치]     wmf/1.37.0-wmf.6 -> origin/wmf/1.37.0-wmf.6
 * [새로운 브랜치]     wmf/1.37.0-wmf.7 -> origin/wmf/1.37.0-wmf.7
Fetching submodule extensions/CiteThisPage
https://gerrit.wikimedia.org/r/mediawiki/extensions/CiteThisPage URL에서
   1b8edf2..2344516  REL1_31          -> origin/REL1_31
   8726d12..879a02b  REL1_35          -> origin/REL1_35
   0206f42..9787e8b  REL1_36          -> origin/REL1_36
   066bfd2..49368ee  master           -> origin/master
 * [새로운 브랜치]   wmf/1.37.0-wmf.4 -> origin/wmf/1.37.0-wmf.4
 * [새로운 브랜치]   wmf/1.37.0-wmf.5 -> origin/wmf/1.37.0-wmf.5
 * [새로운 브랜치]   wmf/1.37.0-wmf.6 -> origin/wmf/1.37.0-wmf.6
 * [새로운 브랜치]   wmf/1.37.0-wmf.7 -> origin/wmf/1.37.0-wmf.7
Fetching submodule extensions/CodeEditor
https://gerrit.wikimedia.org/r/mediawiki/extensions/CodeEditor URL에서
   4203f2b..f042563  REL1_31          -> origin/REL1_31
   1fafe27..e5e6e92  REL1_35          -> origin/REL1_35
   fbce328..5eda98c  REL1_36          -> origin/REL1_36
   c93bb53..669c6a8  master           -> origin/master
 * [새로운 브랜치]   wmf/1.37.0-wmf.4 -> origin/wmf/1.37.0-wmf.4
 * [새로운 브랜치]   wmf/1.37.0-wmf.5 -> origin/wmf/1.37.0-wmf.5
 * [새로운 브랜치]   wmf/1.37.0-wmf.6 -> origin/wmf/1.37.0-wmf.6
 * [새로운 브랜치]   wmf/1.37.0-wmf.7 -> origin/wmf/1.37.0-wmf.7
Fetching submodule extensions/ConfirmEdit
https://gerrit.wikimedia.org/r/mediawiki/extensions/ConfirmEdit URL에서
   65f3476..c840001  REL1_31          -> origin/REL1_31
   2c4f3dd..a9b47a6  REL1_35          -> origin/REL1_35
   7850e41..a0ff82b  REL1_36          -> origin/REL1_36
   59c0ede..90f63d8  master           -> origin/master
 * [새로운 브랜치]   wmf/1.37.0-wmf.4 -> origin/wmf/1.37.0-wmf.4
 * [새로운 브랜치]   wmf/1.37.0-wmf.5 -> origin/wmf/1.37.0-wmf.5
 * [새로운 브랜치]   wmf/1.37.0-wmf.6 -> origin/wmf/1.37.0-wmf.6
 * [새로운 브랜치]   wmf/1.37.0-wmf.7 -> origin/wmf/1.37.0-wmf.7
Fetching submodule extensions/Gadgets
https://gerrit.wikimedia.org/r/mediawiki/extensions/Gadgets URL에서
   7ab92a1..24eef4a  REL1_31          -> origin/REL1_31
   1e54c80..8f6007d  REL1_35          -> origin/REL1_35
   169f4ec..d3f83b9  REL1_36          -> origin/REL1_36
   d26b18a..70579af  master           -> origin/master
 * [새로운 브랜치]   wmf/1.37.0-wmf.4 -> origin/wmf/1.37.0-wmf.4
 * [새로운 브랜치]   wmf/1.37.0-wmf.5 -> origin/wmf/1.37.0-wmf.5
 * [새로운 브랜치]   wmf/1.37.0-wmf.6 -> origin/wmf/1.37.0-wmf.6
 * [새로운 브랜치]   wmf/1.37.0-wmf.7 -> origin/wmf/1.37.0-wmf.7
Fetching submodule extensions/ImageMap
https://gerrit.wikimedia.org/r/mediawiki/extensions/ImageMap URL에서
   4a45ba4..ccffa6d  REL1_31          -> origin/REL1_31
   c3d5c10..f67149a  REL1_35          -> origin/REL1_35
   5232151..966287e  REL1_36          -> origin/REL1_36
   09017c0..a75210b  master           -> origin/master
 * [새로운 브랜치]   wmf/1.37.0-wmf.4 -> origin/wmf/1.37.0-wmf.4
 * [새로운 브랜치]   wmf/1.37.0-wmf.5 -> origin/wmf/1.37.0-wmf.5
 * [새로운 브랜치]   wmf/1.37.0-wmf.6 -> origin/wmf/1.37.0-wmf.6
 * [새로운 브랜치]   wmf/1.37.0-wmf.7 -> origin/wmf/1.37.0-wmf.7
Fetching submodule extensions/InputBox
https://gerrit.wikimedia.org/r/mediawiki/extensions/InputBox URL에서
   2ab0a14..2ea4d29  REL1_31          -> origin/REL1_31
   68d995b..7a55253  REL1_35          -> origin/REL1_35
   267a78f..162ad25  REL1_36          -> origin/REL1_36
   31db12d..64ffd94  master           -> origin/master
 * [새로운 브랜치]   wmf/1.37.0-wmf.4 -> origin/wmf/1.37.0-wmf.4
 * [새로운 브랜치]   wmf/1.37.0-wmf.5 -> origin/wmf/1.37.0-wmf.5
 * [새로운 브랜치]   wmf/1.37.0-wmf.6 -> origin/wmf/1.37.0-wmf.6
 * [새로운 브랜치]   wmf/1.37.0-wmf.7 -> origin/wmf/1.37.0-wmf.7
Fetching submodule extensions/Interwiki
https://gerrit.wikimedia.org/r/mediawiki/extensions/Interwiki URL에서
   718e96a..a97dff0  REL1_31          -> origin/REL1_31
   224d4be..cb13bbd  REL1_35          -> origin/REL1_35
   88dc5ec..38ddf24  REL1_36          -> origin/REL1_36
   ba2da4c..0a6062d  master           -> origin/master
 * [새로운 브랜치]   wmf/1.37.0-wmf.4 -> origin/wmf/1.37.0-wmf.4
 * [새로운 브랜치]   wmf/1.37.0-wmf.5 -> origin/wmf/1.37.0-wmf.5
 * [새로운 브랜치]   wmf/1.37.0-wmf.6 -> origin/wmf/1.37.0-wmf.6
 * [새로운 브랜치]   wmf/1.37.0-wmf.7 -> origin/wmf/1.37.0-wmf.7
Fetching submodule extensions/LocalisationUpdate
https://gerrit.wikimedia.org/r/mediawiki/extensions/LocalisationUpdate URL에서
   ac299fe..2e60a93  REL1_31          -> origin/REL1_31
   49cb280..a485c7a  REL1_35          -> origin/REL1_35
   7fc5f07..e2554a4  REL1_36          -> origin/REL1_36
   ceecb0a..1de74e1  master           -> origin/master
 * [새로운 브랜치]   wmf/1.37.0-wmf.4 -> origin/wmf/1.37.0-wmf.4
 * [새로운 브랜치]   wmf/1.37.0-wmf.5 -> origin/wmf/1.37.0-wmf.5
 * [새로운 브랜치]   wmf/1.37.0-wmf.6 -> origin/wmf/1.37.0-wmf.6
 * [새로운 브랜치]   wmf/1.37.0-wmf.7 -> origin/wmf/1.37.0-wmf.7
Fetching submodule extensions/MultimediaViewer
https://gerrit.wikimedia.org/r/mediawiki/extensions/MultimediaViewer URL에서
   69713623..4b9eeba7  REL1_31          -> origin/REL1_31
   4b3219b6..f0de2f8a  REL1_35          -> origin/REL1_35
   4aa866ae..1186602d  REL1_36          -> origin/REL1_36
   9c4f4cc4..2eafded6  master           -> origin/master
 * [새로운 브랜치]     wmf/1.37.0-wmf.4 -> origin/wmf/1.37.0-wmf.4
 * [새로운 브랜치]     wmf/1.37.0-wmf.5 -> origin/wmf/1.37.0-wmf.5
 * [새로운 브랜치]     wmf/1.37.0-wmf.6 -> origin/wmf/1.37.0-wmf.6
 * [새로운 브랜치]     wmf/1.37.0-wmf.7 -> origin/wmf/1.37.0-wmf.7
Fetching submodule extensions/Nuke
https://gerrit.wikimedia.org/r/mediawiki/extensions/Nuke URL에서
   5147db3..e1050d7  REL1_31          -> origin/REL1_31
   3de3b0f..41d816e  REL1_35          -> origin/REL1_35
   e79b52e..36ff776  REL1_36          -> origin/REL1_36
   94cd013..e664bfe  master           -> origin/master
 * [새로운 브랜치]   wmf/1.37.0-wmf.4 -> origin/wmf/1.37.0-wmf.4
 * [새로운 브랜치]   wmf/1.37.0-wmf.5 -> origin/wmf/1.37.0-wmf.5
 * [새로운 브랜치]   wmf/1.37.0-wmf.6 -> origin/wmf/1.37.0-wmf.6
 * [새로운 브랜치]   wmf/1.37.0-wmf.7 -> origin/wmf/1.37.0-wmf.7
Fetching submodule extensions/OATHAuth
https://gerrit.wikimedia.org/r/mediawiki/extensions/OATHAuth URL에서
   b11fea3..f65e5f9  REL1_31          -> origin/REL1_31
   2479f52..72fb823  REL1_35          -> origin/REL1_35
   9bb97a9..fbba3db  REL1_36          -> origin/REL1_36
   9e83c73..b569d0a  master           -> origin/master
 * [새로운 브랜치]   wmf/1.37.0-wmf.4 -> origin/wmf/1.37.0-wmf.4
 * [새로운 브랜치]   wmf/1.37.0-wmf.5 -> origin/wmf/1.37.0-wmf.5
 * [새로운 브랜치]   wmf/1.37.0-wmf.6 -> origin/wmf/1.37.0-wmf.6
 * [새로운 브랜치]   wmf/1.37.0-wmf.7 -> origin/wmf/1.37.0-wmf.7
Fetching submodule extensions/PageImages
https://gerrit.wikimedia.org/r/mediawiki/extensions/PageImages URL에서
   08fef09..3a02c20  REL1_31          -> origin/REL1_31
   9a2f95e..ee6dbda  REL1_35          -> origin/REL1_35
   36d64ba..d67d2e8  REL1_36          -> origin/REL1_36
   3bb61ff..742d4fb  master           -> origin/master
 * [새로운 브랜치]   wmf/1.37.0-wmf.4 -> origin/wmf/1.37.0-wmf.4
 * [새로운 브랜치]   wmf/1.37.0-wmf.5 -> origin/wmf/1.37.0-wmf.5
 * [새로운 브랜치]   wmf/1.37.0-wmf.6 -> origin/wmf/1.37.0-wmf.6
 * [새로운 브랜치]   wmf/1.37.0-wmf.7 -> origin/wmf/1.37.0-wmf.7
Fetching submodule extensions/ParserFunctions
https://gerrit.wikimedia.org/r/mediawiki/extensions/ParserFunctions URL에서
   9541d89..d78dbdc  REL1_31          -> origin/REL1_31
   59a9135..bb4c9d2  REL1_35          -> origin/REL1_35
   4e072b2..d999660  REL1_36          -> origin/REL1_36
   e2d601f..7d1c0ea  master           -> origin/master
 * [새로운 브랜치]   wmf/1.37.0-wmf.4 -> origin/wmf/1.37.0-wmf.4
 * [새로운 브랜치]   wmf/1.37.0-wmf.5 -> origin/wmf/1.37.0-wmf.5
 * [새로운 브랜치]   wmf/1.37.0-wmf.6 -> origin/wmf/1.37.0-wmf.6
 * [새로운 브랜치]   wmf/1.37.0-wmf.7 -> origin/wmf/1.37.0-wmf.7
Fetching submodule extensions/PdfHandler
https://gerrit.wikimedia.org/r/mediawiki/extensions/PdfHandler URL에서
   491f057..151d887  REL1_31          -> origin/REL1_31
   8b39cdd..113dc8b  REL1_35          -> origin/REL1_35
   42afa92..c9705a8  REL1_36          -> origin/REL1_36
   a748147..5073f57  master           -> origin/master
 * [새로운 브랜치]   wmf/1.37.0-wmf.4 -> origin/wmf/1.37.0-wmf.4
 * [새로운 브랜치]   wmf/1.37.0-wmf.5 -> origin/wmf/1.37.0-wmf.5
 * [새로운 브랜치]   wmf/1.37.0-wmf.6 -> origin/wmf/1.37.0-wmf.6
 * [새로운 브랜치]   wmf/1.37.0-wmf.7 -> origin/wmf/1.37.0-wmf.7
Fetching submodule extensions/Poem
https://gerrit.wikimedia.org/r/mediawiki/extensions/Poem URL에서
   48f4b1d..a8e452f  REL1_31          -> origin/REL1_31
   447d8b7..6d76cdd  REL1_35          -> origin/REL1_35
   69e0951..1f53edb  REL1_36          -> origin/REL1_36
   9d4e2b7..f7b1d02  master           -> origin/master
 * [새로운 브랜치]   wmf/1.37.0-wmf.4 -> origin/wmf/1.37.0-wmf.4
 * [새로운 브랜치]   wmf/1.37.0-wmf.5 -> origin/wmf/1.37.0-wmf.5
 * [새로운 브랜치]   wmf/1.37.0-wmf.6 -> origin/wmf/1.37.0-wmf.6
 * [새로운 브랜치]   wmf/1.37.0-wmf.7 -> origin/wmf/1.37.0-wmf.7
Fetching submodule extensions/Renameuser
https://gerrit.wikimedia.org/r/mediawiki/extensions/Renameuser URL에서
   e92f315..567baf4  REL1_31          -> origin/REL1_31
   2860556..fe4e1fc  REL1_35          -> origin/REL1_35
   0e223b3..2ec2de9  REL1_36          -> origin/REL1_36
   3e194a0..f555edd  master           -> origin/master
 * [새로운 브랜치]   wmf/1.37.0-wmf.4 -> origin/wmf/1.37.0-wmf.4
 * [새로운 브랜치]   wmf/1.37.0-wmf.5 -> origin/wmf/1.37.0-wmf.5
 * [새로운 브랜치]   wmf/1.37.0-wmf.6 -> origin/wmf/1.37.0-wmf.6
 * [새로운 브랜치]   wmf/1.37.0-wmf.7 -> origin/wmf/1.37.0-wmf.7
Fetching submodule extensions/ReplaceText
https://gerrit.wikimedia.org/r/mediawiki/extensions/ReplaceText URL에서
   be197b8..e59e331  REL1_31    -> origin/REL1_31
   feb8a9c..7c4fbd1  REL1_35    -> origin/REL1_35
   d078860..98a317e  REL1_36    -> origin/REL1_36
   84c803f..88f82c9  master     -> origin/master
Fetching submodule extensions/Scribunto
https://gerrit.wikimedia.org/r/mediawiki/extensions/Scribunto URL에서
   2b2a2c9..15f6ad9  REL1_31          -> origin/REL1_31
   d21b655..8119592  REL1_35          -> origin/REL1_35
   695f2cd..4044520  REL1_36          -> origin/REL1_36
   ca2c778..57a5e5c  master           -> origin/master
 * [새로운 브랜치]   wmf/1.37.0-wmf.4 -> origin/wmf/1.37.0-wmf.4
 * [새로운 브랜치]   wmf/1.37.0-wmf.5 -> origin/wmf/1.37.0-wmf.5
 * [새로운 브랜치]   wmf/1.37.0-wmf.6 -> origin/wmf/1.37.0-wmf.6
 * [새로운 브랜치]   wmf/1.37.0-wmf.7 -> origin/wmf/1.37.0-wmf.7
Fetching submodule extensions/SecureLinkFixer
https://gerrit.wikimedia.org/r/mediawiki/extensions/SecureLinkFixer URL에서
   47f1267..e03db2a  REL1_35          -> origin/REL1_35
   33f71ca..b7c00c2  REL1_36          -> origin/REL1_36
   377aed0..da1cce8  master           -> origin/master
 * [새로운 브랜치]   wmf/1.37.0-wmf.4 -> origin/wmf/1.37.0-wmf.4
 * [새로운 브랜치]   wmf/1.37.0-wmf.5 -> origin/wmf/1.37.0-wmf.5
 * [새로운 브랜치]   wmf/1.37.0-wmf.6 -> origin/wmf/1.37.0-wmf.6
 * [새로운 브랜치]   wmf/1.37.0-wmf.7 -> origin/wmf/1.37.0-wmf.7
Fetching submodule extensions/SpamBlacklist
https://gerrit.wikimedia.org/r/mediawiki/extensions/SpamBlacklist URL에서
   793c8f1..cd0ae6b  REL1_31          -> origin/REL1_31
   8985313..b2e16d6  REL1_35          -> origin/REL1_35
   7b1d5ed..cc5b10a  REL1_36          -> origin/REL1_36
   b0d900e..2133946  master           -> origin/master
 * [새로운 브랜치]   wmf/1.37.0-wmf.4 -> origin/wmf/1.37.0-wmf.4
 * [새로운 브랜치]   wmf/1.37.0-wmf.5 -> origin/wmf/1.37.0-wmf.5
 * [새로운 브랜치]   wmf/1.37.0-wmf.6 -> origin/wmf/1.37.0-wmf.6
 * [새로운 브랜치]   wmf/1.37.0-wmf.7 -> origin/wmf/1.37.0-wmf.7
Fetching submodule extensions/SyntaxHighlight_GeSHi
https://gerrit.wikimedia.org/r/mediawiki/extensions/SyntaxHighlight_GeSHi URL에서
   f0dca73..c760872  REL1_31          -> origin/REL1_31
   0e4cce6..33d7b70  REL1_35          -> origin/REL1_35
   37379a2..17c2d64  REL1_36          -> origin/REL1_36
   9497613..d3267c4  master           -> origin/master
 * [새로운 브랜치]   wmf/1.37.0-wmf.4 -> origin/wmf/1.37.0-wmf.4
 * [새로운 브랜치]   wmf/1.37.0-wmf.5 -> origin/wmf/1.37.0-wmf.5
 * [새로운 브랜치]   wmf/1.37.0-wmf.6 -> origin/wmf/1.37.0-wmf.6
 * [새로운 브랜치]   wmf/1.37.0-wmf.7 -> origin/wmf/1.37.0-wmf.7
Fetching submodule extensions/TemplateData
https://gerrit.wikimedia.org/r/mediawiki/extensions/TemplateData URL에서
   0bf2ec0..6d21a36  REL1_31          -> origin/REL1_31
   ba41c7d..6e64a36  REL1_35          -> origin/REL1_35
   fef102d..48fa7e1  REL1_36          -> origin/REL1_36
   5761506..56f9d8d  master           -> origin/master
 * [새로운 브랜치]   wmf/1.37.0-wmf.4 -> origin/wmf/1.37.0-wmf.4
 * [새로운 브랜치]   wmf/1.37.0-wmf.5 -> origin/wmf/1.37.0-wmf.5
 * [새로운 브랜치]   wmf/1.37.0-wmf.6 -> origin/wmf/1.37.0-wmf.6
 * [새로운 브랜치]   wmf/1.37.0-wmf.7 -> origin/wmf/1.37.0-wmf.7
Fetching submodule extensions/TextExtracts
https://gerrit.wikimedia.org/r/mediawiki/extensions/TextExtracts URL에서
   7ee366d..1d1e2c5  REL1_31          -> origin/REL1_31
   4a617d3..b97d859  REL1_35          -> origin/REL1_35
   d7f93f5..f079431  REL1_36          -> origin/REL1_36
   ee5427f..7a3af1d  master           -> origin/master
 * [새로운 브랜치]   wmf/1.37.0-wmf.4 -> origin/wmf/1.37.0-wmf.4
 * [새로운 브랜치]   wmf/1.37.0-wmf.5 -> origin/wmf/1.37.0-wmf.5
 * [새로운 브랜치]   wmf/1.37.0-wmf.6 -> origin/wmf/1.37.0-wmf.6
 * [새로운 브랜치]   wmf/1.37.0-wmf.7 -> origin/wmf/1.37.0-wmf.7
Fetching submodule extensions/TitleBlacklist
https://gerrit.wikimedia.org/r/mediawiki/extensions/TitleBlacklist URL에서
   a3124b6..dea6e69  REL1_31          -> origin/REL1_31
   c8a0844..6c7c0ef  REL1_35          -> origin/REL1_35
   42dcaca..67533b2  REL1_36          -> origin/REL1_36
   b4ceaba..5bccd20  master           -> origin/master
 * [새로운 브랜치]   wmf/1.37.0-wmf.4 -> origin/wmf/1.37.0-wmf.4
 * [새로운 브랜치]   wmf/1.37.0-wmf.5 -> origin/wmf/1.37.0-wmf.5
 * [새로운 브랜치]   wmf/1.37.0-wmf.6 -> origin/wmf/1.37.0-wmf.6
 * [새로운 브랜치]   wmf/1.37.0-wmf.7 -> origin/wmf/1.37.0-wmf.7
Fetching submodule extensions/VisualEditor
https://gerrit.wikimedia.org/r/mediawiki/extensions/VisualEditor URL에서
   93dbd12a6..9fa4f9f8c  REL1_31          -> origin/REL1_31
   c16410ff6..11eeeba20  REL1_35          -> origin/REL1_35
   09aed3b20..64b7bb319  REL1_36          -> origin/REL1_36
   887857069..243701a52  master           -> origin/master
 * [새로운 브랜치]       wmf/1.37.0-wmf.4 -> origin/wmf/1.37.0-wmf.4
 * [새로운 브랜치]       wmf/1.37.0-wmf.5 -> origin/wmf/1.37.0-wmf.5
 * [새로운 브랜치]       wmf/1.37.0-wmf.6 -> origin/wmf/1.37.0-wmf.6
 * [새로운 브랜치]       wmf/1.37.0-wmf.7 -> origin/wmf/1.37.0-wmf.7
Fetching submodule extensions/VisualEditor/lib/ve
https://gerrit.wikimedia.org/r/VisualEditor/VisualEditor URL에서
   504e7d258..5695586df  REL1_35          -> origin/REL1_35
   5866b762f..4a5ebddd8  master           -> origin/master
 * [새로운 브랜치]       wmf/1.37.0-wmf.4 -> origin/wmf/1.37.0-wmf.4
 * [새로운 브랜치]       wmf/1.37.0-wmf.5 -> origin/wmf/1.37.0-wmf.5
 * [새로운 브랜치]       wmf/1.37.0-wmf.6 -> origin/wmf/1.37.0-wmf.6
 * [새로운 브랜치]       wmf/1.37.0-wmf.7 -> origin/wmf/1.37.0-wmf.7
Fetching submodule extensions/WikiEditor
https://gerrit.wikimedia.org/r/mediawiki/extensions/WikiEditor URL에서
   b5647a7..eb26cb3  REL1_31          -> origin/REL1_31
   9bc2d0b..028ffe6  REL1_35          -> origin/REL1_35
   f2f0c57..ad0cde1  REL1_36          -> origin/REL1_36
   c2d73ba..1fc35f7  master           -> origin/master
 * [새로운 브랜치]   wmf/1.37.0-wmf.4 -> origin/wmf/1.37.0-wmf.4
 * [새로운 브랜치]   wmf/1.37.0-wmf.5 -> origin/wmf/1.37.0-wmf.5
 * [새로운 브랜치]   wmf/1.37.0-wmf.6 -> origin/wmf/1.37.0-wmf.6
 * [새로운 브랜치]   wmf/1.37.0-wmf.7 -> origin/wmf/1.37.0-wmf.7
Fetching submodule skins/MonoBook
https://gerrit.wikimedia.org/r/mediawiki/skins/MonoBook URL에서
   c3f80c4..d74a5d0  REL1_31          -> origin/REL1_31
   3a638f6..a667b25  REL1_35          -> origin/REL1_35
   2f2b16b..ee4c89a  REL1_36          -> origin/REL1_36
   7597397..7a0634c  master           -> origin/master
 * [새로운 브랜치]   wmf/1.37.0-wmf.4 -> origin/wmf/1.37.0-wmf.4
 * [새로운 브랜치]   wmf/1.37.0-wmf.5 -> origin/wmf/1.37.0-wmf.5
 * [새로운 브랜치]   wmf/1.37.0-wmf.6 -> origin/wmf/1.37.0-wmf.6
 * [새로운 브랜치]   wmf/1.37.0-wmf.7 -> origin/wmf/1.37.0-wmf.7
Fetching submodule skins/Timeless
https://gerrit.wikimedia.org/r/mediawiki/skins/Timeless URL에서
   f902346..3f20042  REL1_31          -> origin/REL1_31
   c2b39e7..fe0cdbd  REL1_35          -> origin/REL1_35
   7651929..daaaade  REL1_36          -> origin/REL1_36
   26cd919..f957776  master           -> origin/master
 * [새로운 브랜치]   wmf/1.37.0-wmf.4 -> origin/wmf/1.37.0-wmf.4
 * [새로운 브랜치]   wmf/1.37.0-wmf.5 -> origin/wmf/1.37.0-wmf.5
 * [새로운 브랜치]   wmf/1.37.0-wmf.6 -> origin/wmf/1.37.0-wmf.6
 * [새로운 브랜치]   wmf/1.37.0-wmf.7 -> origin/wmf/1.37.0-wmf.7
Fetching submodule skins/Vector
https://gerrit.wikimedia.org/r/mediawiki/skins/Vector URL에서
   06292be..299cdce  REL1_31          -> origin/REL1_31
   37d7761..1b03baf  REL1_35          -> origin/REL1_35
   14e9de9..58c4c8c  REL1_36          -> origin/REL1_36
   70e61db..cf7657c  master           -> origin/master
 * [새로운 브랜치]   wmf/1.37.0-wmf.4 -> origin/wmf/1.37.0-wmf.4
 * [새로운 브랜치]   wmf/1.37.0-wmf.5 -> origin/wmf/1.37.0-wmf.5
 * [새로운 브랜치]   wmf/1.37.0-wmf.6 -> origin/wmf/1.37.0-wmf.6
 * [새로운 브랜치]   wmf/1.37.0-wmf.7 -> origin/wmf/1.37.0-wmf.7
Fetching submodule vendor
https://gerrit.wikimedia.org/r/mediawiki/vendor URL에서
   8705df6f..091e8c9e  REL1_36             -> origin/REL1_36
   1a095ef4..6a9c0641  fundraising/REL1_35 -> origin/fundraising/REL1_35
   1e54795a..55ebbeac  master              -> origin/master
 * [새로운 브랜치]     wmf/1.37.0-wmf.4    -> origin/wmf/1.37.0-wmf.4
 * [새로운 브랜치]     wmf/1.37.0-wmf.5    -> origin/wmf/1.37.0-wmf.5
 * [새로운 브랜치]     wmf/1.37.0-wmf.6    -> origin/wmf/1.37.0-wmf.6
 * [새로운 브랜치]     wmf/1.37.0-wmf.7    -> origin/wmf/1.37.0-wmf.7
현재 어떤 브랜치 위에도 있지 않습니다.
어떤 브랜치를 대상으로 병합할지 지정하십시오.
자세한 정보는 git-pull(1) 페이지를 참고하십시오.

    git pull <리모트> <브랜치>

study@study-VirtualBox:/var/www/html/w$ 

Git으로 시스템에 미디어위키를 설치한 이후의 미디어위키 원격 Git 저장소 최신 데이터 즉 변경 사항을 git pull 명령을 사용해 끌어와 병합합니다. pull은 fetch와 merge 명령이 함께  이루어집니다.

여기서 현재 1.37.0-wmf.7 브랜치까지 나왔음을 확인할 수 있습니다.

 

시스템에서 사용 가능한 태그 재확인

study@study-VirtualBox:/var/www/html/w$ git tag -l | sort -V
1.1.0
1.2.0

- 중략 -

1.35.1
1.35.2
1.36.0
1.36.0-rc.0
wmf-1.36.0-wmf.31-testing
study@study-VirtualBox:/var/www/html/w$ 

아까 확인 했던 태극 목록과 비교하여 없었던 1.36.0 태그가 추가된 것을 확인할 수 있습니다. rc.N 접미사가 붙이 않은 것을 보아 미디어위키 1.36.0 버전이 공식으로 출시된 것임을 알 수 있습니다. 실제로 미디어위키 공식 사이트에 들어가보면 2021년 5월 28일에 1.36.0 버전이 출시되었음을 확인할 수 있습니다.

이에 대한 보다 자세한 내용은 아래 링클르 참고하시기 바랍니다.

 

최신 개발 브랜치로 체크아웃

study@study-VirtualBox:/var/www/html/w$ sudo git checkout origin/wmf/1.37.0-wmf.7
warning: unable to rmdir 'extensions/ReplaceText': 디렉터리가 비어있지 않음
파일을 갱신합니다: 100% (6039/6039), 완료.
M	extensions/CategoryTree
M	extensions/Cite
M	extensions/CiteThisPage
M	extensions/CodeEditor
M	extensions/ConfirmEdit
M	extensions/Gadgets
M	extensions/ImageMap
M	extensions/InputBox
M	extensions/Interwiki
M	extensions/LocalisationUpdate
M	extensions/MultimediaViewer
M	extensions/Nuke
M	extensions/OATHAuth
M	extensions/PageImages
M	extensions/ParserFunctions
M	extensions/PdfHandler
M	extensions/Poem
M	extensions/Renameuser
M	extensions/Scribunto
M	extensions/SecureLinkFixer
M	extensions/SpamBlacklist
M	extensions/SyntaxHighlight_GeSHi
M	extensions/TemplateData
M	extensions/TextExtracts
M	extensions/TitleBlacklist
M	extensions/VisualEditor
M	extensions/WikiEditor
M	skins/MonoBook
M	skins/Timeless
M	skins/Vector
M	vendor
이전 HEAD 위치는 e5823c068a Prep 1.35.2
HEAD의 현재 위치는 a4faf21254 Update git submodules
study@study-VirtualBox:/var/www/html/w$ 

여기서 우리는 태그가 붙은 안정 버전 브랜치가 아니라 개발 중인 최신 브랜치로 버전을 전환하고자 하므로 아까 확인했던 최신 브랜치 경로로 체크아웃해줍니다.

 

 

warning: unable to rmdir 'extensions/ReplaceText': 디렉터리가 비어있지 않음

태그나 브랜치를 체크아웃하여 버전을 전환하다보면 위와 같이 스킨이나 익스텐션 디렉터리가 비어져 있지 않아 삭제할 수 없다는 문구가 나올 수 있습니다.

이는 전환된 버전의 브랜치에서는 앞으로 배포될 미디어위키 압축 아카이브 파일 안에 해당 스킨이나 익스텐션이 기본 제공  대상으로 선정되지 않았다는 것을 의미합니다.

물론 개발 도중이므로 개발 도중이나 정식으로 출시되었을 때는 다시 포함될 수도 있습니다.

 

미디어위키 하위 모듈 업데이트(체크아웃)

study@study-VirtualBox:/var/www/html/w$ sudo git submodule update --recursive
하위 모듈 경로 'extensions/CategoryTree': 'e2dfe579eb46d83bfbc38323aa57d25180a9b511' 체크아웃
하위 모듈 경로 'extensions/Cite': '3fc9a8d5830aba1d888904904e72649f359f73a3' 체크아웃
하위 모듈 경로 'extensions/CiteThisPage': 'a0502b169950d60bde18a293d4242482684fb161' 체크아웃
하위 모듈 경로 'extensions/CodeEditor': '2e60af23829173d096cfd83febd2455768059f16' 체크아웃
하위 모듈 경로 'extensions/ConfirmEdit': '2b8751a80ed38ad3a3289d4715fa0fb9c9412abc' 체크아웃
하위 모듈 경로 'extensions/Gadgets': '832dc50d6332d31d83cc9c4600f3c6e2725390f9' 체크아웃
하위 모듈 경로 'extensions/ImageMap': '133c6c4210d7a6188368acc9ad957056537a8f66' 체크아웃
하위 모듈 경로 'extensions/InputBox': 'b1decab75c93a25bb5a0902ce8ba8f57bb99223b' 체크아웃
하위 모듈 경로 'extensions/Interwiki': '0be22a84a0de2a8864e5f039db9db5df645ba11c' 체크아웃
하위 모듈 경로 'extensions/LocalisationUpdate': 'e4f5456bbdeccd2f8cc46824512c9d3bcd37738d' 체크아웃
하위 모듈 경로 'extensions/MultimediaViewer': '704b9ee1ad878dcac23e2dae30b4a928aaaa7aa5' 체크아웃
하위 모듈 경로 'extensions/Nuke': '44e88f06d7ad60656aefdc8e7ed831ab5ce59c9d' 체크아웃
하위 모듈 경로 'extensions/OATHAuth': '1e0e25283b108b1eb1fabdda29996b26d9b16565' 체크아웃
하위 모듈 경로 'extensions/PageImages': '3a44c3610d398df62267f846306c82301c408392' 체크아웃
하위 모듈 경로 'extensions/ParserFunctions': '78613a490261e6dd80d9c0f9275aeecd164e2fb8' 체크아웃
하위 모듈 경로 'extensions/PdfHandler': 'd82137564f14ce6593abc24bc3414f3e6a43f079' 체크아웃
하위 모듈 경로 'extensions/Poem': 'fb2de3fee82f4a39f5474ae786d57020ac8398b9' 체크아웃
하위 모듈 경로 'extensions/Renameuser': '70d099830e376f4e8f0f0328620b17c09b8ff233' 체크아웃
하위 모듈 경로 'extensions/Scribunto': 'a87186be139317554da5c9afcafc0ea0f5183d3c' 체크아웃
하위 모듈 경로 'extensions/SecureLinkFixer': 'c3a5665c6c4a55a8f2566252ad0149cef9945d69' 체크아웃
하위 모듈 경로 'extensions/SpamBlacklist': '7735860a7bb7f583d7448f6cbaa6a251760a5451' 체크아웃
하위 모듈 경로 'extensions/SyntaxHighlight_GeSHi': '78641cb7856624acdffc760ec827e34858902a51' 체크아웃
하위 모듈 경로 'extensions/TemplateData': '6820108ebcb8fc8c62ddfe27ce491b4db44c7b57' 체크아웃
하위 모듈 경로 'extensions/TextExtracts': 'e15f62f4c398cd2e92aef7cc4088a559501432bf' 체크아웃
하위 모듈 경로 'extensions/TitleBlacklist': 'cab0a00d5876a85d582f3b0d023809f76ac7e0d8' 체크아웃
하위 모듈 경로 'extensions/VisualEditor': '94aa05199ffcb474cb23d33259e2bc85c08d095f' 체크아웃
하위 모듈 경로 'extensions/VisualEditor/lib/ve': '63e87da8e4889baa814f4041b94e7dd4a966e973' 체크아웃
하위 모듈 경로 'extensions/WikiEditor': '5d09b63e355422bf7c811ded00e0555fa92d38c3' 체크아웃
하위 모듈 경로 'skins/MonoBook': '551fd112fb675253d1c9baf6f7ba474f1f440bec' 체크아웃
하위 모듈 경로 'skins/Timeless': '47ec3a41bfb0eb00d9a7754bb84e67d7c995397f' 체크아웃
하위 모듈 경로 'skins/Vector': 'd7e22f7f20520276fb00a77fc76509a8a07bec47' 체크아웃
하위 모듈 경로 'vendor': '55ebbeac17cb9c3c929deaaa9d33aeada71770b1' 체크아웃
study@study-VirtualBox:/var/www/html/w$ 

앞서 체크아웃된 브랜치에 맞춰 미디어위키의 하위 모듈들 즉, 스킨과, 익스텐션 그리고 라이브러리들을 업데이트해줍니다. 여기서 업데이트라 함은 체크아웃된 미디어위키 브랜치에 맞춰 하위모듈들도 체크아웃한다는 의미입니다. 

 

study@study-VirtualBox:/var/www/html/w$ sudo php maintenance/update.php
MediaWiki 1.37.0-wmf.7 Updater

Your composer.lock file is up to date with current dependencies!
Going to run database updates for my_wiki-w_
Depending on the size of your database this may take a while!
Abort with control-c in the next five seconds (skip this countdown with --quick) ... 0
...collations up-to-date.
...index rc_name_type_patrolled_timestamp already set on recentchanges table.
...rev_page_id index already non-unique.
...pl_namespace, tl_namespace, il_to indices are already non-UNIQUE.
...have ct_id field in change_tag table.
...rc_ip in table recentchanges already modified by patch patch-rc_ip_modify.sql.
...have el_index_60 field in externallinks table.
...ug_user_group key doesn't exist.
...have ug_expiry field in user_groups table.
...img_media_type in table image already modified by patch patch-add-3d.sql.
...ip_changes table already exists.
...index PRIMARY already set on categorylinks table.
...index PRIMARY already set on templatelinks table.
...index PRIMARY already set on pagelinks table.
...index PRIMARY already set on text table.
...index PRIMARY already set on imagelinks table.
...index PRIMARY already set on iwlinks table.
...index PRIMARY already set on langlinks table.
...index PRIMARY already set on log_search table.
...index PRIMARY already set on module_deps table.
...index PRIMARY already set on objectcache table.
...index PRIMARY already set on querycache_info table.
...index PRIMARY already set on site_stats table.
...index PRIMARY already set on user_former_groups table.
...index PRIMARY already set on user_properties table.
...comment table already exists.
...revision_comment_temp table already exists.
...have ar_comment_id field in archive table.
...have fa_description_id field in filearchive table.
...img_description field does not exist in image table, skipping modify field patch.
...have ipb_reason_id field in ipblocks table.
...have log_comment_id field in logging table.
...have oi_description_id field in oldimage table.
...have pt_reason_id field in protected_titles table.
...have rc_comment_id field in recentchanges table.
...have img_description_id field in image table.
...index PRIMARY already set on l10n_cache table.
...bot_passwords.bp_user is already unsigned int.
...change_tag.ct_log_id is already unsigned int.
...change_tag.ct_rev_id is already unsigned int.
...page_restrictions.pr_user is already unsigned int.
...user_newtalk.user_id is already unsigned int.
...user_properties.up_user is already unsigned int.
Making change_tag.ct_rc_id into an unsigned int ...done.
...slots table already exists.
...have slot_origin field in slots table.
...content table already exists.
...slot_roles table already exists.
...content_models table already exists.
...actor table already exists.
...revision_actor_temp table already exists.
...have ar_actor field in archive table.
...have ipb_by_actor field in ipblocks table.
...have img_actor field in image table.
...have oi_actor field in oldimage table.
...have fa_actor field in filearchive table.
...have rc_actor field in recentchanges table.
...have log_actor field in logging table.
...table site_stats already modified by patch patch-site_stats-modify.sql.
...index rc_namespace_title_timestamp already set on recentchanges table.
...change_tag_def table already exists.
Removing 'externallinks.el_index_60' default value
Running maintenance/deduplicateArchiveRevId.php...
...Update 'DeduplicateArchiveRevId' already logged as completed. Use --force to run it again.
done.
...have ct_tag_id field in change_tag table.
...index ar_revid_uniq already set on archive table.
...index log_type_action already set on logging table.
...type_action key doesn't exist.
...index PRIMARY already set on interwiki table.
...index PRIMARY already set on page_props table.
...index PRIMARY already set on protected_titles table.
...index PRIMARY already set on site_identifiers table.
...index rc_this_oldid already set on recentchanges table.
...transcache doesn't exist.
Running maintenance/populateChangeTagDef.php...
...Update 'PopulateChangeTagDef' already logged as completed. Use --force to run it again.
done.
...index change_tag_rc_tag_id already set on change_tag table.
...have ipb_sitewide field in ipblocks table.
...ipblocks_restrictions table already exists.
...change_tag table does not contain ct_tag field.
...valid_tag doesn't exist.
...tag_summary doesn't exist.
...archive table does not contain ar_comment field.
...ipblocks table does not contain ipb_reason field.
...image table does not contain img_description field.
...oldimage table does not contain oi_description field.
...filearchive table does not contain fa_description field.
...recentchanges table does not contain rc_comment field.
...logging table does not contain log_comment field.
...protected_titles table does not contain pt_reason field.
...table job already modified by patch patch-job-params-mediumblob.sql.
...ar_usertext_timestamp key doesn't exist.
...usertext_timestamp key doesn't exist.
...archive table does not contain ar_user field.
...ipblocks table does not contain ip_by field.
...img_user_timestamp key doesn't exist.
...image table does not contain img_user field.
...oldimage table does not contain oi_user field.
...filearchive table does not contain fa_user field.
...recentchanges table does not contain rc_user field.
...logging table does not contain log_user field.
...index un_user_ip already set on user_newtalk table.
...watchlist_expiry table already exists.
...page_restrictions in table page already modified by patch patch-page_restrictions-null.sql.
...index ipb_address_unique already set on ipblocks table.
...have rev_actor field in revision table.
...archive table does not contain ar_text_id field.
...lc_lang is up-to-date.
...ll_lang is up-to-date.
...site_language is up-to-date.
...index ipb_address_unique on table ipblocks has no field ipb_anon_only; added.
...ipb_address_unique index up-to-date.
...actor_name in table actor already modified by patch patch-actor-actor_name-varbinary.sql.
...site_global_key in table sites already modified by patch patch-sites-site_global_key.sql.
...iwl_prefix in table iwlinks already modified by patch patch-extend-iwlinks-iwl_prefix.sql.
Modifying rd_title field of table redirect ...done.
Modifying pl_title field of table pagelinks ...done.
Modifying tl_title field of table templatelinks ...done.
Modifying il_to field of table imagelinks ...done.
Modifying ll_title field of table langlinks ...done.
Modifying iwl_title field of table iwlinks ...done.
Modifying cat_title field of table category ...done.
Modifying qc_title field of table querycache ...done.
Modifying qcc_title field of table querycachetwo ...done.
Modifying wl_title field of table watchlist ...done.
Modifying user_last_timestamp field of table user_newtalk ...done.
Modifying pt_title field of table protected_titles ...done.
Removing 'protected_titles.pt_expiry' default value
Removing 'ip_changes.ipc_rev_timestamp' default value
Removing 'revision_actor_temp.revactor_timestamp' default value
Modifying ir_type field of table ipblocks_restrictions ...done.
Renaming index namespace_title into wl_namespace_title to table watchlist ...done.
Modifying job_title field of table job ...done.
Modifying job_timestamp field of table job ...done.
Modifying job_token_timestamp field of table job ...done.
Modifying wl_notificationtimestamp field of table watchlist ...done.
Modifying role_id field of table slot_roles ...done.
Modifying model_id field of table content_models ...done.
Modifying cl_to field of table categorylinks ...done.
Modifying log_title field of table logging ...done.
Modifying us_timestamp field of table uploadstash ...done.
Renaming index user_properties_property into up_property to table user_properties ...done.
Renaming index sites_global_key into site_global_key to table sites ...done.
Renaming index type_time into log_type_time to table logging ...done.
Modifying fa_name field of table filearchive ...done.
Removing 'filearchive.fa_deleted_timestamp' default value
Removing 'filearchive.fa_timestamp' default value
Modifying oi_name field of table oldimage ...done.
Removing 'oldimage.oi_timestamp' default value
Modifying exptime field of table objectcache ...done.
Removing 'ipblocks.ipb_timestamp' default value
Removing 'ipblocks.ipb_expiry' default value
Renaming index name_title_timestamp into ar_name_title_timestamp to table archive ...done.
Modifying img_name field of table image ...done.
Removing 'image.img_timestamp' default value
Modifying img_timestamp field of table image ...done.
Renaming index site_ids_key into si_key to table site_identifiers ...done.
Modifying rc_title field of table recentchanges ...done.
Removing 'recentchanges.rc_timestamp' default value
Modifying rc_timestamp field of table recentchanges ...done.
Modifying rc_id field of table recentchanges ...done.
Renaming index new_name_timestamp into rc_new_name_timestamp to table recentchanges ...done.
Removing 'archive.ar_timestamp' default value
Modifying ar_title field of table archive ...done.
Modifying page_title field of table page ...done.
Removing 'page.page_touched' default value
Modifying user_name field of table user ...done.
Renaming index page_timestamp into rev_page_timestamp to table revision ...done.
Adding modtoken field to table objectcache ...done.
Removing 'revision.rev_timestamp' default value
...oathauth_users table already exists.
...oathauth_users table does not contain secret_reset field.
...have module field in oathauth_users table.
...oathauth_users table does not contain secret field.
...site_stats is populated...done.
...Update 'populate rev_len and ar_len' already logged as completed. Use --force to run it again.
...Update 'populate rev_sha1' already logged as completed. Use --force to run it again.
...img_sha1 column of image table already populated.
...protocol-relative URLs in externallinks table already fixed.
...fa_sha1 column of filearchive table already populated.
...*_from_namespace column of backlink tables already populated.
...Update 'FixDefaultJsonContentPages' already logged as completed. Use --force to run it again.
...Update 'cleanup empty categories' already logged as completed. Use --force to run it again.
...RFC and PMID already added to interwiki database table.
...Update 'populate pp_sortkey' already logged as completed. Use --force to run it again.
...Update 'populate ip_changes' already logged as completed. Use --force to run it again.
...externallinks table indexes up to date
Purging caches...done.

Done in 3.6 s.
study@study-VirtualBox:/var/www/html/w$ 

이제 미디어위키의 DB를 업데이트해줍니다.

이때 주의할 점은 혹시 있을지도 모르는오류나 사고를 대비해 DB를 반드시 백업해야 한다는 점입니다.

DB 백업은 위 링크를 참고하시기 바랍니다.

 

미디어위키 버전 확인

미디어위키 및 그 하위모듈의 브랜치 체크아웃 작업과 DB 업데이트 작업까지 마친 후 웹브라우저로 미디어위키에 접속하여 특수:버전 문서를 보면 위와 같이 미디어위키 버전이 바뀐 것을 확인할 수 있습니다.

 

이것으로 모든 작업이 무사히 끝난 것으로 생각할 수 있으나 아직 해결할 문제가 있습니다.

 

시각편집기(VisualEditor) 오류 해결

위키 문서를 비주얼에디터로 편집하고자 할때 아래와 같은 오류 메시지 창이 뜹니다.

Error contacting the Parsoid/RESTBase server (HTTP 404)

 

이 문제를 해결할 수 있는 도움말이 적혀 있는 문서가 있습니다.

위 링크 문서에서 우리가 읽어야 할 부분은 아래와 같습니다.

Error contacting the Parsoid/RESTBase server (HTTP 404)

Possible reasons for this problem:

Caused by ModSecurity (or possibly another WAF). Request your hosting service provider to whitelist the security rules that were being triggered by your site.

When the web server is Apache, AllowEncodedSlashes NoDecode must be added in the VirtualHost section of the wiki (phabricator:T261921).

Possibly Parsoid is not loaded when using default configuration (local Parsoid, no RestBase). Add to LocalSettings.php: wfLoadExtension( 'Parsoid', 'vendor/wikimedia/parsoid/extension.json' );.

위의 두 경우는 서버의 설정과 관련있습니다.

그러나 제 APM 서버 구축 및 미디어위키 관련 연재를 따라오신 분들과는 관련이 없는 문제일 겁니다.

 

우리와 관련 있는 것은 마지막 세 번째입니다. 브랜치를 전환하면서 Parsoid가 로드되지 않는 문제입니다.

study@study-VirtualBox:/var/www/html/w$ sudo nano LocalSettings.php

미디어위키 설정 파일인 LocalSettings.php 파일을 열어줍니다.

 

wfLoadExtension( 'Parsoid', 'vendor/wikimedia/parsoid/extension.json' );

그리고 위 코드를 추가해줍니다. 파일 저장 후 다시 미디어위키에서 비주얼에디터로 편집을 해보면 정상적으로 작동되는 것을 확인할 수 있습니다.

이것으로 모든 작업은 완료되었습니다.

 

주의할 점은 개발 브랜치는 아직 안정적이지 못하여 예기치 못한 오류가 발생할 수 있습니다.

따라서 브랜치 전환 전과 후에 반드시 DB를 백업해주어야 합니다.

이것으로 Git을 통한 미디어위키 버전 관리 연재는 마무리되었습니다.

이후 미디어위키가 판올림되더라도 Git을 이용한 미디어위키 설치 및 버전 관리 관련 연재는 Git 프로그램 자체의 사용법에 변화가 없는 한 따로 수정하거나 새로 글을 작성하지 않을 생각입니다.

미디어위키 버전이 올라가더라도 실제로 우리가 다루는 것은 Git이라는 프로그램이므로 이 프로그램의 사용법에 변화가 없다면 미디어위키 버전이 올라갈 때마다 재작성하는 것은 무의미하기 때문입니다.

만약 미디어위키 자체와 관련하여 수정할 일이 생긴다면 그것은 미디어위키 원격 Git 저장소의 주소가 바뀌는 경우 정도가 아닐까 싶네요.

 

제 글이 미디어위키를 다루시고자 하는 분들께 조금이나마 도우미 되기를 바랍니다.