Microsoft MVP성태의 닷넷 이야기
개발 환경 구성: 123. Apache 소스를 윈도우 환경에서 빌드하기 [링크 복사], [링크+제목 복사],
조회: 33470
글쓴 사람
정성태 (techsharer at outlook.com)
홈페이지
첨부 파일
 
(연관된 글이 4개 있습니다.)
Apache 소스를 윈도우 환경에서 빌드하기

윈도우 소스 코드의 PHP를 빌드해 봤는데요. ^^

PHP 소스를 윈도우 환경에서 빌드하기
; https://www.sysnet.pe.kr/2/0/1042

기왕 해본 김에 아파치도 빌드해 봐야겠지요. ^^

빌드하기 위한 문서는 다음의 위키문서를 참조했습니다. (여러분도 참조만 하시고, 믿지는 마세요. ^^;)

Build Apache 2.2.x on Windows
; https://wiki.php.net/internals/windows/libs/apache22

PHP 빌드를 시도하느라, 이미 제 컴퓨터에는 Visual C++ 2008, Windows SDK v6.1이 설치된 상태입니다. 아파치 빌드의 경우 다음과 같은 부가적인 도구들이 설치되어 있어야 합니다.

Awk
; http://www.cs.princeton.edu/~bwk/btl.mirror/

Perl
; http://www.activestate.com/store/activeperl/download/

Awk는 소스 코드를 다운로드 하지 않고 "Windows executable" 링크를 클릭해서 awk95.exe를 다운로드 받았는데... 문서에 맞게 awk.exe로 이름 변경을 한 다음 PATH 등록 없이 C:\Program Files\Microsoft Visual Studio 9.0\VC\bin 폴더에 복사해 두었습니다.

ActivePerl의 경우에는 ^^ 예전에 설치해봐서 낯설지는 않군요.

TFS Team Build + Source Server = 소스 코드 디버깅
; https://www.sysnet.pe.kr/2/0/600

소스 서버 구성, 그 외의 이야기
; https://www.sysnet.pe.kr/2/0/603

오늘 (2011-05-24) 기준으로 Perl은 5.12.3 버전을 받아서 설치했습니다.

그다음, 아파치 관련 소스 코드를 차례대로 다운로드 받습니다.

Apache 2.2.9
; http://httpd.apache.org/download.cgi

zlib 1.2.3
; http://www.zlib.net/

OpenSSL 0.9.8h
; http://www.openssl.org/source/

Apache는 2.2.19(released 2011-05-22)를 다운로드 받고,

Win32 Source - httpd-2.2.19-win32-src.zip
; http://mirror.apache-kr.org//httpd/httpd-2.2.19-win32-src.zip

zlib는 1.2.5 버전을 다운로드 받고,

zlib source code, version 1.2.5, tar.gz format
; http://zlib.net/zlib-1.2.5.tar.gz

OpenSSL은 1.0.0d 버전을 다운로드 받았습니다. 하지만 Apache 2.2.19 소스 코드가 1.0.0d에는 없는 헤더파일을 하나 요구하기 때문에 0.9.8h 버전도 함께 받아둡니다.

Feb  8 18:29:10 2011 openssl-1.0.0d.tar.gz (MD5) (SHA1) (PGP sign)  [LATEST]
; http://www.openssl.org/source/openssl-1.0.0d.tar.gz

openssl-0.9.8h.tar.gz
; http://www.openssl.org/source/openssl-0.9.8h.tar.gz

다운로드 준비는 이것으로 끝!




역시 빌드를 위한 폴더 구조를 만들어야 하는데요. 제 경우에는 루트 폴더를 "d:\httpd_build"로 정했습니다. 그 이후, zlib, openssl, apache를 차례대로 빌드해 나갔습니다.

zlib 빌드


zlib-1.2.5.tar.gz 파일을 "d:\httpd_build" 하위에 압축을 풉니다.

how_to_build_apache_win_1.png

"시작" / "Microsoft Visual Studio 2008" / "Visual Studio Tools" / "Visual Studio 2008 Command Prompt"를 실행하고, 다음과 같이 차례대로 명령어를 실행해 줍니다.

d:\Program Files (x86)\Microsoft Visual Studio 9.0\VC>cd /d D:\httpd_build\zlib

D:\httpd_build\zlib>nmake -f win32\Makefile.msc

혹시 위의 빌드 과정에서 오류가 발생하면 다음의 글을 참고하십시오.

zlib 빌드 오류 - inflate.obj : error LNK2001: unresolved external symbol _inflate_fast
; https://www.sysnet.pe.kr/2/0/1044

빌드 결과물은 D:\httpd_build\zlib 폴더에 그대로 쌓입니다.

OpenSSL 빌드


openssl-1.0.0d.tar.gz 파일을 d:\httpd_build\openssl 하위에 압축을 해제합니다.

how_to_build_apache_win_2.png

이제, "시작" / "Microsoft Visual Studio 2008" / "Visual Studio Tools" / "Visual Studio 2008 Command Prompt" 명령행 윈도우를 띄우고 d:\httpd_build\OpenSSL 폴더로 이동한 후 perl을 이용해 다음과 같은 명령어를 차례로 수행해 빌드 환경을 구성해 줍니다.

perl Configure VC-WIN32 no-asm
ms\do_ms

아래는 실제로 제 환경에서 실행했을 때의 출력 결과입니다.

d:\httpd_build\openssl>perl Configure VC-WIN32 no-asm
Configuring for VC-WIN32
    no-asm          [option]   OPENSSL_NO_ASM
    no-gmp          [default]  OPENSSL_NO_GMP (skip dir)
    no-jpake        [experimental] OPENSSL_NO_JPAKE (skip dir)
    no-krb5         [krb5-flavor not specified] OPENSSL_NO_KRB5
    no-md2          [default]  OPENSSL_NO_MD2 (skip dir)
    no-rc5          [default]  OPENSSL_NO_RC5 (skip dir)
    no-rfc3779      [default]  OPENSSL_NO_RFC3779 (skip dir)
    no-shared       [default]
    no-store        [experimental] OPENSSL_NO_STORE (skip dir)
    no-zlib         [default]
    no-zlib-dynamic [default]
IsMK1MF=1
CC            =cl
CFLAG         =-DOPENSSL_THREADS  -DDSO_WIN32 -W3 -WX -Gs0 -GF -Gy -nologo -DOPENSSL_SYSNAME_WIN32 -DWIN32_LEAN_AND_MEAN
 -DL_ENDIAN -D_CRT_SECURE_NO_DEPRECATE
EX_LIBS       =
CPUID_OBJ     =mem_clr.o
BN_ASM        =bn_asm.o
DES_ENC       =des_enc.o fcrypt_b.o
AES_ENC       =aes_core.o aes_cbc.o
BF_ENC        =bf_enc.o
CAST_ENC      =c_enc.o
RC4_ENC       =rc4_enc.o rc4_skey.o
RC5_ENC       =rc5_enc.o
MD5_OBJ_ASM   =
SHA1_OBJ_ASM  =
RMD160_OBJ_ASM=
CMLL_ENC=     =camellia.o cmll_misc.o cmll_cbc.o
PROCESSOR     =
RANLIB        =true
ARFLAGS       =
PERL          =perl
THIRTY_TWO_BIT mode
BN_LLONG mode
RC4_INDEX mode
RC4_CHUNK is undefined

Configured for VC-WIN32.

d:\httpd_build\openssl>ms\do_ms

d:\httpd_build\openssl>perl util\mkfiles.pl  1>MINFO

d:\httpd_build\openssl>perl util\mk1mf.pl no-asm VC-WIN32  1>ms\nt.mak

d:\httpd_build\openssl>perl util\mk1mf.pl dll no-asm VC-WIN32  1>ms\ntdll.mak

d:\httpd_build\openssl>if x == x goto skipce

d:\httpd_build\openssl>perl util\mkdef.pl 32 libeay  1>ms\libeay32.def

d:\httpd_build\openssl>perl util\mkdef.pl 32 ssleay  1>ms\ssleay32.def

d:\httpd_build\openssl>

이어서 nmake를 다음과 같이 수행해 주면 정상적으로 빌드가 됩니다.

nmake -f ms\ntdll.mak

(i7 Hyper-V 가상 머신에서 약 4분 정도 빌드 시간이 걸렸습니다.)

빌드가 복잡한 만큼 정상적으로 빌드되었는지 확인하기 위해 'nmake -f ms\ntdll.mak test' 명령어로 확인해 보았고 마지막 라인에서 'passed all tests'라는 문구를 확인했습니다.

확인해 보니까, 모든 빌드된 결과물들이 'D:\httpd_build\openssl\out32dll' 폴더에 존재했습니다.

Apache 빌드


아파치 소스 코드를 이제 'd:\httpd_build\httpd' 폴더에 압축 해제합니다.

how_to_build_apache_win_3.png

빌드 결과물을 포함한 zlib 폴더를(D:\httpd_build\zlib) 'd:\httpd_build\httpd\srclib\zlib' 폴더에 복사하고, openssl 내용을(D:\httpd_build\openssl) 'd:\httpd_build\httpd\srclib\openssl' 폴더에 복사합니다.

how_to_build_apache_win_4.png

그다음, "openssl-0.9.8h.tar.gz" 파일을 압축해제하면 "/include/openssl/store.h" 파일이 나오는데 이것을 D:\httpd_build\httpd\srclib\openssl\inc32\openssl 폴더에 복사해줍니다.

최종적으로 다음과 같이 명령을 내려주면 "d:\httpd_build\Apache22" 폴더에 아파치 소스 코드가 빌드되어 바이너리가 생성됩니다.

d:\httpd_build\httpd>nmake /f Makefile.win INSTDIR="d:\httpd_build\Apache22" installr

Microsoft (R) Program Maintenance Utility Version 9.00.30729.01
Copyright (C) Microsoft Corporation.  All rights reserved.


INSTDIR     = d:\httpd_build\Apache22
DOMAINNAME  = example.com
SERVERNAME  = www.example.com
SERVERADMIN = admin@example.com
PORT        = 80
SSLPORT     = 443

To change these options use 'nmake -f Makefile.win [option=value]'
Example: nmake -f Makefile.win PORT=8080


        echo Building Win32 Release targets (R suffixes)
Building Win32 Release targets (R suffixes)
        cd srclib\apr
        "d:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\BIN\nmake.exe" -nologo -f apr.mak
Win32 Release" RECURSE=0
        if not exist ".\LibR/" mkdir ".\LibR"
        tempfile.bat

...[생략]...

빌드가 완료되고 나면 "d:\httpd_build\Apache22" 폴더에 최종 결과물들이 쌓이고, 아파치 웹 서버를 구동시킬 수 있습니다. 우선, "d:\httpd_build\Apache22\conf\httpd.conf" 파일에서 "Listen 80"을 원하는 포트 번호(제 경우에는 6500)로 변경하고, "d:\httpd_build\Apache22\bin\httpd.exe"를 실행시키면 http://localhost:6500과 같이 확인할 수 있습니다.

무소식이 희소식이군요. Tomcat은 실행 후 제법 정보를 출력해 주던데, 아파치 httpd.exe는 실행하면 다음과 같이 아무것도 출력하지 않아서, 정상적으로 동작하는지 확인하기 위해 웹 브라우저를 사용할 수밖에 없었습니다.

how_to_build_apache_win_5.png

나아가서, 아래의 글에서 설명했던 데로 PHP를 올려 보니... 역시 정상적으로 동작했습니다. ^^

.NET 개발자가 처음 설치해 본 Apache + PHP
; https://www.sysnet.pe.kr/2/0/1040

일단 다 해보고 나서 정리차원에서 글을 쓰느라 저렇게 간단하게 나오긴 했지만, 도중에 시행착오를 생각하면 간단한 작업이었다고 볼 수는 없습니다.

그래도 제가 직접 빌드한 결과물로부터 'http://localhost:6500'이 동작했을 때의 짜릿한 맛은 있군요. ^^



[이 글에 대해서 여러분들과 의견을 공유하고 싶습니다. 틀리거나 미흡한 부분 또는 의문 사항이 있으시면 언제든 댓글 남겨주십시오.]

[연관 글]






[최초 등록일: ]
[최종 수정일: 7/7/2021]

Creative Commons License
이 저작물은 크리에이티브 커먼즈 코리아 저작자표시-비영리-변경금지 2.0 대한민국 라이센스에 따라 이용하실 수 있습니다.
by SeongTae Jeong, mailto:techsharer at outlook.com

비밀번호

댓글 작성자
 




... 91  92  93  94  95  96  97  98  99  100  101  102  103  [104]  105  ...
NoWriterDateCnt.TitleFile(s)
11365정성태11/25/201722095오류 유형: 429. 이벤트 로그 - User Policy could not be updated successfully
11364정성태11/24/201724781사물인터넷: 11. Raspberry Pi Zero(OTG)를 다른 컴퓨터에 연결해 가상 마우스로 쓰는 방법 (절대 좌표) [2]
11363정성태11/23/201724719사물인터넷: 10. Raspberry Pi Zero(OTG)를 다른 컴퓨터에 연결해 가상 마우스 + 키보드로 쓰는 방법 (두 번째 이야기)
11362정성태11/22/201720414오류 유형: 428. 윈도우 업데이트 KB4048953 - 0x800705b4 [2]
11361정성태11/22/201723383오류 유형: 427. 이벤트 로그 - Filter Manager failed to attach to volume '\Device\HarddiskVolume??' 0xC03A001C
11360정성태11/22/201723847오류 유형: 426. 이벤트 로그 - The kernel power manager has initiated a shutdown transition.
11359정성태11/16/201723114오류 유형: 425. 윈도우 10 Version 1709 (OS Build 16299.64) 업그레이드 시 발생한 문제 2가지
11358정성태11/15/201728117사물인터넷: 9. Visual Studio 2017에서 Raspberry Pi C++ 응용 프로그램 제작 [1]
11357정성태11/15/201728581개발 환경 구성: 336. 윈도우 10 Bash 쉘에서 C++ 컴파일하는 방법
11356정성태11/15/201730132사물인터넷: 8. Raspberry Pi Zero(OTG)를 다른 컴퓨터에 연결해 가상 마우스 + 키보드로 쓰는 방법 [4]
11355정성태11/15/201725322사물인터넷: 7. Raspberry Pi Zero(OTG)를 다른 컴퓨터에 연결해 가상 마우스로 쓰는 방법 [2]파일 다운로드2
11354정성태11/14/201730154사물인터넷: 6. Raspberry Pi Zero(OTG)를 다른 컴퓨터에 연결해 가상 키보드로 쓰는 방법 [8]
11353정성태11/14/201727141사물인터넷: 5. Raspberry Pi Zero(OTG)를 다른 컴퓨터에 연결해 가상 이더넷 카드로 쓰는 방법 [1]
11352정성태11/14/201723478사물인터넷: 4. Samba를 이용해 윈도우와 Raspberry Pi간의 파일 교환 [1]
11351정성태11/7/201726368.NET Framework: 698. C# 컴파일러 대신 직접 구현하는 비동기(async/await) 코드 [6]파일 다운로드1
11350정성태11/1/201722434디버깅 기술: 108. windbg 분석 사례 - Redis 서버로의 호출을 기다리면서 hang 현상 발생
11349정성태10/31/201723100디버깅 기술: 107. windbg - x64 SOS 확장의 !clrstack 명령어가 출력하는 Child SP 값의 의미 [1]파일 다운로드1
11348정성태10/31/201719290디버깅 기술: 106. windbg - x64 역어셈블 코드에서 닷넷 메서드 호출의 인자를 확인하는 방법
11347정성태10/28/201723071오류 유형: 424. Visual Studio - "클래스 다이어그램 보기" 시 "작업을 완료할 수 없습니다. 해당 인터페이스를 지원하지 않습니다." 오류 발생
11346정성태10/25/201719719오류 유형: 423. Windows Server 2003 - The client-side extension could not remove user policy settings for 'Default Domain Policy {...}' (0x8007000d)
11338정성태10/25/201717297.NET Framework: 697. windbg - SOS DumpMT의 "BaseSize", "ComponentSize" 값에 대한 의미파일 다운로드1
11337정성태10/24/201719847.NET Framework: 696. windbg - SOS DumpClass/DumpMT의 "Vtable Slots", "Total Method Slots", "Slots in VTable" 값에 대한 의미파일 다운로드1
11336정성태10/20/201721133.NET Framework: 695. windbg - .NET string의 x86/x64 메모리 할당 구조
11335정성태10/18/201719918.NET Framework: 694. 닷넷 - <Module> 클래스의 용도
11334정성태10/18/201720646디버깅 기술: 105. windbg - k 명령어와 !clrstack을 조합한 호출 스택을 얻는 방법
11333정성태10/17/201720000오류 유형: 422. 윈도우 업데이트 - Code 9C48 Windows update encountered an unknown error.
... 91  92  93  94  95  96  97  98  99  100  101  102  103  [104]  105  ...