linux软件包管理(dpkg、rpm)与软件源的由来(apt、yum、Yast)
文章補充與總結:
ubuntu中dpkg與apt的關系:
dpkg繞過apt包管理數據庫對軟件包進行操作,所以你用dpkg安裝過的軟件包用apt可以再安裝一遍,系統不知道之前安裝過了,將會覆蓋之前dpkg的安裝。dpkg是用來安裝.deb文件,但不會解決模塊的依賴關系,且不會關心ubuntu的軟件倉庫內的軟件,可以用于安裝本地的deb文件
apt會解決和安裝模塊的依賴問題,并會咨詢軟件倉庫, 但不會安裝本地的deb文件, apt是建立在dpkg之上的軟件管理工具
aptitude與?apt-get?一樣,是?Debian?及其衍生系統***能極其強大的包管理工具。與?apt-get?不同的是,aptitude在處理依賴問題上更佳一些。舉例來說,aptitude在刪除一個包時,會同時刪除本身所依賴的包。這樣,系統中不會殘留無用的包,整個系統更為干凈。
源是指線上軟件倉庫,它解決了我們通過本地軟件管理命令(rpm、dpkg)的包依賴問題,我們可以在ubuntu下使用apt命令集安裝源里的軟件(opensuse 上用zyper,redhat用yum),他可以直接幫我們安裝好所依賴的軟件包。如果下載源碼包,自行編譯或者使用dpkg或rpm安裝.deb或.rpm的軟件包安裝好之后可能會因為缺少依賴包而導致軟件無法運行或者運行失敗。
ubuntu源列表文件存放位置: /etc/apt/sources.list
Linux界的兩大主流: RPM與DPKG
?
由于自由軟體的蓬勃發展,加上大型Unix-Like 主機的強大效能,讓很多軟體開發者將他們的軟體使用Tarball 來釋出。后來Linux 發展起來后,由一些企業或社群將這些軟體收集起來制作成為distributions 以發布這好用的Linux 作業系統。但后來發現到,這些distribution 的軟體管理實在傷腦筋, 如果軟體有漏洞時,又該如何修補呢?使用tarball 的方式來管理嗎? 又常常不曉得到底我們安裝過了哪些程式?因此,一些社群與企業就開始思考Linux 的軟體管理方式。
?
如同剛剛談過的方式,Linux 開發商先在固定的硬體平臺與作業系統平臺上面將需要安裝或升級的軟體編譯好, 然后將這個軟體的所有相關檔案打包成為一個特殊格式的檔案,在這個軟體檔案內還包含了預先偵測系統與相依軟體的腳本, 并提供記載該軟體提供的所有檔案資訊等。最終將這個軟體檔案釋出。 用戶端取得這個檔案后,只要透過特定的指令來安裝,那么該軟體檔案就會依照內部的腳本來偵測相依的前驅軟體是否存在,若安裝的環境符合需求,那就會開始安裝 ,安裝完成后還會將該軟體的資訊寫入軟體管理機制中,以達成未來可以進行升級、移除等動作呢。
?
目前在Linux 界軟體安裝方式最常見的有兩種,分別是:
- dpkg :
這個機制最早是由Debian Linux 社群所開發出來的,透過dpkg 的機制, Debian 提供的軟體就能夠簡單的安裝起來,同時還能提供安裝后的軟體資訊,實在非常不錯。只要是衍生于Debian 的其他Linux distributions 大多使用dpkg 這個機制來管理軟體的, 包括B2D, Ubuntu 等等。
- RPM :
這個機制最早是由Red Hat 這家公司開發出來的,后來實在很好用,因此很多distributions 就使用這個機制來作為軟體安裝的管理方式。包括Fedora, CentOS, SuSE 等等知名的開發商都是用這咚咚。
如前所述,不論dpkg/rpm 這些機制或多或少都會有軟體屬性相依的問題,那該如何解決呢?其實前面不是談到過每個軟體檔案都有提供相依屬性的檢查嗎? 那 么如果我們將相依屬性的資料做成列表, 等到實際軟體安裝時,若發生有相依屬性的軟體狀況時,例??如安裝A 需要先安裝B 與C ,而安裝B 則需要安裝D 與E 時,那么當妳要安裝A ,透過相依屬性列表,管理機制自動去取得B, C, D, E 來同時安裝, 不就解決了屬性相依的問題嗎?
?
沒錯! 您真聰明! 目前新的Linux 開發商都有提供這樣的『線上升級』機制,透過這個機制, 原版光碟就只有第一次安裝時需要用到而已,其他時候只要有網路,妳就能夠取得原本開發商所提供的任何軟體了呢!在dpkg 管理機制上就開發出APT 的線上升級機制,RPM 則依開發商的不同,有Red Hat 系統的yum , SuSE 系統的Yast Online Update (YOU), Mandriva 的urpmi 軟體等。
| distribution 代表 | 軟體管理機制 | 使用指令 | 線上升級機制(指令) |
| Red Hat/Fedora | RPM | rpm, rpmbuild | YUM (yum) |
| Debian/Ubuntu | DPKG | dpkg | APT (apt-get) |
我們這里使用的是CentOS 系統嘛! 所以說: 使用的軟體管理機制為RPM機制,而用來作為線上升級的方式則為yum !底下就讓我們來談談RPM 與YUM 的相關說明吧!
?
RPM與DPKG
目前市面上大部分的Linux distro都是根基于Red Hat及Debian這兩大廠牌的改裝(SuSE是一個異類)??。因此在套件管理上,Red Hat的RPM與Debian的DPKG就成為Linux套件管理上的兩大標準。
?
這邊也不討論類Unix作業系統在套件管理(軟體的安裝,移除,查詢)上所持的哲學與一般人常用的MS Windows系列有很大的不同而衍生出的困難了,直接就這兩個套件管理工具列出比較以利查詢。
?
以下整理列表來自Jamyy's Weblog :
?
安裝
| 目的 | rpm 用法 | dpkg 用法 |
| 安裝指定套件 | rpm -i pkgfile.rpm | dpkg -i pkgfile.deb |
查詢
| 目的 | rpm 用法 | dpkg 用法 |
| 顯示所有已安裝的套件名稱 | rpm -qa | dpkg -l (小寫L) |
| 顯示套件包含的所有檔案 | rpm -ql softwarename (小寫L) | dpkg -L softwarename |
| 顯示特定檔案所屬套件名稱 | rpm -qf /path/to/file | dpkg -S /path/to/file |
| 查詢套件檔案資訊 | rpm -qip pkgfile.rpm (顯示套件資訊) rpm -qlp pkgfile.rpm (小寫L,顯示套件內所有檔案) | dpkg -I pkgfile.deb (大寫I ) dpkg -c pkgfile.deb |
| 顯示指定套件是否安裝 | rpm -q softwarename (只顯示套件名稱) rpm -qi softwarename (顯示套件資訊) | dpkg -l softwarename (小寫L,只列出簡潔資訊) dpkg -s softwarename (顯示詳細資訊) dpkg -p softwarename (顯示詳細資訊) |
移除
| 目的 | rpm 用法 | dpkg 用法 |
| 移除指定套件 | rpm -e softwarename | dpkg -r softwarename (會留下套件設定檔) dpkg -P softwarename (完全移除) |
在Debian使用alien處理RPM套件
alien 可處理.deb、.rpm、.slp、.tgz 等檔案格式, 進行轉檔或安裝.
于Debian安裝非Debian套件時,可使用alien進行安裝.
安裝alien套件: apt-get install alien
- 在Debian安裝RPM套件: alien -i quota-3.12-7.i386.rpm
- 制作成deb的套件格式: alien -d quota-3.12-7.i386.rpm
- 制作成rpm的套件格式: alien -r quota_3.12-6_i386.deb
?
APT與YUM
雖然RPM與DPKG有效的解決的軟體的安裝,移除與查詢的需求,但是在Linux上的套件管理還有一個很大的問題必須解決,就是各軟體間的相依性(dependency)。RPM與DPKG只能做到檢查相依性,在安裝或移除時告知相依性的不滿足,皆下來就需要使用者自行去找出所需的套件來安裝。這樣的確是有點不方便,因此產生了前端工具軟體- APT及YUM。
?
?
APT
Debian開發,目前也有porting到其他版本,要在Red Hat系的Fedora或CentOS使用也是可以的。
使用方法:
- 編輯/etc/apt/sources.list ,設定所選用的版本,如stable,testing,unstable及套件來源站臺或裝置。檔案詳細設定請參考: 了解Debian系統的哲學
- 基本指令:
| apt-setup | 設定/etc/apt/souces.list |
| apt-get update | 軟體資料庫同步 |
| apt-get install softwarename1 [softwarename2.....] | 安裝軟體 |
| apt-get remove softwarename 1 [softwarename 2...] | 移除軟體(保留設定檔) |
| apt-get --purge remove softwarename 1 [ softwarename 2...] | 移除軟體(不保留設定檔) |
| apt-cache search softwarename | 列出所有sofrwarename的套件 |
| apt-upgrade [softwarename 1softwarename 2...] | 更新套件,不指定套件名則更新所有可更新的套件 |
| apt-get clean(autoclean) | 刪除系統暫存的deb(autoclean只會將比目前系統舊版的套件刪除) |
| apt-get dist-upgrade | 轉換系統的版本(需在/etc/apt/sources.list指定stable,testing或unstable) |
?
?
YUM
YUM(Yellow dog Updater, Modified )是Yellow Dog Linux開發的。Yellow Dog Linux原本是一套完全源于Red Hat但運作于先前使用IBM PPC平臺的MAC機器,原本以為這個版本已經消失,沒想到最新消息是他們推出了在Sony PS3上面運作的版本。CentOS及Fedora的基本預設安裝中即將YUM列入其內。 如果沒記錯,要在Debian上使用YUM也是可以的。
使用方法:
- 編輯/etc/yum.conf檔案詳細設定請參考: 簡易APT/YUM伺服器設定注1
- 基本指令: (如果yum在工作過程中需要使用者回應,可加上-y參數直接回答yes )
| yum install softwarename1 [softwarename2.....] | 安裝套件 |
| yum update [softwarename 1softwarename 2...] | 更新套件,不指定套件名則更新所有可更新的套件 |
| yum list | 列出目前在yum server 上面有的套件 |
| yum info | 類似rpm -qi |
| yum clean | 移除下載到本機的packages 或headers |
| yum remove softwarename1 [softwarename2.....] | 移除已經安裝的套件 |
注1:Red Hat近年來致力于將一個設定檔切割成很多小設定檔。 以yum.conf為例,Red Hat將其分割成xxx.repo檔放置在/etc/yum.repos.d這個目錄下。 并在yum.conf檔里增加一行注解: PUT YOUR REPOS HERE OR IN separate files named file.repo in /etc/yum.repos.d。個人可視喜好決定。
?
參考文件:
原文地址:http://justcoding.iteye.com/blog/1937171
總結
以上是生活随笔為你收集整理的linux软件包管理(dpkg、rpm)与软件源的由来(apt、yum、Yast)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: tesklink 管理员项目角色被修改后
- 下一篇: linux软件包安装方式汇总