【问题标题】:rpmbuild spec file %install section errorrpmbuild 规范文件 %install 部分错误
【发布时间】:2011-11-16 05:21:51
【问题描述】:

我有一个类似的规范文件:

BuildRoot: /tmp/build_%{name}-%{version}-%{release}

%prep
...
...

%install
# Directories
install -m 755 -d %{buildroot}/usr/app/mypackage/config
install -m 755 -d %{buildroot}/usr/app/mypackage/src
....

# Bash script
install -m 755 script/script1.sh %{buildroot}/usr/app/mypackage/config/script1.sh
install -m 755 script/script2.sh %{buildroot}/usr/app/mypackage/config/script2.sh
install -m 755 script/myapp-log %{buildroot}/etc/logrotate.d/myapp-log

当我运行 rpmbuild 时出现错误:

install: cannot create regular file `/tmp/build_my_app-1.0-2/etc/logrotate.d/myapp-log'

我可以通过在/tmp/build_my_app-1.0-2/ 目录中手动创建/etc//etc/logrotate.d 目录来解决此问题。

当我重新运行 rpmbuild 时,它会起作用。

我想这是因为我没有在我的安装部分创建这个目录,而是因为它与我的应用程序没有直接关系,我不想把它放进去。

我的猜测是我可以使用一些聪明的标签来解决这个问题,这样构建就可以在没有任何人工干预的情况下工作。

我的问题: 有人可以为我建议一种方法来实现这一点(假设它可能)或者我是否需要围绕 rpmbuild 编写一个脚本来首先设置它。

【问题讨论】:

    标签: linux rpmbuild rpm-spec


    【解决方案1】:

    您缺少在 %install 部分中创建安装目录的步骤。请记住,由于您可以在“不同”根目录中构建,因此您不能期望某些目录(例如 ${buildroot}/etc)存在。

    尝试添加

     mkdir -p ${buildroot}/etc/logrotate.d
    

    就在将文件复制到${buildroot}/etc/logrotate.d 的安装命令之前。

    【讨论】:

    • 好的,这是有道理的。 install -d ${buildroot}/etc/logrotate.d 会比 mkdir 更好吗?我只是想知道,因为大多数 linux 系统似乎已经有 logrotate 设置,我不希望在构建或安装时出现任何错误
    • @ghostJago,安装命令不会在部署时安装到操作系统,而是安装到 ${buildroot} 中,因此 %files 部分可以开始验证构建是否正确放置所有预期的文件都在预期的位置。您可以使用install -dmkdir -p,这并不重要,当您使用rpm --install package.rpm 时,这些命令都不会运行
    猜你喜欢
    • 2015-08-25
    • 2017-11-14
    • 2015-12-28
    • 1970-01-01
    • 2016-02-07
    • 2019-03-27
    • 1970-01-01
    • 2018-11-18
    • 1970-01-01
    相关资源
    最近更新 更多