미디어위키 업그레이드 1.23.3 → 1.25.2

1 서버 용량 확인[ | ]

[root@zetawiki ~]# df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/mapper/VolGroup-lv_root
                       36G   24G  9.5G  72% /
tmpfs                 939M     0  939M   0% /dev/shm
/dev/vda1             485M   66M  395M  15% /boot
[root@zetawiki ~]# du -hs /var/www/html/w/
2.3G	/var/www/html/w/
→ 디스크 용량은 9.5 GB 가 남아있고, w폴더의 전체 용량은 2.3 GB 이므로 백업하기에 여유가 있다.

2 백업[ | ]

파일 백업

w 폴더(소스코드 + 업로드 파일)의 사본을 "w-backup"이라는 이름으로 만든다.

[root@zetawiki ~]# cp -a /var/www/html/w /root/w-backup
→ 진행상황을 알 수 없으니 추가로 SSH 접속하여 아래 명령어로 확인
[root@zetawiki ~]# watch 'du -bs /var/www/html/w /root/w-backup'
Every 2.0s: du -bs /var/www/html/w /root... Wed Aug 19 20:53:04 2015

2285354528	/var/www/html/w
2294311692      /root/w-backup
→ 복사 완료될 때까지 대기
→ 원본 폴더와 사본 폴더 용량이 거의 같아짐[1]
DB 백업
[root@zetawiki ~]# cd /root/w-backup
[root@zetawiki w-backup]# mysqldump -hzetadb -uroot -pP@ssw0rd --databases mydb > mydb-backup.sql
[root@zetawiki w-backup]# ll -h mydb-backup.sql 
-rw-r--r-- 1 root root 610M Aug 19 20:58 mydb-backup.sql

3 설치파일 다운로드 및 설치[ | ]

  • w 폴더의 상위 폴더로 이동하여 mediawiki-1.25.2.tar.gz를 서버에 다운로드(wget)
[root@zetawiki ~]# cd /var/www/html
[root@zetawiki html]# wget releases.wikimedia.org/mediawiki/1.25/mediawiki-1.25.2.tar.gz
... (생략)
HTTP request sent, awaiting response... 200 OK
Length: 24018158 (23M) [application/x-gzip]
Saving to: “mediawiki-1.25.2.tar.gz”

 1% [                       ] 247,246     28.0K/s  eta 12m 50s
... (생략)
[root@zetawiki html]# ll mediawiki*
-rw-r--r-- 1 root root 24018158 Aug 19 20:19 mediawiki-1.25.2.tar.gz
  • 압축 해제 후 압축파일 삭제
[root@zetawiki ~]# tar xvzf mediawiki-1.25.2.tar.gz 
... (생략)
mediawiki-1.25.2/languages/.htaccess
mediawiki-1.25.2/languages/ConverterRule.php
mediawiki-1.25.2/languages/Language.php
[root@zetawiki html]# rm -f mediawiki-1.25.2.tar.gz
[root@zetawiki html]#

4 기존 파일 가져오기[ | ]

  • 새로운 폴더 mediawiki-1.25.2로 이동
  • 기존 폴더(w 폴더)에서 필요한 파일을 복사해온다.
[root@zetawiki html]# cd mediawiki-1.25.2/
[root@zetawiki mediawiki-1.25.2]# cp -a ../w/LocalSettings.php .
[root@zetawiki mediawiki-1.25.2]# cp -a ../w/images/ .
cp: overwrite `./images/README'? n
cp: overwrite `./images/.htaccess'? n
[root@zetawiki mediawiki-1.25.2]# cp -a ../w/skins/ .
→ skins 폴더의 경우 overwrite가 없었는데, 스킨폴더명이 모두 카멜케이스로 변경되었더라.
  • cache 폴더 소유자 변경
[root@zetawiki mediawiki-1.25.2]# chown -R apache:apache /var/www/html/w/cache/

5 확장기능 가져오기[ | ]

  • extensions 폴더는 비교하여 필요한 것을 선별하여 기존 폴더에서 가져오자.
[root@zetawiki mediawiki-1.25.2]# cd extensions/
[root@zetawiki extensions]# ls
Cite          InputBox            PdfHandler     SyntaxHighlight_GeSHi
CiteThisPage  Interwiki           Poem           TitleBlacklist
ConfirmEdit   LocalisationUpdate  README         WikiEditor
Gadgets       Nuke                Renameuser
ImageMap      ParserFunctions     SpamBlacklist
[root@zetawiki extensions]# ls ../../w/extensions/
... (생략)
ForceTocOnEveryPage                   SyntaxHighlight_GeSHi
Gadgets                               TitleBlacklist
googleAnalytics                       Validator
HideVariousTabsFromUnauthorizedUsers  Vector
Interwiki                             WikiEditor
LocalisationUpdate                    WikiToWordPress
MagnetLinks                           YouTube
Maps                                  ZetaTrace
MathJax
[root@zetawiki extensions]# cp -a ../../w/extensions/ForceTocOnEveryPage .
[root@zetawiki extensions]# cp -a ../../w/extensions/YouTube .
[root@zetawiki extensions]# cp -a ../../w/extensions/Maps .
[root@zetawiki extensions]#

6 LocalSettings.php 수정[ | ]

  • 1.24 버전부터 스킨과 확장기능을 등록하는 방법이 바뀌었다.
그렇더라도 구버전 스킨과 확장기능은 예전방식 그대로 두어야 한다.
새 버전에 포함된 것만 새 방식으로 변경하자.
단, ConfirmEdit는 새 버전에 포함된 것도 아직 구식으로 해야 한다...
[root@zetawiki extensions]# cd ..
[root@zetawiki mediawiki-1.25.2]# vi LocalSettings.php
// 새 버전에 포함된 것
wfLoadSkin( 'Vector' );

#require_once "$IP/extensions/Cite/Cite.php";
#require_once "$IP/extensions/Poem/Poem.php";
wfLoadExtension( 'Renameuser' );
wfLoadExtension( 'CharInsert' );
wfLoadExtension( 'Cite' );
wfLoadExtension( 'Poem' );
wfLoadExtension( 'ParserFunctions' );
wfLoadExtension( 'SyntaxHighlight_GeSHi' );

// 새 버전에 없는 기존 것
require_once "$IP/extensions/ForceTocOnEveryPage/ForceTocOnEveryPage.php";
require_once "$IP/extensions/YouTube/YouTube.php";

7 update 스크립트 실행 (실패)[ | ]

  • 이 문단은 참고만 하시라.
  • upadate 스크립트를 실행해야 하는데, 구버전 스킨·확장기능을 새 방식으로 Load했을 경우 이러한 오류가 발생한다.
[root@zetawiki mediawiki-1.25.2]# cd maintenance/
[root@zetawiki maintenance]# php update.php 
PHP Fatal error:  Uncaught exception 'Exception' with message '/var/www/html/mediawiki-1.25.2/skins/foreground/skin.json does not exist!' in /var/www/html/mediawiki-1.25.2/includes/registration/ExtensionRegistry.php:79
Stack trace:
#0 /var/www/html/mediawiki-1.25.2/includes/GlobalFunctions.php(216): ExtensionRegistry->queue('/var/www/html/m...')
#1 /var/www/html/mediawiki-1.25.2/LocalSettings.php(170): wfLoadSkin('foreground')
#2 /var/www/html/mediawiki-1.25.2/maintenance/doMaintenance.php(83): require('/var/www/html/m...')
#3 /var/www/html/mediawiki-1.25.2/maintenance/update.php(216): require_once('/var/www/html/m...')
#4 {main}
  thrown in /var/www/html/mediawiki-1.25.2/includes/registration/ExtensionRegistry.php on line 79
문제 해결
  • 기존 사용하던 스킨, 확장기능과 충돌이 있어 LocalSettings.php에서 제외시킴
죄다 skin.json, extension.json이 없다고 함
wfLoadSkin(), wfLoadExtension()이 json 파일을 필요로 하는 모양...
  • 기본 스킨을 Vector로 설정함
#$wgDefaultSkin = 'foreground';
$wgDefaultSkin = 'Vector';
... (생략)
wfLoadSkin( 'Vector' );
#wfLoadSkin( 'foreground' );
#wfLoadSkin( 'foobar' );

#wfLoadExtension( 'Mantle' );
#wfLoadExtension( 'ForceTocOnEveryPage' );
#wfLoadExtension( 'DynamicPageList' );
#wfLoadExtension( 'Scribunto' );

8 update 스크립트 실행 (성공)[ | ]

root@zetawiki maintenance]# php update.php 
MediaWiki 1.25.2 Updater

Your composer.lock file is up to date with current dependencies!
Going to run database updates for zetawiki-zt_
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
... (생략)
...doing page_id from 34031 to 34230
...doing page_id from 34230 to 34429
Set the local repo temp zone container to be private.
Purging caches...done.

Done in 2:28.
[root@zetawiki maintenance]#

9 폴더 바꿔치기[ | ]

  • 지금까지 구성한 새 버전 폴더를 실제로 웹에 적용되는 폴더로 전환
[root@zetawiki maintenance]# cd ..
[root@zetawiki mediawiki-1.25.2]# cd ..
[root@zetawiki html]# mv w/ w-old
[root@zetawiki html]# mv mediawiki-1.25.2/ w
[root@zetawiki html]#

10 (참고) 브라우저 접속 (실패)[ | ]

  • 이 문단은 참고만 하시라.
  • cache 폴더의 소유자를 아파치 웹서버 계정으로 바꾸지 않을 경우 발생하는 오류임
  • http://zetawiki.com/ 에 접속해보니.. 오류 발생
[2a4cb221] /wiki/Main_Page MWException from line 1305 of /var/www/html/w/includes/cache/LocalisationCache.php: Unable to open CDB file "/var/www/html/w/cache/l10n_cache-ko.cdb.tmp.695389245" for write.

Backtrace:

#0 /var/www/html/w/includes/cache/LocalisationCache.php(1007): LCStoreCDB->startWrite(string)
#1 /var/www/html/w/includes/cache/LocalisationCache.php(449): LocalisationCache->recache(string)
#2 /var/www/html/w/includes/cache/LocalisationCache.php(323): LocalisationCache->initLanguage(string)
... (생략)
문제 해결
  • 캐시 폴더 소유자를 apache로 변경
[root@zetawiki html]# chown -R apache:apache /var/www/html/w/cache/ 
[root@zetawiki html]# ll /var/www/html/w/ | grep cache
drwxr-xr-x 14 apache apache   4096 Aug 19 22:46 cache
  • 이제 웹페이지가 잘 열린다..

11 브라우저 접속 (성공)[ | ]

제품 버전
MediaWiki 1.25.2
PHP 5.3.3 (apache2handler)
MySQL 5.5.40-0ubuntu0.12.04.1
  • 페이지 보기, 편집, 파일 업로드 등을 해보고 이상 없는지 확인

12 후속조치[ | ]

  • 구폴더(w-old)는 웹사용자가 접근하지 못하도록 다른 곳(예: 홈폴더 등)으로 이동시켜 두자.
[root@zetawiki html]# mv w-old/ ~
  • 별다른 문제가 없다면 추후 삭제

13 같이 보기[ | ]

14 참고[ | ]

  1. 사본이 더 크네? 아파치를 중지하지 않고 진행해서 그런 듯... 캐시파일 등에서 차이가 난다.
문서 댓글 ({{ doc_comments.length }})
{{ comment.name }} {{ comment.created | snstime }}