Alterar temporalmente la hora en un contenedor LXC

El procedimiento que se describe a continuación muestra como ajustar temporalmente la fecha y hora de un contenedor LXC para, por ejemplo, validar el comportamiento del sistema ante una fecha simulada.

Modificar la hora del sistema dentro de un contenedor LXC en PVE es una operación delicada, ya que los contenedores comparten el kernel con el host. Un cambio directo con date -s suele fallar por falta de privilegios (Operation not permitted) o, si el contenedor es privilegiado, puede afectar accidentalmente al host.

Para simular una hora distinta sin tocar el reloj real del sistema ni del host, la opción más segura y recomendada es usar libfaketime. Esta herramienta intercepta las llamadas al sistema de las aplicaciones para que «vean» una fecha ficticia.

A continuación, se describe el proceso para implementar esta alteración temporal.

Instalar libfaketime en el contenedor

apt update && apt install -y libfaketime

Configurar las variables de entorno para la sesión actual

libfaketime funciona inyectando una librería (.so) mediante la variable LD_PRELOAD y definiendo la hora falsa con FAKETIME.

Localiza la ruta de la librería instalada (suele estar en /usr/lib/x86_64-linux-gnu/faketime/ o /usr/lib/faketime/).

Exportar las variables en el shell (ejemplo para simular el 1 de Noviembre de 2025 a las 12:00:00):

export LD_PRELOAD=/usr/lib/x86_64-linux-gnu/faketime/libfaketime.so.1
export FAKETIME="2025-11-01 12:00:00"

Verificar la alteración

Ejecutar el comando date para comprobar que la aplicación ve la hora modificada:

date

La salida debería mostrar la fecha y hora especificadas en FAKETIME.

Restaurar la hora real

La alteración solo afecta a la sesión actual y a los procesos que hereden estas variables. Para volver a la normalidad, simplemente limpia las variables:

unset LD_PRELOAD
unset FAKETIME

Al ejecutar date de nuevo, verás la hora real del sistema.

⚠️ Advertencias importantes

  • No uses date -s: En contenedores LXC no privilegiados, el comando date -s fallará con Operation not permitted . En contenedores privilegiados, puede alterar el reloj del host y desestabilizar todo el nodo PVE.

  • Limitaciones de libfaketime: Esta librería funciona con aplicaciones enlazadas dinámicamente. Algunos binarios estáticos (como ciertas versiones de Java o Go) pueden ignorar la inyección o fallar al iniciarse . En caso de necesitar alterar la hora para evaluar un servicio específico (ej. un servidor web), se deberá iniciar ese servicio con las variables LD_PRELOAD y FAKETIME definidas.

Persistencia: Los cambios realizados con export desaparecen al cerrar la sesión. Si necesitas que un proceso mantenga la hora falsa, debes definir las variables en el script de inicio de dicho proceso o en el archivo de configuración de libfaketime (.faketimerc), pero esto puede complicar la gestión del contenedor.