什么是 i386, i586, i686, noarch, x86_64linux的軟件安裝分為源代碼編譯安裝和打包安裝。RPM是一種打包安裝方式,是由 Red Hat 這家公司開發出來的,后來實在很好用,因此很多 distributions 就使用這個機制來作為軟件安裝的管理方式。包括 Fedora, CentOS, SuSE 等等知名的開發商都是用這咚咚
RPM 默認安裝的路徑這是個很好玩的地方,由於 RPM 可以適用在不同的操作平臺上,但是不同的平臺配置的參數還是有所差異性! 并且,我們可以針對比較高階的 CPU 來進行最佳化參數的配置,這樣才能夠使用高階 CPU 所帶來的硬件加速功能。 所以就有所謂的 i386, i586, i686, x86_64 與 noarch 等的文件名稱出現了!
平臺名稱 適合平臺說明 i386 幾乎適用於所有的 x86 平臺,不論是舊的 pentum 或者是新的 Intel Core 2 與 K8 系列的 CPU 等等,都可以正常的工作!那個 i 指的是 Intel 兼容的 CPU 的意思,至於 386 不用說,就是 CPU 的等級啦! i586 就是針對 586 等級的計算機進行最佳化編譯。那是哪些 CPU 呢?包括 pentum 第一代 MMX CPU, AMD 的 K5, K6 系列 CPU (socket 7 插腳) 等等的 CPU 都算是這個等級; i686 在 pentun II 以后的 Intel 系列 CPU ,及 K7 以后等級的 CPU 都屬於這個 686 等級! 由於目前市面上幾乎僅剩 P-II 以后等級的硬件平臺,因此很多 distributions 都直接釋出這種等級的 RPM 文件。 x86_64 針對 64 位的 CPU 進行最佳化編譯配置,包括 Intel 的 Core 2 以上等級 CPU ,以及 AMD 的 Athlon64 以后等級的 CPU ,都屬於這一類型的硬件平臺。 noarch 就是沒有任何硬件等級上的限制。一般來說,這種類型的 RPM 文件,里面應該沒有 binary PRogram 存在, 較常出現的就是屬於 shell script 方面的軟件。 根據上面的說明,其實我們只要選擇 i386 版本來安裝在你的 x86 硬件上面就肯定沒問題。但是如果強調效能的話, 還是選擇搭配你的硬件的 RPM 文件吧!畢竟該軟件才有針對你的 CPU 硬件平臺進行過參數最佳化的編譯嘛!
x86_64版本不僅需要硬件cpu是64位,Linux也要是64位的才行。
RPM 安裝 (install)
/etc 一些配置檔放置的目錄,例如 /etc/crontab /usr/bin 一些可運行文件 /usr/lib 些程序使用的動態函式庫 /usr/share/doc 一些基本的軟件使用手冊與說明檔 /usr/share/man 一些 man page 文件
RPM 升級與升級 (upgrade/freshen)因為安裝軟件是 root 的工作,因此你得要是 root 的身份才能夠操作 rpm 這命令的。 用 rpm 來安裝很簡單啦!假設我要安裝一個檔名為 rp-pppoe-3.5-32.1.i386.rpm 的文件,那么我可以這樣:
[root@www ~]# rpm -i rp-pppoe-3.5-32.1.i386.rpm不過,這樣的參數其實無法顯示安裝的進度,所以,通常我們會這樣下達安裝命令:[root@www ~]# rpm -ivh package_name選項與參數:-i :install 的意思-v :察看更細部的安裝資訊畫面-h :以安裝資訊列顯示安裝進度范例一:安裝 rp-pppoe-3.5-32.1.i386.rpm[root@www ~]# rpm -ivh rp-pppoe-3.5-32.1.i386.rpmPreparing... ####################################### [100%] 1:rp-pppoe ####################################### [100%] 范例二、一口氣安裝兩個以上的軟件時:[root@www ~]# rpm -ivh a.i386.rpm b.i386.rpm *.rpm# 后面直接接上許多的軟件文件!范例三、直接由網絡上面的某個文件安裝,以網址來安裝:[root@www ~]# rpm -ivh http://website.name/path/pkgname.rpm另外,如果我們在安裝的過程當中發現問題,或者已經知道會發生的問題, 而還是『執意』要安裝這個軟件時,可以使用如下的參數『強制』安裝上去:
可下達的選項 代表意義 --nodeps 使用時機:當發生軟件屬性相依問題而無法安裝,但你執意安裝時 危險性: 軟件會有相依性的原因是因為彼此會使用到對方的機制或功能,如果強制安裝而不考慮軟件的屬性相依, 則可能會造成該軟件的無法正常使用!
--replacefiles 使用時機: 如果在安裝的過程當中出現了『某個文件已經被安裝在你的系統上面』的資訊,又或許出現版本不合的信息 (confilcting files) 時,可以使用這個參數來直接覆蓋文件。 危險性: 覆蓋的動作是無法復原的!所以,你必須要很清楚的知道被覆蓋的文件是真的可以被覆蓋喔!否則會欲哭無淚!
--replacepkgs 使用時機: 重新安裝某個已經安裝過的軟件!如果你要安裝一堆 RPM 軟件文件時,可以使用 rpm -ivh *.rpm ,但若某些軟件已經安裝過了, 此時系統會出現『某軟件已安裝』的資訊,導致無法繼續安裝。此時可使用這個選項來重復安裝喔! --force 使用時機:這個參數其實就是 --replacefiles 與 --replacepkgs 的綜合體!
--test 使用時機: 想要測試一下該軟件是否可以被安裝到使用者的 Linux 環境當中,可找出是否有屬性相依的問題。范例為: rpm -ivh pkgname.i386.rpm --test
--justdb 使用時機: 由於 RPM 數據庫破損或者是某些緣故產生錯誤時,可使用這個選項來升級軟件在數據庫內的相關資訊。 --nosignature 使用時機: 想要略過數碼簽章的檢查時,可以使用這個選項。 --prefix 新路徑 使用時機: 要將軟件安裝到其他非正規目錄時。舉例來說,你想要將某軟件安裝到 /usr/local 而非正規的 /bin, /etc 等目錄, 就可以使用『 --prefix /usr/local 』來處理了。 --noscripts 使用時機:不想讓該軟件在安裝過程中自行運行某些系統命令。 說明: RPM 的優點除了可以將文件放置到定位之外,還可以自動運行一些前置作業的命令,例如數據庫的初始化。 如果你不想要讓 RPM 幫你自動運行這一類型的命令,就加上他吧!
RPM 查詢 (query)使用 RPM 來升級真是太簡單了!就以 -Uvh 或 -Fvh 來升級即可,而 -Uvh 與 -Fvh 可以用的選項與參數,跟 install 是一樣的。不過, -U 與 -F 的意義還是不太一樣的,基本的差別是這樣的:
-Uvh 后面接的軟件即使沒有安裝過,則系統將予以直接安裝; 若后面接的軟件有安裝過舊版,則系統自動升級至新版; -Fvh 如果后面接的軟件并未安裝到你的 Linux 系統上,則該軟件不會被安裝;亦即只有已安裝至你 Linux 系統內的軟件會被『升級』!
RPM 反安裝與重建數據庫 (erase/rebuilddb)RPM 在查詢的時候,其實查詢的地方是在 /var/lib/rpm/ 這個目錄下的數據庫文件啦!另外, RPM 也可以查詢未安裝的 RPM 文件內的資訊喔!那如何去查詢呢? 我們先來談談可用的選項有哪些?
[root@www ~]# rpm -qa <==已安裝軟件[root@www ~]# rpm -q[licdR] 已安裝的軟件名稱 <==已安裝軟件[root@www ~]# rpm -qf 存在於系統上面的某個檔名 <==已安裝軟件[root@www ~]# rpm -qp[licdR] 未安裝的某個文件名稱 <==查閱RPM文件選項與參數:查詢已安裝軟件的資訊:-q :僅查詢,后面接的軟件名稱是否有安裝;-qa :列出所有的,已經安裝在本機 Linux 系統上面的所有軟件名稱;-qi :列出該軟件的詳細資訊 (information),包含開發商、版本與說明等;-ql :列出該軟件所有的文件與目錄所在完整檔名 (list);-qc :列出該軟件的所有配置檔 (找出在 /etc/ 底下的檔名而已)-qd :列出該軟件的所有說明檔 (找出與 man 有關的文件而已)-qR :列出與該軟件有關的相依軟件所含的文件 (Required 的意思)-qf :由后面接的文件名稱,找出該文件屬於哪一個已安裝的軟件;查詢某個 RPM 文件內含有的資訊:-qp[icdlR]:注意 -qp 后面接的所有參數以上面的說明一致。但用途僅在於找出 某個 RPM 文件內的資訊,而非已安裝的軟件資訊!注意!在查詢的部分,所有的參數之前都需要加上 -q 才是所謂的查詢!查詢主要分為兩部分, 一個是查已安裝到系統上面的的軟件資訊,這部份的資訊都是由 /var/lib/rpm/ 所提供。另一個則是查某個 rpm 文件內容, 等於是由 RPM 文件內找出一些要寫入數據庫內的資訊就是了,這部份就得要使用 -qp (p 是 package 的意思)。 那就來看看幾個簡單的范例吧!
范例一:找出你的 Linux 是否有安裝 logrotate 這個軟件?[root@www ~]# rpm -q logrotatelogrotate-3.7.4-8[root@www ~]# rpm -q logrotatingpackage logrotating is not installed# 注意到,系統會去找是否有安裝后面接的軟件名稱。注意,# 不必要加上版本喔!至於顯示的結果,一看就知道有沒有安裝啦!范例二:列出上題當中,屬於該軟件所提供的所有目錄與文件:[root@www ~]# rpm -ql logrotate/etc/cron.daily/logrotate/etc/logrotate.conf....(以下省略)....# 可以看出該軟件到底提供了多少的文件與目錄,也可以追蹤軟件的數據。范例三:列出 logrotate 這個軟件的相關說明數據:[root@www ~]# rpm -qi logrotateName : logrotate Relocations: (not relocatable)Version : 3.7.4 Vendor: CentOSRelease : 8 Build Date: Sun 02 Dec 2007 08:38:06 AM CSTInstall Date: Sat 09 May 2009 11:59:05 PM CST Build Host: builder6Group : System Environment/Base Source RPM: logrotate-3.7.4-8.src.rpmSize : 53618 License: GPLSignature : DSA/SHA1, Sun 02 Dec 2007 09:10:01 AM CST, Key ID a8a447dce8562897Summary : Rotates, compresses, removes and mails system log files.Description :The logrotate utility is designed to simplify the administration oflog files on a system which generates a lot of log files. Logrotateallows for the automatic rotation compression, removal and mailing oflog files. Logrotate can be set to handle a log file daily, weekly,monthly or when the log file gets to a certain size. Normally,logrotate runs as a daily cron job.Install the logrotate package if you need a utility to deal with thelog files on your system.# 列出該軟件的 information (資訊),里面的資訊可多著呢,包括了軟件名稱、# 版本、開發商、SRPM文件名稱、打包次數、簡單說明資訊、軟件打包者、# 安裝日期等等!如果想要詳細的知道該軟件的數據,用這個參數來了解一下范例四:分別僅找出 logrotate 的配置檔與說明檔[root@www ~]# rpm -qc logrotate[root@www ~]# rpm -qd logrotate范例五:若要成功安裝 logrotate ,他還需要什么文件的幫忙?[root@www ~]# rpm -qR logrotate/bin/shconfig(logrotate) = 3.7.4-8libc.so.6....(以下省略)....# 由這里看起來,呵呵~還需要很多文件的支持才行喔!范例六:由上面的范例五,找出 /bin/sh 是那個軟件提供的?[root@www ~]# rpm -qf /bin/shbash-3.2-21.el5# 這個參數后面接的可是『文件』吶!不像前面都是接軟件喔!# 這個功能在查詢系統的某個文件屬於哪一個軟件所有的。范例七:假設我有下載一個 RPM 文件,想要知道該文件的需求文件,該如何?[root@www ~]# rpm -qpR filename.i386.rpm# 加上 -qpR ,找出該文件需求的數據!
CentOS強烈建議使用yum來管理軟件,且只使用CentOS推薦的軟件,如果沒有太大的需要,建議使用yum來安裝軟件,這樣的安裝可以最大的保證系統的穩定性。YUM 線上升級機制反安裝就是將軟件卸載啦!要注意的是,『解安裝的過程一定要由最上一級往下解除』,以 rp-pppoe 為例,這一個軟件主要是依據 ppp 這個軟件來安裝的,所以當你要解除 ppp 的時候,就必須要先解除 rp-pppoe 才行!否則就會發生結構上的問題啦!這個可以由建筑物來說明, 如果你要拆除五、六樓,那么當然要由六樓拆起,否則先拆的是第五樓時,那么上面的樓層難道會懸空?
移除的選項很簡單,就透過 -e 即可移除。不過,很常發生軟件屬性相依導致無法移除某些軟件的問題! 我們以底下的例子來說明:
# 1. 找出與 pam 有關的軟件名稱,并嘗試移除 pam 這個軟件:[root@www ~]# rpm -qa | grep pampam-devel-0.99.6.2-3.27.el5pam_passwdqc-1.0.2-1.2.2pam_pkcs11-0.5.3-23pam_smb-1.1.7-7.2.1pam-0.99.6.2-3.27.el5pam_ccreds-3-5pam_krb5-2.2.14-1[root@www ~]# rpm -e pamerror: Failed dependencies: <==這里提到的是相依性的問題 libpam.so.0 is needed by (installed) coreutils-5.97-14.el5.i386 libpam.so.0 is needed by (installed) libuser-0.54.7-2.el5.5.i386....(以下省略)....# 2. 若僅移除 pam-devel 這個之前范例安裝上的軟件呢?[root@www ~]# rpm -e pam-devel <==不會出現任何信息![root@www ~]# rpm -q pam-develpackage pam-devel is not installed由於 RPM 文件常常會安裝/移除/升級等,某些動作或許可能會導致 RPM 數據庫 /var/lib/rpm/ 內的文件破損。果真如此的話,那你該如何是好?別擔心,我們可以使用 --rebuilddb 這個選項來重建一下數據庫喔! 作法如下:[root@www ~]# rpm --rebuilddb <==重建數據庫
全系統自動升級yum 是透過分析 RPM 的標頭數據后, 根據各軟件的相關性制作出屬性相依時的解決方案,然后可以自動處理軟件的相依屬性問題,以解決軟件安裝或移除與升級的問題。
由於 distribution 必須要先釋出軟件,然后將軟件放置於 yum 服務器上面,以提供用戶端來要求安裝與升級之用的。 因此我們想要使用 yum 的功能時,必須要先找到適合的 yum server 才行??!
實際上當你第一次使用yum時,CentOS6以上版本優先安裝了 fastestmirror,用以選擇最快的yum服務器。
- 查詢功能:yum [list|info|search|provides|whatprovides] 參數
[root@www ~]# yum [option] [查詢工作項目] [相關參數]選項與參數:[option]:主要的選項,包括有: -y :當 yum 要等待使用者輸入時,這個選項可以自動提供 yes 的回應; --installroot=/some/path :將該軟件安裝在 /some/path 而不使用默認路徑[查詢工作項目] [相關參數]:這方面的參數有: search :搜尋某個軟件名稱或者是描述 (description) 的重要關鍵字; list :列出目前 yum 所管理的所有的軟件名稱與版本,有點類似 rpm -qa; info :同上,不過有點類似 rpm -qai 的運行結果; provides:從文件去搜尋軟件!類似 rpm -qf 的功能!范例一:搜尋磁盤陣列 (raid) 相關的軟件有哪些?[root@www ~]# yum search raid....(前面省略)....mdadm.i386 : mdadm controls Linux md devices (software RAID arrays)lvm2.i386 : Userland logical volume management tools....(后面省略)....# 在冒號 (:) 左邊的是軟件名稱,右邊的則是在 RPM 內的 name 配置 (軟件名)# 瞧!上面的結果,這不就是與 RAID 有關的軟件嗎?如果想了解 mdadm 的軟件內容呢?范例二:找出 mdadm 這個軟件的功能為何[root@www ~]# yum info mdadmInstalled Packages <==這說明該軟件是已經安裝的了Name : mdadm <==這個軟件的名稱Arch : i386 <==這個軟件的編譯架構Version: 2.6.4 <==此軟件的版本Release: 1.el5 <==釋出的版本Size : 1.7 M <==此軟件的文件總容量Repo : installed <==容器回報說已安裝的Summary: mdadm controls Linux md devices (software RAID arrays)Description: <==看到否?這就是 rpm -qi 嘛!mdadm is used to create, manage, and monitor Linux MD (software RAID)devices. As such, it provides similar functionality to the raidtoolspackage. However, mdadm is a single program, and it can performalmost all functions without a configuration file, though a configurationfile can be used to help with some common tasks.# 不要跟我說,上面說些啥?自己找字典翻一翻吧!拜托拜托!范例三:列出 yum 服務器上面提供的所有軟件名稱[root@www ~]# yum listInstalled Packages <==已安裝軟件Deployment_Guide-en-US.noarch 5.2-9.el5.centos installedDeployment_Guide-zh-CN.noarch 5.2-9.el5.centos installedDeployment_Guide-zh-TW.noarch 5.2-9.el5.centos installed....(中間省略)....Available Packages <==還可以安裝的其他軟件Cluster_Administration-as-IN.noarch 5.2-1.el5.centos baseCluster_Administration-bn-IN.noarch 5.2-1.el5.centos base....(底下省略)....# 上面提供的意義為:『 軟件名稱 版本 在那個容器內 』范例四:列出目前服務器上可供本機進行升級的軟件有哪些?[root@www ~]# yum list updates <==一定要是 updates 喔!Updated PackagesDeployment_Guide-en-US.noarch 5.2-11.el5.centos baseDeployment_Guide-zh-CN.noarch 5.2-11.el5.centos baseDeployment_Guide-zh-TW.noarch 5.2-11.el5.centos base....(底下省略)....# 上面就列出在那個容器內可以提供升級的軟件與版本!范例五:列出提供 passwd 這個文件的軟件有哪些[root@www ~]# yum provides passwdpasswd.i386 : The passwd utility for setting/changing passWords using PAMpasswd.i386 : The passwd utility for setting/changing passwords using PAM# 找到啦!就是上面的這個軟件提供了 passwd 這個程序!- 安裝/升級功能:yum [install|update] 軟件
[root@www ~]# yum [option] [查詢工作項目] [相關參數]選項與參數: install :后面接要安裝的軟件! update :后面接要升級的軟件,若要整個系統都升級,就直接 update 即可范例一:將前一個練習找到的未安裝的 pam-devel 安裝起來[root@www ~]# yum install pam-develSetting up Install ProcessParsing package install argumentsResolving Dependencies <==先檢查軟件的屬性相依問題--> Running transaction check---> Package pam-devel.i386 0:0.99.6.2-4.el5 set to be updated--> Processing Dependency: pam = 0.99.6.2-4.el5 for package: pam-devel--> Running transaction check---> Package pam.i386 0:0.99.6.2-4.el5 set to be updatedfilelists.xml.gz 100% |=========================| 1.6 MB 00:05filelists.xml.gz 100% |=========================| 138 kB 00:00-> Finished Dependency ResolutionDependencies Resolved============================================================================= Package Arch Version Repository Size=============================================================================Installing: pam-devel i386 0.99.6.2-4.el5 base 186 kUpdating: pam i386 0.99.6.2-4.el5 base 965 kTransaction Summary=============================================================================Install 1 Package(s) <==結果發現要安裝此軟件需要升級另一個相依的軟件Update 1 Package(s)Remove 0 Package(s)Total download size: 1.1 MIs this ok [y/N]: y <==確定要安裝!Downloading Packages: <==先下載!(1/2): pam-0.99.6.2-4.el5 100% |=========================| 965 kB 00:05(2/2): pam-devel-0.99.6.2 100% |=========================| 186 kB 00:01Running rpm_check_debugRunning Transaction TestFinished Transaction TestTransaction Test SucceededRunning Transaction <==開始安裝! Updating : pam ######################### [1/3] Installing: pam-devel ######################### [2/3] Cleanup : pam ######################### [3/3]Installed: pam-devel.i386 0:0.99.6.2-4.el5Updated: pam.i386 0:0.99.6.2-4.el5Complete!- 移除功能:yum [remove] 軟件
[root@www ~]# yum remove pam-develSetting up Remove ProcessResolving Dependencies <==同樣的,先解決屬性相依的問題--> Running transaction check---> Package pam-devel.i386 0:0.99.6.2-4.el5 set to be erased--> Finished Dependency ResolutionDependencies Resolved============================================================================= Package Arch Version Repository Size=============================================================================Removing: pam-devel i386 0.99.6.2-4.el5 installed 495 kTransaction Summary=============================================================================Install 0 Package(s)Update 0 Package(s)Remove 1 Package(s) <==還好,并沒有屬性相依的問題,單純移除一個軟件Is this ok [y/N]: yDownloading Packages:Running rpm_check_debugRunning Transaction TestFinished Transaction TestTransaction Test SucceededRunning Transaction Erasing : pam-devel ######################### [1/1]Removed: pam-devel.i386 0:0.99.6.2-4.el5Complete!
我們可以手動選擇是否需要升級,那能不能讓系統自動升級,讓我們的系統隨時保持在最新的狀態呢? 當然可以??!透過『 yum -y update 』來自動升級,那個 -y 很重要,因為可以自動回答 yes 來開始下載與安裝! 然后再透過 crontab 的功能來處理即可!假設我每天在臺灣時間 3:00am 網絡頻寬比較輕松的時候進行升級, 你可以這樣做的:
[root@www ~]# vim /etc/crontab....(前面省略并保留配置值)....0 3 * * * root /usr/bin/yum -y update從此你的系統就會自動升級啦!很棒吧!此外,你還是得要分析登錄檔與收集 root 的信件的, 因為如果升級的是核心軟件 (kernel),那么你還是得要重新啟動才會讓安裝的軟件順利運行的! 所以還是得分析登錄檔,若有新核心安裝,就重新啟動,否則就讓系統自動維持在最新較安全的環境吧! 真是輕松愉快的管理??!
新聞熱點
疑難解答