ServBay を使った再コンパイル方法
ServBayは、macOSユーザーのために充実したローカルWeb開発環境を提供しています。豊富なパッケージやツールが揃っており、標準でインストールされているソフトウェア群以外でも、下記のようなニーズに合わせて再コンパイルが可能です。
- あるパッケージに特定のビルドオプションを有効にしたい場合
- 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既にインストール済みの場合は、その旨のメッセージが表示されます。
追加のビルドツールをインストール:
多くのOSSビルドにはautoconf
、automake
、libtool
等のツールが必要です。Homebrewパッケージマネージャーで簡単にインストールできます。bashbrew install autoconf automake libtool cmake
1Homebrewが未インストールの場合、公式Webサイトの手順に従いまずHomebrewを導入してください。
ビルド環境の設定
ServBay Development Libraryや必須ツールをインストール後、ターミナルでビルド環境を初期化します。主にPATH
, CFLAGS
, LDFLAGS
, CPPFLAGS
などの環境変数を設定し、コンパイラやビルドシステムにServBayのライブラリ、ヘッダー、バイナリの在処を認識させます。
ServBayの実行環境は、お使いのMacのCPUアーキテクチャごとにIntel(x86_64)とApple Silicon(Arm64)に分かれます。現在のServBay Runtimeに適した設定コマンドを選びます。
ServBay Runtime のCPUアーキテクチャ確認
ServBayのbin
ディレクトリ内の実行ファイルのアーキテクチャを調べることで確認できます。例としてbison
を調べます。
# ターミナルで次のコマンドを実行
$ file /Applications/ServBay/bin/bison
/Applications/ServBay/bin/bison: Mach-O 64-bit executable arm64
2
3
# ターミナルで次のコマンドを実行
$ file /Applications/ServBay/bin/bison
/Applications/ServBay/bin/bison: Mach-O 64-bit executable x86_64
2
3
アーキテクチャが分かったら、その結果に合った初期化スクリプトを使用しましょう。
ビルド用環境変数の初期化
新しいターミナルウィンドウを開き、以下から自分のCPUアーキテクチャに対応するスクリプトをコピーして実行してください。これでServBayのビルドに必要な各種パスやフラグの設定が行われます。
# 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_ETC_PATH="${SERVBAY_PACKAGE_FULL_PATH}/etc"
SERVBAY_VAR_PATH="${SERVBAY_PACKAGE_FULL_PATH}/var"
# Dev Library インストールパス
SERVBAY_COMMON_PATH="${SERVBAY_PACKAGE_FULL_PATH}/common"
SERVBAY_COMMON_INCLUDE_PATH="${SERVBAY_COMMON_PATH}/include"
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"
# 対象OSの最低バージョン
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コンパイラ用フラグ:最適化、最低OSバージョン、アーキテクチャ
export CFLAGS="-Qunused-arguments -O3 -mmacosx-version-min=${BUILD_OS_MIN_VERSION} ${BUILD_CPU_ARCH} ${BUILD_MACOS_TARGET}"
# リンカフラグ:rpath、ライブラリパス、最低OSバージョン、アーキテクチャ
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}"
# プリプロセッサおよびCXXフラグ(ヘッダーパス)
export CPPFLAGS="-I${SERVBAY_COMMON_INCLUDE_PATH}"
# C++コンパイラフラグ
export CXXFLAGS="-Qunused-arguments -O3 -mmacosx-version-min=${BUILD_OS_MIN_VERSION} ${BUILD_CPU_ARCH} ${BUILD_MACOS_TARGET}"
# 実行ファイル検索パス
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"
export PKG_CONFIG="${SERVBAY_BIN_PATH}/pkg-config"
export PKG_CONFIG_LIBDIR="${SERVBAY_COMMON_LIB_PATH}/pkgconfig"
# システム・Homebrewのパスも追加
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 ビルド環境が設定されました。"
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
# 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_ETC_PATH="${SERVBAY_PACKAGE_FULL_PATH}/etc"
SERVBAY_VAR_PATH="${SERVBAY_PACKAGE_FULL_PATH}/var"
# Dev Library インストールパス
SERVBAY_COMMON_PATH="${SERVBAY_PACKAGE_FULL_PATH}/common"
SERVBAY_COMMON_INCLUDE_PATH="${SERVBAY_COMMON_PATH}/include"
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"
# 対象OSの最低バージョン
BUILD_OS_MIN_VERSION="12.00" # macOS Monterey以上
# CPUアーキテクチャフラグ
BUILD_CPU_ARCH="-arch x86_64"
BUILD_CPU_ARCH_CMAKE="x86_64"
# Intelは通常ターゲット指定が必要
BUILD_MACOS_TARGET="-target x86_64-apple-macos${BUILD_OS_MIN_VERSION}"
# Cコンパイラ用フラグ
export CFLAGS="-Qunused-arguments -O3 -mmacosx-version-min=${BUILD_OS_MIN_VERSION} ${BUILD_CPU_ARCH} ${BUILD_MACOS_TARGET}"
# リンカフラグ
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}"
# プリプロセッサおよびCXXフラグ
export CPPFLAGS="-I${SERVBAY_COMMON_INCLUDE_PATH}"
# C++コンパイラ用フラグ
export CXXFLAGS="-Qunused-arguments -O3 -mmacosx-version-min=${BUILD_OS_MIN_VERSION} ${BUILD_CPU_ARCH} ${BUILD_MACOS_TARGET}"
# 実行ファイル検索パス
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"
export PKG_CONFIG="${SERVBAY_BIN_PATH}/pkg-config"
export PKG_CONFIG_LIBDIR="${SERVBAY_COMMON_LIB_PATH}/pkgconfig"
# システム・Homebrewパス追加
export PATH=$PATH:"/usr/local/bin:/usr/local/sbin"
export PATH=$PATH:"/opt/homebrew/bin/" # Homebrew標準パス
# OpenSSLのパス追加
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 ビルド環境が設定されました。"
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
重要: これらの環境変数の効果は現在のターミナルセッションのみです。ターミナルを閉じたり新しく開いた場合は、改めてスクリプトの実行が必要となります。
ビルド例
設定済みのターミナルウィンドウで、ソースコードを取得しビルド作業を行えます。一部代表的な例を紹介します。
ImageMagick のビルド
ImageMagickは強力な画像処理ライブラリで、PHPのimagick
エクステンションの依存ライブラリでもあります。ServBayには標準でImageMagickが含まれているため、通常は独自ビルド不要ですが、ここでは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環境での他ソフト(例:PHPのimagick
エクステンション)から検出できるようにします。他のオプションは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}
で並列ビルドを有効にして高速化します。make install
で指定先ディレクトリにインストールされます。bashmake -j ${CPU_NUMBER} make install
1
2
cmake を使ったパッケージのビルド
cmake
ベースのパッケージはAutotools系と若干手順が異なります。ここではProtocol Buffers(protobuf)のビルド例を示します。
protobufソースのダウンロードおよびディレクトリ移動
cmake
でプロジェクト設定:-S .
は現在のディレクトリをソース指定、-B builddir
はビルドファイルの出力ディレクトリ指定です。-DCMAKE_INSTALL_PREFIX
等でインストールパスやライブラリ、バイナリ配置先をServBay Development Libraryディレクトリへ指定します。その他-D
オプションはprotobuf固有のビルド設定。-DCMAKE_MACOSX_RPATH=1
や-DCMAKE_INSTALL_RPATH
で、ビルドしたライブラリがServBay環境内の他ライブラリを正しく見つけられるようにします。bash# プロトコルバッファのソースディレクトリ内で実行 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
でbuilddir
ディレクトリ内ビルド、cmake --install builddir
で指定先(-DCMAKE_INSTALL_PREFIX)にインストールします。bashcmake --build builddir -j ${CPU_NUMBER} cmake --install builddir
1
2
PHPモジュールのビルド
ServBayの特定PHPバージョン向けに追加のエクステンション(例:swoole、redis、mongodbなど)をビルドしたい場合は、以下の個別マニュアルを参照してください。
PostgreSQLモジュールのビルド
ServBayの特定PostgreSQLバージョン向けに追加モジュールをビルドしたい場合は、こちらを参照してください。
まとめ
ServBayが提供するDevelopment Libraryと適切な環境変数設定によって、macOS上でパッケージの再コンパイルやカスタマイズが容易に実現できます。これにより、特定プロジェクトのニーズに柔軟に応えたり、常に最新のライブラリを利用したりできるようになります。
ビルド作業前には必ず各パッケージの公式ビルド手順をよく読み、必要に応じてオプションや順序を調整してください。