ServBay를 이용한 소프트웨어 재컴파일 안내
ServBay는 macOS 사용자를 위해 강력하고 완성도 높은 로컬 웹 개발 환경을 제공합니다. 다양한 패키지와 도구가 포함되어 있지만, 사용자는 특정한 개발 요구를 충족하기 위해 직접 재컴파일을 해야 할 때가 있습니다. 예를 들어:
- 특정 소프트웨어 패키지에 추가 컴파일 옵션을 활성화해야 할 때
- ServBay 기본 패키지에 포함되어 있지 않은 새 모듈 또는 확장(예: 최신 PHP 확장, PostgreSQL 모듈 등)을 추가할 때
- ServBay 기본 제공 버전과 다른 라이브러리를 사용해서 컴파일할 때
- ServBay가 제공하는 패키지를 프로젝트 맞춤형으로 수정해야 할 때
ServBay는 이러한 재컴파일 작업을 쉽게 수행할 수 있도록 필요한 컴파일 환경과 툴체인을 제공하고 있습니다.
원활한 재컴파일을 위해서는 Unix/Linux 환경에서의 소프트웨어 컴파일 프로세스(configure
, make
, make install
등)에 대한 기본적인 이해가 필요합니다.
사전 준비 사항
재컴파일을 시작하기 전에 아래 사항을 반드시 충족해야 합니다.
ServBay Development Library 설치: 재컴파일의 핵심 의존 패키지로, ServBay 환경에서 컴파일에 필요한 모든 라이브러리(
.so
,.a
), 헤더 파일(.h
) 등 개발 리소스를 포함하고 있습니다. ServBay 앱 내 패키지 패널에서 해당 라이브러리를 찾아 설치할 수 있습니다.Xcode Command Line Tools 설치: macOS에서 기본적으로 제공하는 개발 도구 모음으로, 컴파일러(Clang), 링커 등 핵심 툴을 포함합니다. 터미널을 열고 아래 명령을 실행하세요.
bashxcode-select --install
1이미 설치된 경우에는 안내 메시지가 나타납니다.
추가 컴파일 도구 설치: 대다수 오픈소스 소프트웨어의 컴파일을 위해
autoconf
,automake
,libtool
등의 도구도 준비해야 합니다. Homebrew와 같은 패키지 관리자를 이용하여 설치할 수 있습니다.bashbrew install autoconf automake libtool cmake
1Homebrew가 설치되지 않았다면 공식 홈페이지의 안내에 따라 먼저 설치하세요.
컴파일 환경 설정
ServBay Development Library와 필요한 도구를 모두 설치한 후에는, 터미널에서 컴파일 환경 변수 설정을 해야 합니다. 즉, 컴파일러와 빌드 시스템이 ServBay의 라이브러리, 헤더, 바이너리 위치를 정확히 인식하도록 PATH
, CFLAGS
, LDFLAGS
, CPPFLAGS
등 여러 환경 변수를 지정해야 합니다.
ServBay의 실행 환경은 Mac의 CPU 아키텍처(인텔 칩(x86_64), Apple Silicon 칩(Arm64)에 따라 다릅니다. 현재 사용 중인 ServBay Runtime 아키텍처에 맞는 환경 초기화 명령을 선택해야 합니다.
ServBay Runtime CPU 아키텍처 확인
ServBay의 bin
디렉터리에 있는 임의의 실행 파일 아키텍처를 확인할 수 있습니다. 예를 들어, bison
파일을 확인하려면:
bash
# 터미널에서 아래 명령으로 아키텍처 확인
$ file /Applications/ServBay/bin/bison
/Applications/ServBay/bin/bison: Mach-O 64-bit executable arm64
1
2
3
2
3
bash
# 터미널에서 아래 명령으로 아키텍처 확인
$ file /Applications/ServBay/bin/bison
/Applications/ServBay/bin/bison: Mach-O 64-bit executable x86_64
1
2
3
2
3
실행 결과에 따라 해당하는 환경 초기화 스크립트를 사용합니다.
컴파일 환경 변수 초기화
새 터미널 창을 열고, 사용자의 CPU 아키텍처에 맞는 아래 스크립트를 복사해 실행합니다. 이 스크립트들은 ServBay 컴파일 환경에 맞는 다양한 경로와 플래그를 자동으로 설정합니다.
bash
# CPU 코어 수 지정(병렬 컴파일용)
CPU_NUMBER=$(sysctl -n hw.ncpu)
# ServBay 기본 설치 경로
SERVBAY_BASE_FULL_PATH="/Applications/ServBay"
# 패키지 디렉터리명
SERVBAY_PACKAGE_DIR_NAME="package"
# 패키지 전체 경로
SERVBAY_PACKAGE_FULL_PATH="${SERVBAY_BASE_FULL_PATH}/${SERVBAY_PACKAGE_DIR_NAME}"
# ServBay 바이너리 경로
SERVBAY_BIN_PATH="${SERVBAY_PACKAGE_FULL_PATH}/bin"
SERVBAY_SBIN_PATH="${SERVBAY_PACKAGE_FULL_PATH}/sbin"
# ServBay 설정 파일 경로
SERVBAY_ETC_PATH="${SERVBAY_PACKAGE_FULL_PATH}/etc"
# ServBay 가변 데이터 경로
SERVBAY_VAR_PATH="${SERVBAY_PACKAGE_FULL_PATH}/var"
# ServBay Development Library 경로
SERVBAY_COMMON_PATH="${SERVBAY_PACKAGE_FULL_PATH}/common"
# ServBay Development Library 헤더 경로
SERVBAY_COMMON_INCLUDE_PATH="${SERVBAY_COMMON_PATH}/include"
# ServBay Development Library 라이브러리 경로
SERVBAY_COMMON_LIB_PATH="${SERVBAY_COMMON_PATH}/lib"
SERVBAY_COMMON_LIBEXEC_PATH="${SERVBAY_COMMON_PATH}/libexec"
SERVBAY_COMMON_SHARE_PATH="${SERVBAY_COMMON_PATH}/share"
SERVBAY_COMMON_MAN_PATH="${SERVBAY_COMMON_PATH}/man"
SERVBAY_COMMON_DOC_PATH="${SERVBAY_COMMON_PATH}/doc"
# 현재 빌드 디렉터리
SERVBAY_BUILD_DIR=$(pwd)
SERVBAY_BUILD_SRC_DIR=${SERVBAY_BUILD_DIR}/src
# OpenSSL 버전 정보
OPENSSL_SELECTED_VERSION="3.2"
OPENSSL_VERSION="3.2.1"
# 최소 대상 macOS 버전
BUILD_OS_MIN_VERSION="12.00" # macOS Monterey 이상
# 빌드 CPU 아키텍처 플래그
BUILD_CPU_ARCH="-arch arm64"
BUILD_CPU_ARCH_CMAKE="arm64"
BUILD_MACOS_TARGET="" # Arm64는 일반적으로 -target 불필요
# C 컴파일러 플래그 지정: 최적화, 최소 macOS 버전, 아키텍처
export CFLAGS="-Qunused-arguments -O3 -mmacosx-version-min=${BUILD_OS_MIN_VERSION} ${BUILD_CPU_ARCH} ${BUILD_MACOS_TARGET}"
# 링커 플래그 설정: rpath, 라이브러리 경로, 최소 macOS 버전, 아키텍처
export LDFLAGS="-Wl,-rpath -Wl,${SERVBAY_COMMON_LIB_PATH} -L${SERVBAY_COMMON_LIB_PATH} -L${SERVBAY_PACKAGE_FULL_PATH} -mmacosx-version-min=${BUILD_OS_MIN_VERSION} ${BUILD_CPU_ARCH} ${BUILD_MACOS_TARGET}"
# C 전처리기 및 CXX 컴파일러 플래그: 헤더 검색 경로
export CPPFLAGS="-I${SERVBAY_COMMON_INCLUDE_PATH}"
# C++ 컴파일러 플래그: CFLAGS와 동일
export CXXFLAGS="-Qunused-arguments -O3 -mmacosx-version-min=${BUILD_OS_MIN_VERSION} ${BUILD_CPU_ARCH} ${BUILD_MACOS_TARGET}"
# 실행 파일 경로 우선순위: ServBay의 bin/sbin 우선
export PATH="${SERVBAY_BIN_PATH}:${SERVBAY_SBIN_PATH}:/usr/bin:/bin:/usr/sbin:/sbin:/Library/Apple/usr/bin"
# pkg-config 검색 경로: 라이브러리 정보 조회
export PKG_CONFIG_PATH="${SERVBAY_COMMON_LIB_PATH}/pkgconfig"
# pkg-config 도구 경로
export PKG_CONFIG="${SERVBAY_BIN_PATH}/pkg-config"
# pkg-config 라이브러리 디렉터리
export PKG_CONFIG_LIBDIR="${SERVBAY_COMMON_LIB_PATH}/pkgconfig"
# 시스템/홈브루 bin/sbin 경로 PATH 추가(우선순위 낮음)
export PATH=$PATH:"/usr/local/bin:/usr/local/sbin"
export PATH=$PATH:"/opt/homebrew/bin/" # Homebrew 기본 설치 경로
# OpenSSL 라이브러리 및 헤더 경로 LDFLAGS, CPPFLAGS에 추가
export LDFLAGS="-L${SERVBAY_COMMON_PATH}/openssl/${OPENSSL_SELECTED_VERSION}/lib ${LDFLAGS}"
export CPPFLAGS="-I${SERVBAY_COMMON_PATH}/openssl/${OPENSSL_SELECTED_VERSION}/include ${CPPFLAGS}"
# OpenSSL의 pkgconfig 경로 추가
export PKG_CONFIG_PATH="${PKG_CONFIG_PATH}:${SERVBAY_COMMON_PATH}/openssl/${OPENSSL_SELECTED_VERSION}/lib/pkgconfig"
export PKG_CONFIG_LIBDIR="${PKG_CONFIG_LIBDIR}:${SERVBAY_COMMON_PATH}/openssl/${OPENSSL_SELECTED_VERSION}/lib/pkgconfig"
# 환경 변수 설정 완료 후, 해당 터미널에서 컴파일 작업 가능
echo "ServBay Arm64 컴파일 환경이 설정되었습니다."
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
bash
# CPU 코어 수 지정(병렬 컴파일용)
CPU_NUMBER=$(sysctl -n hw.ncpu)
# ServBay 기본 설치 경로
SERVBAY_BASE_FULL_PATH="/Applications/ServBay"
# 패키지 디렉터리명
SERVBAY_PACKAGE_DIR_NAME="package"
# 패키지 전체 경로
SERVBAY_PACKAGE_FULL_PATH="${SERVBAY_BASE_FULL_PATH}/${SERVBAY_PACKAGE_DIR_NAME}"
# ServBay 바이너리 경로
SERVBAY_BIN_PATH="${SERVBAY_PACKAGE_FULL_PATH}/bin"
SERVBAY_SBIN_PATH="${SERVBAY_PACKAGE_FULL_PATH}/sbin"
# ServBay 설정 파일 경로
SERVBAY_ETC_PATH="${SERVBAY_PACKAGE_FULL_PATH}/etc"
# ServBay 가변 데이터 경로
SERVBAY_VAR_PATH="${SERVBAY_PACKAGE_FULL_PATH}/var"
# ServBay Development Library 경로
SERVBAY_COMMON_PATH="${SERVBAY_PACKAGE_FULL_PATH}/common"
# ServBay Development Library 헤더 경로
SERVBAY_COMMON_INCLUDE_PATH="${SERVBAY_COMMON_PATH}/include"
# ServBay Development Library 라이브러리 경로
SERVBAY_COMMON_LIB_PATH="${SERVBAY_COMMON_PATH}/lib"
SERVBAY_COMMON_LIBEXEC_PATH="${SERVBAY_COMMON_PATH}/libexec"
SERVBAY_COMMON_SHARE_PATH="${SERVBAY_COMMON_PATH}/share"
SERVBAY_COMMON_MAN_PATH="${SERVBAY_COMMON_PATH}/man"
SERVBAY_COMMON_DOC_PATH="${SERVBAY_COMMON_PATH}/doc"
# 현재 빌드 디렉터리
SERVBAY_BUILD_DIR=$(pwd)
SERVBAY_BUILD_SRC_DIR=${SERVBAY_BUILD_DIR}/src
# OpenSSL 버전 정보
OPENSSL_SELECTED_VERSION="1.1.1u"
OPENSSL_VERSION="1.1.1u"
# 최소 대상 macOS 버전
BUILD_OS_MIN_VERSION="12.00" # macOS Monterey 이상
# 빌드 CPU 아키텍처 플래그
BUILD_CPU_ARCH="-arch x86_64"
BUILD_CPU_ARCH_CMAKE="x86_64"
# 인텔칩은 타겟 명시 필요
BUILD_MACOS_TARGET="-target x86_64-apple-macos${BUILD_OS_MIN_VERSION}"
# C 컴파일러 플래그: 최적화, 최소 macOS 버전, 아키텍처, 타겟
export CFLAGS="-Qunused-arguments -O3 -mmacosx-version-min=${BUILD_OS_MIN_VERSION} ${BUILD_CPU_ARCH} ${BUILD_MACOS_TARGET}"
# 링커 플래그: rpath, 라이브러리 경로, 최소 macOS 버전, 아키텍처, 타겟
export LDFLAGS="-Wl,-rpath -Wl,${SERVBAY_COMMON_LIB_PATH} -L${SERVBAY_COMMON_LIB_PATH} -L${SERVBAY_PACKAGE_FULL_PATH} -mmacosx-version-min=${BUILD_OS_MIN_VERSION} ${BUILD_CPU_ARCH} ${BUILD_MACOS_TARGET}"
# C 전처리기 및 CXX 컴파일러 플래그: 헤더 검색 경로
export CPPFLAGS="-I${SERVBAY_COMMON_INCLUDE_PATH}"
# C++ 컴파일러 플래그: CFLAGS와 동일
export CXXFLAGS="-Qunused-arguments -O3 -mmacosx-version-min=${BUILD_OS_MIN_VERSION} ${BUILD_CPU_ARCH} ${BUILD_MACOS_TARGET}"
# 실행 파일 경로 우선순위: ServBay의 bin/sbin 우선
export PATH="${SERVBAY_BIN_PATH}:${SERVBAY_SBIN_PATH}:/usr/bin:/bin:/usr/sbin:/sbin:/Library/Apple/usr/bin"
# pkg-config 검색 경로: 라이브러리 정보 조회
export PKG_CONFIG_PATH="${SERVBAY_COMMON_LIB_PATH}/pkgconfig"
# pkg-config 도구 경로
export PKG_CONFIG="${SERVBAY_BIN_PATH}/pkg-config"
# pkg-config 라이브러리 디렉터리
export PKG_CONFIG_LIBDIR="${SERVBAY_COMMON_LIB_PATH}/pkgconfig"
# 시스템/홈브루 bin/sbin 경로 PATH 추가(우선순위 낮음)
export PATH=$PATH:"/usr/local/bin:/usr/local/sbin"
export PATH=$PATH:"/opt/homebrew/bin/" # Homebrew 기본 설치 경로
# OpenSSL 라이브러리 및 헤더 경로 LDFLAGS, CPPFLAGS에 추가
export LDFLAGS="-L${SERVBAY_COMMON_PATH}/openssl/${OPENSSL_SELECTED_VERSION}/lib ${LDFLAGS}"
export CPPFLAGS="-I${SERVBAY_COMMON_PATH}/openssl/${OPENSSL_SELECTED_VERSION}/include ${CPPFLAGS}"
# OpenSSL의 pkgconfig 경로 추가
export PKG_CONFIG_PATH="${PKG_CONFIG_PATH}:${SERVBAY_COMMON_PATH}/openssl/${OPENSSL_SELECTED_VERSION}/lib/pkgconfig"
export PKG_CONFIG_LIBDIR="${PKG_CONFIG_LIBDIR}:${SERVBAY_COMMON_PATH}/openssl/${OPENSSL_SELECTED_VERSION}/lib/pkgconfig"
# 환경 변수 설정 완료 후, 해당 터미널에서 컴파일 작업 가능
echo "ServBay x86_64 컴파일 환경이 설정되었습니다."
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
중요: 이 환경 변수들은 현재 터미널 세션에서만 적용됩니다. 터미널을 종료하거나 새로운 터미널을 열 경우, 위 스크립트를 다시 실행해야 컴파일 환경이 재설정됩니다.
컴파일 예시
컴파일 환경이 잘 세팅된 터미널에서 소스 코드를 내려받아 직접 컴파일할 수 있습니다. 아래는 대표적인 컴파일 예시입니다.
ImageMagick 컴파일
ImageMagick는 강력한 이미지 처리 라이브러리로, PHP imagick
확장 등 여러 활용처가 있습니다. ServBay에 기본 포함되어 있어 직접 컴파일이 필요 없지만, Autotools(configure/make) 기반 프로젝트의 빌드 과정을 보여주는 데 좋은 예입니다.
ImageMagick 소스코드 다운로드 및 압축 해제:
bash# 최신 버전명은 필요에 따라 바꿔주세요 wget https://imagemagick.org/archive/releases/ImageMagick-7.1.1-33.tar.gz tar zxvf ImageMagick-7.1.1-33.tar.gz cd ImageMagick-7.1.1-33
1
2
3
4./configure
스크립트 실행
앞에서 설정한 환경 변수와 함께 configure 스크립트를 실행하세요.--prefix
,--libdir
,--includedir
등은 설치 경로를 지정하며 ServBay Development Library의${SERVBAY_COMMON_PATH}
와 그 하위 디렉터리를 사용합니다. 이렇게 하면 빌드된 라이브러리와 헤더가 ServBay 내 다른 소프트웨어(예: PHPimagick
확장)와 호환됩니다. 기타 옵션은 ImageMagick 공식 안내에 맞춰 설정하세요.bash./configure \ --prefix=${SERVBAY_COMMON_PATH} \ --libdir=${SERVBAY_COMMON_LIB_PATH} \ --includedir=${SERVBAY_COMMON_INCLUDE_PATH} \ --oldincludedir=${SERVBAY_COMMON_INCLUDE_PATH} \ --bindir=${SERVBAY_BIN_PATH} \ --sbindir=${SERVBAY_SBIN_PATH} \ --sysconfdir=${SERVBAY_ETC_PATH} \ --datarootdir=${SERVBAY_COMMON_SHARE_PATH} \ --enable-osx-universal-binary=no \ --disable-silent-rules \ --disable-opencl \ --enable-shared \ --enable-static \ --with-freetype=yes \ --with-gvc=no \ --with-modules \ --with-webp=yes \ --with-heic=no \ --without-gslib \ --with-fpx=no \ --without-openexexr \ --with-raw=yes \ --without-lqr \ --without-djvu \ --without-fftw \ --without-pango \ --without-wmf \ --without-x \ --with-gs-font-dir=${SERVBAY_COMMON_SHARE_PATH}/ghostscript/10.02.1/Resource/Font
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30make
및make install
실행make
명령으로 컴파일하고,-j ${CPU_NUMBER}
옵션으로 멀티코어 CPU를 활용해 속도를 높입니다.make install
로 빌드 결과물을 ServBay Development Library로 설치합니다.bashmake -j ${CPU_NUMBER} make install
1
2
cmake를 이용한 패키지 컴파일
cmake
기반 소프트웨어의 빌드 프로세스는 다소 차이가 있습니다. 예로 protobuf
(Protocol Buffers) 빌드시를 소개합니다.
protobuf 소스코드를 다운로드한 뒤 해당 디렉터리로 이동합니다.
cmake
로 프로젝트 설정-S .
는 소스 디렉터리,-B builddir
는 빌드 파일이 생성될 디렉터리입니다.-DCMAKE_INSTALL_PREFIX
등은 설치 경로 지정이며 ServBay Development Library 하위로 설정합니다. 기타-D
옵션은 protobuf 빌드에 특화된 설정입니다.-DCMAKE_MACOSX_RPATH=1
과-DCMAKE_INSTALL_RPATH
는 빌드된 라이브러리가 ServBay 환경의 다른 라이브러리를 찾을 수 있게 해줍니다.bash# protobuf 소스 코드 디렉터리에서 실행 cmake -S . -B builddir \ -DCMAKE_INSTALL_PREFIX=${SERVBAY_COMMON_PATH} \ -DCMAKE_INSTALL_LIBDIR=${SERVBAY_COMMON_LIB_PATH} \ -DCMAKE_INSTALL_INCLUDEDIR=${SERVBAY_COMMON_INCLUDE_PATH} \ -DCMAKE_INSTALL_BINDIR=${SERVBAY_BIN_PATH} \ -DCMAKE_INSTALL_SBINDIR=${SERVBAY_SBIN_PATH} \ -DCMAKE_INSTALL_SYSCONFDIR=${SERVBAY_ETC_PATH} \ -DCMAKE_INSTALL_DATAROOTDIR=${SERVBAY_COMMON_SHARE_PATH} \ -DCMAKE_MACOSX_RPATH=1 \ -DCMAKE_INSTALL_RPATH=${SERVBAY_COMMON_LIB_PATH} \ -DCMAKE_BUILD_WITH_INSTALL_RPATH=TRUE \ -DCMAKE_PREFIX_PATH=${SERVBAY_COMMON_PATH} \ -DBUILD_SHARED_LIBS=ON \ -Dprotobuf_BUILD_LIBPROTOC=ON \ -Dprotobuf_BUILD_SHARED_LIBS=ON \ -Dprotobuf_INSTALL_EXAMPLES=OFF \ -Dprotobuf_BUILD_TESTS=OFF \ -Dprotobuf_ABSL_PROVIDER=package \ -Dprotobuf_JSONCPP_PROVIDER=module \ -DCMAKE_CXX_STANDARD=17
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21cmake --build
및cmake --install
cmake --build builddir
는 지정된 디렉터리에서 빌드를 수행,cmake --install builddir
는 결과물을 ServBay Development Library에 설치합니다.bashcmake --build builddir -j ${CPU_NUMBER} cmake --install builddir
1
2
PHP 모듈 컴파일
ServBay의 PHP 버전에 추가 확장(swoole
, redis
, mongodb
등)을 직접 컴파일하고 싶을 경우, 아래의 별도 문서를 참고하세요.
PostgreSQL 모듈 컴파일
ServBay의 PostgreSQL 버전에 추가 모듈을 컴파일하고 싶을 때도 별도 문서를 참고하세요.
마무리
ServBay의 Development Library와 꼼꼼한 환경 변수 설정을 활용하면 macOS에서 소프트웨어 패키지의 재컴파일과 맞춤 구현을 손쉽게 수행할 수 있습니다. 프로젝트의 특수 요구나 최신 버전의 라이브러리 사용 등 다양한 개발 상황에서 유연성을 극대화할 수 있으며, 컴파일 전 해당 소프트웨어 공식 빌드 안내서를 반드시 확인하여 필요한 설정과 빌드 옵션을 조정하는 것이 바람직합니다.