软件安装 RPM , SRPM 与 YUM功能

来源:互联网 发布:adobe全套软件下载 编辑:程序博客网 时间:2024/05/15 20:14

软件安装 : RPM, SRPM,YUM功能

 虽然使用原始码进行软件编译可以具有客制化的设定,但是对于Linux distribution的发布商来说,则有软件管理不易的问题,毕竟不是每个人都会进行原始码编译的,如果能

预先在相同的硬件与操作系统上面编译好才发布的话,可以让相同的distribution具有完全一致的软件版本,管理比较方便,那就是RPM和YUM这两个好用的东西啦!

之前提到利用厂商释出的Tarball来进行软件的安装,不过,每次安装前都要侦测操作系统与环境,设定编译参数,实际的编译,最后以个人的喜好来安装软件到定位安装路径

比较麻烦的过程,其实如果你的Linux系统和厂商的系统一样的话,厂商编译出来的执行档,自然也就可以在我的系统上面运行了,通过厂商编译好的可执行的软件直接释出给

用户来安装,类似和Windows的安装方式,有程序开发者直接在已知的系统上面编译好,再将该程序直接给用户来安装,如果在安装的时候加上一些与这些程序相关的信息

将其建立成为数据库,那就可以安装,反安装,升级与验证等等相关功能了,最常见的软件管理员,分为RPM与DPKG,

两大主流:RPM与DPKG

Linux开发商在固定的硬件平台与操作系统上面将需要安装或升级的软件编译好,然后将相关档案打包成一个特殊格式的档案,这个档案内包含预先侦测系统与相依软件,并

提供记载该软件提供的所有档案信息,最终将软件档案释出,用户得到后,只要用特定的命令安装,那个该软件会依照内部的脚本来侦测相依的前驱软件是否存在,安装环境

符合要求,那就开始安装,安装后将该软件的信息写入软件管理机制中,最终以达成可以进行升级,移除等操作

无论DPKG与RPM这些机制或多或少都会有软件属性相依的问题,可以进行软件档案相依属性的检查,将相依属性的数据做成列表,等到实际软件安装时,若发现问题则管

理机制透过相依数据属性列表,管理机制自动去取得相依软件来安装,这样就解决相依问题了,Linux开发商都有提供软件在线升级的机制,原版光盘只有第一次安装时需要

用到,其他时候都是网络来获取开发商提供的任何软件的,dpkg 管理机制上就开发出 APT 的在线升级机制,RPM 则依开发商的不同,有Red Hat系统的yum,

SuSE 系统的 Yast Online Update (YOU), Mandriva 的 urpmi 软件

Red Hat/Fedora               RPM                         rpm, rpmbuild                   YUM (yum)

Debian/Ubuntu                DPKG                       dpkg                                   APT (apt-get)

RPM与SRPM

RPM是一种以数据库记录的方式来将你所需要的软件安装到你的Linux系统的一套管理机制,特点是将你要安装的软件先编译过,并且打包成为RPM机制的包装档案,透过

包安装的软件里头默认的数据库记录,记录这个软件要安装的时候必须具备的相依属性软件,当安装的时候,RPM会先依照软件里头的数据查询Linux主机的相依属性是否

满足,若满足则以安装,那么安装的时候将该软件的信息写入RPM数据库中,以便未来查询,验证与反安装,优点:

1. 由亍已经编译完成并且打包完毕,所以软件传输与安装上很方便 (不需要再重新编译);

2. 由亍软件的信息都已经记录在 Linux 主机的数据库上,很方便查询、升级与反安装

但是由于RPM档案是已经包装好的数据,里面的数据已经都编译完成了,该软件档案只能安装与原本默认的硬件与操作系统版本上,也就是不同的distribution 所释出的 RPM

 档案,并不能在其他的distributions 上使用,更有甚者,相同 distribution 的不同版本之间也无法互通

1. 软件档案安装的环境必须与打包时的环境需求一致或相当;

2. 需要满足软件的相依属性需求;

3. 反安装时需要特别小心,最底层的软件不可先移除,否则可能造成整个系统的问题!

那如果真的想要安装其他distributions 提供的好用的 RPM 软件档案时,可以用SRPM,也就是这个RPM档案里面含有原始码,这个SRPM所提供的软件内容没有编译过

他提供的是原始码

通常 SRPM 的扩展名是以 ***.src.rpm 这种格式来命名的,与Tarball安装的差异是,虽然SRPM的内容是原始码,但是他也含有该软件所需要的相关性软件说明,以及

所有RPM档案提供的数据,他与RPM不同的是,他也提供参数配置文件(就是configure与makefile),SRPM安装软件时必须要有:

1 先将该软件以 RPM 管理的方式编译,此时 SRPM 会被编译成为 RPM 档案;

2 然后将编译完成的 RPM 档案安装到 Linux 系统当中

SRPM需要重新编译一次,所以我们就可以透过修改SRPM内的参数配置文件,然后重新编译产生适合我们Linux环境的PRM档案了,如此,就可以将该软件安装到我们的系统

当中了,而不需与原作者打包的Linux环境相同了,

RPM               xxx.rpm                    可直接安装                   已编译                    不可修改参数并编译

SRPM            xxx.src.rpm             不可直接安装                未编译之原始码     可修改参数并编译

xxxxxxxxx.rpm <==RPM 的格式,已经经过编译且包装完成的 rpm 档案;

xxxxx.src.rpm <==SRPM的格式,包含未编译的原始码信息。

rp-pppoe-3.1-5.i386.rpm档案的意思依次是  软件名称     软件的版本信息      释出的次数     适合的硬件平台     扩展名

RPM的优点:RPM是透过预先编译并打包成为RPM文件格式后,再加以安装的方式,并且还能够进行数据库的记载,优点包含:

1. RPM 内含已经编译过的程序与配置文件等数据,可以让用户免除重新编译的困扰;

2 RPM 在被安装之前,会先检查系统的硬盘容量、操作系统版本等,可避免档案被错误安装

3. RPM 档案本身提供软件版本信息、相依属性软件名称、软件用途说明、软件所含档案等信息,便于了解软件;

4. RPM 管理的方式使用数据库记录 RPM 档案的相关参数,便亍升级、移除、查询与验证

如果安装的软件没有找到前驱软件,那么安装好的软件也就不法使用了,为了解决这个问题,RPM提供打包的软件时,同时加入一些讯息登陆的功能,这些讯息包括软件的

版本,打包软件者,相依属性的其他软件,本软件的功能说明,本软件的所有档案记录,然后在Linux上面建立一个RPM软件数据库,这样,在安装某个软件的时候,RPM

会去检验一下数据库里面是否已经存在相关的软件了,如果数据库显示不存在,那么这个RPM档案就不能安装,这就是RPM类型的档案为人所诟病的软件属性相依问题

RPM 属性相依的克服方式: YUM 在线升级

软件的内容分为一般使用与开发使用 (development) 两大类

pam-devel-x.x.rpm  为了重复利用既有的软件功能,因此很多软件都会以凼式库的方式释出部分功能,以方便其他软件的呼叫应用, 例如 PAM 模块的验证功能

pam-x.x.rpm 大部分人都会安装这个软件的内容,为了节约用户的数据量

RPM的相依性问题可以由YUM解决,YUM可以将相依属性的软件进行列表,在有要安装软件需求时,先找到这个列表,同时与系统内已安装的软件相比较,没有安装到的软件

会一口气同时进行安装,那就能解决相依性的问题了。

CentOS 先将释出的软件放置到 YUM 朋务器内,然后分析这些软件的相依属性问题,将软件内的记录信息写下来,然后将这些信息分析后记录成软件相关的列表,这些软件

所在位置与列表数据可以称呼为容器,客户端有软件安装时,会向网络上面的YUM服务器的容器网址下载清单列表,然后透过列表与本机RPM数据已存在的软件数据相比较

,就能够一口气安装所有需要具有相依属性的软件了,

当客户端有升级、安装的需求时, yum 会向容器要求清单的更新,等到清单更新到本机的 /var/cache/yum 里面,等下更新时就会用到这个本机清单与本机的RPM数据库进行

比较,这样就知道下载什么软件,接下来yum跑到容器服务器下载所需要的软件,接着透过RPM的机制开始软件的安装,最后还是需要动用RPM的啦,容器的用意是因为原厂

的数据有原数据,更新数据,特殊数据,放置在不同过的容器网址,不会放置在一起,也就是不同的网址放置不同的软件功能类型的意思


RPM 软件管理程序: rpm

rpm可以轻松查询到系统有没有安装某个软件,以及知道rpm类型的档案他们是将软件的相关档案放置在哪里?还有,rpm的数据库放置在哪里?

rpm安装的时候,会先去读取档案内记载的设定参数内容,然后将该数据用来比对Linux系统的环境,找到是否有属性相依的软件尚未安装的问题,例如Openssh这个软件

需要Openssl这个加密软件的帮忙,所以Openssl才能装openssh的意思,没有openssl,就无法安装openssh的意思,合格的话就开机安装了,安装完毕后,该软件相关的

信息就会被写入/var/lib/rpm目录下的数据库档案,这个目录内的数据很重要,未来有任何软件升级的需求,版本之间的比较来自于这个数据库,想查询系统已安装的软件

也是从这里查询的,目前的RPM也提供数字签名信息,这些数字签名也是在这个目录内记录的,所以这个目录不要删除


软件安装好的档案安装到的目录包括:

/etc               一些配置文件放置的目录,例如 /etc/crontab

/usr/bin        一些可执行文件案

/usr/lib         一些程序使用的动态凼式库

/usr/share/doc     一些基本的软件使用手册与说明文件

/usr/share/man    一些 man page 档案


RPM 安装 (install)

RPM只有root的身份能够执行,例如安装rp-pppoe-3.5-32.1.i386.rpm 的档案

本地安装rpm -ivh package_name

-i :install 的意思

-v :察看更细部的安装信息画面

-h :以安装信息列显示安装进度

一口气安装两个以上的软件时

本地安装多个rpm包rpm -ivh a.i386.rpm b.i386.rpm *.rpm

直接由网络上面的某个档案安装,以网址来安装

rpm -ivh http://website.name/path/pkgname.rpm

如果在安装的过程中发现问题,但是执意要安装这个软件时,需要用到如下的参数进行强制的安装

--nodeps   当发生软件属性相依问题而无法安装,但你执意安装时

--replacefiles   覆盖安装

--replacepkgs  重复安装

--force                其实就是 --replacefiles 不 --replacepkgs 的综合体!

--test                  要测试一下该软件是否可以被安装到使用者的 Linux 环境当中

--justdb             由亍 RPM 数据库破损或者是某些缘故产生错误时,可使用这个选项来更新软件在数据库内的相关信息

--nosignature   想要略过数字签名的检查时,可以使用这个选项

--prefix 新路径  要将软件安装到其他非正规目录,

--noscripts       不允许软件在安装的过程中自行执行某些系统指令

在没有网络的前提下,妳想要安装一个名为 pam-devel 的软件,妳手边只有原版光盘,该如何是好,可以透过挂载原版光盘来进行数据的查询与安装,将光盘挂载到/media

当中,并处理软件的下载

挂载光盘,使用: mount /dev/cdrom /media

找出档案的实际路径:find /media -name 'pam-devel*'

测试此软件是否具有相依性: rpm -ivh pam-devel... --test

直接安装: rpm -ivh pam-devel...

卸除光盘: umount /dev/cdrom

RPM升级与更新

命令是-Uvh 或者 -Fvh 来升级,,而 -Uvh 与 -Fvh 可以用的选项与参数,跟 install 是一样,不过-U 与 -F的意义还是不太一样的

-Uvh 后面接的软件即使没有安装过,则系统将予以直接安装; 若后面接的软件有安装过旧版,则系统自动更新至新版;

-Fvh 如果后面接的软件并未安装到你的 Linux 系统上,则该软件不会被安装;亦即只有已安装至你 Linux 系统内的软件会被『升级』!

想要大量的升级系统旧版本的软件,使用 -Fvh 则是比较好的作法,因为没有安装的软件不会被补小心安装进系统中,

整个操作系统的旧版软件修补时,这么进行:

1. 先到各发展商的 errata 网站或者是国内的 FTP 映像站捉下来最新的 RPM 档案;

2. 使用 -Fvh 来将你的系统内曾安装过的软件进行修补与升级!

在不使用YUM功能的情况下,你可以到Centos的映射站台下载updates数据,然后利用上述的方法来一口气升级,当然,升级也可以使用--nodeps/--force 等等的参数

RPM 查询 (query)

RPM查询的时候,查询的地方是/var/lib/rpm/ 这个目录下的数据库档案,RPM也可以查询未安装的RPM档案内的信息

rpm -qa <==已安装软件

rpm -q[licdR]  已安装的软件名称 <==已安装软件

rpm -qf 存在于系统上面的某个文件名 <==已安装软件

rpm -qp[licdR] 未安装的某个文件名 <==查阅RPM档案

查询已安装软件的信息

-q :仅查询,后面接的软件名称是否有安装;

-qa :列出所有的,已经安装在本机 Linux 系统上面的所有软件名称; 

-qi :列出该软件的详细信息 (information),包括开发商、版本不说明等; 

-ql :列出该软件所有的档案与目录所在完整文件名 (list); 

-qc :列出该软件的所有配置文件 (找出在 /etc/ 底下的档名而已) 

-qd :列出该软件的所有说明文件 (找出与 man 有关的档案而已) 

-qR :列出与该软件有关的相依软件所含的档案 (Required 的意思) 

-qf :由后面接的文件名,找出该档案属亍哪一个已安装的软件; 

查询某个 RPM 档案内含有的信息: 

-qp[icdlR]:注意 -qp 后面接的所有参数以上面的说明一致。但用途仅在于找出 某个 RPM 档案内的信息,而非已安装的软件信息!注意!

查询的部分都需要加上-q,查询主要分为两部分,一个是查已安装到系统上面的软件信息,查询这部分的信息都是由 /var/lib/rpm/ 所提供,另一个则是由RPM档案内找出一些

要写入数据库内的信息,这部分就得使用-qp(p是package的意思),例如:

1.找出你的 Linux 是否有安装 logrotate 这个软件?rpm -q logrotate

2. 找出属于该软件所提供的所有目录与档案 rpm -ql logrotate(可以看出该软件到底提供了多少的档案与目录,也可以追踪软件的数据)

3.列出 logrotate 这个软件的相关说明数据  rpm -qi logrotate

4. 分别仅找出 logrotate 的配置文件与说明档  rpm -qc logrotate               rpm -qd logrotate

5. 若要成功安装logrotate,需要执行rpm -qR logrotate  来查询出安装这个软件需要什么档案的帮忙

rpm -qf /bin/sh 查询出某个指令是由哪个软件提供的

rpm -qpR filename.i386.rpm 查询出某个RPM包的

查询主机上以c开头的软件有哪些 rpm -qa | grep ^c | wc -l

查询httpd这个软件的所有配置文件放置的地方 rpm -qc httpd 

如果忘记了某个软件中的某个配置文件哪里修改过,想要重新安装一次该软件  rpm -ivh http://web.site.name/path/httpd-x.x.xx.i386.rpm --replacepkgs

如果误删了某个重要档案,例如/etc/crontab 又不晓得他属于哪个软件, 可以执行rpm -qf /etc/crontab来查询是哪个文件

RPM 验证与数字签名 (Verify/signature

验证功能提供系统管理员一个有用的管理机制,,作用:使用/var/lib/rpm 底下的数据库内容来比对目前Linux系统的环境下的所有软件档案,当你数据遗失,某个软件的

档案误删了,不小心修改了某个软件的档案内容,用一个方法来验证一下原本的文件系统,可以查询出到底修改了那些档案数据

rpm -Va   列出目前系统上面所有可能被更动过的档案

rpm -V 已安装的软件名称   后面加软件名称,若该软件所含的档案被更动过,才会列出来

rpm -Vp 某个 RPM 档案的档名  后面加的是文件名,列出该软件内可能被更改过的档案

rpm -Vf 在系统上面的某个档案  列出某个档案是否被更动过

Linux 内的 logrotate 这个软件是否被更动过? rpm  -V  logrotate  没有输出的话,表示该软件提供的档案没有被改动过 , 有输出的话,才是有状况

查询一下,你的 /etc/crontab 是否有被更动过? rpm -Vf /etc/crontab 有改动过,所以才会列出更动过的信息类型

输出的信息中再档名之前有个c 然后是一堆文字,那个c代表的是configuration 就是配置文件的意思 前面的八个信息是:

S :(file Size differs) 档案的容量大小是否被改变

M :(Mode differs) 档案的类型或档案的属性 (rwx) 是否被改变?如是否可执行等参数已被改变

5 :(MD5 sum differs) MD5 这一种指纹码的内容已经不同

D :(Device major/minor number mis-match) 装置的主/次代码已经改变

L :(readLink(2) path mis-match) Link 路径已被改变

U :(User ownership differs) 档案的所属人已被改变

G :(Group ownership differs) 档案的所属群组已被改变

T :(mTime differs) 档案的建立时间已被改变

如果所有的信息都被更动过,就会显示SM5DLUGT c filename

c :配置文件 (config file)

d :文件数据文件 (documentation)

g :鬼档案~通常是该档案不被某个软件所包含,较少发生!(ghost file)

l :许可证文件 (license file)

r :自述文件 (read me)

如果某个档案被更动过,并且是非预期的,那么可能被入侵了,一般来说 配置文件被更动过是正常的,万一你的binary program被更动过,那就要特别小心了

数字签名

谈完了软件的验证后,可以看出验证只能验证软件内的信息与/var/lib/rpm里面的数据库信息而已,如果该软件档案所提供的数据本身就是有问题的,那验证是无法确定该软件

的正确性的,可以使用和tarball验证一样的md5指纹码来检验,万一连指纹码都被串改了的话,可以透过数字签名来检验软件的来源的

厂商所推出的软件会有一个厂商自己的签章系统,只是这个签章被数字化了,厂商可以通过数字签名系统产生一个专属于该软件的签章,并将该签章的公钥释出,当你安装

一个RPM档案时:

1. 首先你必须要先安装原厂释出的公钥档案; 

2. 实际安装原厂的 RPM 软件时, rpm 指令会去读取 RPM 档案的签章信息,与本机系统内的签章信息比对,

3. 若签章相同则予以安装,若找不到相关的签章信息时,则给予警告并且停止安装

采用的数字签名系统为GUN计划的GnuPG,GPG通过HASH算法算出独一无二的专属密钥系统或者是数字签名系统,这里仅简单的说明数字签名在RPM档案上的应用而已

所以在安装软件之前先要安装原厂释出的GPG数字签名的公钥档案,数字签名位于ll /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-5 文件里面是一堆随机数,

这个随机数对于数字签名有意义而已,安装方式:rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-5

由于不同版本GPG密钥档案放置的位置可能不同,不过档名大多是GPG-KEY,可以使用locate 或 find 来查找locate GPG-KEY或find /etc -name '*GPG-KEY*'

安装完成之后,密钥的呈现方式是pubkey作为软件的名称,先列出密钥软件名称后,再以-qi的方式查询看看该软件的信息

rpm -qa | grep pubkey

rpm -qi gpg-pubkey-e8562897-459f07a4

其实重要的是最后一串乱码,那可以作为数字签名非常重要的一环,如果忘记加上数字签名,可能很多原版软件就不能安装了,除非利用rpm时选择略过数字签名的选项

PRM反安装与重建数据库

反安装就是将软件卸载啦,解安装的过程是从最上层往下解除,以 rp-pppoe 为例,这一个软件主要是依据 ppp 这个软件来安装,所以在解除ppp的时候,先要解除rp-pppoe

否则会出问题

移除的选项很简单,就透过 -e 即可移除,经常发生软件属性相依导致无法移除某些软件的问题

找出与 pam 有关的软件名称,并尝试移除 pam 这个软件

rpm -qa | grep pam

执行删除时 rpm -e pam 会出现error,这时可能就是遇到了相依性的问题,若移除pam-devel这个之前范例安装的软件,因为不存在相依性所以不会出现任何信息

rpm -q pam-devel 查询会提示没有安装,表示已经卸载掉了

我们知道pam所提供的函数库被很多其他软件所使用,因此不能移除pam,除非其他相依软件一口气全部移除,加上--nodeps来强制删除的话,那么用到pam函式库的

软件都无法运行了,你的主机就出现问题了,由于pam-devel是依附于pam的开发工具,你可以单独安装与单独移除

由亍 RPM 档案常常会安装/移除/升级等,某些动作或许可能会导致 RPM 数据库 /var/lib/rpm/ 内的档案破损,我们可以使用rebuilddb这个选项来重建一下数据库

rpm --rebuilddb <==重建数据库

SRPM 的使用 : rpmbuild

安装SRPM的软件时,如果想要修改SRPM里面的原始码的相关设定值,SRPM使用的是rpmbuild这个指令,

利用默认值安装 SRPM 档案 (--rebuid/--recompile)

SRPM档案可以设定这个档案内的原始码与相关的设定值,也可以直接编译并安装,利用rpmbuild配合

--rebuild 这个选项将SRPM进行编译于打包的动作,最后产生RPM的档案,这个档案可以用来安装,请用绝对路径来安装

--recompile   这个动作会直接的『编译』『打包』并且『安装』rebuild仅编译并打包,而recompile 不但进行编译跟打包,还同时进行『安装』了

这两个选项都没有修改过 SRPM 内的设定值,仅是再次编译生成RPM可安装软件档案而已,如果编译动作顺利,那么编译过程所产生的中间暂存盘都会被自动删除,

而发生任何错误,则中间档案会被保留在系统上,等待用户出错动作,想要出错或者更改SRPM的设定值时,就要知道利用SRPM的时候,系统会用到哪些重要的目录

SRPM 使用的路径与需要的软件

SRPM既然含有source code 那么其中一定有配置文件,所以我们要知道SRPM编译的时候用到哪些目录,一般都是在/usr/src这个目录下的,

/usr/src/redhat/SPECS  放置的是该软件的配置文件,软件的信息参数,设定项目

/usr/src/redhat/SOURCES 放置该软件的原始文件 (*.tar.gz 的档案) 以及 config 这个配置文件

/usr/src/redhat/BUILD  编译的过程中的暂存的数据

/usr/src/redhat/RPMS 经过顺利的编译成功之后,将打包完成的档案放置在这个目录当中,里面包含i386, i586, i686, noarch.... 等等的次目录

/usr/src/redhat/SRPMS  与RPMS 内相似的,放置的就是SRPM封装的档案,有时候想要将你的软件用SRPM方式释出的话,你的SRPM就会放置在这个目录中的

此外,在编译的过程当中,发生错误,都会在 /tmp下产生一个相对应的错误档,你可以根据该错误档案进行出错的工作,等到问题解决后,也编译成功了,那么刚刚解压缩

之后的档案,就是在/usr/src/redhat/SPECS, SOURCES, BUILD等等的档案都会被杀掉,而只剩下放置在 /usr/src/redhat/RPMS 底下的档案了

SRPM需要重新编译的话,就会用到make,gcc c c++ 等其他的编译用的程序语言来进行编译,可以先使用『 yum groupinstall "Development Tools" 』来安装开发软件

rpmbuild --rebuild rp-pppoe-3.5-32.1.src.rpm 重新编译:

ll /usr/src/redhat/RPMS/i386/ 就会看到这个rpm包了,整个过程和Tarball方式差不多,也是编译后变成binary program,接着再以RPM的机制封装起来,若编译正常则会看到

exit 0的字样,且会主动的删除很多中间暂存档的

配置文件的主要内容 (*.spec)

除了利用SRPM内预设的参数来进行编译之外,还可以修改这些参数后再重新编译,首先要将SRPM内的的档案放置到/usr/src/redhat/ 内的相关目录,然后再去修改配置文件

rpm -i rp-pppoe-3.5-32.1.src.rpm  过程不会显示,会将SRPM的档案解开后,放置到/usr/src/redhat/

find /usr/src/redhat/ -type f 会查看到补订档,原始码,配置文件

rp-pppoe.spec就是那个重要的配置文件  vi rp-pppoe.spec 内存放整个软件的基本相关信息,包括:

1.版本和释出次数

2.相依属性的内容

3.编译前的预处理,以及编译过程中所需要进行的指令

4.这个软件释出的档案有哪些的意思,那些需要记录在数据库内

5.列出这个软件的更改历史记录文件

rp-pppoe.sepc 这个档案,这是主要的将 SRPM 编译成 RPM 的配置文件

1. 整个档案的开头以Summary为开始,这部分的设定都是最基础的说明内容;

2. 然后每个不同的段落之间,都以%来做为开头,例如%prep与%install等;

系统整体信息方面

rp-pppoe.sepc内的内容

Summary 本软件是针对xDSL的拨接用途

Name 软件名称 最终会是RPM档案的档名构成之一

Verion 软件版本  也会是 RPM 档名的构成之一

Release 打包的次数  RPM 档名的构成之一

License 软件的授权模式 使用GPL

Group 这个软件的发展团体名称;

Url 这个原始码的主要官方网站;

这个软件的来源,如果是网络上下载的软件,通常一定会有这个信息来告诉大家这个原始档的来源! 此外还有来自开发商自己提供的原始文件数据,例如上面的 adsl-start 等程序。

Patch 就是作为补丁的 patch file

BuildRoot 设定作为编译时,该使用哪个目录来暂存中间档案 (如编译过程的目标档案/链接档案等档)。

ExclusiveArch 这个软件的适合安装的硬件,

上方是必须的,下方的是额外的设定值

1.Requires 这个软件还需要其他的软件支持,那么这里必须写上,则当你制作成PRM之后,系统就自动的去检查,这就是相依属性的主要来源

2.Prereq 这个软件需要的前驱程序,这个指的是程序   而requires指的是软件

3.BuildRequires 编译过程中所需要的软件,Requires 指的是『安装时需要检查』的,因为与实际运作有关,这个BuildRequires 指的是『编译时』所需要的软件

只有在 SRPM 编译成为 RPM 时才会检查的项目

4.这个软件是经由谁来打包的呢?

5.Vender 发展的厂商.

如果没有软件相依性的关系时,那么就可以不需要那个Requires,根据上面的设定,最终的档名就是{Name}-{Version}-{Release}.{ExclusiveArch}.rpm的格式

档名:『rp-pppoe-3.5-32.2.vbird.i686.rpm』

%description: 将你的软件做一个简短的说明,当使用rpm -qi软件名称的时候就可以查看到的信息,这里记得要详加解释

%prep: 也就是在进行设定或安装之前,你要编译完成的RPM包,帮你先做的事情做的事情,

安装之前的事情包括:

1. 进行软件的补丁 (patch) 等相关工作;

2. 寻找软件所需要的目录是否已经存在?确认用的!

3. 事先建立你的软件所需要的目录,或者事先要进行的任务;

4. 如果待安装的Linux系统内已经有安装的时候可能会被覆盖掉的档案时,那么就必须进行备份的工作了

%setup: 进行解压缩的工作,这个项目一定要写,不然你的tarball原始码是无法被解压缩的

%build: 谈怎么make编译成为可执行的程序,你会发现在此部分的程序代码方面,就是./configure make等项目

%install: 编译与安装完毕后,必须要将一些暂存在BuildRoot内的数据删除才好,因此这个时候这个clean的项目就重要了,有点像

make clean的感觉,

%files: 这个软件安装的档案都需要写到这里来,包括目录,连同目录请一起写到这个段落中,此外,你也可以指定每个档案的类型

包括文件档(%doc后面接的)与配置文件(%config后面接的)

%changelog: 这个项目主要记录这个软件曾经的更新记录,*后面应该要以时间,修改者,email与软件版本来做为说明 减号后面

则是你要做的详细说明,

SRPM 的编译指令 (-ba/-bb)

将在/usr/src/redhat 底下的数据编译或者单纯的打包成为RPM或SRPM时,就需要rpmbuild指令与相关选项的帮忙,

rpmbuild -ba rp-pppoe.spec <==编译幵同时产生 RPM 与SRPM 档案

rpmbuild -bb rp-pppoe.spec <==仅编译成 RPM 档案

这个时候系统会这样做:

先进入BUILD这个目录中,亦即是/usr/src/redhat/BUILD 这个目录,接着依照*.spec档案内的Name与Version定义出工作的目录名称

那举系统就会在 BUILD 目录中先删除 rp-pppoe-3.5 的目录,再重新建立一个 rp-pppoe-3.5 的目录,幵进入该目录,在新的目录里面,针对在SOURCES

目录下的来源档案,也就是*.spec里面的Source设定的那个档案,以tar进行解压缩,则会在 /usr/src/redhat/BUILD/rp-pppoe-3.5 当中

将 /usr/src/redhat/SOURCES/rp-pppoe-3.5.tar.gz 进行解压缩,再开始 %build 及 %install 的设定与编译,最后完成打包的档案给放置到该去的地方,如果

硬件是386,最后编译成功的 *.i386.rpm,档案会被放置在 /usr/src/redhat/RPMS/i386里面,如果是 i686 那就自然就是 /usr/src/redhat/RPMS/i686 目录下

以上的结果就是将结果数据放置在RPMS 那个目录底下,同时打包RPM与SRPM,可以使用rpmbuild -ba rp-pppoe.spec 

find /usr/src/redhat -name 'rp-pppoe*rpm'

结果中就会出现  /usr/src/redhat/SRPMS/rp-pppoe-3.5-32.2.vbird.src.rpm 这个文件了

一个打包自己软件的范例

制作原始码档案 tarball 产生

mkdir /usr/local/src/main-0.1  建立软件的目录

tar -zxvf main.tgz -C /usr/local/src/main-0.1 解压缩

cd /usr/local/src/main-0.1  vim Makefile 建立原始码所需make规则

LIBS = -lm
OBJS = main.o haha.o sin_value.o cos_value.o
main: ${OBJS}
gcc -o main ${OBJS} ${LIBS}
clean:
rm -f main ${OBJS}
install:
install -m 755 main $(RPM_INSTALL_ROOT)/usr/local/bin/main
# 记得 gcc与 rm之前是使用 <tab> 按键作出来的空白喔!

接着压缩

[root@www src]# tar -zcvf main-0.1.tar.gz main-0.1

此时产生 main-0.1.tar.gz ,将他挪到 /usr/src/redhat/SOURCES 底下  cp main-0.1.tar.gz /usr/src/redhat/SOURCES

这个时候在 /usr/src/redhat 底下的原始码就建立成功了!接下来就是 spec 档案的建立

建立 *.spec 的配置文件

cd /usr/src/redhat/SPECS    vim main.spec

Summary: calculate sin and cos value.
Name:
main
Version: 0.1
Release: 1
License: GPL
Group: VBird's Home
Source: main-0.1.tar.gz <==记得要写正确的 Tarball 檔名喔!
Url:
http://linux.vbird.org
Packager: VBird
BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root
%description
This package will let you input your name and calculate sin cos value.
%prep
%setup -q
%build
make
%install
rm -rf %{buildroot}
mkdir -p %{buildroot}/usr/local/bin
make install RPM_INSTALL_ROOT=%{buildroot} <==这项目也徆重要!
%files
/usr/local/bin/main
%changelog
* Wed Jul 01 2009 VBird Tsai <vbird@mail.vbird.idv.tw> 0.1
- build the program

编译成为 RPM 与 SRPM

那个 spec 档案建置妥当后,后续的动作就简单,开始编译 rpmbuild -ba main.spec

我们就已经建立了几个 RPM 档案,接下来让我们好好测试一下打包起来的成果吧

rpm -ivh /usr/src/redhat/RPMS/i386/main-0.1-1.i386.rpm

rpm -qi main 查看软件的详情

以上就可以将自己的软件或者程序给他修改和设定,以后就可以自己设定你的RPM,也可以手动修改你的SRPM的来源档案内容

YUM 在线升级机制

YUM根据分析RPM的标头,根据软件的相关性制作出属性相依时的解决方案,自行处理软件的相依属性问题,以解决软件安装,移除,升级的问题

由于distribution必须要先释放出软件,然后将软件放置与yum服务器上面,以提供客户端来要求安装或升级,因此要使用yum的功能,

必须要找到合适的yum server才行,每个yum server可能提供许多不同的软件功能,那就是容器,必须要前往yum server查询到相关的容器

网址后,再继续处理后续 的设定

Redhat已经释放很多映像站提供软件的更新之用,理论上只要能够连上Internet,就可以使用yum

利用 yum 进行查询、安装、升级与移除功能

yum的使用

查询功能   yum [list|info|search|provides|whatprovides] 参数

yum [option] [查询工作项目] [相关参数]

-y :当 yum 要等待用户输入时,这个选项可以自动提供 yes 的响应

--installroot=/some/path : 将该软件安装在/some/path而不使用默认路径

查询相关参数

search :搜寻某个软件名称或者是描述 (description) 的重要关键字;

list :列出目前 yum 所管理的所有的软件名称与版本,有点类似 rpm -qa;

info :同上,不过有点类似 rpm -qai 的执行结果;

provides:从档案去搜寻软件!类似 rpm -qf 的功能!

搜寻磁盘阵列 (raid) 相关的软件有哪些,会输出例如mdadm

找出mdadm这个软件的功能  yum info mdadm

列出 yum 服务器上面提供的所有软件名称   yum list

列出目前服务器上可供本机进行升级的软件有哪些  yum list updates

列出提供 passwd 这个档案的软件有哪些 yum provides passwd

yum list pam* 找出pam为开头的软件名称,而其中尚未安装的又有那些?

安装/升级功能:yum [install|update] 软件

install :后面接要安装的软件!

update :后面接要升级的软件,若要整个系统都升级,就直接 update 即可

此时不需要将光盘mount之后进行安装,只要yum进行网络安装,

移除功能:yum [remove] 软件

yum remove pam-devel  同样的,也要解决相依性的问题

yum很简单,不过yum毕竟是架构在rpm上面发展起来的,所以还是需要了解rpm的

yum 的配置文件

yum的网络安装之前必须要选择对的映像站台,提供 addons, centosplus, extras, fasttrack, os, updates 等容器,最好认的容器是os系统默认软件

与updates软件升级版本,

那个 os 再点进去就会得到如下的可提供安装的网址  os/i386/

最重要的就是那个『 repodata 』的目录,该目录就是分析RPM软件后产生的软件属性相依性放置处,因此,你要找到容器的网址时,最重要的就是

该网址底下有个名为repodata的目录存在,那就是容器的网址,

vi /etc/yum.repos.d/CentOS-Base.repo

base 代表容器名称,保证唯一性

name 说明容器的意义

mirrorlist 列出这个容器可以使用的映像站台

baseurl  容器的实际网址,mirrorlist 是由 yum 程序自行去捉映像站台,而baseurl则是指定固定的一个容器网址,我们刚刚找到的网址放到这里来啦

enable=1:就是让这个容器被启动

gpgcheck=1:还记得 RPM 的数字签名吗?这就是指定是否需要查阅 RPM 档案内的数字签名

gpgkey=:就是数字签名的公钥文件所在位置!使用默认值即可

创建出自己的YUM设置

[root@www ~]# vi /etc/yum.repos.d/CentOS-Base.repo
[base]
name=CentOS-$releasever - Base
baseurl=http://ftp.twaren.net/Linux/CentOS/5/os/i386/
gpgcheck=1
gpgkey=http://mirror.centos.org/centos/RPM-GPG-KEY-CentOS-5
# 底下其他的容器项目,请自行到高速网络中心去查询后自己处理!

修改容器产生的问题与解决之道

应该要在 /etc/yum.repos.d/ 底下新建一个档案,档名必须是.repo才行,但因为我们使用的是指定特定的映射站台,而不是其他软开发提供的容器

yum 会先下载容器的清单到本机的 /var/cache/yum 里面去,那我们修改了网址却没有修改容器名称 (中刮号内的文字)

可能就会造成本机的列表与 yum服务器的列表不同步,所以先要清除掉本机上面的旧数据,执行yum clean [packages|headers|all]

packages:将已下载的软件档案删除

headers :将下载的软件文件头删除

all :将所有容器数据都删除!

删除已下载过的所有容器的相关数据 (含软件本身与列表)

yum 的软件群组功能

yum [群组功能] [软件群组]

grouplist :列出所有可使用的『套件组』,例如 Development Tools 之类的;

groupinfo :后面接 group_name,则可了解该 group 内含的所有套件名

groupinstall:这个好用!可以安装一整组的套件群组,相当的不错

groupremove :移除某个套件群组;

在安装Centos的时候,提供选择需要的软件,那些软件利用 GNOME/KDE/X Window ... 之类的名称存在,其实就是软件群组

yum groupinfo XFCE-4.4 列出这个群组的信息

yum groupinstall XFCE-4.4  群组安装

全系统自动升级

透过 crontab 的功能来处理,

vim /etc/crontab

0 3 * * * root /usr/bin/yum -y update

管理的抉择:RPM 还是 Tarball

1 优先选择原厂的RPM功能

由于原厂释出的软件通常具有一段时间的维护期,RHEL与Centos每个版本至少提供5年的更新期限,由于yum可以自动升级,保证了

自己软件的最新状态,资安当然比较好,并且同时提供软件的查询和验证功能,安装时提供数字签名的保护,当然首选RPM

2. 选择软件官网释出的 RPM 或者是提供的容器网址

举例Centos不提供NTFS的相关模块,此时可自己去官网找到系统的RPM档案,如果有提供容器网址,那就更好,可以修改yum配置文件

来加入该容器,就能够自动安装与升级软件

3. 利用 Tarball 安装特殊软件

有些软件不会帮你制作RPM档案,建议你如果多台机器需要安装此软件,建议将其制作成RPM就有价值了,否则直接使用tarball来安装即可,不需要特别搜寻RPM

4. 用 Tarball 测试新版软件:

某些时刻需要使用新版的某个软件,但是原厂商提供旧的软件,但是你又需要新软件的功能,那么又怕软件安装后,回不到旧软件

此时可以用tarball安装新软件到/usr/local底下,那么该软件就可以同时安装两个版本在你的系统上面了,而且大多数软件安装数钟版本

还不会互相干扰,用来测试新软件是很不错的,只是你就得知道你使用的指令是新版软件还是旧版软件


RPM 与 Tarball 各有其优缺点,不过,如果有 RPM 的话,那么优先权还是在于 RPM 安装上面,毕竟管理上比较便利,但是如果软件的架构差异性太大

或者无法解决相依性的问题,不要化大量时间解决属性相依性的问题上,还不如直接以tarball来安装。














































原创粉丝点击