<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    ivaneeo's blog

    自由的力量,自由的生活。

      BlogJava :: 首頁 :: 聯(lián)系 :: 聚合  :: 管理
      669 Posts :: 0 Stories :: 64 Comments :: 0 Trackbacks

    概要
    本文檔的寫作目的是幫助用戶了解Debian包管理工具——APT的工作原理,我們的目標(biāo)是簡化Debian新用戶的生活以及為那些希望深入了解系統(tǒng)管理的人提供幫助。它也是為Debian項(xiàng)目組而作的,以幫助改善其為發(fā)行版提供技術(shù)支持的工作質(zhì)量。

    版權(quán)聲明
    Copyright ? 2001, 2002 Gustavo Noronha Silva

    This manual is licensed under the terms of the GNU FDL (Free Documentation License). It has been written in the hope that it will be useful to the community but it comes with no warranty; use it at your own risk.


    目錄

    1.導(dǎo)言
    2.基礎(chǔ)設(shè)置
    2.1 /etc/apt/sources.list文件
    2.2 怎樣在本地使用APT
    2.3 選擇最佳鏡像發(fā)布站點(diǎn)加入source.list文件:netselect,netselect-apt
    2.4 將CD-ROM加入source.list文件
    3.軟件包管理
    3.1 更新可用軟件包列表
    3.2 安裝軟件包
    3.3 移除軟件包
    3.4 更新軟件包
    3.5 升級到新版本
    3.6 移除無用軟件包文件:apt-get clean and autoclean
    3.7 在dselect中操作APT
    3.8 如何keep a mixed system
    3.9 如何從Debian的專用版本下升級軟件包
    3.10 如何維護(hù)已安裝軟件包的多個(gè)版本(復(fù)雜)
    4.非常有用的助手
    4.1 如何安裝本地編譯的軟件包:equivs
    4.2 移除無用的locale files文件:localepurge
    4.3 如何知曉哪些軟件包可以升級
    5.獲取軟件包信息
    5.1 獲得軟件包名稱
    5.2 使用dpkg查找軟件包名稱
    5.3 如何“按需”安裝軟件包
    5.4 如何知道文件屬于哪個(gè)軟件包
    5.5 如何掌握軟件包的變化情況
    6.操作源碼包
    6.1 下載源碼包
    6.2 編譯源碼包所需的軟件包
    7.如何處理錯(cuò)誤
    7.1 一般錯(cuò)誤
    7.2 在哪兒獲得幫助?
    8.哪些版本支持APT?
    9.感謝
    10.本使用指南的新版本

    Debian APT HOWTO 第一章 導(dǎo)言
    APT HOWTO
    第一章 導(dǎo)言

    最初只有.tar.gz的打包文件,用戶必須編譯每個(gè)他想在GNU/Linux上運(yùn)行的軟件。用戶們普遍認(rèn)為系統(tǒng)很有必要提供一種方法來管理這些安 裝在機(jī)器上的軟件包,當(dāng)Debian誕生時(shí),這樣一個(gè)管理工具也就應(yīng)運(yùn)而生,它被命名為dpkg。從而著名的“package”概念第一次出現(xiàn)在 GNU/Linux系統(tǒng)中,稍后RedHat才決定開發(fā)自己的“rpm”包管理系統(tǒng)。

    很快一個(gè)新的問題難倒了GNU/Linux制作者,他們需要一個(gè)快速、實(shí)用、高效的方法來安裝軟件包,當(dāng)軟件包更新時(shí),這個(gè)工具應(yīng)該能自動(dòng)管理關(guān)聯(lián)文件和維護(hù)已有配置文件,再次,Debian率先解決了這個(gè)難題,APT(Advanced Packaging Tool)誕生了。APT后來還被Conectiva改造用來管理rpm,并被其它Linux發(fā)行版本采用為它們的軟件包管理工具。

    本文檔不打算講解apt-rpm相關(guān)知識(shí),因?yàn)镃onectiva port of APT已很有名了,不過提供有關(guān)這部分的補(bǔ)充文檔還是歡迎的。

    本文檔是基于Debian下一個(gè)發(fā)行版的,長官。


    Debian APT HOWTO 第二章 基礎(chǔ)設(shè)置
    APT HOWTO
    第二章 基礎(chǔ)設(shè)置

    2.1 /etc/apt/sources.list文件
    =============================
    作為操作的一部分,APT使用一個(gè)文件列出可獲得軟件包的鏡像站點(diǎn)地址,這個(gè)文件就是/etc/apt/sources.list。

    文件中的各項(xiàng)信息通常按如下格式列出:

    deb http://site.http.org/debian distribution section1 section2 section3
    deb-src http://site.http.org/debian distribution section1 section2 section3

    當(dāng)然,上面所列的地址項(xiàng)都是假設(shè)的不可用的。每行的第一個(gè)單詞deb或deb-src,描述了文件類型,目錄中包含的是二進(jìn)制軟件包(deb),即 我們通常使用的已編譯好的軟件包;或包含的是源碼包(deb-src),源碼包包含源程序編碼、Debian管理文件(.dsc)和“Debian化”該 程序所做更改的記錄文件diff.gz。

    通常可以看出如下Debian默認(rèn)的sources.list:

    # See sources.list(5) for more information, especialy
    # Remember that you can only use http, ftp or file URIs
    # CDROMs are managed through the apt-cdrom tool.
    deb http://http.us.debian.org/debian stable main contrib non-free
    deb http://non-us.debian.org/debian-non-US stable/non-US main contrib non-free
    deb http://security.debian.org stable/updates main contrib non-free

    # Uncomment if you want the apt-get source function to work
    #deb-src http://http.us.debian.org/debian stable main contrib non-free
    #deb-src http://non-us.debian.org/debian-non-US stable non-US

    這些是Debian基本安裝所需的軟件包來源地址,第一個(gè)deb行指向官方正式軟件包來源,第二個(gè)deb行指向non-US軟件包來源,第三deb行指向Debian安全補(bǔ)丁更新包來源。

    最后兩行被注釋掉了(在句首加#),所以apt-get將忽略它們。這些是deb-src行指向Debian源碼包來源,如果你常下載程序源碼來測試或重編譯,可取消對它們的注釋。

    /etc/apt/sources.list文件可包含多種類型的地址,APT知道如何處理這些不同的地址類型:http,ftp,file(本地文件,例如:一個(gè)加載了ISO9600文件系統(tǒng)的目錄)和ssh。

    別忘了在修改完/etc/apt/sources.list文件后運(yùn)行apt-get使更改生效。你必須完成這個(gè)步驟,以便讓APT從你指定的地方獲得新的軟件包列表。

    2.2 如何在本地使用APT
    =====================
    有時(shí)你硬盤上有許多軟件包,你會(huì)希望通過APT來安裝它們,以便讓它去處理軟件包間復(fù)雜的依賴關(guān)系。

    想這么做,就建一個(gè)目錄,將所有你想要安裝的.deb文件放入其中。例如:

    mkdir /root/debs

    你可以使用一個(gè)重載文件(override file)直接去修改軟件包中管理文件中的定義(definitions),使之符合你的軟件儲(chǔ)藏庫管理規(guī)則,在這個(gè)重載文件中,你可能希望定義一些選項(xiàng)來重載那些軟件包的定義,如下所示:

    package priority section

    package是軟件包的名稱,priority有三個(gè)級別low,medium或high,section是軟件包所屬的section,重載文 件可任意命名,文件名將在接下來的步驟中做為參數(shù)傳遞給dpkg-scanpackages。如果你不想寫重載文件,只需在調(diào)用dpkg- scanpackages時(shí)使用/dev/null就行了。

    仍是在/root目錄下執(zhí)行:

    dpkg-scanpackages debs file | gzip > debs/Packages.gz

    在上述的命令行中,file為重載文件,命令生成一個(gè)Packages.gz文件,它包含了APT所需的各種軟件包信息,要使用這些軟件包,在sources.list中加上:

    deb file:/root debs/

    完成了上面的工作,就可以通常那樣使用APT命令操作這些軟件包了。你可以使用同樣的方法生成一個(gè)源碼庫,但請記住你需要將. orig.tar.gz文件、.dsc文件和.diff.gz文件包含在目錄中,要生成Source.gz文件而不是Packages.gz文件。所使用 的命令也不相同,要使用dpkg-scansources,命令如下所示:

    dpkg-scansources debs | gzip > debs/Sources.gz

    注意dpkg-scansource不需要重載文件,在sources.list中的引用法是:

    deb-src file:/root debs/

    2.3 選擇最佳鏡像發(fā)布站點(diǎn)加入source.list文件:netselect,netselect-apt
    =====================================================================
    一個(gè)新用戶經(jīng)常問到的問題:“該將哪個(gè)Debian鏡像發(fā)布站點(diǎn)加入source.list文件?”。有很多方法來選擇鏡像發(fā)布站點(diǎn),專家們可能會(huì)寫一個(gè)腳本去測試不同站點(diǎn)的ping time,不過有一個(gè)現(xiàn)成的程序可以幫你:netselect。

    安裝netselect

    apt-get install netselect

    不帶參數(shù)運(yùn)行它時(shí)會(huì)顯示它的幫助信息。運(yùn)行它時(shí)加上以空格分隔的鏡像主機(jī)列表,它會(huì)返回一個(gè)分值和列表中的一個(gè)主機(jī)名。這個(gè)分值通過評估ping time和hops number(一個(gè)網(wǎng)絡(luò)請求報(bào)文到達(dá)目標(biāo)主機(jī)所經(jīng)過的轉(zhuǎn)發(fā)主機(jī)的個(gè)數(shù))得出,它與鏡像站點(diǎn)預(yù)計(jì)下載速度成反比(數(shù)值越小越好)。返回的主機(jī)名是主機(jī)列表中得分最低的那個(gè)(查看列表中所以主機(jī)的得分情況可使用-vv選項(xiàng))。看出下的例子:

    bash$ netselect ftp.debian.org http.us.debian.org ftp.at.debian.org download.unesp.br ftp.debian.org.br
    365 ftp.debian.org.br
    bash$

    它表示,在netselect后列出的所有主機(jī)中,ftp.debian.org.br是下載速度最快的主機(jī),其得分為365。(注意!!這是在我電腦上的測試結(jié)果,不同的網(wǎng)絡(luò)節(jié)點(diǎn)網(wǎng)速會(huì)大不相同,所以這個(gè)分值不一定適用于其它電腦)

    現(xiàn)在將netselect找到的連接速度最快的鏡像站點(diǎn)加入/etc/apt/sources.list文件(see The /etc/apt/sources.list file, Section 2.1)and follow the tips in Managing packages, Chapter 3.

    注意:鏡像站點(diǎn)列表通常包含在文件http://www.debian.org/mirror/mirrors_full。

    從0.3版開始,netselect軟件包包含了netselect-apt腳本,它使上述操作自動(dòng)完成。只需將發(fā)布目錄樹做為參數(shù)(默認(rèn)為 stable)輸入,sources.list文件就會(huì)生成速度最快的main和non-US鏡像站點(diǎn)列表,并保存在當(dāng)前目錄下。下面的例子生成一個(gè)包含 stable發(fā)布鏡像站點(diǎn)列表的sources.list

    bash$ ls sources.list
    ls: sources.list: File or directory not found
    bash$ netselect-apt stable
    (...)
    bash$ ls -l sources.list
    sources.list
    bash$

    記住:sources.list生成在當(dāng)前目錄下,必須將其移至/etc/apt目錄。

    Then, follow the tips in Managing packages, Chapter 3.

    2.4 將CD-ROM加入source.list文件
    ===============================
    如果你用APT從CD-ROM上安裝及升級軟件包,你可以將它加入到sources.list文件中。完成該操作,可使用apt-cdrom程序:

    apt-cdrom add

    將Debian光盤放入光驅(qū),它將加載光盤目錄,并在光盤上查找軟件包信息。如果你的光驅(qū)需要額外設(shè)置,可使用以下選項(xiàng):

    -h - program help
    -d directory - CD-ROM mount point
    -r - Rename a recognized CD-ROM
    -m - No mounting
    -f - Fast mode, don't check package files
    -a - Thorough scan mode

    例如:

    apt-cdrom -d /home/kov/mycdrom add

    你還可以掃描一張光盤,但不將其加入列表:

    apt-cdrom ident

    注意,只有當(dāng)你在系統(tǒng)的/etc/fstab中正確設(shè)置了光驅(qū)后,該程序才會(huì)工作。


    Debian APT HOWTO 第三章 軟件包管理
    APT HOWTO
    第三章 軟件包管理

    3.1 更新可用軟件包列表
    ======================
    軟件包管理系統(tǒng)使用一個(gè)私有數(shù)據(jù)庫跟蹤列表中軟件包的當(dāng)前狀態(tài):已安裝、未安裝或可安裝。apt-get通過該數(shù)據(jù)庫來確定如何安裝用戶想用的軟件包以及正常運(yùn)行軟件包所必須的其它關(guān)聯(lián)包。

    你可以使用apt-get update來更新數(shù)據(jù)庫列表。這個(gè)命令將掃描/etc/apt/sources.list文件中所指路徑中的軟件包列表文件。有關(guān)該列表文件的更多信息請查閱 第二章 /etc/apt/source.list文件。

    定時(shí)運(yùn)行這個(gè)程序是個(gè)好主意,它將使你和你的系統(tǒng)獲得最新的軟件包更新和安全更新等信息。

    3.2 安裝軟件包
    ==============
    現(xiàn)在,終于到了你一直期待的階段!準(zhǔn)備好了sources.list和最新版的的可用軟件包,你所需做的就是運(yùn)行apt-get來安裝你渴望已久的軟件了。例如,你可以這樣:

    apt-get install xchat

    APT會(huì)掃描它的數(shù)據(jù)庫找到最新的版本的軟件包,并將它從sources.list中所指的地方下載到本地。如果該軟件包需要其它軟件包才能正常運(yùn)行——如本例一樣——APT會(huì)做關(guān)聯(lián)性檢查并自動(dòng)安裝所關(guān)聯(lián)軟件包。如下所示:

    [root]@[/] # apt-get install nautilus
    Reading Package Lists... Done
    Building Dependency Tree... Done
    The following extra packages will be installed:
    bonobo libmedusa0 libnautilus0
    The following NEW packages will be installed:
    bonobo libmedusa0 libnautilus0 nautilus
    0 packages upgraded, 4 newly installed, 0 to remove and 1 not upgraded.
    Need to get 8329kB of archives. After unpacking 17.2MB will be used.
    Do you want to continue? [Y/n]

    nautilus軟件包需要引用共享函數(shù)庫,因此APT會(huì)從鏡像源處下載相關(guān)共享函數(shù)庫,如果你在apt-get命令行中手動(dòng)指定了這些共享函數(shù)庫的名稱,APT會(huì)默認(rèn)為你要安裝所有這些軟件包。

    也就是說APT只會(huì)在安裝那些沒有在命令行中指定的軟件包時(shí)提示你進(jìn)行確認(rèn)。

    下列apt-get選項(xiàng)也許對你有用

    -h This help text.
    -d Download only - do NOT install or unpack archives
    -f Attempt to continue if the integrity check fails
    -s No-act. Perform ordering simulation
    -y Assume Yes to all queries and do not prompt
    -u Show a list of upgraded packages as well

    可以用一條命令安裝多個(gè)軟件包。包文件從網(wǎng)絡(luò)上下載到本地/var/cache/apt/archives目錄,稍后再安裝。

    你可以用同樣的命令行刪除指定軟件包,只需在軟件包名稱后緊跟一個(gè)“-”,如下所示:

    [root]@[/] # apt-get install nautilus gnome-panel-
    Reading Package Lists... Done
    Building Dependency Tree... Done
    The following extra packages will be installed:
    bonobo libmedusa0 libnautilus0
    The following packages will be REMOVED:
    gnome-applets gnome-panel gnome-panel-data gnome-session
    The following NEW packages will be installed:
    bonobo libmedusa0 libnautilus0 nautilus
    0 packages upgraded, 4 newly installed, 4 to remove and 1 not upgraded.
    Need to get 8329kB of archives. After unpacking 2594kB will be used.
    Do you want to continue? [Y/n]

    有關(guān)刪除軟件包的更多詳細(xì)信息,參閱 3.3 移除軟件包。

    假如你不小心損壞了已安裝的軟件包而想修復(fù)它,或者僅僅想安裝軟件包中某些文件的最新版本,這是可以做到的,你可以用--reinstall選項(xiàng):

    [root]@[/] # apt-get --reinstall install gdm
    Reading Package Lists... Done
    Building Dependency Tree... Done
    0 packages upgraded, 0 newly installed, 1 reinstalled, 0 to remove and 1 not upgraded.
    Need to get 0B/182kB of archives. After unpacking 0B will be used.
    Do you want to continue? [Y/n]

    本文檔寫作時(shí)所參考的APT版本為0.5.3,這個(gè)版本還屬于“unstable”(sid)階段。如是你安裝了這個(gè)版本,你可以在系統(tǒng)配置中使用新增的功能:你可以用apt-get install package/distribution來安裝指定發(fā)布版中的軟件包,或者用apt-get install package=version,如下所示:

    apt-get install nautilus/unstable

    它將為你安裝“unstable”發(fā)布版中的nautilus軟件包,即使你當(dāng)前運(yùn)行的是“stable”版本。命令中“distribution”選項(xiàng)的可用參數(shù)值為:stable,testing,unstable。

    在處理關(guān)聯(lián)問題時(shí),你可能更樂意使用-t開關(guān)來選擇目標(biāo)發(fā)布版,讓apt-get幫你考慮使用哪個(gè)發(fā)布版。

    重要信息:最新版的Debian軟件包首先會(huì)上傳到“unstable”發(fā)布版中,這個(gè)發(fā)布版包含了軟件包所有更改階段,無論是小修小補(bǔ)還是影響到眾多軟件包乃至整個(gè)系統(tǒng)的重大修改。所以,新手和那些強(qiáng)調(diào)系統(tǒng)穩(wěn)定性的用戶不會(huì)使用這個(gè)發(fā)布版。

    “testing”發(fā)布版比起“unstable”發(fā)布版,多注重了些系統(tǒng)穩(wěn)定性,但正式運(yùn)行的系統(tǒng)應(yīng)當(dāng)使用“stable”發(fā)布版。

    3.3 移除軟件包
    ==============
    如果你不再使用某些軟件包,你可以用APT將其從系統(tǒng)中刪除。要?jiǎng)h除軟件包只需輸入:apt-get remove package。如下所示:

    [root]@[/] # apt-get remove gnome-panel
    Reading Package Lists... Done
    Building Dependency Tree... Done
    The following packages will be REMOVED:
    gnome-applets gnome-panel gnome-panel-data gnome-session
    0 packages upgraded, 0 newly installed, 4 to remove and 1 not upgraded.
    Need to get 0B of archives. After unpacking 14.6MB will be freed.
    Do you want to continue? [Y/n]

    由上例可知,APT會(huì)關(guān)注那些與被刪除的軟件包有依賴關(guān)系的軟件包。使用APT刪除一個(gè)軟件包將會(huì)連帶刪除那些與該軟件包有依賴關(guān)系的軟件包。

    上例中運(yùn)行apt-get會(huì)刪除指定軟件包以及與之有依賴關(guān)系的軟件包,但它們的配置文件,如果有的話,會(huì)完好無損地保留在系統(tǒng)里。如果想徹底刪除這些包及其配置文件,運(yùn)行:

    [root]@[/] # apt-get --purge remove gnome-panel
    Reading Package Lists... Done
    Building Dependency Tree... Done
    The following packages will be REMOVED:
    gnome-applets* gnome-panel* gnome-panel-data* gnome-session*
    0 packages upgraded, 0 newly installed, 4 to remove and 1 not upgraded.
    Need to get 0B of archives. After unpacking 14.6MB will be freed.
    Do you want to continue? [Y/n]

    注意:軟件包名字后面的*表示該軟件包所有的配置文件也將被刪除。

    就象安裝軟件時(shí)一樣,你可以在刪除命令中用一個(gè)符號來指定安裝某個(gè)軟件包。在刪除軟件包時(shí),如果你在軟件包名字后面緊跟一個(gè)“+”,那么該軟件包就會(huì)被安裝而不是刪除。

    [root]@[/] # apt-get --purge remove gnome-panel nautilus+
    Reading Package Lists... Done
    Building Dependency Tree... Done
    The following extra packages will be installed:
    bonobo libmedusa0 libnautilus0 nautilus
    The following packages will be REMOVED:
    gnome-applets* gnome-panel* gnome-panel-data* gnome-session*
    The following NEW packages will be installed:
    bonobo libmedusa0 libnautilus0 nautilus
    0 packages upgraded, 4 newly installed, 4 to remove and 1 not upgraded.
    Need to get 8329kB of archives. After unpacking 2594kB will be used.
    Do you want to continue? [Y/n]

    注意,apt-get列出了那些將要被安裝的關(guān)聯(lián)軟件包(即保證該軟件包正常運(yùn)行的其它軟件包)和將要被刪除關(guān)聯(lián)軟件包,然后,再次列出了將要被安裝的軟件包。

    3.4 更新軟件包
    ==============
    軟件包更新是APT最成功的特點(diǎn)。只需一條命令即可完成更新:apt-get upgrade。你可以使用這條命令從相同版本號的發(fā)布版中更新軟件包,也可以從新版本號的發(fā)布版中更新軟件包,盡管實(shí)現(xiàn)后一種更新的首選命令為apt-get dist-upgrade;實(shí)情參閱 3.5升級到新版本。

    在運(yùn)行該命令時(shí)加上-u選項(xiàng)很有用。這個(gè)選項(xiàng)讓APT顯示完整的可更新軟件包列表。不加這個(gè)選項(xiàng),你就只能盲目地更新。APT會(huì)下載每個(gè)軟件包的最新更新版本,然后以合理的次序安裝它們。注意在運(yùn)行該命令前應(yīng)先運(yùn)行apt-get update更新數(shù)據(jù)庫。有關(guān)詳情參閱 3.1更新可用軟件包列表。看看這個(gè)例子:

    [root]@[/] # apt-get -u upgrade
    Reading Package Lists... Done
    Building Dependency Tree... Done
    The following packages have been kept back
    cpp gcc lilo
    The following packages will be upgraded
    adduser ae apt autoconf debhelper dpkg-dev esound esound-common ftp indent
    ipchains isapnptools libaudiofile-dev libaudiofile0 libesd0 libesd0-dev
    libgtk1.2 libgtk1.2-dev liblockfile1 libnewt0 liborbit-dev liborbit0
    libstdc++2.10-glibc2.2 libtiff3g libtiff3g-dev modconf orbit procps psmisc
    29 packages upgraded, 0 newly installed, 0 to remove and 3 not upgraded.
    Need to get 5055B/5055kB of archives. After unpacking 1161kB will be used.
    Do you want to continue? [Y/n]

    整個(gè)更新過程非常簡單。注意在本例中頭幾行,apt-get報(bào)告有些軟件包的更新被阻止(kept back),這表明這些軟件包的更新版本因故無法安裝,可能的原因有關(guān)聯(lián)不同步(當(dāng)前沒有供下載的新版本關(guān)聯(lián)包)或關(guān)聯(lián)擴(kuò)展(需要安裝新的關(guān)聯(lián)包以配合新版軟件包)。

    對于第一種原因沒有很好的解決方法,對于第二次原因,運(yùn)行apt-get intall安裝所需的新關(guān)聯(lián)包就可以。另一個(gè)更好的解決方法就是使用dist-upgrade。詳情參閱 3.5升級到新版本。

    3.5 升級到新版本
    ================
    APT的絕活就是讓你一次就完成整個(gè)系統(tǒng)的更新,不論是通過Internet還是通過光盤文件(購買的碟片或下載的ISO鏡像文件)。

    它也可以用來更新尋些改變了關(guān)聯(lián)關(guān)系的軟件包。即如前所述的那些使用apt-get upgrade時(shí)被阻止更新(kept back)的軟件包。

    例如,假設(shè)你目前使用的Debian為stable revision 0(如woody 3.0 r0,譯者注),而你購買了revision 3的新版Debian(如woody 3.0 r3,譯者注),你可以使用APT從新光盤上升級你的系統(tǒng)。使用apt-cdrom(參閱 2.4將CD-ROM加入source.list文件)將光盤加載到/etc/apt/sources.list中,然后運(yùn)行apt-get dist-upgrade。

    請注意,APT總是搜索最新版本的軟件包,因此,如果一個(gè)軟件包在你的/etc/apt/sources.list中所列的版本比光盤上所列的版本要新,那么APT會(huì)按照sources.list文件所指的地址下載這個(gè)軟件包而不是使用光盤上的軟件包。

    在 3.4更新軟件包 中我們舉了個(gè)例子,我們看到有些包被阻止更新(kept back),現(xiàn)在我們就用dist-upgrade方法來解決這個(gè)問題:

    [root]@[/] # apt-get -u dist-upgrade
    Reading Package Lists... Done
    Building Dependency Tree... Done
    Calculating Upgrade... Done
    The following NEW packages will be installed:
    cpp-2.95 cron exim gcc-2.95 libident libopenldap-runtime libopenldap1
    libpcre2 logrotate mailx
    The following packages have been kept back
    lilo
    The following packages will be upgraded
    adduser ae apt autoconf cpp debhelper dpkg-dev esound esound-common ftp gcc
    indent ipchains isapnptools libaudiofile-dev libaudiofile0 libesd0
    libesd0-dev libgtk1.2 libgtk1.2-dev liblockfile1 libnewt0 liborbit-dev
    liborbit0 libstdc++2.10-glibc2.2 libtiff3g libtiff3g-dev modconf orbit
    procps psmisc
    31 packages upgraded, 10 newly installed, 0 to remove and 1 not upgraded.
    Need to get 0B/7098kB of archives. After unpacking 3118kB will be used.
    Do you want to continue? [Y/n]

    注意現(xiàn)在那些軟件包將會(huì)被更新,那些新的關(guān)聯(lián)軟件包也會(huì)被安裝。但是lilo仍被阻止更新,可能還存在一些比建立新關(guān)聯(lián)更棘手的問題,我們通過如下方法確定問題所在:

    [root]@[/] # apt-get -u install lilo
    Reading Package Lists... Done
    Building Dependency Tree... Done
    The following extra packages will be installed:
    cron debconf exim libident libopenldap-runtime libopenldap1 libpcre2
    logrotate mailx
    The following packages will be REMOVED:
    debconf-tiny
    The following NEW packages will be installed:
    cron debconf exim libident libopenldap-runtime libopenldap1 libpcre2
    logrotate mailx
    The following packages will be upgraded
    lilo
    1 packages upgraded, 9 newly installed, 1 to remove and 31 not upgraded.
    Need to get 225kB/1179kB of archives. After unpacking 2659kB will be used.
    Do you want to continue? [Y/n]

    查看上述提示信息可知,lilo與debconf-tiny包產(chǎn)生了一個(gè)新沖突,這表明除非刪除debconf-tiny,否則將無法更新lilo。

    想知道該保留或刪除哪些軟件包,你可以使用:

    # apt-get -o Debug::pkgProblemResolver=yes dist-upgrade
    Reading Package Lists... Done
    Building Dependency Tree... Done
    Calculating Upgrade... Starting
    Starting 2
    Investigating python1.5
    Package python1.5 has broken dep on python1.5-base
    Considering python1.5-base 0 as a solution to python1.5 0
    Holding Back python1.5 rather than change python1.5-base
    Investigating python1.5-dev
    Package python1.5-dev has broken dep on python1.5
    Considering python1.5 0 as a solution to python1.5-dev 0
    Holding Back python1.5-dev rather than change python1.5
    Try to Re-Instate python1.5-dev
    Done
    Done
    The following packages have been kept back
    gs python1.5-dev
    0 packages upgraded, 0 newly installed, 0 to remove and 2 not upgraded.

    現(xiàn)在,你很容易就知道不能安裝python1.5-dev軟件包是因?yàn)闊o法滿足另一個(gè)軟件包python1.5的關(guān)聯(lián)要求。

    3.6 移除無用軟件包文件:apt-get clean and autoclean
    ===================================================
    當(dāng)你需要安裝某個(gè)軟件包時(shí),APT從/etc/apt/sources.list中所列的主機(jī)下載所需的文件,將它們保存到本機(jī)軟件庫(/var/cache/apt/archives/),然后開始安裝,參閱 3.2 安裝軟件包。

    本地軟件庫會(huì)不斷膨脹占用大量硬盤空間,幸運(yùn)的是,APT提供了工具來管理本地軟件庫:apt-get的clean方法和autoclean方法。

    apt-get clean將刪除/var/cache/apt/archives目錄和/var/cache/apt/archives/partial目錄下的所有文件,除了被鎖定的文件。這樣以來,當(dāng)你需要再次安裝某個(gè)軟件包時(shí),APT將重新下載它。

    apt-get autoclean僅刪除那些不需要再次下載的文件。

    下面這個(gè)例子顯示了apt-get autoclean如何工作:

    # ls /var/cache/apt/archives/logrotate* /var/cache/apt/archives/gpm*
    logrotate_3.5.9-7_i386.deb
    logrotate_3.5.9-8_i386.deb
    gpm_1.19.6-11_i386.deb

    在/var/cache/apt/archives目錄下有兩個(gè)不同版本的logrotate軟件包文件以及一個(gè)gpm軟件包文件。

    # apt-show-versions -p logrotate
    logrotate/stable uptodate 3.5.9-8
    # apt-show-versions -p gpm
    gpm/stable upgradeable from 1.19.6-11 to 1.19.6-12

    apt-show-versions顯示logrotate_3.5.9-8_i386.deb提供了logrotate的升級版本,所以 logrotate_3.5.9-7_i386.deb沒用了。同樣gpm_1.19.6-11_i386.deb也沒有用了,因?yàn)榭梢韵螺d該軟件包的更 新版本。

    # apt-get autoclean
    Reading Package Lists... Done
    Building Dependency Tree... Done
    Del gpm 1.19.6-11 [145kB]
    Del logrotate 3.5.9-7 [26.5kB]

    總之,apt-get autoclean僅刪除那些過時(shí)的文件。參閱 3.9如何從Debian的專用版本下升級軟件包 獲得更多apt-show-versions相關(guān)信息。

    3.7 在dselect中操作APT
    ======================
    dselect工具幫助用戶選取想要安裝的Debian軟件包。它有點(diǎn)復(fù)雜甚至令人望而生厭,但經(jīng)過實(shí)踐你就能掌握它恐怖的終端界面。

    dselect高級功能之一就是它知道利用Debian軟件包的“推薦”和“建議”能力。(Debian軟件包有一種能力:推薦或建議系統(tǒng)在安裝自 己的同時(shí),安裝別的軟件包以配合自身的工作,當(dāng)然這些推薦的軟件包不一定是必須的;而dselect工具可以識(shí)別和利用這個(gè)能力,使用dselect時(shí)你 就能體會(huì)到。譯者注)以root身份運(yùn)行dselect,進(jìn)入程序后選擇apt作為連接方式(access)。該步驟不是必須的,但如果你沒有光驅(qū)而且想 通過Internet下載安裝軟件包,這是使用dselect的最好方法。

    想深入學(xué)習(xí)dselect的用法,請到Debian網(wǎng)站查閱dselect文檔頁面
    http://www.debian.org/doc/ddp

    在dselect中選好了軟件包后,運(yùn)行:

    apt-get -u dselect-upgrade

    如下例所示:

    [root]@[/] # apt-get -u dselect-upgrade
    Reading Package Lists... Done
    Building Dependency Tree... Done
    The following packages will be REMOVED:
    lbxproxy
    The following NEW packages will be installed:
    bonobo console-tools-libs cpp-3.0 enscript expat fingerd gcc-3.0
    gcc-3.0-base icepref klogd libdigest-md5-perl libfnlib0 libft-perl
    libgc5-dev libgcc300 libhtml-clean-perl libltdl0-dev libsasl-modules
    libstdc++3.0 metamail nethack proftpd-doc psfontmgr python-newt talk tidy
    util-linux-locales vacation xbill xplanet-images
    The following packages will be upgraded
    debian-policy
    1 packages upgraded, 30 newly installed, 1 to remove and 0 not upgraded.
    Need to get 7140kB of archives. After unpacking 16.3MB will be used.
    Do you want to continue? [Y/n]

    比較一下我們在相同系統(tǒng)上運(yùn)行apt-get dist-upgrade時(shí)的情形:

    [root]@[/] # apt-get -u dist-upgrade
    Reading Package Lists... Done
    Building Dependency Tree... Done
    Calculating Upgrade... Done
    The following packages will be upgraded
    debian-policy
    1 packages upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
    Need to get 421kB of archives. After unpacking 25.6kB will be freed.
    Do you want to continue? [Y/n]

    我們看到在前例中許多軟件包被安裝是其它軟件包“推薦”或“建議”的結(jié)果。另外一些軟件包被安裝或刪除(例如lbxproxy軟件包)是我們通過dselect工具作出的決定。由此可見dselect與APT結(jié)合起來將是一個(gè)功能強(qiáng)大的工具。

    3.8 如何構(gòu)建一個(gè)混合系統(tǒng)
    ========================
    人們常使用testing發(fā)布版,因?yàn)樗萿nstable要穩(wěn)定同時(shí)又比stable時(shí)髦。然而對于那些想運(yùn)行某些軟件包的最新版本,又不希望 將整個(gè)系統(tǒng)遷移到unstable發(fā)布版的還有一種選擇:運(yùn)行一個(gè)testing/unstable混合系統(tǒng)。對另一部分保守的用戶而言,他們可能希望運(yùn) 行stable/testing混合系統(tǒng)。

    要實(shí)現(xiàn)混合系統(tǒng),請?jiān)?etc/apt/apt.conf中加入下面的語句:

    APT::Default-Release "testing";

    以后,在從unstable發(fā)布版安裝軟件包時(shí),使用-t開關(guān):

    # apt-get -t unstable install packagename

    別忘了,使用Debian的某個(gè)發(fā)布版的軟件包時(shí),要將鏡像源加入到/etc/apt/sources.list文件中。在這個(gè)例子中,除了加入testing發(fā)布版鏡像源處,我們還需要加入unstable發(fā)布版鏡像源。

    3.9 如何從Debian的專用版本下升級軟件包
    ======================================
    apt-show-versions提供了一個(gè)安全的途徑,讓那些使用混合系統(tǒng)的用戶放心升級他們的系統(tǒng),不必?fù)?dān)心升級會(huì)將原來屬于stable的包升級成了unstable包。例如,這條命令將只升級你的unstable軟件包:

    # apt-get install `apt-show-versions -u -b | grep unstable`

    3.10 如何維護(hù)已安裝軟件包的多個(gè)版本(復(fù)雜)
    ==========================================
    你可能會(huì)遇到這種情況,更改了某個(gè)軟件包中的一些文件,但你沒有時(shí)間或根本就不想將這些更改引入到新版本中。或者,你將系統(tǒng)升級到3.0,但仍想繼續(xù)使用Debian 2.2下的某個(gè)軟件包。你可以“釘住”(pin)這個(gè)版本,這樣它就不會(huì)被更新了。

    操作起來十分簡單,你只需編輯/etc/apt/preferences文件。

    文件格式很簡單:

    Package: <package>
    Pin: <pin definition>
    Priority: <pin's priority>

    例如,我對sylpheed軟件包做了某些修改,其版本為0.4.99,我想保留這些修改不被更新,可加上:

    Package: sylpheed
    Pin: version 0.4.99*

    注意我用了一個(gè) *(星號)。這是一個(gè)“通配符”;它表明我希望“釘住”所有以0.4.99打頭的版本(以防它們被下載并安裝到我機(jī)器上。pin控制的是服務(wù)器端的更新軟 件包而非本地的已安裝軟件包。譯者注)。因?yàn)镈ebian使用“Debian版本號”為其軟件包定版本,我不想進(jìn)行所有這些版本的升級,如果不用通配符, 那么0.4.99-1版或0.4.99-10版只要一出爐系統(tǒng)就會(huì)安裝它們。如果你修改了軟件包,你一定不希望這么做。

    Priority是可選域;如果沒有特別指定,它的默認(rèn)值為989。

    讓我們來看看pin如何體現(xiàn)優(yōu)先級(priorty)區(qū)別。一個(gè)低于0的優(yōu)先級表示:該軟件包被禁止安裝;優(yōu)先級在0到100之間表示:軟件包沒有 安裝并且當(dāng)前也沒有可用版本,這些軟件包不會(huì)出現(xiàn)在供選擇版本列表中;優(yōu)先級為100表示軟件包已被安裝——對于這個(gè)已安裝的軟件包,如果有一個(gè)不同的版 本要替換它,那么替換者的優(yōu)先級必須大于100。

    優(yōu)先級在100以上表示軟件包應(yīng)該被安裝。典型的例子如,某個(gè)軟件包的升級補(bǔ)丁包,任何處于100和1000(包括1000)之間的優(yōu)先級都表示上 述情形。但是,一個(gè)軟件包如果被定為這樣的優(yōu)先級,它并不會(huì)降級已安裝的版本。例如,如果我安裝了sylpheed 0.5.3并為sylpheed 0.4.99指定了一個(gè)優(yōu)先級為999的pin,那么由于要滿足pin的優(yōu)先級,所以0.4.99軟件包不會(huì)被安裝。如果要實(shí)現(xiàn)軟件包“降級”,則需要將 pin的優(yōu)先級定為大于1000。(100<優(yōu)先級<=1000時(shí),如果存在升級包就對本機(jī)相關(guān)包升級,如果本機(jī)軟件包比更新包還新就保持不 變;優(yōu)先級>1000時(shí),服務(wù)器端軟件包不論比本機(jī)的軟件包新還是舊,均對本機(jī)相關(guān)軟件包進(jìn)行更新。譯者注)

    pin可以被用來控制軟件包的修訂版本(version)、發(fā)布版本(release)或版本來源(origin)。

    在前面我們已經(jīng)看到,釘住修訂版本時(shí)使用通配符來代替版本號數(shù)字,這樣可一次指定多個(gè)版本。

    release選項(xiàng)是基于發(fā)布版文件(Release file)的,這個(gè)文件在本地APT軟件庫中或安裝光盤上。如果你從本地軟件庫安裝軟件包而軟件庫中又沒有該文件,那么這個(gè)選項(xiàng)將失效。來看看 /var/lib/apt/lists/目錄中發(fā)布版文件的內(nèi)容,發(fā)布版包括這些參數(shù):a(archive),c(components),v (version),o(origin),l(lable)。

    來看一個(gè)例子:

    Package: *
    Pin: release v=2.2*,a=stable,c=main,o=Debian,l=Debian
    Priority: 1001

    在本例中,我們選擇了version為2.2*的Debian(它可以是2.2r2,2.2r3——這些版本包含了“point releases”即安全更新和其它非常生要的更新),stable軟件庫,main類軟件包(非contrib或non-free),版本來源和標(biāo)簽均 為Debian。版本來源(o=)說明誰制作了這個(gè)發(fā)布版文件,標(biāo)簽(l=)說明該發(fā)布版的名稱:Debian即是指Debian自己,Progeny即 是指后裔制作者,下面是一個(gè)發(fā)布版文件的樣例:

    $ cat /var/lib/apt/lists/ftp.debian.org.br_debian_dists_potato_main_binary-i386_Release
    Archive: stable
    Version: 2.2r3
    Component: main
    Origin: Debian
    Label: Debian
    Architecture: i386


    Debian APT HOWTO 第四章 幾個(gè)非常有用的工具
    APT HOWTO
    第四章 幾個(gè)非常有用的工具

    4.1 如何安裝本地編譯的軟件包:equivs
    ====================================
    有時(shí),用戶想使用某些軟件的特殊版本,它們只以源代碼的形式存在,沒有現(xiàn)成的Debian軟件包。軟件包管理系統(tǒng)在處理這類事務(wù)時(shí)可能會(huì)出問題。 假設(shè)你想編譯新版本的郵件服務(wù)器,編譯、安裝一切正常,然而,軟件包管理系統(tǒng)并不知道你在系統(tǒng)中安裝了自己編譯的東西,在Debian中許多基于MTA (Mail Transport Agent 郵件傳輸代理)的軟件包也不知道這些。

    現(xiàn)在是equivs登臺(tái)的時(shí)候了。用它來安裝軟件包,它所做的工作就是創(chuàng)建一個(gè)新的空軟件包來實(shí)現(xiàn)關(guān)聯(lián),讓軟件包管理系統(tǒng)相信關(guān)聯(lián)實(shí)現(xiàn)了。

    在我們開始以前,我必須提醒你,編譯某個(gè)軟件最安全的方法是對該軟件現(xiàn)有的Debian軟件包進(jìn)行修改后重新編譯,如果你并不知道你正在干什么,勸你不要使用equivs替換關(guān)聯(lián)包。更多信息請參閱 第六章 源碼包操作。

    繼續(xù)上面的例子,你安裝好了新編譯的postfix,接下來打算安裝mutt,突然你發(fā)現(xiàn)mutt想與另一個(gè)MTA建立關(guān)聯(lián),而你想讓它使用你剛安裝的新MTA。

    轉(zhuǎn)到某個(gè)目錄(例如/tmp)執(zhí)行:

    # equivs-control name

    將name替換為你創(chuàng)建的管理文件(control file),管理文件按如下格式創(chuàng)建:

    Section: misc
    Priority: optional
    Standards-Version: 3.0.1

    Package: <enter package name; defaults to equivs-dummy>
    Version: <enter version here; defaults to 1.0>
    Maintainer: <your name and email address; defaults to username>
    Pre-Depends: <packages>
    Depends: <packages>
    Recommends: <packages>
    Suggests: <package>
    Provides: <(virtual)package>
    Architecture: all
    Copyright: <copyright file; defaults to GPL2>
    Changelog: <changelog file; defaults to a generic changelog>
    Readme: <README.Debian file; defaults to a generic one>
    Extra-Files: <additional files for the doc directory, commaseperated>
    Description: <short description; defaults to some wise words>
    long description and info
    .
    second paragraph

    我們只需按自己的需要修改相關(guān)項(xiàng)目就行了。文件中每個(gè)項(xiàng)目都描述得很清楚,我們不必在此逐行解釋它們。現(xiàn)在開始修改吧:

    Section: misc
    Priority: optional
    Standards-Version: 3.0.1

    Package: mta-local
    Provides: mail-transport-agent

    行了,就是這樣。mutt要與mail-transport-agent關(guān)聯(lián),這是所有MTA共用的一個(gè)虛擬包(virtual package),我可以簡單地將這個(gè)軟件包命名為mail-transport-agent,不過我更愿意使用系統(tǒng)的虛擬包方案,使用Provides選項(xiàng)。

    現(xiàn)在你可以開始創(chuàng)建軟件包了:

    # equivs-build name
    dh_testdir
    touch build-stamp
    dh_testdir
    dh_testroot
    dh_clean -k
    # Add here commands to install the package into debian/tmp.
    touch install-stamp
    dh_testdir
    dh_testroot
    dh_installdocs
    dh_installchangelogs
    dh_compress
    dh_fixperms
    dh_installdeb
    dh_gencontrol
    dh_md5sums
    dh_builddeb
    dpkg-deb: building package `name' in `../name_1.0_all.deb'.

    The package has been created.
    Attention, the package has been created in the current directory,

    然后安裝這個(gè)新創(chuàng)建的.deb。

    眾所周知,equivs的用法很多,它甚至可以幫你為那些常用軟件的底層關(guān)聯(lián)包創(chuàng)建個(gè)性化版本。盡情發(fā)揮你的想像力吧,不過要小心。

    重要提示:管理文件(control files)的樣例文件在/usr/share/doc/equivs/examples目錄下。

    4.2 移除無用的locale files文件:localepurge
    ===========================================
    許多Debian用戶僅在固定地區(qū)使用Debian。例如,在巴西的Debian用戶,通常使用pt_BR地區(qū)配置文件(locale file)而不會(huì)關(guān)心es地區(qū)配置文件。

    對于這類用戶而言localepurge是一個(gè)非常有用的工具,你可以僅保留你當(dāng)前所用的地區(qū)配置文件,刪除其它無用的文件,從而釋放大量硬盤空間。運(yùn)行apt-get install localepurge就行了。

    它配置起來非常容易,debconf的提問將引導(dǎo)用戶一步一步完成設(shè)置。在回答第一個(gè)問題時(shí)請務(wù)必謹(jǐn)慎,如果回答錯(cuò)了,系統(tǒng)可能刪掉所有的地區(qū)配置文件,包括你正在使用的這個(gè)。復(fù)原它們的唯一方法就是重裝那些軟件包。

    4.3 如何知曉哪些軟件包可以升級
    ==============================
    apt-show-versions工具可以告訴你系統(tǒng)中哪些包可以更新以及其它一些有用的信息。-u選項(xiàng)可以顯示可更新軟件包列表:

    $ apt-show-versions -u
    libeel0/unstable upgradeable from 1.0.2-5 to 1.0.2-7
    libeel-data/unstable upgradeable from 1.0.2-5 to 1.0.2-7

    Debian APT HOWTO 第五章 獲取軟件包信息
    APT HOWTO
    第五章 獲取軟件包信息

    有些基于APT系統(tǒng)的前端程序,能十分方便地獲得系統(tǒng)軟件包列表,列表包括可安裝或已安裝的軟件包,還可以顯示某軟件包屬于哪個(gè)域(section),它的優(yōu)先級(priority)是多少,它的說明文檔,等等。

    但是...在此我們想的學(xué)習(xí)如何使用APT本身來完成。你如何找出你想要安裝的軟件包的名稱?

    我們完成這個(gè)任務(wù)的方法有很多。我們從apt-cache開始,APT系統(tǒng)使用這個(gè)程序來維護(hù)它的數(shù)據(jù)庫。下面我們通過一些實(shí)際操作來對它做個(gè)概覽。

    5.1 獲得軟件包名稱
    ==================
    假設(shè)你十分懷念玩Atari 2600的好日子,你決定用APT安裝一個(gè)Atari emulator,隨后再下載幾個(gè)游戲,你可以這樣:

    [root]@[/] # apt-cache search atari
    atari-fdisk-cross - Partition editor for Atari (running on non-Atari)
    circuslinux - The clowns are trying to pop balloons to score points!
    madbomber - A Kaboom! clone
    tcs - Character set translator.
    atari800 - Atari emulator for svgalib/X/curses
    stella - Atari 2600 Emulator for X windows
    xmess-x - X binaries for Multi-Emulator Super System

    我們找到了幾個(gè)相關(guān)的軟件包,以及有關(guān)的簡單描述。想進(jìn)一步獲得某個(gè)軟件包的詳細(xì)信息,你可以運(yùn)行:

    [root]@[/] # apt-cache show stella
    Package: stella
    Priority: extra
    Section: non-free/otherosfs
    Installed-Size: 830
    Maintainer: Tom Lear <tom@trap.mtview.ca.us>
    Architecture: i386
    Version: 1.1-2
    Depends: libc6 (>= 2.1), libstdc++2.10, xlib6g (>= 3.3.5-1)
    Filename: dists/potato/non-free/binary-i386/otherosfs/stella_1.1-2.deb
    Size: 483430
    MD5sum: 11b3e86a41a60fa1c4b334dd96c1d4b5
    Description: Atari 2600 Emulator for X windows
    Stella is a portable emulator of the old Atari 2600 video-game console
    written in C++. You can play most Atari 2600 games with it. The latest
    news, code and binaries for Stella can be found at:
    http://www4.ncsu.edu/~bwmott/2600

    屏幕上顯示出這個(gè)軟件包的詳細(xì)信息及其用途的完整描述。如果你的系統(tǒng)中已安裝了某個(gè)軟件包而系統(tǒng)又搜索到它的新版本,系統(tǒng)會(huì)將它們的詳細(xì)信息一并列出。如下例:

    [root]@[/] # apt-cache show lilo
    Package: lilo
    Priority: important
    Section: base
    Installed-Size: 271
    Maintainer: Russell Coker <russell@coker.com.au>
    Architecture: i386
    Version: 1:21.7-3
    Depends: libc6 (>= 2.2.1-2), debconf (>=0.2.26), logrotate
    Suggests: lilo-doc
    Conflicts: manpages (<<1.29-3)
    Filename: pool/main/l/lilo/lilo_21.7-3_i386.deb
    Size: 143052
    MD5sum: 63fe29b5317fe34ed8ec3ae955f8270e
    Description: LInux LOader - The Classic OS loader can load Linux and others
    This Package contains lilo (the installer) and boot-record-images to
    install Linux, OS/2, DOS and generic Boot Sectors of other OSes.
    .
    You can use Lilo to manage your Master Boot Record (with a simple text screen)
    or call Lilo from other Boot-Loaders to jump-start the Linux kernel.

    Package: lilo
    Status: install ok installed
    Priority: important
    Section: base
    Installed-Size: 190
    Maintainer: Vincent Renardias <vincent@debian.org>
    Version: 1:21.4.3-2
    Depends: libc6 (>= 2.1.2)
    Recommends: mbr
    Suggests: lilo-doc
    Description: LInux LOader - The Classic OS loader can load Linux and others
    This Package contains lilo (the installer) and boot-record-images to
    install Linux, OS/2, DOS and generic Boot Sectors of other OSes.
    .
    You can use Lilo to manage your Master Boot Record (with a simple text screen)
    or call Lilo from other Boot-Loaders to jump-start the Linux kernel.

    注意,首先列出的是可用軟件包,接著列出的是已安裝軟件包。獲取某個(gè)軟件包的常規(guī)信息可運(yùn)行:

    [root]@[/] # apt-cache showpkg penguin-command
    Package: penguin-command
    Versions:
    1.4.5-1(/var/lib/apt/lists/download.sourceforge.net_debian_dists_unstable_main_binary-i386_Packages)(/var/lib/dpkg/status)

    Reverse Depends:
    Dependencies:
    1.4.5-1 - libc6 (2 2.2.1-2) libpng2 (0 (null)) libsdl-mixer1.1 (2 1.1.0) libsdl1.1 (0 (null)) zlib1g (2 1:1.1.3)
    Provides:
    1.4.5-1 -
    Reverse Provides:

    如果僅想了解某軟件包的與哪些軟件包關(guān)聯(lián),可運(yùn)行:

    [root]@[/] # apt-cache depends penguin-command
    penguin-command
    Depends: libc6
    Depends: libpng2
    Depends: libsdl-mixer1.1
    Depends: libsdl1.1
    Depends: zlib1g

    總之,有一系列工具可幫助我們找到我們想要的軟件包。

    5.2 使用dpkg查找軟件包名稱
    ==========================
    另一個(gè)定位軟件包的方法是知道軟件包中某個(gè)關(guān)鍵文件的名稱。例如,你編譯時(shí)需要某個(gè)頭文件,查找提供該文件的軟件包,你可以運(yùn)行:

    [root]@[/] # dpkg -S stdio.h
    libc6-dev: /usr/include/stdio.h
    libc6-dev: /usr/include/bits/stdio.h
    perl: /usr/lib/perl/5.6.0/CORE/nostdio.h

    或者:

    [root]@[/] # dpkg -S /usr/include/stdio.h
    libc6-dev: /usr/include/stdio.h

    在清理硬盤空間時(shí),了解系統(tǒng)中已安裝軟件的軟件包名稱十分有用,你可以運(yùn)行:

    [root]@[/] # dpkg -l | grep mozilla
    ii mozilla-browse 0.9.6-7 Mozilla Web Browser

    這個(gè)命令的缺點(diǎn)是它會(huì)“截?cái)唷避浖拿帧T谏侠校浖娜Q是mozilla-browser,解決這個(gè)問題可以使用COLUMNS環(huán)境變量:

    [kov]@[couve] $ COLUMNS=132 dpkg -l | grep mozilla
    ii mozilla-browser 0.9.6-7 Mozilla Web Browser - core and browser

    或顯示成這樣:

    [root]@[/] # apt-cache search "Mozilla Web Browser"
    mozilla-browser - Mozilla Web Browser

    5.3 如何“按需”安裝軟件包
    ==========================
    你正在編譯某段程序,突然,停住了!一條錯(cuò)誤信息報(bào)告說你沒有它需要的頭文件。讓auto-apt來救你吧,它問你是否要安裝需要的軟件包,然后掛起編譯進(jìn)程,安裝好軟件包后再恢復(fù)編譯進(jìn)程。

    你所要做的僅僅是:

    auto-apt run command

    這里“command”指在運(yùn)行過程中可能出現(xiàn)“需求文件不存在”問題的命令。例如:

    auto-apt run ./configure

    一會(huì)兒,它就會(huì)告訴你要安裝所需的軟件包并自動(dòng)轉(zhuǎn)到apt-get處理。如果你正在運(yùn)行X,就會(huì)一個(gè)圖形界面提示窗口。

    為了提高效率auto-apt所用的數(shù)據(jù)庫需要實(shí)時(shí)更新。可調(diào)用auto-apt update,auto-apt updatedb和auto-apt update-local來完成更新。

    5.4 如何知道文件屬于哪個(gè)軟件包
    ==============================
    如果你想安裝某個(gè)軟件包,但用apt-cache查不出它的名稱,不過你知道這個(gè)程序的文件名,或這個(gè)軟件包中某些文件的文件名,那么你可以用apt-file來查找軟件包名稱。

    $ apt-file search filename

    它用起來很象dpkg -S,不過它還會(huì)列出包含該文件的已刪除軟件包。它也可以用來查找哪個(gè)軟件包包含編譯時(shí)所缺的文件,當(dāng)然,解決這類問題auto-apt可能是更好的方案,請參閱 5.3如何“按需”安裝軟件包。

    用這個(gè)命令,你可以列出軟件包的內(nèi)容:

    $ apt-file list packagename

    apt-file用一個(gè)數(shù)據(jù)庫來存放所有軟件包的內(nèi)容信息,和auto-apt一樣,這個(gè)數(shù)據(jù)庫也需要實(shí)時(shí)更新,完成更新可以運(yùn)行:

    # apt-file update

    默認(rèn)情況下,apt-file和auto-apt使用同一個(gè)數(shù)據(jù)庫,參閱 5.3如何“按需”安裝軟件包。

    5.5 如何掌握軟件包的變化情況
    ============================
    在每個(gè)軟件包被安裝以后,都會(huì)在文檔目錄(/usr/share/doc/packagename)生成一個(gè) changelog.Debian.gz的文件,這個(gè)文件記錄了該軟件包最后一次更新對系統(tǒng)做了哪些修改,你可以用zless閱讀這些信息。不過當(dāng)你對整 個(gè)系統(tǒng)進(jìn)行升級以后,逐個(gè)查看軟件包的更新信息可不是件容易事。

    有一個(gè)工具能幫你完成這項(xiàng)任務(wù),它就是apt-listchanges。首先你要裝上apt-listchanges軟件包。在安裝的過程中,Debconf會(huì)問你一些問題,按你的要求回答它們就行了。

    “Should apt-listchanges be automatically run by apt”(想讓apt自動(dòng)運(yùn)行apt-listchanges嗎?)這個(gè)選項(xiàng)非常有用,因?yàn)樵谀闶褂胊pt更新軟件包時(shí),它會(huì)告訴你此次軟件包更新將會(huì)對原有系統(tǒng)做出了哪些修改,你分析了這些信息以后再?zèng)Q定是否執(zhí)行此次更新。“Should apt-listchanges prompt for confirmation after displaying changes?”(顯示更新信息后,需要apt-listchanges等待你的確認(rèn)信息嗎?)選項(xiàng)也非常有用,因?yàn)樵谀汩喿x完更新信息后,它會(huì)詢問你是否繼續(xù)安裝進(jìn)程,如果你不想繼續(xù),apt-listchanges會(huì)返回一條錯(cuò)誤信息,告訴apt停止安裝進(jìn)程。

    安裝了apt-listchanges后,每當(dāng)apt下載軟件包時(shí)(不論來源是Internet、光盤或是硬盤)都會(huì)顯示這些軟件包的系統(tǒng)更新信息。

    Debian APT HOWTO 第六章 源碼包操作
    APT HOWTO
    第六章 源碼包操作

    6.1 下載源碼包
    ==============
    在自由軟件的世界里,經(jīng)常需要學(xué)習(xí)源碼或?yàn)槌绦虺e(cuò),所以你需要下載它們。APT提供了一套簡便的方法幫你獲得發(fā)布版中眾多程序的源代碼以及創(chuàng)建一個(gè).debs所需的所有文件。

    Debian源碼的另一個(gè)普遍用途是將unstable發(fā)布版的新版程序進(jìn)行改寫以供別的發(fā)布版使用,例如,從stable發(fā)布版外引入新的軟件包,需要重新生成.debs將它在原發(fā)布版中的關(guān)聯(lián)關(guān)系遷移到新的發(fā)布版。

    完成這些工作,/etc/apt/sources.list文件中deb-src所指引用鏡像源應(yīng)該是unstable,別忘了將行首的注釋符去掉。詳情參閱 2.1/etc/apt/sources.list文件。

    用下面的命令下載源碼包:

    apt-get source packagename

    通常會(huì)下載三個(gè)文件:a .orig.tar.gz, a .dsc and a .diff.gz。對于Debian專用的軟件包,最后一個(gè)文件不會(huì)下載,第一個(gè)文件的文件名中沒有“orig”項(xiàng)。

    dpkg-source讀取.dsc文件信息,將源碼包解包到packagename-version目錄,下載下來的源碼包中有一個(gè)debian/目錄,里面是創(chuàng)建.deb包所需的文件。

    想要下載的源碼包自動(dòng)編譯成軟件包,只需在命令行中加上-b,如下:

    apt-get -b source packagename

    如果你不打算立即創(chuàng)建.deb包,你可以運(yùn)行如下命令,以后再創(chuàng)建它。

    dpkg-buildpackage -rfakeroot -uc -b

    請?jiān)谙螺d包所在的目錄中運(yùn)行上面的命令。

    apt-get的source命令與它的其它命令有所不同,普通用戶權(quán)限就可以運(yùn)行source命令,指定文件被下載到用戶調(diào)用apt-source package命令時(shí)所處的目錄中。

    6.2 編譯源碼包所需的軟件包
    ==========================
    通常,編譯源碼包時(shí)要用到某些頭文件和共享庫,所有的源碼包的管理文件(control file)中都有一個(gè)域“Build-Depends:”,域中指出了編譯該源碼包需要哪些附加包。

    APT提供了一個(gè)簡單的方法下載這些附加包,你只需運(yùn)行apt-get build-dep package,其中package就是你打算編譯的源碼包名稱。見下例:

    [root]@[/] # apt-get build-dep gmc
    Reading Package Lists... Done
    Building Dependency Tree... Done
    The following NEW packages will be installed:
    comerr-dev e2fslibs-dev gdk-imlib-dev imlib-progs libgnome-dev libgnorba-dev
    libgpmg1-dev
    0 packages upgraded, 7 newly installed, 0 to remove and 1 not upgraded.
    Need to get 1069kB of archives. After unpacking 3514kB will be used.
    Do you want to continue? [Y/n]

    這些用于gmc正確編譯指定源碼包的附加包將會(huì)被安裝。注意這個(gè)命令不能用來搜索某個(gè)軟件的源碼包,你得另外運(yùn)行apt-get source下載源碼包。


    Debian APT HOWTO 第七章 如何處理錯(cuò)誤
    APT HOWTO
    第七章 如何處理錯(cuò)誤

    7.1 一般錯(cuò)誤
    ============
    錯(cuò)誤總是發(fā)生,大部分是因?yàn)橛脩舻拇中模旅媪信e一些常見錯(cuò)誤及處理方法。

    如果在運(yùn)行apt-get install package...時(shí),你的系統(tǒng)報(bào)告如下信息:

    Reading Package Lists... Done
    Building Dependency Tree... Done
    W: Couldn't stat source package list 'http://people.debian.org unstable/ Packages' (/var/state/apt/lists/people.debian.org_%7ekov_debian_unstable_Packages) - stat (2 No such file or directory)
    W: You may want to run apt-get update to correct these missing files
    E: Couldn't find package penguineyes

    上次你修改/etc/apt/sources.list后,忘了運(yùn)行apt-get update更新。

    如果出現(xiàn)這樣的信息:

    E: Could not open lock file /var/lib/dpkg/lock - open (13 Permission denied)
    E: Unable to lock the administration directory (/var/lib/dpkg/), are you root?

    如果你沒有root權(quán)限,當(dāng)運(yùn)行除source處的其它apt-get命令,如會(huì)出現(xiàn)上面的錯(cuò)誤信息。

    當(dāng)你同時(shí)運(yùn)行兩個(gè)apt-get進(jìn)程,或者當(dāng)你試圖運(yùn)行apt-get時(shí)已有一個(gè)的dpkg進(jìn)程處于激活狀態(tài),系統(tǒng)也會(huì)報(bào)告與上面相似的錯(cuò)誤信息。唯一能與其它命令同時(shí)運(yùn)行的只有source命令。

    如果在安裝過程中出現(xiàn)中斷,然后你發(fā)現(xiàn)該軟件包既不能重裝又不能刪除,試試下面兩個(gè)命令:

    # apt-get -f install
    # dpkg --configure -a

    再試著安裝那個(gè)軟件包,如果不行再次運(yùn)行上述命令后再試。這兩個(gè)命令對于那些使用unstable的玩家非常有用。

    7.2 在哪兒獲得幫助?
    ===================
    如果你發(fā)現(xiàn)自己有太多疑問,沒關(guān)系,有大量的Debian軟件包管理系統(tǒng)文檔供你參考。--help和幫助文檔能為你提供巨大的幫助,這些文檔位于/usr/share/doc目錄中,如/usr/share/doc/apt。

    如果本文檔沒法幫你排憂解難,可以去Debian郵件列表找找答案,相關(guān)欄目內(nèi)你會(huì)獲得更多信息。Debian的網(wǎng)址是:http://www.debian.org。

    記住只有Debian用戶才能這些郵件列表和資源,其它操作系統(tǒng)的用戶請到相關(guān)系統(tǒng)發(fā)布者建立的社區(qū)中獲取更多資源。


    Debian APT HOWTO 第八章 哪些發(fā)布版支持APT?
    APT HOWTO
    第八章 哪些發(fā)布版支持APT?

    下面是部分使用APT系統(tǒng)的發(fā)布團(tuán)體名稱:

    Debian GNU/Linux (http://www.debian.org) - APT的開發(fā)者

    Conectiva (http://www.conectiva.com.br) - 第一個(gè)將APT移植用于rpm的發(fā)布團(tuán)體

    Mandrake (http://www.mandrake.com)

    PLD (http://www.pld.org.pl)

    Vine (http://www.vinelinux.org)

    APT4RPM (http://apt4rpm.sf.net)

    Alt Linux (http://www.altlinux.ru/)

    Red Hat (http://www.redhat.com/)

    Sun Solaris (http://www.sun.com/)

    SuSE (http://www.suse.de/)

    Yellow Dog Linux (http://www.yellowdoglinux.com/)


    Debian APT HOWTO 第九章 致謝
    APT HOWTO
    第九章 致謝

    非常感謝你們,我Debian-BR項(xiàng)目組的好朋友們!還有你Debian,始終在我身邊幫助我,給我動(dòng)力不停工作為全人類做出貢獻(xiàn),幫助我樹立拯救世界的理想。:)

    我還要感謝CIPSGA,他們給予我們項(xiàng)目組乃至整個(gè)自由軟件項(xiàng)目巨大的幫助,是我們靈感的源泉。

    特別感謝:

    Yooseong Yang <yooseong@debian.org>

    Michael Bramer <grisu@debian.org>

    Bryan Stillwell <bryan@bokeoa.com>

    Pawel Tecza <pawel.tecza@poczta.fm>

    Hugo Mora <h.mora@melix.com.mx>

    Luca Monducci <luca.mo@tiscali.it>

    Tomohiro KUBOTA <kubota@debian.org>

    Pablo Lorenzzoni <spectra@debian.org>

    Steve Langasek <vorlon@netexpress.net>

    Arnaldo Carvalho de Melo <acme@conectiva.com.br>

    Erik Rossen <rossen@freesurf.ch>

    Ross Boylan <RossBoylan@stanfordalumni.org>

    Matt Kraai <kraai@debian.org>

    Aaron M. Ucko <ucko@debian.org>

    Jon ?slund <d98-jas@nada.kth.se>


    Debian APT HOWTO 第十章 本使用指南的新版本
    APT HOWTO
    第十章 本使用指南的新版本

    本操作手冊由Debian-BR項(xiàng)目組撰寫,我們希望它能為Debian用戶提供有效的幫助。

    你可以從Debian文檔項(xiàng)目頁面獲得本文檔的新版本:http://www.debian.org/doc/ddp

    對本文檔有任何意見或建議可直接發(fā)email給我:kov@debian.org


    Debian APT HOWTO 譯后記
    非常感謝版主能將本文收錄到精華區(qū),謝謝!

    學(xué)Debian走了不少彎路,得出的經(jīng)驗(yàn)是Debian入門三板斧:dselect、APT、內(nèi)核編譯,掌握了這三者,就算入門了,再深入學(xué)習(xí)就容易多了。無怪乎有一種說法:Debian就是Packages。

    想當(dāng)初看著dselect頭都大了,找了半天也沒找到完整一些的中文文檔,沒辦法只好硬著頭皮讀e文,花了不少時(shí)間,讀后果然功力增加不少,現(xiàn)在居然覺得dselect是最順手的包管理軟件。

    最近有一段閑暇時(shí)間,于是斗膽翻幾篇文檔,希望我一個(gè)人費(fèi)點(diǎn)時(shí)間能為大家省點(diǎn)時(shí)間。本時(shí)受過不少漢化文檔之苦,每每大罵譯者不負(fù)責(zé),輪到自己翻譯時(shí) 才知道其中的艱苦,本著首先要自己搞懂然后再動(dòng)筆的原則,只希望日后少被讀者罵。不過由于專業(yè)技術(shù)水平、遣詞造句能力都很有限,如果各位Debian高手 讀完譯文后,發(fā)現(xiàn)有錯(cuò)誤或不通不懂之處,請發(fā)郵件給我,以免誤人子弟,我也會(huì)升級該文檔。

    在翻譯過程中,我盡最大努力保持原文的風(fēng)格,不過中文與英文表達(dá)方式有不小的差別,所以有一些地方譯出來讀起來怪怪的,不好懂,這些地方我均以(譯 者注)方式進(jìn)行了意譯。整個(gè)文檔中《導(dǎo)言》、《哪些發(fā)布版支持APT?》、《致謝》、《本使用指南的新版本》幾個(gè)章節(jié)沒有什么技術(shù)信息,不過考慮到文檔的 完整性,還是都翻譯了,希望版主一并收錄進(jìn)精華區(qū)。

    接下來嘛,打算譯一下dselect的官文文檔,希望它是你們所期待的。:)

    posted on 2005-10-04 16:39 ivaneeo 閱讀(993) 評論(0)  編輯  收藏 所屬分類: debian-企鵝中最像牛
    主站蜘蛛池模板: 欧美日韩国产免费一区二区三区 | 特级毛片在线大全免费播放| 国产麻豆免费观看91| 特级无码毛片免费视频| 亚洲欧洲免费视频| 插B内射18免费视频| 草久免费在线观看网站| 久久综合亚洲鲁鲁五月天| 国产无遮挡裸体免费视频| 午夜视频在线免费观看| 亚洲欧洲精品成人久久曰| 亚洲日韩精品射精日| 午夜宅男在线永久免费观看网| 一边摸一边桶一边脱免费视频| 亚洲精品在线播放| 亚洲人成影院在线观看| 免费观看成人毛片a片2008| 中文字幕免费观看视频| 亚洲va中文字幕| 亚洲黄色中文字幕| 亚洲午夜福利精品久久| 青青草免费在线视频| a级男女仿爱免费视频| 国产精品亚洲精品爽爽| 亚洲高清无在码在线无弹窗| 亚洲人成人无码网www国产| 亚洲中文无码永久免费| 久久久久久国产精品免费免费男同 | 四虎在线免费播放| 国产一精品一av一免费爽爽| 亚洲av无码无线在线观看| 亚洲自偷自偷精品| 奇米影视亚洲春色| 国产乱子伦精品免费无码专区| 91免费人成网站在线观看18| 五月婷婷免费视频| 亚洲AV日韩AV永久无码色欲| 亚洲国产综合在线| 亚洲va在线va天堂va不卡下载| 亚洲一区二区三区乱码A| 国产成人在线观看免费网站 |