我尝试在运行 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
。
我将其发布在这里,以防对其他人有所帮助。