如何控制RPM打包文件安装到指定目录?

2023-12-30 12:40:39

在RPM打包时,如何控制文件安装到指定目录可以通过SPEC文件的 %files 部分来实现。以下是一个更加详细的示例,并对其中关键部分进行解释:

Name: mypackage
Version: 1.0
Release: 1%{?dist}
Summary: Example package containing files in custom directories
License: GPL
Source0: %{name}-%{version}.tar.gz
BuildRoot: %{_tmppath}/%{name}-buildroot

%description
This is an example RPM package that installs files to specific directories.

%prep
%setup -q

%build
# Build commands go here, e.g., configure && make

%install
rm -rf $RPM_BUILD_ROOT
mkdir -p $RPM_BUILD_ROOT/opt/myapp/bin
mkdir -p $RPM_BUILD_ROOT/etc/myapp/conf.d
cp -rp ./bin/* $RPM_BUILD_ROOT/opt/myapp/bin/
cp -rp ./conf/*.conf $RPM_BUILD_ROOT/etc/myapp/conf.d/

%files
%defattr(-,root,root,-)
%doc README.md LICENSE
%config(noreplace) /etc/myapp/conf.d/app.conf
%{_bindir}/%{name}        # This will install the binary from 'bin' directory
%dir /opt/myapp/bin         # This defines a directory structure
/opt/myapp/bin/*           # All files in this directory will be installed

%changelog
* Mon Dec 30 2023 noreply@example.com - 1.0-1
- Initial release.

解释:

  • %install 部分:
    • 清空构建根目录。
    • 创建指定的安装路径(例如 /opt/myapp/bin//etc/myapp/conf.d/)。
    • 将源代码目录中的二进制文件和配置文件复制到相应的构建根目录下的目标路径。
  • %files 部分:
    • %defattr(-,root,root,-) 指定默认的所有者、组和其他权限属性。
    • %doc 定义了文档文件,在安装包时会自动放置到系统的文档目录下。
    • %config(noreplace) 指定了一个可配置文件,并设置为“noreplace”模式,这意味着如果用户已经修改过该文件,则在升级包时不替换用户的自定义版本。
    • %{_bindir}/%{name} 是一个宏展开,它会将软件主程序按照系统标准的二进制目录(通常是 /usr/bin//usr/local/bin/)进行安装。
    • %dir /opt/myapp/bin 定义了一个目录结构,让RPM知道这是一个需要创建的目录,而不是一个普通的文件。
    • /opt/myapp/bin/* 表示安装该目录下所有的文件到指定的目标位置。

通过这种方式,当你运行 rpmbuild -bb mypackage.spec 命令时,生成的RPM包在安装时会把文件放到你指定的 /opt/myapp/bin/etc/myapp/conf.d 等目录中。

文章来源:https://blog.csdn.net/zhuzongpeng/article/details/135303540
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。