天天看點

Linux軟體安裝:RPM、SRPM與YUM功能

一、軟體管理器簡介

--包管理模式

·使用者使用的系統與軟體發行商的一樣,發行商就可以在他們的系統上編譯好使用者需要的軟體,然後将編譯好的軟體發給使用者,就可以在使用者的系統上直接安裝使用,省去了編譯的過程;

·包管理模式的安裝方式類似于windows下面的安裝,不需要編譯;

·發行商即是linux distribution的發行商或團體組織,這些使用者使用它們的linux distribution;

--軟體管理器(或包管理器)

·軟體管理器在軟體安裝的時候會記錄一些與安裝軟體相關的資訊,友善以後進行軟體的更新與解除安裝;

·軟體管理器類似于windows下的“添加或删除程式”,或者是360軟體管家等;

·在linux下常見的軟體管理器有rpm、dpkg等。

1.linux界的兩大主流:rpm與dpkg

--軟體管理機制

·rpm軟體管理器對應rpm軟體管理機制等,軟體管理機制記錄安裝軟體的相關資訊,友善以後的更新與解除安裝操作;

·軟體檔案屬性本身會檢測軟體屬性的依賴問題,軟體管理機制不會解決該問題,需要其對應的線上更新機制來解決;

·軟體屬性依賴的簡單例子:安裝a軟體需要先安裝b與c軟體;

--線上更新機制

·不同軟體管理機制對應不同的線上更新機制,以解決軟體屬性依賴問題;

·即使是用apt-get來安裝軟體,實際使用的軟體管理機制還是dpkg;

--對應關系

linux distribution

軟體管理機制

使用指令

線上更新機制(指令)

red hat/fedora

centos/suse

rpm

rmp,rpmbuild

yum(yum)

debian/ubuntu

dpkg

apt(apt-get)

·例如centos,使用的軟體管理機制為rpm機制,而用來作為線上更新的方式(機制)為yum.

2.rpm與srpm

--rpm

·rpm是以一種資料庫記錄的方式将軟體安裝到linux系統的一套管理機制;

·rpm包的安裝過程圖示:

Linux軟體安裝:RPM、SRPM與YUM功能

·rpm優點:

a.軟體已經編譯完成和打包完畢,軟體傳輸與安裝友善(不需要重新編譯)

b.軟體的資訊已經記錄在linux主機的rpm軟體資料庫上,友善查詢、更新與解除安裝

c.rpm包在被安裝前,會先檢查系統的硬碟容量、作業系統版本等,避免檔案被錯誤安裝

·rpm缺點:

a.軟體安裝的環境必須與打包時的環境需求一緻或相當,以下情況不行:

~通常不同distribution所釋出的rpm包不能用在其它的distributions上

~相同distribution的不同版本也可能不行,如centos 4.x與centos 5.x

b.需要滿足軟體的依賴屬性需求

c.解除安裝時需要謹慎,最底層的軟體不可先删除,否則可能造成整個系統的問題

--srpm:source rpm

·srpm是rpm未編譯時的檔案,包含源代碼檔案、依賴性軟體說明、參數設定檔案(configure與makefile);

·使用srpm,可以通過修改srpm内的參數設定檔案,重新編譯生成适合目前linux環境的rpm檔案(srpm作用);

·使用srpm,需要linux主機環境使用的軟體管理機制為rpm;

·srpm的使用步驟:

a.先将該軟體以rpm管理的方式編譯,srpm即被編譯成rpm檔案

b.将編譯完成的rpm檔案安裝到linux系統中

--對比rpm與srpm

檔案格式

檔案名格式

直接安裝與否

内含程式類型

可否修改參數并編譯

xxx.rpm

已編譯

不可

srpm

xxx.src.rpm

未編譯的源代碼

·rpm包安裝完成後,即完成軟體的安裝,srpm包安裝完成後就得到軟體的源碼、makefile、configure等檔案。

3.i386、i586、i686、noarch、x86_64

·以軟體名rp-rpppoe-3.1-5.i386.rpm為例,各項說明如下:

rp-rpppoe

3.1

5

i386

軟體名稱

軟體版本資訊

釋出次數

适合硬體平台

擴充名

·對硬體平台的說明:

a.i386幾乎适用所有的x86平台

b.x86_64主要是針對64位的cpu進行優化設定

c.noarch沒有任何硬體等級上的限制,一般屬于shell script方面的軟體

·硬體方面是向下相容的。

4.rpm屬性依賴的解決方式:yum線上更新

·rpm軟體檔案屬性依賴問題産生的原因:

a.為了重複利用既有的軟體功能,很多軟體都會以函數庫的方式釋出部分功能,以友善其他軟體的調用應用,例如pam子產品的驗證功能

b.為了節省使用者的資料量,distributions在釋出軟體時分為一般使用與開發(development)使用兩大類,而預設情況下開發類軟體不會被安裝(某些軟體安裝可能需要這些開發類的軟體)

·圖示yum線上更新的原理與過程:

yum伺服器

Linux軟體安裝:RPM、SRPM與YUM功能

yum用戶端

Linux軟體安裝:RPM、SRPM與YUM功能

流程

Linux軟體安裝:RPM、SRPM與YUM功能

·yum可以分析出軟體依賴屬性問題,下載下傳所有需要安裝的軟體;

·下載下傳的軟體最終還是需要通過rpm機制進行安裝。

二、rpm軟體管理程式:rpm

1.rpm預設安裝的路徑

·軟體安裝完畢,軟體相關資訊會被寫入以下目錄的資料庫檔案中

1

<code>/</code><code>var</code><code>/lib/rpm</code>

·與rpm預設安裝相關的目錄

2

3

4

<code>/etc                設定檔案放置目錄</code>

<code>/usr/bin            一些程式使用的動态函數庫</code>

<code>/usr/share/doc      一些基本軟體的使用手冊與幫助文檔</code>

<code>/usr/share/man      一引起man page檔案</code>

2.rpm安裝(install)

·常用安裝參數-ivh

6

7

8

<code>[root@xpleaf ~]# rpm -ivh pam-devel-</code><code>1.1</code><code>.</code><code>1</code><code>-</code><code>17</code><code>.el6.x86_64.rpm</code>

<code>i:install</code>

<code>v:view,顯示詳細安裝資訊畫面</code>

<code>h:以安裝資訊欄顯示安裝進度(顯示</code><code>50</code><code>個“#”)</code>

<code>[root@xpleaf ~]# rpm -ivh pam-devel*.rpm    ===&gt;安裝以pam-devel開頭的多個rpm包</code>

<code>[root@xpleaf ~]# rpm -ivh http:</code><code>//website.name/path/pkgname.rpm    ===&gt;安裝網絡上的rpm包</code>

·其它安裝參數

<code>--replacefiles    覆寫安裝</code>

<code>--replacepkgs     重複安裝</code>

<code>--force           強制安裝,上面兩個參數的結合</code>

<code>--test            檢測需要安裝的軟體依賴性問題</code>

<code>[root@xpleaf ~]# rpm -ivh pam-devel-</code><code>1.1</code><code>.</code><code>1</code><code>-</code><code>17</code><code>.el6.x86_64.rpm --test</code>

·示範從centos 6.5CD光牒中安裝pam-devel:

9

10

11

<code>[root@xpleaf ~]# mount /dev/cdrom /mnt    ===&gt;挂載CD光牒到/mnt</code>

<code>mount: block device /dev/sr0 </code><code>is</code> <code>write-</code><code>protected</code><code>, mounting read-only</code>

<code>[root@xpleaf ~]# find /mnt -name </code><code>"pam-devel*"</code>    <code>===&gt;查找pam-devel軟體</code>

<code>/mnt/packages/pam-devel-</code><code>1.1</code><code>.</code><code>1</code><code>-</code><code>17</code><code>.el6.i686.rpm</code>

<code>/mnt/packages/pam-devel-</code><code>1.1</code><code>.</code><code>1</code><code>-</code><code>17</code><code>.el6.x86_64.rpm</code>

<code>[root@xpleaf ~]# cp -a /mnt/packages/pam-devel-</code><code>1.1</code><code>.</code><code>1</code><code>-</code><code>17</code><code>.el6.x86_64.rpm /root</code>

<code>[root@xpleaf ~]# rpm -ivh pam-devel-</code><code>1.1</code><code>.</code><code>1</code><code>-</code><code>17</code><code>.el6.x86_64.rpm --test    ===&gt;檢測依賴軟體</code>

<code>preparing...                ########################################### [</code><code>100</code><code>%]</code>

<code>[root@xpleaf ~]# rpm -ivh pam-devel-</code><code>1.1</code><code>.</code><code>1</code><code>-</code><code>17</code><code>.el6.x86_64.rpm     ===&gt;安裝</code>

<code>   </code><code>1</code><code>:pam-devel              ########################################### [</code><code>100</code><code>%]</code>

·如果安裝的軟體已經存在,會有下面的提示:

<code>[root@xpleaf ~]# rpm -ivh pam-devel-</code><code>1.1</code><code>.</code><code>1</code><code>-</code><code>17</code><code>.el6.x86_64.rpm </code>

<code>        </code><code>package</code> <code>pam-devel-</code><code>1.1</code><code>.</code><code>1</code><code>-</code><code>17</code><code>.el6.x86_64 </code><code>is</code> <code>already installed</code>

3.rpm更新與更新(upgrade/freshen)

·參數對比:

參數

差別

-uvh

如果沒有安裝該軟體,則直接安裝;如果安裝的是舊版,則更新

-fvh

如果沒有安裝該軟體,不予以安裝;如果安裝的是舊版,則更新

·指令執行:

<code>rpm -uvh/-fvh rpm檔案名</code>

4.rpm查詢(query)

·執行rpm查詢,如果軟體已經安裝,查詢的是/var/lib/rpm這個目錄下的資料庫檔案;

·執行rpm查詢,如果軟體沒有安裝,查詢的是該軟體安裝後要放入rpm軟體資料庫(即上面的目錄中)中的軟體資訊;

·參數文法簡要說明:

<code>rpm -qa                              ===&gt;查詢本機已安裝的軟體</code>

<code>rpm -q[ilcdr] 已安裝的軟體名稱       ===&gt;查詢已安裝軟體的特定資訊</code>

<code>rpm -qf 存在于系統上的某個檔案名     ===&gt;查詢檔案的所屬安裝軟體</code>

<code>rpm -qp[ilcdr] 未安裝的rpm包完整名稱 ===&gt;查詢rmp包的特定資訊(與上面類似,隻是安裝與未安裝)</code>

·參數詳細說明:

查詢已安裝的軟體資訊

說明

-q

僅查詢,後面接的軟體名稱是否有安裝

-qa

列出所有的已經安裝在本機 linux 系統上面的所有軟體名稱

-qi

列出該軟體的詳紳資訊 (information),包含開發商、版本與說明等

-ql

列出該軟體所有的檔案與目錄所在完整檔案名(list)

-qc

列出該軟體的所有配置檔案 (找出在/etc/下面的檔案名而已)

-qd

列出該軟體的所有幫助檔案 (找出與man有關的檔案而已)

-qr

列出與該軟體有關的依賴軟體所含的檔案(required 的意思)

-qf

由後面接的檔案名找出該檔案屬于哪一個已安裝的軟體

查詢rpm檔案内含有的資訊

<code>-qp[icdlr]:-qp後面接的所有參數以上面的說明一緻,但僅用于找出某個rpm檔案内的資訊,而非已安裝的軟體資訊</code>

·rpm查詢實戰示範

a.查詢是否有安裝python軟體

<code>[root@xpleaf ~]# rpm -q python</code>

<code>python-</code><code>2.6</code><code>.</code><code>6</code><code>-</code><code>51</code><code>.el6.x86_64</code>

b.查詢python軟體所提供的所有目錄與檔案

<code>[root@xpleaf ~]# rpm -ql python</code>

<code>/usr/bin/pydoc</code>

<code>/usr/bin/python</code>

<code>/usr/bin/python2</code>

<code>/usr/bin/python2.</code><code>6</code>

<code>/usr/share/doc/python-</code><code>2.6</code><code>.</code><code>6</code>

<code>/usr/share/doc/python-</code><code>2.6</code><code>.</code><code>6</code><code>/license</code>

<code>/usr/share/doc/python-</code><code>2.6</code><code>.</code><code>6</code><code>/readme</code>

<code>/usr/share/man/man1/python.</code><code>1</code><code>.gz</code>

c.查詢python軟體的詳細資訊說明

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

<code>[root@xpleaf ~]# rpm -qi python</code>

<code>name        : python                       relocations: (not relocatable)</code>

<code>version     : </code><code>2.6</code><code>.</code><code>6</code>                             <code>vendor: centos</code>

<code>release     : </code><code>51</code><code>.el6                        build </code><code>date</code><code>: fri </code><code>22</code> <code>nov </code><code>2013</code> <code>08</code><code>:</code><code>18</code><code>:</code><code>53</code> <code>pm cst</code>

<code>install </code><code>date</code><code>: mon </code><code>11</code> <code>may </code><code>2015</code> <code>10</code><code>:</code><code>21</code><code>:</code><code>27</code> <code>pm cst      build host: c6b8.bsys.dev.centos.org</code>

<code>group       : development/languages         source rpm: python-</code><code>2.6</code><code>.</code><code>6</code><code>-</code><code>51</code><code>.el6.src.rpm</code>

<code>size        : </code><code>79603</code>                            <code>license: python</code>

<code>signature   : rsa/sha1, mon </code><code>25</code> <code>nov </code><code>2013</code> <code>03</code><code>:</code><code>33</code><code>:</code><code>16</code> <code>am cst, key id 0946fca2c105b9de</code>

<code>packager    : centos buildsystem &lt;http:</code><code>//bugs.centos.org&gt;</code>

<code>url         : http:</code><code>//www.python.org/</code>

<code>summary     : an interpreted, interactive, object-oriented programming language</code>

<code>description :</code>

<code>python </code><code>is</code> <code>an interpreted, interactive, object-oriented programming</code>

<code>language often compared to tcl, perl, scheme or java. python includes</code>

<code>modules, classes, exceptions, very high level </code><code>dynamic</code> <code>data types and</code>

<code>dynamic</code> <code>typing. python supports interfaces to many system calls and</code>

<code>libraries, </code><code>as</code> <code>well </code><code>as</code> <code>to </code><code>var</code><code>ious windowing systems (x11, motif, tk,</code>

<code>mac and mfc).</code>

<code>programmers can write </code><code>new</code> <code>built-</code><code>in</code> <code>modules </code><code>for</code> <code>python </code><code>in</code> <code>c or c++.</code>

<code>python can be used </code><code>as</code> <code>an extension language </code><code>for</code> <code>applications that need</code>

<code>a programmable </code><code>interface</code><code>.</code>

<code>note that documentation </code><code>for</code> <code>python </code><code>is</code> <code>provided </code><code>in</code> <code>the python-docs</code>

<code>package</code><code>.</code>

<code>this </code><code>package</code> <code>provides the </code><code>"python"</code> <code>executable; most of the actual</code>

<code>implementation </code><code>is</code> <code>within the </code><code>"python-libs"</code> <code>package</code><code>.</code>

d.查詢logrotate軟體的配置檔案

<code>[root@xpleaf ~]# rpm -qc logrotate</code>

<code>/etc/logrotate.conf</code>

<code>/</code><code>var</code><code>/lib/logrotate.status</code>

e.查詢logrotate軟體的幫助檔案

<code>[root@xpleaf ~]# rpm -qd logrotate</code>

<code>/usr/share/doc/logrotate-</code><code>3.7</code><code>.</code><code>8</code><code>/changes</code>

<code>/usr/share/doc/logrotate-</code><code>3.7</code><code>.</code><code>8</code><code>/copying</code>

<code>/usr/share/man/man5/logrotate.conf.</code><code>5</code><code>.gz</code>

<code>/usr/share/man/man8/logrotate.</code><code>8</code><code>.gz</code>

f.查詢python軟體的依賴軟體所含的檔案

<code>[root@xpleaf ~]# rpm -qr python</code>

<code>/usr/bin/python2.</code><code>6</code>  

<code>libc.so.</code><code>6</code><code>()(64bit)  </code>

<code>libc.so.</code><code>6</code><code>(glibc_2.</code><code>2.5</code><code>)(64bit)  </code>

<code>libdl.so.</code><code>2</code><code>()(64bit)  </code>

<code>libm.so.</code><code>6</code><code>()(64bit)  </code>

<code>libpthread.so.</code><code>0</code><code>()(64bit)  </code>

<code>libpython2.</code><code>6</code><code>.so.</code><code>1.0</code><code>()(64bit)  </code>

<code>libutil.so.</code><code>1</code><code>()(64bit)  </code>

<code>python-libs(x86-</code><code>64</code><code>) = </code><code>2.6</code><code>.</code><code>6</code><code>-</code><code>51</code><code>.el6</code>

<code>rpmlib(compressedfilenames) &lt;= </code><code>3.0</code><code>.</code><code>4</code><code>-</code><code>1</code>

<code>rpmlib(filedigests) &lt;= </code><code>4.6</code><code>.</code><code>0</code><code>-</code><code>1</code>

<code>rpmlib(partialhardlinksets) &lt;= </code><code>4.0</code><code>.</code><code>4</code><code>-</code><code>1</code>

<code>rpmlib(payloadfileshaveprefix) &lt;= </code><code>4.0</code><code>-</code><code>1</code>

<code>rpmlib(versioneddependencies) &lt;= </code><code>3.0</code><code>.</code><code>3</code><code>-</code><code>1</code>

<code>rtld(gnu_hash)  </code>

<code>rpmlib(payloadisxz) &lt;= </code><code>5.2</code><code>-</code><code>1</code>

g.由f,查詢/usr/bin/python2.6是哪個軟體提供的

<code>[root@xpleaf ~]# rpm -qf /usr/bin/python2.</code><code>6</code>

h.查詢crontabs-1.10-33.el6.noarch.rpm包的依賴檔案

<code>[root@xpleaf ~]# rpm -qpr crontabs-</code><code>1.10</code><code>-</code><code>33</code><code>.el6.noarch.rpm</code>

<code>/bin/bash  </code>

<code>/etc/cron.d  </code>

<code>config(crontabs) = </code><code>1.10</code><code>-</code><code>33</code><code>.el6</code>

i.查詢系統當中以c開頭的軟體有幾個

<code>[root@xpleaf ~]# rpm -qa | grep ^c | wc -l</code>

<code>52</code>

5.rpm解除安裝與rpm資料庫重建

·rpm解除安裝軟體,要先把依賴該軟體的軟體删除,否則會出現問題;

·即解除安裝的原則為:從上到下;

·解除安裝指令

<code>[root@xpleaf ~]# rpm -e pam-devel</code>

·如果執行的操作導緻rpm資料庫/var/lib/rpm内的檔案損壞,可以使用下面的指令

<code>[root@xpleaf ~]# rpm --rebuilddb</code>

三、srpm的使用:rpmbuild

1.預設值安裝srpm檔案

·srpm主要參數:

<code>--rebuild    對srpm檔案編譯,并打包成為rpm包,但不安裝</code>

<code>--recompile  對srpm檔案編譯,打包成rpm包,并安裝</code>

2.srpm使用的路徑

·在centos 6.5中,預設沒有srpm的路徑,解壓縮一個srpm包後才會在目前目錄下建立rpmbuild目錄:

<code>root@xpleaf ~]# rpmbuild --rebuild setarch-</code><code>1.3</code><code>-</code><code>1</code><code>.src.rpm  ===&gt;使用--rebuild參數制作rpm包              </code>

<code>installing setarch-</code><code>1.3</code><code>-</code><code>1</code><code>.src.rpm</code>

<code>……省略輸出</code>

<code>+ exit </code><code>0</code>

<code>[root@xpleaf ~]# ls -l rpmbuild/ </code>

<code>total </code><code>24</code>

<code>drwxr-xr-x </code><code>2</code> <code>root root </code><code>4096</code> <code>aug </code><code>17</code> <code>20</code><code>:</code><code>08</code> <code>build</code>

<code>drwxr-xr-x </code><code>2</code> <code>root root </code><code>4096</code> <code>aug </code><code>17</code> <code>20</code><code>:</code><code>08</code> <code>buildroot</code>

<code>drwxr-xr-x </code><code>3</code> <code>root root </code><code>4096</code> <code>aug </code><code>17</code> <code>20</code><code>:</code><code>08</code> <code>rpms</code>

<code>drwxr-xr-x </code><code>2</code> <code>root root </code><code>4096</code> <code>aug </code><code>17</code> <code>20</code><code>:</code><code>08</code> <code>sources</code>

<code>drwxr-xr-x </code><code>2</code> <code>root root </code><code>4096</code> <code>aug </code><code>17</code> <code>20</code><code>:</code><code>08</code> <code>specs</code>

<code>drwxr-xr-x </code><code>2</code> <code>root root </code><code>4096</code> <code>aug </code><code>17</code> <code>20</code><code>:</code><code>08</code> <code>srpms</code>

<code>===&gt;上面這些目錄即是srpm使用的路徑</code>

<code>[root@xpleaf ~]# cd rpmbuild/rpms/x86_64/    ===&gt;rpm包放在這裡</code>

<code>[root@xpleaf x86_64]# ll</code>

<code>total </code><code>12</code>

<code>-rw-r--r-- </code><code>1</code> <code>root root </code><code>6704</code> <code>aug </code><code>17</code> <code>20</code><code>:</code><code>08</code> <code>setarch-</code><code>1.3</code><code>-</code><code>1</code><code>.x86_64.rpm</code>

<code>-rw-r--r-- </code><code>1</code> <code>root root </code><code>1912</code> <code>aug </code><code>17</code> <code>20</code><code>:</code><code>08</code> <code>setarch-debuginfo-</code><code>1.3</code><code>-</code><code>1</code><code>.x86_64.rpm</code>

·使用--rebuild參數,隻會建立rpm包,其餘的臨時檔案在rpm包建立後即會被删除

29

30

31

32

33

34

35

36

37

<code>[root@xpleaf ~]# rpmbuild --rebuild setarch-</code><code>1.3</code><code>-</code><code>1</code><code>.src.rpm</code>

<code>……</code>

<code>+ cd /root/rpmbuild/build</code>

<code>+ rm -rf setarch-</code><code>1.3</code>

<code>+ rm -rf /root/rpmbuild/buildroot/setarch-</code><code>1.3</code><code>-</code><code>1</code><code>.x86_64</code>

<code>+ cd setarch-</code><code>1.3</code>

<code>[root@xpleaf rpmbuild]# ls -l build buildroot/ rpms/ sources/ specs/ srpms/</code>

<code>build:</code>

<code>total </code><code>0</code>

<code>buildroot/:</code>

<code>rpms/:</code>

<code>total </code><code>4</code>

<code>drwxr-xr-x </code><code>2</code> <code>root root </code><code>4096</code> <code>aug </code><code>17</code> <code>20</code><code>:</code><code>00</code> <code>x86_64</code>

<code>sources/:</code>

<code>-rw-r--r--. </code><code>1</code> <code>root root </code><code>2220</code> <code>sep  </code><code>2</code>  <code>2003</code> <code>setarch-</code><code>1.3</code><code>.tar.gz</code>

<code>specs/:</code>

<code>-rw-r--r--. </code><code>1</code> <code>root root </code><code>1440</code> <code>sep  </code><code>2</code>  <code>2003</code> <code>setarch.spec</code>

<code>srpms/:</code>

·重要目錄說明

目錄

specs

      放置軟體的設定檔案,如軟體的資訊參數、設定項目

sources

      放置軟體的源檔案(*.tar.gz)及config設定檔案

build/buildroot

      放置編譯過程中産生的臨時檔案

rpms

      編譯完成後,放置rpm包。下面會有子目錄如x86_64、i386等

      放置自己制作的srpm包

3.設定檔案的主要内容(*.spec)

·使用-i參數解壓縮srpm包(如果是rpm包,則直接安裝了):

<code>[root@xpleaf ~]# rpm -i logrotate-</code><code>3.7</code><code>.</code><code>8</code><code>-</code><code>12</code><code>.el6.src.rpm </code>

<code>[root@xpleaf ~]# cd rpmbuild/</code>

<code>[root@xpleaf rpmbuild]# ll</code>

<code>total </code><code>8</code>

<code>drwxr-xr-x </code><code>2</code> <code>root root </code><code>4096</code> <code>aug </code><code>17</code> <code>20</code><code>:</code><code>35</code> <code>sources</code>

<code>drwxr-xr-x </code><code>2</code> <code>root root </code><code>4096</code> <code>aug </code><code>17</code> <code>20</code><code>:</code><code>35</code> <code>specs</code>

<code>[root@xpleaf rpmbuild]# find ./ -type f</code>

<code>./specs/logrotate.spec    ===&gt;設定檔案</code>

<code>./sources/logrotate-</code><code>3.7</code><code>.</code><code>8</code><code>-man5.patch    ===&gt;.patch的即是一些更新檔檔案</code>

<code>./sources/logrotate-</code><code>3.7</code><code>.</code><code>8</code><code>-devnull.patch</code>

<code>./sources/logrotate-</code><code>3.7</code><code>.</code><code>8</code><code>-configsize.patch</code>

<code>./sources/logrotate-</code><code>3.7</code><code>.</code><code>7</code><code>-toolarge.patch</code>

<code>./sources/logrotate-</code><code>3.7</code><code>.</code><code>8</code><code>.tar.gz    ===&gt;源代碼檔案壓縮包</code>

<code>./sources/logrotate-</code><code>3.7</code><code>.</code><code>8</code><code>-dont-remove-log.patch</code>

<code>./sources/logrotate-</code><code>3.7</code><code>.</code><code>8</code><code>-handle-rename-error.patch</code>

<code>./sources/logrotate-</code><code>3.7</code><code>.</code><code>8</code><code>-scripts-man.patch</code>

<code>./sources/logrotate-</code><code>3.7</code><code>.</code><code>8</code><code>-missingok.patch</code>

<code>./sources/logrotate-</code><code>3.7</code><code>.</code><code>8</code><code>-scripts-args.patch</code>

<code>./sources/logrotate-</code><code>3.7</code><code>.</code><code>7</code><code>-curdir2.patch</code>

<code>===&gt;如果還有其它檔案,則可能是一些腳本檔案</code>

·直接對srpm包解壓縮,得到的内容是:

a.重要的是源代碼檔案(*.tar.gz)與設定檔案(*.spec)

b.可能還有一些腳本方面的檔案

c.因為隻産生上面這些檔案,在centos 6.5中,隻會建立rpmbuild下的sources與specs目錄

d.因為不涉及編譯過程,是以不會有臨時檔案的産生

·spec檔案的主要内容介紹

a.spec第一部分内容:軟體基本資訊——rpm -qi

<code>summary: rotates, compresses, removes and mails system log files</code>

<code>name: logrotate    ===&gt;rpm名字類似:{name}-{version}-{release}.rpm</code>

<code>version: </code><code>3.7</code><code>.</code><code>8</code>

<code>release: </code><code>12</code><code>%{?dist}</code>

<code>license: gpl+</code>

<code>url: https:</code><code>//fedorahosted.org/logrotate/</code>

<code>group: system environment/base</code>

<code>source: https:</code><code>//fedorahosted.org/releases/l/o/logrotate/logrotate-%{version}.tar.gz</code>

<code>patch1: logrotate-</code><code>3.7</code><code>.</code><code>7</code><code>-curdir2.patch    ===&gt;即是前面在sources中看到的一些更新檔檔案</code>

<code>patch2: logrotate-</code><code>3.7</code><code>.</code><code>7</code><code>-toolarge.patch   ===&gt;意在說明該軟體srpm包中含有的檔案</code>

<code>patch3: logrotate-</code><code>3.7</code><code>.</code><code>8</code><code>-devnull.patch</code>

<code>patch4: logrotate-</code><code>3.7</code><code>.</code><code>8</code><code>-man5.patch</code>

<code>patch5: logrotate-</code><code>3.7</code><code>.</code><code>8</code><code>-missingok.patch</code>

<code>patch6: logrotate-</code><code>3.7</code><code>.</code><code>8</code><code>-configsize.patch</code>

<code>patch7: logrotate-</code><code>3.7</code><code>.</code><code>8</code><code>-dont-remove-log.patch</code>

<code>patch8: logrotate-</code><code>3.7</code><code>.</code><code>8</code><code>-scripts-args.patch</code>

<code>patch9: logrotate-</code><code>3.7</code><code>.</code><code>8</code><code>-scripts-man.patch</code>

<code>patch10: logrotate-</code><code>3.7</code><code>.</code><code>8</code><code>-handle-rename-error.patch</code>

b.spec第二部分:依賴屬性需求設定——rpm -qr

<code>requires: coreutils &gt;= </code><code>5.92</code> <code>libsepol libselinux popt    ===&gt;需要的軟體,即依賴軟體</code>

<code>buildrequires: libselinux-devel popt-devel        ===&gt;編譯時需求的工具軟體</code>

<code>buildroot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)===&gt;編譯時臨時檔案存放的目錄</code>

<code>%description    ===&gt;軟體描述資訊</code>

<code>the logrotate utility </code><code>is</code> <code>designed to simplify the administration of</code>

<code>log files on a system which generates a lot of log files.  logrotate</code>

<code>allows </code><code>for</code> <code>the automatic rotation compression, removal and mailing of</code>

<code>log files.  logrotate can be </code><code>set</code> <code>to handle a log file daily, weekly,</code>

<code>monthly or when the log file gets to a certain size.  normally,</code>

<code>logrotate runs </code><code>as</code> <code>a daily cron job.</code>

<code>install the logrotate </code><code>package</code> <code>if</code> <code>you need a utility to deal </code><code>with</code> <code>the</code>

<code>log files on your system.</code>

c.spec第三部分:編譯前的預處理以及編譯過程中所需要進行的指令

<code>%prep        ===&gt;預處理,就是上面的patch更新檔檔案</code>

<code>%setup -q</code>

<code>%patch1 -p1 -b .curdir</code>

<code>%patch2 -p1 -b .toolarge</code>

<code>%patch3 -p1 -b .devnull                      </code>

<code>%patch4 -p1 -b .man5 </code>

<code>%patch5 -p1 -b .missingok                         </code>

<code>%patch6 -b .configsize   </code>

<code>%patch7 -b .dont-remove-log </code>

<code>%patch8 -b .scripts-args  </code>

<code>%patch9 -b .scripts-man   </code>

<code>%patch10 -b .handle-rename-error</code>

<code>                          </code> 

<code>%build     ===&gt;編譯                                                                                                             </code>

<code>make %{?_smp_mflags} rpm_opt_flags=</code><code>"$rpm_opt_flags"</code> <code>with_selinux=yes                                                                          </code>

<code>%install     ===&gt;安裝                                                                    </code>

<code>rm -rf $rpm_build_root                          </code>

<code>make prefix=$rpm_build_root mandir=%{_mandir} install                          </code>

<code>mkdir -p $rpm_build_root/%{_sysconfdir}/logrotate.d                          </code>

<code>mkdir -p $rpm_build_root/%{_sysconfdir}/cron.daily                           </code>

<code>mkdir -p $rpm_build_root/%{_localstatedir}/lib                                                                      </code>

<code>install -p -m </code><code>644</code> <code>examples/logrotate-</code><code>default</code> <code>$rpm_build_root/%{_sysconfdir}/logrotate.conf                          </code>

<code>install -p -m </code><code>755</code> <code>examples/logrotate.cron $rpm_build_root/%{_sysconfdir}/cron.daily/logrotate                       </code>

<code>touch $rpm_build_root/%{_localstatedir}/lib/logrotate.status                                                        </code>

<code>                                                                                                                    </code> 

<code>%clean     ===&gt;清理删除臨時檔案                          </code>

<code>rm -rf $rpm_build_root</code>

d.spec第四部分:軟體釋出的檔案——rpm -qcf

<code>%files                                                                                                              </code>

<code>%defattr(-,root,root)                                                                                               </code>

<code>%doc changes copying                                                                                                </code>

<code>%attr(</code><code>0755</code><code>, root, root) %{_sbindir}/logrotate                                                                       </code>

<code>%attr(</code><code>0644</code><code>, root, root) %{_mandir}/man8/logrotate.</code><code>8</code><code>*                                                                </code>

<code>%attr(</code><code>0644</code><code>, root, root) %{_mandir}/man5/logrotate.conf.</code><code>5</code><code>*                                                           </code>

<code>%attr(</code><code>0755</code><code>, root, root) %{_sysconfdir}/cron.daily/logrotate                                                         </code>

<code>%attr(</code><code>0644</code><code>, root, root) %config(noreplace) %{_sysconfdir}/logrotate.conf                                            </code>

<code>%attr(</code><code>0755</code><code>, root, root) %dir %{_sysconfdir}/logrotate.d                                                             </code>

<code>%attr(</code><code>0644</code><code>, root, root) %verify(not size md5 mtime) %config(noreplace) %{_localstatedir}/lib/logrotate.status</code>

e.第五部分:軟體更改曆史記錄

<code> </code><code>……</code>

<code> </code><code>tue jun </code><code>15</code> <code>2010</code> <code>jan kaluza &lt;[email protected]&gt; </code><code>3.7</code><code>.</code><code>8</code><code>-</code><code>9</code>

<code>- fix #</code><code>604073</code> <code>- </code><code>do</code> <code>not remove log </code><code>if</code> <code>there </code><code>is</code> <code>an error </code><code>in</code>

<code>  </code><code>rotate process</code>

<code>* fri jun </code><code>11</code> <code>2010</code> <code>jan kaluza &lt;[email protected]&gt; </code><code>3.7</code><code>.</code><code>8</code><code>-</code><code>8</code>

<code>- fix #</code><code>602654</code> <code>- fix integer overflow </code><code>in</code> <code>size and minsize</code>

<code>* tue apr </code><code>06</code> <code>2010</code> <code>daniel novotny &lt;[email protected]&gt; </code><code>3.7</code><code>.</code><code>8</code><code>-</code><code>7</code>

<code>- fix #</code><code>578116</code> <code>- missingok problem </code><code>with</code> <code>globs</code>

4.srpm的編譯指令

<code>[root@xpleaf specs]# rpmbuild -ba setarch.spec     ===&gt;編譯并同時生成rpm與srpm檔案</code>

<code>[root@xpleaf specs]# rpmbuild -bb setarch.spec     ===&gt;編譯隻生成rpm檔案</code>

·編譯示範:

<code>drwxr-xr-x </code><code>2</code> <code>root root </code><code>4096</code> <code>aug </code><code>17</code> <code>22</code><code>:</code><code>02</code> <code>sources</code>

<code>drwxr-xr-x </code><code>2</code> <code>root root </code><code>4096</code> <code>aug </code><code>17</code> <code>22</code><code>:</code><code>02</code> <code>specs</code>

<code>[root@xpleaf rpmbuild]# cd specs/</code>

<code>[root@xpleaf specs]# ll</code>

<code>[root@xpleaf specs]# rpmbuild -ba setarch.spec </code>

<code>[root@xpleaf rpmbuild]# find ./ -name </code><code>"*.rpm"</code>

<code>./rpms/x86_64/setarch-</code><code>1.3</code><code>-</code><code>1</code><code>.x86_64.rpm</code>

<code>./rpms/x86_64/setarch-debuginfo-</code><code>1.3</code><code>-</code><code>1</code><code>.x86_64.rpm</code>

<code>./srpms/setarch-</code><code>1.3</code><code>-</code><code>1</code><code>.src.rpm</code>

四、yum線上更新機制

·每個yum server可能都會提供不同的軟體功能,每一種功能即是前面所說的“容器”;

1.利用yum進行查詢、安裝更新與删除功能

--查詢功能:yum [list|info|search|provieds]

·查詢文法

<code>yum [option] [查詢項目] [相關參數]</code>

a.[option]

<code>-y:響應安裝過程中的提示輸入</code>

<code>--installroot=/some/path:把軟體安裝在/some/path中</code>

b.[查詢項目]、[相關參數]

<code>search:搜尋軟體相關資訊,如名稱、描述</code>

<code>list:列出yum管理的所有軟體(包括安裝與未安裝的),rpm -qa列出的是本地已安裝的</code>

<code>info:查詢軟體的相關系統</code>

<code>provides:由檔案去找出軟體</code>

·查詢執行個體

a.查詢與raid名稱相關的軟體

<code>[root@xpleaf ~]# yum search raid</code>

<code>dmraid.i686 : dmraid (device-mapper raid tool and library)</code>

<code>dmraid.x86_64 : dmraid (device-mapper raid tool and library)</code>

<code>dmraid-devel.x86_64 : development libraries and headers </code><code>for</code> <code>dmraid.</code>

<code>dmraid-events-logwatch.x86_64 : dmraid logwatch-based email reporting</code>

<code>dmraid-events.x86_64 : dmevent_tool (device-mapper event tool) and dso</code>

<code>firstaidkit-plugin-mdadm-conf.noarch : firstaidkit plugin to diagnose software raid</code>

<code>                                     </code><code>: configuration file</code>

<code>mdadm.x86_64 : the mdadm program controls linux md devices (software raid arrays)</code>

<code>  </code><code>name and summary matches only, </code><code>use</code> <code>"search all"</code> <code>for</code> <code>everything.</code>

b.查詢上面mdadm軟體的相關資訊

<code>[root@xpleaf ~]# yum info mdadm</code>

<code>installed packages    ===&gt;已經安裝的軟體版本</code>

<code>name        : mdadm</code>

<code>arch        : x86_64</code>

<code>version     : </code><code>3.2</code><code>.</code><code>6</code>

<code>release     : </code><code>7</code><code>.el6</code>

<code>size        : </code><code>847</code> <code>k</code>

<code>repo        : installed</code>

<code>from repo   : anaconda-centos-</code><code>201311272149</code><code>.x86_64</code>

<code>summary     : the mdadm program controls linux md devices (software raid arrays)</code>

<code>url         : http:</code><code>//www.kernel.org/pub/linux/utils/raid/mdadm/</code>

<code>license     : gplv2+</code>

<code>description : the mdadm program </code><code>is</code> <code>used to create, manage, and monitor linux md (software</code>

<code>            </code><code>: raid) devices.  as such, it provides similar functionality to the raidtools</code>

<code>            </code><code>: </code><code>package</code><code>.  however, mdadm </code><code>is</code> <code>a single program, and it can perform</code>

<code>            </code><code>: almost all functions without a configuration file, though a configuration</code>

<code>            </code><code>: file can be used to help </code><code>with</code> <code>some common tasks.</code>

<code>available packages    ===&gt;還可以安裝的軟體版本</code>

c.列出yum伺服器上面提供的軟體清單

<code>[root@xpleaf ~]# yum list</code>

<code>installed packages    ===&gt;已經安裝的軟體</code>

<code>consolekit.x86_64                 </code><code>0.4</code><code>.</code><code>1</code><code>-</code><code>3</code><code>.el6           @anaconda-centos-</code><code>201311272149</code><code>.x86_64/</code><code>6.5</code>

<code>consolekit-libs.x86_64            </code><code>0.4</code><code>.</code><code>1</code><code>-</code><code>3</code><code>.el6           @anaconda-centos-</code><code>201311272149</code><code>.x86_64/</code><code>6.5</code>

<code>available packages    ===&gt;還可以安裝的軟體</code>

<code>389</code><code>-ds-base.x86_64                </code><code>1.2</code><code>.</code><code>11.15</code><code>-</code><code>60</code><code>.el6      base                                    </code>

<code>389</code><code>-ds-base-devel.i686            </code><code>1.2</code><code>.</code><code>11.15</code><code>-</code><code>60</code><code>.el6      base                                    </code>

<code>389</code><code>-ds-base-devel.x86_64          </code><code>1.2</code><code>.</code><code>11.15</code><code>-</code><code>60</code><code>.el6      base</code>

d.列出本機可更新的軟體

<code>[root@xpleaf ~]# yum list updates</code>

<code>updated packages</code>

<code>abrt.x86_64                                   </code><code>2.0</code><code>.</code><code>8</code><code>-</code><code>34</code><code>.el6.centos                        base   </code>

<code>abrt-addon-ccpp.x86_64                        </code><code>2.0</code><code>.</code><code>8</code><code>-</code><code>34</code><code>.el6.centos                        base   </code>

<code>abrt-addon-kerneloops.x86_64                  </code><code>2.0</code><code>.</code><code>8</code><code>-</code><code>34</code><code>.el6.centos                        base   </code>

<code>abrt-addon-python.x86_64                      </code><code>2.0</code><code>.</code><code>8</code><code>-</code><code>34</code><code>.el6.centos                        base </code>

e.查詢提供passwd這個檔案的軟體

<code>[root@xpleaf ~]# yum provides passwd</code>

<code>passwd-</code><code>0.77</code><code>-</code><code>4</code><code>.el6_2.</code><code>2</code><code>.x86_64 : an utility </code><code>for</code> <code>setting or changing passwords using pam</code>

<code>repo        : base</code>

<code>matched from:</code>

<code>other       : provides-match: passwd</code>

--安裝、更新

<code>yum install 安裝軟體名稱</code>

<code>yum update  更新軟體名稱</code>

--删除

<code>yum remove 軟體名稱</code>

·一般不建議使用yum來解除安裝軟體,因為會把相關依賴的包也删除

2.yum源的配置

·可以檢視另一篇部落格檔案

·更改源後需要運作以下兩個指令:

<code>yum clean all    ===&gt;删除已下載下傳過的所有容器的相關資料(含軟體本身與清單)</code>

<code>yum makecache    ===&gt;生成緩存</code>

3.yum的軟體組功能

·常用參數:

<code>grouplist:列出所有的組清單(軟體組),包括安裝和未安裝的,如development tools</code>

<code>groupinfo:後面接軟體組名稱,可以了解軟體組内的軟體名稱</code>

<code>groupinstall:後面接軟體組,可以安裝一整組軟體組</code>

<code>groupremove:删除某個軟體組</code>

<code></code>