(EDIT 2009.03.13 windows에서 rsync server를 사용하는 것은 포기했음. 자세한 사정은 이 글 끝의 덧..들을 참고. 아래는 그냥 기록상 남겨둠. 다른 사람에게는 도움이 될 지도 모르니...)


서설

노트북에서 작업을 하다가 갑자기 비교적 대량의 데이터를 백업해야 할 일이 생겼는데 FTP로 옮기고 있자니 짜증이 났다. 뭔가 일이 자동으로 일어났으면 좋겠는데... 그런 생각을 하다가 노트북 데이터의 자동 백업 방법을 생각해 보니 제일 바람직한 것은 rsync를 사용하는 것이었다. 버젼 컨트롤이 필요한 것들은 lab 한 구석에 돌리는 debian 서버에 subversion(옛날 것들)과 git(요즘 것들)을 혼합하여 저장하지만, 특별히 버젼 컨트롤은 필요 없이 단순히 동기화만 필요한 것들에는 굳이 subversion이나 git을 사용할 필요가 없어 보였기 때문이다. 버젼 컨트롤에는 아무래도 이러저러한 추가 정보들이 필요하다 보니 단순히 동기화를 위해서 버젼 컨트롤 소프트웨어를 사용하는 것도 낭비라고 여겨졌다. 그래서 lab에서 사용하는 windows 데스크탑이 HDD도 넉넉하니 단순 무식하게 rsync로 자동으로 동기화가 되도록만 해 놓고 싶었다.

이 글은 linux client(ubuntu 사용)와 windows server(win xp 사용) 사이에 rsync 설정을 한 삽질기이다.


서버

일단 windows가 서버가 되어야 하니 rsync server를 설치해야 하는데 찾아 보니 이런 것들이 있다.

DeltaCopy는 rsync server이긴 한데 이 글을 읽어보면 domain controller하고 얽혀서 별로 좋지가 않다고 한다. 서버가 windows xp인데다가 우리 랩도 windows domain controller하고는 담 쌓고 지낸지가 몇년이 됐으니 DeltaCopy는 나도 패스다.

cwRsync는 특별히 새로 나온 소프트웨어라기보다는 기존에 cygwin과 rsync를 직접 설치하던 것을 cygwin에서 필요한 부분만을 가져오고 rsync를 그 위에 설치해 주고 rsync 서버를 daemon mode로 (그러니까 윈도우즈 서비스로) 설정하는 것까지를 편하게 해 준다. cygwin에서 뭘 가져올지를 시간들여 생각할 필요가 없다. 그러니 나를 위해서도 이것이 좋은 선택이다.

cwRsync는 위 홈페이지에서 링크를 따라가면 sourceforge에서 다운로드할 수 있는데, client는 필요 없으니 서버만 다운로드한다. (cwRsyncServer_3.0.1_Installer.zip) 설치는 간단하다. 특별히 신경 써서 뭘 할 필요도 없다. 단, 설명을 읽어보면 서비스 시작 형태가 수동으로 설정된다고 하는데, 관리도구->서비스 에서 rsync server를 찾아서 자동으로 시작하도록 해 준다. (시작은 좀 있다가 한다.) 그리고 실제의 서버 설정을 하는데, 시작메뉴에서 cwRsync를 찾아서 rsyncd.conf를 누르면 설정파일 내용이 메모장에 뜬다.

rsync는 기본적으로 module 단위로 동작한다. 서버의 설정 파일에 모듈들을 지정하면 외부에서는 서버이름과 그 서버에 있는 모듈들이 보이는 식이다. 서버이름/모듈이름 의 형식으로 접근하게 된다. 설정파일에서 기본적인 것은 그냥 있는 것(test라는 모듈이 이미 하나 정의돼 있을 거다.)을 대충 고쳐서 써도 되는데 중요한 것은 charset을 처리하도록 손을 봐 줘야 한다는 거다. 일단 upload할 모듈의 끄트머리에 charset = utf-8을 적어준다. 한글 파일 이름만을 위해서는 윈도우즈 기본 charset인 cp949나 euc-kr을 써도 되는데 유럽쪽 글자들이 들어 있는 파일 이름을 위해서는 아무래도 유니코드가 좋다. 여기에서 utf-8로 정해줬다고 바로 그대로 동작하는 건 아니다. 이 글이나 이 글을 읽어 보면 cwRsync에 딸려 오는 cygwin이 유니코드를 사용하도록 돼 있지 않다고 한다. 그 글들에서 따라가 보면 어떤 일본어로 된 utf8-cygwin이라는 페이지가 뜨는데 거기에서 cygwin1-dll-20-11-18.tar.bz2을 다운로드한다. 압축파일을 열면 cygwin1.dll이라는 파일이 나오는데 그걸 C:\Program Files\ICW\Bin 아래에 덮어 씌운다.

그럼 그 다음에 rsync 서비스를 시작해 준다. 이 이후에 중간 중간 설정 파일을 바꾸면서 시험해 볼 때는 매번 서비스를 중지하고 다시 시작해야 할 필요는 없다. 설정파일을 바꾸면 바로 적용되는 듯하다.


클라이언트

클라이언트는 뭐 특별히 설명할 것이 없다. 한가지만 언급하자면 rsync 프로그램에 먹일 옵션으로는 -ausx --iconv=utf-8 정도가 좋은 것 같다. 물론 리눅스 클라이언트에서 사용하는 charset이 utf-8일 때 얘기고 옛날 식 euc-kr을 쓴다면 -ausx --iconv=euc-kr로 하면 될 것이다.


자동화

자동화는 클라이언트가 리눅스이니 cron 같은 것을 쓰면 된다. 이것도 여기서 특별히 설명할 것은 없네. 다른 데 더 좋은 설명이 많을 테니까.



어째 용두사미 격의 삽질기네. 뭐, 삽질에 시간이 제일 많이 걸린 부분이 저 위에 utf-8 관련한 정보를 찾는 시간이었으니 오히려 이런 식이 제 격인 것 같기도 하고. ㅋㅋ


그 날 이후

덧. 2009. 03. 12 컴퓨터를 갈아 엎고 나서 위에 기록한 거 대로 다시 설치했는데 이게 제대로 안된다. 문제는 아직 뭔지 모르겠다. cygrunsrv.exe를 실행하면 error 1053을 내고 서비스가 시작되지 않는다.

덧. 2009. 03. 13 cwRsync도 어차피 cygwin과 rsync를 설치하기 쉽게 패키징 한 것이다. 그래서 cygwin을 사용하지 않는 것을 찾아보았는데 Unison이라는 것을 찾았다. 그런데 이것도 문제가 있다. windows에 server로 설치하기 위해서는 socket method와 remote shell method를 선택할 수 있는데 socket method는 보안을 구현하기 거시기하다. 그런데 remote shell method로서 추천하고 있는 것이 결국 cygwin + ssh을 설치하는 것이다. 이래서는 어차피 다시 cygwin으로 돌아온 것이다. 그럴 바에는 그냥 cygwin + ssh + rsync로 가는 것이 훨씬 나을 것 같다. 그런데 다시 cygwin + ssh + rsync로 한다고 해도 앞에 덧. 03.12에서처럼 cwRsync에서의 알 수 없는 문제가 또 생길지도 모르겠다.

덧. 2009. 03. 13 cygwin을 직접 설치하고 rsync를 setup하려고 해도 같은 문제가 생긴다. cygwin 설치와 관련된 것은 아닌 것 같다. 그보다는 win xp에서의 permission setting 같은 것과 관련이 있는 것으로 보인다. 이것을 해결하기 위해서는 cygrunsrv.exe 프로그램에 관계된 자세한 문서를 찾아봐야 할 것 같은데 잘 못찾겠다. 정 안되면 소스를 분석해봐야겠다. 근데 그러려면 일이 커질 확률이 꽤 있다.

또 다른 해결책으로는 windows 머신에 virtualbox 같은 가상 머신을 설치하고 windows 방화벽에서 port forwarding을 할 수 있다. 그런데 이렇게 하는 것은 문제 해결 자체보다 해야 할 것이 많아서(가상 머신 설치와 설정 등) 별로 내키지 않는다. 그래도 이 방법에 대해서는 내가 잘 알고 있기 때문에 cygrunsrv.exe를 분석하는 것 보다는 빨리 해결할 수 있을 것 같다.

덧. 2009. 03. 13 이것 저것 살펴 보고 나서 내가 cygrunsrv.exe의 문제를 해결할 수 없을 것이라고 판단했다. 물론 시간을 들이면 못 하지는 않을 것 같지만 들이는 시간에 비해서 얻는 것이 미약하다. 당분간은 rsync 없이 ftp로 살아야겠다. 어차피 데이터는 한쪽으로만 흐르고 지워지는 데이터는 거의 없고 주로 교내 네트웍에서 자료를 옮기기 때문에 네트웍 대역폭을 신경 쓸 필요가 없고 공용 서버들도 아니고 critical service를 돌리는 컴퓨터들도 아니기 때문에 시스템 load에도 신경 쓸 필요가 없다.

고로... 그냥 ftp만 이용하다가 여름 정도 도면 cygwin과 cygrunsrv.exe에 중요한 변화가 있는지 체크해 보는 것이 좋을 것 같다.

SET LANG=ko_KR.EUC-KR

환경을 변경해 주면 해결이 되네요..
4.0.4 에서 테스트 되었습니다.

이미 알고 계실지도 모르겠으나..
해결한 방법을 전해 드립니다.
2010.05.31 10:33

이 삽질을 시작한 이유: 그냥 windows가 싫어졌다. 랩에 있는 데스크탑이야 들어 있는 데이터도 많고 파티션이 분리 돼 있다고 해도 이것 저것 다시 설정하는 데에는 한 세월이다. 그리고 몇가지 OS 의존적인 프로그램들이 있어서 Linux로 갈아 엎는다는 것이 굉장한 스트레스를 준다. 어쩌면 갈아 엎고 나서 얼마 안 가 다시 windows로 돌아가야 할 일이 생길지도 모른다. 그래서, 노트북을 TZ25에서 TZ27로 바꾸게 된 김에 거기에 Linux를 깔기로 했다.

Hardware
아래 정보는 windows xp가 깔려 있던 상태에서 장치관리자 정보를 기록한 것이다.

모델명: VAIO VGN-TZ27LN

CPU+RAM: Intel Core2 CPU U7600 @ 1.20GHz, RAM 2GB

NICs: Marvell Yukon 88E8055 PCI-E Gigabit Ethernet Controller + Intel Wireless WiFi Link 4965AGN + Broadcom Bluetooth LAN Access Server Driver 20460A (확인요) + 1394 Net Adapter + HDAUDIO Soft Data Fax Modem with SmartCP

Block Devices: TOSHIBA MK1011GAH (100GB) + MATSHITA DVD-RAM UJ-852S USB Device + Ricoh Memory Stick Disk Device + Ricoh SD/MMC Disk Device

Display: Mobile Intel 945 Express Chipset x 2 + Plug-and-Play LCD Monitor

Pointing Devices: Alps Pointing-device for VAIO + HID 규격 마우스

Battery: MS ACPI-Compliant Control Method Battery (확인요)

Audio: Realtek High Definition Audio (확인요)

기타: Infineon Trusted Platform Module + Sony Visual Communication Camera VGP-VCC7 + TouchChip Fingerprint coprocessor

(확인요)라고 붙인 것은 windows가 알려주는 장치명이 정확한 것인지 확신하지 못하는 경우이다.

Linux Distribution
Linux 배포본이라면 본래 Debian을 좋아했지만 그거야 UI를 콘솔에서 직접 볼 일이 없을 때 얘기고, 노트북에 깔아서 쓰기에는 아무래도 Ubuntu가 좋을 것 같다. Ubuntu도 Debian에서 파생된 배포본이기 때문에 deb 패키징 시스템은 그대로 사용하고 있어서 RedHat 계열에 비해 패키지 관리는 수월할 것 같다(수월하다기보다 익숙하다고 해야 하려나 ㅋㅋ. 나는 Debian의 apt 시스템을 사랑한다). 같은 패키징 시스템을 쓴다고는 해도 Ubuntu가 Debian에 비해서 UI와 같이 사용자와의 interaction은 훨씬 친숙할 테니 이 점에서 Ubuntu가 Debian보다는 좋을 것 같다. 그런데 Ubuntu라고 해도 몇가지 종류 중에서 선택을 해야 하는데 예전부터 UI는 Gnome보다는 KDE를 좋아하긴 했지만 아무래도 Ubuntu에서는 Gnome 쪽이 KDE보다는 대세인 것으로 보인다. 잘 모를 때는 대세를 따르는 것이 좋다. 그래서 Ubuntu를 선택하기로 했다.

Ubuntu 정보: http://www.ubuntu.com/products/whatisubuntu/desktopedition

Ubuntu의 install disk는 Live CD로도 사용할 수 있고 설치용 disk로도 사용할 수 있다.

Install disk 다운로드 위치:
http://ftp.kaist.ac.kr/pub/ubuntu-cd/hardy/ubuntu-8.04.1-desktop-i386.iso

Live CD를 사용하지 안하고 netinst 이미지를 사용할 수도 있는데, 이 경우에는 사용자에게 보다 친숙한 GUI 환경에서 설치를 하지 않고 예전 Debian에서 사용되던 텍스트 형식의 설치 화면이 나온다. 그런데 네트웍 연결이 빠른 곳이라면 좋은 선택이지만 느린 곳에서 살고 있다면 netinst로 설치하는 작업이 스트레스가 될 수 있다. 기본적인 설치 시스템을 빼고 나머지 패키지들은 모조리 네트웍으로 다운로드 받아야 하기 때문이다.

Installation
일단 CD를 구운 다음 windows가 돌고 있는 상태에서 노트북에 삽입하면 이런 화면이 뜬다.

[Kubuntu CD Menu.png]

Full install을 선택하면 reboot option들이 나온다.

[reboot options]

물론, 꼭 windows가 도는 상태에서 CD를 넣어야 할 필요는 없다. 컴퓨터를 끄고 CD를 넣고 전원을 켜도 상관 없다. (오히려 이게 친숙한 방법이지) 어쨌거나 컴퓨터가 부팅될 때 CD가 들어가 있고 boot priority가 HDD보다 CD(혹은 DVD)가 높도록 돼 있기만 하면 된다.

[boot menu] 쿠분투 설치하기, 설치하지 않고 사용해 보기

설치하지 않고 사용해 보기를 선택해 보면, 아무런 설정을 하지 않고 동작되는 주변기기들은 대충 터치패드(두드리기 적용됨), 키보드 (function 키들 일부 동작함 - 음량조절 o, LCD 밝기 조절 o, sleep 모드 들어가기 x, LCD/외부화면 전환 x) 정도이다. 아무래도 노트북의 모든 기능들을 제대로 사용하기 위해서는 제대로 설치를 해봐야 알 듯하다.

Live CD로 부팅을 하고 나면 설치할 수 있는 방법이 두가지가 있다. 하나는 boot menu에서 "설치하지 않고 사용해 보기"를 선택하고 좀 둘러보다가 gnome 메뉴에서 설치 메뉴를 선택하는 방법이고, 또 하나는 boot menu에서 바로 설치 메뉴로 들어가는 방법이다. 결론적으로는 두 방법 모두 같은 GUI를 사용하기 때문에 차이는 없다고 봐도 된다.

파티션 문제
서버로 사용할 거라면 파티션을 잘게 나누는 것이 도움이 되지만 데스크탑으로 사용할 것이라면 굳이 이렇게 할 필요가 없다. lilo(linux loader, 예전에 kernel의 위치를 찾아서 부팅하기 위해서 사용되던 것으로 요즘에는 grub이 사용된다.)의 옛버전을 사용하던 리눅스에서는 서버로 쓰든 데스크탑으로 쓰든 /boot 디렉토리를 별도의 파티션으로 빼고 제일 첫번째 파티션으로 사용했다. 하지만 요즘의 lilo에서는 이렇게 할 필요가 없다. 또 요즘에는 lilo보다는 grub을 사용하는 경우가 대부분이다. 그러니 파티션을 여럿으로 쪼개야 하는 마지막 하나 남은 필요성도 없어진 셈이다. 그래서 일단은 전체 디스크를 사용한다. 그러면 swap 파티션만 따로 빼고 나머지는 남는 디스크를 통째로 사용한다.

설치 준비 단계는 6단계인데 사실 파티션 문제를 빼고 나면 고민할 만한 것들은 거의 없다. 실제 설치 단계에서는 따로 물어보거나 하는 것이 없다. 기다리다가 reboot하라는 메시지가 나오면 CD를 제거하고 reboot하면 된다.

Setup
Windows도 마찬가지이긴 하지만 Linux라는 물건은 설치가 끝났다고 만사가 끝나는 게 아니다. 동일한 목적을 위한 프로그램의 선택이 여러가지가 있기도 하고, 상업용으로 제작되어 돈주고 사는 OS가 아니기 때문에 어떤 패키지에는 직접 사용자가 이런 저런 설정을 해주어야 하는 경우도 있다. 또 나의 경우처럼 노트북에 설치하는 경우라면 노트북 하드웨어에 대한 자세한 기술 정보가 공개되지 않은 경우도 있어서 몇몇 주변기기에 대한 설정이 제대로 되어 있지 않을 수도 있고 아예 지원되지 않을 수도 있다. 이래저래 설치가 끝난 후에 진정한 삽질이 시작된다고 봐야 한다.

아래는 노트북에 따로 저장해 놓았던 설정 기록인데 한글로 적은 것도 있고 영어로 적은 것이 섞여있다. -.-;; 어쨌든 o가 앞에 붙은 것은 해결이 제대로 돼서 뒤에 더 손을 볼 필요가 없는 것이고, +는 어느정도 해결은 됐지만 언젠가 더 손을 봐야 하는 것이다. -의 경우는 문제는 있지만 아직 해결을 못 본 것이다.

o grub
USB로 설치를 했더니 주 HDD의 device가 이상해졌다. grub이 불평을 하면서 부팅을 중단하고 멈추면 일단 아무키나 누른다. 그러면 메뉴가 나온다. 첫번째 항목이 정상 부팅을 하는 옵션이다. 그런데 HDD device가 잘못 설정돼 있을 것이니 고쳐주지 않으면 제대로 부팅할 수 없다. 첫번재 항목을 선택한 상태에서 e를 누르면 부팅 명령을 수정한다. 몇가지 명령어로 구성돼 있는데, (hd1,0)라는 문자열이 있는 줄을 선택하고 e를 누른다. 그러면 그 명령줄이 화면에 표시되는데 hd1을 hd0로 바꾸고 enter를 친다. 다시 부팅 명령 화면으로 돌아간다. hd1이 hd0으로 바뀌어 있는지 확인한다. 그리고 b를 눌러 부팅한다. 일단 부팅하고 나면 /boot/grub/menu.lst를 열어서 hd1으로 돼 있는 것을 모두 hd0으로 바꾼다.

o firefox
ubuntu에는 kubuntu에서처럼 konqueror 같은 전용 browser가 설치되지 않고, 기본적으로 firefox가 설치됨. 한글화 돼 있음. 입맛에 맞는 addon을 설치하거나 개인적인 설정을 하는 것 외에 따로 손을 볼 만한 것은 없음.

o thunderbird
ubuntu에는 기본적으로 설치되지는 않음. aptitude를 이용하여 설치. 한글화 돼 있지 않음. 그러나 한글을 읽고 쓰는 데 문제는 없음.

font가 정말 보기 싫음. gnome 설정에서 모든 font를 Un Graphic으로 바꾸고 나도 제대로 적용되지 않음. gnome 설정을 따르지 않고 별도의 font 설정을 따르는 것으로 보임.
http://www.ubuntu.or.kr/viewtopic.php?f=11&t=785
위 글을 참고하여 ~/.mozilla-thunderbird/xxxx/chrome 디렉토리를 생성하고    userChrome.css를 새로 만들어 넣음.

o cpufreq
관련된 버그 리포트:
https://bugs.launchpad.net/ubuntu/+source/gnome-power-manager/+bug/156472

Run gconf-editor and set a gconf key:
/apps/gnome-power-manager/ui/cpufreq_show

o disable gnome zoom key binding (e.g. win+r)
gconf-editor를 열어서 /apps/compiz/plugins/ezoom 항목을 찾는다. 거기에서 win+r, win+c, win+l, win+v 등으로 설정돼 있는 항목들을 찾아서 disabled로 바꾼다. (win 키는 <Super>로 인식한다. 그러니 win+r이라면 <Super>r 로 돼 있다.)

o iPod sync
available via rhythmbox program

o automatic wifi connection at boot
solved by manual edit function of Gnome Network Manager

+ brightness control
밝기 조정은 원래 동작은 하지만 화면에 아이콘이 나오지는 않는다.
hal-system-lcd-get-brightness와 hal-system-lcd-set-brightness의 첫번째 line을 #!/bin/sh 에서 #!/bin/bash로 변경

그래도 별 변화는 못 느낀다. 저 workaround는 오래된 버그 리포트에서 찾은 것인데 화면에 아이콘이 나오는 것하고는 관계가 없는 것처럼 보인다.

+ HWP
http://charum.org/zb41/zboard.php?id=ubuntu&page=1&sn1=&divpage=1&category=5&sn=off&ss=on&sc=on&select_arrange=headnum&desc=asc&no=49
Install hwp2005 with a little hack. i.e. extend the trial period by removing install time info:
apps/haansoft/shared/installinformation/hwp2005trial/installedtime = 1216636557

window frame disappears! solve it!

+ bluetooth
https://answers.launchpad.net/ubuntu/+question/38592
Type in the command line:
$ sudo hciconfig hci0 reset
After that, vaio finds bluetooth mouse. anyway, it cannot connect to it using bluetooth manager.

http://ubuntuforums.org/showthread.php?p=609310
found a fix to work around a mouse problem. but this looks rather ugly.

Here is my own work around:
edit /etc/default/bluetooth and find HIDD_ENABLED and set to 1;
add "--connect xx:xx:xx:xx:xx:xx" option to the HIDD_OPTION;
restart a bluetooth service by run /etc/init.d/bluetooth start (or restart)

Still problem. I still need "hciconfig hci0 reset". I added this to /etc/rc.local. Now, mouse works. But, I don't know about other things.

See https://help.ubuntu.com/community/BluetoothSetup for further information.

+ sleep and hibernate mode
Commented out sonypi in /etc/init.d/hotkey-setup line 142, but sleep and hibernate still don't work. Anyway, sonypi module seems to have some problem with sony-laptop module. Remove it all the way.

https://bugs.launchpad.net/ubuntu/+source/linux-source-2.6.22/+bug/164398
This helps.
add the following line to /etc/default/acpi-support:
MODULES="iwl4965"
add the following line to /etc/pm/config.d/modules:
SUSPEND_MODULES="ehci_hcd uhci_hcd"
Now, suspend works.

Overall, wireless lan and usb things seem problematic.

Anyway, hibernation does not work yet.
See https://bugs.launchpad.net/ubuntu/+source/linux/+bug/129224 for future investigation

+ internet explorer
installed agent switcher plugin to firefox to fake agent type;
installed ies4linux;

see http://www.tatanka.com.br/ies4linux/page/Installation:Ubuntu
but, font setting is ugly, and there is no activex.

tried with --install-corefonts
noticed not a big change

According to http://www.gagme.com/greg/linux/activex-linux.php, I installed mfc42.dll to enable activex. Now, it seems to work in some cases, but not perfectly.

Bah! Long way to get it work! Forget about it, and just use real Windows XP in VirtualBox. (See virtual machine below)

o instant messenger (all using Pidgin)
MSN by MSN plugin

NateOn by NateOn plugin from http://dev.haz3.com/phpBB3/viewforum.php?f=9
added these two sources to /etc/apt/sources.list:
deb http://ppa.launchpad.net/pidgin-nateon/ubuntu hardy main
deb-src http://ppa.launchpad.net/pidgin-nateon/ubuntu hardy main
and then udpate and install pidgin-nateon package. However, apt will compain that the packages are from untrusted source. Nevermind. I need it.

o virtual machine
Installed virtualbox-ose + libqt3-mt + libxalan110 + libxerces27
Installed virtualbox-ose-modules-2.6.24-19-generic

Some tweaks: see https://help.ubuntu.com/community/VirtualBox
install scim-bridge-client-qt to solve Host key problem related to SCIM
run virtualbox with "taskset -c 1  virtualbox" to solve CPU consumption problem

Install VirtualBox Guest Addition to the guest OS. This will gives shared mouse activities between host and guest OS.

Run virtual machine without front-end screen by
$ taskset -c 1 VBoxSDL -vm <vmname>

VirtualBox doesn't start after I upgrade the kernel from 2.6.24-19 to 2.6.24-20. The reason is that VirtualBox needs a package named as virtualbox-ose-modules-2.6.24-20, but there is no such package yet. One solution is to revert to the previous kernel 2.6.24-19, and the other is to wait until virtualbox packages are updated. I don't have enough time to compile virtualbox-ose from scratch. :(

+ external monitor
found a hint at http://ubuntuforums.org/showthread.php?p=3986738&highlight=VGA#post3986738.
This post is pointing out a more detailed document at http://www.thinkwiki.org/wiki/Sample_Fn-F7_script. Check it out later.

+ webcam
It seems that I have to handle uvcvideo problem.

I found another solution without handling uvcvideo problem. (actually I don't know the relation between this solution and uvcvideo)
see http://wiki.mediati.org/Installation
svn co http://svn.mediati.org/svn/r5u870/trunk r5u870
cd r5u79
make
sudo make install
sudo sudo modprobe r5u870

Now, it works with ekiga. (I did not try other programs.)
Update: it works incorrectly after resuming from suspend.

+ printer driver
I could easily add HP 4300 dtn print driver using gnome's system-config-printer.

But, when I print plain ascii file containing unicode Korean characters, it prints as up-side-down question marks (?). There seems to be a font problem. I'll try installing Korean PS fonts.

o touchpad things
problems: touchpad sensitivity, tapping preference, tapped drag preference. See http://www.cs.utexas.edu/~erkin/home/tools/xorg.conf

o slow DNS problem

- evolution and google calendar

- battery care function
I need some way to handle battery care function.

- power saving!
I installed powertop to help enhancing battery life. let's do care about it later.

- cdrom auto power down for power saving



일단은 이 정도까지. 뭔가 더 건드리게 되면 update하기로 한다.

어라... 이미지는 캡쳐 안하고 그냥 글을 올렸었군.. -.-;;
2008.08.11 14:16

통상적인 APM(apache + php + mysql) 환경에서 소규모의 프로젝트를 할 때에는 대개 apache와 php와 mysql이 모두 한 서버에서 돌아가는 경우가 있다. 이런 경우라면 php와 mysql 사이의 통신을 모두 local에서만 하도록 하면 안전은 별로 신경을 쓸 필요가 없다.

그런데 만약에 DB를 따로 분리하면 php가 돌아가는 머신과 DB 서버가 돌아가는 머신 사이의 통신을 안전하게 보호해야 하지 않을까 하는 생각이 들기 마련이다. 바쁘고 정신 없다면 그냥 사용자 인증만 하도록 하면 되겠지만, 누군가가 sniffing을 해 버리면 DB의 내용이 노출된다. 그러니 이런 때에는 암호 통신을 하면 좋은데 생각해 볼 수 있는 방법은 ssh tunnel을 사용하는 것과 SSL을 사용하는 것이 있겠다. SSH tunnel을 사용하는 것은 php에서 이런 것이 지원되는지 아직 모르니 일단 SSL을 이용하는 것에 대해서 썰을 풀도록 하자.

(이건 혼자서 심심풀이 땅콩, 내지는 나중에 내가 찾아보기 쉽게 쓰는 것이니 다른 곳에 더 좋은 문서가 있을 수도 있음.)

사용한 환경 (이건 뭐 적당히 달라도 될 듯. 버젼에 영향을 받는 경우는 본문 중에 따로 표시)
Server: Debian etch, MySQL 5.0, OpenSSL 0.9.8
Client: Debian etch, MySQL 5.0 C library, PHP 5, PHP PEAR, OpenSSL 0.9.8

참고한 문서
MySQL 5.0 Documentation: Using SSL Connections
MySQL 5.0 Documentation: SSL Command Options
PEAR Manual: DB: Introduction - connect
PHP Manual: mysqli_ssl_set

MySQL 문서에 의하면 설치된 MySQL이 SSL을 지원하는지를 확인하는 4가지 절차가 나와 있다.
여기에서는 패키지로 설치하는 것만 생각할 테니 다음의 절차를 통한다.
(이후 노란 배경에 #는 shell prompt, mysql>은 DB의 command prompt를 나타냄.
회색 배경은 명령의 결과, 또는 파일의 내용임.)

1. SSL이 지원되도록 compile 된 패키지인지 확인
서버에서 다음을 실행한다.
# mysqld --ssl --help

에러가 나오지 않고 대충
mysqld  Ver 5.0.45-Debian_1-log for pc-linux-gnu on i486 (Debian etch distribution)
Copyright (C) 2000 MySQL AB, by Monty and others
This software comes with ABSOLUTELY NO WARRANTY. This is free software,
and you are welcome to modify and redistribute it under the GPL license

Starts the MySQL database server

Usage: mysqld [OPTIONS]

For more help options (several pages), use mysqld --verbose --help

와 같은 식의  안내 메시지가 나오면 된 것이다.
(내가 사용된 Debian 패키지에는 SSL이 지원되는 것이 들어가 있다.)

2. Run time에서 SSL 옵션이 켜져 있는지 확인
서버에서 다음을 실행한다.
# mysql -u root -p (DB에 root로 로긴한다. 물론 패스워드를 입력해야 한다.)
mysql> SHOW VARIABLES LIKE 'have_openssl';

그러면 다음과 같은 output이 나올 것이다.
+---------------+----------+
| Variable_name | Value    |
+---------------+----------+
| have_openssl  | DISABLED |
+---------------+----------+
1 row in set (0.00 sec)
내가 사용한 패키지의 기본 설정으로는 openssl을 사용하는 옵션이 꺼져 있다. (물론 지원은 된다.)이제 저 옵션을 켜야 하는데, 서버를 다시 시작하지 않고도 할 수 있을 테지만, 일단은 문서에 나오는 대로 서버를 새로 시작하는 방법을 따른다. (물론, 이렇게 해야 서버를 다른 이유로 재시작할 때도 SSL 옵션이 켜지게 되겠지.)

참고로 MySQL은 OpenSSL 말고 내장된 yaSSL을 사용할 수도 있는데, 심심풀이 삼아서 알아보려면 다음을 실행한다.
mysql> show variables like '%ssl%';
결과는 다음과 같을 것이다.
+---------------+----------+
| Variable_name | Value    |
+---------------+----------+
| have_openssl  | DISABLED |
| have_ssl      | DISABLED |
| ssl_ca        |          |
| ssl_capath    |          |
| ssl_cert      |          |
| ssl_cipher    |          |
| ssl_key       |          |
+---------------+----------+
7 rows in set (0.00 sec)
위에서 보는 바와 같이 yaSSL도 지금은 사용하지 않도록 돼 있다. 그리고 인증서나 기타 SSL과 관련된 정보들이 하나도 들어가 있지 않음을 알 수 있다.

3. SSL 관련 서버쪽 옵션
서버에서 다음을 실행해야 한다. "실행한다"가 아닌 것에 주의 ^^; 뭘 실행해야 하는 것인지 일단 살펴보기로 하자.
# mysqld --ssl-ca=cacert.pem --ssl-cert=server-cert.pem --ssl-key=server-key.pem
이렇게 실행되도록 만들어야 하는데 일단 사용되는 옵션을 조금만 뜯어보면,
  1. --ssl-ca 옵션은 CA의 리스트와 그 인증서들을 가져올 파일을 지정해 주는 것이고,
  2. --ssl-cert 옵션은 이 서버가 사용할 공개키가 포함된 인증서가 저장된 파일을 지정해 주는 것이고,
  3. --ssl-key 옵션은 이 서버가 사용할 비밀키가 저장된 파일을 지정해 주는 것이다.
일단은 비밀키, 공개키와 인증서를 만들어야 함을 알 수 있다. 이것들을 만들기 위해서는 잠시 MySQL에서 벗어나서 OpenSSL을 가지고 놀아야 한다.
참고로 Debian 패키지에 딸려 오는 설정 파일(/etc/mysql/my.cnf)에는 다음과 같은 부분이 있다.
# For generating SSL certificates I recommend the OpenSSL GUI "tinyca".
#
# ssl-ca=/etc/mysql/cacert.pem
# ssl-cert=/etc/mysql/server-cert.pem
# ssl-key=/etc/mysql/server-key.pem
세가지 옵션이 comment 처리돼 있고, 그 위의 설명에는 인증서들을 만드는 데에 tinyca라는 프로그램을 사용하면 좋다고 돼 있다. 이 tinyca라는 게 무엇이냐 하면 GUI로 인증서를 만들어주는 툴인데, 나의 경우 서버에는 GUI 툴을 실행하기 위한 X-window 관련 패키지들이 하나도 깔려 있지 않다. 그러니 저 패키지를 깔려면 그다지 사용하게 되지 않을 대량의 라이브러리들을 깔아야 한다는 의미가 되겠다. 그런 건 싫지. 그리고 왠지 guru의 분위기를 풍겨 보자면 openssl을 직접 가지고 놀아 보는 게 좋을 것 같다. 므흐흐... (아, 정말 쓸 데 없는 이유다. -.-;;)

4. 인증서 만들기
인증서라는 것은 자신의 공개키와, 그 공개키를 다른 사람이 믿을 수 있게 만들기 위해서 CA라는 인증기관의 서명을 덧붙인 것을 말한다. 그런데 문제는 CA의 서명을 받으려면 돈도 들지 모르고 이래 저래 귀찮아진다. 그러니 여기서 사용할 것들은 모두 "local"에서만 의미를 갖도록 만든다. 무슨 말이냐 하면 혼자서 CA 역할도 하고 북치고 장구치고 하는 것이다. 이 글의 목적이 애초에 제대로 된 인증 시스템 안에 편입하는 것이 아니고, 단순히 "암호화 통신"만을 가능하게 만들려는 것이기 때문이다.

일단 서버에 이미 openssl을 위해서 openssl 관련 라이브러리들이 깔려 있어야 하니
# aptitude install openssl
이라고 해서 같이 설치할 거냐고 물어보는 관련 패키지들까지 모조리 설치한다. 그 다음에
# openssl -h
라고 실행하면 '-h'라는 명령이 없다고 불평은 하지만, 착하게도 사용 가능한 명령어 목록을 보여준다. :)
openssl:Error: '-h' is an invalid command.

Standard commands
asn1parse      ca             ciphers        crl            crl2pkcs7     
dgst           dh             dhparam        dsa            dsaparam      
ec             ecparam        enc            engine         errstr        
gendh          gendsa         genrsa         nseq           ocsp          
passwd         pkcs12         pkcs7          pkcs8          prime         
rand           req            rsa            rsautl         s_client      
s_server       s_time         sess_id        smime          speed         
spkac          verify         version        x509          

Message Digest commands (see the `dgst' command for more details)
md2            md4            md5            rmd160         sha           
sha1          

Cipher commands (see the `enc' command for more details)
aes-128-cbc    aes-128-ecb    aes-192-cbc    aes-192-ecb    aes-256-cbc   
aes-256-ecb    base64         bf             bf-cbc         bf-cfb        
bf-ecb         bf-ofb         cast           cast-cbc       cast5-cbc     
cast5-cfb      cast5-ecb      cast5-ofb      des            des-cbc       
des-cfb        des-ecb        des-ede        des-ede-cbc    des-ede-cfb   
des-ede-ofb    des-ede3       des-ede3-cbc   des-ede3-cfb   des-ede3-ofb  
des-ofb        des3           desx           rc2            rc2-40-cbc    
rc2-64-cbc     rc2-cbc        rc2-cfb        rc2-ecb        rc2-ofb       
rc4            rc4-40        

이 중에서 필요한 명령은 genrsa와 req 명령이다. Debian의 경우 패키지로 깔면 man page도 깔렸을 테니
# man req
라고 하면 openssl에서 req 명령의 설명을 보여준다. 간단히 썰을 풀면, 인증서를 검증하는 것과 인증서를 생성하는 것을 해주는 명령이라고 한다. 우리가 여기서 필요한 것은 인증서를 생성하는 것이다. 설명 중에 보면 "It can additionally create self signed certificates for use as root CAs for example."라고 하는데 여기서 나는 root CA의 역할까지 몽땅 해버릴 작정이다. :)

우선 genrsa 명령으로 서명 받을 키를 만든다. 명령 이름에서 유추할 수 있듯이 이 명령은 RSA에 사용할 private key를 만드는 명령이다.
# openssl genrsa -out myprivkey.pem 2048
openssl에 관련된 어떤 문서들을 보면 -des3이나 idea나 -des 같은 옵션을 붙이도록 돼 있는데 여기서는 이렇게 하면 안된다. 이 키는 서버가 (그러니까 사람이 아니라 프로그램이) 사용할 키이기 때문이다. 참고로 저 옵션 중에 하나를 붙이면 비밀키가 암호화돼서 저장되기 때문에 키를 사용하려고 할 때마다 암호를 풀기 위해서 passphrase를 입력해 줘야 한다. 프로그램이라면 당연히 그렇게 할 수가 없지.

그 다음에는 저 키로부터 공개키를 얻어서 그것을 서명받아야 한다.
# openssl req -new -x509 -key myprivkey.pem -out mycacert.pem -days 0
이렇게 만든 인증서를 self-certified certificate이라고 부른다. 알아 듣기 쉬운 말로 하면, 자신의 공개키가 맞다는 것을 자기 이름을 걸고 보증한다는 뜻이다. 제대로는 자신의 공개키를 자신의 비밀키로 서명한 것이다. 이런 것은 원래 root CA나 하는 일인데, 나는 혼자서 북치고 장구칠 작정이기 때문에 혼자서 키 만들고 혼자서 서명한다. ^^

역시나 심심풀이 삼아서 이것을 검증해 보면
# openssl verify -verbose -CAfile mycacert.pem mycacert.pem
mycacert.pem: OK
라고 나온다.

5. 서버 설정하기
Debian의 경우 mysql의 설정파일이 /etc/mysql/my.cnf 라고 돼 있다. 이 파일에서 다음 부분을 찾아서 수정한다.
# For generating SSL certificates I recommend the OpenSSL GUI "tinyca".
#
# ssl-ca=/etc/mysql/cacert.pem
# ssl-cert=/etc/mysql/server-cert.pem
# ssl-key=/etc/mysql/server-key.pem
아래와 같이 바꾼다.
# For generating SSL certificates I recommend the OpenSSL GUI "tinyca".
#
ssl-ca=/etc/mysql/mycacert.pem
ssl-cert=/etc/mysql/mycacert.pem
ssl-key=/etc/mysql/myprivkey.pem
물론 위에서 만든 myprivkey.pem과 mycacert.pem은 /etc/mysql에 넣어두어야 한다.
그 다음에 서버를 재실행한다.
# /etc/init.d/mysql restart

이제 mysql에 로그인해서 살펴보면
mysql> show variables like '%ssl%';
+---------------+--------------------------+
| Variable_name | Value                    |
+---------------+--------------------------+
| have_openssl  | YES                      |
| have_ssl      | YES                      |
| ssl_ca        | /etc/mysql/mycacert.pem  |
| ssl_capath    |                          |
| ssl_cert      | /etc/mysql/mycacert.pem  |
| ssl_cipher    |                          |
| ssl_key       | /etc/mysql/myprivkey.pem |
+---------------+--------------------------+
7 rows in set (0.00 sec)
요렇게 나오는 것을 볼 수 있다.

안타까운 것은 여기까지는 그냥 준비라는 사실 ^^
이제 DB 서버에서 grant 명령 등을 이용해서 사용자 설정들을 해 줘야 한다.

6. 사용자 등록
일단 시험용 database를 하나 만든다.
mysql> create database fortest;
그리고 시험용 사용자를 만든다.
mysql> grant all privileges on fortest.* to testuser@testhost identified by 'testpass' require SSL;
다른 것들은 mysql의 설명을 참조하고, 중요한 것은 끝에 require SSL이 붙어야 한다는 것이다.

7. Client 연결
client 쪽, 그러니까 php가 돌고 있는 쪽에서는 몇가지 설정할 것이 없는데 설치돼 있는 패키지가 ssl을 지원하도록 컴파일 된 것이기만 하면 된다. 내가 설치한 패키지는 지원이 된다. 그러니 남은 것은 연결할 때 어떤 option들을 주느냐이다.

7.1 mysql 명령을 이용하는 경우
이건 거의 시험삼아 접속해 보는 경우일 것이다.
client에서 다음을 실행한다.
# mysql -u testuser -p -h server.mydomain.net --ssl --ssl-ca=mycacert.pem fortest
물론, mycacert.pem 파일이 다른 곳에 있으면 그곳까지의 경로를 다 써준다.
앞서서 설정한 패스워드(testpass)를 입력하면 접속이 돼야 한다. 여기서 물론 server.mydomain.net은 가상의 주소이고 실제로는 자기 서버 주소를 쓴다.

7.2 PEAR 중의 DB.php를 이용할 경우
PEAR 패키지 중에 있는 DB module은 dsn이라는 것을 이용하여 DB 서버가 어디에 있고 어떻게 접속할 것인지 정한다. dsn은 웹 페이지 URL과 유사한 string 형태로 지정할 수도 있고 array 형태로 지정할 수도 있는데, 실수를 방지하기에도 그렇고 보기에도 array 형태가 좋다.
$dsn = array(
    'phptype'   => 'mysqli',
    'username'  => 'testuser',
    'password'  => 'testpass',
    'hostspec'  => 'server.mydomain.net',
    'database'  => 'fortest',
    #'key'      => <optional>,
    #'cert'     => <optional>,
    'ca'        => 'mycacert.pem',
    #'capath'   => <optional>,
    #'cipher'   => <optional>,
); 
$options = array(
    'ssl'       => true,
);
$db_link = DB::connect($dsn, $options);
#로 comment 처리된 부분은 써줘도 안써줘도 되는데 지금처럼 혼자서 북치고 장구치는 상황에서는 안 써주는 게 낫다.

7.3 php의 mysqli_connect(), mysqli_ssl_set()을 이용할 경우
SSL을 이용하려면 mysql_* function들은 안되고 mysqli_* function들을 써야 한다. 저 i는 improved의 의미라나. 어쨌든, 그런데 이 경우에 persistent connection을 사용할 수 없게 된다. 이건 아쉽..

일단 mysqli_init()으로 db link하나를 생성한다. (맞다. 쫌 불편해진다.)
$db = mysqli_init();

mysqli_ssl_set()을 이용해서 ssl관련 변수들을 설정한다.
원래 syntax는 mysqli_ssl_set(mysqli $link, string $key, string $cert, string $ca, string $capath, string $cipher)인데, 여기에서 $link와 $ca 빼고는 설정 안해도 되기 때문에 모두 NULL로 한다. 그러면 다음과 같이 된다.
mysqli_ssl_set($db, NULL, NULL, 'mycacert.pem', NULL, NULL);

그 다음에 실제로 연결한다. (function이름도 mysqli_real_connect()이다. ^^)
mysqli_real_connect($db, 'server.mydomain.net', 'testuser', 'testpass', 'fortest');

8. 마무리
음... 마무리는... 음...
php의 mysqli extension을 쓰면 좀 불편해지기도 하고 persistent connection을 쓸 수 없어지는 문제도 있는데, PEAR를 사용하면 persistent connection을 쓸 수 있도록 하는 옵션이 있다. 이런 면에서는 PEAR를 사용하는 편이 좋을 것 같긴 하다. (근데 실제로 persistent connection이 되는지 안 되는지 확인은 안 해 봤음. :p)

ps. 지금 보니 PEAR를 이용하더라도 phptype이 mysqli로 돼 있으면 결국 php의 mysqli extension을 내부적으로 사용하기 때문에 presistent connection은 사용할 수 없다. 그러니까, 결론은 ssl connection을 사용하느냐 persistent connection을 사용하느냐의 선택이 돼 버린다는 얘기다. 쩝... 하긴 어딘가에서 보니 persistent connection이 꼭 좋은 건 아니라고 돼 있긴 하다.

'Linux & Unix' 카테고리의 다른 글

VAIO + Ubuntu 사용  (1) 2008.08.08
MoniWiki Sitemap Plugin  (0) 2008.04.25
SSL을 이용한 MySQL 연결  (3) 2007.11.12
Debian Linux에서 openafs client 설치  (0) 2007.04.18
ssh-agent 활용법 두번째  (0) 2007.03.29
hanterm에서 status bar 완전히 없애기  (0) 2007.01.17
  
트랙백 0  |  댓글   |
와~~ 어렵네요 ㅎㅎ
그래도 먼가 잡히는거 같네요 정말 감사해요 ㅎㅎㅎ
2009.07.29 14:25

cooleeo
통상적인 APM(apache + php + mysql) 환경에서 소규모의 프로젝트를 할 때에는때에는 대개 apache와 php와 mysql이 모두 한 서버에서 돌아가는 경우가 있다. 이런이런 경우라면 php와 mysql 사이의 통신을 모두 local에서만 하도록 하면 안전은 별로별로 신경을 쓸 필요가 없다

위와같은 경우 서버와 클라이언트 사이의 통신은 신경안써도 되나요?
2009.10.20 15:15
모두 같은 머신 안에서 돌아가고 있다면 통신 내용이 네트웍을 타고 왔다갔다 하지는 않으니 신경 쓸 게 별로 없죠. 통신 내용을 보호할 것이 아니고 서버가 해킹당하지 않게 보호하는 것만 하면 되지 않을까요? 뭐, 그외에 mysql이 local에서의 요청에만 응답하도록 설정할 필요도 있겠네요. 그런데 그런 건 어차피 ssl하고는 상관 없는 얘기지요.

2009.10.20 20:02

http://www.vmware.com/support/kb/enduser/std_adp.php?p_faqid=1420

주된 이유는 linux guest는 1초에 2000번(커널의 SMP 옵션이 켜져 있고 실제 CPU가
하나인 경우)의 timer interrupt를 날리는데 host(나의 경우 windows xp)가 1초에
1000번의 timer interrupt만을 발생시키기 때문이다. linux guest가 이렇게 많은
timer interrupt를 발생시키는 것을 방지하기 위해서 부팅시 다음의 옵션을
추가한다.

nosmp noapic nolapic
windows와 linux는 default charset encoding이 다르다.
그래서 그냥은 한글 파일 이름들이 호환이 안된다.
/etc/samba/smb.conf 에 다음과 같은 한줄을 [global] 어디엔가에 추가한다.

unix charset = euc-kr
  
트랙백 0  |  댓글   |
linux 에서 방송을 하기 위해서는 일단 두가지가 있어야 한다.

1. 방송 서버 : icecast가 거의 독보적인 존재다.
2. streamer : encoder라고 부르기도 하고, source 라고 부르기도 한다.
icecast와 함께 사용하기 좋은 liveice 라는 놈이 있다.

streamer ----> casting server ----> listener

요런 형태가 된다. streamer와 casting server는 꼭 같인 리눅스 머신에
있을 필요도 없고, streamer의 경우 꼭 리눅스 위에서 돌아가는
녀석일 필요도 없다. 예를 들면, casting server는 따로 돌리고,
window 에서 winamp 같은 녀석으로 casting server에 stream을 날려도
된다.

쨌든..

나의 경우, 방에는 나의 전용 web + casting server 가 있고,
내 몸은 랩에 있는 내 책상에서 win2000 머신에 앉아 있는 경우가
대부분이다.

내 리눅스박스는 데비안 sid를 사용하고 있다. 그래서 편하게 deb package로
만들어져 있는 icecast, liveice를 설치했다. 물론, 설정은 직접
해줘야 한다.

'Linux & Unix' 카테고리의 다른 글

perl과 endian  (0) 2003.11.16
Solaris에서 scandir( ) 사용하기.  (0) 2003.04.19
linux에서 방송하기.  (0) 2003.02.16
mutt에서 text/html 보기.  (0) 2003.01.27
vim 에서의 del key와 bs key  (0) 2003.01.19
debian sid 에서 한글 사용.  (0) 2003.01.16
mutt에서 text/html로 된 메일 내용을 보기 위해서는
-----------(전략)------------
auto_view text/html
-----------(후략)------------
와 같은 내용이 home directory의 .muttrc라는 화일 어딘가에
있어야 한다.
그런데, 이것만 가지고는 부족하다. mutt가 terminal based
mail client라는 것을 감안한다면, text/html 의 내용을
역시 terminal에서 보여줄 수 있는 프로그램으로 제대로
연결해 주어야 한다. 이것은 /etc/mailcap 이라는 화일을
수정함으로써 해결할 수 있다.
/etc/mailcap은 여러가지 mime-type 에 대한 handler들을
정의해 주는 화일이다.

Debian sid 의 경우에 /etc/mailcap 의 앞쪽에는
------------------(전략)------------------------
########################################################################
#
# User section follows: Any entries included in this section will take
# precedence over those created by "update-mime". DO NOT CHANGE the
# "User Section Begins" and "User Section Ends" lines, or anything
outside
# of this section!
#

# ----- User Section Begins ----- #
# ----- User Section Ends ----- #

########################################################################
------------------(후략)------------------------
와 같은 내용이 있다. 즉 User Section 이라는 곳에
사용자가 마음대로 이것저것을 넣을 수 있다. 이후의
내용은 system default가 된다.
Debian sid 에서는 terminal의 경우에 system default로
w3m을 통해서 text/html 을 보여준다. 그런데, sid 에 있는
w3m은 multibyte 문자를 제대로 처리해주지 않기 때문에
보는데 불편함이 있다. w3m의 multibyte version인 w3mmee를
사용하면 되는데, system default인 w3m 보다 우선권을 갖게
하기 위해서 w3mmee에 해당하는 내용을 User Section에 넣는다.

# ----- User Section Begins ----- #
text/html; /usr/bin/w3mmee -dump -T text/html '%s'; copiousoutput;
description=HTML Text; nametemplate=%s.html
# ----- User Section Ends ----- #

와 같이 넣어준다.

물론, w3mmee 라는 이름으로 w3m이 깔려 있어야 한다. -.-;;; 당연하지..

정상적인 상황이라면,,,,, 다 잘될 거고.. 나도 잘 된다. 음하하.

'Linux & Unix' 카테고리의 다른 글

perl과 endian  (0) 2003.11.16
Solaris에서 scandir( ) 사용하기.  (0) 2003.04.19
linux에서 방송하기.  (0) 2003.02.16
mutt에서 text/html 보기.  (0) 2003.01.27
vim 에서의 del key와 bs key  (0) 2003.01.19
debian sid 에서 한글 사용.  (0) 2003.01.16
  
트랙백 0  |  댓글   |
발견된 증상 :
방에 있는 컴에 Debian sid 를 깔았다.
그런데, X 에서 ami 를 띄울 수가 없는 것이다.
띄울려고 하면 Xlib 가 한글 locale 지원하지 않는다고 한다.

발견한 원인 :
원인은 간단한 것이었다. 말 그대로 Xlib 가 "현재"의 한글
locale을 지원하지 않는 것이었다. 그런데, 여기서 문제가 있다.
현재 Debian sid 에서 locales 라는 패키지를 설치하면
시스템에 설치할 locale을 고르고 어떤 것을 default로 할 것인지
선택하게 한다. 그런데, 여기에는 ko_KR.EUC-KR 에 해당하는
locale이 있다. 이것으로 locale을 설정하면 대부분의
terminal based software에서 한글을 문제없이 사용할 수 있다.
그런데, X window 에서는 문제가 발생한다.
/usr/X11R6/lib/X11/locale/locale.alias 라는 file에는
여러가지 locale 이름들을 실제로 X library가 사용할
locale로 연결해주게 되는데 이 file에 문제가 있었다.
file의 앞 부분에는

(전략)
ko ko_KR.eucKR
ko_KR ko_KR.eucKR
ko_KR.EUC ko_KR.eucKR
ko_KR.EUC-KR ko_KR.eucKR
ko_KR.euc ko_KR.eucKR
ko_KR.euckr ko_KR.eucKR
ko_KR.utf8 ko_KR.UTF-8
(후략)

이러한 정보들이 있어서 현재 시스템 default로 되어 있는
ko_KR.EUC-KR 이 X에서 실제로 사용하는 ko_KR.eucKR 로 연결이
되는 것처럼 보인다.
그런데, 이 file의 뒷부분에 보면 이런 내용이 있다.

(전략)
ko: ko_KR.eucKR
ko_KR: ko_KR.eucKR
ko_KR.EUC: ko_KR.eucKR
ko_KR.euc: ko_KR.eucKR
ko_KR.euckr: ko_KR.eucKR
ko_KR.utf8: ko_KR.UTF-8
(후략)

그렇다. 앞부분의 내용은 뭔가 잘못 만들어진 것이고 실제로는
이 뒷부분에 있는 것을 참조하고 있는 것이다. -.-;;;;
어쩌다 이런 일이 발생했는지는 모르겠지만, 어쨌든 나는
문제를 해결해야 했다.

해결책 :
물론, 저 locale.alias 라는 file을 고치면 제대로 문제를
해결하는 것이 되지만, 저 화일은 패키지에서 설치한 녀석이기
때문에 나중에라도 X window 관련 패키지가 update되면
문제가 생길 수가 있다. 그리고, 내가 대부분의 문제를 해결하는
방식이 시스템에 있는 화일들을 가능하면 적게 바꾸면서
해결하는 것이라서리...
/etc/environment 라는 화일에 저장되어 있는
시스템 default locale을
LANG=ko_KR.EUC-KR
에서
LANG=ko_KR.eucKR
로 바꿨다.

현재 :
이제는 terminal에서의 한글 사용과 X 에서의 한글 사용에
둘다 문제가 없다. :)

'Linux & Unix' 카테고리의 다른 글

perl과 endian  (0) 2003.11.16
Solaris에서 scandir( ) 사용하기.  (0) 2003.04.19
linux에서 방송하기.  (0) 2003.02.16
mutt에서 text/html 보기.  (0) 2003.01.27
vim 에서의 del key와 bs key  (0) 2003.01.19
debian sid 에서 한글 사용.  (0) 2003.01.16
  
트랙백 0  |  댓글   |
 이전  1   다음 

fotowall :: ncloud RSS Feeds today : 1   yesterday : 12
total : 176,526