wangbin
  • wangbin
  • 2018-11-03
  • IT

制作一个简单的rpm包:helloworld

一. 简介

之前介绍yum是基于rpm的包管理工具,yum最终安装的是rpm包,那rpm包是如何来的呢?

按照网上的教程制作了个rpm包,这里记录下。

二. 过程

1)安装制作工具

yum -y install rpm-build rpm-devel rpmdevtools

2)生成开发目录

rpmdev-setuptree 

3)源代码

现在,我们来编码源代码,这里我们写个脚本,输出Hello World!

mkdir -p ~/rpmbuild/SOURCES/helloworld-1.0.0
cd ~/rpmbuild/SOURCES/helloworld-1.0.0
touch helloworld
chmod 755 helloworld
echo '#!/bin/sh' >> helloworld
echo 'echo Hello World!' >> helloworld
cd ~/rpmbuild/SOURCES
tar zcvf helloworld-1.0.0.tar.gz helloworld-1.0.0

这样我们就有了我们的源代码helloworld-1.0.0.tar.gz

4)编写spec文件

cd  ~/rpmbuild/SPECS
# 生成spec模版文件
rpmdev-newspec helloworld.spec

将内容修改为

Name:           helloworld
Version:        1.0.0
Release:        1%{?dist}
Summary:        helloworld

Group:          Development/Tools
License:        GPL
#URL:            
Source0:        %{name}-%{version}.tar.gz

#BuildRequires:  
#Requires:       

%description

%prep
%setup -q

%build

%install
mkdir -p $RPM_BUILD_ROOT/usr/bin
cp $RPM_BUILD_DIR/%{name}-%{version}/helloworld $RPM_BUILD_ROOT/usr/bin/

%clean
rm -rf $RPM_BUILD_ROOT

%files
%defattr(-,root,root,-)
%doc
/usr/bin/helloworld

%changelog

5)打包

rpmbuild -ba SPECS/helloworld.spec

查看下最后的目录结构

 tree ~/rpmbuild/
 /root/rpmbuild/
├── BUILD
│   └── helloworld-1.0.0
│       ├── debugfiles.list
│       ├── debuglinks.list
│       ├── debugsources.list
│       ├── elfbins.list
│       └── helloworld
├── BUILDROOT
├── RPMS
│   └── x86_64
│       ├── helloworld-1.0.0-1.el7.x86_64.rpm
│       └── helloworld-debuginfo-1.0.0-1.el7.x86_64.rpm
├── SOURCES
│   ├── helloworld-1.0.0
│   │   └── helloworld
│   └── helloworld-1.0.0.tar.gz
├── SPECS
│   └── helloworld.spec
└── SRPMS
    └── helloworld-1.0.0-1.el7.src.rpm
  1. BUILD是编译rpm包的临时目录
  2. BUILDROOT是最后生成rpm包的临时安装目录
  3. RPMS存放最终生成的rpm二进制包
  4. SOURCES是源代码(.tar.gz)存放目录
  5. SPECS用来存放spec文件
  6. SRPMS存放最终生成的rpm源码包

rpmbuild/RPMS/x86_64/helloworld-1.0.0-1.el7.x86_64.rpm就是我们打出来的rpm包

6)安装

yum install ~/rpmbuild/RPMS/x86_64/helloworld-1.0.0-1.el7.x86_64.rpm 

或者

rpm -ivh helloworld-1.0.0-1.el7.x86_64.rpm 

命令行运行

helloworld
Hello World!

好啦,成功了!

三. spec

好了,回过头再看看打包的步骤,最重要的莫过于helloworld.spec了,我们来详细解释下。

Name:           helloworld
Version:        1.0.0
Release:        1%{?dist}
Summary:        helloworld

Group:          Development/Tools
License:        GPL

名称、版本号、打包版本号、简介、Group、License

Source0:        %{name}-%{version}.tar.gz

源代码路径,要确保在SOURCES目录下能找到该包

#BuildRequires:  

编译需要的环境,如gcc>=4.7,这里不需要

#Requires:      

该软件运行的依赖,如python rpm>=0:4.1.1,这里不需要

%description

详细描述

%prep
%setup -q

编译前的准备操作在这儿,%setup macro 会把 source code tarball 解开并自动进到 %{name}-%{version} 的目录中

%build

编译,对应源代码打包的./configure和make,例如(%configure –prefix=%{_prefix})

%install
mkdir -p $RPM_BUILD_ROOT/usr/bin
cp $RPM_BUILD_DIR/%{name}-%{version}/helloworld $RPM_BUILD_ROOT/usr/bin/

安装,对应源代码包打包的make install,一般我们是安装在$RPM_BUILD_ROOT下

%files
%defattr(-,root,root,-)
%doc
/usr/bin/helloworld

收集文件并创建二进制和源RPM文件

%clean
rm -rf $RPM_BUILD_ROOT

删除临时构建目录

四. 一些变量

%{_bindir} /usr/bin/

五. 结尾

先弄个简单的玩玩,后面有具体的需求再看看下面的链接

https://fedoraproject.org/wiki/Archive:BuildingPackagesGuide?rd=Docs/Drafts/BuildingPackagesGuide

参考:

  1. https://blog.csdn.net/kongxx/article/details/43761295

  2. https://blog.csdn.net/get_set/article/details/53453320

  3. https://blog.csdn.net/get_set/article/details/53453320