linux rpm包制作

Linux Rpm 包制作

一、简介

RPM(Red Hat Package Manager)的最常见的软件包管理器。

软件包管理器

rpm,deb(dpkg)

RPM包命名:name-version-release.architecture.rpm。

xorg-x11-xsm-1.0.2 -4.fc6.i386.rpm

包名       版本号 编译次数 厂商 平台

RPM功能:安装、卸载、升级、查询和验证。

rpm     -ivh              安装

rpm     -Uvh              升级

rpm     -e                卸载

rpm     -q                查询一个包是否被安装 |查询包版本

rpm     -q --scripts      查询指定包中包含的脚本

preinstall

postinstall

preuninstall

postuninstall

rpm     -qp               查询未安装的软件包

rpm     -qa               查询所有安装过的包的版本

rpm     -qi               查询包详细信息

rpm     -ql               查询包安装路径

rpm     -qf filename      查询一个文件归属于哪个包

rpm     -qpR file.rpm     查看包依赖关系

rpm     --rebuilddb       手动更新数据库

rpm     -ivh pkgname.rpm  --nodeps --force不考虑依赖关系,强制安装(不建议)

rpm     -V                rpm验证                        ##

rpm     -Va               rpm验证所有                    ##

rpm     -K |--checksig    pkgname.rpm检查rpm包的数字签名 ##

rpm  --import      RPM-GPG-KEY-*

如果想发布rpm格式的源码包或者是二进制包,就要使用rpmbuild工具。

rpmbuild --rebuild src.rpm  #重新编译成RPM包到工作车间里,直接使用即可

rpm2cpio *.src.rpm | cpio -id  解压里面的文件到当前目录

| cpio -t 查看包含文件

rpmbuild 步骤:

1. 准备阶段:The prep section

2. 编译阶段: The build section

3. 安装阶段:The install section

4. 脚本段:安装、卸载、升级、依赖脚本

5. 清理段:The clean section

6. 文件段:The files section

7. 改变日志段:%chagelog

二、参数解释:

%prep预处理脚本程序(prep)开始执行"
%setup
%build"编译连接脚本程序(build)开始执行"
make
%install"安装脚本程序(install)开始执行"
make install
%clean"建包结束后清理脚本程序(clean)开始执行"
%pre"安装前执行脚本程序(pre)开始执行"
%post"安装后执行脚本程序(post)开始执行"
%preun"卸载前执行脚本程序(preun)开始执行"
%postun"卸载后执行脚本程序(postun)开始执行"
%veryfiscript "软件包校验脚本程序(verifyscript)开始执行"
%triggerin -- xiuwu"软件包安装时触发脚本程序(triggerin)开始执行"
%triggerun -- yuntaishan < 2.0 "软件包卸载前触发脚本程序(triggerun)开始执行"
%triggerpostun – dapubu"软件包卸载后触发脚本程序(triggerpostun)开始执行"
%files
%defattr (-,root,root)
%config /etc/funkey.def
%doc
%changelog更改日志

Spec文件中常用的变量

变量 系统目录
RPM_BUILD_DIR: /$HOME/rpmbuild/BUILD
RPM_BUILD_ROOT: /$HOME/rpmbuild/BUILDROOT
%{_sysconfdir}: /etc
%{_sbindir}: /usr/sbin
%{_bindir}: /usr/bin
%{_datadir}: /usr/share
%{_mandir}: /usr/share/man
%{_libdir}: /usr/lib64
%{_prefix}: /usr
%{_localstatedir}: /usr/var

spec文档建立有以下选项

选项 含义
-bp 文件中安装执行前的地方
-bc 执行spec的%pre和%build 段(准备并编译)
-bi 执行spec中%pre,%build与%install(准备,编译并安装)
-bl 检查spec中的%file段(查看文件是否齐全)
-ba 建立源码与二进制包(常用)
-bb 只建立二进制包(常用)
-bs 只建立源码包

其他的一些选项

选项 含义
--buildroot=DIRECTORY 确定以root目录建立包
--clean 完成打包后清除BUILD下的文件目录
--nobuild 不进行%build的阶段
--nodeps 不检查建立包时的关联文件
--rmsource 完成打包后清除SOURCES
--rmspec 完成打包后清除SPEC
--target=CPU-VENDOR-OS 确定包的最终使用平台

打补丁

%patch

* -p :这个选项用于确定patch所要操作的文件。它针对补丁文件头部的文件名,删除名字中指定数目个斜杠(/)前面的所有字符,从而得到要操作的文件名。

* -s :这个选项指示patch在打补丁过程中不输出任何信息,即使有错误发生。

(2) -P N :

使用此选项以指示RPM使用第N个补丁文件(由文件头PatchN域定义)。

(3) -p N :

此选项与其参数是由%patch宏直接传给patch命令的。请参见上面patch命令所用的-p选项的介绍。

(4) -b name :

当有多个patch命令操作同一个文件时,patch会将原文件换名保存(其后缀变作.orig)

(5) -E :

此选项直接传给patch命令,其作用是:如果一个文件打完补丁后内容为空(字节数为0),则删除这个文件。

RPM组: /usr/share/doc/rpm-4.4.2.3/GROUPS

软件包所属类别,具体类别有:

Amusements/Games (娱乐/游戏)

Amusements/Graphics(娱乐/图形)

Applications/Archiving (应用/文档)

Applications/Communications(应用/通讯)

Applications/Databases (应用/数据库)

Applications/Editors (应用/编辑器)

Applications/Emulators (应用/仿真器)

Applications/Engineering (应用/工程)

Applications/File (应用/文件)

Applications/Internet (应用/因特网)

Applications/Multimedia(应用/多媒体)

Applications/Productivity (应用/产品)

Applications/Publishing(应用/印刷)

Applications/System(应用/系统)

Applications/Text (应用/文本)

Development/Debuggers (开发/调试器)

Development/Languages (开发/语言)

Development/Libraries (开发/函数库)

Development/System (开发/系统)

Development/Tools (开发/工具)

Documentation (文档)

System Environment/Base(系统环境/基础)

System Environment/Daemons (系统环境/守护)

System Environment/Kernel (系统环境/内核)

System Environment/Libraries (系统环境/函数库)

System Environment/Shells (系统环境/接口)

User Interface/Desktops(用户界面/桌面)

User Interface/X (用户界面/X窗口)

User Interface/X Hardware Support (用户界面/X硬件支持)

三、rpmbuild制作rpm包步骤:

1、安装rpm-build软件包

[[email protected] ~]# yum install rpm-build

增加一个普通用户,不要以root身份来进行rpmbuild,防止它人恶作剧!

[[email protected] ~]# useradd nginx

[[email protected] ~]# su – nginx

2、定义宏变量

# vim ~/.rpmmacros

%_topdir /home/test/rpmbuild

%_signature gpg

%_gpg_name LN

3、 准备打包环境

创建rpmbuild所需要的目录

# mkdir -pv rpmbuild/{BUILD,RPMS,SOURCES,SPECS,SRPMS}

BUILD #打包过程中的工作目录

BUILDROOT #编译后存放的路径

RPMS #打包完成后rpm包存放的路径,RPM包根据硬件平台不同分类,i386表示生成i386结构的包将存放在该目录下

SOURCES #源包所放置的路径,包括源码打包文件和补丁文件等

SPECS #spec文档放置的路径

SRPMS #源码rpm包放置的路径

#ll
#drwxr-xr-x 2 root root 4096 Jul 29 13:50 BUILD
#drwxr-xr-x 2 root root 4096 Jul 29 13:51 RPMS
#drwxr-xr-x 2 root root 4096 Jul 29 13:51 SOURCES
#drwxr-xr-x 2 root root 4096 Jul 29 13:51 SPECS
#drwxr-xr-x 2 root root 4096 Jul 29 13:51 SRPMS

如果你的用户目录主目录下没有类似目录结构,你可以通过一个工具软件来自动配置和生成。

#yum install rpmdevtools

默认将在当前用户主目录下创建一个RPM构建根目录结构

#rpmdev-setuptree

如果需要改变次默认位置,可以修改配置文件:~/.rpmmacros中变量_topdir对应的值即可。

一般rpmbuild会在当前用户的主目录下自动建立如上目录结构,如果在你对应用户的构建目录中没有自动建立如上目录,你可以通过手动方式建立。

4、撰写SPEC文档

SPEC撰写是打包RPM的核心,也算是最难的一步,好在我们可以从参照一个简单的模板文件开始,在可以实现基本功能的基础上再一步一步的扩充文档内容,直至完全达到要求。下面是一个简单的SPEC文档,其中包括了一些说明信息(注:#后面的内容为说明信息),该SPEC文档是对一个测试的软件项目hellorpm写的,hellorpm软件包编译后仅有一个执行文件、一个手册文件和一个项目说文件。

===============================================

Name:                     #软件名

Version:                  #版本

Release:        1%{?dist} #版本

Summary:                  #摘要描述

Group:                    #软件包组

License:                  #软件授权

URL:

Source0:                  #制作rpm包的源文件文件

BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root#安装或者编译时使用的“虚拟目录”

BuildRequires: gcc,gd-devel#需要依赖的软件包

%description

**********************描述信息*********************

#准备阶段

%prep

%setup -q  (静默模式)

#编译阶段

%build

./configure \

--参数

%{__make} %{?_smp_mflags}

#安装段

%install

%{__rm} -rf %{buildroot}

%{__make} install DESTDIR="%{buildroot}" #安装到buildroot下

# install 【更容易做精确控制】

-d      #创建目录

-D      #创建<目的地>前的所有主目录,然后将<来源>复制至 <目的地>。

最后一个文件名不变,前面缺什么补什么

# install -D x a/b/c 效果类似: mkdir -p a/b && cp x a/b/c

#清理段

%clean

%{__rm} -fr %{buildroot}

#脚本段

#scripts

%pre          #安装前执行的脚本

%post         #安装后执行的脚本

%preun        #卸载前执行的脚本

%postun       #卸载后执行的脚本

#$1代表动作

0代表卸载

1代表安装

2代表升级

#文件段 *BUILDROOT中的内容必须要和 %file段中的相关项对应,BUILDROOT有什么写什么,不然会报错!!!

%files

%defattr(-,root,root,0755)

%doc %{_mandir}/man1/*

%config %{_sysconfdir}/

#更改日志段

%changelog

*    时间

-    谁更改的

===============================================

RPM 建包参考文件

http://fedoraproject.org/wiki/Docs/Drafts/BuildingPackagesGuide

http://fedoraproject.org/wiki/ParagNemade/PackagingNotes

http://fedoraproject.org/wiki/Packaging/Guidelines

rpmbuild具体参考官方文档

http://docs.fedoraproject.org/enUS/Fedora_Draft_Documentation/0.1/html/RPM_Guide/index.html

时间: 2024-12-21 01:51:52

linux rpm包制作的相关文章

Linux RPM包制作教程

因为51cto不方便更新,只能将博文写到自建的wordpress博客上. http://www.lookingss.org/?p=218

linux之rpm包制作

难点:spec文件的编写 1,首先安装rpm-build命令 yum install rpm-build 2,介绍spec编写规则: #ll #drwxr-xr-x  2 root root 4096 Jul 29 13:50 BUILD #drwxr-xr-x  2 root root 4096 Jul 29 13:51 RPMS #drwxr-xr-x  2 root root 4096 Jul 29 13:51 SOURCES #drwxr-xr-x  2 root root 4096 J

RPM包制作方法

一.RPM介绍 RPM 前是Red Hat Package Manager 的缩写,本意是Red Hat 软件包管理,顾名思义是Red Hat 贡献出来的软件包管理:现在应为RPM Package Manager的缩写.在Fedora.Redhat.Mandriva.SuSE.YellowDog等主流发行版本,以及在这些版本基础上二次开发出来的发行版采用: RPM包中除了包括程序运行时所需要的文件,也有其它的文件:一个RPM包中的应用程序,有时除了自身所带的附加文件保证其正常以外,还需要其它特定

Ngins rpm包制作,spec配置文件

Name:           nginx Version:        1.4.2 Release:        1%{?dist} Summary:        nginx from source Group:          System Environment/Daemons License:        GPLv2 URL:            http://nginx.org Source0:        %{name}-%{version}.tar.gz Source

php-7.1.0 rpm包制作

nginx-1.8.0 rpm包制作见上篇文章:http://www.cnblogs.com/xiaoming279/p/6251149.html spec文件 Name: php Version: 7.1.0 Release: 1%{?dist} Summary: php Group: Applications/Server License: GPLv2 URL: http://www.51.com Source0: %{name}-%{version}.tar.gz Source1: php

rpm包制作(一)

rpm介绍 rpm的全称是RedhatPackage Manager,常见的使用rpm软件包的系统主要有Fedora.CentOS.openSUSE.SUSE企业版.PCLinuxOS等.使用deb软件包后缀的类Debian系统最常见的有Debian.Ubuntu.Finnix等. 从软件运行的结构来说,一个软件主要可以分为三个部分:可执行程序.配置文件和动态库.当然还有可能会有相关文档.手册.供二次开发用的头文件以及一些示例程序等等.可执行文件是必须的,其他部分都是可选的. 制作rpm软件包的

nginx的rpm包制作

nginx prm包 详细制作流程 1.准备工作 1.1:我这里准备了一台centos7的虚拟主机 1.2:官网下载最新的稳定版nginx源码包,地址:http://nginx.org/nginx-1.10.2.tar.gz 1.3:官网下载nginx的控制脚本,地址:https://www.nginx.com/resources/wiki/start/topics/examples/redhatnginxinit/ 1.4:手动安装一遍,看看都需要哪些依赖,所需依赖:gcc-c++,pcre-

rpm包制作(待实验)

作者:firefoxbug 时间:July 18, 2014 rpm包命名规范 对于rpm包的命名符合如下规范. %{NAME}-%{VERSION}-%{RELEASE}.%{ARCH}.rpm NAME: rpm包名字 VERSION: rpm包版本号(主版本号.次版本号.测试号) RELEASE: rpm包编译发布次数(第几次编译发布) ARCH: cpu架构(比如i386和x86_64,i386兼容x86_64,noarch的代表一些列脚本) 比如nginx-1.4.0-24.x86.r

简单 RPM 包制作

本文链接:http://blog.csdn.net/kongxx/article/details/43761295 今天为了测试搭建自己的yum仓库并安装升级软件包,因此需要一个rpm包来做测试,所以就想到了自己来做一个最简单rpm,因为仅仅就是做一个测试所以没有添加需要编译的文件,而是只使用了一个shell文件来输出可爱的Hello World. 1. 首先需要下载安装rpm包制作工具 $ sudo yum install -y rpm-build rpmdevtools 2. 运行 rpmd