Recompilación con ServBay
ServBay ofrece a los usuarios de macOS un entorno local de desarrollo web completo y potente, que incluye una amplia variedad de paquetes y herramientas. Más allá de las versiones de software preinstaladas de ServBay, en ocasiones los desarrolladores pueden necesitar recompilar ciertos componentes para requisitos específicos, tales como:
- Habilitar opciones de compilación particulares para un paquete.
- Añadir módulos o extensiones no incluidos por defecto en ServBay (como una nueva extensión de PHP o un módulo de PostgreSQL).
- Compilar utilizando una biblioteca diferente a la versión predeterminada de ServBay.
- Personalizar o modificar paquetes suministrados por ServBay.
ServBay proporciona el entorno y la cadena de herramientas necesarios para facilitar estas tareas de recompilación.
Para realizar la recompilación con éxito, es deseable tener conocimientos básicos sobre el proceso de compilación de software en entornos Unix/Linux (por ejemplo, el uso de configure
, make
, make install
).
Requisitos previos
Antes de comenzar la recompilación, asegúrate de cumplir con los siguientes puntos:
Instala ServBay Development Library: Este es el principal requisito para la recompilación. El paquete contiene todas las bibliotecas (
.so
,.a
), archivos de cabecera (.h
) y recursos de desarrollo necesarios en el entorno de ServBay. Puedes encontrarlo e instalarlo desde el panel de Paquetes en la interfaz de la aplicación ServBay.Instala Xcode Command Line Tools: Este conjunto básico de herramientas de desarrollo es proporcionado por macOS e incluye compiladores (Clang), enlazadores y otros recursos esenciales. Para instalarlo abre la Terminal y ejecuta:
bashxcode-select --install
1Si ya está instalado, el sistema te lo notificará.
Instala herramientas de compilación adicionales: Para compilar la mayoría de software open source, también necesitas
autoconf
,automake
,libtool
y herramientas similares. Usualmente puedes instalarlas usando el gestor de paquetes Homebrew:bashbrew install autoconf automake libtool cmake
1Si aún no tienes Homebrew, consulta primero la guía oficial en su sitio web para instalarlo.
Configuración del entorno de compilación
Tras instalar ServBay Development Library y las herramientas requeridas, necesitas inicializar el entorno de compilación en la terminal. Esta acción implica definir un conjunto de variables de entorno (como PATH
, CFLAGS
, LDFLAGS
, CPPFLAGS
) para que el compilador y el sistema de construcción encuentren correctamente las bibliotecas, archivos de cabecera y binarios de ServBay, facilitando el enlace de dependencias.
El entorno de ejecución de ServBay varía según la arquitectura del CPU de tu Mac, ya sea Intel (x86_64) o Apple Silicon (Arm64). Debes seleccionar el comando de inicialización adecuado según la arquitectura actual del Runtime de ServBay.
Verificar la arquitectura del Runtime de ServBay
Puedes determinar la arquitectura revisando cualquier ejecutable dentro del directorio bin
de ServBay. Por ejemplo, verifica bison
:
bash
# Ejecuta este comando en la terminal para comprobar la arquitectura
$ file /Applications/ServBay/bin/bison
/Applications/ServBay/bin/bison: Mach-O 64-bit executable arm64
1
2
3
2
3
bash
# Ejecuta este comando en la terminal para comprobar la arquitectura
$ file /Applications/ServBay/bin/bison
/Applications/ServBay/bin/bison: Mach-O 64-bit executable x86_64
1
2
3
2
3
Después de identificar la arquitectura, selecciona el script de inicialización de entorno correspondiente.
Inicializar variables del entorno de compilación
Abre una nueva ventana de terminal y copia el script adecuado a tu arquitectura de CPU, pegándolo en la terminal para ejecutarlo. Estos scripts configuran los diferentes paths y flags requeridos para compilar dentro del entorno de ServBay.
bash
# Establece el número de núcleos de CPU para compilación en paralelo
CPU_NUMBER=$(sysctl -n hw.ncpu)
# Ruta base de instalación de ServBay
SERVBAY_BASE_FULL_PATH="/Applications/ServBay"
# Nombre del directorio de paquetes
SERVBAY_PACKAGE_DIR_NAME="package"
# Ruta completa del paquete
SERVBAY_PACKAGE_FULL_PATH="${SERVBAY_BASE_FULL_PATH}/${SERVBAY_PACKAGE_DIR_NAME}"
# Ruta de los binarios de ServBay
SERVBAY_BIN_PATH="${SERVBAY_PACKAGE_FULL_PATH}/bin"
SERVBAY_SBIN_PATH="${SERVBAY_PACKAGE_FULL_PATH}/sbin"
# Rutas de configuración y datos variables
SERVBAY_ETC_PATH="${SERVBAY_PACKAGE_FULL_PATH}/etc"
SERVBAY_VAR_PATH="${SERVBAY_PACKAGE_FULL_PATH}/var"
# Ruta de instalación de ServBay Development Library
SERVBAY_COMMON_PATH="${SERVBAY_PACKAGE_FULL_PATH}/common"
# Rutas de cabeceras y librerías de desarrollo
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"
# Directorios actuales de compilación
SERVBAY_BUILD_DIR=$(pwd)
SERVBAY_BUILD_SRC_DIR=${SERVBAY_BUILD_DIR}/src
# Información de la versión de OpenSSL
OPENSSL_SELECTED_VERSION="3.2"
OPENSSL_VERSION="3.2.1"
# Versión mínima de macOS de destino
BUILD_OS_MIN_VERSION="12.00" # macOS Monterey o superior
# Bandera de la arquitectura del CPU
BUILD_CPU_ARCH="-arch arm64"
BUILD_CPU_ARCH_CMAKE="arm64"
BUILD_MACOS_TARGET="" # Arm64 usualmente no necesita -target
# Definir flags del compilador C: nivel de optimización, versión mínima de macOS, arquitectura
export CFLAGS="-Qunused-arguments -O3 -mmacosx-version-min=${BUILD_OS_MIN_VERSION} ${BUILD_CPU_ARCH} ${BUILD_MACOS_TARGET}"
# Definir flags del linkeador: ruta de búsqueda dinámica, flags de librerías, versión de macOS, arquitectura
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}"
# Flags para el preprocesador C y compilador CXX
export CPPFLAGS="-I${SERVBAY_COMMON_INCLUDE_PATH}"
export CXXFLAGS="-Qunused-arguments -O3 -mmacosx-version-min=${BUILD_OS_MIN_VERSION} ${BUILD_CPU_ARCH} ${BUILD_MACOS_TARGET}"
# Modificar PATH para priorizar los binarios de ServBay
export PATH="${SERVBAY_BIN_PATH}:${SERVBAY_SBIN_PATH}:/usr/bin:/bin:/usr/sbin:/sbin:/Library/Apple/usr/bin"
# Ruta de búsqueda para 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"
# Añadir rutas de binarios de Homebrew
export PATH=$PATH:"/usr/local/bin:/usr/local/sbin"
export PATH=$PATH:"/opt/homebrew/bin/" # Ruta default de Homebrew
# Agregar librerías y cabeceras de OpenSSL a LDFLAGS y 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}"
# Añadir ruta de pkgconfig de OpenSSL
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"
# Tras establecer las variables, ya puedes compilar en esta ventana de terminal
echo "Entorno de compilación de ServBay para Arm64 configurado."
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
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
bash
# Establece el número de núcleos de CPU para compilación en paralelo
CPU_NUMBER=$(sysctl -n hw.ncpu)
# Ruta base de instalación de ServBay
SERVBAY_BASE_FULL_PATH="/Applications/ServBay"
# Nombre del directorio de paquetes
SERVBAY_PACKAGE_DIR_NAME="package"
# Ruta completa del paquete
SERVBAY_PACKAGE_FULL_PATH="${SERVBAY_BASE_FULL_PATH}/${SERVBAY_PACKAGE_DIR_NAME}"
# Ruta de los binarios de ServBay
SERVBAY_BIN_PATH="${SERVBAY_PACKAGE_FULL_PATH}/bin"
SERVBAY_SBIN_PATH="${SERVBAY_PACKAGE_FULL_PATH}/sbin"
# Rutas de configuración y datos variables
SERVBAY_ETC_PATH="${SERVBAY_PACKAGE_FULL_PATH}/etc"
SERVBAY_VAR_PATH="${SERVBAY_PACKAGE_FULL_PATH}/var"
# Ruta de instalación de ServBay Development Library
SERVBAY_COMMON_PATH="${SERVBAY_PACKAGE_FULL_PATH}/common"
# Rutas de cabeceras y librerías de desarrollo
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"
# Directorios actuales de compilación
SERVBAY_BUILD_DIR=$(pwd)
SERVBAY_BUILD_SRC_DIR=${SERVBAY_BUILD_DIR}/src
# Información de la versión de OpenSSL
OPENSSL_SELECTED_VERSION="1.1.1u"
OPENSSL_VERSION="1.1.1u"
# Versión mínima de macOS de destino
BUILD_OS_MIN_VERSION="12.00" # macOS Monterey o superior
# Bandera de la arquitectura del CPU
BUILD_CPU_ARCH="-arch x86_64"
BUILD_CPU_ARCH_CMAKE="x86_64"
# Flag de plataforma objetivo (Intel requiere especificar objetivo)
BUILD_MACOS_TARGET="-target x86_64-apple-macos${BUILD_OS_MIN_VERSION}"
# Definir flags del compilador C: nivel de optimización, versión mínima de macOS, arquitectura, objetivo
export CFLAGS="-Qunused-arguments -O3 -mmacosx-version-min=${BUILD_OS_MIN_VERSION} ${BUILD_CPU_ARCH} ${BUILD_MACOS_TARGET}"
# Definir flags del linkeador: ruta de búsqueda dinámica, flags de librerías, versión de macOS, arquitectura, objetivo
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}"
# Flags para el preprocesador C y compilador CXX
export CPPFLAGS="-I${SERVBAY_COMMON_INCLUDE_PATH}"
export CXXFLAGS="-Qunused-arguments -O3 -mmacosx-version-min=${BUILD_OS_MIN_VERSION} ${BUILD_CPU_ARCH} ${BUILD_MACOS_TARGET}"
# Modificar PATH para priorizar los binarios de ServBay
export PATH="${SERVBAY_BIN_PATH}:${SERVBAY_SBIN_PATH}:/usr/bin:/bin:/usr/sbin:/sbin:/Library/Apple/usr/bin"
# Ruta de búsqueda para 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"
# Añadir rutas de binarios de Homebrew
export PATH=$PATH:"/usr/local/bin:/usr/local/sbin"
export PATH=$PATH:"/opt/homebrew/bin/" # Ruta default de Homebrew
# Agregar librerías y cabeceras de OpenSSL a LDFLAGS y 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}"
# Añadir ruta de pkgconfig de OpenSSL
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"
# Tras establecer las variables, ya puedes compilar en esta ventana de terminal
echo "Entorno de compilación de ServBay para x86_64 configurado."
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
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
Nota importante: Estas variables de entorno solo son válidas durante la sesión actual de terminal. Si cierras la terminal u abres una nueva ventana, deberás ejecutar de nuevo el script correspondiente para configurar el entorno de compilación.
Ejemplo de compilación
Con el entorno ya preparado, puedes descargar el código fuente y comenzar la compilación. A continuación, unos ejemplos prácticos:
Compilar ImageMagick
ImageMagick es una biblioteca de procesamiento de imágenes esencial como dependencia de la extensión PHP imagick
. ServBay ya la incluye por defecto, por lo que normalmente no necesitas compilarla manualmente. El siguiente ejemplo ilustra el proceso típico de compilación de un proyecto Autotools (configure/make) en el entorno ServBay.
Descarga y descomprime el código fuente de ImageMagick:
bash# Sustituye por el número de versión más reciente si es necesario 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
4Ejecuta el script
./configure
: Aprovecha las variables de entorno previamente configuradas. Utiliza las opciones--prefix
,--libdir
,--includedir
, etc. para dirigir la instalación a los caminos correspondientes dentro de ServBay Development Library. Así, otras aplicaciones en el entorno ServBay (como la extensiónimagick
de PHP) podrán localizar las librerías y cabeceras necesarias. Configura otras opciones según los requisitos de 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
30Ejecuta
make
ymake install
: El comandomake
compilará ejecutables y librerías según la configuración anterior. Usa-j ${CPU_NUMBER}
para maximizar el uso de tus núcleos de CPU. Después,make install
instalará lo compilado en los directorios definidos por--prefix
.bashmake -j ${CPU_NUMBER} make install
1
2
Compilar paquetes usando cmake
Si el paquete utiliza el sistema de construcción cmake
, el proceso difiere ligeramente. Tomemos protobuf
(Protocol Buffers) como ejemplo.
Descarga el código fuente de protobuf y accede a su carpeta.
Configura el proyecto con
cmake
:-S .
indica que el código fuente está en el directorio actual;-B builddir
especifica la carpeta donde se generarán los archivos de compilación. Las opciones como-DCMAKE_INSTALL_PREFIX
cumplen funciones similares a--prefix
y apuntan la instalación a ServBay Development Library. Otros parámetros-D
ajustan configuraciones específicas deprotobuf
. Los flags-DCMAKE_MACOSX_RPATH=1
y-DCMAKE_INSTALL_RPATH
aseguran que las librerías encuentren correctamente sus dependencias en el entorno de ServBay.bash# Supón que ya estás en el directorio fuente de 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
21Ejecuta
cmake --build
ycmake --install
: Concmake --build builddir
compilas dentro del directorio designado. Luego,cmake --install builddir
instalará los archivos producidos en los caminos indicados por-DCMAKE_INSTALL_PREFIX
.bashcmake --build builddir -j ${CPU_NUMBER} cmake --install builddir
1
2
Compilar módulos de PHP
Si necesitas compilar extensiones adicionales para alguna versión de PHP en ServBay (por ejemplo, swoole
, redis
, mongodb
, etc.), consulta la documentación específica:
Compilar módulos de PostgreSQL
Para compilar módulos adicionales para alguna versión de PostgreSQL en ServBay, consulta la guía dedicada:
Cómo compilar módulos de PostgreSQL
Resumen
Gracias a ServBay Development Library y su exhaustiva configuración de variables de entorno, los desarrolladores pueden recompilar y personalizar fácilmente paquetes de software en macOS. Esto te brinda una gran flexibilidad para satisfacer los requerimientos particulares de cada proyecto o aprovechar las versiones más recientes de las librerías. Recuerda siempre revisar cuidadosamente la guía oficial de compilación de cada paquete y ajustar los pasos según sus instrucciones y necesidades.