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.rpm,nginx-1.4.0-24.x86_64.rpm

实现目标

有一个test.py,去读取当前conf目录下的test.conf文件中的版本号,然后1秒打印一次日志到/tmp/test_rpm.log

---------test.py------------
#!/usr/bin/python

print "Hello World"

--------conf/test.conf------------
Version=0.1

再看下路径结构

.
|-- conf
|   `-- test.conf
`-- test.py

制作成一个rpm包,安装之后出现这样的目录结构

/usr/local/rpm_test
.
|-- conf
|   `-- test.conf
`-- test.py

基础环境

制作rpm包是通过rpmbuild来生成的。

安装rpmbuild工具
$ sudo yum install rpm-build

$ rpmbuild --version
RPM version 4.4.2.3

建立独立的打包目录
$ cat >${HOME}/.rpmmacros << EOF
%_topdir $HOME/rpmbuild
EOF
$ mkdir ${HOME}/rpmbuild/
$ cd ${HOME}/rpmbuild/
$ mkdir BUILD  RPMS  SOURCES  SPECS  SRPMS

1. 把要打包的配置文件放到 ${HOME}/rpmbuild/SOURCES/ 下面
2. 在${HOME}/rpmbuild/SPEC下面建立一个test.spec文件,建立好后目录如下
.
|-- BUILD
|-- RPMS
|-- SOURCES
|   |-- test.conf
|   `-- test.py
|-- SPECS
|   `-- test.spec
`-- SRPMS

编写spec文件

spec文件是打rpm包的关键环节,spec文件里指定了rpm包的基本信息,安装好后的环境

Name:         rpm_test
Version:      0.0.1
Release:      3
Buildarch:    noarch
Group:        tools
Summary:      rpm_test
License:      Commercial
BuildArch:     noarch
BuildRoot:    %{_buildrootdir}
Prefix:       /usr/local/rpm_test
AutoReqProv:  no

%define _build_name_fmt     %%{NAME}-%%{VERSION}-%%{RELEASE}-%%{ARCH}.rpm
#编译需要的依赖
#BuildRequires: gcc,make,gcc-c++,pcre-devel
#安装运行需要的依赖
Requires:     python >= 2.4.3

Source0:           test.py
Source1:           test.conf

#description 软件详细描述,可多行
%description
rpm_test by Wanghua

#解压源文件
%prep
#%setup -q

#build 开始编译软件,如make
%build

#install 开始安装软件,如make install
%install
rm -rf ${buildroot}

#建立目录
install -p -d -m 0755 %{buildroot}%{prefix}
install -p -d -m 0755 %{buildroot}%{prefix}/conf

#copy文件
install -p -m 0755 %{SOURCE0} %{buildroot}%{prefix}
install -p -m 0755 %{SOURCE1} %{buildroot}%{prefix}/conf

%files
%defattr(-,root,root,-)
%{prefix}/conf
%{prefix}/test.py

#%config(noreplace) %{prefix}/conf/test.conf

#封装rpm包后清空虚拟根目录
%clean
rm -rf %{buildroot}

#rpm安装前执行命令,$1==1其中1代表安装,0代表卸载
%pre
if [ $1==1 ]; then
   echo "Now start install rpm package."
fi

#rpm包安装后执行命令
%post
if [ $1==1 ]; then
   echo "/sbin/chkconfig --add rpm_test"
fi

#rpm包卸载前
%postun
rm -rf %{prefix}

#rpm包卸载后执行命令
%preun
if [ $1==0 ]; then
    echo "rpm pkg has been remove"
    echo "/sbin/chkconfig --del rpm_test"
fi

%changelog
* Tue Jul 17 2014 firefoxbug
+ rpm test

生成rpm包

$ rpmbuild -bb test.spec

.
|-- BUILD
|-- RPMS
|   `-- noarch
|       `-- rpm_test-0.1-20140716.noarch.rpm
|-- SOURCES
|   |-- test.conf
|   `-- test.py
|-- SPECS
|   `-- test.spec
`-- SRPMS

查看rpm包相关信息

查看安装信息(已经安装)
$ rpm -ql rpm_test
/usr/local/rpm_test/conf
/usr/local/rpm_test/conf/test.conf
/usr/local/rpm_test/test.py

查看rpm包
$rpm -qlp rpm_test-0.1-20140716.noarch.rpm
/usr/local/rpm_test/conf
/usr/local/rpm_test/conf/test.conf
/usr/local/rpm_test/test.py

查看rpm包安装前后执行的脚本,其实就是spec文件的几个部分

$ rpm -qpl --scripts rpm_test-0.1-20140716.noarch.rpm
preinstall scriptlet (using /bin/sh):
if [ $1==1 ]; then
   echo "Now start install rpm package."
fi

#rpm包安装后执行命令
postinstall scriptlet (using /bin/sh):
if [ $1==1 ]; then
   echo "/sbin/chkconfig --add rpm_test"
fi

#rpm包卸载前
preuninstall scriptlet (using /bin/sh):
if [ $1==0 ]; then
    echo "rpm pkg has been remove"
    echo "/sbin/chkconfig --del rpm_test"
fi
postuninstall scriptlet (using /bin/sh):
rm -rf /usr/local/rpm_test

#rpm包卸载后执行命令
/usr/local/rpm_test/conf
/usr/local/rpm_test/conf/test.conf
/usr/local/rpm_test/test.py

rpm包指定格式输出

$ rpm -qa --queryformat  "%{NAME}_|-%{VERSION}_|-%{RELEASE}_|-%{ARCH}\n"
python-simplejson_|-2.0.3_|-3.el5_|-x86_64

根据文件查询所在的rpmbao

$rpm -qf /path/nginx.conf

参考文档

rpm包制作 http://my.oschina.net/sylee/blog/167640

RPM包制作原理 http://my.oschina.net/guol/blog/182310

转自大牛博客:http://www.firefoxbug.com/index.php/archives/2776/

时间: 2024-12-18 12:51:07

rpm包制作(待实验)的相关文章

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软件包的

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

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-

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 包制作

本文链接: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

Fpm 之 Nginx rpm 包制作

Fpm 之 Nginx rpm 包制作 一.下载nginx编译安包机器上 wget http://nginx.org/download/nginx-1.12.2.tar.gz 二.安装nginx的编译所需的依赖包 yum -y install pure lib gcc-c++ openssl openssl-devel 三.编译安装nginx tar -zxvf nginx-1.12.2.tar.gz cd nginx-1.12.2 ./configure --prefix=/app/nginx