Si acabas de instalar PHP 8.3 en CachyOS (o cualquier derivado de Arch) desde AUR y te encontraste con una cascada interminable de errores de composer update pidiendo extensiones que “deberían venir incluidas”, esta guía es para ti. Documentando el proceso completo que seguí para dejar funcionando un proyecto CodeIgniter 4 con dependencias de facturación electrónica (CFDI).
El problema: PHP en Arch viene troceado en paquetes AUR separados
A diferencia de otras distros donde php trae casi todo integrado, en Arch/CachyOS el paquete php83 del AUR está dividido en subpaquetes independientes por extensión (php83-dom, php83-xsl, php83-mysql, etc.), todos derivados del mismo pkgbase. Esto significa dos cosas importantes:
- Ninguna extensión “viene por defecto” — hay que instalarlas explícitamente.
- Como comparten
pkgbase, instalar una sola extensión nueva obliga a recompilar PHP completo, junto con todas las extensiones que ya tenías.
Síntoma inicial: Composer ni siquiera arranca
PHP Warning: PHP Startup: Unable to load dynamic library 'phar'...
PHP's phar extension is missing. Composer requires it to run.Sin phar, Composer no corre. Punto de partida obligado.
Los errores en cadena de composer update
Una vez con phar instalado, cada corrida de composer update revela otra extensión faltante:
- phpcfdi/cfdi-to-json require ext-dom * -> it is missing from your system.
- eclipxe/cfdiutils require ext-xsl * -> it is missing from your system.Composer te va soltando las dependencias una por una, no de golpe — así que si vas resolviendo extensión por extensión, terminas recompilando PHP completo varias veces por la naturaleza del pkgbase compartido.
La solución: instalar todo en un solo lote, desatendido
En vez de ir corrigiendo extensión por extensión (y recompilar PHP 5-6 veces), la jugada es instalar de una sola vez todas las extensiones que un stack típico de CI4 + CFDI (facturación electrónica) va a necesitar:
yay -S --noconfirm --answerdiff None --answerclean All --removemake --cleanafter \
php83-xsl php83-soap php83-bcmath php83-simplexml php83-tokenizer php83-fileinfo \
php83-ctype php83-dom php83-xml php83-xmlreader php83-xmlwriter php83-iconvQué hace cada flag
| Flag | Función |
|---|---|
--noconfirm | Salta el prompt de “¿Instalar? [SI]/no” |
--answerdiff None | Evita que te pregunte si quieres ver diffs del PKGBUILD |
--answerclean All | Limpia directorios de build previos sin preguntar |
--removemake | Borra dependencias de compilación (make) una vez terminado |
--cleanafter | Limpia los archivos temporales de compilación al finalizar |
Con esto, yay corre de principio a fin sin pedir intervención manual, y como todas las extensiones comparten pkgbase, PHP se recompila una sola vez con todo el set incluido — en vez de una recompilación completa por cada extensión suelta.
Por qué justo estas extensiones
Si trabajas con librerías de facturación electrónica mexicana (CFDI) vía Composer (eclipxe/cfdiutils, phpcfdi/cfditopdf, etc.), este es el patrón típico de requisitos:
xsl,dom,xml,xmlreader,xmlwriter,simplexml— parseo y transformación de los XML del CFDI/timbrado.soap— comunicación con PACs (Proveedores Autorizados de Certificación) para timbrado.bcmath— cálculos de precisión decimal en montos, impuestos y totales.tokenizer,ctype,fileinfo,iconv— requisitos base de CodeIgniter 4 y de muchos paquetes Composer modernos.
Verificación final
Una vez terminada la instalación:
php83 -m | grep -Ei 'dom|xsl|soap|bcmath|xml|tokenizer|ctype|fileinfo|iconv'
composer updateSi composer update resuelve sin errores de ext-* faltante, ya está: tu entorno CachyOS queda listo para correr CodeIgniter 4 con dependencias de facturación electrónica sin más sorpresas.
Bonus: evita recompilar cada vez que necesites otra extensión
Si en el futuro te falta una extensión nueva y no quieres esperar otra compilación completa del pkgbase de PHP, vale la pena activar Chaotic-AUR, un repositorio de binarios precompilados para paquetes de AUR (incluyendo todo el árbol php83-*):
sudo pacman-key --recv-key 3056513887B78AEB --keyserver keyserver.ubuntu.com
sudo pacman-key --lsign-key 3056513887B78AEB
sudo pacman -U 'https://cdn-mirror.chaotic.cx/chaotic-aur/chaotic-keyring.pkg.tar.zst' \
'https://cdn-mirror.chaotic.cx/chaotic-aur/chaotic-mirrorlist.pkg.tar.zst'Y agregando al final de /etc/pacman.conf:
[chaotic-aur]
Include = /etc/pacman.d/chaotic-mirrorlistCon eso, la próxima extensión que necesites se instala en segundos vía pacman, sin pasar por makepkg.
Resumen para el que tenga prisa: en CachyOS/Arch, PHP viene fragmentado por extensión en AUR bajo un mismo pkgbase. En vez de ir instalando una por una según te las va pidiendo Composer, identifica de una vez el set completo que necesita tu stack (CI4 + CFDI, en mi caso) e instálalo todo junto con yay -S --noconfirm --answerdiff None --answerclean All --removemake --cleanafter <paquetes>. Te ahorras varias recompilaciones completas del core de PHP.
Deja un comentario