REEMPLAZO DE LICENCIA (demo -> comercial)

El webphone, el plugin userlist y el módulo framework se distribuyen con UNA
sola licencia física:

  /var/www/html/phone/license.phpxlic

Todo el código encriptado vive bajo /var/www/html/phone/ (index.php,
access.php, libs/, plugin/, modules/). El loader (phpx_loader.so) busca
license.phpxlic junto al archivo encriptado o en directorios padres, así que
la licencia en /var/www/html/phone/ cubre todos los componentes sin symlinks.

Cuando el cliente compra la licencia completa, reemplazar UN SOLO archivo
(la nueva licencia debe estar firmada por tu autoridad, con el MISMO key-id
y content key del build; ver nota abajo) y recargar PHP para que los workers
relean la licencia (el loader valida path+mtime+size al recompilar):

  # install -m 0644 /ruta/licencia-recibida.phpxlic \
  #     /var/www/html/phone/license.phpxlic && \
  # systemctl reload php-fpm     (o apachectl graceful)

ACTUALIZACIONES DEL PAQUETE (dnf/yum)

license.phpxlic se declara %config(noreplace) en el RPM:

- Instalación nueva: se escribe la licencia demo incluida.
- Cliente con licencia FULL activada (archivo reemplazado): un dnf update
  NO la pisa. El archivo del cliente se conserva y la demo incluida en el
  nuevo paquete queda como license.phpxlic.rpmnew junto a ella (ese
  .rpmnew puede borrarse con seguridad).

NOTA: la licencia completa debe firmarse con la private key que corresponde
a la public key embebida en el phpx_loader.so instalado, usar el MISMO
key-id y derivarse del mismo master key con que se encriptaron los archivos.
Si cambia el master key, hay que re-buildear el RPM (los archivos fueron
encriptados con ese contenido).
