首先运行'/usr/sbin/freebsd-update.fixed fetch'
Poudriere 可能应该在告诉它安装(可能不存在的)更新之前检查 freebsd-update 是否找到任何更新,以避免用户对上述消息感到困惑。
~/git/poudriere # grep 'Run.*first' `which freebsd-update` echo "首先运行'$0 install'。" echo "首先运行'$0 fetch'。"
这是来自freebsd-update
。
报告中没有更多上下文,我不确定它在哪里以及在什么条件下显示。
问题是 jail.sh 运行/usr/sbin/freebsd-update.fixed fetch install
。 如果fetch
发现不需要更新(例如,这是一个还没有任何安全建议的新版本),则install
打印出令人困惑的消息。
解决方案是运行/usr/sbin/freebsd-update.fixed fetch
,检查是否获取了任何更新,然后运行/usr/sbin/freebsd-update.fixed install
。
如何确定是否获取了任何更新?
检查/var/db/freebsd-update/f465c3739385890c221dff1a05e578c6cae0d0430e46996d319db7439f884336-install
是否是符号链接。
我宁愿不做这样的层违规并让 Poudriere 像这样依赖于 freebsd-update 的内部文件。 我只是将消息发送出去(就像 tty 检查之类的其他代码一样)。
如果 Poudriere 可以检测到是否刚完成提取,那么为什么 freebsd-update 打印消息?
为什么 freebsd-update 打印消息
因为freebsd-update fetch install
是freebsd-update fetch; freebsd-update install
的同义词。
是的,但是您告诉我 poudriere 可以检测是否刚刚获取了更新,因此freebsd-update install
应该能够检测到,如果尚未获取任何内容,则不会打印无意义的消息。 一个简单的 mtime 比较就可以解决这个问题,就像我们对pkg update
所做的一样,只显示最后一次获取时间过时后的消息。
是的,freebsd-update 应该可以处理这个问题。 我最初没有这样做的原因是我不想鼓励人们盲目下载和安装更新。
但此时即使我修复了 freebsd-update,poudriere 也会调用旧的 freebsd-update 代码好几年,所以教 poudriere 删除它会避免一些混乱。
最有用的评论
是的,freebsd-update 应该可以处理这个问题。 我最初没有这样做的原因是我不想鼓励人们盲目下载和安装更新。
但此时即使我修复了 freebsd-update,poudriere 也会调用旧的 freebsd-update 代码好几年,所以教 poudriere 删除它会避免一些混乱。