如何以非交互方式更新 FreeBSD 系统(和端口)?

如何以非交互方式更新 FreeBSD 系统(和端口)?

本质上,我正在寻找一个完全静音、非交互式的版本

freebsd-update fetch
freebsd-update install

portsnap fetch update

答案1

在 FreeBSD-10.2 上有一个新的选项可以允许这样做:

freebsd-update fetch --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

答案2

在 FreeBSD 10.0R 及更高版本上,在 freebsd-update 上设置 PAGER 环境变量

env PAGER=cat freebsd-update fetch
freebsd-update install

为了端口快照(8)在 FreeBSD 10.0R 及更高版本中,默认行为(即没有--interactive选项)是非交互式的。

portsnap fetch update

答案3

对于 FreeBSD < 10,以下内容有效:

允许在不连接终端的情况freebsd-update下运行 fetch :stdin

sed 's/\[ ! -t 0 \]/false/' /usr/sbin/freebsd-update > /tmp/freebsd-update
chmod +x /tmp/freebsd-update

允许在不连接终端的情况portsnap下运行 fetch :stdin

sed 's/\[ ! -t 0 \]/false/' /usr/sbin/portsnap > /tmp/portsnap
chmod +x /tmp/portsnap

致谢:维威


对于 FreeBSD 10+,应优先考虑@uchida 在下面答案中提供的解决方案!

答案4

对于 FreeBSD 版本 > 11

freebsd-update 是一个脚本,其中有一个“询问用户一切是否正常的功能”。该功能为:

继续 ()

在这个函数中注释掉所有内容就足够了,但是

返回 0

此后,该函数对“y/n”问题返回肯定答案。

重要提示!请记住,我们不建议这么做,风险自负!

# /tmp/freebsd-update -r 11.1-RELEASE upgrade ; while [ $? -eq 1 ] ; do sleep 3; /tmp/freebsd-update -r 11.1-RELEASE upgrade ; done

相关内容