Category Archives: 허접프로그래머

[VMWare/Snow Leopard] VMWare 7.0을 이용한 스노우 레오파드 설치기

아이폰 개발을 공부하고 싶지만 맥이 없어 고민이신 분들이 많으실것으로 알고 있습니다. 해킨토시라는 방법도 있지만 접근이 매우 어렵죠. 이에 간단하게 공부 목적으로 사용하실 분들을 위해 VMWare로 돌리는 방법을 알아보려고 합니다. 가장 최근의 OS인 Snow Leopard 10.6.2까지의 업데이트도 매우 잘 됩니다.

* 준비물

VMWare Workstation 7.x 이상
Snow Leopard Retail 시디이미지

Snow Leopard Boot Loader + VMWare Tools 시디 이미지
1045868977.rar1014907866.rar1106206710.rar

VMWare Guest 패치
1266771358.pkg

VMWare 비디오/오디오 패치
1195876112.gz1012331931.gz


* 설치 과정

사용자 삽입 이미지새로운 가상 머신을 추가합니다. 특별한것 없이 대충 Recommend만 유지하면서 만들어주시면 됩니다. 단 OS선택에서는 FreeBSD 64-Bit를 선택해 줍니다. 메모리의 경우 제 노트북이 4G라서 2G정도로 잡아보았습니다.

중요!
이후에 생성된 이미지 파일중 VMware virtual machine configuration(.vmx) 파일을 열어 guestOS의 값을 다음과 같이 수정하여 줍니다.

[code]guestOS = “darwin10-64″[/code]
이제 시디 이미지로 darwin_snow.iso 파일을 마운트 해줍니다. 이 시디로 부팅을 하는데 부팅시에 F8을 눌러 부팅 옵션을 띄우도록 합니다.

사용자 삽입 이미지위와 같은 화면이 뜨게 됩니다. 이 상태에서 스노우 레오파드 리테일 이미지를 마운트 해주도록 합시다. 오른쪽 하단의 시디롬 아이콘이 활성화 되어있어야 시디롬이 정상적으로 마운트 된것입니다. 시디를 바꾸어 주었다면 c를 눌러줍니다.

사용자 삽입 이미지이번엔 시디 부팅 화면이 나옵니다. 이상황에서 그냥 엔터만 쳐서 설치하셔도 상관없습니다만 혹시 무한 재부팅이 된다거나 에러가 발생할 경우 위와 같이 옵션을 설정해 주도록 합니다.

boot: -v -f -x cpus=1 busratio=20

사용자 삽입 이미지위의 화면이 떴다면 절반의 성공입니다. 설치 과정이나 디스크 설정 부분에 대해서는 충분히 자료가 많으니 넘어가도록 하겠습니다.

사용자 삽입 이미지설치가 완료된 후의 모습입니다. 정상적으로 뜬 것을 알 수 있습니다. 여기서부터 VMWare 활용에 필요한 것들을 설치하도록 하겠습니다.

* 부가 설치

1. darwin_snow.iso 파일을 마운트 하면 VMWare Tools 설치가 뜹니다. 이것을 설치해 줍니다.
2. guestd_patches.pkg 파일을 설치해 줍니다.
3. VMsvga, EnsoniqAudioPCI 드라이버를 설치해 줍니다.

* 부팅에 대한 참고 사항

이렇게 설치를 완료하였지만 darwin_snow.iso의 도움이 없이는 부팅이 되지 않습니다. 이 파일을 시디롬 이미지로 마운트 해놓으면 자신이 알아서 자동으로 OS를 로드합니다. 필요한 최소한의 Kext파일도 모두 알아서 로드하기 때문에 따로 해킨을 위한 작업이 없어도 됩니다. 어찌보면 편하죠. 업그레이드 등도 매우 잘 됩니다.

사용자 삽입 이미지이제 아이폰 SDK를 설치하신 후 개발 공부를 시작하시면 됩니다. ^^

[Subversion] 다양한 방법의 SVN 저장소 서비스 운영

SVN은 매우 추천할만한 Version Control 시스템입니다. 실제로 학교에서 프로젝트를 운영할때도 사용했었고 실무에서도 많이 접해오게 된 다방면으로 쓰이는 녀석입니다. 우선 SVN을 사용할때는 통합적으로 소스의 버젼관리를 위해 저장소(Repository)를 운영하게 되는데 24시간 운영되는 서버에서 데몬형식으로 서비스 되는 것이 일반적입니다. 가장 많이 쓰이게 되는 3가지 방법에 대해 알아보도록 하겠습니다.

* 일반 단일 데몬 형태

[code]/usr/bin/svnserve -d -r [저장소경로][/code]
일반적으로 가장 단순한 방법입니다. -d는 daemon의 약자로 데몬형태로 작동시키라는 말이됩니다. 곧바로 하나의 백그라운드 프로세스가 실행되어 svn:// 프로토콜로 접근할 수 있게 됩니다.

* inetd 형태

일반적으로 슈퍼데몬이라고 불리는 inetd(xinetd)에 얹혀 작동하게 되는 방식입니다. 서비스 운영을 슈퍼데몬에 위임하게 되므로 어찌보면 가장 간단하고 깔끔한 방식입니다.

[code]vi /etc/xinetd.d/svn[/code]
위와 같이 svn이라는 서비스를 추가해 줍니다. 파일안에는 다음의 내용을 작성하면 됩니다.

[code]service svn
{
        disable = no
        port = 3690
        socket_type = stream
        protocol = tcp
        wait = no
        user = root
        server = /usr/bin/svnserve
        server_args = -i -r [저장소경로]
}[/code]
user에는 적절히 원하는 사용자를 넣어주시면 됩니다. 보안상 root는 피하시는것이 좋습니다.
xinetd 데몬을 재시작해주시면 바로 사용이 가능해 집니다.

[code]service xinetd restart[/code]
* Apache(mod_dav_svn) 모듈 형태

어찌보면 가장 추천할만한 좋은 방법입니다. 그리고 가장 설정하기가 번거롭습니다. 이 작업은 아파치 웹서버를 직접 컴파일하여 사용하지 않고 기본 패키지에 들어있는 httpd-*.rpm을 사용하는 시스템으로 가정하겠습니다.

우선 httpd가 정상적으로 설치가 되어있는지 확인해 봅시다. 저의 테스트 머신은 엔터프라이즈리눅스 4입니다.
[code]rpm -qa | grep httpd
httpd-manual-2.0.52-41.ent.4
httpd-suexec-2.0.52-41.ent.4
httpd-devel-2.0.52-41.ent.4
httpd-2.0.52-41.ent.4[/code]
[이곳]에 접속하셔서 자신의 머신에 가장 적절한 버젼을 받도록 합니다. 될수 있는한 제공되는 rpm패키지들을 모두 다 설치하는게 좋습니다. subversion뿐만 아니라 mod_dav_svn 패키지를 설치하는 것이 이 작업의 키포인트 입니다.

/etc/httpd/conf.d 위치에 subversion.conf 파일이 생성됩니다. 해당 파일을 설정해 줍시다.
[code]LoadModule dav_svn_module     modules/mod_dav_svn.so

<Location /svn>
   DAV svn
   SVNPath [저장소경로]


   # Limit write permission to list of valid users.
   <LimitExcept GET PROPFIND OPTIONS REPORT>
      # Require SSL connection for password protection.
      # SSLRequireSSL


      AuthType Basic
      AuthName “Authorization Realm”
      AuthUserFile /home/.htpasswd
      Require valid-user
   </LimitExcept>
</Location>[/code]
위에서 참고하실점은 AuthUserFile옵션입니다. htpasswd파일은 아파치 패키지에 포함되어있는 htpasswd명령으로 만들 수 있습니다. (자세한건 구글링 해보시길)

이제 해당 서버에 http://[호스트아이피]/svn 으로 웹브라우저로 접속해 보시면 바로 탐색이 가능하다는 것을 알 수 있습니다. 또한 같은 주소로 SVN 체크아웃을 할 수 있습니다.

– 여러개의 저장소를 묶어서 사용할 시
다음의 두개의 저장소가 있다고 가정해 봅시다. 둘 다 /svn 하위에 존재하고 있습니다.


/svn/repo1

/svn/repo2
이경우 다음과 같은 설정을 사용하여 모두 묶어서 서비스 할 수 있습니다.

[code]<Location /svn>
   DAV svn
   SVNParentPath /svn
   SVNListParentPath on
</Location>[/code]