pbt es una herramienta escrita en BASH que permite compilar PHP desde el código fuente, pbt es la evolución del script php-build.sh permitiendo mayor flexibilidad y personalización en el proceso de compilación/instalación de PHP. Algunas de las ventajas de usar pbt son:
- Usa un fichero de configuración (pbt.ini) en lugar de las opciones de línea de comandos.
- Descarga/descompacta la versión de PHP especificada en el fichero de configuración e inicia el proceso de compilación e instalación de forma automática.
-
Permite habilitar/deshabilitar extensiones comunes a través del fichero common.conf que se encuenta en el DIR extensions.
-
Permite habilitar/deshabilitar extensiones específicas, por ejemplo de BD, usando el fichero de configuración pbt.ini y ficheros relacionados con el nombre de la extensión que se encuentran en el DIR extensions, ejemplo: mysql.conf.
-
Permite habilitar extensiones para una versión de PHP específica, ejemplo el fichero php-7.2.x.conf que se encuentra debajo del DIR extensions.
-
Permite ejecutar acciones previas al proceso de compilación como instalar dependencias necesarias. Las acciones previas se encuentran debajo de DIR pre-build, ejemplo de acciones previas: centos, centos-php-7.2.x
-
Permite ejecutar acciones posteriores al proceso de instalación como crear el fichero de configuración de PHP y creacion de scripts de inicialización. Las acciones finales se encuentran debajo del DIR post-install.
-
Usa curl como gestor de descarga permitiendo usar metalinks siempre y cuando la característica metalink esté disponible en curl, en caso contrario se usará curl en su forma estandar, el script iterará por cada servidor espejo de PHP hasta encontrar el primero que responda con éxito a la petición de descarga.
-
Realiza pruebas de integridad de PHP en caso fallido el proceso de compilación se aborta.
Estructura de directorios
Directorios
downloads: Cache de ficheros descargados si hubo una descarga parcial o corrupta debe limpiar la cache.
extensions: Configuración de extensiones.
metalinks: Se guardan los metalinks generados, se genera un metalink por cada version de PHP a descargar, la version se especifica en el pbt.ini.
post-install: Acciones posteriores a la instalación, ejemplo activar opcache.
pre-build: Acciones previas al proceso de compilación, ejemplo instalar dependencias.
signatures: Donde se almacenan las firmas digitales, la firmas digitales deben descargarse manualmente desde el sitio de PHP, ver ejemplo dentro del DIR.
Ficheros
pbt: Fichero desarrollado en BASH que ejecuta todo el proceso de descarga/compilación/instalación.
pbt.ini: Fichero de configuración.
mirrors.txt: Lista de mirror de donde se descargará PHP en caso de curl no soportar metalinks.
template.metalink: Plantilla para crear los metalinks.
pbt/ ├── downloads ├── extensions ├── LICENSE ├── metalinks ├── mirrors.txt ├── pbt ├── pbt.ini ├── post-install ├── pre-build ├── signatures └── template.metalink
Fichero de configuración
El fichero de configuración pbt.ini permites establecer parámetros que serán usados durante el proceso de compilación.
# Uncomment only if /etc/os-release file does no exists
# os_id=fedora
# os_version=26
php_version=7.3.6
compression=tar.xz
# fpm|mod_php
php_mode=fpm
fpm_user=phpfpm
fpm_group=phpfpm
# [IP:]PORT
fpm_listen=9000
# IPs separated by ,
fpm_allowed_clients=
# Allow to execute pre-build or post-install actions, vallue: apache-prefork|apache-worker|nginx|builtin or leave empty if the webserver
# is installed or you want to install and configure the webserver by
# yourself
web_server=
install_prefix=/usr/
# Non thread safe (nts)|Thread safe. Reserved for future use
# thread_model=nts
# sysv|systemd
sysinit=systemd
# This allows to create multiple init script for multiple php installation
# a value of true creates versioned sysinit script for example php72-fpm
# systemd unit
sysinit_versioned=true
# Allow to enable DB extension also to execute DB pre-build or post-install actions, value: mysql sqlite postgrep
databases="mysql sqlite postgre"
# dev|prod
php_env=dev
php_version: Establece la versión a descargar/compilar de PHP.
compression: Establece la extensión del fichero a descargar.
php_mode: Establece el modo en que se ejecutará PHP: fpm o mod_php
fpm_user: Usuario bajo el cual se ejecutará el servicio fpm.
fpm_group: Grupo bajp el cual se ejecutará el servicio fpm.
fpm_listen: Puerto en el cuál estará recibiendo conexiones el servicio fpm.
fpm_allowed_clients: Resgtringir por IPs (separadas por ,) el acceso al servicio fpm. Dejar en blanco para permitir el acceso desde cualquier dispositivo.
web_server: Tiene el propósito de ejecutar acciones previas a la compilación / posteriores a la instalación, ejemplo instalar el servidor nginx, ver acción previa: centos-nginx.
install_prefix: Directorio donde se instalará PHP.
sysinit: Especifica como crear los scripts de inicialización, sysv o systemd.
sysinit_versioned: Un valor de «true» permite crear scripts de inicialización versionados, ejemplo php72-fpm, permitiendo tener instalada/usar más de una versión de PHP al mismo tiempo.
databases: Compila PHP con los drivers especificos para las BD definidas en esta opción, permite ejecutar acciones previas a la compilación, posteriores a la instalación.
php_env: Crea el php.ini de acuerdo al ambiente especificado.
Uso
Para usar pbt puede descargar el compactado desde github o clonar el repo, luego darle permisos de ejecución al fichero pbt chmod a+x pbt
establecer las opciones deseadas en el fichero pbt.ini y teclear ./pbt
el proceso de descarga/compilación/instalación comenzará de inmediato, pbt ha sido probado en CentOS 7, Debian 9.
Compilando PHP desde el código fuente, 2 (11)
- Cómo compilar PHP 7.1 en Ubuntu 16.04
- pbt – Una herramienta para compilar PHP
- Cómo Compilar/Instalar PHP-7.2 en CentOS
- Cómo compilar PHP-7.3 en Debian GNU/Linux
- ¿Cómo Compilar PHP 7.4 en Ubuntu 18.04?
- ¿Cómo Compilar PHP 8 en Debian 10?
- Compilar php 5.5 con soporte apache prefork
- Compilar PHP-5.6 con soporte para Apache Worker
- Compilar php-5.6 con soporte fpm
- Compilar PHP-5.6 en Centos 7
- Compilar PHP 7 en Debian 8