안녕하세요. moltak 입니다.


메인 OS를 리눅스로 바꾼게 1주일 쯤 됐네요.
불편한 것은 거의 없었고. 아주 빠르고 쾌적한 환경에 매우 만족 중입니다.

다만... MS Office를 제대로 사용할 수 없다는 점이 좀 걸리긴 했었습니다.
(Wine으로 사용하는 MS Office는 반쪽 자리더군요. 기능이 잘 안되는....)
그래서 Virtual Box에 윈도우7을 깔아서 MS Office를 이용했습니다.
하지만 너무도 느린 속도 탓에(도대체 왜 이렇게 느린건지)
엄청난 메모리 사용량...(Win7 구동전 15% 구동후 90%)
그래서 가상화 프로그램과 OS를 바꾸기로 했습니다.

가장 많이 사용하는 가상화 프로그램 VMWare와 WindowsXP sp3으로 바꿨습니다.
WindowsXP를 사용 중인데 메모리는 24%정도 되네요.
그리고 MS Office도 훨씬 쾌적한 속도로 이용할 수 있습니다.




우분투에서 VMWare 설치법이 잘 나와있지 않았습니다. 
(검색해보면 VMWare에서 우분투 설치하기만 나오더군요.)

그래서 직접 부딪혔습니다.
검색 할 시간에 차라리 진작 해봤으면 됐을 껄 이라는 생각이 들더군요.
아주 쉬웠습니다.


VMWare Linux 로 검색을 해서 설치 파일을 받으시구요.
(전 토xx 를 이용...ㅋㅋㅋ)
chmod 777 주신 후에 그냥 설치하시면 끝납니다.
VMWare의 Unity 모드도 사용가능 합니다. 좋습니다. ㅋㅋ

궁금한 점들은 메일 주세요~~ㅋㅋ



Bloger : moltak.net
안녕하세요. molatk 입니다.

이번에 전 겨울 맞이로 해서....
그 좋은 윈도우를 버리고 리눅스로 완전 갈아 탔습니다. ㅋㅋ
메인 컴퓨터를 싹 밀고 우분투를 설치했습니다.
많이 사용해보지 않아서 무서웠지만....
좋은 툴이 굉장히 많더군요.!!

웹브라우저는 물론이고 개발 도구도 전혀 부족함이 없습니다.!!
(사실 개발 도구는 Visual Studio 진영이 너무 강력해서.... 부족합니다. ㅋㅋ)



툴 설명을 먼저 해드리겠습니다.
개발툴: Qt Creator
버전관리: RabbitVCS
Office: MS Office 2007(Wine으로 구동 중), Open Office(잠깐 써봤는데 좋습니다. 편해요ㅋㅋ)
웹브라우저: Chrome 
Design Tool: Visual Paradigm UML Community Edition
Messager: NateOn
그 밖에 Thunderbird, VirtualBox 등등 설치해서 사용 중입니다.

저 많은 프로그램을 띄워 놓고도 메모리는 26%밖에 사용하지 않네요.
3Gbyte * 26% = 780Mbyte 밖에
속도는 무지 빠르고ㅋㅋ

다른분들도 우분투에 도전해 보세요. ㅋㅋ
(근데 Word에서 원격 블로깅이 안됩니다. ㅠㅠ 더 찾아 봐야 할 듯.)



Bloger: moltak.net
Qt Creator 에서 외부 라이브러리를 사용하려면 옵션을 좀 설정해줘야 하는 군요.
좀 해멨습니다.

이번 블로깅의 목표는
Qt Creator를 이용해 프로젝트를 추가하고 gtest를 이용해 보자 입니다.

순서는 대략 아래와 같습니다.
1) Qt Creator 실행(설치는 이미 되어있다고 생각하겠습니다.)
2) 프로젝트 생성
3) 코딩
4) 프로젝트 파일 수정
5) 컴파일 & 링크
6) 실행


4)번을 보시면 아시겠지만. Qt Creator는 QMake를 사용하기 때문에 옵션을 조금 바꿔 줘야 합니다. 그것을 4)번에서 바꾸게 됩니다.


1) Qt Creator 실행, 프로젝트 생성 
(반드시 Qt Creator와 gtest가 설치되어 있어야합니다.)
Qt Creator를 실행하셔서 프로젝트를 생성합니다.

프로젝트 생성


이름은 마음데로 하시구요


저는 Qt Console Application을 선택했습니다.


프로젝트를 생성하실 때 Qt용 Console 프로젝트로 생성하시면 됩니다.

3) 코딩
위의 코드를 아래와 같이 변형해주세요.
코드를 보시면 아시겠지만 아주 간단한 코드 입니다.
다만 gtest를 사용하기 위해서 하나의 TEST를 추가해 주었습니다.

#include <iostream>
using namespace std;
#include <gtest/gtest.h>
TEST( test, test )
{
    EXPECT_EQ( 1, 1 );
}
int main(int argc, char *argv[])
{
    ::testing::InitGoogleTest( &argc, argv );
    RUN_ALL_TESTS();
    cout << "test" << endl;
    return 0;
}

4) 프로젝트 파일 수정
자 여기가 제가 제일 헤멘 곳인데요.
프로젝트 탭에 보시면 프로젝트명.pro 파일이 보이실 겁니다.
그것을 열어서 아래 한 줄을 추가해 주세요.

LIBS += "/usr/local/lib/libgtest.a" 를 추가해주세요.


LIBS += "/usr/local/lib/libgtest.a"

gtest는 ./configure && make && make install 하면 한번에 설치가 끝나고, 컴파일때 생성된 파일들은 /usr/local/lib 에 생성됩니다. 그래서 위와 같이 라이브러리 파일을 링크해주시는 겁니다.


5) 컴파일 & 링크 & 실행

테스트 통과 화면 && "test" 출력 화면


자 끝났습니다.


이상으로 Qt Creator에서 gtest를 사용하는 것을 해봤습니다.

저는 리눅스를 거의 처음 사용해보기 때문에 고수님들이 보시기에는 매우 쉬운 것들도 굉장히 헤매게 되네요.

그럼 이만 물러가겠습니다.




Bloger: moltak.net

이 글은 개인적인 경험을 바탕으로한 해결책들이다.
100% 신뢰할수는 없으나, 적어도 나는 효과본 방법임을 미리 밝혀둔다.

본인은 단위테스트 도구로 c++unit을 쓰다, unittest++이 더 편한거 같아서 그쪽으로 옮겨갓다가
잠시 boost쪽도 써봣다.


문제는 다들 하나씩 문제가 있거나 뭔가 불편하다는 거엿다.
예를들어 c++unit과 boost는 테스트하기 위해 생산하고 관리할 코드가 산더미가 될수도 있었고
unittest++은 내가 몰라서 그런진 몰라도 테스트하기 껄끄러운 테스트케이스들이 있어서 좀 난감햇다.

하지만 어찌됫건 사용하기 편한건 unittest++이라 그쪽으로 계속 사용했는데...

최근 리눅스로 옮겨타서 뭔가 만들일이 있어서 netbeans를 쓰다 여기서 c++unit이 지원된다는걸 발견!
자동으로 코드도 만들어주니 잘 써먹으려 했으나 역시 몇가지 짜증나는 문제들이 있어서 안쓰기로 결정했다.

그러다 눈에 띈게 google test였는데...

이것도 사용하기 간편한 쉬운 단위 테스트 라이브러리라 일단 설치하고 쓰다보니 이거말고 다른걸 못쓰겟더라;;
(일단 능력 자체는 unittest++과 비슷한데, 더 쉽다. 쉽고 간단하다는게 아주 크다.)


어찌됫건 gtest를 쓰려다/쓰다 생기는 몇가지 문제를 해결하기 위한 트릭을 몇개 적어볼까 한다.



1.설치
일단 설치부터 난관인데...
우분투나 오픈수세같은 플랫폼의 gcc라면 그냥 아무런 생각도 하지 말고 

#./configure
#make
#make install

하면 된다.

설치위치는 /usr/local/ 이며, 라이브러리는 lib, 헤더는 include에 들어가 있다.

icc도 크게 다를건 없을꺼다.



2.컴파일이 안되요, 링커가 앙탈부려요
당연한 이야기지만 프로젝트 설정 같은데 보면 include설정하고 lib설정 있을 거다.
그걸로 설정하면 
헤더를 못찾겠는데요?, 라이브러리는 어딧나요?
같은 이야기는 대부분 사라진다.

넷빈의 경우 프로젝트 설정의 컴파일러 부분에 있는 include dir 부분과 링커의 librareies 부분을 만져주면 된다.
만약 full path 입력이 귀찮다면 환경변수 부분에 설정해 두고 입력하면 된다.

문제는 다음에서 발생한다.



3. undefined reference to `pthread_key_create' ..... 라는 형태로 링커 에러가 뜬다.
이거 아주 간단하게 해결된다.
gtest는 스레드 기반인듯한데...
당연하게도 -lpthread 를 붙여줘야 한다.

본인은 openmp 쓰느라 모르다가 어쩌다 딴거 테스트하다 본 에러라 쉽게 해결했다.


넷빈의 경우 프로젝트 설정의 링커 부분에 libraries 부분이 있는데 거기 들어가서 옵션 눌어 추가해주면 된다.


4. 실행파일이 libgtest.so.0 을 못찾겟단다
이거 의외로 해결하기 골치아프다.

실행파일을 ldd로 찍어보면 not found 찍히는데
/usr/local/lib 가면 libgtest.so.0 이녀석은 멀쩡하게 존제하고 잘 작동중이다.

왜이럴까?

결국 임시방편으로 ld_library_path로 쇼부치다(내가 리눅스를 아는 수준은 딱 이정도가 한계다;;) 

검색으로 다음과 같은 포스트를 찾아냇다.
http://www.openguru.org/2009/04/how-to-fix-shared-library-load-problem.html

맨 아래 보면 ldconfig를 만저서 해당 문제를 멋지게 해결해내고 있다.

저게 옳은 방법인지는 확실치 않지만, 어찌됫건 해결되면 장땡.



이로서 gtest준비는 끗~

이제 주 프로젝트와 여러개의 테스트 프로젝트를 굴리면서 프로그래밍을 하면 된다.
이미 정의되어 있습니다. 무시
/FORCE:MULTIPLE


Bloger : moltak.net

안녕하세요. moltak 입니다.

윈도우에서 Eclipse로 개발하면 컴파일러를 gcc를 사용하게 됩니다.

 

 

Eclipse에 CDT를 설치해서 소스코드 작성하고 gcc를 이용해 컴파일하며 gdb를 이용해 디버깅 하게 됩니다. 리눅스에서는 아주 쉽게 되는 작업이지만 처음 사용하는 저는 굉장히 어려웠습니다.

 

 

이 포스팅의 목표는 GoogleTest(이하 gtest)를 윈도우에서 gcc를 이용해 컴파일하고 eclipse에서 사용하는 것을 목표로 하겠습니다. 먼저 Eclipse와 JDK, CDT가 없으신 분은 [Eclipse에서 C, C++ 개발환경 구축하기] 를 참고하셔서 먼저 설치를 하시기 바랍니다.

 

 

먼저 gtest를 다운로드 받습니다. http://code.google.com/p/googletest/downloads/detail?name=gtest-1.5.0.zip

그 후 압축을 푼 후 아래를 따라 합니다.

실행 -> cmd -> cd gtest directory -> cd make -> mingw32-make Makefile all -> mingw32-make gtest.a

Figure 1 MinGW32-make

 

 

Figure 2 Make 수행 후

제대로 되셨다면 gtest.a 가 생성이 됩니다. .lib 라이브러리 파일은 msvc에서만 사용하는 라이브러리 파일이고 gcc는 .a라는 라이브러리 파일을 사용하게 됩니다. gtest.a 가 제대로 생성이 됐다면 이제 gtest를 사용하는 일만 남았습니다.

 

 

Figure 3 GTest 예제 코드

 

위 코드는 gtest를 사용하는 예제 코드입니다. 이 코드를 돌려 보도록 하겠습니다.

Eclipse를 실행시켜주세요. C++ 프로젝트를 생성 하신 후 위 코드를 작성 합니다.

이제 이클립스에서 몇 가지 설정을 해줘야 하는데요.

 

프로젝트 속성 -> C/C++ Build -> Settings -> GCC C++ Compiler -> Directories 부분에 gtest\include 폴더 추가해 주세요.

 

그리고 제가 가장 헤멘 부분. [.a] 링크하기!! 처음에 .a파일을 생성해야 하는 이유도 몰랐고 어떻게 하는지도 몰랐죠. 몇 일간 헤메니깐 답이 보이더군요. (이클립스를 이용해서 윈도우 플랫폼에서 C++ 개발하는 분들이 별로 없나 봅니다. 검색해도 잘 나오지 않던…)

 

다시 프로젝트 속성에 가셔서 C/C++ Build -> Settings -> MinGW C++ Linker -> Miscellaneous -> Other objects에 [gtest.a] 파일의 경로를 지정해 주시면 됩니다. 그리고 컴파일 하시면 성공!!

 

Figure 4 실행 화면

Figure4 그림처럼 나오면 성공입니다. ^^

 

 

이 글을 작성하고 나니깐 지난 3일간이 제가 엄청나게 삽질을 했다는 것을 알겠네요. 블로깅 양이 엄청 적은… 하지만 이제 리눅스와 윈도우에서 똑 같은 개발 환경을 갖고 프로젝트를 진행 할 수 있다는 것이 너무나 기쁘네요.

 

GTest를 G++로 컴파일해서 eclipse로 컴파일해서 사용했다는 것은 이제 어떤 라이브러리도 사용할 수 있다는 것을 뜻합니다. 물론 좀 복잡하게 사용해야 하지만… MSVC가 너무 잘 만들어진 IDE라서 윈도우에서는 MSVC 말고는 사용하기 힘들기도 할 것 같습니다. 하지만 Eclipse의 매력도 얕볼 수가 없는데 리눅스에서도 똑 같은 자신의 환경을 갖고 프로그래밍 할 수 있다는 큰 매력이 있다는 것입니다.

 

 

 

Bloger : moltak.net

이클립스에서 C, C++을 개발 환경을 구축하기 위한 글입니다.
아주 상세히 정리를 해 놓으셨네요.

이 글은 http://blog.jidolstar.com/677 에서 첨부해왔습니다.


윈도우 환경에서 Eclipse Galileo 버전으로 C, C++ 개발을 위한 환경을 만드는 것을 설명하는데 목표가 있다. 기존에 Eclipse기반으로 Flash Builder 플러그인을 설치해 Flash 개발을 하거나 Java 개발하시는 분들이 같은 환경에서 C, C++을 개발하고자 한다면 이 글은 유용한 팁정도가 될 것이다.


1. MinGW를 설치한다. 
MinGW(한국어 발음 밍우?)는 무료로 쓰고 배포할 수 있는 MS 윈도우 헤더 파일과 라이브러리로, 어떠한 써드 파티 C 런타임 DLL에 의존하지 않고 네이티브 윈도우 프로그램을 만들 수 있는 GNU 툴을 제공한다. 쉽게 이야기해 MinGW는 윈도우에서 툴이나 dll에 의존하지 않는 동작하는 프로그램을 만들 수 있도록 도와준다.

MinGW에 대해 : http://ko.wikipedia.org/wiki/MinGW 

물론 C/C++를 개발하기 위해 Cygwin을 이용해도 된다. 하지만 cygwin 기반으로 제작한 것은 항상 cygwin1.dll이 필요한다. 또한 개발한 결과물은 라이센스 문제로 상용으로 팔기가 곤란하다. 게다가 윈도우에서 직접 개발한다기 보다 가상의 리눅스 콘솔을 이용하는 것이다. 그래서 여러가지로 MinGW이 장점이 많다.


1.1 MinGW 받기 
공식 사이트 http://www.mingw.org/ 로 간다. 좌측 메뉴에 Downloads 페이지로 이동한다. Download Now 버튼을 눌러 최신버전인 MinGW-5.1.6.exe(2010.04.20)를 다운로드 받는다. 


1.2 MinGW 설치
  • 다운받은 MinGW-5.1.6.exe를 실행한다.
  • Welcome 화면 Next를 클릭한다.
  • Download and install을 선택후 Next 버튼을 클릭한다.
  • I agree를 클릭한다.
  • Candidate를 선택후 Next를 클릭한다.
  • 설치하고자 하는 것을 선택후 Next를 클릭한다. g++ compiler와 MinGW Make는 반드시 선택한다.
  • 설치하고자 하는 디렉토를 선택한 다음 Next 클릭
  • Install을 클릭하면 이제 필요한 것을 다운로드 받아 설치를 시작한다.
  • 설치가 완료되면 Next 클릭후 Finish를 누른다.

 

1.3 GCC를 실행하기 위한 윈도우 환경변수 설정하기

이제 어느 경로에 있던지 gcc 컴파일러를 실행할 수 있도록 환경을 조성해줄 필요가 있다. 

이 방법은 Cygwin을 사용하지 않고 오로지 MinGW만 사용하는 경우에 해당한다. 만약 Cygwin을 함께 사용하시는 분이라면 배치파일을 만들어 사용하는 방법도 있다. (http://kldp.org/node/48962)

  • 제어판에서 시스템 폴더 클릭. window 7환경에서 개발한다면 검색창에서 시스템을 입력한뒤 시스템 환경 변수 편집을 선택한다.
  • 아래 표시된 방법대로 입력하면 되겠다. 최종적으로 MinGW 설치된 폴더에 Bin 폴더를 입력하는 것을 목표로 한다.


  • CMD창에서 gcc --version과 mingw32-make를 입력하고 다음과 같이 나오면 성공적으로 설치된것임

 이제 MinGW가 설치되었으므로 window 기반에서 C, C++등을 개발할 수 있는 환경이 만들어진 것이다. 다음에 나오는 Eclipse기반이 아니더라도 메모장에서 C코드를 짜고 GCC로 컴파일할 수 있다. 하지만 개발툴을 메모장을 사용할 수는 없는 노릇아닌가?


2. Eclipse Galileo 버전을 설치한다.
Eclipse는 기존에 설치했던 사람이 대부분일 것이다. 이 설명은 필요없는 내용일 수 있으나 그냥 적어본다.

일단 Eclipse는 아래 링크에서 자신의 개발하고자 하는 목적별(Java, C/C++, PHP등)로 다운로드 받아 설치할 수 있다. 

http://www.eclipse.org/downloads/

필자는 Java기반에서 개발하는 일이 많으므로 Java EE Developers를 위한 Eclipse IDE를 설치했다. Windows 32bit 기반을 다운로드 받았다. 설치는 받은 압축파일을 원하는 곳에 압축만 풀어주는 것으로 완료가 된다. 본인은 E:\eclipse 에 설치했다. C 드라이브에 설치하지 않은 이유는 나중에 운영체제를 다시 설치하는 경우에 Eclipse를 보존하기 위함이다.

Eclipse를 처음 설치하는 사람이라면 반드시 JRE가 자신의 컴퓨터에 미리 설치가 되어 있어야 Eclipse 구동이 가능하다. 다음 링크에서 JRE나 JDK 최신버전을 설치하면 되겠다.

http://java.sun.com/javase/downloads/index.jsp

만약 C/C++기반인 Eclipse를 다운로드 받아 설치하면 다음에 "3. CDT 플러그인을 설치한다"를 넘겨도 된다. 


3. CDT 플러그 인을 설치한다.

CDT는 C/C++ Development Tool이다. 기존에 이클립스 기반으로 개발하던 사람이라면 C/C++도 Visual Studio와 같은 툴을 활용하지 않고 개발하고자 하는 욕구(?)가 들지도 모르겠다. CDT를 Eclipse에 설치하면 C,C++ 개발이 가능한 환경이 된다. 

CDT는 개발하는 툴이지 컴파일러가 아니다. CDT를 설치했더라도 각각 운영체제 기반에서 제공하는 C/C++ 컴파일러와 연결하는 작업은 필요하다. 여기서는 CDT를 Eclipse에 설치하는 방법만 소개한다.

Eclipse 메뉴에서 Help > Install New Software... 를 선택한다.

아래와 같은 화면이 나오면 Add 버튼을 누른다.


http://www.eclipse.org/cdt/downloads.php 에 가면 최신버전(현재 CDT 6.0.x)을 다운로드 받을 수 있는 링크가 소개되어 있다. Eclipse가 Galileo버전이므로 http://download.eclipse.org/tools/cdt/releases/galileo 를 URL로 삼아 플러그인을 설치하면 되겠다. 

아래처럼 Add Site창에 Name과 Location을 입력한다. Name은 아무거나 입력하면 된다.


참고로 위처럼 등록하면 Windews > Preferences > Install/Update > Avaliable Software Sites에 아래처럼 등록되어 있다. 


이제 Work with 란에 CDT를 입력해보면 금방 등록했던 CDT 정보를 선택할 수 있다. 그럼 아래처럼 나온다. CDT Main Features, CDT Optional Features 모두 Check하고 Next버튼을 누른다.


아래처럼 설치할 목록들이 나온다. Next버튼을 누른다.



아래와 같은 화면이 나오면 I accept the terms of the license agreements를 선택후 Finish 버튼을 누르면 설를 시작한다. 시작이 완료된 다음에는 Eclipse를 재구동한다. 



Eclipse가 구동된 다음 C/C++ Perspective를 열어보자. Windows>Open Perspective>Other 를 선택한다. 아래처럼 창이 뜨면 C/C++를 선택한다. 
 

Perspective창에 아래처럼 추가 된것을 확인하자. 이제 Eclipse에서 

File > New를 가도 C, C++ 프로젝트를 만들 수 있게 되었다. 


4. 간단한 C/C++ 개발해보기

MinGW의 bin 폴더에 보면 gcc, g++등 각종 컴파일 도구가 있다. 이클립스의 CDT환경에서 C/C++로 개발할때는 MinGW의 컴파일 도구를 이용해 컴파일 한다는 사실을 기억하자.

다음과 같이 C++ 프로젝트를 만들어보자. 
  • 이클립스 메뉴에서 File > New > C++ Project를 선택한다.
  • 다음 그림과 같이 프로젝트를 만들기 위한 창이 나오면 Project name을 넣고 Project type을 Executable > Hello World C++ Project를 선택한다음 Toolchains를 MinGW GCC로 선택하도록 한다. 이렇게 하면 자동으로 Hello World CPP가 만들어지면서 컴파일은 MinGW의 g++컴파일러를 이용해 컴파일 할 수 있도록 설정 되는 것이다. Next 버튼을 누른다.
  • 간단한 셋팅을 하는데 이 설정에서 중요한 것은 Source 파일은 src 폴더에 들어가게 된다는 것이다. Next 버튼을 누른다.


  • 다음 그림과 같이 Debug, Release 두 버전으로 프로그램 결과를 별 수 있도록 셋팅된다. Finish 버튼을 누른다. 

 

이클립스의 Project > Build Automatically가 선택되어 있다면 위처럼 프로젝트를 만들게 되면 자동으로 MinGW의 g++을 찾아 컴파일을 실시하게 된다. 아래와 같은 메시지가 이클립스의 Console창에 나오면 제대로 실행된 것이다. 


위 메시지 처럼 컴파일을 하지 못하고  아래처럼 Nothing to build for Test1 메시지가 뜬다면 이것은 수정된 내용이 없으므로 컴파일할 필요가 없다는 것을 의미한다. 대신 Ctrl+B 하면 강제로 컴파일한다.


이 프로젝트는 C++ 프로젝트이므로 gcc 컴파일러가 연결되어야 한다. 만약 컴파일에 실패한다면 Mingw/bin에 gcc.exe를 확인해보자. 만약에 없다면 위에 Mingw 설치하기를 다시 한번 따라해보길 바란다.

실행해보자. 아래처럼 만들어진 프로젝트의 src폴더를 열어 Test1.cpp를 선택한다. 그리고 빨간 박스로 표시된 아이콘을 클릭하거나 Ctrl+F11을 하면 실행할 수 있다.

Console창에 아래처럼 Hello World가 출력된것을 확인하자.

Build Automatically를 체크한 경우에는 코드를 수정하고 저장할 때마다 자동 Build처리된다. 하지만 수동으로도 할 수 있는데 Ctrl+B 또는 아래 그림처럼 망치툴을 클릭해서 Build할 수 있다.



개발시에는 Debug버전과 Release 버전이 있다는 것을 기억하자. 아래 보이는 도구는 현재 개발 환경이 Debug인지 Release인지 결정해 주는 도구이다. Debug는 개발용이고 Release는 외부로 배포할때 사용한다.


실제로 이 도구를 이용해 Debug에서 Release로 바꿔보자. 아래처럼 Release 폴더가 생겨나고 컴파일 결과가 이 폴더안에 만들어진다. 이때부터는 실행할때 Release폴더에 있는 exe파일이 실행되게 된다.


참고로 makefile을 기반으로한 개발을 하고 싶은 경우가 있을 수 있다. 이런 경우에는 C++ 프로젝트를 생성시에 아래 그림처럼 Makefile Project를 선택해서 생성해야한다. 

하지만 실제로 이 상태로 프로젝트를 생성해 컴파일하면 Cannot run program "make": Launching failed 메시지가 console창에 보이면서 컴파일이 불가능하다. 이 메시지는 컴파일을 수행할 수 있는 make 명령어를 찾지 못한다는 것을 의미한다. Eclipse에서는 기본적으로 make가 지정되어 있지만 MinGW의 make 명령은 mingw32-make로 다르다. 그러므로 이 문제를 해결하기 위해 mingw32-make.exe를 복사해 같은 폴더에 make.exe로 이름을 바꿔주면 된다. (물론 찾아보면 다른 방법도 있지만 이 방법이 가장 빠르고 쉽다.) 

makefile을 이용해 개발해보는 간단한 예제는 다음글을 참고한다.
http://kkamagui.springnote.com/pages/446531


5. 간단한 win32용 프로그램 개발하기 
지금까지의 예제는 단순히 Console창에 결과가 나온다. MinGW는 Windows API를 이용한 개발도 지원하므로 앞서 설명한 같은 C++ 프로젝트로 만들고 아래 코드로 변경해도 컴파일이 가능하다.


01.#include <windows.h><windows.h>
02. 
03.int WinMain(HINSTANCE hInstance,
04.HINSTANCE hPrevInstance,
05.LPTSTR    lpCmdLine,
06.int       nCmdShow)
07.{
08.MessageBox(NULL, "Hello in EclipseCDT""EclipseCDT", MB_OK);
09.return 0;
10.}
11.</windows.h>


실행해 보면 아래와 같은 다이얼로그 창이 나온다.

경험자들에 따르면 Win32 로 개발하는 경우에는 한가지 중요한 C++ 링커 설정을 해야한다고 한다. 

먼저 해당 Win32 프로젝트를 선택후(필자의 경우 Test3) 이클립스 메뉴에서 Project > Properies로 들어갑니다. 아래처럼 창이 뜨면 C/C++ Build > Setting으로 들어가 Tool Setting 탭을 선택합니다. 거기에 MinGW C++ Linker>Miscellaneous를 선택해 Linker flags에 -mwindows를 입력한다. 완료하면 Apply버튼이나 OK 버튼을 누르면 적용된다.

이 설정을 해야 군데 군데 "undefined reference"와 같은 에러를 발생시키지 않는다고 한다. 수정했는데도 에러를 띄우면 File->Save all 또는 이클립스 종료후 다시 시작하면 된다. 

Windows API 학습을 위해 다음 링크를 참고한다.
http://www.winapi.co.kr/

6. 디버깅 환경 만들기
지금까지 개발환경으로 개발자체는 문제 없지만 디버깅은 할 수 없다. MinGW에 디버깅을 하기 위한 도구가 설치되어야 하는데 이를 가능하게 하는 것이 gdb이다. 

먼저 gdb를 다운로드 받자.
http://downloads.sourceforge.net/project/mingw/GNU%20Source-Level%20Debugger/GDB-7.1/gdb-7.1-2-mingw32-bin.tar.gz 

압축을 풀고 bin과 share 폴더를 그대로 설치된 MinGW 폴더에 복사해준다. 이것으로 MinGW의 C/C++ 디버깅 환경이 구축되었다.

이제 Eclipse에서 F11 누르거나 아래처럼 벌레모양의 아이콘을 눌러 Debugging을 할 수 있게 된다.


디버깅을 하게 되면 Debug Perspective창으로 바뀌면서 아래처럼 디버깅이 가능해진다.

참고로, 이클립스에서 디버깅 설정은 Run > Debug Configurations에서 할 수 있다. 좌측 리스트에서 C/C++ Application을 선택해 해당 exe를 선택한뒤 우측에서 Debugger 탭을 선택하면 Debugger를 선택할 수 있게 된다.

만약 gdb를 설치했음에도 불구하고 에러를 내면서 디버깅을 할 수 없는 경우 CMD창에서 다음과 같이 입력해보길 바란다.



만약 위처럼 메시지가 나오지 않고 libexpat-1.dll이 없다고 경고창이 나오면 현재 설치한 gdb버전이 libexpat-1.dll과 의존성이 있는 것이다. 이때는 libexpat-1.dll도 함께 다운로드 받아 MingGW/bin에 복사해줘야 한다. 

libexpat-1.dll은 아래 링크에서 다운로드 받는다.
http://downloads.sourceforge.net/project/mingw/MinGW%20expat/expat-2.0.1-1/libexpat-2.0.1-1-mingw32-dll-1.tar.gz

다음 글을 참고한다.
http://forums.codeblocks.org/index.php/topic,11301.msg77273.html

7. 정리하며 
프로젝트 중에 C와 MySQL을 연동하여 개발할 경우가 있어서 전체 환경설정을 정리한다는 마음으로 글을 적었다. 기존에 나와 있는 많은 글들이 너무 옛날 버전이라서 그런지 지금과 맞지 않는 부분도 있었다. 앞으로 MySQL과 연동하게 되면 관련 내용도 소개해 볼까 한다. 개발에 있어서 환경을 구축하고 적응하는게 반인 것 같다. ^^;


8. 참고글 

이클립스(Eclipse) CDT 설치
(Eclipse Galileo) C/C++ Developments User Guide
CDT를 이용한 Windows C/C++ 개발 환경 만들기 
Eclipse/CDT
Eclipse Project CDT (C/C++) Plugin Tutorial 1, 2By Brian Lee
이클립스(eclipse)를 이용해서 C/C++ 프로그래밍 환경설정
MinGW + Eclipse 를 이용한 Windows 개발 환경 구현 

글쓴이 : 지돌스타(http://blog.jidolstar.com/677)

googletest 환경 구축

 

 

안녕하세요. moltak입니다. 오늘은 TDD를 사용하기 위한 Google C++ Testing Frameworks를 설치해보고 예제를 돌려보겠습니다.

 

 

C++ Unit Test Framework는 굉장히 많습니다. JAVA는 JUnit과 Hamcrest라는 Framework 많이 사용하더군요. 하지만 C++은 언뜻 봐도 굉장히 많습니다. 저는 C++의 모든 Test Framework를 사용해본 것은 아닙니다. 그렇다고 Google Framework가 아주 좋다는 것도 아닙니다. 다만 사용하기 쉽고 굉장히 직관적이었습니다. (다른 Framework도 그런지는 모르겠네요. )

 

 

잔소리는 여기까지 하고 일단 사용해보도록 하겠습니다.

 

 

구글 Framework 또한 다른 라이브러리와 마찬가지로 아래 순서를 따르게 됩니다. 하나 하나 보도록 하죠.

1. Downloads

2. 설치

3. Visual Studio 설정

4. 사용하기

 

 

1. Downloads : : http://code.google.com/p/googletest/ 에 들어가서 상단에 Downloads 탭을 선택한 후 윈도우 버전 다운로드.

Figure 1 google test downloads

 

 

2. 설치 : 자신이 원하는 폴더에 압축해제. 그 후 gtest\msvc 폴더에 가서 gtest.sln 파일을 더블 클릭.

만약 버전이 안 맞아서 솔루션 파일을 변경해야 할 경우 .vcproj(프로젝트 파일)의 읽기 전용 속성을 해제하세요.

그 후 해당 솔루션을 컴파일 합니다.

 

 

3. VS 설정

VS2005~2008 : 도구->옵션->프로젝트 및 솔루션->VC++ 디렉터리

VS2010 : 프로젝트 옵션에서 설정해야 합니다.

포함 파일과 라이브러리 파일 경로 설정.

  • 포함파일에 \include 경로 설정
  • 라이브러리 파일에 \msvc\gtest\debug 경로 설정

Figure 2 Visual Studio Setting

 

 

위 그림처럼 하시면 됩니다.

 

Google Testing Framework는 런타임 라이브러리가 다중 스레드 디버그(/MTd) 이기 때문에 우리의 프로젝트 설정도 위 처럼 바꿔 줘야 합니다.

 

프로젝트 설정 -> 구성 속성 -> C++ -> 코드 생성 -> 런타임 라이브러리 -> 다중 스레드 디버그(/MTd)

Figure 3 런타임 라이브러리 변경

 

 

그 후 라이브러리 링크

 

이렇게 하시면 기본적인 설정 방법은 끝이 났습니다. 다른 라이브러리와 사용법이 같기 때문에 쉽게 하셨을 것 같네요.

 

 

4. 사용

이제 진짜로 사용해보도록 하죠.

 

문법은 위 그림과 같습니다. (http://soupim.tistory.com/48 참조)

사용 하실 때는 아래 소스처럼 하시면 쉽게 사용이 가능하십니다.

 

 

Figure 4 사용 예제 소스

 

 

저는 Test Fixtures를 사용해서 테스트를 수행하곤 하는데요. 이 방법이 Java나 다른 책에서 설명하는 TDD기법과 아주 유사합니다.

 

Figure 5 Test Fixtures 사용 예제

 

 

여러분들도 위 방법을 사용해서 테스트를 수행해보세요. 그리고 테스트 이름은 한글로 하는 것이 좋다고 하더라고요. (채수원 : 고품질 쾌속개발을 위한 TDD 실천법과 도구(한빛미디어))

위 책을 보고 있는데요. 상당히 좋습니다.

 

Figure 6 실행 화면

 

 

5. 정리

이렇게 해서 Google Testing Framework 설치와 사용법이 설명이 끝났습니다. 많이 사용해 보시고 저한테도 알려주셨으면 감사하겠습니다. ^^

그리고 Google Test UI도 있는데요. 아래 경로로 찾아 들어가시면 됩니다.

Figure 7 Google Test UI

 

 

위 손가락 위치에 가시면 다운 받으실 수 있습니다. 상당히 보기 편하더라고요. 다른 Unit Test 툴처럼. 하지만 저만 그런지는 모르겠으나. 굉장히 느립니다. 5초 이상 걸리는 것 같습니다. 다른 분들도 한번씩 사용해 보세요. 더 보기 좋답니다. ^^

 

 

이만 마치도록 하겠습니다.

 

Bloger : moltak.net

어느 날 운영자님께서 물으셨지....
모스알아?? 네 저 그거 땄는데요?? 
MOSS라고 쳐봐.....;;;
네;;;;;

그때 부터 Windows Server2008 과 MOSS, AD, Exchange Server 와의 동거가 시작될 줄이야;;;
왐마;;;
몇 일간 Windows 64bit로 Exchange 2008과 MOSS로 삽질하다가.....
32bit로 갈아타라고 해서;;; 다시 삽질 반복......
Exchange 서버와 MOSS는 웬만하면 한 서버에 같이 깔지 않는 다는 것을 알고 좌절;;
그걸로 2주간 삽질했는데ㅠㅠ

MOSS 설치 Exchange 설치 20번 넘게 해본듯;;ㅋㅋㅋ
그래서 두개의 설치 메뉴얼을 만들었습니다. 현재는 MOSS 카페에만 올려놨는데 여기다가도 올려야겠네요.

자 그럼 이제 시작하도록 하겠습니다.!

C, C++ 소스를 올리려는데 가독성이 너무 안좋군요... 예전 블로그는 어떻게 하는 지 잘 몰랐는데...
티스토리는 정보가 많더군요. 우허허허허ㅋ 그래서 검색했습니다.

http://withrobot.tistory.com/180 여기서 참조를 했습니다.

우리의 목표는 바로 아래 화면ㅋㅋ



자 그럼 시작해 볼까요.
순서는 withrobot 님과 동일 합니다.

설치 방법은 3단계.
1. 다운로드 받아 압축 풀기
2. 티스토리의 스킨에 업로드
3. 스킨 수정하기

1. 다운로드 받아 압축풀기
SyntaxHighLighter의 홈페이지, 다운로드
압축을 해제 하면 아래 그림과 같이 세개의 폴더가 나옵니다.


2. 티스토리의 스킨에 업로드
네 이젠 Scripts 폴더와 Script 폴더에 있는 모든 파일을 올려야 해요.
티스토리의 관리자로 이동해서 스킨탭의 HTML/CSS 편집을 선택해 주세요.

스킨 탭의 HTML/CSS 편집으로 들어가서

파일 업로드를 선택해 주세요


Scripts 폴더와 Styles 폴더의 파일을 모두 업로드해주세요.
전 근데 IE8에서는 업로드가 안되더라구요? 그래서 IE7에서 작업했습니다.


3. 스킨 수정하기
이젠 HTML/CSS를 편집해야 할 차례입니다.
다시 스킨탭에서 HTML/CSS 편집을 선택합니다.
위에 밑줄친 부분에 <link type="text/css" rel="stylesheet" href="./images/SyntaxHighlighter.css"></link> 를 삽입합니다.

그 다음 옆의 슬라이드 바를 끝까지 내리면
</body>
</html> 로 끝나는 것을 확인할 수 있다.

</body> 앞에 다음 문장을 추가한다.

<script class="javascript" src="./images/shCore.js"></script>
<script class="javascript" src="./images/shBrushCSharp.js"></script>
<script class="javascript" src="./images/shBrushCpp.js"></script>
<script class="javascript" src="./images/shBrushCss.js"></script>
<script class="javascript" src="./images/shBrushDelphi.js"></script>
<script class="javascript" src="./images/shBrushJScript.js"></script>
<script class="javascript" src="./images/shBrushJava.js"></script>
<script class="javascript" src="./images/shBrushPhp.js"></script>
<script class="javascript" src="./images/shBrushPython.js"></script>
<script class="javascript" src="./images/shBrushRuby.js"></script>
<script class="javascript" src="./images/shBrushSql.js"></script>
<script class="javascript" src="./images/shBrushVb.js"></script>
<script class="javascript" src="./images/shBrushXml.js"></script>
<script class="javascript">
dp.SyntaxHighlighter.ClipboardSwf = '/flash/clipboard.swf'; 
dp.SyntaxHighlighter.HighlightAll('code');
</script>


자 수고 하셨습니다. 이제 글 쓰시면 되요. 마쳤으면 [저장하기] 버튼을 클릭하고 블로그 화면이 원래대로 나오는지를 확인한다.

자 이제 적용 단계이다.

아쉽게도 위지윅 모드에서 바로 적용하는 방법은 없다. 글을 쓰다가 소스 코드를 넣고 싶은 부분에서 메뉴바에 [EDIT] 버튼을 클릭하여 HTML 편집 모드로 전환한다. 그 다음 다음과 같은 문장을 추가한다.

<textarea name="code" class="Python" cols="60" rows="10">
코드는 여기에 복사한다.
</textarea>

http://withrobot.tistory.com/180 님이 python을 하셨기 때문에 저도 그렇게ㅋㅋㅋ 저 부분을 C++이나 C로 입맛에 맞게 바꿔 주세요.
수고 하셨습니다. 이젠 http://moltak.tistory.com/entry/Server-Socket-1 처럼 만들 수 있을 겁니다. 즐프 하세요~

http://jobdahan.net/server_window/17286


DNS 서버는 자신의 컴퓨터 인터넷 연결 IP Address와 밀접한 관계가 있습니다.

다른 서버들(웹 서버, 데이타베이스 서버, FTP 서버 등)은 자신의 컴퓨터 연결 IP Address가 변경되더라도
각 설정 파일들에 대해 별다른 수정없이 서비스 받고 있는 도메인의 IP Address만 Update 해주면 해결되지만
DNS 서버의 경우에는 그렇지 않습니다.

DNS 서버(BIND9, Windows에서는 ISC BIND 서비스)의 경우에는 서비스 받고 있는 도메인의 IP Address Update
뿐만이 아니라 설정 파일도 변경된 IP Address로 수정해서 BIND9을 재시작 해주어야만 합니다.

가정에 설치된 PC에 서버를 구축하였을 경우 유동 IP를 사용하기 때문에 IP 주소가 자주 변동될 수 있으므로
그에 대한 대책을 마련해야만 합니다.

그 대책의 하나는 자신의 IP 주소가 변경되면 DNIP 사이트에서 서비스 받고 있는 네임서버 도메인
(예 : ns.jobdahan.dnip.net)의 IP 주소를 업데이트 해주어야 하며,

둘째로 DNS 서버가 구축되어 있다면 개별 도메인 zone 파일(예 : jobdahan.dnip.net.zone)에 설정된
각 도메인에 대한 IP 주소도 업데이트 해주어야만 합니다.

우리는 네임서버 도메인을 DNIP 사이트에서 서비스 받고 있으므로 자신의 IP 주소가 변경되었을 경우
DNIP 사이트에 IP 주소를 업데이트 해주면 되는데 그 방법은 이미 “유동 IP를 고정 IP처럼 사용하기” 강좌에서
DNIP.exe를 이용하여 자동으로 업데이트하는 방법을 자세히 설명했었습니다.

DNS 서버는 원래 고정 IP인 곳에 설치하여야만 합니다만 지금 우리는 고정 IP가 아닌 유동 IP인 곳에
DNS 서버를 설치하였습니다. 그렇기 때문에 인터넷 연결 IP 주소가 변경되면 DNS 설정 파일에 있는 IP 주소도
변경시켜 주어야만 하는 약간의 불편함은 감수해야 합니다.

DNS 설정 파일에 있는 IP 주소를 업데이트 해주는 방법으로는 직접 수동으로 설정 파일의 IP 주소를 수정하는 방법과
\bin 디렉터리에 들어가 있는 nsupdate.exe를 이용하는 방법,
그리고 자체 제작한 소프트웨어로 IP 업데이트에 관련된 모든 작업을 자동으로 하는 방법이 있습니다.

여기에서는 수동으로 설정 파일의 IP 주소를 수정하는 방법에 대해서 설명하기로 하겠습니다.


[ 직접 IP Update ]

1) 변경된 인터넷 연결 IP 확인하여 서비스되고 있는 네임서버 도메인 IP 업데이트
 ~ 공유기를 사용하고 있을 때 내 컴퓨터 인터넷 연결 IP 주소를 확인하는 가장 간단한 방법으로는
     FTP 서버인 Hub FTP 창을 열어 [IP 확인] 도구를 클릭해서 자신의 인터넷 연결 IP 주소를 알아 보거나
     Port_Check.exe 같은 소프트웨어를 이용해서 알아 보는 방법이 있습니다.

     (cmd 창의 ipconfig 명령은 공유기를 사용하지 않고 있을 때 인터넷 연결 IP 주소 확인이 가능하지만,
     공유기를 사용하고 있을 때는 공유기의 사설 IP Address(192.168.xxx.xxx)가 표시됩니다.)

     내 컴퓨터의 인터넷 연결 IP Address와 서비스 되고 있는 ns.ID.dnip.net의 IP Address가 서로 다를 경우
     DNIP.exe를 이용하거나 http://www.dnip.net/update.cgi에서 IP Address를 업데이트 해 줍니다.

2) 개별 도메인 설정 zone 파일 수정
 ~ 자신의 IP 주소가 변경되었을 때 설정 파일 중 수정해 주어야 할 부분은 개별도메인 설정 파일인
     HostName.zone(HostName : ns.ID.dnip.net에서 "ns."을 제외한 이름, HostName.zone ⇒ 예:jobdahan.dnip.net.zone)
     파일만 수정하면 됩니다.

     C:\APM_Setup\Server\DNS\etc\ 디렉터리에 있는 jobdahan.dnip.net.zone 파일을 메모장이나 텍스트 에디터로
     열어 설정되어 있는 IP 주소를 모두 변경된 IP 주소로 수정하고 저장합니다.

     예를 들어 자신의 외부 IP 주소가 210.95.205.15에서 210.95.205.105로 변경되었다면
     아래의 내용과 같이 IP 주소가 들어간 부분만 210.95.205.15 ⇒ 210.95.205.105로 수정하고 저장합니다.

C:\APM_Setup\Server\DNS\etc\jobdahan.dnip.net.zone 파일의 내용

$TTL 43200
@ IN SOA ns.jobdahan.dnip.net. root.jobdahan.dnip.net. (
                   2007042710 ;                 ⇒ 이 네임서버의 데이타 버전, 현재 년월일시간으로 수정함
                   3H  ;
                   15M  ;
                   1W  ;
                   1D )  ; 
; Name Server
    IN NS ns.jobdahan.dnip.net.  ;
    IN A 210.95.205.15  ;                       ⇒   IN A 210.95.205.105  ;
; Host name
ns IN A 210.95.205.15  ;                       ⇒   ns IN A 210.95.205.105  ;
; Virtual Host
www IN A 210.95.205.15  ;                   ⇒   www IN A 210.95.205.105  ;
mail IN A 210.95.205.15  ;                    ⇒   mail IN A 210.95.205.105  ;
ftp IN A 210.95.205.15  ;                       ⇒   ftp IN A 210.95.205.105  ;
shop IN A 210.95.205.15  ;                   ⇒   shop IN A 210.95.205.105  ;


3) zone 파일의 Reload 또는 DNS 서버(ISC BIND 서비스)의 재시작
 ~ [시작]-[실행]-cmd 입력하여 cmd 창을 열고, rndc reload 명령을 입력하고 [Enter] 키를 치면
    C:\APM_Setup\Server\DNS\etc\ 디렉터리에 있는 모든 구성 파일들과 zone 파일들이 다시 읽혀져서
    변경시킨 내용들이 DNS 서버에 적용되어 집니다.

명령 프롬프트(cmd) 창

C:\Documents and Settings\hats> rndc reload
server reload successful

C:\Documents and Settings\hats> _


    여기에서 한 가지 알아 두셔야 할 점이 있습니다.
    위와 같이 cmd 창에서 rndc reload 명령을 사용해서 named 데몬을 제어할 수 있는 이유는
    앞서 name.conf 내용 설정에서 named 데몬이 rndc.key 파일의 key 값을 사용하고 있고,

    named 데몬을 제어하는 rndc는 rndc.conf 파일에서 불러온 key 값을 사용하는데
    rndc.key 파일과 rndc.conf 파일의 key 값을 동일하게 해 주었기 때문에 rndc로 named 제어가 가능한 것입니다.


[ DNS 서버(ISC BIND 서비스)의 재시작 ]

설정 파일이 수정되었을 때 rndc reload 명령을 이용하지 않고
DNS 서버 자체를 재시작 해주어도 수정한 업데이트 내용이 DNS 서버에 적용됩니다.

윈도우에서 DNS 서버(BIND9)를 재시작하여 주는 방법에는 다음의 두 가지가 있습니다.

첫째, [시작]-[제어판]-[성능 및 유지관리]-[관리 도구]를 선택, [서비스]를 더블클릭하여 열린 서비스 창에서
ISC BIND 라는 이름의 서비스를 찾아 오른쪽 클릭, 단축메뉴에서 [다시 시작]을 선택하면 ISC BIND 서비스가
중지되었다가 다시 시작됩니다.

둘째, cmd 창에서 다음의 명령 실행에 의해서도 DNS 서버(BIND9)를 재시작 할 수 있습니다.
       net stop "ISC BIND" : DNS 서버(BIND9)의 중지
       net start "ISC BIND" : DNS 서버(BIND9)의 시작

명령 프롬프트(cmd) 창

C:\Documents and Settings\hats>net stop "ISC BIND"
ISC BIND 서비스를 잘 멈추었습니다.

C:\Documents and Settings\hats>net start "ISC BIND"
ISC BIND 서비스를 시작합니다..
ISC BIND 서비스가 잘 시작되었습니다.


C:\Documents and Settings\hats>_


[ nsupdate.exe를 이용한 개별도메인 zone 파일 설정 Update 하기 ]

nsupdate.exe를 이용하는 방법에 대해서는 설명을 생략하기로 하겠습니다.
처음에는 이 부분에 대한 설명도 하려고 했었지만 이 방법 역시 수동적인 방법에 속하고
DNS 서버에 대해서 익숙치 않은 분들에게는 오히려 혼란만 줄 것 같아서 과감히(?) 생략했습니다.^^;

꼭 알아야 겠다는 분들이 계시다면 댓글을 달아 주시거나
관련 전문 서적을 참고하시기 바랍니다.


위와 같이 수동으로 작업을 해 주어도 되지만 이러한 일련의 작업들 즉, 외부 인터넷 연결 IP 주소가 변경되었는지
부팅할 때 마다 검사하고, 변경되었으면 개별 도메인 설정 zone 파일인 jobdahan.dnip.net.zone 파일의 내용 중
설정되어 있는 IP Address만 수정시켜 저장한 후 그 zone 파일을 reload 해주게 할 수 있는 소프트웨어를 만들어
동작하게 하면 아주 유용하겠지요?

BIND9의 설정파일들을 생성하거나 IP Address를 업데이트하는 소프트웨어를
PHP나 Delphi, C++ 등으로 만들 수 있을 것입니다.

여러분들께는 윈도우 명령 셸을 이용하여 BIND9의 모든 설정 파일들을 쉽게 생성하고 IP Update를 할 수 있는 배치 파일
(BINDzSet.cmd)을 배포하도록 하겠습니다.


아래의 기능 소개를 읽어보시고 유용하다는 생각이 드시면 이 글의 댓글로

"BINDzSet.cmd 신청합니다."라고 반드시 신청한 다음에
쪽지 보내 주시기 바랍니다.

그런데요...
DNS 서버가 설치되지 않았다면 이 배치 파일은 아무 소용없지 않겠습니까?
그래서 현재 자신의 서버에 BIND9이 설치되어 있어서 서브 도메인이 설정된 분들께만 드리고자 합니다.
(현재 이 강좌를 통해 DNS 서버를 구축한 분들이 몇 분이나 되는지 파악하고 싶어서이니 널리 양해 해주시길!^^;)

배치 파일 신청 방법은 먼저 앞서 설명한 방법으로 댓글을 올리신 다음 자신의 FTP 서버에 사용자 계정을 하나 만들고
아래의 내용을 저(ID : hats)에게 쪽지로 보내 주시기 바랍니다.

 1) FTP 사용자 계정 ID와 Password( 예 : 아이디 named, Password 2345 )
 2) 접속할 FTP 주소( 예 : ftp.xxx.dnip.net )
 3) 접속할 수 있는 시간대( 예 : 18:00~19:00 )
(파일이 업로드된 것을 확인 후 FTP 계정은 삭제하거나 Password를 변경하시기 바랍니다.)

사용방법은 아래에도 설명되어 있지만 BINDzSet.cmd 파일을 시스템 Path를 지정해 놓았던
C:\APM_Setup\Server\DNS\bin\ 디렉터리에 넣은 다음 cmd 창을 열고 BINDzSet만 입력하십시오.
그러면 아래 내용과 같은 도움말이 나올 것입니다.

BINDzSet.cmd를 사용해 보시면 아시겠지만
명령 중 옵션 입력이 잘못되었을 때에는 그 상황에 맞는 도움말이 자세히 나오게 되어 작성되어 있습니다.
사용법을 익히시지 않더라도 도움말만 보면 쉽게 사용할 수 있을 것입니다.(저의 생각일 뿐...)

Windows OS에 DNS 서버(BIND9)을 설치한 후 설정 파일들을 만들어야 할 때
BINDzSet 명령 한 줄 입력할 때마다 입력한 설정 파일이 자동으로 만들어 질 것입니다.
그리고 곧 바로 그 설정 파일의 내용을 확인해 보실 수 있으며,
BIND9을 재시작시켜 변경 내용을 적용시킬 수 있습니다.

혹시, 좀 더 자세한 사용법 설명이 필요하시다면 댓글 달아 주십시오.
BINDzSet.cmd 사용법 설명 글 올리도록 하겠습니다.

BINDzSet.cmd는 여러분의 환경에 맞게 수정하시고 사용하셔도 됩니다.
단, 다른 곳에 올리지는 말아 주세요.-.-;
윈도우 명령 셸을 공부하시는데에도 도움이 될 것이라 여겨집니다.

앞에서 설명한 [ 직접 IP Update ]의 [2]와 [3] 항목은 BINDzSet.cmd를 사용한다면
다음과 같이 2번의 명령 실행으로 간단히 해결될 것입니다.

BINDzSet Dzone jobdahan.dnip.net 210.95.205.105 2007062015 shop
BINDzSet restart


배포 받는 과정이 귀찮으시다구요?
에~구!
그럼, 저도 할 수 없죠!^^;


[ BINDzSet 사용법 ]
*****************************************************************************************
  명령 형식 : BINDzSet [설정파일명] [HostName] [IP] [Serial] [subD1 [subD2...[subD5]]]
*****************************************************************************************
  ㅇ [설정파일명] : rndc, named.ca, localhost.zone, named.local, named.conf, Dzone 중 하나
  ㅇ [Host Name]  : 네임서버도메인(ns.ID.dnip.net)에서 "ns."을 제외한 이름 ID.dnip.net
  ㅇ [IP]         : 내 컴퓨터의 인터넷 연결 IP 주소  ex) 210.95.205.15
  ㅇ [Serial]     : 이 네임서버의 데이타 버전, 현재 년월일시간으로 정함  ex) 2007050101
  ㅇ subD1 subD2  : 설정할 서브도메인 이름(공백으로 구분해서 5개까지 추가 가능)
                     www, mail, ftp, pds, blog는 기본으로 설정됨  ex) shop cafe commu 등
---------------------------------------------------------------------------------------------------
[ 실행 예 ]
[1] rndc.key, rndc.conf 파일 생성하기
     BINDzSet rndc           ⇒rndc.key 파일과 rndc.conf 파일을 생성
     BINDzSet rndc view   ⇒ 생성되어 있는 rndc.key, rndc.conf 파일 내용 보기

[2] named.ca 파일 생성하기
     BINDzSet named.ca           ⇒ named.ca 파일을 생성
     BINDzSet named.ca view   ⇒ 생성되어 있는 named.ca 파일 내용 보기

[3] localhost.zone 파일 생성하기
     BINDzSet localhost.zone           ⇒ localhost.zone 파일을 생성
     BINDzSetlocalhost.zone view   ⇒ 생성되어 있는 localhost.zone 파일 내용 보기

[4] named.local 파일 생성하기
     BINDzSet named.local           ⇒ named.local 파일을 생성
     BINDzSet named.local view   ⇒ 생성되어 있는 named.local 파일 내용 보기

[5] named.conf 파일 생성하기
     BINDzSet named.conf ID.dnip.net           ⇒ named.conf 파일을 생성
     BINDzSet named.conf view                   ⇒ 생성되어 있는 named.conf 파일 내용 보기

[6] 개별도메인 Zone 파일 생성하기
     BINDzSet Dzone ID.dnip.net xxx.xxx.xxx.xxx 2007050215 shop cafe commu
          ⇒ "ID.dnip.net.zone"이라는 파일명을 갖는 개별도메인 Zone 파일을 생성
               xxx.xxx.xxx.xxx : 인터넷 연결 IP Address, 2007050215 : Serial,
               shop, cafe, commu : 생성시킬 2차 도메인(www, mail, ftp, pds, blog는 기본으로 생성됨)
     BINDzSet Dzone ID.dnip.net view     ⇒ 생성되어 있는 개별도메인 Zone 파일 "ID.dnip.net.zone"의 내용 보기

[ 부가 기능 ]
(1) 내 컴퓨터 인터넷 연결 IP 확인
     BINDzSet ipcheck

(2) BIND9 재 시작
     BINDzSet restart
---------------------------------------------------------------------------------------------------
[ 사용 환경 ]
 1. 이 파일의 이름은 BINDzSet.cmd 이며, Windows용 배치 파일이므로 cmd창에서 실행합니다.
 2. BINDzSet.cmd 파일과 bindzset 폴더를 시스템 Path가 설정되어 있는 C:/APM_Setup/Server/DNS/bin/
    디렉터리에 넣어두고 사용하십시오.
    - bindzset 폴더에는 named.root, Port_Check.exe 파일이 들어가 있어야 합니다.

 3. BIND9이 C:/APM_Setup/Server/DNS/ 디렉터리에 설치되어 있는 환경에 맞게 배치 파일 스크립트가
    작성되어 있으므로 환경이 다를 경우 BINDzSet.cmd를 수정하여 사용하면 됩니다.
    또한 C:/APM_Setup/temp/ 디렉터리도 사용하고 있음을 참고하십시오.
    물론 이 강좌의 내용대로 하셨다면 수정 없이 그대로 사용하시면 됩니다.
 4. BINDzSet의 실행하는 위치는 시스템 Path가 설정되어 있으므로 아무 디렉터리에서나 실행하면 됩니다.

http://jobdahan.net/server_window/17274


현재는 BIND9이 설치되면서 윈도우즈 서비스에 ISC BIND라는 이름으로 등록은 되어 있지만
실행이 되지 않고 있는 상태입니다. 이 ISC BIND 서비스를 시작시켜 주어야 Windows XP가 부팅되면서
named 데몬이 자동으로 실행되게 됩니다.
(Windows XP에서 BIND9의 프로세스 이름은 named.exe이며 서비스 이름은 ISC BIND입니다.)

[시작]-[제어판]-[성능 및 유지관리]-[관리 도구]를 선택하여 관리 도구 창이 열리면
그 곳에서 [서비스]를 더블클릭하여 서비스 창을 엽니다.

그 서비스 창에서 ISC BIND 라는 이름의 서비스(상태 필드에 “시작됨”이라는 글자가 표시되지 않은 상태입니다.)를 찾아
오른쪽 클릭하여 단축메뉴에서 [속성]을 선택하면 ISC BIND 속성 창이 열립니다.
(이 속성 창을 여는 경로를 잘 기억해 두시기 바랍니다.)

아래의 그림과 같이 ISC BIND 속성 창의 [로그온] 탭을 클릭합니다.

BIND9을 설치하면서 로그온 계정 이름을 named라 하고 암호를 입력했을 것입니다.
그렇기 때문에 현재는 .\named 사용자 계정으로 선택되어져 있습니다.

이 .\named 라는 사용자 계정을 다음의 방법으로 로컬 시스템 계정으로 변경시켜 주어야만
named 데몬을 시작할 수 있게 됩니다.

아래의 왼쪽 그림과 같이 .\named 사용자 계정으로 선택되어 있는 상태를 [로컬 시스템 계정]으로 변경시키고
반드시 [적용] 버튼을 클릭합니다. 적용이 되면 [적용] 버튼은 비활성화 상태로 표시됩니다.

그 다음 오른쪽 그림과 같이 [일반] 탭을 클릭하고 “서비스 상태 :”라는 글자 바로 아래에 있는 [시작] 버튼을 클릭합니다.
서비스를 시작 상태를 나타내는 아래와 같은 서비스 제어 창이 열렸다가 자동으로 닫힐 것입니다.

서비스 제어 창이 닫히고 [시작] 버튼이 비활성화 상태가 되면 [ISC BIND 서비스]가 시작된 것입니다.

만약, 아래 그림과 같은 메시지가 나오면서 ISC BIND가 시작되지 않을 경우
[로그온] 탭에서 로컬 시스템 계정으로 변경시킨 다음 [적용] 버튼을 누르지 않은 채로 [일반] 탭에서 [시작] 버튼을
눌렀기 때문입니다.(저는 이 것 때문에 스트레스 엄청 받았었는뎅... 여러분들은 저 같은 실수 안 하시겠죠?)


이제 지속적인 서비스 실행이 되었으니 [확인] 버튼을 눌러 ISC BIND 속성 창을 닫고,
서비스 창에서 ISC BIND가 서비스되고 있는 상황을 보면
아래 그림과 같이 “시작됨”, “로컬 시스템”이라는 글자가 보일 것입니다.

[Ctrl+Alt+Del] 키를 눌러서 Windows 작업관리자 창의 [프로세스] 탭에서도 확인할 수 있습니다.
Windows 작업관리자 창의 프로세스 탭에서 named.exe라는 프로세스가 보일 것입니다.


현재 DNS 서버가 구동되어 네임 서비스를 하고 있는 중이며,
다음부터는 부팅하게 되더라도 자동으로 ISC BIND 서비스가 시작될 것입니다.
즉, DNS 서버가 동작하게 된다는 말이 되겠지요?


이제 ISC BIND를 서비스로 등록했으므로 실제 동작을 확인하기 위해서 서버 컴퓨터를 재부팅하여
다시 동작을 확인해 보도록 하십시오.

[6. BIND9 동작 테스트]의 3) 네임서버 질의 명령어 nslookup으로 확인, 4) ping 명령으로 전송 응답 테스트 과정을
다시 시도하여 마무리 동작 테스트하시길 바랍니다.


드디어 Windows XP에 DNS 서버(BIND9)을 모두 설치하고 설정한 다음
정상적인 동작까지 될 수 있도록 서비스 등록까지 하여
네임서버를 구동시켰으며 현재 네임 서비스를 하고 있는 중입니다.

http://jobdahan.net/server_window/17272


DNS 서버인 BIND9을 본격적으로 구동시키기에 앞서 지금까지 설치/설정한 모든 사항들이 실제적으로 정상적인
동작을 하고 있는지 테스트 해 볼 것입니다.

DNS 서버의 데몬(named.exe)을 명령 창(cmd)에서 임시 실행시켜서 에러 유무 확인,
프로세스 창에서 실행된 데몬 확인,
네임서버 질의 명령어 nslookup으로 서브 도메인의 IP 주소 확인 및 ping 명령어로 전송 응답 테스트를 하여
DNS 서버(BIND9의 named)가 정상적으로 동작하고 있는지 확인합니다.


 1) 명령 창(cmd)에서의 named.exe 실행

   C:\APM_Setup\Server\DNS\bin\ 디렉터리에 named.exe 파일이 있는데
   그 디렉터리는 미리 Path를 설정해 주었으므로 cmd 창에서 현재 디렉터리를 이동시키지 않고
   곧 바로 named.exe를 실행할 수 있습니다.

   [시작]-[실행]-cmd 입력하여 cmd 창을 열어서 named.exe -g 라는 명령어를 입력하고 Enter 키를 치면
   아래와 같은 실행 상태가 보여 지고 C:\Documents and Settings\hats>라는 프롬프트가 표시되지 않은 채
   맨 아래에 커서가 깜박거리면서 named 데몬이 실행됩니다.

명령 프롬프트(cmd) 창(에러없이 실행된 예)

C:\Documents and Settings\hats>named -g

30-4-2007 13:58:28.986 starting BIND 9.4.0 -g
30-4-2007 13:58:29.002 found 2 CPUs, using 2 worker threads
30-4-2007 13:58:29.002 loading configuration from 'C:\APM_Setup\Server\DNS\etc\named.conf'
30-4-2007 13:58:29.002 listening on IPv4 interface Loopback Interface 1, 127.0.0.1#53
30-4-2007 13:58:29.002 listening on IPv4 interface TCP/IP Interface 2, 192.168.2.12#53
30-4-2007 13:58:29.017 automatic empty zone: 127.IN-ADDR.ARPA
30-4-2007 13:58:29.017 automatic empty zone: 254.169.IN-ADDR.ARPA
30-4-2007 13:58:29.017 automatic empty zone: 2.0.192.IN-ADDR.ARPA
30-4-2007 13:58:29.017 automatic empty zone: 255.255.255.255.IN-ADDR.ARPA
30-4-2007 13:58:29.017 automatic empty zone: 0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0
.0.0.0.0.IP6.ARPA
30-4-2007 13:58:29.017 automatic empty zone: 1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0
.0.0.0.0.IP6.ARPA
30-4-2007 13:58:29.017 automatic empty zone: D.F.IP6.ARPA
30-4-2007 13:58:29.017 automatic empty zone: 8.E.F.IP6.ARPA
30-4-2007 13:58:29.017 automatic empty zone: 9.E.F.IP6.ARPA
30-4-2007 13:58:29.017 automatic empty zone: A.E.F.IP6.ARPA
30-4-2007 13:58:29.017 automatic empty zone: B.E.F.IP6.ARPA
30-4-2007 13:58:29.033 command channel listening on 127.0.0.1#953
30-4-2007 13:58:29.033 ignoring config file logging statement due to -g option
30-4-2007 13:58:29.049 zone 0.0.127.in-addr.arpa/IN: loaded serial 1997022700
30-4-2007 13:58:29.049 zone localhost/IN: loaded serial 42
30-4-2007 13:58:29.049 zone jobdahan.dnip.net/IN: loaded serial 2007042710
30-4-2007 13:58:29.049 running
_

   실행 상태를 보고 에러가 있는지 확인합니다. 만약 에러가 있으면 그 메시지를 확인하시고 설정 파일을 꼼꼼히 확인해 주시기
   바랍니다. 위의 경우는 에러가 없이 실행된 상태의 한 예입니다.

   [주의] 이 때 cmd 창을 닫으면 named 데몬의 실행이 중지되어 버립니다.
              그러므로 동작 테스트가 끝날 때까지 반드시 cmd 창을 닫지 않도록 합니다.
              커서가 깜박거리고 있는 그대로 그냥 놔 두십시오.^^;

   [참고] 분명 모든 구문을 이상 없이 입력해 주었는데도 zone 파일을 정상적으로 읽어 들이지 못해 동작이 되지 않는 경우가
   있을 수 있습니다. 아마 텍스트 에디터로 편집하면서 파일의 끝에 들어가는 보이지 않는 코드 때문이지 않았는지 짐작만 할
   뿐입니다. 그렇지만 스트레스는 받지 마십시오. 해결 방법이 없겠습니까?

   아래와 같은 에러 메시지가 나올 경우에는 해당되는 파일을 아예 삭제하시고,
   에러난 파일을 이번에는 메모장을 이용하여 처음부터 다시 입력하여 만드시길 바랍니다.

named.local:11: file does not end with newline
dns_rdata_fromtext: jobdahan.dnip.net.zone:17: unexpected end of input
one jobdahan.dnip.net/IN: loading from master file jobdahan.dnip.net.zone failed: unexpected end of input

   저도 처음 DNS 서버 구축할 때 이 것 때문에 스트레스 엄청 받았습니다.
   혹시라도 설정 파일 내용을 이상 없이 입력했는데도 에러 메시지가 나올 경우 댓글로 에러 메시지와 함께
   에러가 발생된 설정파일 내용도 올려 주시면 같이 해결해 보기로 하겠습니다.


 2) named 데몬 프로세스 확인

   에러가 없을 경우 [Ctrl+Alt+Del] 키를 눌러서 Windows 작업관리자 창을 연 다음
   [프로세스] 탭을 클릭하여 아래 그림과 같이 named.exe가 실행되고 있는지 확인합니다.


 3) 네임서버 질의 명령어 nslookup으로 확인

   named 데몬이 동작되고 있음을 확인했으니 네임서버 질의 명령어(nslookup)를 이용해서
   서브 도메인의 IP 주소를 확인해 볼 차례입니다.

   [시작]-[실행]-cmd 입력하여 cmd 창을 하나 더 열어 놓습니다.
   (왜냐구요? 아까 열어 놓았던 cmd 창은 named 데몬을 실행 중인데 그 창에서 다른 명령을 실행시키기 위해 프롬프트가
    나오게 하려면 named를 중지시켜야 하고, 글케되믄 named 동작을 확인해 볼 수 없게 되기 땜시...)

   새로 열린 cmd 창에서 아래와 같이 nslookup[Enter]을 입력하여 nslookup 모드로 들어갑니다.
   프롬프트가>로 바뀌었을 것입니다.

   이제 생성시킨 서브 도메인들을 각각 입력하여 질의 했을 때 IP 주소가 표시되면
   그 주소가 위에서 작성했던 zone 파일인 jobdahan.dnip.net.zone에서 설정했던 주소인지 확인합니다.
   210.95.205.15 이면 정상적으로 잘 설정되어 동작되고 있는 것입니다.

명령 프롬프트(cmd) 창

C:\Documents and Settings\hats>nslookup
Default Server:  cns3.bora.net
Address:  203.248.252.2

www.jobdahan.dnip.net
Server:  cns3.bora.net
Address:  203.248.252.2

Name:    www.jobdahan.dnip.net
Address:  210.95.205.15

jobdahan.dnip.net
Server:  cns3.bora.net
Address:  203.248.252.2

Name:    jobdahan.dnip.net
Address:  210.95.205.15

mail.jobdahan.dnip.net
Server:  cns3.bora.net
Address:  203.248.252.2

Name:    mail.jobdahan.dnip.net
Address:  210.95.205.15

ftp.jobdahan.dnip.net
Server:  cns3.bora.net
Address:  203.248.252.2

Name:    ftp.jobdahan.dnip.net
Address:  210.95.205.15

shop.jobdahan.dnip.net
Server:  cns3.bora.net
Address:  203.248.252.2

Name:    shop.jobdahan.dnip.net
Address:  210.95.205.15

exit
C:\Documents and Settings\hats> _

   확인이 끝났으면 exit 명령으로 nslookup 모드를 빠져 나옵니다.


 4) ping 명령으로 전송 응답 테스트

   이 번에는 설정된 도메인으로 패킷 데이터(Packet Data)를 보내고 그 응답 상태를 확인하기 위해 방금 nslookup 명령을
   사용했던 cmd 창에서 ping 서브도메인[Enter]의 명령 형식으로 각 도메인들을 테스트합니다.
   nslookup으로 확인이 잘 되었다면 ping 테스트 결과도 정상적일 것입니다.

명령 프롬프트(cmd) 창

C:\Documents and Settings\hats>ping jobdahan.dnip.net

Pinging jobdahan.dnip.net [210.95.205.15] with 32 bytes of data:

Reply from 210.95.205.15: bytes=32 time=1ms TTL=255
Reply from 210.95.205.15: bytes=32 time<1ms TTL=255
Reply from 210.95.205.15: bytes=32 time<1ms TTL=255
Reply from 210.95.205.15: bytes=32 time<1ms TTL=255

Ping statistics for 210.95.205.15:
    Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),
Approximate round trip times in milli-seconds:
    Minimum = 0ms, Maximum = 1ms, Average = 0ms

C:\Documents and Settings\hats>ping www.jobdahan.dnip.net

Pinging www.jobdahan.dnip.net [210.95.205.15] with 32 bytes of data:

Reply from 210.95.205.15: bytes=32 time<1ms TTL=255
Reply from 210.95.205.15: bytes=32 time<1ms TTL=255
Reply from 210.95.205.15: bytes=32 time<1ms TTL=255
Reply from 210.95.205.15: bytes=32 time<1ms TTL=255

Ping statistics for 210.95.205.15:
    Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),
Approximate round trip times in milli-seconds:
    Minimum = 0ms, Maximum = 0ms, Average = 0ms

C:\Documents and Settings\hats>ping shop.jobdahan.dnip.net

Pinging shop.jobdahan.dnip.net [210.95.205.15] with 32 bytes of data:

Reply from 210.95.205.15: bytes=32 time<1ms TTL=255
Reply from 210.95.205.15: bytes=32 time<1ms TTL=255
Reply from 210.95.205.15: bytes=32 time<1ms TTL=255
Reply from 210.95.205.15: bytes=32 time<1ms TTL=255

Ping statistics for 210.95.205.15:
    Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),
Approximate round trip times in milli-seconds:
    Minimum = 0ms, Maximum = 0ms, Average = 0ms

C:\Documents and Settings\hats> _

   ping 검사 결과 모두 Packets: Sent = 4, Received = 4, Lost = 0 (0% loss) 임을 알 수 있습니다.
   즉, 4개의 패킷 데이터를 보내서 4개 모두 받아 손실이 0 이라는 의미입니다.

   여기의 예에서는 3개 도메인에 대해서만 확인해 보았지만 여러분들은 설정한 서브 도메인 모두 확인해 보시기 바랍니다.


이제 DNS 서버(BIND9)의 동작 확인이 끝났으니 cmd 창을 두 개 모두 닫아도 좋습니다.
named가 실행되었던 cmd 창을 닫은 다음
Windows 작업관리자 창의 [프로세스] 탭을 보면 named 데몬의 실행이 중지되어 사라지고 없음을 알 수 있습니다.


자, 지금까지의 작업이 순조롭게 잘 되었습니까?

혹시라도 문제가 있으면 글을 올려 주시기 바랍니다.

작업이 잘 되었다면 이제는 임시가 아닌 정상적인 서비스가 되게 설정할 차례입니다.

 설정 파일의 마지막으로 개별 도메인에 대한 zone 파일을 만들어 주어야 합니다.
 만들 zone 파일의 이름은 zone "jobdahan.dnip.net"에서 정의한 zone 이름(Zone Name)에 “.zone"을 붙여 주는 것이
 일반적인 방법입니다.

 물론 이 zone 파일 역시 \etc 디렉터리 즉, C:\APM_Setup\Server\DNS\etc\ 디렉터리에 위치하고 있어야 합니다.
 named.conf 파일의 options 블록에서 directory "C:\APM_Setup\Server\DNS\etc";로 정의했기 때문이지요.

 바로 이 zone 파일에서 실제 사용하게 되는 도메인과 서브 도메인들을 설정해 주게 됩니다.
 도메인 설정의 핵심이라고 할 수 있겠지요?
 그래서 이 부분은 조금 더 자세하게 설명하기로 하겠습니다.

 앞에서 설명한 named.conf 파일의 맨 아래 부분에 다음과 같은 zone 블록이 있었을 것입니다.

zone "jobdahan.dnip.net" IN {
 type master;
 file "jobdahan.dnip.net.zone";
 allow-update { none; };
};


 위의 구문에서 file "jobdahan.dnip.net.zone";은 jobdahan.dnip.net.zone 파일로 네임 서비스를 하겠다는 설정이므로
 아래의 설명과 같은 내용의 jobdahan.dnip.net.zone 파일을 만들어 주어야 합니다.

[ 예 1] C:\APM_Setup\Server\DNS\etc\jobdahan.dnip.net.zone 파일의 내용

$TTL 43200
@    IN    SOA    ns.jobdahan.dnip.net.    root.jobdahan.dnip.net. (
                        2007042710  ; 시리얼 값 (년월일시간)으로 대부분 셋팅
                        3H              ; 2차 네임서버가 1차 네임서버에 접속하는 시간
                        15M            ; 접속 실패 시 다시 시도할 시간 간격
                        1W              ; 1차 네임서버에서 데이터가 없다면 1주 이후에 지워진다.
                        1D )            ; 위에서 설정한 TTL 값과 같은 의미
;
; Name Server
      IN     NS      ns.jobdahan.dnip.net. ; 도메인을 소유한 DNS의 도메인
      IN     MX 10  mail.jobdahan.dnip.net. ; 메일을 보낼 도메인 또는 주소
      IN     A         210.95.205.15  ; 도메인이 찾아갈 IP 주소
;
; Host name
ns   IN    A         210.95.205.15  ;
;
; Virtual Host
www    IN    A   210.95.205.15  ; www.도메인이 찾아갈 IP주소
mail     IN    A   210.95.205.15  ; 메일서버 아이피
ftp        IN    A   210.95.205.15  ; FTP서버 아이피
*          IN    A   210.95.205.15  ; 모든 서브 도메인이 찾아갈 서버 ip 주소

 다음은 위의 내용에 대한 설명입니다.

  a) SOA ns.jobdahan.dnip.net. : 해당 도메인(ORIGIN : jobdahan.dnip.net)에 대하여 이 곳에 설정한 네임서버
     (ns.jobdahan.dnip.net : DNIP 사이트에서 무료 서비스 받은 도메인)가 모든 정보를 가지고 있음을 선언하고 있습니다.
     도메인 끝 부분에 마침표 “.”을 붙이고 있는 것에 유의하십시오.

  b) root.jobdahan.dnip.net. :  jobdahan.dnip.net이라는 도메인의 관리자 Email 주소에 해당합니다.
     이 구문은 root@jobdahan.dnip.net을 의미하는 것으로 @기호 대신에 .(dot)을 사용하여
     root.jobdahan.dnip.net.으로 입력합니다.

  c) IN NS ns.jobdahan.dnip.net.;
     해당 도메인(jobdahan.dnip.net)의 네임서버(ns.jobdahan.dnip.net)를 지정하는 곳입니다.

  d)IN MX 10 mail.jobdahan.dnip.net.;
     MX는 Mail eXchanger의 약어로서 해당 도메인(jobdahan.dnip.net)의 메일서버를 지정하는 곳입니다.
     (지금은 메일서버가 구축되어 있지 않아 이 부분은 삭제해도 되지만 나중에 메일서버를 사용하게 될 때에는
     삽입하여야 합니다.)

  e) IN A 210.95.205.15 ;
    해당 도메인(jobdahan.dnip.net)의 IP 주소가 210.95.205.15(자신의 컴퓨터 외부 인터넷 연결 IP 주소)임을 설정합니다.

  f) ns IN A 210.95.205.15 ;
    ns.jobdahan.dnip.net의 IP 주소가 210.95.205.15임을 설정합니다.

  g) 서브 도메인 설정 ~ 각 서브 도메인들에 해당하는 IP 주소를 설정합니다.

www     IN    A     210.95.205.15 ;
mail      IN    A     210.95.205.15 ;
ftp         IN    A     210.95.205.15 ;
*           IN    A     210.95.205.15 ;

ㅇ www IN A 210.95.205.15; : www.jobdahan.dnip.net의 IP 주소가 210.95.205.15 임을 설정합니다.

ㅇ mail  IN A 210.95.205.15; : mail.jobdahan.dnip.net의 IP 주소가 210.95.205.15 임을 설정합니다.
    (이 부분은 현재 메일서버를 사용하고 있지 않으므로 사용하지 않을 것이지만 나중에 메일서버를 사용하게 될 때에는
     삽입하여야 합니다.)

ㅇ ftp  IN A 210.95.205.15; : ftp.jobdahan.dnip.net의 IP 주소가 210.95.205.15 임을 설정합니다.
    (이 부분 역시 반드시 들어가야 할 부분은 아니며 ftp.jobdahan.dnip.net이라는 도메인이 필요할 경우에 삽입하면
     됩니다.)

ㅇ *   IN A 210.95.205.15; : 앞에서 정의하지 않은 나머지 모든(*) 서브 도메인들의 IP 주소가 210.95.205.15임을 설정합니다.
    이 방법은 특정 이름의 도메인이 정해지지 않았을 경우 무조건 기본 도메인으로 사용하고 있는 jobdahan.dnip.net으로
    매핑(mapping) 처리되도록 한다든지, 또는 오타로 인한 도메인은 특정 도메인으로 처리하도록 할 때에 유용한 방법이
    될 수 있을 것입니다.(여기에서는 사용하지 않도록 하겠습니다.)

  위의 설명을 참고하여 자신의 환경에 맞게 내용을 메모장이나 텍스트 에디터로 작성한 다음 이 파일 역시 다른 zone 파일들이
  있는 C:\APM_Setup\Server\DNS\etc\ 디렉터리에 jobdahan.dnip.net.zone 이라는 파일명으로 저장합니다.
  (작성할 때 아래의 [예 2] 내용을 샘플로 하시기 바라며, 주홍색 글자만 수정하시면 될 것입니다.)

  [작성 시 주의사항]  1. 도메인 뒤에 붙어 있는 .(점)을 필히 입력하시고,
                              2. 모든 공백 라인은 “;” 문자로 주석 처리하시길 바랍니다.

  여기에서는 ORIGIN 인 jobdahan.dnip.net을 비롯하여 www.jobdahan.dnip.net, mail.jobdahan.dnip.net,
  ftp.jobdahan.dnip.net, shop.jobdahan.dnip.net이라는 jobdahan.dnip.net의 서브 도메인들을 생성하게 하는
  jobdahan.dnip.net.zone 파일 작성하는 예를 들어 보겠습니다.

[ 예 2] C:\APM_Setup\Server\DNS\etc\jobdahan.dnip.net.zone 파일의 내용

$TTL 43200
@            IN    SOA       ns.jobdahan.dnip.net.    root.jobdahan.dnip.net. (
                                   2007042710  ; 시리얼 값 (년월일시간)으로 대부분 셋팅
                                   3H  ; 2차 네임서버가 1차 네임서버에 접속하는 시간
                                   15M  ; 접속 실패 시 다시 시도할 시간 간격
                                   1W  ; 1차 네임서버에서 데이터가 없다면 1주 이후에 지워진다.
                                   1D )  ; 위에서 설정한 TTL 값과 같은 의미
; Name Server
              IN     NS     ns.jobdahan.dnip.net. ; 도메인을 소유한 DNS의 도메인
              IN     A       210.95.205.15  ; 도메인이 찾아갈 IP 주소
; Host name
ns           IN    A        210.95.205.15  ;
; Virtual Host
www       IN    A       210.95.205.15  ; www.도메인이 찾아갈 IP주소
mail        IN    A       210.95.205.15  ; mail.도메인이 찾아갈 IP주소
ftp           IN    A       210.95.205.15  ; ftp.도메인이 찾아갈 IP주소
shop       IN    A       210.95.205.15  ; shop.도메인이 찾아갈 IP주소


 [ 개별도메인 zone 파일의 유효성 검사(zone file validity checking) ]

  BIND9의 동작 테스트를 하기 전에 먼저 etc 디렉터리에 있는 jobdahan.dnip.net.zone 파일이 유효한지 검사해 보기로
  하겠습니다.

  이 작업은 DNS 서버 구축의 성공 여부를 가늠할 수 있는 마지막 과정이기 때문에 이 검사에서 에러 메시지가
  하나도 나오지 않아야만 합니다.
 만약 에러 메시지가 나오면 그 에러메시지 내용을 잘 살펴본 후 반드시 그 부분을
  해결하시기 바랍니다.

  [시작]-[실행]-cmd 입력하여 cmd 창을 열고, 현재의 디렉터리를 C:\APM_Setup\Server\DNS\etc\ 디렉터리로
  이동시킨 후 다음 형식과 같은 명령을 입력합니다.

형식 : named-checkzone {zonename} {filename}

  예) named-checkzone  jobdahan.dnip.net  jobdahan.dnip.net.zone

아래와 같이 에러 메시지가 없이 표시되면 모든 설정이 잘 되었음을 나타냅니다.

명령 프롬프트(cmd) 창

C:\Documents and Settings\hats>cd\APM_Setup\Server\DNS\etc[Enter]

C:\APM_Setup\Server\DNS\etc>named-checkzone jobdahan.dnip.net jobdahan.dnip.net.zone[Enter]
zone jobdahan.dnip.net/IN: loaded serial 2007042710
OK

C:\APM_Setup\Server\DNS\etc>

다음은 에러 메시지의 예입니다. 참고하시기 바랍니다.

에러 메시지 [예 1]

C:\APM_Setup\Server\DNS\etc>named-checkzone jobdahan.dnip.net jobdahan.dnip.net.zone
zone jobdahan.dnip.net/IN: NS 'ns.jobdahan.dnip.net.jobdahan.dnip.net' has no address records (A or
AAAA)
zone jobdahan.dnip.net/IN: loaded serial 2007042710
OK
[설명] IN NS ns.jobdahan.dnip.net 구문에서 끝부분에 점(.)이 없기 때문에 표시되는 메시지

에러 메시지 [예 2]

C:\APM_Setup\Server\DNS\etc>named-checkzone jobdahan.dnip.net jobdahan.dnip.net.zone
zone jobdahan.dnip.net/IN: NS 'ns.jobdahan.dnip.net' has no address records (A or AAAA)
zone jobdahan.dnip.net/IN: loaded serial 2007042710
OK
[설명] ns IN A 210.95.205.15 ; 라는 구문이 없기 때문에 표시되는 메시지

에러 메시지 [예 3]

C:\APM_Setup\Server\DNS\etc>named-checkzone jobdahan.dnip.net jobdahan.dnip.net.zone
jobdahan.dnip.net.zone:20: pc_book.jobdahan.dnip.net: bad owner name (check-names)
zone jobdahan.dnip.net/IN: loaded serial 2007042710
OK
[설명] zone 파일의 20번 행에서 pc_book IN A 210.95.205.15 ;이라 설정하여 서브 도메인 이름으로 사용할 수 없는 언더바(underbar, “_”)를 사용했기 때문에 표시되는 메시지. 하이픈(hyphen, "-")은 사용 가능함


이제 마지막 설정 파일인 jobdahan.dnip.net.zone 파일이 추가 되었습니다.
C:\APM_Setup\Server\DNS\etc\ 디렉터리에 모두 7개의 설정 파일들이 있을 것입니다.

수고 많이 하셨습니다...!

 a) named.ca 파일 만들기

   강좌 첫 부분 DNS 개념에서 설명했듯이 모든 네임서버는 반드시 최상위 도메인인 루트도메인에 대한 정보를
   가지고 있어야 하는데 바로 named.ca 파일에 루트도메인에 대한 정보가 들어가 있어야 합니다.

   아래 링크된 INTERNIC 사이트에 접속해 보면 여러 개의 파일들이 보이는데, 그 중에서 루트도메인에 대한 정보가
   들어가 있는 named.root 파일만을 다운로드하여 C:\APM_Setup\Server\DNS\etc\ 디렉터리에 저장 한 뒤에
   파일명을 named.ca로 바꾸어주면 됩니다.(클릭한 뒤 쪼께 기다리셔야 창이 열립니다...-.-;)

루트도메인파일 다운로드 링크 : ftp://ftp.rs.internic.net/domain/

   루트도메인 파일(named.root => named.ca)은 1년에 2번 정도 위의 URL에서 다운받아 업그레이드 해주는 것이 좋습니다.


 b) localhost.zone 파일 생성

   localhost라는 도메인의 IP 주소는 127.0.0.1임을 설정한 파일로써
   이 주소는 외부가 아닌 내부 즉, 자기 자신을 가리키는 것으로써 루프 백(loop-back)을 의미합니다.
   각 지시자들과 항목들에 대한 자세한 설명은 리눅스 전문서적의 도메인네임서버 항목을 참고하시기 바랍니다.

   어느 네임서버에서나 localhost는 127.0.0.1이라는 IP 주소를 가리켜야 하므로 아래의 내용과 똑같이 입력하여
   localhost.zone 파일을 작성하면 됩니다.

   작성을 마친 다음 C:\APM_Setup\Server\DNS\etc\ 디렉터리에 localhost.zone 이라는 파일명으로 저장합니다.

C:\APM_Setup\Server\DNS\etc\localhost.zone 파일의 내용

$TTL 86400
@    IN   SOA     @       root (
       42          ; serial (d. adams)
       3H         ; refresh
       15M       ; retry
       1W         ; expiry
       1D )       ; minimum

       IN    NS     @
       IN    A       127.0.0.1


 [ localhost.zone 파일의 유효성 확인 ]

   파일 내용 입력 과정에서 실수하지 않았는지 named-checkzone.exe 유틸리티를 이용하여
   내용의 유효성을 검사해 보기로 합니다.

   cmd 창을 열고 cd 명령으로 현재 디렉터리를 유효성 검사 대상 파일 localhost.zone이 있는
   C:\APM_Setup\Server\DNS\etc로 이동시킨 후 아래와 같은 명령으로 localhost.zone 파일의 유효성을 검사합니다.


   현재 디렉터리를 \etc 디렉터리로 이동시키는 명령 cd C:\APM_Setup\Server\DNS\etc(Enter)

   ( 현재 디렉터리를 \etc 디렉터리로 이동시키지 않으면 localhost.zone 파일이 존재하고 있는 경로를 다음과 같이 명령에
     포함시켜 입력해야 되겠지요?
     C:\Documents and Settings\hats>named-checkzone localhost C:\APM_Setup\Server\DNS\etc\localhost.zone )

   다른 에러 메시지가 나오지 않고 아래와 같이 표시되면 정상적으로 잘 작성되었음을 나타냅니다.

명령 프롬프트(cmd) 창

C:\Documents and Settings\hats>cd C:\APM_Setup\Server\DNS\etc

C:\APM_Setup\Server\DNS\etc>named-checkzone localhost localhost.zone
zone localhost/IN: loaded serial 42
OK


 c) named.local 파일 생성

   localhost 도메인의 Inverse Domain에 대한 정보를 설정한 파일로써
   IP 127.0.0.1은 localhost 도메인을 가리키게 설정하고 있습니다.
   각 지시자들과 항목들에 대한 자세한 설명은 리눅스 전문서적의 도메인네임서버 항목을 참고하시기 바랍니다.

   이 파일 역시 별도로 수정할 필요가 없으며, 이 내용 그대로 입력하여 작성한 뒤
   C:\APM_Setup\Server\DNS\etc\ 디렉터리에 named.local 이라는 파일명으로 저장합니다.
   (주의 : localhost 뒤에 있는 “.”을 반드시 넣도록 하십시오.)

C:\APM_Setup\Server\DNS\etc\named.local 파일의 내용

$TTL  86400
@    IN    SOA        localhost.    root.localhost. (
                            1997022700 ; Serial
                            28800         ; Refresh
                            14400         ; Retry
                            3600000      ; Expire
                            86400 )       ; Minimum
       IN      NS        localhost.

1     IN      PTR       localhost.


[ named.local 파일의 유효성 확인 ]

  cmd 창을 열고 cd 명령으로 현재 디렉터리를 C:\APM_Setup\Server\DNS\etc로 이동시킨 후
  다음과 같은 명령으로  named.local 파일의 유효성을 검사합니다.

  아래와 같이 표시되면 정상적으로 잘 작성되었음을 나타냅니다.

명령 프롬프트(cmd) 창

C:\APM_Setup\Server\DNS\etc>named-checkzone named.local named.local
zone named.local/IN: loaded serial 1997022700
OK


   이제 C:\APM_Setup\Server\DNS\etc\ 디렉터리에 named.ca, localhost.zone, named.local 파일 3개가 추가되어
   6개가 되었을 것입니다.

   앞으로 개별 도메인 설정 zone 파일(예 : jobdahan.dnip.net.zone) 1개만 더 만들면 됩니다.

'Programming > tool' 카테고리의 다른 글

06) BIND9 동작 테스트  (0) 2010.03.19
05) 개별 도메인 zone 파일 만들기  (1) 2010.03.19
03) named.conf 파일 만들기  (0) 2010.03.19
02) [DNS for XP] BIND9에서 named.conf, zone 파일 설정  (0) 2010.03.19
01) XP에 DNS 설치  (0) 2010.03.19

 named.conf 파일은 DNS 서버 데몬인 named의 기본 설정 파일입니다.

 즉, 각종 설정 파일들이 어디에 있는지,
 rndc로 named 제어를 허용 할 것인지 여부와 key 값은 어떻게 되는지,
 루트도메인(.)들을 지정하고 있는 파일은 무엇인지,
 localhost의 IP 주소를 지정한 파일은 무엇인지,
 또 127.0.0.1이 가리키는 도메인을 설정한 파일은 무엇인지,
 하부 도메인(서브 도메인)들이 가리키고 있는 IP 주소를 지정한 파일은 무엇인지를
 기록해둔 파일입니다.

 이 파일은 rndc.key, rndc.conf 파일과 같이 자동 생성되는 것이 아니라
 여러분이 사용하고자 하는 네임서버의 용도에 맞게 메모장이나 텍스트 에디터를 이용하여 직접 만들어 주어야 합니다.

아래의 named.conf 파일 샘플을 참고하여 메모장이나 텍스트 에디터(Edit Plus, Ultra Edit 등)로
자신의 컴퓨터 C:\APM_Setup\Server\DNS\etc\ 디렉터리에 named.conf 파일을 만들기 바랍니다.
이 때 유의할 점은 공백 한 자만을 제외하고 두 자 이상은 탭(Tab) 키를 이용하여 입력하시기 바라며 주석문은 // 입니다.

한글로 설명된 주석 부분(청색 글자)은 모두 입력하지 마시고, 주홍색 글자만 자신의 환경에 맞게 수정하고
나머지는 그대로 입력하시면 됩니다.
.(dot), ;(semicolon) 하나라도 잘못 입력하면 에러가 발생하게 되니 유의해서 작성하시기 바랍니다.

C:\APM_Setup\Server\DNS\etc\named.conf 파일의 내용

options {
 directory "C:\APM_Setup\Server\DNS\etc";       // 네임서버의 zone 파일들이 위치한 경로
};

controls {
 inet 127.0.0.1 allow { localhost; } keys { rndc-key; };    // 로컬(localhost, 127.0.0.1)에서 인증키(rncd-key)를 이용해
};                                                                             // named 데몬 제어를 허용한다는 설정

zone "." IN {
 type hint;
 file "named.ca";                            // 이 네임서버의 루트도메인(.)에 대한 정보는 named.ca라는 파일에 있다는 설정
};                                                   // 그러므로 위의 directory에서 지정한 경로에 named.ca 파일이 존재해야 됨

zone "localhost" IN {
 type master;
 file "localhost.zone";                // 이 네임서버의 localhost 도메인에 대한 정보는 localhost.zone 파일에 있다는 설정
 allow-update { none; };               // etc 디렉터리에 localhost.zone 파일이 존재해야 됨
};

zone "0.0.127.in-addr.arpa" IN {
 type master;
 file "named.local";                    // localhost의 Inverse Domain에 대한 정보는 named.local 파일에 있다는 설정
 allow-update { none; };               // named.local 파일 역시 /etc 디렉터리에 존재해야 됨
};

include "C:\APM_Setup\Server\DNS\etc\rndc.key";
                                                 // rndc.key 파일이 존재하고 있는 경로와 파일명

zone "jobdahan.dnip.net" IN {   // 여기에서 jobdahan.dnip.net은 zone Name 에 해당하며, zone Name은
 type master;                              // www.dnip.net 사이트에서 무료 서비스 받은 도메인에서 ns를 제외한 도메인 명
 file "jobdahan.dnip.net.zone";
                                       // 서비스 받고 있는 도메인에서 ns를 제외하고 확장자로 .zone을 붙인 명칭 사용이 일반적임
                                       // jobdahan.dnip.net.zone 파일을 zone 파일로 하여 네임서비스를 하겠다는 설정
 allow-update { key "rndc-key"; };
};                                    //rndc-key 값으로jobdahan.dnip.net.zone 파일의 업데이트를 허용하겠다는 설정 



[ named.conf 파일의 문법 확인 ]

자, 이제 named.conf 파일을 다 작성하였으니 문법에 틀림이 없는지 검사해 봅시다.

이 문법이 틀리면 DNS 서버가 아예 동작하지 않게 됩니다. 그 만큼 중요한 것이므로 문법 검사하는 툴(tool)까지 있는 것
아니겠습니까?

named.conf 내용의 문법을 검사해주는 유틸리티는 C:\APM_Setup\Server\DNS\bin\named-checkconf.exe 파일
입니다. 검사하는 방법은 아래와 같으며, 이상이 있을 때만 잘못된 곳을 알려주는 메시지가 표시되고 이상이 없을 때는
아무런 표시가 되지 않습니다.

명령 프롬프트(cmd) 창

C:\Documents and Settings\hats>named-checkconf C:\APM_Setup\Server\DNS\etc\named.conf

C:\Documents and Settings\hats>_

(named.conf 파일의 문법이 틀리지 않았을 경우 임)


에러 메시지가 표시되면 그 내용에 따라 named.conf 파일을 수정하고, 아무런 표시가 없을 때까지 검사합니다.

[ 에러 메시지 예 ]

C:\APM_Setup\Server\DNS\etc>named-checkconf named.conf
named.conf:35: missing ';' before end of file

named.conf 파일의 35행 문장 끝에 ';'이 없다는 메시지입니다.
즉,
 allow-update { key "rndc-key"; };
}
으로 되어 있다는 내용이므로 }를 }; 로 수정하고 다시 검사해 봅니다.

C:\APM_Setup\Server\DNS\etc>named-checkconf named.conf
named.conf:7: unknown key 'rndckey'

named.conf 파일의 7행에 입력되어 있는 rndckey 키를 알 수 없다는 메시지입니다.
rndc.key 파일의 내용을 확인해 보면 key 이름이 key "rndc-key"로 정의되어 있음을 알 수 있습니다.
named.conf의 7행 inet 127.0.0.1 allow { localhost; } keys { rndckey; };의 rndckey를 rndc-key로 수정하고
다시 검사해 봅니다.


이제 C:\APM_Setup\Server\DNS\etc\ 디렉터리에 rndc.key, rndc.conf, named.conf 파일 3개가 되었을 것입니다.
앞으로 4개의 파일이 더 있어야 합니다.

 named.ca
========================================================
ftp://ftp.rs.internic.net/domain으로 접속한다.
named.cache 파일을 받아서 확장자를 named.ca로 바꿔준다.
접속이 잘 되지 않으면 첨부 파일을 사용한다.

named.zip - Last update : 2004년 01월 28일 ← 첨부파일========================================================

☆ named.conf
- 빨간색 부분을 변경하여 저장
========================================================
options {
directory "c:\dns\etc"; <- 설치 경로명
};

zone "." IN {
type hint;
file "named.ca"; 
};
zone "localhost" IN {
type master;
file "scmlab.zone";
allow-update {none; };
};
zone "0.0.127.in-addr.arpa" IN {
type master;
file "named.local";
allow-update {none; };
};
key "key" {
algorithm hmac-md5;
secret "+vjvsrwnJ54fRgQjDqxe+A=="; <-rndc.key 에서 생성 된 값 입력
};
zone "scmlab.com" IN {  <-자신이 사용할 도메인 이름 저는 scmlab.com 으로 설정
type master;
file "scmlab.zone";
allow-update {none ;};
};
zone "24.241.203.in-addr.arpa" IN { <-IP주소 ex; 203.241.24.78 인 경우
type master;
file "scmlab.rev";   <- 도메인 이름
allow-update {none; };
};
========================================================


☆ named.local
- default 값으로 저장
========================================================
$ORIGIN .
$TTL 1D
localhost 86400 IN SOA localhost. local.localhost. (
    2001061401 ;Serial
    28800  ;Refresh (8 hours)
    7200  ;Retry (2 hours)
    604800  ;Expire (1 week)
    86400  ;Minimum (1 day)
                                )
IN NS localhost.     
IN A 127.0.0.1
========================================================


☆ scmlab.zone
- 빨간색 부분을 변경하여 자신의 도메인 이름.zone으로 저장
========================================================
$TTL 43200
@  IN SOA ns.scmlab.com. root.scmlab.com.(     <- 자신의 도메인명, 끝에 콤마 주의
   20010504 ;Serial
   10800  ;Refresh
   3600  ;Retry
   3600000  ;Expire
   43200 )  ;Minumum
IN NS ns.scmlab.com<- 자신의 도메인명, 끝에 콤마 주의
IN A 203.241.24.78 <-IP주소 ex; 203.241.24.78 인 경우
IN HINFO "Intel Pentium" "Windows XP"
ns  IN A 203.241.24.78 <-IP주소 ex; 203.241.24.78 인 경우
www  IN A 203.241.24.78 <-IP주소 ex; 203.241.24.78 인 경우
========================================================


☆ scmlab.rev
빨간색 부분을 변경하여 자신의 도메인 이름.rev으로 저장
========================================================
$TTL 43200
@  IN SOA ns.scmlab.com. root.scmlab.com.(    <- 자신의 도메인명, 끝에 콤마 주의
   20010504 ;Serial
   10800  ;Refresh
   3600  ;Retry
   3600000  ;Expire
   43200 )  ;Minumum
IN NS ns.scmlab.com<- 도메인명, 끝에 콤마 주의
78  IN PTR scmlab.com<- 자신의 도메인명, 끝에 콤마 주의
========================================================

위의 파일들을 생성 후 bind9를 실행시키면 됩니다.


출처 : 리룩스포털

출처 : http://gag.aaa.tohttp://gagstory.aaa.to

'Programming > tool' 카테고리의 다른 글

04) named.ca, localhost.zone, named.local 파일 만들기  (0) 2010.03.19
03) named.conf 파일 만들기  (0) 2010.03.19
01) XP에 DNS 설치  (0) 2010.03.19
IIS, FTP 설치  (0) 2010.03.19
VS2008로 작성한 프로젝트를 VS2005열기  (0) 2010.03.18

☆ 1. 다운로드(http://www.isc.org)
- 아래 그림처럼 윈도용 최신버전을 다운받는다.

dns01.jpg

- BIND9.3.2.zip를 다운받았으면 압축을 풀고 폴더를 확인한다.다음과 같을 것이다.
dns02.jpg


☆ 2. 설치
- BINDinstall.exe를 실행시킨다.

dns03.gif
① 설치할 경로를 지정한다. 없다면 생성할것인가라는 창이뜬다. 필자는 C:\dns로 지정했다.
② 패스워드를 적는다..솔직히 왜 적는지 모르겠다. 3번은 확인차 적는것이다.
④ install을 클릭하면 자동으로 설치가 완료된다.


☆ 3. 설정
- 설치후 c:\dns 폴더를 확인하면 bin과 etc폴더가 생성되어 있음을 알수있다.
dns04.gif
- bin 폴더에는 프로세서를 실행할수 있는 파일들이 있고, etc 폴더는 비어있다.
- 이상태로는 아무것도 실행을 할 수 없다.
- 기본적으로 local.zone named.conf 파일과 domain.zone 파일 domain.rev파일 named.ca파일은 존재해야한다.
- 필자는 위 파일 모두를 etc폴더에 위치시켰다.
- 어떤 경로에서 프로세서를 실행할 수 있도록 Path에 C:\dns\bin 을 추가하자.

[path추가]
- 시스템등록정보 -> 고급 -> 환경변수로 들어간다.
- 편집클릭
dns05.gif

- 다음을 추가한다.
dns06.gif
- 확인 -> 확인 -> 확인
- 이젠 도스창 어느경로에서든 DNS관련 프로세서를 실행시킬 수 있다.


[etc 폴더 살펴보기]
- 여기까지 필자의 폴더를 한번 살펴보겠다.
- bin 폴더는 설치때 생성된것이라 모두 같을 것이다.
- etc 폴더에는 필자가 5개의 파일을 생성했다.
5개의 파일 생성 샘플 보기
Snap21.png

[rndc.key생성 rndc.conf설정]
- rndc.key 생성
- 시작 -> 실행 -> cmd 도스창을 띄운후 아래와 같이 실행한다.


Snap2.png
- rndc-confgen 까지는 띄우지 말고 붙여서 작성하고 -a 는 한칸 띄워서 적는다.

- rndc.conf 생성

Snap5.png

- 위와 똑같이 rndc-confgen > c:\dns\etc\rndc.conf 를 적어 준다.


- c:\dns\etc 폴더에 rndc.key와 rndc.conf 가 생성되었다.

Snap3.png 


-rndc.key를 메모장으로 열어보자.

Snap4.png

-밑줄친 부분을  named.conf에 넣어 주면 된다.


☆ 4. 실행
모든 설정이 완료된 후에 실행을 한다. (5개의 파일 생성 샘플 보기)
- 실행은 아래와 같이 한다.(command창에서)

dns12.gif
- 프로세서가 실행되었는지 확인한다.
dns13.gif

- 윈도우 작업관리자에 네임서버 프로세서가 활성화 되었음이 확인된다.
- 모든것이 이상없이 실행이 되었다.


☆ 5. 기타
- zone파일과 zone.rev파일을 잘 설정하면 여러가지 도메인을 사용할 수 있을것이다.
- 위 두 파일에 서브도메인을 추가한 후 프로세서를 다시 시작하려면...
- 이때 rndc를 사용하면 아주 편리하다.
- 네임서버가 가동된 상태에서 프로세서를 다시구동하려면 rndc reload 해주면 만사 OK

[rndc reload]
dns14.gif
- 위와 같이 server reload successful 메세지가 출력되면 새로운내용이 적용된 것이다.
- 이렇게 해서 모든 설명이 끝났다.


☆ 6. 프로세서 서비스 설정
- 시스템이 시작하면 프로세서가 자동으로 작동되어야 한다.
- DNS서버를 인스톨할때 서비스에 자동으로 ISC BIND가 등록이된다.


dns15.gif

- 현재는 서비스가 중지된 상태이다.

- 서비스를 자동 시작되도록 설정한다.
dns16.gif

- 로컬 시스템 계정 선택한다.
dns17.gif

- 서비스 시작 클릭
dns18.gif

- 서비스가 자동 시작으로 설정된것을 확인한다.

dns19.gif
- 시스템을 재시작후 윈도우 작업관리자에 named.exe 프로세서가 가동중임을 확인한다.



출처 : welchsjam blog

출처 : http://gag.aaa.tohttp://gagstory.aaa.to

'Programming > tool' 카테고리의 다른 글

03) named.conf 파일 만들기  (0) 2010.03.19
02) [DNS for XP] BIND9에서 named.conf, zone 파일 설정  (0) 2010.03.19
IIS, FTP 설치  (0) 2010.03.19
VS2008로 작성한 프로젝트를 VS2005열기  (0) 2010.03.18
Visual Studio 2008 설정  (0) 2010.03.18

여기에서는 내 PC가 아닌 다른 PC에서 작업을 하는 경우에  파일 복사 같은 것이 아니라 ftp를 이용하여 간단하게 파일을 전송해서 사용을 하는 방식으로 사용을 한다. 그럼 하나 하나 설정을 하면서 살펴보기로 한다.

먼저 [제어판]->[프로그램 추가 삭제]->[windows 구성 요소 추가 삭제]->[인터넷 정보 서비스[IIS]]을 선택을 한다. 그럼 아래 그림과 같은 화면이 된다.

[그림 2] IIS 선택 이미지


 

그 후에 자세히를 누르면 아래 그림과 같은 이미지가 나타난다.

 




                                        [그림 3] IIS 자세히 선택 화면


[ 그림 3]에서와 같이 File Transfer Protocol(FTP) 서비스와 World Wide Web 서비스를 선택을 한다. 그러면 아마 Windows XP CD 넣으라는 화면이 나오는데 CD넣고 설치를 하면 된다. 일단 설치를 한 후에 IP로 http를 해본다 되는지 확인을 하기 위해서 그러면 아마 방화벽 이런게 없다면 작업중이라는 화면이 보일 것이다. 만약 방화벽이 설치되어 있어서 연결이 안된다면 다음과 같은 방법으로 해결을 하면 된다.

[제어판] -> [방화벽] ->[일반 탭] 에서 사용 안함을 선택을 한다. 또한 하나의 Tip이 있는데 이건 네이버 블로그 나도 HD영상을 갖고 싶다에서 찾은 방식인데 [제어판]->[방화벽]-[고급]-[네트워크 설정]-[설정] 선택을 해서 아래 그림과 같이 선택을 해주는 방법도 있다.

 

[그림 4] 방화벽 고급 탭의 고급 설정

일단 여기까지가 기본 설정이다. 그 다음에 설정을 해주어야 하는게 바로  FTP 설정인데 이거 상당히 귀찮코 빡세다. 젠장이다.

 먼저 [제어판] – [관리 도구] – [인터넷 정보 서비스] – [FTP 사이트] –[기본 FTP 사이트] 에서 속성을 누른 후에 보안 계정 탭에서 익명 연결 허용을 선택 해제를 한 뒤 적용을 누른 후 확인을 누른다. 그림은 아래와 같다

.



[그림 5] 익명 연결 허용 삭제

이제 폴더 옵션에서 모든 사용자에세 동일한 폴더 공유 지정을 해제를 해 준다. 이제 ftp를 기본으로 사용할 폴더로 이동을 하여 속성을 누른 후에 공유 폴더를 설정을 하면 된다. 그림은 아래와 같다.                                

[그림 6] 사용자 권한


위의 그림에서 만약 계정을 추가하고 싶으면 추가를 해주면 된다. 또 한가지 파일 전송 오류가 나는 경우에는 용량 제한이 걸려있는지 확인을 해 보고 또한 FTP 서버 폴더로 사용할 폴더의 권한을 확인을 해 볼 필요가 있다.


'Programming > tool' 카테고리의 다른 글

02) [DNS for XP] BIND9에서 named.conf, zone 파일 설정  (0) 2010.03.19
01) XP에 DNS 설치  (0) 2010.03.19
VS2008로 작성한 프로젝트를 VS2005열기  (0) 2010.03.18
Visual Studio 2008 설정  (0) 2010.03.18
NSIS 값 읽어오기  (0) 2010.03.18

프로젝트명.sln 파일을 텍스트 에디터로 연후.


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


Microsoft Visual Studio Solution File, Format Version 10.00 <- Microsoft Visual Studio Solution File, Format Version   9.00 으로 변경


# Visual Studio 2008 <- # Visual Studio 2005 으로 변경


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


프로젝트명.csproj 파일을 동일하게 텍스트 에디터로 연후


<Reference Include="System.Core">
   <RequiredTargetFramework>3.5</RequiredTargetFramework>
</Reference>
<Reference Include="System.Xml.Linq">
  <RequiredTargetFramework>3.5</RequiredTargetFramework>
</Reference>


삭제


하단에 Project="$(MSBuildToolsPath) -> Project="$(MSBuildBinPath) 으로 변경


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

'Programming > tool' 카테고리의 다른 글

01) XP에 DNS 설치  (0) 2010.03.19
IIS, FTP 설치  (0) 2010.03.19
Visual Studio 2008 설정  (0) 2010.03.18
NSIS 값 읽어오기  (0) 2010.03.18
NSIS 기초지식  (0) 2010.03.18

헐... 예전에 설정 더 해놨었는디..... 어디 간겨ㅠㅠㅠㅠ

이것밖에 없어....ㅋㅋㅋㅋㅋㅋㅋ;;;;;;;;;


1. download the Professor Irvine's assembly source file

2. project.sln open in the \Irvine\Examples\Project_sample

3. 'F7' push compile to Irvine's assembly sourcve



IrvineExamplesVS2008.exe

usertype.dat


syntax highlighting

1. download the "usertype.dat"

2. copy to "\Program Files\Microsoft Visual Studio 9.0\Common7\IDE"

3. visual studio restart


reference

http://kipirvine.com/asm/gettingStarted/index.htm

'Programming > tool' 카테고리의 다른 글

IIS, FTP 설치  (0) 2010.03.19
VS2008로 작성한 프로젝트를 VS2005열기  (0) 2010.03.18
NSIS 값 읽어오기  (0) 2010.03.18
NSIS 기초지식  (0) 2010.03.18
같은 페이지에 계속 머무르기  (0) 2010.03.18

InstallOptions 는 지정한 값을 읽을때 READ 매크로와 WRITE 매크로를 제공합니다.

문법 -

!insertmacro MUI_INSTALLOPTIONS_READ $VAR "ioFile.ini" "Field #" "Name" !insertmacro MUI_INSTALLOPTIONS_WRITE "ioFile.ini" "Field #" "Name" "Value"

아래의 스크립트는 ffdshow.ini 에서 Field 1 값의 state 값을 읽어옵니다. state 값에는 Field 1 컨트롤의 여러 상태가 저장됩니다(컨트롤이 선택되었는지 여부등). 이 값을 1(선택됨) 과 비교하여 같으면 레지스트리를 입력하고 다르면 2번째 명령으로 내려가 레지스트리 쓰기를 건너뛰게 합니다.

!insertmacro MUI_INSTALLOPTIONS_READ $R0 "ffdshow.ini" "Field 1" "State" ; XviD

StrCmp $R0 "1"  0 +2

WriteRegDWORD HKCU SoftwareGNUffdshow xvid 0x00000001

이정도면 InstallOptions 를 이용해 페이지를 추가하는데 별 문제가 없을 듯 합니다.

더 궁금한 사항이 있으시면 글 남겨주세요.


Function .onInstSuccess

!insertmacro MUI_INSTALLOPTIONS_READ $R0 "test01.ini" "Field 3" "State"

WriteRegStr HKLM "${PRODUCT_PRIMARY_KEY}" "text" "$R0"

FunctionEnd

'Programming > tool' 카테고리의 다른 글

VS2008로 작성한 프로젝트를 VS2005열기  (0) 2010.03.18
Visual Studio 2008 설정  (0) 2010.03.18
NSIS 기초지식  (0) 2010.03.18
같은 페이지에 계속 머무르기  (0) 2010.03.18
라디오버튼 컴포넌트 선택 기능 구현  (0) 2010.03.18

NSIS의 장점 :

파일크기가 작다.

거의대부분의 윈도와 호환된다.

특수한 압축방식으로 최소한의 오버헤드와 따로 자동압축풀림 기능을 사용할 필요가 없습니다.

스크립트 방식으로 인스톨러의 모든 동작을 직접 제어할 수 있습니다.

다국어를 지원합니다.

인터페이스나 대화상자를 편집할 수 있습니다.

필요한 기능은 플러그인으로 추가할 수 있습니다.

웹을 통한 설치, 패치를 지원합니다.

NSIS는 쉽게 하나의 설치마법사에 여러 프로젝트를 통합하거나 라이트, 풀 버전등을 만듭니다.


간단한 NSIS 문법:

NSIS는 기본적으로 간단한 텍스트 파일입니다.

주석 :

";", "#" 이후의 문장은 주석입니다.

/* 와 */ 사이의 문장은 주석입니다.

명령:

명령 (인자)입니다.

예) File "myfile.exe"

플러그인 : 플러그인 이름::명령 (인자)

숫자 :

10진수 - 일반적인 수

16진수 - 앞에0x를 붙입니다.

8진수 - 앞에 0를 붙입니다.

색표현 - HTML 표현방식을 따르지만 앞에 #를 붙이지 않습니다.

문자열 :

'' 와 " 를 모두 사용할 수 있습니다.

"Hi There" -> Hi There

"I''ll be happy" -> I''ll be happy

`And he said to me "I''ll be fucked!"` -> And he said to "I''ll be fucked"

NSIS는 제어문자로 $ 를 사용합니다.

변수 : 변수명 앞에 $를 붙입니다.

- 명령이 긴 경우 명령의 끝에 를 붙인 후 다음 줄에 이어서 적으면 됩니다.



NSIS - Section 이란?

NSIS에 있어서 섹션이란 매우 중요합니다.

섹션은 보통, 다른 설치마법사 제작기에서 다른 이름으로 많이 있습니다.

컴포넌트, 기능(Feature), 구성요소 등으로 말이죠.

이름만 다르고 이들과 하는 일은 같습니다.

즉, 제작자가 어떤 프로그램을 설치하려고 할때 그 프로그램을 구성하는 하나의 구성요소 라고 할 수 있습니다.

파일이 모여서 섹션이 되고 섹션이 모여서 프로그램이 되는거죠.


NSIS - Page 에 대해서...

NSIS로 만들 수 있는 설치마법사 중 대개는 화면에 뭔가 보여주면서 선택을 하게 됩니다. 당연한가요? Page에 관련된 일련의 명령들은 바로 이러한 화면을 제어합니다. 순서, 보여지는 형태, 언어, 동작 등 많은 것들을 제어합니다. 또한, NSIS에서는 NSIS에서 내장해서 자체적으로 제공하는 화면 말고 CustomPage 라고 하여 사용자가 원하는 화면을 만들어서 보여줄 수 있습니다. (InstallOptions 라는 플러그인이 있고, Codec xPack에서 ffdshow 옵션을 설정하는 화면에서 쓰였습니다.)

페이지를 다룰때는 일단 기본적으로 Page, UninstPage(설치제거용) 두가지 명령을 쓰며 Page나 UninstPage의 확장판으로 PageEx라는 명령이 있습니다.

일단 페이지를 만든다고 치면 각 페이지들의 순서를 정해야 할 것입니다. 여기서 NSIS스크립트만의 편리성이 드러납니다. NSIS 스크립트는 위에서 아래로 차례로 순차적으로 실행된다고 언급한 적이 있습니다. 즉, 배열하려는 Page 순서대로 스크립트에서 한줄씩 차례대로 적어주기만 하면 됩니다.

ex) Page license;

Page components

이렇게 적으면 NSIS는 라이센스 화면을 보여주고 다음에 컴포넌트 선택 화면을 보여줍니다.

NSIS에서 자체적으로 제공하는 페이지들.. (license, components, directory, instfiles, uninstConfirm) 입니다. instfiles는 설치/제거 모두에 쓰입니다.

또한 이렇게 순서만 정하면 재미가 없을겁니다. NSIS에서는 이렇게 순서를 정하면서 동시에 간단한 동작이나 형태를 지정해 줄 수 있습니다. 물론, 이렇게 하기위해서는 NSIS의 함수에 대해서 알아야합니다. 또한, Page, UninstPage 의 인자에 대해서도 알아야겠죠.


Page

custom [creator_function] [leave_function] [caption]OR (license|components|directory|instfiles|uninstConfirm) [pre_function] [show_function] [leave_function]

UninstPage

custom [creator_function] [leave_function] [caption]OR (license|components|directory|instfiles|uninstConfirm) [pre_function] [show_function] [leave_function]

입니다.~

질문은 밑에 적어주세요~


Sections

섹션이란 앞에서도 언급했듯이 NSIS란 설치관리자의 핵심을 이루는 것입니다. NSIS는 반드시 하나 이상의 섹션을 포함해야하며 이 섹션들은 아래와 같은 규칙하에 그 밑의 명령들로 관리됩니다.

. 각 섹션은 0개 이상의 명령을 포함합니다. (하나도 없을 수도 있습니다).

. 섹션은 설치마법사에의해 순서대로 실행되며 ComponentText 가 설정되어 있다면 사용자는 각 보이는 섹션을 선택하거나 해제할 수 있습니다.

. 만약 섹션의 이름이 ''Uninstall'' 이거나 섹션 이름앞에 ''un.'' 이라는 접두어를 붙이면 이것은 설치제거때에만 쓰입니다.



- Section Commands

AddSize size_kb

설치관리자에게 현재 섹션이 추가로 ''size_kb'' 키로바이트 만큼 필요하다고 알려줍니다. 이 명령은 오직 섹션에서만 유효합니다.

Section AddSize 500 SectionEnd


Section

[/o] [([!]|[-])section_name] [section index output]

새로운 섹션을 시작합니다. 만약 섹션이름이 빈공간이거나 - 로 시작하면 이 섹션은 숨김 속성을 가져서 사용자에게 보이지 않습니다. 만약 섹션이름이 ''Uninstall'' 이거나 ''un.''으로 시작하면 설치제거 섹션으로 사용됩니다. 섹션 인덱스 출력 변수가 설정되면 이 매개변수는 !defined 매크로에 의해 섹션 인덱스 값이 설정되고 SectionSetText 등의 관리명령에서 사용됩니다. 섹션이름이 !로 시작하면 굵은 글씨로 보이고 /o 를 설정하면 기본적으로 선택해제된 상태가 됩니다.

Section "-hidden section"

SectionEnd


Section # hidden section

SectionEnd


Section "!bold section"

SectionEnd


Section /o "optional"

SectionEnd


Section "install something" SEC_IDX

SectionEnd


SectionEnd

현재 열린 섹션을 닫습니다.


SectionIn

insttype_index [insttype_index] [RO]

이 명령은 현재 섹션이 기본적으로 속하게 될 설치유형을 설정합니다.복합적인 SectionIn 명령은 모두 합해져서 나타납니다. 만약 RO 매개변수를 지정하면 이 섹션은 읽기전용으로 사용자는 상태를 변경할 수 없습니다. 최로 설치 유형은 InstType 명령에 의해 최초 1부터 차례대로 붙어나갑니다.

InstType "full"

InstType "minimal"


Section "a section"

SectionIn 1 2

SectionEnd


Section "another section"

SectionIn 1

SectionEnd


SectionGroup

[/e] Caption [section_group_name index output]

섹셕 그룹이란 섹션들을 포함하는 섹션으로 섹션들을 보기좋게 모아서 나타날 때 사용합니다.섹션 그룹을 설정하며 반드시 SectionGroupEnd 명령으로 닫아야 합니다. 또한 반드시 하나 이상의 섹션을 포함해야 합니다. !로 이름이 시작하면 굵은 글씨체로 나타납니다. /e 를 설정하면 섹션그룹은 펼쳐져서 나타납니다. 만약 섹션이름이 ''un.''으로 시작하면 설치제거 섹션으로 사용됩니다. 섹션 인덱스 출력 변수가 설정되면 이 매개변수는 !defined 매크로에 의해 섹션 인덱스 값이 설정되고 SectionSetText 등의 관리명령에서 사용됩니다.

SectionGroup "some stuff"

Section "a section"

SectionEnd

Section "another section"

SectionEnd

SectionGroupEnd


SectionGroupEnd

섹션그룹을 닫습니다.


Uninstall Section

''Uninstall'' 이라는 특별한 섹션은 설치제거마법사를 생성하기 위해 반드시 만들어야합니다. 이 섹션에서 설치했던 파일, 레지스트리 등을 삭제합니다.

Section "Uninstall"Delete $INSTDIRUninst.exe ; delete self (see explanation below why this works)Delete $INSTDIRmyApp.exeRMDir $INSTDIRDeleteRegKey HKLM SOFTWAREmyApp SectionEnd

제일먼저 Delete 명령으로 설치제거마법사를 삭제합니다. 왜냐하면 설치제거마법사는 윈도 임시 디렉토리로 복사되어 그곳에서 실행되기 때문입니다.설치제거때 $INSTDIR 값은 설치제거마법사가 있는 곳입니다. 반드시 설치마법사가 있는 곳과 같지는 않습니다.

'Programming > tool' 카테고리의 다른 글

Visual Studio 2008 설정  (0) 2010.03.18
NSIS 값 읽어오기  (0) 2010.03.18
같은 페이지에 계속 머무르기  (0) 2010.03.18
라디오버튼 컴포넌트 선택 기능 구현  (0) 2010.03.18
사용자 페이지 추가하기  (0) 2010.03.18

ps. 같은 페이지에 계속 머무르기

이러한페이지체제는기본적으로지정한 함수에 진입해서 MUI_INSTALLOPTIONS_DISPLAY 를 호출하는 순간 화면에 페이지가 나타나고 그 함수안에서 MUI_INSTALLOPTIONS_DISPLAY 다음에 있는 명령들이 끝나면 다음 페이지로 넘어갑니다. 즉 어떤 조건이 되었을때 다시 MUI_INSTALLTOPTIONS_DISPLAY를 호출해주면 됩니다.


예)

${Do}

  MUI_INSTALLOPTIONS_DISPLAY_RETURN

pop $R0

${While} $R0 != "success"

이런식으로 하면 $R0 의 값이 "success" 가 아닌동안 게속 돕니다



원본 위치 <http://jgh0721.tistory.com/entry/InstallOptions-2-를-이용하여-사용자-페이지-추가하기

'Programming > tool' 카테고리의 다른 글

NSIS 값 읽어오기  (0) 2010.03.18
NSIS 기초지식  (0) 2010.03.18
라디오버튼 컴포넌트 선택 기능 구현  (0) 2010.03.18
사용자 페이지 추가하기  (0) 2010.03.18
실행순서  (0) 2010.03.18

NSIS - Section을 선택할 때 라디오버튼 기능을 넣자!

라디오 버튼 기능을 하려면 몇 가지 순서가 있습니다.

1. Sections.nsh 라는 NSIS에서 제공하는 섹션 관리 헤더파일 참조.

2. 섹션에 섹션인덱스 값을 부여한다.

3. .onInit 함수에 섹션의 선택값을 특정 변수에 저장한다. (주로 $1같은 변수..)

4. .selOnChange 에서 매크로를 이용하여 구현한다.



1.일단 기본적으로 Section 관련 내용을 선언해둔 파일을 집어넣어야 합니다.

!include "Sections.nsh"

이걸로 자신의 스크립트안에 섹션 관리 헤더파일을 집어넣습니다.


2.이제 섹션에 섹션 인덱스 값을 부여해야죠

예) Section "fsfds" abc

이렇게 하면 fsfds라는 섹션에 abc라는 섹션인덱스 변수를 설정한 것 입니다.

NSIS는 abc라는 섹션인덱스 변수를 통해 fsfds에 접근하는거죠

abc는 NSIS에서 쓸때는 ${abc}라고 적습니다.


3. 이제 .onInit 함수를 만듭니다.

예)

Function .onInit

StrCpy $1 ${g1o1}

FunctionEnd

만약, Section "fsfds" abc

Section "qwrqweq" qew

이렇게 두 개의 섹션을 라디오 버튼으로 만들려고 하고 이중에 abc를 기본선택으로 두려면 위와 같이 함수를 만들면 됩니다.


4. .onSelChange 함수를 만듭니다.

Function .onSelChange

!insertmacro StartRadioButtons $1

!insertmacro RadioButton ${abc}

!insertmacro RadioButton ${qew}

!insertmacro EndRadioButtons


FunctionEnd

abc와 qew라는 섹션 인덱스가 어디에 쓰였는지만 보면 쉽게 적용가능합니다.

'Programming > tool' 카테고리의 다른 글

NSIS 값 읽어오기  (0) 2010.03.18
NSIS 기초지식  (0) 2010.03.18
같은 페이지에 계속 머무르기  (0) 2010.03.18
사용자 페이지 추가하기  (0) 2010.03.18
실행순서  (0) 2010.03.18

이번엔 InstallOptions 플러그인을 사용해 인스톨러에 사용자 페이지를 추가하는 법을 알아보겠습니다.

준비물 : NSIS, HM NIS Edit

NSIS는 당연히 필요하겠구요, HM NIS Edit는 추가할 사용자 페이지를 쉽게 만들어줍니다. 그렇지 않으면 일일이 ini 파일을 직접 수정해서 좌표값 입력해 가며 만들어야합니다. OTL... 굉장한 노가다 입니다.

제가 만든 NSIS 한글 배포본에 HM Nis Edit 가 포함되어 있으니 이걸 사용하시면 됩니다.


일단 추가할 사용자 페이지를 만들어야하니 HM Nis Edit를 실행합니다.

그리고 파일 메뉴에서 인스톨옵션 파일 만들기를 선택하면 아래와 같은 화면이 나타납니다.


이제 위 화면에서 추가할 페이지의 컨트롤등을 넣어주면 됩니다.

작성하면 이제 ini 파일을 저장하고 스크립트에 페이지를 추가하는 명령을 넣으면 됩니다.


페이지를 추가하려면 세가지 과정이 필요합니다.

일단 인스톨러 초기화 콜백함수인 .onInit 함수 에서 ini파일을 임시디렉토리에 풀어줍니다.

두번째로 page 명령으로 페이지를 추가합니다.

세번째로 사용자페이지에서 사용할 함수를 작성합니다.


여기서는 예제로 저의 코덱팩 스크립트를 발췌했습니다.


1) 아래처럼 .onInit 함수에서 ini 파일을 풀어주는 매크로를 추가합니다.

(첫번째 매개변수) ${Codec}ffdshow.ini 파일은 ini파일이 있는 디렉토리이고 (두번째 매개변수) ffdshow.ini 파일은 임시디렉토리에 풀때 사용할 파일명 입니다.

Function .onInit

!insertmacro MUI_INSTALLOPTIONS_EXTRACT_AS "${Codec}ffdshow.ini" "ffdshow.ini"

FunctionEnd


2) Page 명령으로 추가합니다.

아래와 같이 Page custom 명령으로 추가할 페이지를 삽입합니다. 페이지는 순서대로 나타납니다.

여기서는 ffdshow 디코더 설정화면이 컴포넌트 선택화면 다음에 나타나게 됩니다.

custom - 사용자 페이지를 추가한다는 뜻

ffdshow - 사용자 페이지를 나타내는 등의 역할을 하는 함수 이름. 다음에 작성합니다.

!insertmacro MUI_PAGE_COMPONENTS

Page custom ffdshow ; ffdshow 디코더 설정 화면

!insertmacro MUI_PAGE_INSTFILES


3) 이제 마지막으로 ffdshow 함수를 작성합니다.

아래와 같은 형식으로 함수를 작성합니다. 함수이름은 물론 page 명령에서 지정한 이름으로 만들어야합니다. 아래 스크립트에서는 ffdshow 디코더 설정화면이기때문에 ffdshow를 설치할 때만 나타나야 합니다. 그래서 앞의 세개의 명령이 섹션 정보를 얻고 ffdshow 섹션이 선택되었을때만 페이지를 보여줍니다.


매크로 - MUI_HEADER_TEXT - 사용자 페이지의 제목입니다. 자세한 설명은 한글화한 도움말을 참조하세요.

매크로 - MUI_INSTALLOPTIONS_DISPLAY - 이 매크로를 넣지 않으면 ffdshow 함수가 호출되어도 페이지는 보여지지 않습니다. 즉, 보여줄려고 메모리상에 페이지만 만들어놓고 끝나게 되어버리지요. 이때 보여줄 페이지는 아까 MUI_INSTALLTOPTIONS_EXTRACT_AS 매크로에서 두번째 매개변수로 지정한 이름을 적습니다.

Function ffdshow

SectionGetFlags ${ffdshow} $2

IntCmp $2 ${SF_SELECTED} start end end

start:

!insertmacro MUI_HEADER_TEXT 'ffdshow decoder' 'ffdshow decoder 를 사용할 확장자를 선택하세요'

!insertmacro MUI_INSTALLOPTIONS_DISPLAY "ffdshow.ini"

end:

FunctionEnd


이렇게 하면 페이지 추가가 끝납니다.

이제 컴파일하면 페이지가 나타납니다.

이후 페이지에서 지정한 값을 받는 법등은 도움말에 나타나있습니다.


예) 위에서 사용한 ffdshow 에서 사용자 선택한 값을 읽어오는 스크립트 입니다.

'Programming > tool' 카테고리의 다른 글

NSIS 값 읽어오기  (0) 2010.03.18
NSIS 기초지식  (0) 2010.03.18
같은 페이지에 계속 머무르기  (0) 2010.03.18
라디오버튼 컴포넌트 선택 기능 구현  (0) 2010.03.18
실행순서  (0) 2010.03.18

NSIS 스크립트는 기본적으로 위에서 아래로 순서대로 실행이 된다지만 약간 헷갈리기도 합니다.

컴파일타임명령과 특히 이곳저곳에 섞이는 인스톨러 속성 명령때문이 아닌가 합니다.


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

컴파일 타임 명령 - 컴파일되면서 그때 그때 실행되면서 실행 인스톨러에는 영향을 미치지 않습니다.


예로 (현재 디렉토리 c: est est 이고 압축할 파일은 C: est est.exe일때)


Section -PrePare

!cd ..

File 'test.exe'

SectionEnd


이렇게 하면 컴파일러가 컴파일하면서 디렉토리를 한번 상위 디렉으로 이동해서 test.exe 를 압축합니다.


Section -PrePare

File '.. est.exe'

SectionEnd


과 같은 결과입니다. 사실상 거의 쓸일이 없습니다만...

컴파일 타임 명령은 주로 !define 명령이 사용됩니다. 컴파일 타임 명령은 인스톨 속성 명령과 달리 실행 순서가 되야 실행됩니다.


인스톨러 속성 명령

인스톨러를 초기화합니다. 컴파일러는 인스톨 속성 명령을 스크립트 전체를 분석해서 한번에 모아서 적용시킵니다. 즉, 섹션등에 포함되거나 하지만 않으면 스크립트 위치에 상관이 없습니다.

즉, 스크립트 맨위에 Name 명령있거나 맨 뒤에 Name 명령이 있거나 전혀 상관없습니다.


콜백 함수


Function .onInit

인스톨러가 실행되어 초기화가 막 끝난 시점. 보통 인스톨러가 시작되기 전 조건 검사 등을 여기서 검사합니다. (특정 프로그램을 종료시킨다거나. 등등..)


Function .onGUIInit

인스톨러 화면을 메모리에 불러들이고 보여주기 직전


섹션 또는 사용자 함수

섹션이 순서대로 진행되며 섹션에서 함수들을 호출합니다.


Function .onInstSuccess

설치가 끝나고 윈도가 닫히기 직전에 호출

대개 위와 같은 순서를 거칩니다. 중간 중간에 이벤트에 따라 아래와 같은 콜백 함수가 호출되기도 합니다.

-----------


Function .onInstFailed

인스톨 과정 중 언제든지 실패하면 호출됨


Function .GUIEnd

설치화면이 닫힌 직후에 호출됩니다. 설치 성공여부등에 전혀 상관 없습니다. 즉, 컴포넌트 페이지에서 컴포넌트 선택하다가 그냥 취소 눌러서 종료시켜도 화면이 사라질때 호출됩니다.


Function .onMouseOverSection

컴포넌트 선택화면에서 마우스 커서가 섹션위에 위치할 때 호출됩니다.


Function .onRebootFailed

인스톨 중에 Reboot 명령으로 재부팅을 시도했지만 실패하면 호출됩니다.


Function .onSelChange

컴포넌트 페이지에서 선택한 섹션이 변경되면 호출됩니다.

... 등등의 콜백함수가 있습니다. (^^)

'Programming > tool' 카테고리의 다른 글

NSIS 값 읽어오기  (0) 2010.03.18
NSIS 기초지식  (0) 2010.03.18
같은 페이지에 계속 머무르기  (0) 2010.03.18
라디오버튼 컴포넌트 선택 기능 구현  (0) 2010.03.18
사용자 페이지 추가하기  (0) 2010.03.18

+ Recent posts