【问题标题】:Using %{buildroot} in a SPEC file在 SPEC 文件中使用 %{buildroot}
【发布时间】:2023-05-28 09:25:02
【问题描述】:

我正在创建一个简单的 RPM 安装程序,我只需要将文件复制到我在 %install 进程中创建的目录结构中。

%install 进程很好,我使用命令mkdir -p %{buildroot}/opt/company/%{name} 创建以下文件夹/opt/company/application/,然后继续从我的包中复制文件和子目录。我已经尝试安装它并且它可以工作。

我在卸载时遇到了疑问。我想删除文件夹/opt/company/application/,我认为您应该在引用安装位置时在任何地方使用%{buildroot}。因为我的理解是用户可能有不同的结构,你不能假设rmdir /opt/company/%{name}/ 会起作用。在%postun 部分中使用该命令会成功删除目录,而使用rmdir ${buildroot}/opt/company/%{name} 不会删除文件夹。

我的问题是,您不应该在%postun 中使用${buildroot} 以获得正确的安装位置吗?如果不是这样,为什么?

【问题讨论】:

    标签: uninstallation rpmbuild specifications


    【解决方案1】:

    别担心。如果您在 %files 部分中声明该目录为您自己的目录,RPM 将为您处理它。

    仅供参考,%{buildroot} 可能不会存在于目标机器上。

    【讨论】:

    • 嗯,是的,我在%files 部分声明该目录是我自己的。那么,无论我在%files 部分写什么,我都需要在%postun 部分使用(如果需要的话),不是吗?你是对的,%{buildroot} 不应该存在于目标机器上。
    • 默认情况下您不需要%postun - RPM 会自动删除您在%files 下声明的所有文件。