Puppet 在没有时钟的设备上启动?

Puppet start on device with no clock?

我正在 Debian 14.04 嵌入式系统上使用 upstart 启动 Puppet 代理:

description "Puppet Agent"

start on started 2klic-gateway
stop on runlevel [!2345]

respawn

pre-start script
    if [ ! -f /var/lib/sc2klic/system.json ]; then
        stop ; exit 0
    fi
    puppet config set certname "$(hostname)"
end script

exec /usr/local/bin/puppet agent --no-daemonize

此设备或至少此版本没有硬件时钟。所以系统从 1970 年 1 月 1 日开始。

当我查看 /var/log/upstart/puppet-agent.log 时,我一遍又一遍地看到这个错误:

ESC[1;31mError: Could not parse application options: copyright with a year after 1972 is very strange; did you accidentally add or subtract two years?ESC[0m

是否可以在没有正确日期的情况下初始化 puppet 代理?

Puppet 代理版本 4.10.1

这个错误好像和文档有关所以不知道这里是不是应该报错。我提出了一个 pull-request 在这种情况下不触发的例外。

也就是说我们知道如果年份是 1970 年设备不在线,因此 puppet 无论如何都无法使用。

作为解决方法,我将以下内容添加到 upstart pre-start 脚本中:

while [[ $(date +%Y) == "1970" ]]
do
    sleep 30
done

这样我们就可以让 puppet 一直等待,直到设备连接到 NTP 服务器。