在 FreeBSD/FreeNAS 上使用 iocage 升级基本监狱失败

在 FreeBSD/FreeNAS 上使用 iocage 升级基本监狱失败

我尝试在运行 FreeBSD 11.3 的 FreeNAS 服务器上将一些 11.3 基础监狱升级到 11.4。我用了:

iocage upgrade -r 11.4-RELEASE my-jail-name

一些监狱因etcupdate failed! Rolling back snapshot消息而失败。当我尝试etcupdate在监狱内部和外部使用手动运行时,iocage exec我收到了进一步的消息:Failed to build new tree.出了什么问题?

答案1

事实证明,/usr/local/sbin/etcupdate脚本失败的原因是因为它通过设置chflags schg系统不可变标志来保护某些文件不被删除,请参见该脚本的第 213 行:

chflags -R noschg $1 >&3 2>&1 || return 1

不幸的是,它无法进一步清除该标志,并且第 265-266 行出错Operation not permitted

chflags -R noschg $1 >&3 2>&1
rm -rf $1 >&3 2>&1

这是因为即使监狱有必要的allow_chflags设置,它securelevel也是默认值,2允许schg设置不是允许它成为未设置。

为了解决这个问题,我需要将监狱改为securelevel临时0的,确保allow_chflags已打开,然后才能iocage upgrade正常工作。升级后,我将 改回securelevel更安全的默认值2

我将其发布在这里,以防对其他人有所帮助。

相关内容