【发布时间】:2021-04-19 18:16:26
【问题描述】:
只是尝试为安装 buildroot 包后部署的一组文件自定义权限。找到了 FOO_PERMISSIONS 功能,这似乎是正确的方法:
define FOO_PERMISSIONS
/usr/share/foo/ r 775 root wheel - - - - -
endef
...
ifeq ($(BR2_PACKAGE_FOO),y)
$(eval $(generic-package))
endif
当在 /usr/share/foo/ 上使用“r”递归迭代时,问题发生在 FOO_PERMISSIONS 中。在该目录内有一些带有一些常规文件的子目录。但也有一些符号链接指向构建平台中不存在的嵌入式目标平台内的文件。例如:
/usr/share/foo/resources/foo.json -> /usr/share/foo/foo.json
makedevs 似乎没有正确管理符号链接:
makedevs: chown failed for /BUILDROOT/output/target/usr/share/foo/resources/foo.json: No such file or directory
文件存在:
$ ls -l /BUILDROOT/output/target/usr/share/foo/resources/foo.json -> /usr/share/foo/foo.json
但问题是,它是一个指向构建平台上缺少的文件的符号链接:
$ ls -l /usr/share/foo/foo.json
ls: cannot access '/usr/share/foo/foo.json': No such file or directory
可以通过不同方式修复此错误。第一种方法是在构建平台中触摸一个虚拟文件:
$ touch /usr/share/foo/foo.json
但这是一个令人讨厌的修复。
第二种方法是为每个部署的文件和符号链接设置权限,使用“f”管理常规文件和使用“l”类型的符号链接。
define FOO_PERMISSIONS
/usr/share/foo/path/to/regular/file f 775 root wheel - - - - -
/usr/share/foo/path/to/symlink l 775 root wheel - - - - -
....
endef
但这对于部署数百个文件的包来说不是一个合理的解决方案。在这种情况下,您失去了很好的递归功能。
第三种方法是在启动时在脚本内创建所有符号链接。但同样,这似乎不是解决符号链接权限问题的最方便的方法。
在这种情况下,最方便的方法应该是什么?
谢谢!
【问题讨论】:
标签: permissions symlink buildroot