Pakete mit ServBay neu kompilieren
ServBay stellt macOS-Nutzern eine leistungsstarke und vollständige lokale Web-Entwicklungsumgebung zur Verfügung, die zahlreiche Softwarepakete und Tools beinhaltet. Neben den von ServBay vorinstallierten Paketversionen kann es für Entwickler gelegentlich notwendig sein, bestimmte Pakete für spezielle Anforderungen neu zu kompilieren, etwa um:
- eine Software mit spezifischen Kompilierungsoptionen zu bauen,
- Module oder Erweiterungen hinzuzufügen, die im Standardumfang von ServBay nicht enthalten sind (z. B. ein neues PHP- oder PostgreSQL-Modul),
- mit anderen als den in ServBay enthaltenen Standardbibliotheken zu kompilieren,
- individuell angepasste Änderungen an den von ServBay gelieferten Softwarepaketen vorzunehmen.
ServBay bietet hierfür eine vollständige Build-Umgebung und Toolchain, mit der Sie solche Aufgaben problemlos erledigen können.
Grundlegende Kenntnisse in typischen Unix/Linux-Build-Prozessen (wie configure
, make
, make install
) werden vorausgesetzt, um diesen Workflow erfolgreich nutzen zu können.
Voraussetzungen
Stellen Sie vor dem Neubau sicher, dass Sie folgende Voraussetzungen erfüllen:
Installation der ServBay Development Library: Diese Bibliothek ist das zentrale Paket für den Build-Prozess und enthält sämtliche für Kompilierungen erforderlichen Bibliotheken (
.so
,.a
), Header-Dateien (.h
) und weitere Entwicklungsressourcen im ServBay-Umfeld. Sie können die Library im Softwarepakete-Panel der ServBay-App mit wenigen Klicks installieren.Installation der Xcode Command Line Tools: Das von macOS bereitgestellte Basis-Toolset inklusive Compiler (Clang), Linker und wichtigen Systemtools. Installieren Sie die Tools über das Terminal mit:
bashxcode-select --install
1Falls die Tools bereits installiert sind, wird Ihnen dies vom System mitgeteilt.
Installation weiterer Build-Tools: Für die meisten Open-Source-Projekte benötigen Sie zusätzlich
autoconf
,automake
,libtool
und ähnliche Tools. Die Installation geht mit dem Homebrew-Paketmanager am einfachsten:bashbrew install autoconf automake libtool cmake
1Sollte Homebrew noch nicht installiert sein, folgen Sie bitte der Anleitung auf der offiziellen Homebrew-Webseite.
Die Build-Umgebung einrichten
Nach der Installation der ServBay Development Library und aller benötigten Tools müssen Sie Ihre Build-Umgebung initialisieren. Das geschieht vor allem durch das Setzen relevanter Umgebungsvariablen wie PATH
, CFLAGS
, LDFLAGS
, CPPFLAGS
, damit Compiler und Build-Systeme die richtigen Bibliotheken, Header-Dateien und Binaries von ServBay finden und korrekt verlinken.
Die ServBay-Laufzeitumgebung unterscheidet sich je nach CPU-Architektur Ihres Macs: Intel-Chips (x86_64) oder Apple Silicon (Arm64). Wählen Sie die passenden Initialisierungskommandos anhand Ihrer ServBay-Runtime-Architektur.
Architektur der ServBay-Runtime prüfen
Durch die Überprüfung eines beliebigen Executables (z. B. bison
) im bin
-Verzeichnis von ServBay können Sie die geltende Architektur feststellen:
# Führen Sie diesen Befehl im Terminal aus
$ file /Applications/ServBay/bin/bison
/Applications/ServBay/bin/bison: Mach-O 64-bit executable arm64
2
3
# Führen Sie diesen Befehl im Terminal aus
$ file /Applications/ServBay/bin/bison
/Applications/ServBay/bin/bison: Mach-O 64-bit executable x86_64
2
3
Nachdem Sie die Architektur identifiziert haben, wählen Sie das zugehörige Initialisierungsskript.
Build-Umgebungsvariablen initialisieren
Öffnen Sie ein neues Terminalfenster und kopieren Sie das nachfolgende, zu Ihrer CPU-Architektur passende Skript. Fügen Sie es ein und führen Sie es aus, um alle nötigen Pfade und Compiler-/Linker-Flags für die ServBay-Build-Umgebung zu setzen.
# Bestimmen der CPU-Kernanzahl für parallele Kompilierung
CPU_NUMBER=$(sysctl -n hw.ncpu)
# Basis-Verzeichnis von ServBay
SERVBAY_BASE_FULL_PATH="/Applications/ServBay"
# Paketverzeichnis-Name
SERVBAY_PACKAGE_DIR_NAME="package"
# Vollständiger Paketpfad
SERVBAY_PACKAGE_FULL_PATH="${SERVBAY_BASE_FULL_PATH}/${SERVBAY_PACKAGE_DIR_NAME}"
# Pfade zu ServBay-Binaries
SERVBAY_BIN_PATH="${SERVBAY_PACKAGE_FULL_PATH}/bin"
SERVBAY_SBIN_PATH="${SERVBAY_PACKAGE_FULL_PATH}/sbin"
# Konfigurationsverzeichnis von ServBay
SERVBAY_ETC_PATH="${SERVBAY_PACKAGE_FULL_PATH}/etc"
# Pfad für Variablendaten von ServBay
SERVBAY_VAR_PATH="${SERVBAY_PACKAGE_FULL_PATH}/var"
# Installationspfad der ServBay Development Library
SERVBAY_COMMON_PATH="${SERVBAY_PACKAGE_FULL_PATH}/common"
# Header-Datei-Pfad der Development Library
SERVBAY_COMMON_INCLUDE_PATH="${SERVBAY_COMMON_PATH}/include"
# Bibliothekspfad der 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"
# Aktuelles Build-Verzeichnis
SERVBAY_BUILD_DIR=$(pwd)
SERVBAY_BUILD_SRC_DIR=${SERVBAY_BUILD_DIR}/src
# OpenSSL-Versionsangaben
OPENSSL_SELECTED_VERSION="3.2"
OPENSSL_VERSION="3.2.1"
# Minimale Ziel-macOS-Version
BUILD_OS_MIN_VERSION="12.00" # macOS Monterey oder neuer
# Architektur-Flag
BUILD_CPU_ARCH="-arch arm64"
BUILD_CPU_ARCH_CMAKE="arm64"
BUILD_MACOS_TARGET="" # Für Arm64 normal nicht nötig
# C-Compiler-Flags: Optimierung, macOS-Version, Architektur
export CFLAGS="-Qunused-arguments -O3 -mmacosx-version-min=${BUILD_OS_MIN_VERSION} ${BUILD_CPU_ARCH} ${BUILD_MACOS_TARGET}"
# Linker-Flags: rpath, Bibliothekspfad, macOS-Version, Architektur
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}"
# Präprozessor- und CXX-Compiler-Flags: Header-Pfad
export CPPFLAGS="-I${SERVBAY_COMMON_INCLUDE_PATH}"
# C++-Compiler-Flags wie CFLAGS
export CXXFLAGS="-Qunused-arguments -O3 -mmacosx-version-min=${BUILD_OS_MIN_VERSION} ${BUILD_CPU_ARCH} ${BUILD_MACOS_TARGET}"
# Vorrang für ServBay-bin/sbin im Pfad
export PATH="${SERVBAY_BIN_PATH}:${SERVBAY_SBIN_PATH}:/usr/bin:/bin:/usr/sbin:/sbin:/Library/Apple/usr/bin"
# pkg-config-Suchpfad
export PKG_CONFIG_PATH="${SERVBAY_COMMON_LIB_PATH}/pkgconfig"
# Pfad zum pkg-config Tool
export PKG_CONFIG="${SERVBAY_BIN_PATH}/pkg-config"
# pkg-config Bibliothekspfad
export PKG_CONFIG_LIBDIR="${SERVBAY_COMMON_LIB_PATH}/pkgconfig"
# System- und Homebrew-bin/sbin als Fallback-Pfade
export PATH=$PATH:"/usr/local/bin:/usr/local/sbin"
export PATH=$PATH:"/opt/homebrew/bin/" # Standardpfad für Homebrew
# OpenSSL-Bibliotheks- und Headerpfad zu LDFLAGS und CPPFLAGS hinzufügen
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-Pfad hinzufügen
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"
# Nach Setzen der Variablen können Sie im Terminal kompilieren
echo "ServBay Arm64 Build-Umgebung wurde eingerichtet."
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
# Bestimmen der CPU-Kernanzahl für parallele Kompilierung
CPU_NUMBER=$(sysctl -n hw.ncpu)
# Basis-Verzeichnis von ServBay
SERVBAY_BASE_FULL_PATH="/Applications/ServBay"
# Paketverzeichnis-Name
SERVBAY_PACKAGE_DIR_NAME="package"
# Vollständiger Paketpfad
SERVBAY_PACKAGE_FULL_PATH="${SERVBAY_BASE_FULL_PATH}/${SERVBAY_PACKAGE_DIR_NAME}"
# Pfade zu ServBay-Binaries
SERVBAY_BIN_PATH="${SERVBAY_PACKAGE_FULL_PATH}/bin"
SERVBAY_SBIN_PATH="${SERVBAY_PACKAGE_FULL_PATH}/sbin"
# Konfigurationsverzeichnis von ServBay
SERVBAY_ETC_PATH="${SERVBAY_PACKAGE_FULL_PATH}/etc"
# Pfad für Variablendaten von ServBay
SERVBAY_VAR_PATH="${SERVBAY_PACKAGE_FULL_PATH}/var"
# Installationspfad der ServBay Development Library
SERVBAY_COMMON_PATH="${SERVBAY_PACKAGE_FULL_PATH}/common"
# Header-Datei-Pfad der Development Library
SERVBAY_COMMON_INCLUDE_PATH="${SERVBAY_COMMON_PATH}/include"
# Bibliothekspfad der 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"
# Aktuelles Build-Verzeichnis
SERVBAY_BUILD_DIR=$(pwd)
SERVBAY_BUILD_SRC_DIR=${SERVBAY_BUILD_DIR}/src
# OpenSSL-Versionsangaben
OPENSSL_SELECTED_VERSION="1.1.1u"
OPENSSL_VERSION="1.1.1u"
# Minimale Ziel-macOS-Version
BUILD_OS_MIN_VERSION="12.00" # macOS Monterey oder neuer
# Architektur-Flag
BUILD_CPU_ARCH="-arch x86_64"
BUILD_CPU_ARCH_CMAKE="x86_64"
# Zielplattform-Flag (bei Intel meist nötig)
BUILD_MACOS_TARGET="-target x86_64-apple-macos${BUILD_OS_MIN_VERSION}"
# C-Compiler-Flags: Optimierung, macOS-Version, Architektur, Zielplattform
export CFLAGS="-Qunused-arguments -O3 -mmacosx-version-min=${BUILD_OS_MIN_VERSION} ${BUILD_CPU_ARCH} ${BUILD_MACOS_TARGET}"
# Linker-Flags: rpath, Bibliothekspfad, macOS-Version, Architektur, Zielplattform
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}"
# Präprozessor- und CXX-Compiler-Flags: Header-Pfad
export CPPFLAGS="-I${SERVBAY_COMMON_INCLUDE_PATH}"
# C++-Compiler-Flags wie CFLAGS
export CXXFLAGS="-Qunused-arguments -O3 -mmacosx-version-min=${BUILD_OS_MIN_VERSION} ${BUILD_CPU_ARCH} ${BUILD_MACOS_TARGET}"
# Vorrang für ServBay-bin/sbin im Pfad
export PATH="${SERVBAY_BIN_PATH}:${SERVBAY_SBIN_PATH}:/usr/bin:/bin:/usr/sbin:/sbin:/Library/Apple/usr/bin"
# pkg-config-Suchpfad
export PKG_CONFIG_PATH="${SERVBAY_COMMON_LIB_PATH}/pkgconfig"
# Pfad zum pkg-config Tool
export PKG_CONFIG="${SERVBAY_BIN_PATH}/pkg-config"
# pkg-config Bibliothekspfad
export PKG_CONFIG_LIBDIR="${SERVBAY_COMMON_LIB_PATH}/pkgconfig"
# System- und Homebrew-bin/sbin als Fallback-Pfade
export PATH=$PATH:"/usr/local/bin:/usr/local/sbin"
export PATH=$PATH:"/opt/homebrew/bin/" # Standardpfad für Homebrew
# OpenSSL-Bibliotheks- und Headerpfad zu LDFLAGS und CPPFLAGS hinzufügen
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-Pfad hinzufügen
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"
# Nach Setzen der Variablen können Sie im Terminal kompilieren
echo "ServBay x86_64 Build-Umgebung wurde eingerichtet."
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
Wichtiger Hinweis: Diese Umgebungsvariablen gelten nur in der aktuellen Terminalsitzung. Nach Schließen bzw. erneutem Öffnen des Terminals müssen Sie das Skript jeweils erneut ausführen.
Build-Beispiele
Nach dem Setzen der Build-Umgebung können Sie beliebige Quellpakete herunterladen und kompilieren. Nachfolgend finden Sie typische Beispiele aus der Praxis.
ImageMagick kompilieren
ImageMagick ist eine vielseitige Grafikbibliothek, auf die z. B. die PHP-Extension imagick
angewiesen ist. ServBay liefert ImageMagick bereits standardmäßig mit; ein manuelles Kompilieren ist im Alltag nicht nötig. Das folgende Beispiel demonstriert exemplarisch den Build-Prozess für ein typisches Autotools-Projekt (configure/make):
Quellcode für ImageMagick herunterladen und entpacken:
bash# Ersetzen Sie ggf. die Versionsnummer durch die aktuelle 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
4Das
./configure
-Skript ausführen: Verwenden Sie die zuvor gesetzten Umgebungsvariablen. Die Optionen wie--prefix
,--libdir
,--includedir
etc. geben an, wohin compiliert/installiert wird – idealerweise in die ServBay Development Library (${SERVBAY_COMMON_PATH}
) und deren Unterverzeichnisse, sodass Bibliotheken und Header auch von anderen ServBay-Komponenten (wie der PHP-Extensionimagick
) gefunden werden. Weitere Optionen richten sich nach den jeweiligen Projektanforderungen.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
30Ausführen von
make
undmake install
: Mit demmake
-Kommando werden die Binaries erstellt, wobei-j ${CPU_NUMBER}
eine parallele Kompilierung auslöst.make install
installiert die Artefakte in das beim configure angegebene Zielverzeichnis (ServBay Development Library).bashmake -j ${CPU_NUMBER} make install
1
2
Software mit cmake kompilieren
Für Projekte, die das Build-System cmake
nutzen, verläuft der Build-Prozess in einigen Details anders. Im Folgenden ein Beispiel am Paket protobuf
(Protocol Buffers):
Quellcode für protobuf herunterladen und ins Verzeichnis wechseln.
Build-Konfiguration mit
cmake
:-S .
weist cmake an, das aktuelle Verzeichnis als Quellverzeichnis zu verwenden;-B builddir
legt das Build-Verzeichnis fest. Optionen wie-DCMAKE_INSTALL_PREFIX
etc. legen fest, wo installiert wird – idealerweise wieder in die ServBay Development Library. Zusätzliche-D
-Schalter richten sich nach den Besonderheiten vonprotobuf
.-DCMAKE_MACOSX_RPATH=1
und-DCMAKE_INSTALL_RPATH
sorgen für korrekt auflösbare Bibliothekspfade im ServBay-Umfeld.bash# Gehen Sie ins protobuf-Quellverzeichnis 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
21Build und Installation durchführen: Kompilieren Sie mit
cmake --build builddir
, installieren Sie dann mitcmake --install builddir
ins angegebeneCMAKE_INSTALL_PREFIX
-Verzeichnis (ServBay Development Library).bashcmake --build builddir -j ${CPU_NUMBER} cmake --install builddir
1
2
PHP-Module kompilieren
Falls Sie für eine der in ServBay installierten PHP-Versionen zusätzliche Erweiterungen wie swoole
, redis
oder mongodb
kompilieren möchten, finden Sie detaillierte Anleitungen in folgendem Dokument:
PostgreSQL-Module kompilieren
Falls Sie neue Module für eine der in ServBay vorhandenen PostgreSQL-Versionen erstellen möchten, nutzen Sie bitte die folgende Spezialanleitung:
Wie kompiliere ich PostgreSQL-Module
Fazit
Mit der ServBay Development Library und der durchdachten Build-Konfiguration können Entwickler auf macOS gezielt Softwarepakete neu kompilieren und flexibel anpassen. Das verschafft Ihnen größtmögliche Freiheit, um projektspezifische Anforderungen oder die aktuellsten Bibliotheksversionen zu integrieren. Bitte beachten Sie stets die offiziellen Build-Anleitungen der jeweiligen Software und passen Sie Ihre Einstellungen bei Bedarf entsprechend an.