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).

Leer Mas: Cómo instalar todas las extensiones de PHP 8.3 en CachyOS para que Composer funcione de una vez

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:

  1. Ninguna extensión “viene por defecto” — hay que instalarlas explícitamente.
  2. 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-iconv

Qué hace cada flag

FlagFunción
--noconfirmSalta el prompt de “¿Instalar? [SI]/no”
--answerdiff NoneEvita que te pregunte si quieres ver diffs del PKGBUILD
--answerclean AllLimpia directorios de build previos sin preguntar
--removemakeBorra dependencias de compilación (make) una vez terminado
--cleanafterLimpia 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 update

Si 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-mirrorlist

Con 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.