天天看點

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

dpkg

APT(apt-get)

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

2.RPM與SRPM

--RPM

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

·RPM包的安裝過程圖示:

·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

rpm

軟體名稱

軟體版本資訊

釋出次數

适合硬體平台

擴充名

·對硬體平台的說明:

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

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

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

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

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

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

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

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

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

YUM伺服器

<a href="http://s3.51cto.com/wyfs02/M02/71/AC/wKiom1XWjIPw9R_MAAF0phDvvmk070.jpg" target="_blank"></a>

yum用戶端

<a href="http://s3.51cto.com/wyfs02/M02/71/A8/wKioL1XWjt-xWOuOAAE1dv6Q2M8845.jpg" target="_blank"></a>

流程

<a href="http://s3.51cto.com/wyfs02/M00/71/A9/wKioL1XWkJ2S0OHvAAJLZxJAmM4006.jpg" target="_blank"></a>

·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>

本文轉自 xpleaf 51CTO部落格,原文連結:http://blog.51cto.com/xpleaf/1686551,如需轉載請自行聯系原作者