Thumbnail Image Memory Allocation Error in Mediawiki

Mediawiki uses ImageMagick Utility for resized thumbnail image. You can use it as

$wgUseImageMagick = true;
$wgImageMagickConvertCommand = "/usr/bin/convert";

in your LocalSettings.php.

There are two reasons why ImageMagick is beneficial.

  1. It reduces loading time for image file as it stores thumbnail image separately.
  2. It gives higher quality than GD library.

However, you may encounter following error when shell memory is not allocated big enough.

Error creating thumbnail:
libgomp: Thread creation failed: Cannot allocate memory

It is due to small shell memory allocation which is handled by Mediawiki. In this case, you can simply add following in LocalSettings.php

$wgMaxShellMemory = 524288;

524288 means 512K. You can specify it as you desire. [1. http://www.mediawiki.org/wiki/Manual_talk:Image_Administration]

MediaWiki에서 Debug log를 보고 싶을때,

MediaWiki 에서 Debug 하는 방법으로

wfDebug(..)

이 사용되고 있습니다. 이 wfDebug() 으로 출력되는 Debug Message는 기본값으로 출력되지 않게 되어있지만, 이것을 활성화 하여 Debug Message를 볼 수 있습니다.

다음을 LocalSettings.php에 추가해 주면, Debug Message를 볼 수 있습니다.

$wgDebugLogFile = "<somedirectory>/log.log";
$wgDebugComments = true;

위와 같이 설정해 주면, <somedirectory>/log.log 로 모든 Debug Comment들이 기록이 되어 Tracking 할 수 있습니다.

Mediawiki에서 Thumbnail Image에서 Memory Allocation Error가 있을때

Mediawiki를 쓰다가 Thumbnail Image를 위해서 ImageMagick Utility를 이용할 수 있습니다. Mediawiki에서 ImageMagic Utility를 이용하는 방법은

$wgUseImageMagick = true;
$wgImageMagickConvertCommand = "/usr/bin/convert";

와 같이 정해 주면, Image를 Resize 하는데에 ImageMagick (convert)를 이용하여 Resize한 Thumbnail을 만듭니다. 단순히 image tag의 Size를 줄이지 않고 ImageMagic을 이용하는 이유는 두가지 입니다.

  1. Thumbnail Image를 따로 보관함으로 인해 Image를 Loading하는 시간을 단축할 수 있습니다.
  2. Resize Quality가 Image Tag만으로 이용하는 것보다 더 좋은 Quality를 줍니다.

그런데, 이 ImageMagick을 Mediawiki를 통해서 이용하는데에는 Shell Memory를 이용하는데, Shell Memory가 부족할 경우 다음과 같은 Error가 날 수 있습니다.

Error creating thumbnail:
libgomp: Thread creation failed: Cannot allocate memory

위와 같은 상황이 발생하면, LocalSettings.php에 다음을 추가/편집 해 줍니다.

$wgMaxShellMemory = 524288;

524288는 512K를 의미합니다. 적당하게 조절하여 Server에 맞게 조정해 주면 됩니다. [1. http://www.mediawiki.org/wiki/Manual_talk:Image_Administration]

Mediawiki MySQL DB Encoding 바꾸기

Latin1으로 되어 있던 오래된 Mediawiki의 MySQL을 최근에 새로 Mediawiki를 업그레이드 하면서 MySQL의 Encoding에서 충돌이 났습니다. 정확하게는 phpMyAdmin Tool을 이용하여 Export 한  (실제로는 mysqldump를 이용했으리라 생각합니다만) SQL File이 원래 Latin1 으로 Encoding이 되어 있었는데, 받을때는 UTF-8으로 받으니 한글이 모두 깨져버렸습니다. 이것을 Backup 이라고 받아 두기도 참 어려운 점이 있기때문이기도 하고, 한글등의 영어외의 문자에 대한 지원을 위해서는 UTF-8이 필수적이기때문에 오래된 Latin1의 MySQL DB를 모두 최신 UTF-8 Encoding으로 바꾸기로 했습니다.

바꾸기로 결정을 하긴 했지만, 시간이 참 많이 걸렸습니다. 아내의 눈치를 살피면서 주말에 짬짬히 업그레이드를 했습니다.

이 글은 DB, HTML, Encoding등에 대해서 비전문가, 그러나 취미정도로 관심을 가지고 있는 사람의 입장에서 쓰여졌음을 밝힙니다.

우선 DB를 다운받고 UTF-8으로 Converting을 한 후에 다시 DB로 Upload 하여야 합니다. [1. converting mediawiki mysql database from latin1 to utf8][2. Convert database of Mysql to latin in utf-8] [3. ALTER TABLE Syntax]

저는 다음과 같은 과정을 거쳤습니다.

1. 먼저 SSH로 사이트에 접속하였습니다.
2. 다음과 같이 latin1 으로 되어 있는 DB (예; dbmysql)를 dump하여 dbmysql.sql로 받습니다.

$mysqldump --user=name --password=password --default-character-set=latin1 --skip-set-charset dbmysql > dbmysql.sql

[code lang=”bash”]
$mysqldump –user=name –password=password –extended-insert=false –quote-names –default-character-set=latin1 dbmysql > dbmysql.sql
[/code]

mysql 4.1 이후로는 DB 자체가 utf8으로 변환되어서 나올 수 있습니다. 이때는 다음과 같이만 설정하여 dump 합니다.

[code lang=”bash”]
$mysqldump –user=name –password=password –default-character-set=utf8 dbmysql > dbmysql.sql
[/code]

3. latin1으로 되어 있는 그 파일을 utf8으로 변환합니다.

$sed -r 's/latin1/utf8/g' dbmysql.sql > dbmysql-utf8.sql

[code lang=”bash”]
perl -pi -w -e ‘s/latin1/utf8/g;’ dbmysql.sql
[/code]

3-1. 변환후 혹시 Table명을 바꾸고 싶다면, 이것도 적당한 Editor를 이용하여 일괄적으로 바꾸어 줍니다.
4. SQL을 이용하여 DB를 하나 생성합니다. (예; dbmysql2) 이때, 이 DB에는 어떤 table도 생성되지 않은 empty DB로 가정합니다.
5. 다음을 이용하여 새로운 DB에 저장합니다.

$mysql --user=name --password=password --default-character-set=utf8
dbmysql2 < dbmysql-utf8.sql

[code lang=”bash”]
$mysql –user=name –password=password –default-character-set=utf8 dbmysql2 < dbmysql.sql
[/code]

혹시 DB 자체를 UTF-8으로 바꾸기를 원한다면,[4. Converting Database Character Sets]

[code lang=”bash”]
$mysql –user=name –password=password
[/code]

로 mysql에 접속한 후에,

[code lang=”bash”]
mysql> ALTER DATABASE MyDb CHARACTER SET utf8;
[/code]

와 같이 바꾸어 줍니다.

P.S. 이전에 기록되었던 코드가 완벽하게 동작을 하지 않아서 다시 수정해 둡니다.