【问题标题】:How to write a spec file to build an rpm package?如何编写规范文件来构建 rpm 包?
【发布时间】:2019-04-04 21:24:25
【问题描述】:

如果我只有 4 个任务,如何编写用于构建 rpm 包的规范文件?

  1. 将 my_file 放在 /usr/local/mydir 中
  2. 将配置文件放在rsyslog.d中
  3. 将 logrotate 文件放在 logrptate.d 中
  4. 回显“某事”/etc/programm/programm.conf

我的尝试:

        1. Name: my_file
        2. Version: 1.0
        3. Release: 1
        4. Summary: A sample package
        5. Group: Applications/Productivity
        6. License: GPL
        7. Source0: my_file-1.0.tar.gz
        8. BuildArch: i386
        9. BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}.x86-64
       10.
       11. %description
       12. This package basically does nothing, but it potentially could
       13. do something useful.
       14.
       15.
       16. %prep
       17. %setup -q 
       18.
       19. %build
       20. 
       21.
       22. %install
       23. mkdir -p $RPM_BUILD_ROOT/usr/local/myfile
       24. 
       25. install my_file $RPM_BUILD_ROOT/usr/local/myfile
       26. install myfile-rsyslog.conf $RPM_BUILD_ROOT/etc/rsyslog.d
       27.
       28. install myfile-logrotate $RPM_BUILD_ROOT/etc/logrotate.d
       29.
       30. %files
       31. %defattr(-,root,root)
       32. /usr/local/myfile/my_file
       33. /etc/rsyslog.d/myfile-rsyslog.conf
       34. /etc/logrotate.d/myfile-logrotate
       35.
       36. %clean
       37. 
       38. rm -rf $RPM_BUILD_ROOT
       39.
       40. %post
       41. echo "something " >> /etc/programm/programm.conf

我理解错了什么?由于我没有在 %install 中创建目录,因此在构建 rpm 时,构建尝试安装到 rsyslog.d 并失败。正确的行动顺序应该是什么?然后任务很简单——只有 3 个文件,但在所有困难的地方都提供了解决方案。

【问题讨论】:

  • 失败的具体方式是什么?
  • 由于我没有在 %install 部分创建 logrotate 和 rsyslog 的目录,所以当执行命令时 - install myfile-rsyslog.conf $RPM_BUILD_ROOT/etc/rsyslog.d 包构建器会尝试将配置设置为 home/builder/rpmbuild/BUILD/my_file-1.0-1/etc/rsyslog.d,由于没有这样的目录,它会失败。但是我想在将安装软件包的用户的系统中已经在这些目录中安装配置。我想我做错了什么。

标签: centos redhat rpmbuild rpm-spec


【解决方案1】:

您缺少Requires,是的,如果您想将文件安装到其中,您需要创建这些目录..

9-11 之间的某处:

Requires: logrotate
Requires: rsyslog

然后在安装部分:

%{__install} -Dm 0644 myfile-rsyslog.conf $RPM_BUILD_ROOT/etc/logrotate.d/myfile-rsyslog.conf
%{__install} -Dm 0644 myfile-logrotate $RPM_BUILD_ROOT/etc/rsyslog.d/myfile-logrotate

在这里,%{__install} -Dm 0644 将文件放入目标目录,如果目标目录丢失,则创建目标目录。您的包不应拥有该目录。

【讨论】:

    猜你喜欢
    • 2013-01-10
    • 1970-01-01
    • 2018-06-16
    • 2021-05-15
    • 2020-06-12
    • 2012-10-16
    • 1970-01-01
    • 1970-01-01
    • 2011-08-02
    相关资源
    最近更新 更多