2008년 11월 15일 토요일

Install KDE4

별로 영양가 없는 작업이었지만 KDE4를 또 지난번처럼 소스를 전체 컴파일하는 방법으로 설치해봤습니다. KDE3 에 비해 KDE4 에서는 killer application 들이 대폭 개선이 되어서 사용하기가 너무 좋아졌습니다. 물론 시스템에 많은 부하를 주는 것은 사실이지만 시스템이 좀 받쳐준다면 사용해도 괜찮을 것으로 보입니다.

다음은 modular-X 와 KDE4 설치에 필요했던 전체 패키지 리스트입니다.




다음은 Killer Application 이라 말할수 있는 OpenOffice3, Konqueror, Amarok 입니다.


KDE4 내에도 Killer Application 이 많이 포함되어있는데요, pdf 뷰어인 Okular, 파일매너저인 Dolphin, 이미지 뷰어인 Gwenview, 구글맵을 연상시키는 Marble 등이 포함되어있습니다.



마지막으로 Qt 개발 환경인 designer, assistant 입니다.



언제부터 GNOME을 버리고 KDE 로 전향했는지는 알수는 없지만 역시 UI 가 예쁜것은 인정할만 하네요. wip pkgsrc 로 부터 설치해야해서 바이너리 없이 전체 빌드하다보니 KDE4 만 설치하는데 거의 하루가 걸리더군요. pkgsrc 받고 나서 make 실행하고 하루는 멀리 떠나 있는게 정신 건강에 좋습니다. openoffice 도 반나절은 걸린다는 거 명심하시구요. 바이너리 패키지가 있으면 그것 쓰는 것이 여러모로 좋을 듯 싶습니다.

점점 더 NetBSD 가 사용하기에 편해지는 것을 보면 개발 플랫폼으로서 뿐만 아니라 사용자 플랫폼으로서 한층 가까워지고 있다는 생각이 드네요. 언제 한번 시간나면 liveCD 라도 만들어봐야겠습니다.

Ref)
Modula-X : http://rubenerdshow.com/blog/modular-xorg-on-netbsd-from-scratch/

2008년 11월 7일 금요일

Use USB wireless LAN Card

전에 PSP 인터넷 기능을 사용하기 위해서 노트북에 장착할 access point를 위해서 장만한 TW-54G 모델을 가지고 있었는데 혹시나 하는 마음에 한번 TS-7200 보드에 연결해 보았습니다,

Ref) http://www.eunicorn.co.kr/kimsboard7/productintro.php?main_file=product/lancard/tw54g.html

위에 적힌 사항대로라면 Ralink사의 RT2571WF 라는 칩을 사용합니다. rum(4) 를 참조하면 해당 디바이스를 지원합니다. 그리고 해당 디바이스가 evbarm을 지원하는것은 같은 계열의 evbarm 하드웨어에서 사용하는 것을 보면 사용이 가능할 거란 느낌이 들어서 우선 무턱대고 연결해봤습니다.

ugen0 at uhub0 port 1
ugen0: Ralink 802.11 bg WLAN, rev 2.00/0.01, addr 2
ugen0: at uhub0 port 1 (addr 2) disconnected
ugen0 detached
ugen0 at uhub0 port 1
ugen0: Ralink 802.11 bg WLAN, rev 2.00/0.01, addr 2

이런 메시지가 나오기는 하는데 사용은 불가능합니다.

커널 설정에 다음라인을 추가하고 컴파일합니다.

rum* at uhub? port ? # Ralink Technology RT2501/RT2601 802.11a/b/g

그런 다음 커널을 올려주고

# ifconfig rum0 192.168.1.10 netmask 0xffffff00 nwid "IPTIME"
하니

failed loadfirmware of file
에러메시지가 뜨네요. sysctl 결과를 보면

hw.firmware.path = /libdata/firmware:/usr/libdata/firmware:/usr/pkg/libdata/firmware:/usr/pkg/libdata

인데요, 커널 컴파일한 노트북에서 /usr/src/sys/dev/microcode/rum 에 보면 rum-rt2573 이란 파일이 있습니다. 이것을 /lib/data/firmware/rum 디렉토리를 만들어 주고 복사를 하고 나면 끝입니다.

ts-7200# dmesg
...
rum0 at uhub0 port 1
rum0: Ralink 802.11 bg WLAN, rev 2.00/0.01, addr 2
rum0: MAC/BBP RT2573 (rev 0x2573a), RF RT2528, address 00:0e:e8:e3:2b:39
rum0: 11b rates: 1Mbps 2Mbps 5.5Mbps 11Mbps
rum0: 11g rates: 1Mbps 2Mbps 5.5Mbps 11Mbps 6Mbps 9Mbps 12Mbps 18Mbps 24Mbps 36Mbps 48Mbps 54Mbps
....

ts-7200# ifconfig -a
epe0: flags=8863 mtu 1500
address: 00:d0:69:40:87:e4
media: Ethernet autoselect (100baseTX full-duplex)
status: active
inet 192.168.0.250 netmask 0xffffff00 broadcast 192.168.0.255
inet6 fe80::2d0:69ff:fe40:87e4%epe0 prefixlen 64 scopeid 0x1
rum0: flags=8802 mtu 1500
ssid ""
powersave off
address: 00:0e:e8:e3:2b:39
media: IEEE802.11 autoselect
status: no network
lo0: flags=8049 mtu 33192
inet 127.0.0.1 netmask 0xff000000
inet6 ::1 prefixlen 128
inet6 fe80::1%lo0 prefixlen 64 scopeid 0x3

ts-7200# ifconfig rum0 192.168.1.10 netmask 0xffffff00 nwid "IPTIME"

이제 default gateway 적절히 잡아주고(192.168.1.1 과 같은) ping 으로 외부 시스템을 걸어주면 정상적으로 됩니다.

ref) rum(4), route(8)

2008년 2월 22일 금요일

Use LCDProc in TS-Linux

Preface
-------
우선 NetBSD에 LCDProc 포팅하는 것이 잘되지 않아서 보드에 기본으로 설치되는 Linux(TS- Linux)를 이용해서 LCD 에 글이 표시되는 것을 해봤습니다. TS-Linux라는 게 별게 아니고 Debian Linux 기반으로 하여 업체에서 보드에 포팅한 Linux 정도라고 생각하시면 됩니다.

LCDProc 포팅
------------
LCDProc 에 대해 간략히 설명하자면 왠만한 Character LCD 제품에 대해 포팅하여 쓸수 있는 아주 좋은 프로그램입니다. Server/Client 구조로 되어 있어서 사용하기에도 좋고 사용자가 LCD의 데이터시트 내용까지 알 필요 없게끔 잘 만들었습니다. 이전에 마이컴수준에서 LCD를 사용해 보았는데 LCD에 글씨 출력하는 게 꽤 노가다를 필요로 합니다. 그런데 요 녀석은 그런 수고를 덜어줍니다.

자, 이제 본격적으로 포팅을 준비하겠습니다. 준비물은,
o LCDproc v0.5.0 Relase Version
from http://lcdproc.org
o TS-72xx 용 패치 파일
lcdproc-0.5.0_hd44780_ts7200.patch
from http://tech.groups.yahoo.com/group/ts-7000/files/ (kym_newbery Oct 1, 2007)
o Debian Linux Sarge 가 설치된 시스템
o Cross Compiler
from ftp://ftp.embeddedarm.com/ts-arm-sbc/ts-7200-linux/cross-toolchains/crosstool-linux-gcc-3.4.2-glibc-2.3.3.tar.bz2
NOTE. 지금까지 계속 crosstool-linux-gcc-3.3.4-glibc-2.3.2-0.28rc39.tar.bz2 를 사용해 왔었는데요 버전에서만 제대로 실행되는 것을 확인했습니다.

컴파일하는 것은 뭐 잘 아실거라 믿습니다. 패치는 다음 처럼 하시면 됩니다. (bash shell 기준)
% tar zxvf lcdproc-0.5.0.tar.gz
% cd lcdproc
copy lcdproc-0.5.0_hd44780_ts7200.patch in here!
% export CC=arm-ep9312-linux-gnu-gcc
% cd lcdproc-0.5.0
% patch -p1 < ../lcdproc-0.5.0_hd44780_ts7200.patch % ./configure --enable-drivers=hd44780 --host=arm-linux-gnu NOTE. Cross Compiler 이름에 CPU ep9312로 되어 있는데 TS-7200 보드의 ep9302 CPU에 사용해도 무방합니다. 컴파일이 끝나면 우리가 원하는 파일들이 생성됩니다. 리스트는, o lcdproc/lcdproc-0.5.0/server/LCDd LCD Server 프로그램 o lcdproc/lcdproc-0.5.0/server/drivers/hd44780.so LCD Server 실행에 필요한 라이브러리 o lcdproc/lcdproc-0.5.0/LCDd.conf LCD Server 설정 파일 LCD Client 프로그램은 lcdproc/lcdproc-0.5.0/clients 에 위치합니다. C로 된것도 있고 perl 스크립트로 되어 있는 것도 있는데 C로 된 것은 해당 디렉토리에서 make 하면 됩니다. 이제 준비물은 끝이 났습니다. LCDd, hd44780.so, LCDd.conf 를 TS-7200에 넘겨주면 되는데 넘기기 전에 LCDd.conf 를 다음 처럼 바꿉니다. % diff LCDd.conf ~/LCDd.conf 35,36c35,36 < driver="CFontzPacket" driver="hd44780"> #Driver=CFontzPacket
> Driver=hd44780
47c47,48
< bind="127.0.0.1"> #Bind=127.0.0.1
> Bind=0.0.0.0
79c80,81
< driverpath="server/drivers/"> #DriverPath=server/drivers/
> DriverPath=/usr/local/lib/lcdproc/
351c353,354
< connectiontype="4bit"> #ConnectionType=4bit
> ConnectionType=ts7200
373c376,377
< size="20x4"> #Size=20x4
> Size=24x2

즉, [server] 설정탭의 Driver와 DriverPath를 수정하고 [hd44780]탭의 ConnectionType, Size를 변경합니다. 전 24x2 LCD를 가지고 있어서 이렇게 변경했는데 해당 사이즈에 맞게 변경해주면 됩니다. (Suprise!)
NOTE. [server]탭의 Bind 값이 127.0.0.1 로 되어있는데 0.0.0.0 으로 하는것이 바람직한 것으로 보입니다.

TS-7200 보드에 준비물을 다음의 디렉토리 위치에 넣어둡니다.
o /etc/LCDd.conf
o /usr/local/bin/LCDd
o /usr/local/lib/lcdproc/hd44780.so

이제 LCD Server 프로그램 준비가 끝났습니다. LCD Client 프로그램도 스크립트가 아닌 C 프로그램을 컴파일했다면 /usr/local/bin 에 위치시키면 모두 완료.

LCDProc 시험
------------
o TS-7200에서 LCDd를 실행합니다. (-d 옵션을 주면 데몬으로 동작합니다. -h 참고)
o Cross Compile 한 Debian System에서 Client 프로그램을 실행합니다.
lcdproc/lcdproc-0.5.0/clients/examples/*.pl
여기서는 fortune.pl을 사용하겠습니다. 우선 fortune.pl에서 $HOST = "localhost"; 의 localhost를
TS-7200의 IP로 변경합니다.
% ./fortune.pl

이렇게 하면 Character LCD에 글자가 표시됩니다. 나머지 client 프로그램도 한번 시도해보시길...


Appendix A
----------
sourceforce.net 에 가면 lcdprocwin 이라는 프로젝트가 있습니다. LCD 서버 프로그램을 윈도우로 포팅한건데 소스 받아다 컴파일하면 각각 디렉토리에 Shared Library_debug.lib, lcdprocwin.exe 이 생성됩니다. 이것과 함께 소스 최상위에 있는 lcdprocwin.conf 파일을 하나의 디렉토리를 만들어서 그곳에 넣습니다. 설정파일은 크게 바꿀게 없고 단지 [server]탭의 Bind=0.0.0.0 로 해두시면 됩니다. Size 조정 해도 됩니다.

실행하면 다음과 같이 윈도우 보안 경고가 뜨는데 반드시 차단 해제 하셔야합니다. 나중에 다시 확인 버튼 선택하니 Client가 연결이 안됩니다.

실행하고 나면 다음과 같이 나옵니다.


도스 창에서 netstat -an 명령으로 확인해서 0.0.0.0:13666 으로 TCP Listen 상태가 되는지 확인 합니다.


먼저 번 Debian 시스템에 있는 Client 프로그램으로 HOST 값을 바꾸어서 연결하면 해당 글씨가 나옵니다.

Conclusion
----------
아직 KeyPad와 연관해서 사용하는 법은 아직 모르겠습니다. 보드에 서버와 클라이언트를 모두 띄워서 KeyPad를 가지고 조작할수 있으면 참 좋겠는데 전 여기까지만 성공했습니다. (기능은 됩니다)

LCDProc 의외로 사용가치가 높습니다. youtube에서 lcdproc으로 검색하면 꽤 멋진 동영상들 많이 나옵니다.

NetBSD에 LCDProc 포팅하는 건 아직 시작해보지는 않았는데 될거라 봅니다. 적절한 패치만 해서 컴파일만 잘 된다면 동일한 기능이 구현되리라 봅니다.

SBC 와 같은 emebedded system에 프로그래밍을 한다는게 참 어려운 작업인 걸 새삼스럽게 느낍니다. 프로그래밍만 아는 반토막 지식을 가지고는 해결해야 할 사항이 의외로 많더군요. 하드웨어마다 데이터시트도 구해서 읽어봐야하고, 전자공학 지식도 있어야 되고 컴퓨터 구조에 대해서도 잘 알아야하고... 산 너머 산입니다.

그래서, 요즘은 역으로 아니 처음부터 그렇게 했어야 했는데 전자공학 책 사서 보고 있습니다. 보드도 8bit 마이크로컨트롤러 구해다 보고 있습니다. 요 녀석 들여다보니 프로그램 입장에서 거의 똑같더군요. 하기야 8bit 이지만 RISC 칩이라서 뭐 큰 구조는 같은 셈이죠.

2008년 2월 12일 화요일

사용기 다시 쓰려고 하는 중...

한동안 사용하지 않다가 다시 사용하려고 하니 다시 막막해 지네요.

한 6개월은 족히 넘은 것 같은데...

요기 써놓은 글 가지고 다시 하고는 있는데 오타도 좀 보이고,,,

어쨌든 보드에 NetBSD 숨결을 다시 불어넣으려 하니 배울게 많아 졌네요!!!

2007년 9월 3일 월요일

Setting up a CVS repository - the pragmatic way

소 잃고 외양간 고친다는 속담이 이 경우에 딱 들어맞는 경우인것 같습니다. cvs repository로 사용하는 linux(WowLinux Paran2)의 filesystem이 완전히 엉망이 되어서(fsck 명령어를 잘못 수행하는 바람에 -_-) 복구 불능이 되어버렸습니다. 복구해도 lost+found 디렉토리에 숫자로된 엄청난 양의 파일들만 뱉어내는 바람에 한숨을 쉬고 나니 지난 2년동안 모아 둔 저장소가 복구가 불가능 한 것을 알고 포기했습니다. 실은 VMWare로 동작하는 거라서 5개월 전 즈음해서 snapshot을 받은 것이 있어서 5개월 전으로 linux 전체 시스템을 복구하는 것은 가능했지만 문제는 CVS 를 백업해
두지 못해서 복구를 할수가 없었습니다. 불행중 다행인 것은 작업하기 전에 CVS를 모두 Checkout 을 해둔 터라 최종 소스는 모두 가지고 있었지만... 솔직히 나 자신이 멍청하다고 생각한 것이 checkout을 한 것을 가지고 CVS 저장소를 복구할 수 있을거란 생각을 여태 가지고 있었다는 사실이었습니다.

CVS is not backup tool!

마지 GNU is not UNIX! 란 슬로건이 생각이 나네요. 어찌되었든 CVS는 자체적인 백업툴을 가지고 있지않습니다. subversion은 이러한 CVS의 단점을 보완해서 백업툴과 같은 것을 가지고 있어서 이번에 다시 저장소를 꾸밀때 svn을 쓸까 cvs를 쓸까 주말내내 두가지 툴을 비교해보았는데 결론은 cvs를 쓰기로 했습니다. 이유는

1. file 단위로 비교하는 version control에 익숙해서
2. webcvs, cvsgraph 가 없으면 허전해서(svn은 websvn을 사용합니다.)
3. svn 사용법을 다른 사람에게 가르쳐주기 귀찮아서
4. svn 설치하기 귀찮아서

그런데 그냥 예전처럼 CVS를 사용하면 외양간 고치는 것 치고는 너무 부실한 것으로 보여서 약간은 BSD style 스럽게 사용해 보고자 하고 꾸며 보았습니다. webcvs가 없는 cvs는 상상도 하기 싫어하기 때문에 bsd 웹 사이트를 보면서 아마 이렇게 꾸미지 않았을까 상상하면서 저장소를 예쁘게(?) 꾸며봤습니다.

-. cvsweb.freebsd.org
-. cvsweb.netbsd.org

그리고 이번 기회에 cvs 저장소는 NetBSD 환경으로 완전히 이전해 버릴 작정입니다. 워낙 기존에 사용하던 linux를 관리하지 않아서 너무 난잡해져 ugly한 모습으로 변해 버려서 이 녀석은 Oracle DB 서버로만 그 기능을 할수 있게끔 할 계획입니다.


NetBSD 설치
-----------
현재 stable 버전인 3.1로 설치했습니다. 모두 선택해서 설치해도 300MB가 조금 넘는 컴팩트한 사이즈로 설치되고 X system도 사용이 가능하니 설치 만큼은 NetBSD가 현 UNIX계열중에는 최고인 것 같습니다. 추가로 설치는 사실상 VMWare로 설치를 한 것이라 설치 끝나고 snapshot 한번 해놓으면 끝.


CVS repository 설정
-------------------
1. cvs 관리 계정 생성
# groupadd -g 2401 cvs
# useradd -s /bin/csh -d /home/cvs -m -g cvs -u 2401 cvs

NOTE. pserver 서비스 포트가 2401이다 보니 전 이렇게 구성을 했습니다. 개인적으로 csh을 좋아하는 편이라 cvs 관리 계정은 이렇게 생성합니다.

2. 카테고리별 저장소 생성
# mkdir /var/cvs
# chown -R cvs:cvs /var/cvs
# chmod ug+rwx /var/cvs
# su - cvs
% cd /var/cvs
% mkdir ${projectcategory}-cvsroot
% chmod ug+rwx ${projectcategory}-cvsroot
% cd ${projectcategory}-cvsroot
% cvs -d /var/cvs/${projectcategory}-cvsroot init
(/var/cvs/${projectcategory}-cvsroot/CVSROOT가 생성됨)

USAGE. ${projectcategory} 는 원하는 프로젝트 카테고리 이름

NOTE. 전에는 가장 일반적인 다음 방법을 사용했었습니다.

# su - cvs
% cvs -d /home/cvs init
(/home/cvs/CVSROOT가 생성됨)

그런 다음 /home/cvs 밑에 모든 프로젝트가 위치하는 식으로 관리를 했었는데 쓰다보니 몇가지 불편한 점이 있었습니다. 가장 큰 사항은 접근 관리(access control)였는데 사내의 다른 인원(trusted user)에게는 저장소에 유저를 추가하는 방법으로 사용해도 큰 문제는 없었는데 저장소에 외부 인원(untrusted user)에게 공개할 때가 가장 짜증나면서도 번거롭기 그지 없었습니다. 저장소를 하나만 쓰다보니 write권한을 주면 해당 프로젝트 뿐 아니라 다른 프로젝트에 까지 write권한이 주어져서 아주 골치가 아프더군요. 제가 알기로 처음에는 cvs 저장소에 어떤 프로젝트 리스트가 있는지 알기가 상당히 어려워졌는데 요즘은 명령어 하나로 프로젝트 리스트를 얻어오는 방법이 있습니다. 어찌되었는 접근 관리로 인해서 프로젝트별로 저장소를 별개로 가져가는 것이 가장 좋은 방법으로 보이고 실제로 BSD 계열의 CVS를 보아도 현재 그렇게 사용하고 있습니다.
가장 단적으로 보여줄수 있는 것은 FreeBSD진영의 cvsweb.freebsd.org로 web으로 보면 다음처럼 꾸며져 있는 것을 알수 있습니다.

cvsweb.freebsd.org
-. CVSROOT/
-. CVSROOT-doc/
-. CVSROOT-ports/
-. CVSROOT-projects/
-. CVSROOT-src/
-. distrib/
-. doc/
-. ports/
-. projects/
-. src/
-. www/

대충 짐작을 하더라도 doc, ports, projects, src 프로젝트는 별개의 저장소를 가지고 있음을 알수 있습니다. 이에 반해 NetBSD 진영의 cvsweb.netbsd.org는 다음처럼 꾸며져 있습니다.

cvsweb.netbsd.org
-. htdocs/
-. othersrc/
-. pkgsrc/
-. src/
-. xsrc/

FreeBSD 진영과는 다르게 CVSROOT/ 가 보이질 않습니다. 이러한 구성은 cvsweb과 관련이 있는데 약간의 trick을 이용하면 원하는 프로젝트만 보이게끔 할수가 있습니다. 사실 이것 역시 조금의 삽질을 통해서 알아내었는데 어찌되었든 결론은 프로젝트 성격별로 CVS 저장소를 마련하는 것이 가장 좋은 방법입니다. 그리고 개별 저장소에 대해서 관리 계정을 다르게 가져가는 것도 가능하지만 제가 관리하는 CVS 저장소는 그렇게까지 복잡하지는 않아서 관리계정은 앞에서 언급한 cvs 유저 계정만으로 충분하다고 판단됩니다.

3. pserver 설정

Don't use pserver. use ssh instead.
ssh 사용을 위해서 /etc/rc.conf에 ssh=YES를 추가합니다.

# /etc/rc.d/sshd start


webcvs 설정
-----------
1. webcvs 설치
앞에서 살펴본 cvs 설정만으로 cvs 사용하는데는 아무런 지장이 없지만 cvs 파일에 대한 기록 내용이나 이전 파일과의 diff를 볼때 webcvs를 주로 사용하므로 전 무조건 설치합니다. 그리고 cvsgraph없는 webcvs는 김빠진 콜라와 같으므로 이것 역시 설치합니다. 따라서 webcvs를 설정하기 위해서는 다음으로 요약할수 있습니다.

apache + webcvs + cvsgraph

각 패캐지마다 의존하는 패키지가 있으므로 실제로는 이것보다 많습니다. 가장 손쉬운 방법은 의외로 소스를 통해 build하는 방법이므로 우선 pkgsrc를 checkout해서 make해서 모두 설치합니다.

2. webcvs 설정
linux에 webcvs를 설정할때는 손이 많이 갔었는데 NetBSD에 설치할때는 apache 패키지의 기본 설정 디렉토리에 cgi 및 설정 파일이 위치하게끔 webcvs 패키지가 꾸며져 있어서 별로 할 일이 없습니다.

-. /usr/pkg/etc/httpd/httpd.conf
손 봐야야 할 부분 없음

-. webcvs icons 파일 복사
# cd /usr/pkg/share/httpd/htdocs
(apache Document Root)
# mkdir icons
# cd icons
# cp /usr/pkg/share/examples/cvsweb/icons/* .

-. cvsweb.css 파일 복사
# cd /usr/pkg/share/httpd/htdocs
(apache Document Root)
# mkdir css
# cd css
# cp /usr/pkg/share/examples/cvsweb/css/cvsweb.css .

-. /usr/pkg/libexec/cgi-bin/cvsweb.cgi
손 봐야야 할 부분 없음

-. /usr/pkg/etc/cvsweb/cvsweb.conf
# vi /usr/pkg/etc/cvsweb/cvsweb.conf

@CVSrepositories 에 경로 추가
'local' => ['Local Repository', '/home/cvs'],

-. /usr/pkg/etc/cvsgraph.conf
손 봐야야 할 부분 없음



프로젝트 추가
-------------
프로젝트 추가는 항상 CVS 저장소의 cvs 관리 계정으로 수행하고, 프로젝트는 원하는 프로젝트 카테고리 하위에 추가하는 것으로 하였습니다.

# mkdir /var/cvswork
# chown -R cvs:cvs /var/cvswork
(cvs 관리 계정에 대한 work 디렉토리 생성)
# su - cvs
% cd /var/cvswork/
% mkdir ${project}
% cd ${project}
% ... add source files...
% cvs -d /var/cvs/${projectcategory}-cvsroot import -m " " ${project} ${project} initial
% ...import 확인...
% cd /var/cvswork
% rm -rf ${project}
% cd
% ln -s /var/cvs/${projectcategory}-cvsroot/${project} ${project}

USAGE. ${projectcategory} 는 원하는 프로젝트 카테고리 이름
${project} 는 원하는 프로젝트 이름


CVS test
--------
위의 단계까지 하였으면 우선 cvs 관련한 설정은 모두 끝난 것으로 보이는데 이제는 test하는 것만 남았습니다. 카테고리명은 test-cvsroot로 하고 프로젝트명은 test로 하였습니다.

1. test 카테고리 저장소 생성
# su - cvs
% cd /var/cvs
% mkdir test-cvsroot
% chmod ug+rwx test-cvsroot
% cd test-cvsroot
% cvs -d /var/cvs/test-cvsroot init
(/var/cvs/test-cvsroot/CVSROOT 생성 확인)

2. test 프로젝트 생성
# su - cvs
% cd /var/cvswork
% mkdir test
% cd test
% cvs -d /var/cvs/test-cvsroot import -m " " test test initial

No conflicts created by this import

% cd /var/cvswork
% rm -rf test

3. test 프로젝트를 webcvs에 등록
# su - cvs
% cd
% ln -s /var/cvs/test-cvsroot/CVSROOT CVSROOT-test
% ln -s /var/cvs/test-cvsroot/test test

4. cvs 사용 계정으로 checkout 및 commit 테스트
% ... cvs 사용 계정으로 로그온 ...
% cd
% mkdir work
% cd work
% setenv CVSROOT /var/cvs/test-cvsroot
% cvs co test
% vi hello.c
#include

int main(void)
{
printf("Hello, World!\n");
return 0;
}
%
% cvs add hello.c
cvs add: scheduling file `hello.c' for addition
cvs add: use 'cvs commit' to add this file permanently
% cvs commit -m "add hello.c file" hello.c
RCS file: /var/cvs/test-cvsroot/test/hello.c,v
done
Checking in hello.c;
/var/cvs/test-cvsroot/test/hello.c,v <-- hello.c initial revision: 1.1 done % 5. remote machine에서 ssh를 통한 접근 테스트 % setenv CVSROOT :ext:${username}@${cvsserverip}:/var/cvs/test-cvsroot % setenv CVS_RSH ssh % cd work % cvs co test The authenticity of host 'xxx.xxx.xxx.xxx' can't be established. RSA key fingerprint is xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx. Are you sure you want to continue connecting (yes/no)? yes Warning: Permanently added 'xxx.xxx.xxx.xxx' (RSA) to the list of known hosts. Password: <...Input Password...>
cvs checkout: Updating test
U test/hello.c
%

USAGE. ${username}은 cvs 사용자 ID, ${cvsserverip}는 CVS Server IP


CSS 적용전


CSS 적용후

프로젝트 등록후


cvsgraph



요약
----
CVS 저장소를 프로젝트 성격별로 하나씩 만들어서 카테고리를 만들고 그 하위에 프로젝트를 추가하는 방식을 사용하였습니다. 그리고 /home/cvs는 단지 해당하는 저장소의 링크를 추가하는 방식으로 웹을 통하여 사용자가 볼수 있도록 허용하였습니다. 즉, 보여주고 싶은 프로젝트만 골라서 보여주는 방식을 사용했습니다. 아마 netbsd의 webcvs가 CVSROOT는 보이지 않고 단지 프로젝트(htdocs, othersrc, pkgsrc, src, xsrc) 만 보이는 것은 이런 방법을 쓰지 않았나 추측해봅니다. 추측을 더욱 가능하게 한 것은 freebsd의 webcvs를 보면 더욱 확신이 드는데 CVSROOT를 CVSROOT-doc 등으로 이름을 바꾸게 되면 cvs 저장소가 제대로 인식을 하지 않는 것으로 알고 있고 또 저렇게 한 화면에 여러 cvs 저장소를 보이게 할려면 dummy directory에 저장소를 symbolic link시키는 방식으로 해야지만 가능합니다.

이렇게 했을때 딱 하나가 불가능한데 cvspserver가 그것입니다. cvspserver 설정시 --allow-root
옵션에서 CVSROOT를 설정하게 되어있는데 이와같이 여러개의 CVS 저장소를 쓰는 경우에는 하나만 사용이 가능합니다.

CVS 백업은 저장소 단위로 가능할 것으로 보이고 저장소별로 remote machine에 sync하는 방식도
가능 할 것으로 보입니다.


Reference
---------
-. Setting up a CVS repository - the FreeBSD way
(http://www.freebsd.org/doc/en_US.ISO8859-1/articles/cvs-freebsd/index.html)
-. cvsweb.freebsd.org
-. cvsweb.netbsd.org

2007년 8월 26일 일요일

NetBSD with KDE 삽질기

TS-7200에 Quick CAM 포팅하려다 잘 안되어서 머리도 식힐겸해서 NetBSD에 KDE를 설치해 보았습니다.

요즘 Ubuntu Linux가 linux 진영에서 하나의 trend로써 전세계적으로 많이 사용되고 있는데 시험삼아 Ubuntu와 Kbuntu를 설치해서 GNOME과 KDE를 한번 비교해봤습니다. FreeBSD를 쓸때에는 Window Maker 이외에는 써보질 않았고 요즘 다시 쓰고 있는 NetBSD 3.1은 XFCE를 사용하고 있는터라 솔직히 GNOME과 KDE가 얼마나 많이 변해왔는지 궁금하기도 하고 2년 넘게 개발 머신으로 사용하고 있는 linux가 현재는 배포되고 있지않은 Wow Linux라서 차기 linux를 선택할 때가 되었다는 생각이 들어 요즘 고르고 있는 중입니다.

Ubuntu 계열 좀 더 정확히 말하면 Debian 계열의 Linux의 장점은 aptitude를 이용한 손쉬운 바이너리 업데이트에 있는데 거기에다 깔끔한 설치화면을 가미하고 CLI환경을 사용자에게 감추는 방식을 사용해서 처음 접하는 사용자에게 그리 어렵지 않게 다가갈수 있도록 배려한 점은 높이 살만합니다.

그래서 이번 기회에 x86계열의 노트북에 VMWare로 NetBSD를 설치할때 순수 바이너리 인스톨만 가지고 얼마나 깔끔한 환경을 제공할 수 있는지 삽질아닌 삽질(?)을 해보았습니다. OS 설치하는 것을 개인적으로 상당히 싫어하는 편이지만 설치할 때 이것 저것 처음 접하는 장면은 화면 캡쳐를 많이 해 두는 버릇이 있어 요번에 설치할때 캡쳐한 화면을 가지고 글을 하나 써보려고 합니다.

목적: KDE 데스크탑 환경으로서의 NetBSD 사용
목표: pkgsrc(2007Q2) 바이너리만 가지고 NetBSD 설치하기
환경: x86 VMWare(WinXP Home), 256MB RAM, 20GB

pkg_add 명령으로 remote에 있는 package를 설치할 수 있는 방법은 PKG_PATH 변수를 이용해서 설치하는 방법이 있는데 예를 들어 다음과 같이 할수 있습니다.(pkg_add(1))

# export PKG_PATH=ftp://ftp.NetBSD.org/pub/NetBSD/packages/2.0/i386/All
# pkg_add -v firefox

dependant한 패키지가 있는 경우 자동으로 설치가 되는데 FreeBSD 만큼 매끄럽게 설치되지가 없습니다. 그래서 하는 수 없이 수동으로 ftp://ftp.NetBSD.org/pub/pkgsrc/packages/NetBSD/i386/3.1_2007Q2/All 에 있는
패키지를 다운로드 받아서 설치하는 방법을 사용했습니다. 그리고 설치하면서 알게 된 사실인데 이 경우에도 dependant한 패키지가 로컬 디렉토리(정확히는 pkg_add를 수행하는 디렉토리)에 있는 자동으로 매끄럽게 설치가 됩니다.

우선 제일 먼저 설치하는 메뉴에서 모든 set를 설치해서 X도 같이 설치 될수 있게끔 했습니다. 그리고 설치후 에는 제가 좋아하는 xdm이 기동 될수 있는 환경으로 꾸몄습니다.

netbsd: {91} cd /etc
netbsd: {92} pwd
/etc
netbsd: {93} diff -bu ttys.orig ttys
--- ttys.orig 2007-08-25 10:17:17.000000000 +0900
+++ ttys 2007-08-25 10:19:53.000000000 +0900
@@ -9,6 +9,7 @@
ttyE1 "/usr/libexec/getty Pc" vt220 on secure
ttyE2 "/usr/libexec/getty Pc" vt220 on secure
ttyE3 "/usr/libexec/getty Pc" vt220 on secure
+ttyE4 "/usr/libexec/getty Pc" vt220 off secure # manual add...
tty00 "/usr/libexec/getty std.9600" unknown off secure
tty01 "/usr/libexec/getty std.9600" unknown off secure
tty02 "/usr/libexec/getty std.9600" unknown off secure


netbsd: {101} pwd
/etc/X11/xdm
netbsd: {102} diff -bu Xaccess.orig Xaccess
--- Xaccess.orig 2007-08-25 16:33:58.000000000 +0900
+++ Xaccess 2007-08-25 16:34:34.000000000 +0900
@@ -45,7 +45,7 @@
# right hand sides can match.
#

-#* #any host can get a login window
+* #any host can get a login window

#
# To hardwire a specific terminal to a specific host, you can
@@ -63,7 +63,7 @@
# so this may not work in all environments.
#

-#* CHOOSER BROADCAST #any indirect host can get a chooser
+* CHOOSER BROADCAST #any indirect host can get a chooser

#
# If you'd prefer to configure the set of hosts each terminal sees,


netbsd: {104} pwd
/etc/X11/xdm
netbsd: {105} diff -bu xdm-config.orig xdm-config
--- xdm-config.orig 2007-08-25 16:36:26.000000000 +0900
+++ xdm-config 2007-08-25 16:36:32.000000000 +0900
@@ -30,4 +30,4 @@

! SECURITY: do not listen for XDMCP or Chooser requests
! Comment out this line if you want to manage X terminals with xdm
-DisplayManager.requestPort: 0
+!!DisplayManager.requestPort: 0


netbsd: {113} pwd
/etc/X11
netbsd: {114} cat XF86Config
Section "ServerLayout"
Identifier "XFree86 Configured"
Screen 0 "Screen0" 0 0
InputDevice "Mouse0" "CorePointer"
InputDevice "Keyboard0" "CoreKeyboard"
EndSection

Section "Files"
RgbPath "/usr/X11R6/lib/X11/rgb"
ModulePath "/usr/X11R6/lib/modules"
FontPath "unix/:7100"
# FontPath "/usr/X11R6/lib/X11/fonts/misc/"
# FontPath "/usr/X11R6/lib/X11/fonts/Speedo/"
# FontPath "/usr/X11R6/lib/X11/fonts/Type1/"
# FontPath "/usr/X11R6/lib/X11/fonts/CID/"
# FontPath "/usr/X11R6/lib/X11/fonts/75dpi/"
# FontPath "/usr/X11R6/lib/X11/fonts/100dpi/"
# FontPath "/usr/X11R6/lib/X11/fonts/TTF/"
# FontPath "/usr/pkg/lib/X11/fonts/TTF/"
# FontPath "/usr/pkg/lib/X11/fonts/local/"
EndSection
Section "Module"
Load "extmod"
Load "glx"
Load "dbe"
Load "record"
Load "xtrap"
Load "type1"
Load "speedo"
Load "xtt"
EndSection
Section "InputDevice"
Identifier "Keyboard0"
Driver "keyboard"
EndSection

Section "InputDevice"
Identifier "Mouse0"
Driver "mouse"
Option "Protocol" "wsmouse"
Option "Device" "/dev/wsmouse"
Option "ZAxisMapping" "4 5"
EndSection

Section "Monitor"
Identifier "Monitor0"
VendorName "Monitor Vendor"
ModelName "Monitor Model"
# HorizSync 31.5 - 35.1
# VertRefresh 50.0 - 70.0
Option "DPMS"
EndSection

Section "Device"

### Available Driver options are:-
### Values: : integer, : float, : "True"/"False",
### : "String", : " Hz/kHz/MHz"
### [arg]: arg optional
#Option "HWcursor" # []
#Option "NoAccel" # []
Identifier "Card0"
Driver "vmware"
VendorName "VMware Inc"
BoardName "[VMware SVGA II] PCI Display Adapter"
BusID "PCI:0:15:0"
EndSection

Section "Screen"
Identifier "Screen0"
Device "Card0"
Monitor "Monitor0"
DefaultDepth 16
SubSection "Display"
Viewport 0 0
Depth 16
Modes "1024x768"
EndSubSection
SubSection "Display"
Viewport 0 0
Depth 1
EndSubSection
SubSection "Display"
Viewport 0 0
Depth 4
EndSubSection
SubSection "Display"
Viewport 0 0
Depth 8
EndSubSection
SubSection "Display"
Viewport 0 0
Depth 15
EndSubSection
SubSection "Display"
Viewport 0 0
Depth 16
EndSubSection
SubSection "Display"
Viewport 0 0
Depth 24
EndSubSection
EndSection


netbsd: {120} pwd
/etc
netbsd: {121} cat rc.conf
...
hostname=netbsd.myhome
defaultroute="172.20.10.1"
sshd=YES

xfs=YES
xdm=YES xdm_flags=""


netbsd: {124} pwd
/etc
netbsd: {125} cat ifconfig.pcn0
up
172.20.1.8 netmask 255.255.0.0 media autoselect

netbsd: {126} pwd
/etc
netbsd: {127} cat hosts
...
172.20.1.8 netbsd netbsd. netbsd.myhome


여기까지하면 X와 ethernet 설정은 어느정도 마무리가 되었고 추가적으로 차후 pkgsrc 컴파일시 편리하게
하기 위해서 저는 sudo 를 설치하여 사용합니다.

netbsd: {136} pwd
/usr/pkg/etc
netbsd: {137} diff sudoers.orig sudoers
25c25
< # %wheel ALL=(ALL) NOPASSWD: ALL --- > %wheel ALL=(ALL) NOPASSWD: ALL


netbsd: {143} pwd
/etc
netbsd: {144} cat mk.conf
.if exists(/usr/pkg/bin/sudo)
SU_CMD= /usr/pkg/bin/sudo /bin/sh -c
.endif

이렇게 하고 난 다음 .xinitrc 는 다음 처럼 편집합니다.
netbsd: {145} cd
netbsd: {145} touch .xinitrc
netbsd: {145} ln .xinitrc .xsession
netbsd: {145} cat .xinitrc
#!/bin/sh
# $Xorg: xinitrc.cpp,v 1.3 2000/08/17 19:54:30 cpqbld Exp $

userresources=$HOME/.Xresources
usermodmap=$HOME/.Xmodmap
sysresources=/etc/X11/xinit/.Xresources
sysmodmap=/etc/X11/xinit/.Xmodmap

# merge in defaults and keymaps

if [ -f $sysresources ]; then
xrdb -merge $sysresources
fi

if [ -f $sysmodmap ]; then
xmodmap $sysmodmap
fi

if [ -f $userresources ]; then
xrdb -merge $userresources
fi

if [ -f $usermodmap ]; then
xmodmap $usermodmap
fi

# start some nice programs

### nabi ###
export LANG=ko_KR.UTF-8
export XMODIFIERS="@im=nabi"
nabi &

### kde ###
startkde

여기까지 오면 이제 설정은 다 끝난 것으로 보이는데 다시 재부팅을 하면 xdm 환영 메시지가 나옵니다.
개인적으로 Xmanager와 같은 프로그램으로 연결을 하는 것을 좋아하기 때문에 xdm이 안 떠 있으면 X 쓰는
기분이 나질 않습니다^^



01) KDE 설치 완료후 첫 페이지(설정 화면)


02) 설정 완료후 처음 보게 되는 화면


03) KDE 설치에 따른 pkg_info 리스트


04) KDE 기본 fonts


05) 아무런 설정없이 nabi 실행(.xinitrc 에 nabi 설정을 하지 않은 경우)


06) mlterm 실행



07) misc 설치(qt4, gtk+, OpenOffice2 ...)


08) GTK+2 개발 환경 테스트


09) QT4 개발 환경 테스트


10) gimp 설치 및 실행(실행이 되지 않음)


11) gtkmm 설치 및 개발 환경 테스트


12) nabi와 한글 입력 테스트


13) KDE logout


NOTE.
qt4 설치시 문제가 있는데 2007.08.26 현재 2007Q2 바이너리를 설치하면 안됩니다.
대신 2007Q1의 패키지를 설치해야 합니다. 2007Q2의 qt4-libs-4.2.3nb1에 Xml과 같은 라이브러리가
빠져 있어 designer, assistant와 같은 프로그램(qt4-tools-4.2.3)이 실행되지 않습니다. 더군다나
2007Q2에는 qt4-tools가 빠져있습니다. 따라서 다음 패키지는 2007Q1의 것을 이용했습니다.

qt4-libs-4.2.3nb1 C++ X GUI toolkit
qt4-tools-4.2.3 QT GUI (WYSIWYG) builder and other tools
qt4-docs-4.2.3 Documentation for the QT C++ X GUI toolkit

Conclusion:
4GB 가 조금 넘는 양을 설치하고서야 위의 모든 기능이 설치가 되었는데 Kbuntu는 2GB 가 조금 넘는 크기를 가집니다. Kbuntu의 경우 개발 환경이 배제된 상태에서 이정도를 차지 하므로 사실상 설치 크기를 비교한다는 것은 아무런 의미가 없습니다. 패키지는 거의 200개에 육박할 정도로 설치가 되었는데 한가지 아쉬운 것은 KDE에서 처음 지향한 개발 모델에서 한가지 유감스러운 감이 있습니다. 라이브러리가 지나치게 많이 설치되는 문제가 있는데 이는 처음 KDE 프로젝트를 시작할 때 메일링리스트에 올린 글을 참조한다면 거의 해결하지 못했다는 느낌이 듭니다. 아무래도 오픈 소스의 가장 큰 딜레마가 아닐까 합니다.

데스크탑 OS로서의 NetBSD. 아주 쓸만합니다!

2007년 8월 20일 월요일

KDE vs GNOME

또 약간은 현 게시판 성격에 맞지 않는 글이지만 요즘 제가 GUI toolkit에 맛을 들여서 헤어나오질 못하고 있습니다. 간단하게 두가지를 비교해 보았는데요, 비교는 그나마 객관적으로 하기 위해서 초기 프로젝트를 시작할때 리더가 메일링 리스트에 올린 글을 가지고 비교해 보았습니다.


http://groups.google.com/group/comp.os.linux.misc/tree/browse_frm/thread/4836e257721ab7fb/cb4b2d67ffc3ffce?rnum=1&_done=%2Fgroup%2Fcomp.os.linux.misc%2Fbrowse_frm%2Fthread%2F4836e257721ab7fb%2F10e10a7a9e08943b%3Flnk%3Dgst%26#doc_cb4b2d67ffc3ffce

http://mail.gnome.org/archives/gtk-list/1997-August/msg00123.html

Q. what is NOT a GUI
A. KDE
- X Window System
- widget: motif, athena, ...
- Window manager
A. GNOME
- There is no assumption.

Q. Goals
A. KDE
- A GUI for endusers
A. GNOME
- a free and complete set of user friendly applications and desktop tools

Q. which toolkit to choice to develop
A. KDE
- Qt
A. GNOME
- GTK toolkit

Q. Programming language(base language)
A. KDE
- C++
A. GNOME
- C

사실 두가지 프로젝트의 공통점이 상당히 많은데 그 중 가장 대표적인 것이라고 한다면 모든 것을 다시 만들어가는 방식이 아닌 기존에 만들어져 있는 toolkit을 그대로 이어가가는 방식을 택했습니다. 여기에서 base 언어가 되는 C, C++ 때문에 Qt의 라이센스 보다는 이것가지고 양측의 설전이 아직도 오고가고 있습니다. 개인적인 생각으로는 라이센스 문제를 생각하자면 일반적으로 생각하는 것과는 다르게 KDE 진영이 훨씬 유리하다고 봅니다. Full time으로 Qt 라이브러리에 회사 운명을 건 TrollTech라는 회사가 든든한 버팀목이 되어주는 것에 비해 RedHat은 GNU 라이센스를 오픈 소스에 적용하고 있지만 Fedora, GNOME 에 대한 지원이 많이 부족한 것으로 보이고 프로젝트 역시 조금은 매끄럽게 진행되지 못한다는 느낌이 듭니다. 초기 RedHat 배포본을 만들던 초심을 가지고 GNOME 프로젝트를 지원한다면 하는 아쉬움이 있습니다.

그리고 두 프로젝트의 초기 경쟁자는 KDE도 GNOME도 아닌 Motif로 대변되는 CDE 진영이라는 사실이 조금은 낯설게 느껴집니다. KDE 진영은 위에서 언급한바와 같이 단순한 toolkit은 GUI가 될수없다는 논리를 펴고 있고 프로젝트 처음 공포시 CDE가 존재하긴 했지만 늦은감이 없지않아 그 틈새 시장을 비집고 들어간 것이라봐야 될 것이고, GNOME 진영 역시 KDE 보다 1년 뒤늦게 시작했지만 경쟁자로서 CDE가 존재한다는 것은 모를리가 없었을 겁니다.

Qt vs GTK 라고 하면 조금 이야기가 달라지겠지만 지금은 KDE와 GNOME의 비교를 하는 것이니 한가지 더 짚고 갈 것이 있는데 이는 지향하고자 하는 방향이 사뭇 다릅니다. 이는 enduser뿐만아니라 developer를 두 진영으로 나누게 되는 계기도 되는데 KDE는 Qt라고 하는 단일 toolkit으로 모든 것을 해결하려고 하고 있고 GNOME진영은 가능한 visual element를 잘게 나누어서 서로 공유하자는 방향으로 나아가고 있습니다. 이는 11년째를 맞고 있는 KDE와 올해 10년째를 맞고 있는 GNOME(GNOME 탄생일이 재미있게도 8월 15일 입니다.) 이 한결같이 지켜오고 있습니다. 단적인 예로 Qt는 FTP, TELLET과 관련된 컴포넌트가 존재합니다. 그리고 addon으로 찾아보면 RS-232 통신에 관련된 컴포넌트도 존재합니다. 하지만 GNOME의 toolkit에는 그러한 것이 존재하지 않습니다. UNIX의 초기 철학을 잘 반영하는 것이 GNOME 진영인 것은 확실합니다. 하지만 Qt와는 반대로 너무나도 여러개로 나뉘어 있는 GNOME toolkit(GLib, GObject, Pango, ATK, GdkPixbuf, GDK, GTK) 들이 별개로 업데이트 되고 있는 현실이고 또한 각 toolkit 별로 버전번호도 상이해서 enduser입장에서 meta-package로 설치하는 GNOME toolkit을 생각할 때 이부분은 반드시 해결해야 할 숙제라고 봅니다. 다행히 GNOME 진영의 developer 사이에서 이 부분에 대한 검토가 이루어지고 있는 것으로 보아 조만간에 좋은 소식을 접할수 있을 것으로 기대합니다.

현실적인 문제라고 봐야할지는 모르겠지만 1년 늦게 시작한 GNOME이 KDE에 비해 조금은 뒤쳐지는 것은 저만 느끼는 것인가요. 항상 KDE에서 먼저 소개되고 이후에 같은 것이 GNOME에 소개되는 것을 보면 중앙집중적으로 발전해나가는 KDE의 개발 전술을 따라 잡기는 역부족이 아닌가 싶습니다.

마지막으로 위의 두 프로젝트와는 별개로 BSD License를 가지고 시작하는 프로젝트가 하나 있습니다. E17이라고 명명한 enlightenment 진영의 약진이 그것인데요, 개발의 방향은 GNOME과 비슷합니다. 즉 toolkit의 다양화(diverse)로 기존의 enlightenment를 새롭게 재탄생시키고자 많은 노력을 하고 있습니다. 초기 window manager 의 프로젝트가 현 3세대의 KDE, GNOME, XFCE 진영의 삼국 시대를 사국 시대로 만들어 갈 수 있을지 자뭇 기대가 됩니다.