制作rpm包
2016-03-21 12:46
405 查看
注意:由于root用户的权限没有任何限制,RPM包制作过程的不当命令有可能会给系统带去破坏。
1,准备自己的打包环境
# yum -y install rpm-build rpmdevtools
2,创建rpm包制作车间(默认的制作车间在/usr/src/redhat/)
# su - tom
# rpmdev-setuptree
PS:执行rpmdev-setuptree命令默认将再当前用户主目录下创建一个 rpmbuild 构建的根目录结构;关于rpmbuild默认工作路径的确定,通常由在 ~/.rpmmacros 这个文件里的一个叫做%_topdir的宏变量来定义。
3,rpmbuild 目录下子目录
BUILD 编译rpm包的临时目录 %_builddir
BUILDROOT 编译后生成的软件临时安装目录 %_buildrootdir
RPMS 最终生成的可安装rpm包的所在目录 %_rpmdir
SOURCES 所有源代码和补丁文件的存放目录 %_sourcedir
SPECS 存放SPEC文件的目录(重要) %_specdir
SRPMS 最终生成 src.rpm 格式rpm包所在目录 %_srcrpmdir
4,下载源码包
# cd ~/rpmbuild/SOURCES/
# wget http://downloads.sourceforge.net/mad/libmad-0.15.1b.tar.gz 5,使用命令来生成SPEC模板文件
# rpmdev-newspec -o libmad-0.15.1b.spec
6,配置libmad-0.15.1b.spec
# rpmbuild -ba libmad-0.15.1b.spec
8,查看生成的rpm包
# ls -al ~/rpmbuild/RPMS/x86_64/ ###生成二进制格式的rpm包所在目录
# ls -al ~/rpmbuild/SRPMS/ ###生成源码格式的rpm包所在目录
9,查看rpm的信息
# rpm -qpi ~/rpmbuild/RPMS/x86_64/libmad-0.15.1b-1.el6.x86_64.rpm
10,spec文件的格式
12,install 命令选项
13,rpm2cpio命令:将RPM包展开为cpio格式的命令,其展开结果通常通过“管道”传送给cpio命令做进一步处理。如:
# rpm2cpio libmad-0.15.1b-1.el6.x86_64.rpm | cpio -t
# rpm2cpio libmad-0.15.1b-1.el6.x86_64.rpm | cpio -id
14,查看rpm宏及其定义方法
# rpmbuild --showrc | grep _topdir
# rpm --eval '%_topdir' ###获取%_topdir宏的定义
PS:所有的宏定义都可以在/usr/lib/rpm/macros里找到;
默认情况下,这些宏是通过rpm宏的相关配置文件来定义的,其配置文件通常有多个,可以使用如下命令得到当前系统的相关文件的路径信息:
# rpmbuild --showrc | grep macrofiles
PS:macrofiles标签后的多个路径就是rpm、rpmbuild等命令运行时所用到的宏定义相关配置文件,在上面命令输出中的列表中的次序也是rpm、rpbuild命令搜索宏定义时依次使用文件的次序,因此,如果在多个文件中定义了相同的宏,最后找到的将最终生效。由于排在最后的是~/.rpmmacros,因此,每个用户都可以在自己的家目录中通过修改此文件来改变系统上某宏的默认定义,比如%_topdir。
1,准备自己的打包环境
# yum -y install rpm-build rpmdevtools
2,创建rpm包制作车间(默认的制作车间在/usr/src/redhat/)
# su - tom
# rpmdev-setuptree
PS:执行rpmdev-setuptree命令默认将再当前用户主目录下创建一个 rpmbuild 构建的根目录结构;关于rpmbuild默认工作路径的确定,通常由在 ~/.rpmmacros 这个文件里的一个叫做%_topdir的宏变量来定义。
3,rpmbuild 目录下子目录
BUILD 编译rpm包的临时目录 %_builddir
BUILDROOT 编译后生成的软件临时安装目录 %_buildrootdir
RPMS 最终生成的可安装rpm包的所在目录 %_rpmdir
SOURCES 所有源代码和补丁文件的存放目录 %_sourcedir
SPECS 存放SPEC文件的目录(重要) %_specdir
SRPMS 最终生成 src.rpm 格式rpm包所在目录 %_srcrpmdir
4,下载源码包
# cd ~/rpmbuild/SOURCES/
# wget http://downloads.sourceforge.net/mad/libmad-0.15.1b.tar.gz 5,使用命令来生成SPEC模板文件
# rpmdev-newspec -o libmad-0.15.1b.spec
6,配置libmad-0.15.1b.spec
Name: libmad Version: 0.15.1b Release: 1%{?dist} Summary: luochen Group: System Environment/Libraries License: GPLv2 URL: http://downloads.sourceforge.net/mad/libmad-0.15.1b.tar.gz Source0: %{name}-%{version}.tar.gz BuildRoot:%{_topdir}/BUILDROOT %package devel Summary: Development files for %{name} Group: Development/Libraries Requires: %{name} = %{version}-%{release} %description devel The %{name}-devel package contains libraries and header files for developing applications that use %{name}. %prep %setup -q %build sed -i '/-fforce-mem/d' configure %configure --enable-shared make %{?_smp_mflags} %install rm -rf $RPM_BUILD_ROOT make install DESTDIR=$RPM_BUILD_ROOT find $RPM_BUILD_ROOT -name '*.la' -exec rm -f {} ';' find $RPM_BUILD_ROOT -name 'libmad.a' -exec rm -f {} ';' %clean rm -rf $RPM_BUILD_ROOT %post -p /sbin/ldconfig %postun -p /sbin/ldconfig %files %defattr(-,root,root,-) ###定义包含文件的属主,属组和权限 %doc %{_libdir}/*.so.* %files devel %defattr(-,root,root,-) %doc %{_includedir}/* %{_libdir}/*.so %changelog * Wed Apr 21 2016 luochen.com <luolinux.com> - 0.15.1b-1 -横线开头为注释7,使用rpmbuild命令制作rpm包
# rpmbuild -ba libmad-0.15.1b.spec
8,查看生成的rpm包
# ls -al ~/rpmbuild/RPMS/x86_64/ ###生成二进制格式的rpm包所在目录
# ls -al ~/rpmbuild/SRPMS/ ###生成源码格式的rpm包所在目录
9,查看rpm的信息
# rpm -qpi ~/rpmbuild/RPMS/x86_64/libmad-0.15.1b-1.el6.x86_64.rpm
10,spec文件的格式
Name:软件包名称 Version:软件包版本 Release:发行版本号 Group:软件包所属类别 /usr/share/doc/rpm-4.8.0/GROUPS License:软件的授权方式 Source[0-n]:指定源代码文件 BuildRequires:编译源码时依赖的软件包 Requires:安装软件包时依赖的软件包 BuildRoot:安装文件时候的根目录 Description:关于RPM包的描述 Pre:安装前的准备 Prep:编译前的准备 Setup:寻找将源码包并解压 Build:编译 Install:安装 File:文件列表 Defattr:文件属性 Post:安装之后的收尾工作 Preun:卸载软件前的准备工作 Postun:卸载软件后的收尾工作 制作rpm包的几个关键阶段: 1,%prep 将%_sourcedir目录下的源代码解压到%_builddir目录下;如果有补丁的需要在这个阶段进行打补丁的操作; 2,%build 在%_builddir目录下执行源码包的编译。一般是执行./configure和make指令; 3,%install 将需要打包到rpm软件包里的文件从%_builddir下拷贝%_buildrootdir目录下。当用户最终用rpm -ivh name-version.rpm安装软件包时,这些文件会安装到用户系统中相应的目录里; 4,%files 要打包到rpm包里的文件清单;分为三类--说明文档(doc),配置文件(config)及执行程序,还可定义文件存取权限,拥有者及组别; 5,制作rpm包 这个阶段是自动完成的,所以在SPEC文件里面是看不到的,这个阶段会将%_buildroot目录的相关文件制作成rpm软件包最终放到%_rpmdir目录里; 6,%clean 编译后的清理工作,这里可以执行make clean以及清空%_buildroot目录等; 7,%changelog改变日志;11,rpmbuild 命令选项
syntax: rpmbuild {-ba|-bb|-bp|-bc|-bi|-bl|-bs} [rpmbuild-options] SPECFILE -bp 仅执行至spec文件中的%prep阶段即停止进行; -bc 仅执行到spec文件中的%build阶段即停止进行; -bi 仅运行至spec文件中的%install阶段即停止运行; -bl 检查spec文件中%file段所列出的文件是不是与BUILDROOT目录中存在的文件完全匹配; -ba 同时制作成生二进制格式的rpm包和源码格式的rpm包; -bb 仅制作二进制格式的rpm包; -bs 仅制作生成源码格式的rpm包;
12,install 命令选项
syntax: install [OPTION]... [-T] SOURCE DEST -d 创建目录 -D 自动创建缺省的目录结构 example: # install /etc/fstab /tmp 复制文件 # install -d /tmp/test 新建目录 # install -D /etc/fstab /etc/test/fstab 自动创建缺省的目录结构
13,rpm2cpio命令:将RPM包展开为cpio格式的命令,其展开结果通常通过“管道”传送给cpio命令做进一步处理。如:
# rpm2cpio libmad-0.15.1b-1.el6.x86_64.rpm | cpio -t
# rpm2cpio libmad-0.15.1b-1.el6.x86_64.rpm | cpio -id
14,查看rpm宏及其定义方法
# rpmbuild --showrc | grep _topdir
# rpm --eval '%_topdir' ###获取%_topdir宏的定义
PS:所有的宏定义都可以在/usr/lib/rpm/macros里找到;
默认情况下,这些宏是通过rpm宏的相关配置文件来定义的,其配置文件通常有多个,可以使用如下命令得到当前系统的相关文件的路径信息:
# rpmbuild --showrc | grep macrofiles
PS:macrofiles标签后的多个路径就是rpm、rpmbuild等命令运行时所用到的宏定义相关配置文件,在上面命令输出中的列表中的次序也是rpm、rpbuild命令搜索宏定义时依次使用文件的次序,因此,如果在多个文件中定义了相同的宏,最后找到的将最终生效。由于排在最后的是~/.rpmmacros,因此,每个用户都可以在自己的家目录中通过修改此文件来改变系统上某宏的默认定义,比如%_topdir。
相关文章推荐
- 用Photoshop 制作草地效果简明教程
- 主页木马的制作方法
- Lua模块与包学习笔记
- Shell脚本解压rpm软件包
- 详解Node.js包的工程目录与NPM包管理器的使用
- 深入解读Java代码组织中的package包结构
- Linux rpm tar 操作系统下软件的安装与卸载方法
- jsp计数器制作手册
- Linux RPM命令参数
- Linux 下rpm命令参数详解
- Node.js的包详细介绍
- SUSE Linux下通过RPM方式卸载MySQL 5过程笔记
- Linux rpm 命令参数使用详解
- Linux下 rpm 命令查询方法
- Lua中的模块(module)和包(package)详解
- Lua教程(十一):模块与包详解
- go语言里包的用法实例
- js制作简易年历完整实例
- 解析Node.js基于模块和包的代码部署方式
- android private libraries 中的包源代码添加方法