欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

RPM软件包的制作

程序员文章站 2022-07-13 21:39:18
...

    RPM软件包的制作要用到Tarballs源代码包。先回顾一下Tarballs软件包的制作方法:
    tar cvf:打成.tar包(可再用gzip压缩成.tar.gz包)。
    tar xvf:从.tar包中解包(对.tar.gz包可先用gunzip或gzip -d解压)。

    注意:对于.tar.bz2型的包,使用bzip2(-d),bunzip2。
    tar zcvf:直接打包压缩成.tar.gz包。
    tar zxvf:直接从.tar.gz包解压。

    注意:对于.tar.bz2型的包,把z选项换成j选项。
    tar tvf:列出包中的内容
    tar rvf:向包中追加指定文件
    tar dvf:从包中删除指定文件
    tar uvf:只追加比包中的原来文件更新的文件
    Linux下软件包的命名格式:name-version-release.architecture.deb(.rpm等)
    Tarballs软件包的命名格式:name-version.tar.gz或name-version.tgz
    要制作RPM软件包,先要安装RPM软件包管理器,在RedHat/Fedora系列中一般会自带,在Ubuntu中则要自己要安装(sudo apt-get install rpm,或在新立得软件包管理器中安装)。基本的RPM命令如下:
    查看软件包:rpm -qpi
    安装软件包:rpm -ivh
    升级软件包:rpm -Uvh
    查询软件包是否已安装:rpm -qa
    RPM软件包构建目录:一般为/usr/src/redhat或/usr/src/rpm(Ubuntu下)。这下面有五个目录BUILD,RPMS(里面有面向不同CPU架构的子目录athlon,i386,i486,i586, i686,noarch), SOURCES,SPECS, SRPMS
    创建RPM软件包的过程:收集软件包的源文件、Makefile文件、帮助文件等放在一个name-version目录中,打成一个name-version.tar.gz源文件包,放在SOURCES目录下;创建spec文件放在SPECS目录下(也可不放在这);用rpmbuild命令建立软件包
    spec文件格式:
    先定义描述信息(导言):Vendor,Distribution,Name,Version,Release,Packager,License, Group。最重要的是Name、Version和Release三个,他们的值在后面一般要用到。
    Vendor:发行厂商
    Distribution:发行方式
    Name:软件包名
    Version:版本号
    Release:发行版本号
    Packager:一般为开发者的Email地址
    Licence:版权信息
    Group:应用程序分类信息,用于帮助图形化安装程序来对程序分类
    定义构建信息:
    Provides:定义软件的功能
    Requires:定义依赖的其他软件包
    Buildroot:定义安装时的测试目录
    Source:定义所需源文件包名,一般为%{name}-%{version}.tar.gz
    Summary:定义软件的摘要
    %description:定义软件的描述信息
    下一步定义如何建立软件包:
    %prep:定义准备工作,一般运行%setup -q设置为安静模式(即编译时不会打印编译过程的信息)
    %build:定义构建过程。一般直接用make命令,以便用源文件包的Makefile来进行构建
    %install:定义安装过程。一般直接用%makeinstall宏,表示运行Makefile中的install目标
    %clean:定义清除所有由rpmbuild命令创建的文件
    %file:指定要安装的文件,一般有可执行程序、库文件、使用手册
    %post:指定安装后要执行的命令
    spec文件的常用内置宏:%{name},%{version},$RPM_BUILD_ROOT为Buildroot指定的目录,%{_tmppath}一般为/var/tmp,%{_bindir}一般为/usr/bin,%{_mandir}一般为/usr/share/man
    下面是一个spec文件的例子,原型来自于<<Linux程序设计(第3版)>>。先要把myapp程序相关的源文件(a.h,b.h,c.h,2.c,3.c,foo.c,main.c)、Makefile文件、帮助文件(myapp.1)等放在目录myapp-1.0中,打成myapp-1.0.tar.gz源文件包,放在SOURCES目录下。

# myapp.spec
# 下面定义软件包的导言
Vendor: Wrox Press
Distribution: Any
Name: myapp
Version: 1.0
Release: 1
Packager: [email protected]
License: Copyright 2003 by Wrox Press
Group: Applications/Media
# 下面定义软件包的构建信息
Provides: goodness
Requires: mysql >= 3.23
# 定义安装时的测试目录
Buildroot: %{_tmppath}/%{name}-%{version}-root
Source: %{name}-%{version}.tar.gz
Summary: Trivial application
%description
MyApp Trivial application
A  trivial application used to demonstrate development tools.
This version pretends it requires MySQL at or above 3.23.
Authors: Neil Matthew and Richard Stones
# 下面定义如何建立软件包
# 准备工作
%prep
%setup -q
%build
make
# 定义安装过程。一般直接用%makeinstall宏,表示运行Makefile中的install目标,这里定义了自己的安装过程
%install
mkdir -p $RPM_BUILD_ROOT%{_bindir}
mkdir -p $PRM_BUILD_ROOT%{_mandir}
install -m755 myapp $RPM_BUILD_ROOT%{_bindir}/myapp
install -m755 myapp.1 $RPM_BUILD_ROOT%{_mandir}/myapp.1
%clean
rm -rf $RPM_BUILD_ROOT
%post
mail root -s "myapp installed - please register" < /dev/null
# 定义要安装的文件
%files
%{_bindir}myapp
%{_mandir}/myapp.1

    然后用rpmbuild -ba myapp.spec来建立RPM软件包。执行完后,在RPMS目录中就有二进制软件包myapp-1.0-1.i386.rpm,在SRPMS目录下就有源代码软件包myapp-1.0-1.src.rpm。
    rpmbuild命令的一些选项:
    -ba:同时建立二进制包和源代码包
    -bb:只建立二进制包
    -bc:只编译程序,不制作完整的RPM包
    -bp:为建立一个二进制软件作好准备
    -bi:创建二进制RPM软件包并且安装它
    -bl:检查RPM软件包中的文件列表
    -bs:只建立源代码软件包

转载于:https://my.oschina.net/abcijkxyz/blog/723078