1. 准备目录结构和文件

首先请准备一个Linux环境,比如CentOS。
RPM打包使用的是rpmbuild命令,这个命令来自rpm-build包,这个是必装的。

yum install rpm-build

当然也可以直接安装rpmdevtools,这个工具还包含一些其他的工具,同时它依赖rpm-build,所以直接安装的话会同时把rpm-build装上。

yum install rpmdevtools

当然,根据不同的软件构建过程,还需要其他的编译打包工具,比如C语言的make、gcc,python的setuptools等,根据需要安装即可。

接下来需要创建正确的目录结构并将文件放入相应位置:

mkdir -p ~/rpmbuild/{BUILD,RPMS,SOURCES,SPECS,SRPMS}
cd ~/rpmbuild/SOURCES
mkdir saicbaseline_download-1.0

将需要的文件放到~/rpmbuild/SOURCES
将你的文件放入临时目录中(按照.spec中的路径):

cd ~/rpmbuild/SOURCES/
mkdir -p saicbaseline_download-1.0/opt/dsa/prodis/bin
mkdir -p saicbaseline_download-1.0/etc/prodis
mkdir -p saicbaseline_download-1.0/etc/systemd/system

cp saicbaseline_download saicbaseline_download-1.0/opt/dsa/prodis/bin/
cp saicbaseline_download.ini saicbaseline_download-1.0/etc/prodis/
cp saicbaseline_download.service saicbaseline_download-1.0/etc/systemd/system/

2. 创建压缩包

tar -czvf saicbaseline_download-1.0.tar.gz saicbaseline_download-1.0/
rm -rf saicbaseline_download-1.0/  # 清理临时目录

3. 将.spec文件放入正确位置

将你的.spec文件复制到SPECS目录:

cp saicbaseline_download.spec ~/rpmbuild/SPECS/

4. 构建RPM包

cd ~/rpmbuild/SPECS
rpmbuild -ba saicbaseline_download.spec

5. 检查生成的RPM包

构建完成后,你可以在以下目录找到生成的RPM包:

~/rpmbuild/RPMS/noarch/saicbaseline_download-1.0-1.el7.noarch.rpm

注意事项:

  1. 确保你拥有rpmbuild工具,如果没有可以通过yum install rpm-build安装
  2. 确保所有列在%files部分的文件都存在于正确的位置
  3. 如果构建过程中出现依赖错误,需要先安装相应的依赖包
  4. 你的.spec文件中引用了/opt/dsa/tools/bin/servicemgr,确保这个路径在构建环境中存在或修改为正确的路径

调试建议:

如果构建失败,可以查看详细的构建日志:

tail -f ~/rpmbuild/BUILD/saicbaseline_download-1.0/build.log

或者使用更详细的构建命令:

rpmbuild -ba --debug saicbaseline_download.spec

这样应该就能成功构建你的RPM包了。

P.S. 后附.spec文件

Name:           saicbaseline_download
Version:        1.0
Release:        1%{?dist}
Summary:        SAIC Baseline Download Service

License:        Apache
URL:            https://www.dsa.com.cn/
Source0:        %{name}-%{version}.tar.gz

Requires:       systemd
BuildRequires:  systemd
BuildArch:      noarch

%description
SAIC Baseline Download Service for PRODIS system.

%prep
%setup -q

%install
mkdir -p %{buildroot}/opt/dsa/prodis/bin
mkdir -p %{buildroot}/etc/prodis
mkdir -p %{buildroot}/etc/systemd/system
mkdir -p %{buildroot}/data/flash

# 使用完整路径(从 BUILD 目录开始)
install -m 755 %{_builddir}/%{name}-%{version}/opt/dsa/prodis/bin/saicbaseline_download %{buildroot}/opt/dsa/prodis/bin/
install -m 644 %{_builddir}/%{name}-%{version}/etc/prodis/saicbaseline_download.ini %{buildroot}/etc/prodis/
install -m 644 %{_builddir}/%{name}-%{version}/etc/systemd/system/saicbaseline_download.service %{buildroot}/etc/systemd/system/

%pre

%post
# Set permissions
chown -R prodis:users /data/flash
chmod 755 /data/flash

# Reload systemd and enable service
crm maintaince on
/opt/dsa/tools/bin/servicemgr add saicbaseline_download
/opt/dsa/tools/bin/servicemgr daemon-reload
crm maintaince off


%files
%attr(755,prodis,users) /opt/dsa/prodis/bin/saicbaseline_download
%config(noreplace) /etc/prodis/saicbaseline_download.ini
%attr(644,root,root) /etc/systemd/system/saicbaseline_download.service
%dir %attr(755,prodis,users) /data/flash

%changelog
* Wed May 28 2025 Lucas Zhang zhangyijie@dsa.com.cn - 1.0-1
- Initial package