一、軟體管理器簡介
--包管理模式
·使用者使用的系統與軟體發行商的一樣,發行商就可以在他們的系統上編譯好使用者需要的軟體,然後将編譯好的軟體發給使用者,就可以在使用者的系統上直接安裝使用,省去了編譯的過程;
·包管理模式的安裝方式類似于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 ===>安裝以pam-devel開頭的多個RPM包</code>
<code>[root@xpleaf ~]# rpm -ivh http:</code><code>//website.name/path/pkgname.rpm ===>安裝網絡上的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 ===>挂載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>===>查找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 ===>檢測依賴軟體</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 ===>安裝</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 ===>查詢本機已安裝的軟體</code>
<code>rpm -q[ilcdR] 已安裝的軟體名稱 ===>查詢已安裝軟體的特定資訊</code>
<code>rpm -qf 存在于系統上的某個檔案名 ===>查詢檔案的所屬安裝軟體</code>
<code>rpm -qp[ilcdR] 未安裝的RPM包完整名稱 ===>查詢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 <http:</code><code>//bugs.centos.org></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) <= </code><code>3.0</code><code>.</code><code>4</code><code>-</code><code>1</code>
<code>rpmlib(FileDigests) <= </code><code>4.6</code><code>.</code><code>0</code><code>-</code><code>1</code>
<code>rpmlib(PartialHardlinkSets) <= </code><code>4.0</code><code>.</code><code>4</code><code>-</code><code>1</code>
<code>rpmlib(PayloadFilesHavePrefix) <= </code><code>4.0</code><code>-</code><code>1</code>
<code>rpmlib(VersionedDependencies) <= </code><code>3.0</code><code>.</code><code>3</code><code>-</code><code>1</code>
<code>rtld(GNU_HASH) </code>
<code>rpmlib(PayloadIsXz) <= </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 ===>使用--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>===>上面這些目錄即是SRPM使用的路徑</code>
<code>[root@xpleaf ~]# cd rpmbuild/RPMS/x86_64/ ===>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 ===>設定檔案</code>
<code>./SOURCES/logrotate-</code><code>3.7</code><code>.</code><code>8</code><code>-man5.patch ===>.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 ===>源代碼檔案壓縮包</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>===>如果還有其它檔案,則可能是一些腳本檔案</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 ===>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 ===>即是前面在SOURCES中看到的一些更新檔檔案</code>
<code>Patch2: logrotate-</code><code>3.7</code><code>.</code><code>7</code><code>-toolarge.patch ===>意在說明該軟體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 >= </code><code>5.92</code> <code>libsepol libselinux popt ===>需要的軟體,即依賴軟體</code>
<code>BuildRequires: libselinux-devel popt-devel ===>編譯時需求的工具軟體</code>
<code>BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)===>編譯時臨時檔案存放的目錄</code>
<code>%description ===>軟體描述資訊</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 ===>預處理,就是上面的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 ===>編譯 </code>
<code>make %{?_smp_mflags} RPM_OPT_FLAGS=</code><code>"$RPM_OPT_FLAGS"</code> <code>WITH_SELINUX=yes </code>
<code>%install ===>安裝 </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 ===>清理删除臨時檔案 </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 <[email protected]> </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 <[email protected]> </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 <[email protected]> </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 ===>編譯并同時生成RPM與SRPM檔案</code>
<code>[root@xpleaf SPECS]# rpmbuild -bb setarch.spec ===>編譯隻生成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 ===>已經安裝的軟體版本</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 ===>還可以安裝的軟體版本</code>
c.列出yum伺服器上面提供的軟體清單
<code>[root@xpleaf ~]# yum list</code>
<code>Installed Packages ===>已經安裝的軟體</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 ===>還可以安裝的軟體</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 ===>删除已下載下傳過的所有容器的相關資料(含軟體本身與清單)</code>
<code>yum makecache ===>生成緩存</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,如需轉載請自行聯系原作者