linux 制作包(linux安装rpm包命令)
大家好,今天小编来为大家解答linux 制作包这个问题,linux安装rpm包命令很多人还不知道,现在让我们一起来看看吧!
linux下软件安装包的制作工具有哪些
在Linux操作系统下,制作软件安装包的工具有多种选择,主要取决于你所使用的具体发行版和包管理器。每个Linux发行版都有其独特的包管理方式,但有一些工具是跨发行版适用的,以下是一些常见的Linux软件安装包制作工具。
1.**Makepkg**:主要应用于Arch Linux和其衍生版中。它通过读取Makefile并按照指定规则生成可安装的包文件,如`pkg.tar.xz`或`pkg.tar.gz`。使用`makepkg`命令即可自动完成构建、打包和校验过程。
2.**Autopkg**:这是一款用于构建MacOS软件包的工具,但它提供了一定程度上的跨平台支持。Autopkg可以生成`dmg`和`pkg`格式的安装包,对于需要跨平台分发软件的开发者来说,是一个不错的选择。
3.**Nix**:Nix是一个基于表达式语言的包管理系统,它允许用户以声明式的方式定义软件及其依赖关系。Nix可以构建出独立的、可移植的软件包,并支持多种构建目标,包括可执行文件、共享库、静态库等。
4.**Dpkg**:在Debian和Ubuntu等基于Debian的发行版中,`dpkg`是主要的包管理器。使用`dpkg-buildpackage`命令可以创建适合安装的二进制包和源代码包。Dpkg支持多种构建选项,可以满足不同需求的软件打包需求。
5.**Yum**:Yum是基于RPM包管理的包管理器,主要用于Fedora、CentOS和Red Hat Enterprise Linux等发行版。使用`rpmbuild`工具可以构建RPM包,而Yum则用于安装、升级和管理这些包。
6.**Homebrew**:虽然主要针对MacOS,但Homebrew提供了一种简单的分发和管理跨平台软件包的方式。它通过创建`.tar.gz`或`.tar.bz2`格式的包,并使用特定的命令行工具进行安装和管理。
在选择软件安装包制作工具时,需要根据具体需求和所使用的Linux发行版来决定。不同的工具支持不同的功能和文件格式,因此在进行软件分发和管理时,选择合适的工具至关重要。
如何制作Linux根文件系统
根文件系统一直以来都是所有类Unix操作系统的一个重要组成部分,也可以认为是嵌入式Linux系统区别于其他一些传统嵌入式操作系统的重要特征,它给Linux带来了许多强大和灵活的功能,同时也带来了一些复杂性。我们需要清楚的了解根文件系统的基本结构,以及细心的选择所需要的系统库、内核模块和应用程序等,并配置好各种初始化脚本文件,以及选择合适的文件系统类型并把它放到实际的存储设备的合适位置。
Linux的根文件系统以树型结构组织,包含内核和系统管理所需要的各种文件和程序,一般说来根目录”/”下的顶层目录都有一些比较固定命名和用途。
下面列出了一个Linux根文件系统中的比较常见的目录结构:
/bin存放二进制可执行命令的目录
该目录下存放所有用户都可以使用的、基本的命令,这些命令在挂接其它文件系统之前就可以使用,所以/bin目录必须和根文件系统在同一个分区中。
/bin目录下常用的命令有:cat,chgrp,chmod,cp,ls,sh,kill,mount,umount,mkdir,m knod,[,test等“[”命令其实就是test命令,我们在利用Busybox制作根文件系统时,在生成的bin目录下,可以看到一些可执行的文件,也就是可用的一些命令。
/dev存放设备文件的目录
该目录下存放的是设备文件,设备文件是Linux中特有的文件类型,在Linux系统下,以文件的方式访问各种设备,即通过读写某个设备文件操作某个具体硬件。比如通过"dev/ttySAC0"文件可以操作串口0,通过"/dev/mtdblock1"可以访问MTD设备的第2个分区。
/etc存放系统管理和配置文件的目录
该目录下存放着各种配置文件,对于PC上的Linux系统,/etc目录下的文件和目录非常多,这些目录文件是可选的,它们依赖于系统中所拥有的应用程序,依赖于这些程序是否需要配置文件。在嵌入式系统中,这些内容可以大为精减。
/home用户主目录,比如用户user的主目录就是/home/user,可以用~user表示
用户目录,它是可选的,对于每个普通用户,在/home目录下都有一个以用户名命名的子目录,里面存放用户相关的配置文件。
/lib存放动态链接共享库的目录
该目录下存放共享库和可加载(驱动程序),共享库用于启动系统。运行根文件系统中的可执行程序,比如:/bin/sbin目录下的程序。
/sbin存放系统管理员使用的管理程序的目录
该目录下存放系统命令,即只有管理员能够使用的命令,系统命令还可以存放在/usr/sbin,/usr/local/sbin目录下,/sbin目录中存放的是基本的系统命令,它们用于启动系统,修复系统等,与/bin目录相似,在挂接其他文件系统之前就可以使用/sbin,所以/sbin目录必须和根文件系统在同一个分区中。
/sbin目录下常用的命令有:shutdown reboot fdisk fsck等,本地用户自己安装的系统命令放在/usr/local/sbin目录下。
/tmp公用的临时文件存储点
用于存放临时文件,通常是空目录,一些需要生成临时文件的程序用到的/tmp目录下,所以/tmp目录必须存在并可以访问。
/root系统管理员的主目录
根用户的目录,与此对应,普通用户的目录是/home下的某个子目录。
/mnt系统提供这个目录是让用户临时挂载其他的文件系统。
用于临时挂载某个文件系统的挂接点,通常是空目录,也可以在里面创建一引起空的子目录,比如/mnt/cdram/mnt/hda1。用来临时挂载光盘、硬盘。
/proc虚拟文件系统,可直接访问这个目录来获取系统信息。
这是一个空目录,常作为proc文件系统的挂接点,proc文件系统是个虚拟的文件系统,它没有实际的存储设备,里面的目录,文件都是由内核临时生成的,用来表示系统的运行状态,也可以操作其中的文件控制系统。
/usr最庞大的目录,要用到的应用程序和文件几乎都在这个目录。
/usr目录的内容可以存在另一个分区中,在系统启动后再挂接到根文件系统中的/usr目录下。里面存放的是共享、只读的程序和数据,这表明/usr目录下的内容可以在多个主机间共享,这些主要也符合FHS标准的。/usr中的文件应该是只读的,其他主机相关的,可变的文件应该保存在其他目录下,比如/var。/usr目录在嵌入式中可以精减。
/var某些大文件的溢出区
与/usr目录相反,/var目录中存放可变的数据,比如spool目录(mail,news),log文件,临时文件。
---------------------------------------------------------------------
一、移植环境:
1、 Ubuntu 10.10发行版
2、 u-boot.bin
3、目标机:FS_S5PC100平台
4、交叉编译器 arm-cortex_a8-linux-gnueabi-gcc
---------------------------------------------------------------------
二、移植步骤
1、源码下载
我们选择的版本是busybox-1.17.3.tar.bz2下载路径为:
2、解压源码
$ tar xvf busybox-1.17.3.tar.bz2
3、进入源码目录
$ cd busybox-1.17.3
4、配置源码
$ make menuconfig
Busybox Settings--->
Build Options--->
[*] Build BusyBox as a static binary(no shared libs)
[ ] Force NOMMU build
[ ] Build with Large File Support(for accessing files> 2 GB)
(arm-cortex_a8-linux-gnueabi-) Cross Compiler prefix
() Additional CFLAGS
5、编译
$ make
6、安装
busybox默认安装路径为源码目录下的_install
$ make install
7、进入安装目录下
$ cd _install
$ ls
bin linuxrc sbin usr
8、创建其他需要的目录
$ mkdir dev etc mnt proc var tmp sys root
9、添加库
在_install目录下创建一个lib文件夹,将工具链中的库拷贝到lib目录下
$ mkdir lib
$ cp/home/linux/x-tools/arm-cortex_a8-linux-gnueabi/arm-cortex_a8-linux-gnueabi/lib/*./lib/
删除lib下的所有目录、.o文件和.a文件,对库进行瘦身以减小文件系统的大小
$ rm*.o*.a
$ arm-cortex_a8-linux-gnueabi-strip lib/*
10、添加系统启动文件
在etc下添加文件inittab
$ vim/etc/inittab
文件内容如下:
#this is run first except when booting in single-user mode.
:: sysinit:/etc/init.d/rcS
#/bin/sh invocations on selected ttys
# Start an"askfirst" shell on the console(whatever that may be)
::askfirst:-/bin/sh
# Stuff to do when restarting the init process
::restart:/sbin/init
# Stuff to do before rebooting
::ctrlaltdel:/sbin/reboot
在etc下添加文件fstab
$ vim/etc/fstab
文件内容如下:
#device mount-point type options dump fsck order
proc/proc proc defaults 0 0
tmpfs/tmp tmpfs defaults 0 0
sysfs/sys sysfs defaults 0 0
tmpfs/dev tmpfs defaults 0 0
这里我们挂在的文件系统有三个proc、sysfs和tmpfs,在内核中proc和sysfs默认都支持,而tmpfs是没有支持的,我们需要添加tmpfs的支持
修改内核配置:
$ make menuconfigFile systems--->
Pseudo filesystems--->
[*] Virtual memory file system support(former shm fs)
[*] Tmpfs POSIX Access Control Lists
重新编译内核
$ make zImage
在etc下创建init.d目录,并在init.d下创建rcS文件
$ mkdir/etc/init.d-p
$ vim/etc/init.d/rcS
rcS文件内容为:
#!/bin/sh
# This is the first script called by init process
/bin/mount-a
为rcS添加可执行权限:
$ chmod+x init.d/rcS
在etc下添加profile文件
$ vim/etc/profile
文件内容为:
#!/bin/sh
export HOSTNAME=farsight
export USER=root
export HOME=root
#export PS1="\[\u@\h\W\]\$"
export PS1="[$USER@$HOSTNAME\W]\#"
PATH=/bin:/sbin:/usr/bin:/usr/sbin
LD_LIBRARY_PATH=/lib:/usr/lib:$LD_LIBRARY_PATH
export PATH LD_LIBRARY_PATH
11、设备文件创建
根文件系统中有一个设备节点是必须的,在dev下创建console节点
$ mknod dev/console c 5 1
重要:新制作的文件系统尺寸若超出8M,删除不需要的库文件。
Linux系统下软件包的制作方法和过程
总的情况下Linux下软件安装主要有三种方式:
一种是源码安装,需要用户自己手动编译
另一种是RPM包(RedHat Linux Packet Manager),通过RPM命令就可以实现安装
还有一种为*.bin文件,安装方法与Windows下的安装过程类似
通常情况下Linux安装软件主要通过以下两种方式
①文件名形如xxx.i386.rpm,软件包以二进制形式发布.
②文件名形如xxx.tar.gz,软件包多以源码的形式发布.
Linux软件包管理可以分为三类:二进制包的管理,源代码包的管理,脚本安装
另外值得注意的是目前存在各种Linux的发行版获取和安装软件的方式也有很多例如
【】redhat/centos的yum安装(有专门的镜像源)
【】Ubuntu/Fedora/Debian的sudo apt-get适用于deb包进行管理安装
【】也有的软件是通过刻盘加密的形式然后进行安装的(例如cnyunwei)
【】在系统运维管理人员方面也有通过ssh、C/C++语言或者py执行的一些软件命令进行自动化管理的应用,这里就不做详细介绍了。
下面有一张图可以清晰地表示linux软件应用的架构关系:
在Linux启动的时候。首先会启动内核(kernel),内核是一段计算机程序,这个程序直接管理管理硬件,包括CPU、内存空间、硬盘接口、网络接口等等。所有的计算机操作都要通过内核传递给硬件。我们可以看到,Linux利用kernel实现软硬件的对话。通过系统调用的这个重要的接口,Linux将上层的应用与下层的kernel完全分离开,为程序员隐藏了底层的复杂性(相应的,也提高了上层应用的可移植性)。当我们在升级kernel的时候,也可以保持系统调用的语句不变,从而让上层应用不感受到下层的改变。库函数利用系统调用创造出模块化的功能,而shell则提供了一个用户界面,并让我们可以利用shell的语法编写脚本,以整合程序。有了这些思想我们可以快速地了解linux的软件应用的安装和工作原理,也因此为了方便和获取更多企业应用我们需要在linux系统上开发并且通过源码编译的方式制作各种软件包从而为信息化时代服务。
本文主要介绍源码安装与RPM包的安装
源码包和商业软件包根据各个公司或作者的实际情况出发(可以是tar等格式的压缩包,也可以是bin的源程序,可以是已经编译好了的直接拿来运行的文件,也可以是光盘虚拟化文件等其他介质来制作发布的iso文件等)封装成一种特定的格式发布从而进行相应的软件服务。其实通过yum或者make install命令安装的软件在系统都会自动生成rpm包(只是参数和功能模块差异和严谨的)
简介:
RPM(RedHat Package Manager,红帽子软件包管理器)用于软件包的安装、查询、升级、校验、卸载,以及生成.rpm格式的软件包 RPM的使用前
挂载linux系统(centos4为例)的安装光盘,当然也可在网上下载免费的RPM包.
# mount/dev/cdrom---挂载光盘
# cd/media/cdrom/CentOS/RPMS---进入光盘中RPM包的目录(可以通过#mount命令来查看光盘的挂载点一般会在最后一行显示)
# ls
一、源码包安装
1、*.src.rpm形式的源代码软件包
用法:
安装: rpm–rebuild*.src.rpm
cd/usr/src/dist/RPMS
Rpm–ivh*.rpm
卸载: rpm–e packagename
2、.tar.gz,*.tgz,*.bz2形式软件包的安装
首先进行解压,命令如下
tar zxvf*.tar.gz
tar xvfz*.tgz
tar xvfj*.tar.bz2
解压之后进入解压目录,然后进行以下操作(一般情况,具体看软件包的文件名)
配置:./configure
编译:make
安装:make install
卸载:make uninstall
源码安装有一定的难度,不同的软件可能有不同的安装,一般在解压之后应该先阅读说明文档,按照说明进行安装,上面说的只是一般情况。
二、RPM包安装
RPM安装包格式是由Redhat公司提出的,大大的简化了Linux下软件的安装,首先介绍一下通用选项。
-v:显示附加信息
-vv:显示调试信息
--root directory:让RPM以directory作为根目录,这样预安装程序和后安装程序都会安装到这个目录下。
1、安装:rpm–i file.rpm
Options:
h:安装时输出hash记号
test:只对安装进行测试,不真正安装
--persent:以百分比形式显示安装进度
--excludedocs:不安装软件包中的文档
--replacepkgs:强制重新安装
--replacefiles:替换属于其它软件包的文件
--force:忽略软件包及文档冲突
--ignorearch:不校验软件包结构
--ignoreos:不检查软件包运行的操作系统
--nodeps:不检查依赖性关系
--noscripts:不运行预安装和后安装脚本程序
2、删除rpm–e pkgname
Option:
--test:只做删除测试,不真正删除
--noscripts:不运行预安装和后安装脚本程序
--nodeps:不检查依赖性
注意:pkgname是软件包的名字,不是rpm包名字,而是安装后软件包的名字,可以用查询命令来查询软件包名。
3、升级rpm–U(或者—upgrade)file.rpm
Option:
基本与安装时的option一样,有几个特殊的:
--oldpackage:允许一个旧版本
4、查询rpm–q(或者--query)
Option:
-p PACKAGE_FILE:查询软件包的文件
-f FIEL:查询FILE属于哪个软件包
-a:查询所有安装的软件包
-ggroup:查询属于group组的软件包
--whatproVidesCAPABILITY:查询提供了CAPABILITY功能的软件包
--whatrequiresCAPABILITY:查询所有需要CAPABILITY功能的软件包
-i:显示软件包的概要信息
-l:显示软件包中的文件列表
-c:显示配置文件列表
-s:显示文件列表
-scripts:显示安装、卸载,校验脚本
--qf:以用户指定的方式查询
--dump:显示每个文件的校验信息
--proVides:显示软件包提供的功能
-R:显示软件包需要的功能
5、校验已经安装的软件包 rpm–V(or–verify,or–y)
Option选项与其它命令的类似
6、校验软件包中的文件 rpm–K(or–checksig) file.rpm
Option:
-v:显示版本信息
-vv:显示调试信息
--rcfileFILELIST:设置rpmrc文件为FILELIST
7、其它RPM选项
--rebuilddb:重建RPM资料库
--initdb:创建一个新的RPM资料库
--quiet:尽可能地减少输出
--help:显示帮助文件
--version:显示RPM当前版本
上面只是对常用选项的总结,具体还有什么问题,可以用man rpm命令进行查看,官方文件永远最好的老师。
三、*.bin格式安装文件的安装
只需双击或单击*.bin文件就可以根据提示安装了,不再敷述。
要想制作一个RPM格式的软件包,需要编写软件包描述文件。其标准命名格式为:软件名-版本号-释出号.spec(现在大多情况下都是直接用:软件名.spec),这个文件,详细描述了有关该软件包的诸多信息,如软件名,版本,类别,说明摘要,创建时要执行什么指令,安装时要执行什么操作,以及软件包所要包含的文件等等。有了这个文件,RPM就可以制作出相应的包裹文件来。当然现在也有例如Source rpm这样开源的包制作辅助工具只要一个程序源即可通过向导下一步即可制作。
简单的一个制作例子:
其实最好的办法是做个软件包。我记得 rpm和 debian都有快速打包的开源软件可以直接拿来使用即可。
eg将nginx的tar包制作为RPM包
1.下载nginx的源码包
2.将文件放到/usr/src/redhat/SOURCES/目录下
3.编写SPEC文件
[root@mail SPECS]# vinginx-0.8.35.spec
Summary:the first rpmpackage
Name:nginx
Version:0.8
Release:35
Vendor:chenwei01@corp.the9.com
License:Share
Group:Applications/Text
Source0:nginx-0.8.35.tar.gz
%description
my test nginx
%prep
tar-zxvf$RPM_SOURCES_DIR/nginx-0.8.35.tar.gz
%build
cd$RPM_BUILD_DIR/nginx-0.8.35
./configure
make
%install
cd$RPM_BUILD_DIR/nginx-0.8.35
make install
%clean
rm-rf$RPM_BUILD_DIR/nginx-0.8.35
%files
%defattr(-,root,root)
/usr/local/nginx/sbin/nginx
%doc$RPM_BUILD_DIR/nginx-0.8.35/README
4.制作RPM包
[root@mail SPECS]#rpmbuild-ba nginx-0.8.35.spec
若运行没有错误,则产生/usr/src/redhat/RPMS/i386/nginx-0.8-35.i386.rpm和/usr/src/redhat/SRPMS/nginx-0.8-35.src.rpm两个文件。
总结:rpm包如何制作之个人经验
一 RPM介绍
RPM前是RedHat Package Manager的缩写,本意是Red Hat软件包管理,顾名思义是Red Hat贡献出来的软件包管理;现在应为RPM Package Manager的缩写。在Fedora、Redhat、Mandriva、SuSE、YellowDog等主流发行版本,以及在这些版本基础上二次开发出来的发行版采用; RPM包中除了包括程序运行时所需要的文件,也有其它的文件;一个RPM包中的应用程序,有时除了自身所带的附加文件保证其正常以外,还需要其它特定版本文件,这就是软件包的依赖关系。
RPM可以让用户直接以binary方式安装软件包,并且可替用户查询是否已经安装了有关的库文件;在用RPM删除程序时,它又会聪明地询问用户是否要删除有关的程序。如果使用RPM来升级软件,RPM会保留原先的配置文件,这样用户就不用重新配置新的软件了。RPM保留一个数据库,这个数据库中包含了所有的软件包的资料,通过这个数据库,用户可以进行软件包的查询。RPM虽然是为Linux而设计的,但是它已经移值到SunOS、Solaris、AIX、Irix等其它UNIX系统上了。RPM遵循GPL版权协议,用户可以在符合GPL协议的条件下自由使用及传播RPM。
二 RPM包分类
我个人认为rpm分为两大类,
1二进制类包,包括rpm安装包(一般分为i386和x86等几种)和调式信息包等。
2源码类包,源码包和开发包应该归位此类。
它们之间的关系是,最先我们按rpm打包要求改造软件项目源码,当符合要求之后就可以使用rpmbuild命令来生成不同的rpm包,同时生成的包之间版本是直接对应的,比如相同的源码包将生成完全相同的二进制rpm包。当你在网上查找rpm包时,一般你可以在RPMS目录中找到预编译的二进制包,而源码包则会在SRPMS目录内。
我们这里提到的RPM制作就是指改造软件源代码使之符合RPM打包要求的过程,这也可以等价为RPM源码包的制作过程,因为当你有了源码包就可以直接编译得到二进制安装包和其他任意包。
三 RPM包制作介绍
RPM包的制作,即是RPM源码包的制作。
这里我想说说RPM包工作的原理,这将有助于全面的了解RPM包管理系统的知识。
RPM是为解决源码包不易安装(需要编译)和软件包相互之间依赖(是RPM包管理器可以一定程度解决依赖问题)问题,它通过在探测源码包在build和install阶段的动作获得最终生成的需要安装的系统里的文件,并记录下一些必要的操作(比如安装完成后执行某项操作),然后把此组成为一个整体,当在用户安装此包时把前面获得的所有问题和记录的所有操作原原本本的作用的实际系统上。
为一个普通的源码打RPM包,需要下面一些操作,首先需要对项目的Makefile作必要的改造以支持RPM打包操作(实际上此操作不是绝对的,SPEC文档和Makefile的是协调统一工作的,只要他们之间配合好了其他都无所谓,我们一般只是推荐大家尽量按行业标准规范操作而已);其次是针对当前项目撰写SPEC文档,SPEC文档包括了RPM打包过程的操作内容和新生成的RPM包的基本信息等,它的作用对象是打包程序rpmbuild。
四 RPM包制作过程
1准备打包环境
fedora系统下使用如下命令安装rpmbuild
#yum install rpmbuild
rpmbuild的工作目录如下,
~/rpmbuild
~/rpmbuild/SOURCES
~/rpmbuild/SPECS
~/rpmbuild/BUILD
~/rpmbuild/RPMS
~/rpmbuild/RPMS/i386
~/rpmbuild/SRPMS
如果你的用户目录主目录下没有类似目录结构,你可以通过一个工具软件来自动配置和生成,如下。
#yum installrpmdevtools
下了运行自动配置命令自动生成如上目录,并配置一些必要操作。
#rpmdev-setuptree
rpmdev-setuptree命令默认将再当前用户主目录下创建一个RPM构建根目录结构,
如果需要改变次默认位置,可以修改配置文件:~/.rpmmacros中变量_topdir对应的值即可。
一般rpmbuild会在当前用户的主目录下自动建立如上目录结构,如果在你对应用户的构建目录中没有自动建立如上目录,你可以通过手动方式建立。上面目录的使用是这样分配的,SOURCES放置打包资源,包括源码打包文件和补丁文件等;SPECS目录放置SPEC文档;BUILD打包过程中的工作目录;RPMS目录存放生成的二进制包,RPM包根据硬件平台不同分类,i386表示生成i386结构的包将存放在该目录下;SRPMS目录存放生成的源码包。
2撰写SPEC文档
SPEC撰写是打包RPM的核心,也算是最难的一步,好在我们可以从参照一个简单的模板文件开始,在可以实现基本功能的基础上再一步一步的扩充文档内容,直至完全达到要求。下面是一个简单的SPEC文档,其中包括了一些说明信息(注:#后面的内容为说明信息),该SPEC文档是对一个测试的软件项目hellorpm写的,hellorpm软件包编译后仅有一个执行文件、一个手册文件和一个项目说文件。
hellorpm.spec文档的内容如下:
-----------------------------------------------------------------------------
#软件包简要介绍
Summary: hellorpm is atest program。
#软件包的名字
Name: hellorpm
#软件包的主版本号
Version:2.2.6
#软件包的次版本号
Release: 1
#源代码包,默认将在上面提到的SOURCES目录中寻找
Source0:%{name}-%{version}.tar.gz
#授权协议
License: GPL
#定义临时构建目录,这个地址将作为临时安装目录在后面引用
BuildRoot:%{_tmppath}/%{name}-%{version}-%{release}-root
#软件分类
Group:Development/Tools
#软件包的内容介绍
%description
The hellorpm programis a test.
#表示预操作字段,后面的命令将在源码代码BUILD前执行
%prep
#构建BUILD环境,将解压源码压缩包到BUILD目录
%setup-q
#BUILD字段,将通过直接调用源码目录中自动构建工具完成源码编译操作
%build
#调用源码目录中的configure命令
./configure
#在源码目录中执行自动构建命令make
make
#安装字段
%install
#调用源码中安装执行脚本
makeDESTDIR=$RPM_BUILD_ROOT install
#文件说明字段,声明多余或者缺少都将可能出错
%files
#设置文件权限属性
%defattr(-,root,root)
#声明/usr/local/bin/hellorpm将出现在软件包中
/usr/local/bin/hellorpm
#声明并设置文件属性
%doc%attr(0444,root,root)/usr/local/man/man1/hellorpm.1
#同上,声明文档文件
%docREADME
-------------------------------------------------------------------------------
这个文档需要说明的一点:
BuildRoot:%{_tmppath}/%{name}-%{version}-%{release}-root
上面BuildRoot变量表示的是源码的临时按照目录,rpmbuild就是通过次目录获得将要按照到系统中的所有文件,而在SPEC文档后面make install命令中的参数DESTDIR=$RPM_BUILD_ROOT即是对该参数的引用,这个参数将传给Makefile文件一告诉自动构建工具应该安装文件那里(实际上我再前文提到过的Makefile需要作一些改造以适应RPM的构建就包括此操作,你的Makefile文件中至少要知道在RPM构建过程中引用此参数的值去控制安装操作的目标)。
如上一个简单的SPEC文档撰写完成,下面把一个名为hellorpm-2.2.6.tar.gz的源码压缩文件放到
rpmbuild根目录下的SOURCES目录下(注,确保此归档文件解压后的目录为hellorpm-2.2.6,否则会有问题)。
到此一个完整的rpm打包环境已经构建完成,下面我们就可以开始构建二进制和源代码RPM包。
3构建RPM包
构建RPM包是有命令rpmbuild在SPEC的指导下完成。
开始构建操作,首先进入到当前用户的rpmbuild根目录(即上面提到的目录环境)。
#cd~/rpmbuild/
执行如何命令,-ba表示build all,即生成包括二进制包和源代码包的所有RPM包,下来如果正常的话,rpmbuild将正常退出,同时在RPMS目录和SRPMS目录中将生成对应的RPM包。
#rpmbuild-baSPECS/hellorpm.spec
这里仅仅介绍了一个最简单软件的最简单的RPM的打包操作过程,诸如带有共享文件的需要进行复杂配置的具有复杂依赖关系的等等的项目的打包以及后期的维护,包括补丁的制作我将在下来的时间完成补充更新,今天时间不早了,该休息了!
注:费了大半夜的功夫,搞出这么个令人不满意的文档,我思考着,这样做有多少意义呢?不敢重复发明轮子的,站到巨人的肩膀你才能看得更远,是这样吗?是不是下周开始立个计划,每周至少翻译三篇fedora官网的文档给自己练练手。