
Me gustaría usar el ntpd
demonio común para probar si una máquina virtual mantiene el tiempo o no, sin permitir que realmenteajustarel reloj.
Estoy ejecutando Solaris 11.4 (la imagen estándar de Oracle para Intel) dentro de VirtualBox en un sistema macOS y no tengo tiempo para sincronizar correctamente. Me di cuenta de que la máquina virtual bien podría estar usando VirtualBox Guest Additions para hacer esto (no sé cómo funciona) y que podría estar alterando el cronometraje al ejecutar ntpd
el invitado.
Para probar esto, pensé en configurar ntpd
en Solaris VM paramonitoralgunos servidores de hora públicos, pero de alguna manera evita que modifique el reloj local. De esa manera podría ver cómo se veían los registros loopstats
y peerstats
a lo largo del tiempo para ver si el reloj local realmente mantenía la hora correcta.
El problema es que no puedo encontrar ninguna pista sobre cómo dejar ntpd
de ajustar el reloj local.
También quise hacer esto en el pasado en sistemas donde uso openntpd
(de OpenBSD) para llevar el tiempo real. El ntpd
demonio podría entonces simplemente sentarse en segundo plano y monitorear, sin interferir. Pero tampoco entonces pude encontrar ninguna manera de lograrlo.
Respuesta1
ntpd
Entendiendo que tudebeuse ntpd, las únicas opciones que yo sepa son:
desactivar ntp
Como se ve enla ntp.conf
página del manualexiste la posibilidad de desactivar el ntpBucle de retroalimentación, o, en términos simples: eliminar la capacidad de calcular correcciones de tiempo entre los servidores de tiempo y el reloj local. La ntp.conf
línea necesaria para activar dicha opción es:
disable ntp
Nota: al utilizar esta opción, la hora que ntpd puede dar a otros sistemas que solicitan una referencia de hora podría ser incorrecta o desactivada. Parece razonable usar una línea de deny
para denegar todas las consultas de tiempo de otros sistemas a menos que desee monitorear la variación del tiempo desde un sistema externo (use denegar y permitir la IP del sistema externo).
Nota:No me queda del todo claro que ntpd deje que el reloj del sistema "funcione libremente". Sin embargo, es una opción documentada, por lo que si ntpd no cumple con lo documentado, es un error.
minsano
minsane minsane
Este es el número mínimo de candidatos disponibles para el algoritmo de selección de reloj para producir uno o más truechimers para el algoritmo de agrupamiento. Si hay menos de este número disponible,el reloj es indisciplinado y se le permite correr libremente.
Esto se hace estableciendo una línea (in ntp.conf
) como:
tos minsane 100
O algún otro número elevado (mayor que los servidores disponibles o utilizados).
Nota: no me queda claro que el valor de deriva del kernel se restablezca a 0 para evitar que el reloj cambie lentamente de valor. Puede ser razonable configurar adicionalmente disable kernel
para deshabilitar las funciones disciplinarias del kernel.
Relacionado
ntpd-qn
Cuando un ntpd
servidor se está ejecutando, ntpq -pn
podría informar qué tan bien el servidor ntpd está haciendo su trabajo de mantener sincronizado el reloj del sistema. Esa es una forma alternativa de registrar la diferencia horaria.
ntpdate -q
El paquete ntpdate
(que está etiquetado como obsoleto) se puede utilizar para comprobar la diferencia horaria con:
ntpdate -q 'pool.ntp.org' # marked as deprecated.
Úselo ntpdate -qu 'pool.ntp.org'
para que el comando no necesite privilegios de root para ejecutarse ( -u
significa "usar puertos de red sin privilegios", aún así, el ejecutable debe ser accesible para el usuario).
SNTP
Hay un programa simple para consultar (no cambiar si no se usa la opción -s o -S):
sntp pool.ntp.org
fecha
El programa rdate
es capaz de mostrar la hora remota (y la hora local):
rdate -np pool.ntp.org; date
Dónde-n
significa: Utilice SNTP (RFC 2030) en lugar del protocolo de tiempo RFC 868 (predeterminado); y, a sóloimprimirel resultado sin realizar ningún cambio real.
Sin embargo, este programa está limitado a una resolución de segundos enteros (no fracciones). y,no tiene opciones en solaris
crono
El paquete de reemplazo de ntp (chrony) es capaz de ejecutar una prueba de diferencia horaria sin configurar el reloj del sistema:
chronyd -Q 'pool pool.ntp.org iburst'
Creo que todos esos son métodos para detectar (sin cambiar) la diferencia horaria entre la hora ntp de Internet y la hora del sistema.
Respuesta2
Dudo que esto sea posible ntpd
listo para usar:
- En el fondo
ntpd
no lleva un "tercer" reloj.(Donde los dos primeros son losreloj del sistema y reloj monótono). - Funcionalmente
ntpd
está escrito para realizar ajustes no solo a la hora actual,sino también ajustar los parámetros que controlan la velocidad de ejecución del reloj del sistema. Implícitamente está escrito para monitorear el efecto de estos ajustes.
Si juntamos estos dos, es muy poco probable que ntpd tenga un modo que pueda mantener adecuadamente los valores de estos parámetros sin realizar ajustes en tiempo real.areloj, donde el único reloj disponible es el reloj del sistema.
En su pregunta no está claro si realmente lo necesita ntpd
. Cualquier cliente [S]NTP serviría.
Si se siente cómodo con un poco de código, entonces podría armar algo que sondee los servidores sin recalibrar el reloj del sistema.
Como ejemplo, existe una biblioteca NTP para Python llamadantplib. Un script para imprimir la compensación en una encuesta de 60 segundos podría verse así:
import ntplib
import sys
import time
def main(*args):
ntp_client = ntplib.NTPClient()
while True:
for server in args:
try:
response = ntp_client.request(server, version=3)
print(response.offset)
time.sleep(60)
except ntplib.NTPException:
print("query failed: {}".format(server))
if __name__ == "__main__":
if len(sys.argv) == 1:
# Do not use this server for commertial software without permission
main('pool.ntp.org')
else:
main(sys.argv[1:])
Pon esto en un archivo ntp_check.py
. Asegúrese de tener instalado ntplib con pip install ntplib
distribuciones específicas ( apt-get install python3-ntplib
). Entonces llámalo con:
python3 ntp_check.py