rpmbuild测试例子

首先写spec文件<tmp.spec>:

 

%define _topdir /usr/src/rpm
%define _tmppath /var/tmp


Name:    TestDoc
Version: 1.0
Release: 1%{?dist}
Summary: Document compiler

Group:   documentation
License: KONG
Source0: %{name}.tar.gz

%description
This is for test.

%install
cp -p document.txt /home

%clean
rm -rf /home/Document.txt

%files

/home/document.txt

 

文件目录结构:
[root@root]$ ls -R /usr/src/rpm/
/usr/src/rpm/:
BUILD  RPMS  SOURCES  SPECS  SRPMS

/usr/src/rpm/BUILD:
document.tar.gz  document.txt

/usr/src/rpm/RPMS:
athlon  i386  i486  i586  i686  noarch

/usr/src/rpm/RPMS/athlon:

/usr/src/rpm/RPMS/i386:

/usr/src/rpm/RPMS/i486:

/usr/src/rpm/RPMS/i586:

/usr/src/rpm/RPMS/i686:

/usr/src/rpm/RPMS/noarch:

/usr/src/rpm/SOURCES:

/usr/src/rpm/SPECS:

/usr/src/rpm/SRPMS:


执行rpmbuild:
[root@root]$ rpmbuild -bb tmp.spec
Executing(%install): /bin/sh -e /var/tmp/rpm-tmp.18232
+ umask 022
+ cd /usr/src/rpm/BUILD
+ rm -rf /home/document.txt
+ cp -p document.txt /home
+ exit 0
Processing files: TestDoc-1.0-1
Finding  Provides: /usr/lib/rpm/find-provides
Finding  Requires: /usr/lib/rpm/find-requires
PreReq: rpmlib(PayloadFilesHavePrefix) <= 4.0-1 rpmlib(CompressedFileNames) <= 3.0.4-1
Requires(rpmlib): rpmlib(PayloadFilesHavePrefix) <= 4.0-1 rpmlib(CompressedFileNames) <= 3.0.4-1
Checking for unpackaged file(s): /usr/lib/rpm/check-files %{buildroot}
Wrote: /usr/src/rpm/RPMS/i386/TestDoc-1.0-1.cygwin.i386.rpm
Executing(%clean): /bin/sh -e /var/tmp/rpm-tmp.48736
+ umask 022
+ cd /usr/src/rpm/BUILD
+ rm -rf /home/document.txt
+ exit 0

 

我们看到生成一个rpm package了:/usr/src/rpm/RPMS/i386/TestDoc-1.0-1.cygwin.i386.rpm。

 

[root@root]# rpm -qpl /usr/src/rpm/RPMS/i386/TestDoc-1.0-1.cygwin.i386.rpm

/home/document.txt

 

[root@root]# rpm -qpi /usr/src/rpm/RPMS/i386/TestDoc-1.0-1.cygwin.i386.rpm

Name        : TestDoc                      Relocations: (not relocateable)

......

 

接着我们可以rmp install了:
[root@root]$ rpm -ivh /usr/src/rpm/RPMS/i386/TestDoc-1.0-1.cygwin.i386.rpm
Preparing...                ########################################### [100%]
   1:TestDoc                ########################################### [100%]


确认这个rpm安装成功了:
[root@root]$ rpm -qa | grep TestDoc
TestDoc-1.0-1

 

[root@root]#  ls /home

document.txt

 

卸载:
[root@root]# rpm -e TestDoc-1.0-1

 

 

[root@root]# rpm --eval %_tmppath

/var/tmp

 

[root@root]# rpm --eval %_topdir

/usr/src/rpm

<think>好的,用户想学习如何创建和构建RPM包,需要提供详细的教程。首先,我需要整理已有的引用资料中的相关信息,结合RPM构建的一般步骤,给出一个结构清晰的回答。 首先,用户提供的引用资料中提到了几个关键点: 1. 安装rpm-build工具(引用4)。 2. 创建目录结构,比如使用rpmbuild命令生成必要的目录(引用4)。 3. 编写.spec文件,这在引用3和引用2中都有涉及,特别是引用3提到了openssl.spec的例子。 4. 构建RPM包的命令,如rpmbuild -ba(引用4)。 5. 可能有需要自定义配置文件或源码的情况(引用2)。 接下来需要将这些步骤整合成一个连贯的流程。可能需要从环境准备开始,然后创建目录结构,准备源码,编写spec文件,最后构建。同时要注意用户可能需要示,比如spec文件的内容,或者具体命令的例子。 还需要考虑用户可能的疑问点,比如目录结构的作用,spec文件各部分的意义,以及常见问题如何处理。引用2提到了项目结构和配置文件,引用3提到了规范文件的创建,这些都需要融入到教程中。 另外,是否需要提到D选项的作用(引用1)?不过引用1中的例子是关于install命令的,可能与RPM构建关系不大,可能不需要包含在这里。 需要确保步骤清晰,每一步都有对应的命令或示,比如创建目录的命令,安装依赖,编写spec文件的例子,构建命令等。同时,要符合系统级指令的要求,比如数学公式用$...$,独立公式用$$...$$,但在这个问题中可能用不到数学公式,所以可能不需要处理这一点。 最后,生成相关问题,可能需要包括优化构建、处理依赖、调试方法等,基于教程中的内容。</think>### 如何创建和构建 RPM 包 #### 1. 环境准备 首先安装构建工具链和依赖: ```bash yum install rpm-build rpmdevtools gcc make -y # 基础编译工具和rpm构建套件 ``` 通过以下命令生成标准RPM构建目录结构: ```bash rpmdev-setuptree # 自动创建~/rpmbuild/{BUILD,RPMS,SOURCES,SPECS,SRPMS}等目录[^4] ``` #### 2. 目录结构解析 ``` ~/rpmbuild/ ├── BUILD # 源码解压和编译的临时目录 ├── RPMS # 生成的二进制RPM包存放处 ├── SOURCES # 存放源码包和补丁文件 ├── SPECS # 存放.spec规范文件 └── SRPMS # 生成的源码RPM包 ``` #### 3. 准备源码包 将待打包的源码压缩为.tar.gz格式并放入SOURCES目录: ```bash cp myapp-1.0.0.tar.gz ~/rpmbuild/SOURCES/ ``` #### 4. 编写.spec文件(核心步骤) 在SPECS目录创建规范文件(如`myapp.spec`),示模板: ```spec Name: myapp Version: 1.0.0 Release: 1%{?dist} Summary: My Custom Application License: GPLv3+ URL: http://example.com Source0: %{name}-%{version}.tar.gz BuildRequires: gcc, make Requires: openssl %description This is a sample application package. %prep %setup -q # 自动解压源码到BUILD目录 %build ./configure --prefix=/usr make %{?_smp_mflags} %install make install DESTDIR=%{buildroot} %files /usr/bin/myapp /usr/share/man/man1/myapp.1.gz %changelog * Wed Jun 01 2023 Your Name <email@example.com> - Initial package build ``` #### 5. 执行构建 使用以下命令生成RPM包: ```bash cd ~/rpmbuild/SPECS rpmbuild -ba myapp.spec # -ba参数表示同时生成二进制和源码包[^4] ``` 构建成功后,结果将保存在: - 二进制包:`~/rpmbuild/RPMS/` - 源码包:`~/rpmbuild/SRPMS/` #### 6. 验证与安装 ```bash rpm -ivh ~/rpmbuild/RPMS/x86_64/myapp-1.0.0-1.el7.x86_64.rpm # 安装测试 rpm -qi myapp # 查看包信息 ``` ### 高级技巧 1. **宏定义**:使用`%define`定义变量简化配置 2. **条件编译**:通过`%if`语句实现跨平台支持 3. **补丁管理**:在SOURCES目录添加.patch文件,在%prep阶段用`%patch`应用
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值