摘要 RedHat發明RPM工具來實現對Linux環境下軟件包的管理,使得RPM成為Linux環境下管理軟件的一個事實的標准工具。但是RPM具有依賴性處理復雜的問題,使得其使用起來比較麻煩,並且定時更新系統軟件,彌補系統漏洞也是困擾管理員的一個問題。而從Debian引進的基於RPM的軟件管理工具APT則是解決這些問題的一個非常好的辦法。 請注意本文已刊載在《開放系統世界》2003年第四期,該文章版權屬於該雜志所有,請勿隨意轉載,轉載請保留該聲明 軟件環境:Redhat 7.3 文章相關軟件:apt-0.5.4cnc9-fr0.1.rh73 FTP://rpmfind.net/linux/freshrpms/valhalla/apt/apt-0.5.4cnc9-fr0.1.rh73.i386.rpm 一、 前言 1.1 什麼是APT 新的操作系統裝好以後,安裝新軟件是一件必不可少的工作。但是在Linux中,安裝應用軟件和Windows下有些不同,對於Linux初學者來說,安裝軟件是一件很讓人頭疼的事情。由於很多Linux應用軟件都是以源代碼的形式發布的,這就要求用戶根據自己系統的實際情況和自身的需要來配置、編譯源程序後,才能使用這些軟件。Linux傳統的通過源代碼方式安裝Linux對於大多數Linux 初學者往往顯得過於復雜和困難。Redhat公司為了降低軟件安裝的復雜性,在自已出的發行版中推出了著名的軟件包管理工具:RPM(Redhat Packet Manager),雖然RPM打上了RedHat的標志,但是其原始設計理念是開放式的,現在包括OpenLinux、S.u.S.E.以及Turbo Linux等Linux的分發版本都有采用,可以算是公認的行業標准了。 雖然RPM提供的系軟件管理功能使得軟件安裝和刪除高度的自動化,簡化了Linux環境下軟件安裝和管理的難度。但是RPM為保持系統一致性而具有的軟件包依賴性問題需要管理員手工解決。管理員在安裝和卸載程序時就可能非常煩瑣。例如:在某個軟件A時會發現該軟件依賴於另外一個軟件B,從而需要下載B,又發現B依賴與C,這樣出現多次依賴嵌套問題。管理員不得不一一下載,然後再安裝。 而Debian發布的軟件管理系統發明了APT(高級軟件包工具,Advanced Package Tool)則在系統軟件安裝維護方面更加方便易用。APT能夠在發現軟件包依賴性的同時自動下載相應的軟件包並加以安裝。APT使得管理員能毫無故障地執行系統軟件的升級。許多時候,當用戶的軟件安裝對其他方法產生不良影響時,apt的一個改進能夠讓所有事情都保持正確。APT使得零停機時間升級成為現實。 雖然APT是基於Debian的軟件包管理工具,但是一個好消息是基於APT已經被一個巴西公司Conectiva移植到基於RPM的系統上。看到安樂 1.2 APT和其他軟件管理工具的比較 在基於RPM的Linux平台上,有很多其他的軟件包管理工具,如:autorpm、rpmfind、up2date/RHUN、urpmi/rpmdrake/Mandrake Update等等。我們下面就對這些工具進行比較。 依賴性發現只在某些情況下有效。 一般來說所有工具都需要服務器上有一個特殊的軟件包索引文件。該文件包含有軟件包信息。但是它們是一般文件,可以從其他的鏡象服務器上下載。 軟件包驗證用來驗證下載的軟件包的正確性;鏡象服務器驗證實現驗證鏡象服務器和正式服務器的內容是否一致。 這些特性是ATP-RPM所獨有的,而Debian的APT則不具有這些特性。 當升級軟件包時顯示升級的原因。這樣管理員就可以了解升級軟件包是由於安全原因或功能升級。 從上面的表中可以看到ATP和其他工具相比較具有更好的功能優勢。因此對於基於RPM軟件包管理的平台,如:Redhat、TurboLinux、SuSe、Mandrake等等,APT是一個非常優秀的軟件管理工具。 1.3 安裝APT 從rpmfind.net下載針對Red Hat7.3的ATP的RPM包,然後進行安裝: [root@www src]# rpm -ivh apt-0.5.4cnc9-fr0.1.rh73.i386.rpm 即可完成對在RedHat7.3平台上apt工具的安裝。 二、 主要配置文件 1、/etc/apt/sources.list 這是APT最重要的配置文件,該文件記載了軟件倉庫服務器的地址等信息。有針對從RedHat6.2到8.0的所有版本的軟件倉庫路徑信息。這裡我們只需要把7.3版本對應的路徑信息打開,其他的版本的路徑信息則可以關閉。 # Red Hat Linux 7.3 rpm http://apt.freshrpms.net redhat/7.3/en/i386 os updates freshrpms rpm-src http://apt.freshrpms.net redhat/7.3/en/i386 os updates freshrpms 2.其他在 /etc/apt 目錄下還有其他以下诶配置文件apt.conf rpmpriorities vendors.list等,使用默認的配置即可,具體含義可以參考man文檔。 三、 使用APT前的准備 安裝APT軟件包以後,管理員需要做的第一個工作就是運行: [root@www src]# apt-get update 從默認服務器下載軟件包數據庫。 運行: [root@www src]# apt-get check atp來驗證本地系統的完整性和一致性,判斷本地系統的軟件包依賴性是否一致。 注:如果本地系統一致性嚴重破壞,則可以使用apt-get -f install 命令在使用apt以前手工修復被破壞的依賴性。 如果希望定期升級系統,保證系統即時升級,彌補安全漏洞,只需要apt-get update 和 apt-get dist-upgrade 或 apt-get upgrade就可以了。 四、 主要命令 apt主要有apt-cache apt-cdrom apt-config apt-get等四個命令。用戶用的最多的應該就是apt-get命令。這些命令的詳細說明參見man手冊,這裡只對常用方法進行說明。 4.1 apt-get 1.apt-get update 更新本地apt-get的本地數據庫,使其與服務器的pkglist文件同步。在升級以前一般都要執行本命令實現與服務器的一致。 2.apt-get check 驗證本地系統的完整性。 3.apt-get dist-upgrade 類似於apt-get,但是將安裝所有的基礎軟件包,並盡力升級一切軟件包,並在需要是安裝新軟件包。 4.apt-get install package_name 安裝某個軟件包及其相關軟件包 如 apt-get install openssh 不但會安裝openssh,同時會升級openssl 5.apt-get remove package_name 刪除該軟件包,同時會刪除依賴於它的軟件包 6.apt-get source package_name 下載軟件包的source rpm 例: apt-get source --compile zhcon 抓回 source rpm 並編譯為二進制的rpm。--compile參數功能等同於rpm -ba 7.apt-get clean 刪除保存在緩存目錄下(/var/cache/apt/archives)的被下載的軟件包 8.apt-get upgrade package_name 升級指定的軟件包,並升級其依賴的軟件包。 4.2 apt-cdrom 在安裝系統以後,可以使用apt-cdrom把三張安裝光盤加入到apt 的 sources.list 中 用法如下: # apt-cdrom add Using CD-ROM mount point /mnt/cdrom/ Unmounting CD-ROM Please insert a Disc in the drive and press enter Mounting CD-ROM Identifying.. [af0e7c988f7ae057a4a3bccc8008134d-2] Scanning Disc for index files.. Found 1 package indexes and 0 source indexes. Please provide a name for this Disc, sUCh as 'MyDistro 6.0 Disk 1': Gaga V1.1 disc1 This Disc is called: 'Gaga V1.1 disc1' Reading Indexes... Done Writing new source list Source List entries for this Disc are: rpm cdrom:[Gaga V1.1 disc1]/ RedHat gaga Repeat this process for the rest of the CDs in your set. 三次運行apt-cdrom add命令,來加載三張安裝光盤。在/etc/apt/sources.list中就應該會包含如下內容: rpm cdrom:[Gaga V1.1 disc3]/ RedHat gaga rpm cdrom:[Gaga V1.1 disc2]/ RedHat gaga rpm cdrom:[Gaga V1.1 disc1]/ RedHat gaga 這樣以後就可以使用apt-get來安裝以前未安裝的安裝光盤上的軟件了。 示例如下,若您的服務器沒有和互聯網連接,那麼修改/etc/apt/sources.list,使其包含下面三行: rpm cdrom:[Gaga V1.1 disc3]/ RedHat gaga rpm cdrom:[Gaga V1.1 disc2]/ RedHat gaga rpm cdrom:[Gaga V1.1 disc1]/ RedHat gaga # apt-get update # apt-get install imap 則根據指示放入第二張光盤即可,而不會出現不知道軟件包在哪個光盤上,左尋右找的麻煩。 4.3 apt-cache 1.apt-cache showpkg 顯示軟件包的一些常規信息 例: apt-cache showpkg openssh 2.apt-cache stats 顯示相關的統計信息顯示相關的統計資訊 3.apt-cache dump 顯示緩存中的每個軟件包的簡要描述信息 4.apt-cache unmet 顯示不符合一致性的依賴關系 5.apt-cache show 顯示指定軟件包的記錄信息。類似於rpm -qi 6.apt-cache search 查找軟件包,類似於rpm -qagrep package_name 例: apt-cache search openssh 7.apt-cache depends 顯示軟件包的依賴性關系 8.apt-cache pkgnames 列出所有的軟件包 例: $ apt-cache pkgnames openss openssh-askpass openssl096 openssl-perl openssl095a openssl-python openssh-clients openssl-devel openssh-askpass-gnome openssh openssl openssh-server 4.4 apt-config 1.apt-config dump 顯示目前的配置信息。