이 삽질을 시작한 이유: 그냥 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하기로 한다.

  
트랙백   |  댓글   |
PosB에 올린 글 퍼옴.
http://posb.postech.ac.kr/board/readArticle.jsp?aid=2712012

----------------------------------------------------------------

Firefox에 보면 북마크 항목에 키워드를 지정해서 주소창에서 입력하면
바로 이동하는 기능이 있습니다. 여기에 더해서 간단한 치환문자를
통해서 다양한 검색을 할 수도 있습니다. 굳이 검색 엔진을 firefox에
등록하지 않고도 말이지요.

예를 들면 구글 검색을 주소창에서 바로 하려면
http://www.google.co.kr/search?hl=ko&ie=UTF-8&newwindow=1&q=%s
를 북마크 해 놓고 키워드를 정해줍니다. (저 같은 경우 gg로 설정)
그러면 ctrl+T 또는 ctrl+L을 누르고 주소창에
gg who am i
라고 입력하고 엔터를 치면 구글에서 "who am i"라는 문자열을
검색합니다.

온라인 사전을 이용하려면
http://engdic.daum.net/dicen/search_result_total.do?q=%s
를 북마크 해 놓고 키워드를 정해줍니다. (저 같은 경우 dic로 설정)
그러면 주소창에
dic myungbagi
라고 입력하면 엔터를 치면 다음 영어사전에서 myungbagi라는 단어를
검색합니다.

그외에도 다양한 응용이 가능합니다.
구글 scholar 검색은
http://scholar.google.com/scholar?q=%s

위키피디아 검색은
http://en.wikipedia.org/wiki/Special:Search/%s

등등등...

원래 처음에는 야후 사전, 그 다음에 네이년 온라인 사전을 이용하다가
다음의 클릭질 한번이라도 더 늘려주려고 이제는 다음 온라인 사전으로
바꿨습니다. 바꾸는 김에 이런 기능 모르고 있던 다른 분들에게
유용한 정보인 것 같아서 글 올립니다. ^^


  
트랙백   |  댓글   |
구글 웹마스터 도구에는 각 사이트의 sitemap을 등록하여 검색 엔진이
어느 주소를 검색 목록에 추가할 것인지를 알 수 있도록 하는 기능이 있는데,
Sitemap protocol이라는 형식의 파일을 사용해도 되고, 기존에 많이 쓰이고
있는 RSS 형식을 사용해도 된다. 그런데, MoniWiki를 사용하는 위키 사이트의
RSS를 구글 웹마스터 도구에 등록하려고 봤더니, MoniWiki에 들어 있는 rss plugin을 통해서는
제대로 되지 않는다. 티스토리에서 제공하는 rss는 잘 등록되는 것을
보면 MoniWiki에서 사용하는 rss 형식이 구글에서 요구하는 rss 형식과
잘 맞지 않는 모양이다. 하지만 어차피 rss protocol에 대해서 잘 알고 있는 것이
아니고 Sitemap 문법이 무척 간단하기 때문에 기존의 rss plugin을 고치기보다
새롭게 sitemap plugin을 하나 간단히 만들었다.

XML 형식은 sitemaps.org에 있는 것을 참조했고,
원래 MoniWiki에 들어 있는 rss_rc plugin과 TitleIndex macro를 참고했다.
현재는 아주아주 단순하게 각 페이지 목록을 추출해서 sitemap에 오로지 위치만
포함시킨다. 다른 정보는 하나도 안 들어간다. -.-;;
버젼은 일단 0.1로 메긴다.


확인 결과 일단은 동작을 하는 듯 하다.
사용자 삽입 이미지

스크린샷을 보니 위키에 페이지가 48개 뿐이라니 쫌 한심하다. ㅋㅋ
아니지, 실제 내용이 들어 있는 페이지는 저거의 반수도 안될 것인데
정말 한심하다. ㅠ.ㅠ

  
트랙백   |  댓글   |
엊그제 Nintendo Wifi USB Connector를 SoftAP로 설정하는 작업을 했다.
랩에서 노트북에 매번 lan cable을 연결하고 기숙사와 다르게 IP를 설정하는게 귀찮아서이다. 랩에서는 무선으로, 기숙사에서는 유선으로 연결하기 위한 작업이었다. 기숙사에서도 무선으로 연결이 되면 좋겠지만 connector를 꽂아 놓을 컴퓨터가 없어서 어쩔 수 없이 노트북을 유선으로 직접 연결해야 한다.

본래 이 녀석은 NDSL에서 네트웍을 통해서 여러사람이 게임을 할 수 있도록 해 주는 녀석인데, 기본적으로는 어차피 이 녀석도 AP이기 때문에 이 튜토리얼에 나온 대로 따라하면 NDSL용 만이 아니라 범용의 AP로 사용할 수가 있다.

여기에 몇가지 덧붙이고 싶은 게 있다.

튜토리얼에 나온 내용은 크게 설치, 설정, 기타로 구분할 수 있을 듯하다.
  1. 1) ~ 5) 번이 드라이버와 설정 프로그램을 설치하는 과정이다. 그러니 나머지과정을 하기 전에 반드시 순서대로 해 줘야 하는 과정이다.
  2. 6) ~ 9) 번은 AP가 설치될 위치, 그러니까 인터넷 게이트웨이 역할을 할 컴퓨터에서 하는 설정작업이다. 순서를 꼭 지켜야 할 필요는 없다.
  3. 10) 번은 client 쪽에서 하는 설정 작업이다. 꼭 6) ~ 9)번 이후에 작업해야 할 필요는 없지만, 왠만하면 가장 나중에 하는 것이 자연스럽다.
순서를 지켜줘야 할 건 결국 1) ~ 5)의 설치 부분 뿐이고 다른 것보다 우선해서 해주는 게 좋다. 5)까지의 과정을 진행하고 connector를 USB 연결구에 꽂아주면 컴퓨터에 "무선 네트워크 연결"이라는 것이 생성된다. 설치는 여기까지이고 나머지는 설정작업들이다.

6) ~ 9) 번의 과정에 대해서 좀더 얘기해 보자면,

6)번은 Wifi USB Connector의 동작모드를 설정한다. 무선 NIC(network interface card)는 station 모드와 AP 모드로 동작할 수 있는데, station 모드는 보통의 client로 동작하는 모드이다. 즉, 게임기 쪽이나 노트북 쪽의 역할이다. AP 모드는 일종의 server로 동작하는 모드라고 말 할 수 있는데, 다른 client들에게 네트웍 서비스를 제공해 주는 모드라고도 말 할 수 있겠다.

8)번은 무선 NIC, 그러니까 Wifi USB Connector의 주소를 설정해주는 부분이다. 당연하지만 모든 NIC는 주소를 가지고 있어야 한다. DHCP 같은 것을 통해서 자동으로 설정되도록 할 수도 있지만, Wifi connector를 SoftAP로 사용하는 경우에는 이것을 기대하기는 좀 힘드니 수동으로 고정된 주소를 설정하는 과정이다. (8번을 7번보다 먼저 말하는 것은, 내 생각에 7번보다 이걸 먼저 설정하는 게 더 자연스러워 보여서 그렇다.)

7)번은 외부 인터넷으로 연결할 수 있도록 해주는 설정인데 외부 인터넷에 연결할 수 있는 NIC 쪽을 직접 설정해 주게 된다. 그런데, 튜토리얼에 보면 6)번의 과정에서 "enable ICS"를 선택해제하라는 것이 있는데, 경험상 7번의 과정을 건너뛰고 6)번의 과정에서 enable ICS를 선택해도 무방한 것 같다. 단, 8번의 과정에서 AP의 주소는 제대로 설정해 주는 것이 원활할 테니, 추천하자면 8번 과정을 먼저 하고, 7번은 건너뛰고, 6번에서는 "enable ICS"를 활성화 해서 작업을 진행하면 된다.

9)번은 실제로는 6)번 과정에서 함께 해줘도 된다. 그리고 튜토리얼에 나온 것처럼 Network Authentication을 "shared"로 설정하지 않고 "open"으로 설정하고 Data encryption을 disabled로 설정해도 된다. 물론 이렇게 하면 무선 신호가 닿는 거리의 아무나 접속할 수 있다. 하지만, Nintendo Wifi USB Connector는 본래 범용 AP를 목적으로 제작된 것은 아니기 때문에 주파수 도달 거리가 좀 짧은 편이다. 열 걸음 떨어져서 금속성 문 하나만 사이에 둬도 신호 세기가 많이 줄어든다. 그러니 open으로 해 놔도 실제 의도하지 않은 엉뚱한 사람이 우리의 SoftAP를 통해서 인터넷에 연결할 수 있을 거라는 걱정은 안 해도 될 듯하다. 그리고 54g mode를 튜토리얼에 나온 것처럼 802.11b only로 하지 않고 54g auto로 해 놔도 된다. client들이 생각보다 똑똑하다는 것을 생각한다면 ^^. 중요한 것은 SSID를 설정하는 것인데 마음에 드는 (그리고 충돌하지 않는) 이름을 아무거나 정하면 되는 복잡할 것 없는 작업이고 6)번에서 한꺼번에 해도 된다.

사용자 삽입 이미지
모든 설정이 정상적이면 왼쪽 그림과 같이 두개의 아이콘이 system tray에 생기는데, 오른쪽 아이콘은 현재 NIC(여기에서는 nintendo wifi connector)의 IP 주소 같은 것들이 정상적으로 설정되어서 무선 토신을 잘 하고 있다는 것이고, AP라는 글자가 나오는 아이콘은 ASUS에서 제공하는 AP 설정 툴의 아이콘이고 NIC가 현재 AP 모드로 동작하고 있다는 의미이다.


튜토리얼에 대한 얘기는 이 쯤 하고...
USB connector를 컴퓨터에 연결하면

이런 식으로 LED가 깜빡인다. (담뱃갑은 크기 비교용) 꽤나 빠르게 깜빡이는데 이게 정상적인 상황이다. 그런데, 간혹 다른 USB 포트에 꽂으면 깜빡이는 속도가 현저히 떨어지는 경우가 있다. 그런 경우에는 노트북에서 AP를 검색할 때 누락되기도 한다. (추측하기로는 깜빡이는 속도에 따라서 네트웍에 AP의 SSID를 뿌리는 빈도가 달라지거나 하는 것 같다. 자세한 이유는 찾을 수가 없었다.) 나의 경우는 컴퓨터에 붙어 있는 포트에 바로 꽂을 경우에는 거의 항상 느리게 깜빡이는 현상을 보여서 부득이 화면에 나오는 것처럼 USB 연장선을 연결해서 책상위로 올렸다.

또 한가지 언급할 것은, connector를 USB에 연결해 놓으면 열이 꽤 많이 되는데, 솔직히 지속적인 발열이 connector에 좋지 않은 영향을 주지는 않을까 하는 염려도 된다. 실제로 저녁에 연결 작업을 해 놓고 다음날 아침에 다시 보니 노트북으로 무선 연결을 할 수가 없었다.


어쨌거나 지금은 꽤 안정적으로 동작하는 듯 하다. 만 하루가 훨씬 지나고도 연결이 끊기거나 하는 현상은 없고 노트북을 절전모드로 돌렸다가 다시 깨어날 때도 바로 연결이 된다.

  
트랙백   |  댓글   |
ZDNet Korea에 올라온 이 기사에 따르면 디웨이브(D-Wave)라는 기업에서 이달 12일에 최초의 실용화된 양자 컴퓨터(Quantum Computer)의 동작을 시연한다고(했다고^^) 한다. 디웨이브의 사이트에 들어가 보면 13일에 시연했다고 나온다.

우와~~! 상용 양자 컴퓨터라니! 내 전공인 암호학은 이제 끝장이란 말인가? ㅠ.ㅠ

근데 ZDNet의 기사를 좀 더 읽어내려가면 이 회사의 양자 컴퓨터가 과연 믿을 수 있는 물건인지 의심이 부쩍 생긴다. 이 회사는 16-qubit 짜리 양자 컴퓨터를 만들었다고 하는데 기사에 나오는 인터뷰 중에 보면 이게 16-qubit이 아니라 그냥 16-bit 컴퓨터였을 거라고 의심하는 말도 나온다. 나야 직접 보질 못했으니 알 수가 없지만.

학회를 이리저리 다니다 보면 양자 컴퓨터를 연구하는 사람들이 몇몇 눈에 띈다. 그리고 양자 컴퓨터가 나오면 암호학은 걍 끝장이기 때문에, 양자 컴퓨터가 나와도 쓸 수 있는 양자 암호(Quantum Cryptography)를 연구하는 사람들도 눈에 띈다. 디렉의 이름과 양자역학의 무시무시한 할아버지들 이름이 자주 언급되고 생소한 기호와 수식들이 난무하는 이 분야가 꽤 재미 있게는 보이지만, 과연 현실적으로도 의미를 갖는가는 의문이다. 평행우주를 구현하다니.

내가 그 분야를 공부하지 않았으니 나의 다음 의문이 영 쓸데없는 것일지도 모르겠지만 어쨌거나 가장 근본적인 부분에 의문이 든다:
양자 컴퓨터에서 사용하는 정보의 단위는 bit(0또는 1의 값을 가짐)이 아닌 qubit(이론적으로는 무한개의 값을 가짐)이다. 이 qubit이 저장하는 정보의 단위가 거의 무한대이기 때문에 이 qubit을 처리할 수 있는 quantum gate(현대 논리회로에서의 logic gate에 해당)만 있으면 무한대의 정보를 한꺼번에 처리할 수 있다는 것이 양자 컴퓨팅의 근거이다. 그래... 처리라. 실제로 저런 quantum gate는 만들 수 있을 것이다. 그리고 "실제로" 무한대의 정보를 처리하는 것은 가능할 것이다. 우리는 이미 평행우주라는 SF적인 개념에 친숙하지 않은가. (영화에도 자주 등장한다. ^^)

지금 내 눈 앞에 있는 컵을 바닥에 던지면 아주 높은 확률(99.999999999% 정도?^^)로 깨질 것이다. 컵이 이미 깨진 것을 기정사실이라고 하면, 그 후에 0.000000000000000000000000000001%(실제로는 이것보다 더 낮을 테지만 0만 잔뜩 쓰면 보기 흉하니까^^)의 확률로 이 컵은 다시 원상 복구가 될 것이다. 그런데 이 확률이 너무 낮으니 우리는 컵이 깨진 것을 돌이킬 수 없고 결국은 뽄드를 찾거나 새 컵을 구해야 한다는 것을 알게 된다. 우리는 실제로 양자역학이 지배하는 세상에 살고 있는 것이다. 우와!
이것을 좀더 관찰하기 쉬운 것에 적용하는 것이 결국은 양자 컴퓨팅의 핵심이다.

그러면 이제 아주 단순한 형태의 qubit(dubit이라 부르자. 두가지 값을 동시에 갖는 bit.)을 생각하자. 이 dubit은 확률 50%로 0이고 확률 50%로 1의 값을 가진다. dubit 두 개를 논리 합(OR)한다. 그러면 우리는 각각 확률 25%로 0 or 0, 0 or 1, 1 or 0, 1 or 1의 계산을 "동시에" 수행할 수 있다. 그러면 확률 25%로 0이고 확률 75%로 1의 값을 갖는 dubit이 출력될 것이다. 어라? 이게 뭐야. 계산은 수행했지만 우리가 얻는 것은 무엇인가. 고작 확률 25%로 0이고 확률 75%로 1의 값을 갖는 dubit일 뿐이다.

양자 컴퓨터를 이용해서 인수분해문제(Integer Factorization Problem, 많은 암호 시스템들이 이 문제가 어려울 것이라는 가정을 한다.)를 풀 때는 대충 이런 식이다. 인수의 후보가 되는 여러 가지 값들을 동시에 갖는 qubit의 array를 만든다. 32-bit integer를 인수분해한다면 16 개의 dubit으로 array를 만들면 될 것이다. 이 16-dubit integer는 0부터 32767까지의 값을 각각 1/32768의 확률로 갖을 것이다. 그러니 우리는 32768개의 숫자를 한꺼번에 처리할 수 있다. 입력으로 들어온 32-bit integer를 이 16-budit integer로 나눠본다. 그 중에 나눠 떨어지는 수가 있으면 그게 입력 32-bit integer의 인수가 된다. 자... 문제가 풀렸나? 풀긴 풀었다. 대충 1/32768의 확률로 문제를 풀었다. 엥?
그럼 이게 위에서 0.00000000000000000001%의 확률로 원상복구되는 컵과 뭐가 다른 거지?
결국은 답을 얻었다고 해도 그것들이 수많은 garbage들 사이에 묻혀 있어서, 원하는 답을 "정말로" 찾으려면 또 다시 그 garbage들을 뒤져야 할 것이라는 거다.

문제는 언제나 그렇듯이 의미 있는 정보를 가려내는 일이다. 요즘 인터넷도 그러하지 않던가.
정보는 넘쳐나고 지금도 수없이 많은 정보들이 처리되고 배달되고 있지만, 그 중에서 정작 나에게 필요한, 또는 쓸모 있는 정보를 찾는 데에는 그 만큼 더 많은 노력(일)이 필요할 것이라는 것 말이다. 양자 컴퓨터를 연구하는 사람들은 바로 이런 기초적인 질문에 먼저 대답을 해야 할 것이다.
"양자 컴퓨터가 뭐에요?" 하고 물으면 수식부터 내 놓을 생각을 할 것이 아니라 말이지.

'잡담' 카테고리의 다른 글

emacs -.-;  (0) 2009.03.02
HCI (Human-Computer Interface)  (0) 2007.10.07
  
트랙백   |  댓글   |
통상적인 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
Debian Linux에서 openafs client 설치  (0) 2007.04.18
ssh-agent 활용법 두번째  (0) 2007.03.29
hanterm에서 status bar 완전히 없애기  (0) 2007.01.17
  
트랙백   |  댓글   |
어젠가 그저껜가 TV에서 "마음"에 관한 다큐멘터리를 보았는데
그 중에서 재미 있는 내용이 있었다. 다큐멘터리의 원래 주제인 "마음"에
관한 것은 아니고, 뇌에 연결한 장치를 통해서 컴퓨터의 마우스 포인터를
움직이는 어떤 시스템이었다. 사람의 뇌에서 나오는 뇌파가 생각보다
단순하여 해독하기에 어렵지 않다는 것이다. 물론 마우스 포인터를 움직이는
것과 같은 2차원적인 정보를 뇌파를 통해서 내보내고 컴퓨터의 인터페이스가
그것을 큰 오류 없이 해독해 내기 위해서는 사용하는 사람과 컴퓨터 자체에
모두 훈련과 시행착오가 있어야 할 것이다.

그 TV 프로그램을 봤을 당시는 그냥 "재미 있군" 정도였는데 토요일 저녁에
다시 그 생각이 났다. 노트북을 가지고 일을 하던 도중에 사람의 손을 직접 움직여
마우스를 움직이는 것이 참으로 원시적이라는 생각이 들었던 것이다.
그리고 그 프로그램에서 봤던 방식으로 생각만으로 마우스를 움직인다면,
또는 그와 유사하게 어떤 포인팅을 해낼 수 있다면 아주 빠른 정보의 전달이
가능하겠다는 생각을 했다. 눈을 잠시 움직여 바라보는 정도만으로, 또는
그저 생각하는 것만으로 화면에 떠 있는 여러 윈도우 중에서 하나로 포커스를
옮길 수 있다면 어떨까 하는 것이었다.

요즈음의 컴퓨터에는 사람과의 인터페이스로 고작해야 키보드, 마우스, 모니터
정도밖에 없게 되는데 이건 아무래도 너무 느리다. 키보드가 비교적 빠른 수준의
정보 전달을 가능하게 하지만 이건 아무래도 1차원, 2차원, 혹은 3차원의 연속된
공간에서의 위치를 전달하기에는 불편한 인터페이스이다. 마우스가 2차원 공간 정보를
전달할 수 있다지만 아직까지는 사람의 손으로 직접 움직여 줘야 하니 불편하다.
마우스를 움직이기 위해서 오른손(또는 왼손)을 움직여야 하니 키보드에서는
한손을 떼어야 하는 것이다. 컴퓨터 화면이라는 공간이 어차피 아직은 2차원
공간이니, 그 2차원 공간에서 포인팅과 클릭킹만이라도 양손을 사용하지 않고
가능하게 하면 그야말로 비약적인 속도로 컴퓨터와 인터페이스할 수 있을 것 같다.

근데 그런 게 언제나 상용화될지. 적당한(?) 가격을 주고 누구나 구입할 수 있는
수준의 전자장치 중에서 비교적 재미 있는 인터페이스를 가지고 있는 기계들이라면
아무래도 게임기들이다. PS나 XBOX 같은 콘솔 게임기들과 WII 같은 "쥐는" 콘트롤러를
가진 게임기들이 그것이다. 컴퓨터가 사람에게 정보를 전달하는 경로가 "화면" 외에
"콘솔"까지 포함하는 것도 가능하고, 3차원 공간에서의 위치 정보(완벽하지는
않지만)를 컴퓨터(게임기)로 전달하는 것도 가능하다. 그래도 이런 것들은
아직까지는 사람과 컴퓨터 간에 어떠한 식으로는 물리적인 interaction이 있어야
하니 미래에까지 계속 가지고 가기에는 여전히 원시적인 수단들이다.

SF적인 상상력의 기준으로 바람직한 인터페이스라면 뭐니뭐니해도 사람의 두뇌와 직접
상호작용하는 것이 되어야 할 것이다. 그러기 위해서는 사람의 생각을 기계가 알아
들을 수 있어야 하겠다. 요즈음의 인터페이스는 아직까지는 컴퓨터에 사람을 맞추어야
하는 한계가 있다. 사람은 독선적인 존재라서 사람 위에 더 존귀한 존재를 두기
꺼려하는 족속들이니("신"이라는 개념은 잠시 치워두고), 기계와 인터페이스하기 위해서
사람의 일부분을 변형시킨다거나, 또는 사람의 행동 양식을 훈련시킨다는 것은
아무래도 바람직하지가 않다. 여러 에니메이션들과 소설, 영화등을 보면 사람의
손이 기계와 닮아서 키보드와 아주아주 "긴밀하게(^^)" 교감하는 것을 볼 수 있는데
이것은 사실 거부감 드는 면이 있다. 그보다는 눈에 띄지 않는 어떤 채널을 통해서
뇌에 직접 정보를 전달하고, 또 뇌로부터 직접 명령을 받아들이는 것이 훨씬 SF적으로
"있어 보이는" 정보 전달 방법이다.

그래서 결론이 무엇인고 하니, 이 창에서 저 창으로 포커스를 옮기기 위해서 무수히
alt-tab을 두드리는 것이나 마우스를 움직이는 것이 너무너무 귀찮다는 것이다. -.-;;


'잡담' 카테고리의 다른 글

emacs -.-;  (0) 2009.03.02
양자 컴퓨터라...  (0) 2007.11.12
  
트랙백   |  댓글   |
windows에서 설치하기. 다음의 파일을 참조. 아래에 설명 보충.



1. perl 설치
http://www.activestate.com/Products/ActivePerl/ 에서 activestate perl을 download한다.
특별한 이유가 없는 한 MSI 패키지를 download한다.
msi 파일은 더블클릭하면 설치가 시작된다. 특별히 건드릴 일은 없으니 default setting으로 설치.

2. compiler
windows에 cygwin이나 borland c 등을 설치해서 쓸 정도의 사람은 아마도 여기의 설명이
필요 없을 것이니, visuall c++을 사용한다고 가정한다. 설명서에도 나와 있다시피
MS의 MASM이라는 assembler가 아마도 visuall c++에 기본으로 포함돼 있을 것이다.

MASM이 없는 경우(ml.exe가 없는 경우) more...를 참조.

암호 관련 라이브러리들은 대부분 극한의 속도를 목적으로 하기 때문에 assembler를 이용한
빠른 코드를 당근 사용해주는 게 좋겠다.

3. configure
1번의 perl 설치는 사실 configure script를 실행하기 위한 용도이다.
cmd창을 띄워서 다음과 같이 실행한다. (시작->실행->cmd.exe)

> cd <현재 소스 루트>
> perl Configure VC-WIN32 --prefix=D:/project/lib/ssl
사용자 삽입 이미지

이런 식으로 된다. prefix는 openssl library와 header file들이 설치될 위치이다.
다음으로 실제 compile할 때 사용될 Makefile과 assembly code들을 만든다.
위에서 MASM을 사용하기로 했으니 ms\do_masm을 실행한다.
사용자 삽입 이미지

원래의 설명서에 보면 VC++ environment에서 다음을 진행하라고 되어 있는데,
VC++의 명령행 프롬프트는 다음과 같이 띄운다.
사용자 삽입 이미지
사용하는 visual studio의 버젼에 따라서 조금 다를 수는 있다. VC++ 6.0 같은 경우는
일단 cmd 창을 띄운 후(시작->실행->cmd.exe)에 vcvars32.bat 를 실행하면 된다.
이제 library를 build한다.
사용자 삽입 이미지

그런데 visual studio 2005를 사용하는 경우는 cp949에서 특정 문자를 표시할 수 없다는
에러가 나온다. 그럴 경우는 아래 more... 를 참조. 그런 에러가 안 난다면 상관 없다.

컴파일이 정상적으로 끝났으면 이제 위에서 prefix로 정한 위치에 install을 해야 하는데
그전에 nmake test 를 통해서 library가 잘 만들어졌는지 확인해 볼 수 있다. 하지만 꼭 필요한
것은 아니고, 만족감을 얻고 싶거나, 정말 제대로 만들어졌는지 확인해 봐야 할 경우에만 한다.
마지막에 passed all tests라고 나오면 된다.
> nmake -f ms\ntdll.mak test

이제 install을 한다.
> nmake -f ms\ntdll.mak install
사용자 삽입 이미지
위와 같이 prefix로 정한 위치에 저런 디렉토리들이 만들어졌고 bin 디렉토리에
libeay32.dll, ssleay32.dll, openssl.exe 같은 파일들이 만들어졌는지 확인한다.
또 include\ssl 디렉토리에 각종 헤더파일들이 역시 존재하는지도 확인한다.

모두 다 제대로 들어 있다면 install은 ok.

'Cryptography' 카테고리의 다른 글

보안의 보짜 (패스워드편)  (0) 2009.12.01
KCDSA & EC-KCDSA + OpenSSL  (2) 2009.09.30
OpenSSL의 crypto library 뜯어보기  (0) 2007.04.18
  
트랙백   |  댓글   |
linux에서 설치하기 위한 방법.

일단, openssl을 단지 "사용"만 하기 위해서는 해당하는 배포판의 package 중에서
설치하면 된다. 그리고 대부분 openssl package가 필요할 때는 package manager가
아마도 알아서 설치했을 것이다. 그러니 보통 사람들은 여기에서 설명하는 과정이란
것이 쓸 데 없는 것에 지나지 않는다.
이 글의 목적은 openssl에 포함돼 있는 crypto library를 이리저리 들여다 보고,
수정도 해 보고, 스스로 컴파일해서 다른 응용 프로그램과 함께 사용해 보는 것이다.

$는 console에서 command prompt를 의미한다.


일단 소스 코드를 다운로드 한다.
http://www.openssl.org/source/에서 소스 코드를 다운로드 할 수 있다.
2007년 2월 23일 현재 최신 버젼은 0.9.8e 이다. http://www.openssl.org/source/openssl-0.9.8e.tar.gz
console에서 wget 같은 프로그램을 사용해서 다운로드한다.
그리고 tar 명령을 사용해서 압축을 푼다.
사용자 삽입 이미지

그 다음은 소스코드를 컴파일 가능한 상태로 만든다. 물론, 그냥 이 상태에서 make 명령으로
컴파일해도 컴파일은 되지만, config 같은 명령을 제공하는 소스코드는 config 명령으로
미리 설정해 주는 것이 좋다.
사용자 삽입 이미지

사용자 삽입 이미지
linux-elf 환경으로 설정했다고 나오고 끝난다. 이건 자기 환경에 따라 다를 수도 있다.

어차피 그냥 설치만 하고 끝날 것이 아니기 때문에 Makefile을 잠깐 살펴본다.
사용자 삽입 이미지
소스코드를 build하고 나서 설치할 위치가 나온다. 시스템에 이미 openssl package가 깔려
있을 수도 있으니 겹치지 않도록 저 위치에 그냥 설치하게 둔다.
사용자 삽입 이미지
위의 내용을 참고하여 최소한 프로그램들이 설치되어 있는지 확인한다. 사실 한번이라도
뭔가를 컴파일했던 환경이라면 대부분은 설치되어 있을 것이고, perl 은 혹시 모르니
사용자 삽입 이미지
와 같이 해서 확인한다.
계속해서 Makefile을 살펴보면
사용자 삽입 이미지
어떤 것들을 library에 포함시킬 것인지를 정하고 있다. SDIRS 항목을 잠시 살펴보면
1. 각종 hash function들과 message authentication code가 들어 있다.
2. block cipher (또는 대칭키 암호)들이 들어 있다.
3. 공개키 암호를 구현하기 위한 모듈들이 들어 있다. bn은 32-bit이나 64-bit 이상의 큰 수를
   다루기 위한 모듈이다. bn 모듈은 기본적으로 거의 모든 공개키 모듈에서 사용된다.
   ec는 타원곡선 연산을 위한 모듈이다. 타원곡선 연산은 ecdsa, ecdh 등에서 사용된다.
4. 암호 알고리즘을 구현하기 위한 기타 필수 요소들이다. string buffer, 입출력, random number
   generation 등등이 들어 있다.
5. 각종 암호학 알고리즘의 입력, 혹은 출력을 표현하기 위한 형식들이 정의된다.
   예를 들면 X.509 인증서 형식, ASN.1 데이터 표현형식 pkcs 등의 SSL에서의
   인증서 형식 등등이다.
마지막에 써 있듯이 config (혹은 Configure) 명령을 통해서 어떤 모듈을 포함시킬 것인지를
정해 줄 수 있다. 일단은 default 상태로 둔다.

사용자 삽입 이미지
두가지 주요 라이브러리를 생성하고 이것으로부터 shared object 등을 만든다.
사실 SSL 프로토콜을 위해서는 libssl.a가 필요하지만, 암호 라이브러리만을 위해서라면
libcrypto.a 만 있으면 된다. 물론, 다른 입출력이나 데이터 표현과 관련된 기능도
있어야 한다. 그 이후는 특별히 살펴볼 필요는 없을 것 같다.

이제 컴파일을 한다. 컴파일과 설치 자체는 대단히 간단하다.
$ make
라고 하면 컴파일이 시작된다. 끝날 때까지 할 일은 없고 기다리면 된다.
command prompt가 다시 나오면 끝난 것이다. 이때
사용자 삽입 이미지
와 같이 깨끗하게 끝나야 한다. error가 떴다면 문제를 수정해야 한다. 특별히 컴파일에 문제를
일으킬 만한 것은 당장 생각나지 않으니 일단 패스! -.-;

make까지는 자신의 홈디렉토리에서 수행해도 되지만 /usr/local 과 같은 곳에 설치를 하려면
root 권한이 있어야 한다. root 권한이 없거나 자신의 홈디렉토리에만 설치하고자 할 때는
config 명령으로 소스코드를 설정할 때 설치 디렉토리를 설정해 주어야 한다.
$ ./config --prefix=디렉토리이름
과 같은 식으로 하면 된다. config를 다시 했으면 컴파일을 다시 해주는 것이 좋다.
만약 뭔가가 꼬여서 처음의 깨끗한 상태에서 다시 시작하고 싶다면
$ make clean
이라고 한 다음에 다시 make하면 된다.

make가 끝났으면 install을 한다. install은
$ make install
이라고 하면 문제없이 수행되어야 한다. 설치하려는 곳에 권한이 없으면 에러가 출력될
것이다. 이때는 config를 다시 하고 make clean을 수행하고 다시 make하고 이어서
make install을 하는 게 안전하다.

기본적인 설정으로는 shared library를 만들지 않도록 되어 있다. shared library를
만들려면 config 명령에 shared라는 argument를 주면 된다.
$ ./config shared
혹은
$ ./config shared --prefix=디렉토리이름


'Cryptography' 카테고리의 다른 글

보안의 보짜 (패스워드편)  (0) 2009.12.01
KCDSA & EC-KCDSA + OpenSSL  (2) 2009.09.30
OpenSSL의 crypto library 뜯어보기 2  (0) 2007.04.24
  
트랙백   |  댓글   |
환경: Debian GNU/Linux ver. 4.0 (etch)
AFS cell server DB:
>postech.ac.kr          #Pohang University of Science and TEchnology, Korea
141.223.7.101                   #afsdb1.postech.ac.kr
141.223.7.102                   #afsdb2.postech.ac.kr
141.223.7.103                   #afsdb3.postech.ac.kr

뭘 먼저 설치하든 큰 상관은 없는데, 일단 openafs-client를 설치한다.

$ aptitude install openafs-client

(aptitude 대신에 apt-get을 써도 된다. 효과는 같다.)

사용자 삽입 이미지
자신이 속한 AFS cell의 이름을 적는 곳인데, 나의 경우 postech.ac.kr에 속해 있으므로
그렇게 적는다. 자신이 AFS cell에 속해 있지 않다면 afs라는 것이 별로 쓸모가 없으므로
혹시나 흘러흘러 여기까지 온 사람들은 여기에서 멈추는 것이 좋겠다. -.-;;

사용자 삽입 이미지
cache 크기를 정하는 건데 그냥 default대로 둔다.

사용자 삽입 이미지
/afs 이하의 내용을 유동적으로 만들 것인지를 정하는 것인데, 왠만하면 no를 선택하는 것이
좋겠다. no를 선택하면 자신이 속한 Cell의 관리자가 정해놓은 내용을 보게 될 것이고,
yes를 선택하면 afs client가 CellServerDB에 있는 내용을 보고 알아서 만들어낸다.
나의 판단에 afs는 서로 다른 cell 간에 파일 전송에는 그렇게 어울리는 것이 아니기 때문에
자기 cell의 관리자를 믿고, 이 화면에서는 no를 선택하는 것이 좋겠다. 호기심이 생기면
yes를 해 봐도 되지만, 머리만 아파질 확률이 더 높다.

사용자 삽입 이미지
드디어 자신이 속한 cell의 cell server DB들의 주소를 적는다. IP를 직접 적기 보다는
그냥 hostname을 (가능하면 suffix까지 모두) 적는다. 그게 보기가 좋다. -.-;;
서버가 여러개면 space로 구분.

사용자 삽입 이미지
openafs client를 자동으로 시작할 거냐고 묻는데, 네트웍에 항상 물려 있는 컴이라면
당연히 yes를 선택한다. 그렇지 않다면 아마도 no를 선택하는 것이 현명하겠지만.
네트웍이 끊기면, cd나 ls 정도를 해도 멈추어서 두통을 유발할 수 있기 때문이다.

사용자 삽입 이미지
마지막 화면에 나온대로 아직 openafs module이 안 올라가 있기 때문에 서비스가
시작되지는 않는다. 이런 화면이 보기 싫다면 module을 먼저 build해서 올리면 되는데... :)
이 상태에서 일단 openafs module을 build하고 올리도록 한다.

모듈을 올리는 가장 손쉽고 편리한 방법은 debian package 중에 있는 module-assistant를
사용하는 것이다. 이게 언제 debian에 도입됐는지는 모르지만, 작업량을 비약적으로 줄여주는
효과를 갖는다. 만세! (예전에는 make-kpkg로 약간 더 불편하게 작업했는데 중간에 문제가
생기면 익숙하지 않은 사람이 헤쳐나가기엔 좀 까다로운 면도 있다.)

일단 module-assistant를 설치한다.

$ apt-get install module-assistant

그리고 실행

$ module-assistant
별다른 옵션 없이 실행하면 menu를 출력해주고 그 중에서 자신이 원하는 동작을 선택한다.
사용자 삽입 이미지
처음 실행하는 거라면 먼저 update를 선택해서 패키지 목록을 갱신해 준다.
사용자 삽입 이미지
그 다음에 prepare를 눌러서 module-assistant의 작업 공간을 마련해준다.
사용자 삽입 이미지
그러면 작업환경에 필요한 패키지들을 알아서 선택해서 설치까지 한다.
사용자 삽입 이미지
엔터키 누르고 계속해서 이제 설치할 모듈을 선택한다.
사용자 삽입 이미지
아래 화면과 같이 목록이 나오는데 화살표키로 이동해서 openafs-modules를 선택한다.
사용자 삽입 이미지
선택은 space 키를 눌러서 한다. * 표시가 생기면 선택된 것이다.
사용자 삽입 이미지
모듈을 선택하고 나면 또다른 메뉴가 나온다. 여기에서 GET을 선택해서 해당 모듈의
소스 패키지를 다운로드하고 설치한다.
사용자 삽입 이미지
사용자 삽입 이미지
소스 패키지의 설치가 에러 없이 끝났으면 이제 build한다.
사용자 삽입 이미지
대충 아래와 같은 화면이 나오고 컴파일이 진행된다.
사용자 삽입 이미지
끝나고 메뉴로 돌아오면 이번에는 INSTALL을 선택해서 모듈이 들어 있는 패키지를 설치한다.

이제 openafs 서비스를 시작해야 하는데
$ /etc/init.d/openafs-client restart
를 선택한다. 이전에 서비스를 시작한 적이 없다면 restart 대신에 start로 해도 된다.
restart가 안전하다.

Debian etch에 따라오는 openafs-client에는 klog 프로그램이 기본으로 포함돼 있다.
자신의 afs cell에서의 사용자이름이 alice였다면
$ klog alice
라고 한 후에 패스워드를 입력하면 afs token을 받아온다. 이것은 cell 관리자의 설정이나
afs 설정에 따라 달라지는데 나의 경우는 25시간짜리 토큰을 받게 되어 있다.
현재 보유하고 있는 토큰을 보려면
$ tokens
라고 하면 된다. 당장 token을 없애려면
$ unlog
라고 한다.

기타 사용법은 다른 곳 참조.

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

MoniWiki Sitemap Plugin  (0) 2008.04.25
SSL을 이용한 MySQL 연결  (3) 2007.11.12
ssh-agent 활용법 두번째  (0) 2007.03.29
hanterm에서 status bar 완전히 없애기  (0) 2007.01.17
ssh-agent 활용법  (2) 2006.12.29
  
트랙백   |  댓글   |
현상은 이렇다.
firefox로 웹 서핑을 하다가 flash가 들어가 있는 페이지를 보면
macromedia flash 플러그인이 불법적인 동작을 수행했다면서
firefox를 다시 시작하라고 에러 메시지가 뜬다.
그리고 해당 페이지에서 flash로 된 부분이 모두 사라진다 -.-;;

googling을 해 본 결과 flash version 9가 문제라는 말도 있고
IE하고 연동된 activex가 문제라는 말도 있고, 어디어디에서
무슨무슨 파일을 지우면 문제가 해결된다는 말도 있고... 등등등...
결과는 웹에서 찾아낸 해결책이라는 것들을 모두 해봐도 해결이
안된다는 것이다. 짜증이 물밀 듯. 결국 컴을 밀었다. -.-;;;;;;;;;;;

그리고 firefox하고 flash plugin을 제일 우선적으로 설치한 후에
내가 그동안 설치했던 프로그램들을 하나씩 설치했는데 한동안은
별 문제가 없었다. 속으로 생각했다. "이거 뭔가 근본적인 곳에
문제가 있었던가." 컴을 너무 오랫동안 밀지 않아서 생긴 문제였는지도
모르겠다.

그런데, 정확히 몇시간 전에 그 에러가 다시 나타났다.
순간 컴을 뽀개고 싶었다. 킁..
그러다가 가장 나중에 설치한 프로그램이 뭐였는지 생각해 봤는데
편리할 거 같아서 설치했던 야후 미니 사전이었다.
(http://kr.dic.yahoo.com/search/mini/)
혹시나 하는 생각에 이 놈을 종료했더니 이제는 플래쉬가 들어간
페이지를 여러군데 돌아다녀도 에러가 안 나온다. 찾았다.
pdf 문서를 보다가 사전을 찾아봐야할 때는 꽤나 유용한 프로그램이라
지워버리기는 좀 아깝고, 평소에는 꺼놨다가 필요할 때만 실행하기로
하고 일단은 자동으로 실행되지 않도록만 해 놨다.

야후 미니가 도대체 무슨 이유로 이런 문제를 만들어내는지는
잘 모르겠는데, 어쨌거나 해결책은 찾아냈다. 그 댓가가 컴을 새로
미는 수고여서 좀 쓰리긴 하지만 :(

  
트랙백   |  댓글   |
http://computing.lbird.net/2630968에 있는 내용에 추가.

왠지 모든 것이 자동으로 일어났으면 한다고 생각된다면(제가 그렇습니다. -.-;;) 다음의 방법을 사용할 수 있다. 다시 말하면, ssh-agent를 직접 command line에서 실행하는 것이 귀찮은 것이다.

.bash_profile에 위의 내용 대신 아래와 같이 삽입한다.
# ssh-agent variables
if [ -f ~/.ssh-agent.sh ]; then
. ~/.ssh-agent.sh
fi
if [ ! -S $SSH_AUTH_SOCK ]; then
ssh-agent -t 86400 > ~/.ssh-agent.sh
echo "No agent! ssh-agent started."
. ~/.ssh-agent.sh
fi

이렇게 하면 일단 .ssh-agent.sh이라는 파일이 이미 있는지 확인하고 있으면 읽어들인다. 그리고 거기에서 설정된 소켓($SSH_AUTH_SOCK)이 정말로 있는지 확인한다. 그렇지 않으면 ssh-agnet가 돌고 있지 않으니 새로 실행한다는 메시지를 띄우고 .ssh-agent.sh를 다시 만든다. 다른 것 또 한가지는 -t 86400 옵션을 추가해서 기본적으로 ssh-add를 통해서 key를 집어 넣을 때 제한시간을 하루로 설정한다는 것이다.

  
트랙백   |  댓글   |
한텀을 쓰면 보통 화면 제일 아래에 status bar가 위치한다.

사용자 삽입 이미지

상태바가 있음


이리저리 구글링을 해 보면 [완성/조합] 과 [두벌식/세벌식] 표시를
없애는 것은 나오는데 상태바를 완전히 없애는 것은 나오지 않는다.
hanterm의 도움말을 보면 -hns 옵션을 주면 상태줄이 없어진다고
돼 있는데, 이 옵션을 줘도 아무런 효과가 없다. 구글링을 해봐도
소용이 없길레 debian에 있는 hanterm-xf-3.3.1p18의 소스를 뒤졌다.
그랬더니 왠걸, -hns가 아니라 -nhs 옵션을 줘야 없어지도록 돼 있다.
구글링을 더 잘했으면 나올지도 모르겠지만, 일단 나는 답을 찾았으니
삽질기에 등록해 놓는다.

사용자 삽입 이미지

상태바가 없음


그런데 application defaults file이나 .Xdefaults 같은 파일을 써서 없애는
방법은 아직 모르겠다. 일단 급하지 않으니 저대로 써야겠다.
현재 내 xmanager에서는 hanterm-xf -nhs -geom 80x40 을 실행하도록
설정돼 있다.

  
트랙백   |  댓글   |
분명 NTP를 사용하도록 해 놨는데 시간 맞추는 주기가 1주일로 돼
있다 보니 컴퓨터 시간이 잘 안 맞는다. 예전에 인터넷에서 글하나를
발견해서 그걸 삽질기에 올려 놓으면서 ntp를 설정했었는데 주기는
맞추지 않았던 것이다(링크). 그래서 좀 편하게 맞추는 방법이 없을까 찾아봤는데
금방 찾아지지가 않아서 결국 스스로 알아봤다.

windwos xp에는 net time 이라는 명령어라든가 w32tm 이라는 것들을
사용해서 ntp를 참조할 수 있는데 명령어 옵션을 찾아봐도 시간 맞추는
주기는 보이지 않는다. registry를 뒤지면 이런 항목이 있다.

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services
\W32Time\TimeProviders\NtpClient (길어서 잘랐음. 원래 한 줄)

여기에 SpecialPollInterval 이라는 항목이 있는데
원래는 604800(10진수)로 정해져 있었다. 이 숫자가 시간 맞추는 주기인 것
같은데, 정확한 의미를 알아봤다. 시스템 트레이에 시계를 더블클릭하면
"날짜 및 시간 등록 정보"라는 창이 뜨고 여기서 "인터넷 시간" 탭을 누른다.
여기를 보면 마지막으로 언제 시간을 맞추었는지와 다음에는 언제 맞출
것인지를 알려주는데 나의 경우 딱 1주일 간격이었다. 그래서 계산해 보니
위의 숫자가 1주일을 초 단위로 계산한 값이다. 24시간에 한번씩 시간을
맞추도록 하기 위해서 SpecialPollInterval 의 값을 86400(10진수)로 변경하고
시간 서비스를 다시 시작한다. 다시 시작하는 방법은 시작메뉴에서
관리도구->서비스를 실행하고 windows time이라는 서비스를 찾아서
오른쪽 클릭한 후에 "다시 시작"을 선택한다.
그리고 나서 "날짜 및 시간 등록 정보"의 "인터넷 시간" 탭을 다시 선택하면
주기가 24시간으로 바뀐 것을 볼 수 있다.

(위의 설정을 registry를 직접 건드리지 않고 net time이나 w32tm 등을
이용해서 설정하는 방법이 있을 것 같긴 한데...)

  
트랙백   |  댓글   |
http://wiki.kldp.org/wiki.php/UsingSshAgent 에 오늘 쓴 글.

1 서설

subversion을 항상 local에서만 사용하다가 얼마전에 archive 전용 서버를 하나 마련하고 remote로 사용하고 있었지요. svn+ssh 을 이용해서 접속하고 있었는데, 이거 매번 ssh을 위해서 패스워드를 치기가 영 귀찮은 것이 아닙니다. 어떤 때는 coding하는 시간보다 패스워드 치는 시간이 더 긴 것 같다는 착각이 들 때도 -.-;;;; 그래서 ssh-agent를 사용하는 방법을 찾아봤는데 의외로 간단히 정리돼 있는 게 없어서, 아주 간단히 사용방법의 하나를 소개합니다. 이후는 편의상 반말로 :)

2 미리 확인할 것들

  1. 우선 당연히 ssh client와 server가 제대로 동작하도록 설정하였는지 확인한다.
  2. 위의 사항이 제대로 되었으면 당연히 되겠지만, 혹시 모르니 ssh-keygen, ssh-copy-id, ssh-agent, ssh-add의 명령어가 사용 가능한지 확인한다.

3 상황 설명

현재 자신이 작업하고 있는 머신이 machA라고 하고, svn+ssh server가 돌고 있는 머신을 machB라고 하자. 편의상 두 머신에 alice라는 username으로 계정을 가지고 있다고 가정한다.

4 준비 작업

우선 ssh용으로 쓸 key pair를 만들어야 한다. machA에서 다음의 작업을 수행한다.

alice@macha:~$ ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/home/lbird/.ssh/id_rsa):
Enter passphrase (empty for no passphrase): <password>
Enter same passphrase again: <password>
Your identification has been saved in .ssh/id_rsa.
Your public key has been saved in .ssh/id_rsa.pub.
The key fingerprint is:
33:d9:ac:19:bd:75:13:e5:4a:d9:3c:98:fa:4f:39:d6 lbird@debian
alice@macha:~$

key를 생성했으면 machB로 공개키를 전달해야 한다. machA에서 다음 작업을 수행한다.

alice@macha:~$ ssh-copy-id alice@machb
alice@machb's password: <alice@machb의 password>
Now try logging into the machine, with "ssh 'alice@machb'", and check in:
.ssh/authorized_keys
to make sure we haven't added extra keys that you weren't expecting.
lbird@debian:~$

여기서 <alice@machb의 password>와 위의 <password>는 같을 필요는 없다는 것에 유의. 확인은 안해봤지만 당연히 그럴 것 같다. :)

5 ssh-agent 설정

다른 곳에 좋은 설명이 많겠지만 간단히 설명하면, ssh-agent라는 프로그램은 한번 실행하면 계속 메모리에 상주하면서 사용자의 private key를 안전하게 보호하고 있게 된다. 여기에 ssh-add라는 프로그램으로 사용자가 추가하고 싶은 private key를 집어 넣을 수 있다. ssh-agent는 실행될 때 소켓을 하나 만든다. 다른 프로그램들은 그 소켓 이름을 SSH_AUTH_SOCK라는 환경 변수에서 알아내서 ssh-agent와 통신해서 private key를 얻는다.

machA (자신의 주 작업장)에 처음 로긴하면 일단 다음의 명령을 실행한다.
alice@macha:~$ ssh-agent > ~/.ssh-agent.sh

순서는 좀 바뀌었지만, machA의 alice의 홈디렉토리에 있는 .bash_profile에 다음의 몇줄을 추가하도록 한다.
# ssh-agent variables
if [ -f ~/.ssh-agent.sh ]; then
. ~/.ssh-agent.sh
fi

사실상 ssh-agent와 관련한 작업은 이제 끝났고 사용만 하면 된다.

6 사용

사실 그냥 쓰면 된다. -.-;;

machA가 한번 부팅된 이후에 잘 리붓하지 않는 머신이라면 부팅 직후 첫번째 로긴에서 위의 ssh-agent를 실행하는 작업을 해주면 다음에는 아무런 작업이 필요 없다.

자주 리붓되는 머신이라면 역시 부팅 직후 첫번째 로긴에서 ssh-agent를 실행해 주면 된다. (앞 단락이랑 같은 얘긴데 -.-;; )

7 사족

그냥 끝내면 심심하니까.. ^^

ssh-agent가 없을 때는 접속할 때 이런 식이다.
alice@macha:~$ ssh alice@machb
Password: <alice@machb의 password>
Linux machb 2.6.8-2-686 #1 Tue Aug 16 13:22:48 UTC 2005 i686 GNU/Linux
The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.
Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
You have mail.
Last login: Wed Dec 27 12:02:44 2006 from macha
alice@machb:~$

ssh-agent가 있으면

alice@macha:~$ ssh alice@machb
Linux machb 2.6.8-2-686 #1 Tue Aug 16 13:22:48 UTC 2005 i686 GNU/Linux
The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.
Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
You have mail.
Last login: Wed Dec 27 12:02:44 2006 from macha
alice@machb:~$

password 안 물어본다. (사실 처음 접속할 때는 물어본다 :p)

svn+ssh을 통해서 작업한다면 update나 commit을 할 때마다 한두번씩 물어보는 패스워드를 처음에 한 번만 입력하면 된다는 아주아주 편리한 점이 생긴다.

  
트랙백   |  댓글   |
삽질기가 너무 썰렁하여 MoniWiki에 써 놓았던 것을 여기에 옮겨 옴 -.-;;


A2
: 다음의 방법은 어떨까요. 각 페이지에 #private이라는 instruction을 넣음으로써 개인적인 페이지로 설정하는 방법입니다. 대충 말하자면 #private이라는 instruction이 있는 페이지는 read_private이라는 permission이 있어야 볼 수 있도록 하는 방식입니다.

wiki.php에서 대충 다음 부분을 찾아서 고칩니다. (#inserted부터 #end of inserted까지를 삽입합니다.)

$formatter->pi=$formatter->get_instructions($dum);
if ($DBInfo->body_attr)
$options['attr']=$DBInfo->body_attr;

# inserted by Lbird. supporting private pages
if ($formatter->pi['#private'] and !$DBInfo->security->is_allowed('read_private',$options)) {
do_invalid($formatter,$options);
return;
}
# end of inserted code by Lbird.

$formatter->send_header("",$options);

$formatter->send_title("","",$options);
주의: 긴줄이라 잘려서 보일 수 있으니 마우스로 긁어서 어딘가에 붙여 넣어서
봐야 할지도 모름 -.-;; (스킨을 바꿀까 -.-;;)

역시 wiki.php에서 다음 부분도 찾아서 고칩니다. (#private 하나를 추가합니다.)
function get_instructions(&$body) {
global $DBInfo;
# '#private' inserted by Lbird
$pikeys=array('#redirect','#action','#title','#keywords','#noindex',
'#filter','#postfilter','#twinpages','#notwins','#nocomment',
'#language','#camelcase','#nocamelcase',
'#singlebracket','#nosinglebracket','#private');
$pi=array();


#private 이라는 instruction이 들어가 있는 페이지들만 영향을 받습니다. acl.default.php 파일에서
* @ALL deny *
* @ALL allow read,ticket,savepage
* @User allow *

와 같이 되어 있는 경우라면 로그인한 사용자들은 read_private이 있고, guest는 없습니다. read permission만 있으니까 #private이 붙어 있지 않은 페이지들만 읽을 수 있습니다. 더 세세한 설정을 위해서는 특정 그룹을 지정해서 그 그룹에만 read_private 퍼미션을 줄 수도 있을 겁니다.

사족: 위키에 read 퍼미션을 제한한다는 게 위키정신에는 맞지 않는다고 개발자께서 생각하시는데 굳이 저런 걸 하려고 해서 참 죄송하군요. :) -- Lbird
  
트랙백   |  댓글   |
2005/08/21 22:10에 링크만 덩그러니 걸어 놓은 걸 대충 번역함.
http://www.gudeads.com/english/main-windows-ntp.htm
(사실 본인은 아래 나와 있는 내용을 적용했었는지 아닌지 지금 기억이 가물가물하고,
본인의 경우 지금 확인해 보면 "제어판 - 날짜 및 시간" 에서만 설정을 한 듯 하다.
"인터넷 시간" 탭에서 "인터넷 시간 서버와 자동으로 동기화" 항목을 체크하고,
"서버"에 자신이 알고 있는 ntp 서버 중에서 반응이 좋은 놈의 주소를 써 준다.
"지금 업데이트" 버튼을 누르면 수 초 후에 동기화가 이루어진다. 그런데 이게
생각 외로 자동으로 업데이트가 잘 안되는 것 같다. 그래서 주변의 다른 컴퓨터나
핸드폰 시계와 수 분 이상 차이가 난다 싶으면 화면 오른쪽 아래의 시계를 더블
클릭해서 "날짜 및 시간 등록정보"를 띄운 후에 "인터넷 시간" 탭에서 "지금 업데이트"
버튼을 지긋이 눌러주고 딴일을 한다. 잠시후에 보면 동기화 됐다는 메시지가
뜨고 "날짜 및 시간" 창을 닫고 하던 일을 계속한다. 아마 동기화 주기가 너무
길어서 그런 거 같은데 귀찮아서 그냥 쓰고 있다. 이거 번역할 시간에 주기나
맞추는 건데 -.-;;; 큭.. 자, 이제 아래에 번역한 것.)

Windows를 NTP 클라이언트나 서버로 사용하기


Windows XP/Server 2003

Windows XP/Server 2003은 NTP 서버에 시간을 물어서 자신의 시간을 맞출 수가 있다. 별도의 소프트웨어가 필요하지는 않다. 설정은 "제어판 - 날짜 및 시간"에서 한다. Windows XP/Server 2003을 NTP 서버로 사용하기 위해서는 다음의 레지스트리 항목을 수정해야 한다.
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W32Time:

이름데이터설명
Parameters\TypeNTP
Config\AnnounceFlags5이 서버는 안정적인 시간 정보를 제공한다는 의미
TimeProviders\NtpServer\Enabled1
Parameters\NtpServer이 서버가 별도의 시간정보를 어디선가 받아서 (역자주: 예를들면 GPS 정보 등) 자신의 시간을 맞출 수 있다면 이 항목은 비워둔다. 그렇지 않은 경우라면, IP 주소나 DNS 이름을 블랭크(역자주: 아마도 스페이스나 탭)로 구분하여 적는다.

(역자주: 본인도 해보지는 않았음)
위의 항목들을 변경한 후에는 해당 서비스를 재시작해야 한다.
Microsoft에서 다음의 추가적인 설명을 얻을 수 있다:
XP
Server 2003

Windows 2000

Windows 2000에서는 "w32time.exe"라는 통합 서비스를 통해서 NTP 서버나 클라이언트로 동작할 수 있다. 이 서비스를 활성화 하기 위해서는, 몇가지 항목들을 레지스트리에 추가한 후에 "time service"라는 서비시를 재시작해야 한다. "관리도구 - 서비스 - Windows Time"항목에서 "time service"를 발견할 수 있을 것이다. 서비스를 찾았으면 시작유형을 자동으로 설정한다. (명령행 (역자주: 윈도우즈버튼 - 실행 - cmd.exe) 에서 "net start w32time"이라고 입력하면 time 서비스를 시작할 수 있고, "net stop w32time"이라고 입력하면 중지할 수도 있다.) 이 서비스를 위한 레지스트리 항목은 다음의 위치에 있다:
HKEY_LOCAL_MACHINE\
SYSTEM\CurrentControlSet\Services\W32Time\Parameters
(역자주: 줄이 길어서 짤랐음. 원래는 한 줄)
각 항목의 자세한 의미에 대해서는 Microsoft에서 정보를 얻을 수 있다.

Windows 2000을 NTP 클라이언트로 동작시키기 위해서는, 시간 서버 (역자주: NTP 서버를 말함)의 IP 주소가 필요하다. ("ntpserver"라는 항목에 입력하거나 명령행에서 "net time /setsntp[:NTP-Serverliste]" 라고 입력하면 된다. (역자주: NTP-Serverlist가 맞는 거 같음) 동기화 주기는 8시간으로 맞추는 것이 표준이다. ("Period"라는 항목의 값을 "SpecialSkew"라고 설정한다.) 이 주기는 다른 값으로 변경하는 것도 물론 가능하다: 예를 들면 하루에 24번 동기화를 수행하려면 "Period"라는 항목의 종류가 "REG_DWORD"가 되도록 하고 값은 숫자 24가 되도록 한다.

Windows 2000은 NTP 서버로 동작하게 할 수도 있다: "LocalNTP"라는 레지스트리 항목을 "0"에서 "1"로 수정한다. time service를 재시작하면, 다른 NTP, 혹은 SNTP 클라이언트들이 이 서버에 시작을 물어볼 수 있게 된다. time service가 어떻게 돌아가고 있는지 확인해보려면 time service를 중지한 상태에서 "w32tm.exe"라는 명령어를 실행하면 된다. "w32tm.exe /?"라고 명령행에서 입력하면 설명이 나온다. 그 설명을 참조한다.

Windows NT

이러한 시간 서비스가 Windows NT에서도 제공되는데, NT resource kit에 들어 있는 옛날 방식의 시간 서비스인 Timeserv를 대체하는 녀석이다. Microsoft의 here (FTP)에서 다운로드 받을 수 있다.


[Home] [News] [Products] [Updates] [About us] [Ordering] [AGB] [Contact]

ⓒ 2004 Gude Analog- und Digitalsysteme GmbH

last update: 2005-05-20


  
트랙백   |  댓글   |
Word나 Excel 같은 곳에서 파일을 저장할 때
음성 인식 입력 데이터 같은 것들을 저장할 수 없다고 메시지가
뜨는 게 여간 귀찮은 게 아니다. 나는 저런 기능을 켜 둔 적이 없고
켜 두고 싶지도 않다.

도구 메뉴 -> 옵션
저장 탭에서 "언어 데이터 포함"을 선택 해제한다.

'기타' 카테고리의 다른 글

windows에서 ntp 사용하기 두번째  (0) 2007.01.15
windows에서 ntp 사용하기  (0) 2006.11.09
한글 fixedsys 역슬래쉬 패치  (0) 2005.12.19
Mozilla Thunderbird에서 PGP (GnuPG) 사용하기  (0) 2004.10.03
io buffer의 차이  (0) 2003.12.13
  
트랙백   |  댓글   |
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
  
트랙백   |  댓글   |
예전에 봤던 것 다시 찾느라고 시간이 꽤 걸린 관계로 여기에 백업.
출처는 KLDP에서 찾은 박원규님 작품, 무단으로 퍼옴 -.-;;
http://kldp.org/node/42280#comment-349194


---------------------------------------------
수정본이 나온 것을 발견한 관계로, 링크도 수정하고 글 내용을 퍼왔던 것은 삭제.

'기타' 카테고리의 다른 글

windows에서 ntp 사용하기  (0) 2006.11.09
M$ Word (M$ Office) 음성 인식 기능 해제  (2) 2006.05.23
Mozilla Thunderbird에서 PGP (GnuPG) 사용하기  (0) 2004.10.03
io buffer의 차이  (0) 2003.12.13
포스비의 인증방식  (0) 2003.11.01
  
트랙백   |  댓글   |
 이전  123   다음 

최근댓글
fotowall :: ncloud RSS Feeds today :    yesterday :
total :