本质上,我正在寻找一个完全沉默,非交互式的版本
freebsd-update fetch freebsd-update install
和
portsnap fetch update
对于FreeBSD <10,以下工作:
允许freebsd-update在没有附加到terminal的stdin情况下运行提取:
sed 's/\[ ! -t 0 \]/false/' /usr/sbin/freebsd-update > /tmp/freebsd-update chmod +x /tmp/freebsd-update
允许portsnap运行提取没有stdin连接到terminal:
sed 's/\[ ! -t 0 \]/false/' /usr/sbin/portsnap > /tmp/portsnap chmod +x /tmp/portsnap
学分: veewee
对于FreeBSD 10+,下面的@uchida答案应该是首选的!
在FreeBSD 10.0R和更高版本上,在freebsd-update上设置PAGER环境variables
env PAGER=cat freebsd-update fetch freebsd-update install
对于FreeBSD 10.0R及更高版本上的portsnap(8) ,缺省行为,即没有--interactive选项,是非交互式的。
portsnap fetch update
在FreeBSD-10.2上有一个新的选项来允许这个:
freebsd-update install --not-running-from-cron
从手册 :
--not-running-from-cron Force freebsd-update fetch to proceed when there is no controlling tty. This is for use by automated scripts and orchestration tools. Please do not run freebsd-update fetch from crontab or similar using this flag, see: freebsd-update cron
盲目安装更新(甚至是freebsd-update更新)可能是一件坏事: rc.conf一个选项会发生变化,并且您的计算机突然没有SSH守护进程了。
同样,你可能不想盲目地通过portsnap / portupgrade -a来安装所有可用的端口更新 – 你可能会采取一个主要的版本号冲突并打破宇宙,或者你可能只是有一个新的configuration选项需要的端口改变(你可以使端口接受他们的默认值,但有时这不是你想要的)。
最好的方法是使用像Puppet或radmind这样的configurationpipe理工具来部署您的更改。
根据您已成功升级和testing的方框制作机器模板,然后将其部署到环境的其余部分。 这可以确保您推出一个正常工作的系统configuration,而且您只需要执行一次手动步骤(在您模板化的机器上)。
对于FreeBSD版本> 11
freebsd-update是一个脚本,并且有“询问用户是否一切正常”的函数。 function是:
continuep()
在这个函数中只需要注释就足够了
返回0
之后,这个函数返回“y / n”问题的正面答案。
重要! 请记住,这不是build议,只有你自己的风险!
# /tmp/freebsd-update -r 11.1-RELEASE upgrade ; while [ $? -eq 1 ] ; do sleep 3; /tmp/freebsd-update -r 11.1-RELEASE upgrade ; done