Fedora编译AOSP(crDroid)报错chmod ninja.sh Operation not permitted求助
问题原因
- 该报错由Fedora默认的安全机制拦截构建操作导致:报错中提到的
ninja.sh是ckati在编译流程中临时生成的脚本,生成后会快速销毁,不会持久化存储在磁盘中,因此全局搜索无法找到对应文件。 - Ubuntu的默认安全策略对AOSP类构建流程的适配度更高,不会拦截这类临时生成脚本的权限修改操作,因此相同源码在Ubuntu环境下可正常编译。
- 具体触发拦截的常见原因有三类:
- 存放ROM源码的分区被挂载了
noexec参数,禁止分区内的文件被赋予执行权限 - Fedora默认启用的*fapolicyd(文件访问控制守护进程)*拦截了临时脚本的chmod操作
- SELinux默认策略拦截了构建过程中的非常规权限修改操作
- 存放ROM源码的分区被挂载了
解决方案
按优先级依次尝试以下操作:
- 排查分区挂载参数
执行命令mount | grep <你的ROM源码存放根路径>,检查输出中是否包含noexec标识。如果存在,执行以下命令重新挂载分区移除noexec限制:sudo mount -o remount,exec <ROM源码所在分区的挂载路径>
如需永久生效,修改/etc/fstab中对应分区的挂载配置,删除noexec参数即可。 - 临时关闭fapolicyd服务
编译前执行命令:sudo systemctl stop fapolicyd
编译完成后可执行sudo systemctl start fapolicyd恢复防护。如果需要长期编译AOSP,可自行添加fapolicyd规则将源码目录加入访问白名单。 - 临时关闭SELinux强制模式验证
执行命令:sudo setenforce 0
重新尝试编译,如果问题解决,编译完成后执行sudo setenforce 1即可恢复SELinux防护,也可自定义SELinux策略豁免编译相关的权限操作。 - 权限校验
确认执行编译操作的普通用户对源码目录、out输出目录有完整的rwx权限,不要使用root用户执行编译操作。
内容的提问来源于stack exchange,提问作者fishe
相关产品推荐
相关产品推荐

