년도별 글 목록: 2012

3종 OS별 XULRunner 배포판을 만들면서

XUL로 개발한 프로그램을 리눅스, 맥, 윈도우 3종 OS별로 XULRunner를 포함시켜 배포판을 만들어봤습니다.

별것 아니지만 몰라서 고생했던 내용을 몇가지 적어보겠습니다.

 

터미널에서 xulrunner 실행시 ‘Mozilla XULRunner <Error> – <Error>’ 메시지가 출력되면 다른 버전의 xulrunner로 교체합니다.
6.0 버전이 안정된 버전이라고 합니다. 저는 6.0에서 정상적으로 실행했습니다.

XULRunner와 직접적인 연관은 없는 내용인데 *.app 폴더의 아이콘을 변경해도 바뀌지 않는다면 .DS_store 파일을 지워봅니다.

터미널에서 실행시 키입력을 터미널이 가로채는 등의 문제가 있었습니다. 근본적인 해결방법은 찾지 못해서 터미널을 이용하지 않고 직접 실행시켰습니다. 이 경우 터미널에서 실행하는 것 처럼 -jsconsole 옵션으로 자바스크립트 콘솔창을 띄우지 못합니다. 그래서 스크립트로 직접 띄웠습니다.

function showErrorConsole() {
    var windowManager = Components.classes['@mozilla.org/appshell/window-mediator;1'];
    var windowManagerInterface = windowManager.getService(Components.interfaces.nsIWindowMediator);
    var errorConsoleWindow = windowManagerInterface.getMostRecentWindow("global:console");

    if ( errorConsoleWindow ) {
        errorConsoleWindow.focus();
    } else {
        window.open("chrome://global/content/console.xul", "_blank",
                    "chrome,extrachrome,menubar,resizable,scrollbars,status,toolbar");
    }
}

* 출처: http://aadima.com/xulrunner/xrdebug.html

 

윈도우

XULRunner 실행 후 오류가 나서 아무런 윈도우가 뜨지 않았어도 프로세스가 종료되지 않고 동작을 하고 있을 가능성이 높습니다. 다시 실행하기전에 프로세스가 완전하게 종료되었는지 확인해야 합니다.

 

리눅스

별다른 문제없이 쉽게 성공했습니다.

 

공통

XULRunner 버전별로 XUL 프로그램 파일 구조가 다를 수 있습니다.

chrome.manifest 파일의 위치가 다르면 chrome.manifest 내의 경로도 달라집니다.

chrome.manifest가 chrome 폴더랑 경로가 같다면
– content myapp chrome/content/

chrome.manifest가 chrome 폴더내에 있다면
– content myapp content/

 

XULRunner로 XUL 프로그램을 실행시 -jsconsole 옵션을 추가하면 디버깅 및 문제를 해결하는데 도움이 됩니다.

$ xulrunner application.ini -jsconsole

 

-jsconsole 옵션을 추가하고 xulrunner를 실행하면 프로그램의 코드를 수정하고 재시작 하여도 캐쉬로 인해 수정하기 이전의 코드로 동작하는 문제가 있습니다.
이때는 prefs.js 파일에 아래의 코드를 추가하여 캐쉬가 되지 않도록 하면 됩니다.

pref(“nglayout.debug.disable_xul_cache”, true);
pref(“nglayout.debug.disable_xul_fastload”, true);

 

XUL이 제공하는 콘솔창에 메시지를 출력하는 방법

function jsdump(str) {
    Components.classes['@mozilla.org/consoleservice;1']
        .getService(Components.interfaces.nsIConsoleService)
        .logStringMessage(str);
}

* 참고: https://developer.mozilla.org/en-US/docs/XPCOM_Interface_Reference/nsIConsoleService?redirectlocale=en-US&redirectslug=nsIConsoleService#Logging_a_simple_message

 

기타 참고 자료

  • https://developer.mozilla.org/en-US/docs/XULRunner/Deploying_XULRunner_1.8

XtraBackup을 이용한 MySQL 백업 및 복구

이 글은 XtraBackup을 간단하게 소개한 글이고 자세한 사용법은 MySQL 원격 증분 백업 – Percona XtraBackup 이라는 글에서 다루고 있다.


mysql 백업시 보통은 mysqldump를 사용합니다. 하지만 데이터가 커질수록 mysqldump로 백업한 데이터는 복구에 걸리는 시간이 길어집니다.

mysql 서버를 중단시키지 않고 InnoDB 엔진도 핫백업이 가능한 도구로 XtraBackup이라는 오픈소스 프로그램이 있습니다. 소개를 보면 mysql 상용 백업 프로그램인 InnoDB Hot Backup 보다 더 많은 기능을 제공합니다.

XtraBackup은 기본적으로 InnoDB와 XtraDB의 백업을 지원하지만 같이 설치되는 innobackupex 스크립트를 통해서 MyISAM 방식도 백업이 가능합니다. 그리고 직접 해본 결과 ARCHIVE 방식의 DB도 백업되는 것을 확인했습니다.

개인적인 의견인데 이제 MySQL에서 꼭 MyISAM을 써야될 이유가 퇴색했기에 MyISAM을 돌리기 위해서 할당할 자원을 InnoDB에 최적화 시키는게 좋습니다.

XtraBackup은 증분백업도 지원하는데 InnoDB와 XtraDB만 지원합니다. 이런점 때문이라도 MyISAM 보다는 InnoDB를 쓰는게 좋습니다.

이 글에서는 제가 직접 테스트한 전체백업만 소개하겠습니다. 자세한 사용법은 Percona Xtrabackup – Documentation을 참고하시거나 구글링을 통해서 정보를 얻으실 수 있습니다.

XtraBackup의 설치는 데비안, 레드햇 계열 모두 저장소를 제공하고 있으므로 저장소만 추가하면 apt-get, yum으로 쉽게 설치하실 수 있습니다. 각 리눅스 패키지별 저장소 추가 및 설치도 구글링에 맡기겠습니다. ^^

설치가 끝났으면 아래의 명령으로 풀백업이 가능합니다.

$ innobackupex /백업경로

지정한 백업경로에 /백업경로/년-월-일_시-분-초/ 디렉토리가 생성되며 백업이 됩니다. 자동으로 디렉토리명이 백업시간으로 정해지니까 무척 편리합니다.

복구도 어렵지 않습니다.

먼저 mysql 서버를 중지시킵니다.
mysql이 데이터를 기록하는 디렉토리를 옮겨놓습니다.(mysql 설정 파일 my.cnf의 datadir 참고)

$ mv /var/lib/mysql /var/lib/mysql-old

다시 빈 디렉토리를 만듭니다.

$ mkdir /var/lib/mysql

아래의 명령어로 복구를 시작합니다.

$ innobackupex –copy-back /백업경로/년-월-일_시-분-초/

저는 22GB의 파일을 복구하는데 10분 걸렸습니다.
이걸 mysqldump로 백업한 sql로 복구했다면 수시간이 걸립니다.

복구된 mysql 디렉토리의 권한을 변경합니다.

$ chown -R mysql. /var/lib/mysql

마지막으로 mysql을 재시작 합니다.

참고자료: http://www.tekovic.com/mysql-hot-backup-with-xtrabackup-on-centos

XenServer에서 우분투 싱글모드 부팅

XenServer에 설치한 우분투의 root 패스워드를 초기화 하기 위해서 싱글모드 부팅을 하려고 했습니다.

몇번씩 재시작을 하며 부팅시 Shift키를 누르고 있어도 싱글모드 선택 메뉴가 나오지 않더군요.

결국은 한참을 구글링하여 알아냈습니다.

  1. XenCenter의 좌측 VM 목록에서 원하는 VM을 선택합니다.
  2. 우측의 VM General Properties 에서 Properties 버튼을 클릭합니다.
  3. 새로 뜬 창에서 Boot Options 항목을 선택합니다.
  4. OS boot parameters의 값을 ‘– quiet console=hvc0’에서 ‘single’로 바꿉니다.
  5. VM을 재시작하면 root로 접속이 됩니다.
  6. passwd 명령으로 비밀번호를 바꿉니다.
  7. OS boot parameters의 값을 다시 원래대로 ‘– quiet console=hvc0’로 바꿉니다.
  8. 재부팅 완료

 

참고자료: http://www.kevintaber.com/2012/08/01/reset-ubuntu-root-password-in-xenserver/