레이블이 build인 게시물을 표시합니다. 모든 게시물 표시
레이블이 build인 게시물을 표시합니다. 모든 게시물 표시

2011년 3월 24일 목요일

Windows 환경에서 OpenSSL 빌드하기

OpenSSLSSL을 지원하는 많은 프로그램에서 사용하는 라이브러리 모듈이기 때문에 버그나 보안 관련 이슈가 발견되어 그것을 수정한 새로운 소스가 릴리즈될 경우 영향을 받을 수 있는 프로그램들은 최대한 빨리 업그레이드 해줄 필요가 있습니다. 다행스러운 점은 OpenSSL을 사용하는 대부분의 프로그램들이 (Windows 환경 기준으로) 두 개의 DLL 파일(ssleay32.dll & libeay32.dll)만 교체해주면 OpenSSL 모듈 업그레이드가 가능하다는 것입니다. -- DLL을 사용하지 않고 정적(static)으로 링크해버린 경우는 어쩔 수 없고, DLL을 사용했다고 하더라도 DLL 파일만 교체했을 때 드물게 오류를 일으키는 경우도 있습니다.

그러나 주의할 점이 하나 있는데, OpenSSL 1.0.x 버전과 0.9.x 버전의 라이브러리 인터페이스가 서로 다르기 때문에 DLL 파일 교체 시에 각각 인터페이스가 호환되는 버전으로 대체해야 한다는 것입니다. 예를 들어, 기존에 0.9.8q 버전의 DLL 파일이 사용되고 있었다면 0.9.8r 또는 그 이후 버전의 DLL 파일로 대체해야지 1.0.0d 버전이나 그 이후 버전의 DLL 파일로 대체하면 안 된다는 뜻이지요. DLL 파일의 속성 보기를 통해 버전 정보를 확인할 수 있으므로 적절한 대체 버전을 결정하는 것은 그리 어렵지 않습니다.

[libeay32.dll 속성 대화창]
[ssleay32.dll 속성 대화창]

빌드 준비

Windows 환경에서 OpenSSL 소스를 직접 빌드하는 것은 아주 간단합니다. 빌드에 사용되는 도구들도 모두 무료로 구할 수 있는 것들이기 때문에 비용에 대해 고민할 필요도 없습니다. (Visual C++ 64bit Compiler는 상용 제품에서만 제공됩니다.) 빌드에 필요한 도구들을 나열해보면 다음과 같습니다.

  • Perl: ActivePerl 또는 Strawberry Perl(@euler_kr 님 지적해주심)
  • C Compiler: Visual C++ 또는 Borland C 또는 GCC(Cygwin 또는 MinGW)
  • Assembler: nasm 또는 MASM

소스와 빌드 도구 다운로드 및 설치

소스는 OpenSSL 공식 홈페이지에서 다운로드 가능합니다. 1.0.x 버전과 0.9.x 버전이 함께 업데이트가 되고 있으므로 둘 다 받거나 둘 중 필요한 것으로 골라서 받습니다.

LINK: OpenSSL Source Downloads

이 글에서는 주로 많이 사용하는 Visual C++과 nasm을 가지고 Win32 환경으로 빌드하는 방법을 설명하겠습니다. 다른 도구 구성으로 빌드하고 싶은 분들은 OpenSSL 소스에 포함된 INSTALL.xxx 파일을 참고하시기 바랍니다. (Win32 빌드에 대해서는 INSTALL.W32 파일을, Win64 빌드에 대해서는 INSTALL.W64 파일을 참고)

가장 먼저 아래의 도구들을 각각 다운로드하여 설치합니다. OpenSSL 빌드에 사용되는 도구들은 특별히 버전에 대한 제약이 없으므로 최신 안정 버전을 받으면 됩니다. 단, Microsoft Visual C++은 빌드에 사용한 버전에 따라 결과물로 만들어진 DLL 파일이 해당 MSVC Runtime 버전에 대한 의존성을 가지게 되므로 외부에 전달할 때는 반드시 필요한 MSVC Runtime 버전을 알려주거나 재배포 가능한 패키지를 함께 제공할 필요가 있습니다.

LINK: ActivePerl 또는 Strawberry Perl 둘 중 하나

LINK: Microsoft Visual C++ Express Edition

LINK: Netwide Assembler(nasm)

빌드

  1. Windows 시작 메뉴에서 Visual Studio 명령 프롬프트를 실행합니다.

  2. nasmw.exe 파일의 위치를 PATH 환경 변수에 추가하거나 이미 PATH에 포함된 경로로 복사해줍니다.

    주의: 최근 nasm 배포본에서는 실행 파일명이 nasm.exe가 되었으므로 OpenSSL 빌드를 위해서는 nasmw.exe로 이름을 변경줄 필요가 있습니다.

  3. OpenSSL 소스가 풀려 있는 폴더로 경로를 변경합니다.

  4. Perl 스크립트를 통해 빌드 환경을 설정해줍니다.

    perl Configure VC-WIN32 --prefix=설치될_경로

    주의: 위와 같이 OpenSSL 기본 옵션으로 빌드하게 되면 미국과 몇몇 나라에서 특허로 보호받고 있는 암호화 알고리즘을 포함하게 되어 이것을 개발 중인 제품에 적용하거나 재배포할 때 법적인 문제를 야기할 수 있습니다. 그러므로, 특허로 보호되는 알고리즘을 제외하고 빌드하고 싶은 경우 no-idea no-mdc2 no-rc5 옵션을 추가해주어야 합니다. (greenfish77 님 지적해주심) 더 자세한 내용은 소스 내 README 파일의 PATENTS 항목과 FAQ 파일의 LEGAL 항목에서 확인할 수 있습니다.

    perl Configure VC-WIN32 no-idea no-mdc2 no-rc5 --prefix=설치될_경로
    또한 여기에 덧붙여, OpenSSL을 사용(또는 포함)한 어떠한 형태의 배포도 OpenSSL에 적용되고 있는 두 가지의 라이센스에 대해 표기해야 합니다. 자세한 것은 소스에 포함된 LICENSE 파일 내용을 참고하시기 바랍니다.

  5. Assembler로 nasm을 사용할 것임을 지정해줍니다.

    ms\do_nasm
  6. nmake로 빌드합니다. (한글 Windows 환경이라면 빌드 도중 에러가 발생할 수 있습니다. 이 에러에 대해서는 다음 단락을 참고하세요.)

    nmake -f ms\ntdll.mak
  7. 빌드가 잘 되었는지 테스트합니다.

    nmake -f ms\ntdll.mak test
  8. 최종적으로 만들어진 바이너리를 설치될_경로로 설치합니다.

    nmake -f ms\ntdll.mak install

빌드 중 compile error 해결하기

한글 Windows 환경에서 OpenSSL 소스를 빌드하게 되면 도중에 컴파일 에러를 만나게 됩니다. 소스 파일 중 딱 두 개가 컴파일 오류를 일으키는데, 그 원인은 소스 파일이 iso-8859-1 인코딩으로 저장되어 있고 그 내용 중에 확장 ASCII 문자가 포함되어 있기 때문입니다. Visual C++ Compiler(.NET 이후 버전부터)는 소스를 읽어 들일 때 UTF-8으로 인코딩된 파일인지 확인하고 그렇지 않다면 시스템 기본 인코딩(한글 Windows에서는 CP949)으로 간주합니다. 이 때 그 확장 ASCII 문자가 적절하지 못한 문자로 처리되어 컴파일 오류를 발생시키게 되는 것입니다.

컴파일 에러가 발생하는 소스 파일은 다음과 같습니다.

crypto\x509v3\v3_pci.c
crypto\x509v3\v3_pcia.c

해결 방법은 간단합니다. 문제가 되는 확장 ASCII 문자(ö)는 소스 파일 첫 부분(line 5)에 있는 주석 중 저작권 표기 부분에 포함되어 있습니다.

/* Copyright (c) 2004 Kungliga Tekniska Högskolan

그러므로, 적절한 텍스트 편집기로 열어서 그 이름 부분을 지우고 저장한 다음 빌드하면 됩니다. (주의: OpenSSL 라이센스 정책에 따라, 배포하는 소스에서 위 저작권 관련 표기를 삭제하는 것은 허용되지 않습니다. 이것은 단지 빌드 시에 오류를 피하기 위한 방법일 뿐입니다.) 혹은 그냥 소스를 UTF-8 인코딩으로 변환해서 저장해주면 됩니다.

2008년 8월 6일 수요일

Source Insight에서 Symbian Build Log Parsing으로 Error Link 만들기

Source Insight에서 Symbian Build Log Parsing으로 Error Link 만들기

Source Insight에서 Symbian Build Log Parsing으로 Error Link 만들기

Parse Source Links 기능이란?

  • Source Insight에서 build 등의 결과물로 생성된 log를 분석하여 error나 warning 같은 항목에 대해 link를 만들어주는 기능입니다.
  • 만들어진 link를 사용하여 error 또는 warning이 발생한 source 위치로 즉시 이동이 가능합니다.

Build script for Symbian

  • 먼저, Source Insight에서 간편하게 build할 수 있도록 도와주는 batch script가 필요합니다.
  • 첨부된 mybuild.bat.rar 파일을 download한 후 압축을 풀고 PATH 환경 변수에 지정되어 있는 적절한 위치에 복사해둡니다.
    혹은 파일이 복사된 위치를 PATH 환경 변수에 추가해줍니다.
  • 이 batch script는 다음과 같은 방식으로 동작합니다.
    1. 현재 편집 중인 소스와 동일한 경로에서 bld.inf 파일을 찾아 그 파일이 존재하면 build를 수행합니다.
    2. 없다면, 현재 편집 중인 소스와 동일한 경로에서 group\bld.inf 파일을 찾아 그 파일이 존재하면 build를 수행합니다.
    3. 역시 없다면, 현재 편집 중인 소스와 동일한 경로에서 bld\bld.inf 파일을 찾아 그 파일이 존재하면 build를 수행합니다.
    4. 그래도 없다면, 한 단계 상위 폴더로 이동한 후 1 번부터 반복합니다.
      ※ 무한 반복을 막기 위해 최대 3 단계까지만 상위 폴더를 살피도록 되어 있습니다.

Parsing Build Logs

이제 mybuild.bat를 사용해 Custom Command에 설정을 추가하면 됩니다.
  1. Options 메뉴 -> Custom Commands... 항목을 실행합니다.


  2. Command 콤보박스에서 Build Project 항목을 선택합니다.


  3. 그림에서 보이는 것과 같이 설정 내용을 입력합니다.
    1. mybuild.bat script를 사용하여 'build armv5' 옵션으로 build 수행하는 설정입니다.
    2. script 실행 경로를 현재 편집 중인 파일의 경로로 지정합니다.
    3. 편집 중이던 파일을 저장하고 build 실행하면서 출력 결과를 capture하는 설정입니다.
    4. capture한 출력 결과를 parsing 하도록 설정합니다.
    5. parsing pattern이 File, Line 순임을 지정합니다.
    6. parsing pattern을 설정합니다.
      • Error와 Warning 포함: ^"\(.+\)", line \([^:]+\): [EW].*
      • Error만 포함: ^"\(.+\)", line \([^:]+\): E.*
    7. 반드시 Close 버튼을 눌러 설정한 내용을 저장합니다.


  4. 앞서 설정했던 Build Project와 마찬가지로 Clean Build 항목도 설정합니다.


  5. 마지막으로 Compile File 항목도 설정합니다.


Toolbar 설정 및 Key 할당

  • Toolbar 설정 - Source Insight에서는 build와 관련된 toolbar를 별도로 제공하고 있습니다.
    1. View 메뉴 -> Toolbars -> Build 항목을 실행합니다.


    2. 그러면 toolbar 영역에 다음과 같은 toolbar가 추가됩니다.


  • Key 할당
    1. Options 메뉴 -> Key Assignments... 항목을 실행합니다.


    2. 그림과 같이 Build 항목들에 대해 적절한 key를 할당해줍니다.
      1. build라고 입력하면 아래 콤보박스에 build와 관련된 항목들만 추려서 보여줍니다.
      2. 새로운 key를 할당할 항목을 선택하고 Assign New Key... 버튼을 누른 후 할당할 키조합을 눌려줍니다.
      3. OK 버튼을 눌러 설정한 내용을 저장합니다.


실행 관련 Screenshot

  • build를 실행한 모습입니다.


  • build 중 error가 발생했을 때 해당 source 위치에 대한 link를 생성해준 모습입니다.