【问题标题】:Automatically set default permissions on installed files for entire target自动为整个目标设置已安装文件的默认权限
【发布时间】:2017-03-15 15:11:03
【问题描述】:

在 Gentoo 系统上,假设我有很多自制组件,每个组件都有一个 ebuild(正常情况),我想在安装阶段对文件应用默认权限。

有没有办法自动设置/配置已安装文件的默认权限,而无需修改每个 ebuild 文件?是否可以全局执行此操作(一项修改适用于所有 ebuild)?

我遇到过“libopts”、“diropts”、“exeopts”等,但它需要修改每个 ebuild 以设置我自己的默认权限。

【问题讨论】:

  • 对不起,我没有时间给出正确的答案,但听起来你可能有兴趣写一个 eclass。 eclass 使您能够共享代码和定义阶段的默认实现。您可以以autotools-utils.eclass 为例,通过定义函数«eclass-name»_src_install() 并使用EXPORT_FUNCTIONS 来定义默认src_install,并使用约定,例如调用ebuild 中约定定义的函数的函数或在检查您的 ebuild 设置的某些 envvar 后执行默认安装操作。
  • 我知道 eclass,但这不是我想要的,因为它需要修改每个 ebuild。我正在寻找在安装阶段更改文件默认权限的方法。
  • 我了解您希望避免向每个 ebuild 添加更多样板。但我认为inherit my-common-util 或所有 ebuild 的任何内容如果其他人要使用它们,就会使它们变得不那么混乱,尽管这可能不是你的意图。您是在尝试制作一个可以轻松分发到其他计算机并获得效果的叠加层,还是只是想破解您的一个单一系统?您可以通过修改/etc 中的系统或设置或其他方式来执行此操作,但这看起来很难看:-/
  • 我想这样做的唯一原因是因为我必须修改许多 ebuild,其中一些不是我的。似乎没有合适的方法来“按原样”实现我的想法

标签: security permissions gentoo ebuild


【解决方案1】:

bashrc 来救援!此文件是在构建运行的每个阶段之前获取的。您感兴趣的阶段称为preinst。此阶段将在将数据安装到磁盘之前运行。所以你的代码可能看起来像:

if [[ "${EBUILD_PHASE}" == 'preinst' ]] ; then
    if [[ -n "${D} ]] ; then
        find "${D}" -type f -print0 | xargs -0 chmod ...
        find "${D}" -type d -print0 | xargs -0 chmod ...
    else
        echo "Error"
    fi
fi

注意:代码未经测试,使用风险自负

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-10-17
    • 2012-04-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多