나이먹은 MBP

~2014/daily 2010. 11. 2. 22:55 |
2008년 8월에 나에게 온 MBP.
이제 2년을 넘어 애플 케어 기간도 길게 남지 않은 이때
하나 둘 씩 고장이 나는구나.

디스플레이,
스피커,
블루투쓰 모듈
...

어제는 아답터가 생을 마감하여 오늘 교체받아왔다.
...
영 안어울리는 구나..


Posted by unknowny
:
지난 밤 삽질의 기억을 정리한다.

발단.
연구실에서는 현재 제대로된 소스 관리가 이루어지지 않고 있다. '버전관리'의 개념은 커녕 각자가 개발하고 있는 소스를 체계적으로 관리하고 공유하려는 노력도 없는 상태.
게다가 얼마전 연구실 서버를 갈아엎으면서 기존의 cvs, svn 서버를 날린 상태.
그래서 놀고 있는 맥미니(Intel Core Duo, 2006년 모델)에 개발 서버 환경을 설치하고자 한다.

전개.
일단 subversion server를 설치하기 위해 구글 검색을 해 보았다. 사실 Snow Leopard 에는 이미 svn, apache2 가 지원되므로 간단한 터미널 명령을 통하여 svn 서버를 구축할 수 있다. (는 것을 삽질을 다 해 보고 깨달았다.)

아래의 사이트를 참고하였으며 이 사이트에서 설명하는 바를 차근히 좇으면 문제없이 진행된다. 한 곳만 빼고.
위 사이트를 거의 번역하는 수준에서 일단 진행하도록 하겠다.

0. 개요. 
위 사이트는 Mac OSX Leopard에 subversion server와 trac을 설치하고 승인된 사용자만 접근할 수 있으며 id/pw 정보를 주고 받을 때 https 프로토콜을 이용한 암호화를 제공하는 웹 사이트 및 svn 서버 구축 방법을 설명하고 있다. 진행은 "터미널"에서 이루어지며 관리자 권한으로 진행한다.
먼저 subversion 저장소와 trac 디렉토리를 미리 정하자. 이 글에서는 다음과 같이 정하였다. 
trac 저장소 - /usr/local/project/trac
svn 저장소  - /usr/local/project/svn
각각의 저장소 하위 디렉토리에 프로젝트 별 저장소를 만들 것이다.
이 글에서는 예제로 coffee 라는 프로젝트를 생성하겠다.


1. Subversion 저장소 만들기
# cd /usr/local/project/svn
# svnadmin create coffee
 
새로 생성된 저장소에 기본 구조를 만들고 이를 commit 한다.
# cd /tmp
# svn co file:///usr/local/project/svn/coffee
# cd coffee
# svn mkdir tags branches trunk
A         tags
A         branches
A         trunk
# svn ci -m "initial structure"
Adding         branches
Adding         tags
Adding         trunk

Committed revision 1.

2. HTTP를 통한 접근 활성화. (웹 브라우저에서 저장소에 접근할 수 있다.)
Mac OSX에는 apache 웹 서버가 기본으로 지원된다. 확인하는 방법은 "시스템 환경설정(System Preferences) > 인터넷 및 무선 - 공유(Sharing)" 에서 왼쪽 목록에서 "웹 공유(Web Sharing)"를 켜면 아파치 웹 서버가 가동된다.
http 프로토콜로 svn에 접근하도록 하기 위해서는 /etc/apache2/httpd.conf 파일을 편집해야 한다. 이 파일은 아파치 웹서버의 설정정보를 가지고 있다.
이 파일은 분량이 방대하고 많은 정보를 담고 있으므로 보통 별도의 설정 파일을 만들고 이를 httpd.conf 파일에서 include 한다.

subversion 설정 파일을 /etc/apache2/extra 폴더에 만든다. (파일이름은 꼭 아래의 예를 따라갈 필요는 없다. 적당히 정해준다.)
# cd /private/etc/apache2/extra
# vi httpd-subversion.conf

httpd-subversion.conf 파일에 아래와 같은 내용을 입력한다.
LoadModule dav_svn_module     libexec/apache2/mod_dav_svn.so
LoadModule authz_svn_module   libexec/apache2/mod_authz_svn.so

<Location /svn/coffee>
   DAV svn
   SVNPath /usr/local/project/svn/coffee
</Location>
첫번째 줄은 apache2 시작시에 svn 모듈을 로드하는 명령이고 두번째 줄은 svn authorizing 모듈을 로드하는 명령이다.
<Location>은 URL에서 도메인 네임 (또는 IP) 뒤에 붙는 주소의 위치를 알려주는 정보이다.
(예를 들어, http://localhost/svn/coffee 라고 url을 입력하면 /svn/coffee의 위치를 정해줌)

이제 httpd.conf 파일에 httpd-subversion.conf 파일을 include 하도록 하자.
/etc/apache2 에서 httpd.conf 파일을 관리자 권한으로 열고 아래를 적당한 위치에 추가한다.
# Subversion
Include /private/etc/apache2/extra/httpd-subversion.conf
(/etc와 /private/etc 에 대해서는 위에 링크한 사이트에서 읽어보시라. 둘다 같은 위치임.)

이제 아파치 서버를 다시 시작하고 웹 브라우저에서 svn 서버에 접근할 수 있는지 확인해보자.
아파치 서버 재시동은 "시스템 환경설정(System Preferences) > 인터넷 및 무선 - 공유(Sharing)" 에서 왼쪽 목록의 웹 공유를 껐다 켠다.
http://localhost/svn/coffee
앞에서 추가한 branches, tags, trunk 폴더가 웹 브라우저에 보이면 성공. 에러나면... 나도 모름.

3. svn 서버 접근 시 사용자 ID 및 패스워드 적용하기.
sonzea - Installing a Subversion server on Leopard 사이트에서는 웹 서버에서 SSL 활성화를 먼저 설명하고 있으나 여기서는 일단 svn 서버 접근 시 ID/PW 요구하는 것을 먼저 설명한다.

사용자 ID와 패스워드 정보를 관리할 authentication 파일을 생성한다.
# htpasswd -cm /etc/apache2/subversion.auth starbucks
New password: *****
Re-type new password: *****
Adding password for user starbucks
-c는 파일을 새로 생성함을 뜻하고, -m은 패스워드를 암호화하도록 하는 옵션이다.
위 명령은 /etc/apache2 디렉토리에 subversion.auth 라는 파일을 만들고 starbucks라는 아이디를 추가한다. 이때 패스워드를 암호화한다.
subversion.auth 파일을 텍스트 에디터로 열어보면 사용자 아이디와 암호화된 패스워드를 볼 수 있다.
파일을 생성한 후 사용자를 추가할 때는 다음과 같이 한다.
# htpasswd /etc/apache2/subversion.auth pascucci

이제 /etc/apache2/extra/httpd-subversion.conf 파일을 열어서 svn 저장소에 접근 시 사용자 아이디와 패스워드를 묻도록 만들자. 
LoadModule dav_svn_module     libexec/apache2/mod_dav_svn.so
LoadModule authz_svn_module   libexec/apache2/mod_authz_svn.so

<Location /svn/coffee>
   DAV svn
   SVNPath /usr/local/project/svn/coffee

   # How to authenticate a user
   AuthType Basic
   AuthName "Subversion repository"
   AuthUserFile /private/etc/apache2/subversion.auth
   # Only authenticated users may access
   Require valid-user
</Location>

웹 서버를 재시작 후 다시 웹 브라우저에서 다시 접근하면 다음과 같이 아이디와 패스워드를 묻는 화면을 볼 수 있다.

4. SSL을 이용한 사용자 정보 암호화
OpenSSL을 이용한 사용자 정보 암호화는 sonzea - Installing a Subversion server on Leopard 사이트를 참고하도록 한다.

5. Trac의 설치
Trac 설치는 http://trac.edgewall.org/ 를 참고한다.
  
sonzea 웹에서는 clearsilver 라는 프로그램을 먼저 설치하라고 안내하고 있는데 이것 없이도 Trac 0.12 버전은 문제없이 설치됐다. 아래는 sonzea 웹의 Trac 설치 방법을 그대로 옮긴 것이다.

From http://www.clearsilver.net/downloads/ get clearsilver-0.10.5.tar.gz

Extract, configure and build

$ tar xzf clearsilver-0.10.5.tar.gz 
$ cd clearsilver-0.10.5
$ ./configure --with-python=/usr/bin/python
$ make
$ sudo make install

perhaps also

$ cd python
$ sudo python setup.py install

Download the latest stable version of Trac fromhttp://ftp.edgewall.com/pub/trac/Trac-latest.tar.gz. Then extract and install the system:

$ tar zxf trac-latest.tar.gz
$ cd trac-latest
$ sudo python ./setup.py install

※ copied from http://www.sonzea.com/articles/subversion-trac.html



6. Trac을 apache 웹 서버를 통해 기동하기.
여기가 삽질을 한 부분인데 sonzea 블로그를 통해서 설치를 진행하면 잘 되다가 Configure Apache to run TRAC using FastCGI 부분에서 제대로 동작을 하지 않게 된다.
여기서부터는 Trac의 공식 설치 가이드 중 Running Trac on a Web Server 를 따른다.

apache 웹 서버를 통한 Trac의 구동 방법은 웹 브라우저를 통해 Trac이 설치된 경로로 사용자가 접근하면 trac.fcgi 를 실행하도록 환경을 꾸미는 것이다. 그러나 sonzea 블로그의 방법을 그대로 좇으면 /usr/local/share/trac/cgi-bin/trac.fcgi 가 존재하지 않아 해당 웹 페이지에 접근할 수가 없다.

먼저 Trac 프로젝트를 새로 생성한다. coffee라는 프로젝트를 생성하도록 하겠다.
# mkdir -p /usr/local/project/trac/coffee
# trac-admin /usr/local/project/trac/coffee initenv
위와 같이 실행하면 프로젝트 이름과 db 이름을 입력하는 프롬프트를 만난다. 프로젝트 이름은 coffee로 하고 두번째는 그냥 엔터를 입력해서 디폴트 값을 사용하도록 한다.

이제 fcgi를 통해서 Trac을 실행시킬 수 있는 환경을 마련하자. 이것은 한번만 해주면 된다. 
# trac-admin /usr/local/project/trac/coffee deploy /tmp/deploy
# mv /tmp/deploy/* /usr/local/project
위를 실행하기 전에 /tmp/deploy 디렉토리가 존재한다면 비어있는지 확인한다.
위를 실행하면 /usr/local/project 디렉토리 아래 cgi-bin, htdocs 디렉토리가 생성된다. 이렇게 생성된 cgi-bin 디렉토리가 sonzea 블로그의 /usr/local/share/trac/cgi-bin/trac.fcgi 에 해당하는 cgi-bin 디렉토리이다.

/usr/local/project/cgi-bin 디렉토리에 가면 trac.cgi, trac.fcgi, trac.wsgi 세 개의 파일이 있음을 확인할 수 있다. 세 파일에 실행 권한을 주자.
# chmod +x trac.*


이제 apache 웹 서버와 연동하기 위한 준비가 되었다. subversion 과 마찬가지로 별도의 설정파일을 만든다. 
Trac은 FastCGI를 사용하므로 먼저 이에 관한 설정 파일을 만든다. /private/etc/apache2/extra/httpd-fastcgi.conf 파일을 아래 내용으로 만든다.
# Enable fastcgi for .fcgi files
<IfModule mod_fastcgi.c>
   AddHandler fastcgi-script .fcgi
   FastCgiIpcDir /private/var/run/fastcgi
</IfModule>

LoadModule fastcgi_module libexec/apache2/mod_fastcgi.so

아래의 내용으로 /private/etc/apache2/extra/httpd-trac.conf 파일을 생성한다.
ScriptAlias /trac/coffee /usr/local/project/cgi-bin/trac.fcgi
FastCgiConfig -initial-env TRAC_ENV=/usr/local/project/trac/coffee

<Location "/trac/coffee">
   SetEnv TRAC_ENV "/usr/local/project/trac/coffee"
</Location>

<Directory "/usr/local/project/cgi-bin">
   AllowOverride None
   Options None
   Order allow,deny
   Allow from all
</Directory>

httpd.conf 파일에 httpd-trac.conf 파일을 include 하도록 하자.
/etc/apache2 에서 httpd.conf 파일을 관리자 권한으로 열고 아래를 적당한 위치에 추가한다.
# FastCGI
Include /private/etc/apache2/extra/httpd-fastcgi.conf
# TRAC
Include /private/etc/apache2/extra/httpd-trac.conf

웹 서버를 재시작하고 아래와 같이 웹 브라우저에서 접근해 보자.
http://localhost/trac/coffee

7. Trac 사용자 등록
Trac에서는 별도의 회원가입(register) 기능이 없다. subversion 에서의 사용자 추가와 마찬가지 방법을 통하여 사용자를 관리한다. subversion 에서 생성한 authentication 파일을 그대로 사용한다.

/etc/apache2/extra/httpd-trac.conf 파일을 다음과 같이 수정한다.
ScriptAlias /trac/coffee "/usr/local/project/cgi-bin/trac.fcgi"
FastCgiConfig -initial-env TRAC_ENV=/usr/local/project/trac/coffee

<Location "/trac/coffee">
   SetEnv TRAC_ENV "/usr/local/project/trac/coffee"
</Location>

<Location "/trac/coffee/login">
   AuthType Basic
   AuthName "coffee Project"
   AuthUserFile /private/etc/apache2/subversion.auth

   Require valid-user
</Location>

<Directory "/usr/local/project/cgi-bin">
   AllowOverride None
   Options None
   Order allow,deny
   Allow from all
</Directory>

웹 서버를 재시작하고 coffee 프로젝트에 접근한다. 첫 화면 오른쪽 상단에 Login을 클릭하면 다음과 같이 나타난다.


끝.

앞으로 할 일.
Trac과 subversion 연동

Posted by unknowny
:
오늘도 내 삽질 인생에 족적을 남긴다.

이번에는 공개 개발 툴인 Eclipse를 맥에 설치하여 보았다. Eclipse는 open source, cross platform의 통합 개발 도구, 이른바 Integrated Development Environment(IDE)이다. 더 이상의 자세한 설명은 생략.

오늘 삽질했던 내용.
1. 정적 라이브러리로 개발하여 빌드된 "libuser.a" 라는 라이브러리가 있다고 하자. 이놈을 응용프로그램 프로젝트에서 링크하려고 한다. 어떻게?
  1. 응용프로그램 프로젝트의 Properties을 연다. (옵션+엔터)
  2. 좌측의 메뉴에서 C/C++ Build > Settings 항목을 선택.
  3. 오른쪽 창에서 Tool Settings를 선택. (첫번째 항목임)
  4. 서브 메뉴의 MacOS X C++ Linker > Miscellaneous 선택.
  5. Other objects 항목에 링크하고자 하는 라이브러리를 입력한다.
  6. Build
2. 이렇게하여 링크할 라이브러리를 추가하고 다시 빌드 하였더니 이번에는 다음과 같은 링크에러가 떴다.
구글신에게 물어보자. 원인은 정적라이브러리의 오브젝트 파일(.o)들을 압축할 때 목차를 만들지 않았기 때문이다. 콘솔에서는 ranlib 명령을 이용하는데 Eclipse의 Static Library 프로젝트 템플릿에서는 이 과정을 거치지 않는 모양이다. 해결책은 다음과 같음.
  1. 정적라이브러리 프로젝트의 Properties을 연다.
  2. 좌측의 메뉴에서 C/C++ Build > Settings 항목을 선택.
  3. 오른쪽 창에서 Tool Settings를 선택. (첫번째 항목임)
  4. 서브 메뉴의 GCC Archiver >> General 선택.
  5. Archiver flags라는 항목 하나가 나타난다. 여기에 "-r -s"라고 입력.
  6. Build
다시 빌드를 하면 Console 창에서 ranlib이 실행됐음을 확인할 수 있다.

3. 이렇게 해서 끝난 줄 알았더니 끝이 아니었음. 3D 시뮬레이터라서 OpenGL, GLUT, glew 등의 라이브러리가 필요했던 것.

glew의 추가: glew는 macports를 이용하여 설치했으므로 다른 Linux OS와 같이 링크한다.
  1. 응용프로그램 프로젝트의 Properties을 연다. (옵션+엔터)
  2. 좌측의 메뉴에서 C/C++ Build > Settings 항목을 선택.
  3. 오른쪽 창에서 Tool Settings를 선택. (첫번째 항목임)
  4. 서브 메뉴의 MacOS X C++ Linker > Libraries 선택.
  5. Libraries (-l) 항목에 glew를 추가. 
OpenGL, GLUT의 추가: OpenGL 및 GLUT 라이브러리는 위와 같은 방법으로는 추가가 안된다. 맥 OSX에서는 OpenGL과 GLUT를 framework(헤더와 라이브러리가 들어있는 압축파일)로 제공하고 있다.
  1. 응용프로그램 프로젝트의 Properties을 연다. (옵션+엔터)
  2. 좌측의 메뉴에서 C/C++ Build > Settings 항목을 선택.
  3. 오른쪽 창에서 Tool Settings를 선택. (첫번째 항목임)
  4. 서브 메뉴의 MacOS X C++ Linker > Miscellaneous 선택.
  5. Linker flags 라는 한줄짜리 항목이 있다. 이곳에 "-framework GLUT -framework OpenGL" 을 입력.

이렇게 해서 결국 성공했음.





Posted by unknowny
: