Linux环境下构建Pyodide遇Permission Denied错误求助
解决Pyodide源码构建时的Permission Denied错误
问题描述
尝试从源码构建Pyodide,执行make命令时触发权限拒绝错误:
savakar@Qulal:/media/savakar/PROJECTS/pyodide$ make ./tools/dependency-check.sh /bin/bash: line 1: ./tools/dependency-check.sh: Permission denied make: *** [Makefile:201: check] Error 126
已通过Dockerfile安装构建依赖,且执行过以下权限命令但问题未解决:
chmod 777 -R /media/savakar/PROJECTS/pyodide/ chmod +rwx -R pyodide/ chmod +rwx -R ./tools
可能的原因及解决方案
1. 外部存储挂载时禁用了执行权限
项目目录位于/media/savakar/PROJECTS/,大概率是外部存储设备(如USB硬盘),这类设备挂载时可能默认添加了noexec选项,禁止执行任何脚本文件。
操作步骤:
- 检查挂载选项:执行
mount | grep /media/savakar/PROJECTS,确认输出中是否包含noexec。 - 重新挂载并开启执行权限:
替换sudo umount /media/savakar/PROJECTS sudo mount -o exec,rw /dev/[你的设备名] /media/savakar/PROJECTS[你的设备名]为实际设备标识(可通过lsblk命令查看,例如/dev/sdb1)。 - 永久生效:编辑
/etc/fstab文件,找到对应挂载项,将noexec替换为exec,执行sudo mount -a重新挂载。
2. 脚本文件的执行位未正确设置
递归设置目录权限时,可能因文件系统限制或命令遗漏,导致目标脚本的执行权限未生效。
操作步骤:
- 直接为目标脚本添加执行权限:
chmod +x ./tools/dependency-check.sh - 验证权限:执行
ls -l ./tools/dependency-check.sh,确认输出中包含x权限(例如-rwxrwxrwx)。
3. SELinux限制(若系统启用SELinux)
部分Linux发行版默认启用SELinux,即使文件权限正确,也可能阻止脚本执行。
操作步骤:
- 临时关闭SELinux测试:执行
sudo setenforce 0,重新运行make验证。 - 永久生效(可选):编辑
/etc/selinux/config,将SELINUX=enforcing改为SELINUX=permissive,重启系统;或为脚本添加SELinux上下文:sudo chcon -t bin_t ./tools/dependency-check.sh
4. Docker容器内的权限映射问题
若在Docker容器中执行构建,可能存在宿主目录与容器内权限不匹配的问题。
操作步骤:
- 运行容器时指定与宿主一致的用户ID:
docker run -u $(id -u):$(id -g) -v /media/savakar/PROJECTS/pyodide:/pyodide [你的镜像名] - 或在Dockerfile中添加权限设置步骤:
RUN chmod -R +rwx /pyodide
内容的提问来源于stack exchange,提问作者Savakar Rohan
相关产品推荐
相关产品推荐

