Ubuntu下以root执行Synology DSM打包脚本遇/dev/null权限拒绝错误
解决pkgscripts-ng执行时的/dev/null权限拒绝与root身份验证错误
问题现象
使用pkgscripts-ng构建Synology DSM测试包时,执行脚本抛出以下错误:
/pkgscripts-ng/include/check: line 93: /dev/null: Permission denied ERROR: This script must be run as root
已通过sudo -i切换为root,直接执行id | grep "uid=0" >/dev/null无异常,但脚本执行仍报错。
解决方案
1. 修复/dev/null的权限
首先检查/dev/null的权限是否正常:
ls -l /dev/null
正常输出应为:crw-rw-rw- 1 root root 1, 3 ...。如果权限不符,执行以下命令修复:
chmod 666 /dev/null
2. 排查环境限制(AppArmor)
Ubuntu默认启用AppArmor,可能会限制脚本对/dev/null的访问。临时关闭AppArmor测试:
systemctl stop apparmor
执行脚本测试是否正常,若解决问题,可根据开发需求调整AppArmor规则,或保持关闭(仅开发环境建议)。
3. 修复脚本中的语法错误
提供的CheckPermission函数存在语法错误:if块内误用了case语句的双分号(;;),会导致脚本逻辑异常。将函数修改为:
CheckPermission() { # Only root can run this id | grep "uid=0" >/dev/null if [ $? != "0" ]; then echo "ERROR: This script must be run as root" echo "" exit 1 fi # Stop!! If /root/.chroot does not exist if [ ! -f /root/.chroot ]; then echo "ERROR: Please chroot first!!" echo "" exit 1 fi }
4. 确认chroot环境准备
脚本要求存在/root/.chroot文件,说明需先进入pkgscripts-ng对应的chroot环境。按照工具文档执行准备步骤,例如运行./pkgscripts-ng/prepare脚本完成chroot环境配置后,再执行构建命令。
内容的提问来源于stack exchange,提问作者Volodymyr Usarskyy
相关产品推荐
相关产品推荐

