- 論壇徽章:
- 0
|
Debian Reference Debian軟件包管理
使用ATP下載軟件包時(shí),請(qǐng)確保使用了squid設(shè)置本地HTTP代理,如果有可能,請(qǐng)?jiān)O(shè)置http_proxy環(huán)境變量或在/etc/apt/apt.confhttp值,這樣可極大的改善網(wǎng)絡(luò)升級(jí)的性能,特別是在局域網(wǎng)中多臺(tái)Debian機(jī)器同時(shí)升級(jí)時(shí)。
盡管apt_preferences(5)的pin功能十分強(qiáng)大,但它并不能解決所有關(guān)聯(lián)問(wèn)題,因?yàn)殛P(guān)聯(lián)需求總傾向于更新其它基礎(chǔ)程序包。
chroot, 節(jié) 8.6.33中所描述的使用方法非常適于將系統(tǒng)的穩(wěn)定性和可使用大量新版軟件兩個(gè)優(yōu)點(diǎn)結(jié)合在一起。
本章基于Woody系統(tǒng)撰寫(xiě)的,但大部分信息均適用于Potato系統(tǒng)(除了apt_preferences(5)和/etc/apt/preferences的相關(guān)主題)。
6.1 概述
如果你沒(méi)精力閱讀所有的開(kāi)發(fā)文檔,那么先看看本章的內(nèi)容,開(kāi)始體驗(yàn)Debian testing/unstable的威力吧 :-)
6.1.1 主要工具
dselect — 使用菜單界面的軟件包管理工具(最上層的包管理工具)
dpkg — 安裝軟件包(管理軟件包中的文件)
apt-get — 安裝軟件包(管理軟件包,CLI APT)
tasksel — 安裝任務(wù)套件(管理面向某方面任務(wù)的一套軟件包)
aptitude — 安裝軟件包(管理軟件包和任務(wù)套件,ncurses APT)
deity — 另一種ncurses APT
synaptic, gsynaptic — 另一種GUI APT
它們不是同級(jí)的工具。dselect運(yùn)行于APT(命令行命令是apt-get)和dpkg之上。
APT使用/var/lib/apt/lists/*來(lái)跟蹤可用的軟件包,而dpkg使用的是/var/lib/dpkg/available。如果直接用apt-get或同類工具如aptitude等來(lái)安裝軟件包,千萬(wàn)別忘了更新/var/lib/dpkg/available文件,可以使用dselect的[U]pdate選項(xiàng)或在運(yùn)行dselect update、tasksel或dpkg -l前執(zhí)行shell命令行“dselect update”。
在處理關(guān)聯(lián)軟件包的方式上,apt-get會(huì)自動(dòng)搜索下載depends類軟件包,但不會(huì)理睬recommends和suggests類軟件包,而dselect在軟件包的選擇方面采用菜單方式操作,對(duì)depends、recommends和suggests三類相關(guān)軟件包均給出提示。aptitude則提供了選項(xiàng)下載安裝所有depends、recommends和suggests類軟件包。參閱軟件包關(guān)聯(lián)性, 節(jié) 2.2.8。
6.1.2 方便的工具
apt-cache - 在本地緩沖區(qū)檢查包文件
dpkg-reconfigure - 重新配置已安裝的軟件包(如果它是使用debconf進(jìn)行配置的)
dpkg-source - 管理源碼包
dpkg-buildpackage - 自動(dòng)生成包文件
...
6.2 Debian軟件包管理基礎(chǔ)
成套地安裝軟件包稱之為task,還可以使用軟件包管理工具逐個(gè)地安裝軟件包或升級(jí)系統(tǒng)。亦可參閱Debian系統(tǒng)安裝提示, 章 3、發(fā)行版升級(jí), 章 5和應(yīng)急的編輯器, 節(jié) 11.2。
6.2.1 使用tasksel或aptitude進(jìn)行task安裝
tasksel是Debian的任務(wù)安裝器,系統(tǒng)安裝過(guò)程中它為用戶提供了一種簡(jiǎn)易軟件包選擇方式。
如果你希望完裝的某項(xiàng)常規(guī)功能包含了許多軟件包,最好的辦法就是使用它來(lái)安裝。運(yùn)行如下命令:
# dselect update
# tasksel
aptitude亦可訪問(wèn)task。用它不僅可以選擇tasks還可以對(duì)task選項(xiàng)菜單中的軟件包進(jìn)行逐個(gè)取舍。
6.2.2 設(shè)置APT系統(tǒng)
使用testing發(fā)布版的用戶,有時(shí)需要對(duì)系統(tǒng)進(jìn)行有選擇性地升級(jí),這時(shí)可按將APT升級(jí)到Woody版本, 節(jié) 5.1中描述的方法設(shè)置APT系統(tǒng)(>Woody),使用其apt_preferences(5)功能。
首先,在/etc/apt/sources.list中添加stable、testing和unstable鏡像源,接著編輯/etc/apt/preferences,設(shè)置合適的Pin-Priority。
Package: *
Pin: release a=stable
Pin-Priority: 500
Package: *
Pin: release a=testing
Pin-Priority: 600
Package: *
Pin: release a=unstable
Pin-Priority: 50
6.2.3 dselect
啟動(dòng)程序,dselect會(huì)自動(dòng)選上所有“Required”、“Important”和“Standard”類軟件包,在Potato系統(tǒng)中,某些大型應(yīng)用程序如TeX和Emacs處于這些分類中,在初次安裝系統(tǒng)時(shí)最好手工取消對(duì)它們的選擇(輸入“_”)。在Woody中,這些大型應(yīng)用程序被移入“Optional”類軟件包。
dselect的用戶界面有點(diǎn)怪。有4個(gè)相似命令(注意是大寫(xiě)字母。
Key-stroke Action
Q 退出。確認(rèn)當(dāng)前的選擇然后退出。
(override dependencies)
R 恢復(fù)!我放棄我做出的選擇
D 不管它!我不管dselect有什么建議,照我說(shuō)的做!
U 照系統(tǒng)的建議做
使用D和Q可以選擇有沖突的選項(xiàng),你要自負(fù)風(fēng)險(xiǎn),所以使用這些命令要小心。當(dāng)前dselect是一款成熟的菜單驅(qū)動(dòng)式工具,在對(duì)suggests和recommends類軟件包的選擇控制方面,它提供相當(dāng)棒的微操作能力。
在/etc/dpkg/dselect.cfg中加上一行包含“expert”選項(xiàng)以減少干擾。對(duì)于速度慢的機(jī)器,請(qǐng)?jiān)谄渌俣瓤斓臋C(jī)器上運(yùn)行dselect選好軟件包,然后用apt-get install安裝它們。
對(duì)于沒(méi)有定義Pin-Priority的軟件包,dselect不會(huì)訪問(wèn)它們。
6.2.4 aptitude
aptitude是一款新的菜單驅(qū)動(dòng)式軟件包安裝工具,與dselect很相似。它亦可作為命令行工具apt-get的替代品。參閱aptitude(1)。
aptitude可接受單字符命令,通常是小寫(xiě)字母。
Key-stroke Action
F10 菜單
? 鍵盤(pán)命令幫助
u 更新軟件包信息
g 下載并安裝選定的軟件包
q 保存修改并退出當(dāng)前屏幕
x 放棄修改并退出當(dāng)前屏幕
Enter 瀏覽某軟件包的相關(guān)信息
aptitude提供了選項(xiàng)可自動(dòng)選取所有depends、recommends和suggests類軟件包?稍贔10 -> Options -> Dependency handling菜單中設(shè)置它。
通過(guò)aptitude可訪問(wèn)某軟件包的所有版本。
6.2.5 apt-cache和apt-get命令
還是以上面使用testing發(fā)布版的用戶為例,可使用下列命令管理系統(tǒng):
apt-get -u upgrade
跟蹤testing發(fā)布版的更新情況,對(duì)系統(tǒng)上所有軟件包進(jìn)行升級(jí)并從testing處安裝關(guān)聯(lián)軟件包。
apt-get -u dist-upgrade
跟蹤testing發(fā)布版的更新情況,對(duì)系統(tǒng)上所有軟件包進(jìn)行升級(jí)并從testing處重新分析關(guān)聯(lián)關(guān)系并安裝關(guān)聯(lián)包。
apt-get -u dselect-upgrade
跟蹤testing發(fā)布版的更新情況,對(duì)系統(tǒng)上所有在dselect中選定了的軟件包進(jìn)行升級(jí)。
apt-get -u install package
從testing處安裝package及其關(guān)聯(lián)包。
apt-get -u install package/unstable
從unstable處安裝package并從testing處安裝關(guān)聯(lián)包。
apt-get -u install -t unstable package
從unstable處安裝package及其關(guān)聯(lián)包。注意須設(shè)置unstable的Pin-Priority為990。
apt-cache policy foo bar ...
檢查foo bar ...軟件包的狀態(tài)。
apt-cache show foo bar ... | less
查看foo bar ...軟件包的有關(guān)信息。
apt-get install foo=2.2.4-1
安裝foo軟件包的特定版本2.2.4-1。
apt-get -u install foo bar-
安裝foo軟件包并刪除bar軟件包。
apt-get remove bar
刪除bar軟件包,但保留其配置文件。
apt-get remove --purge bar
刪除bar軟件包及其配置文件。
在上面的例子中使用-u選項(xiàng)的作用是在實(shí)際升級(jí)之前將所有將要升級(jí)的軟件包列出,并提示用戶確認(rèn)。下面的操作可將-u設(shè)置為默認(rèn)行為:
$ cat >> /etc/apt/apt.conf 1000而引起強(qiáng)制降級(jí)。注意,該操作可能會(huì)在關(guān)聯(lián)性方面發(fā)生一點(diǎn)問(wèn)題。
6.2.8 /etc/apt/preferences概述
設(shè)置APT系統(tǒng), 節(jié) 6.2.2中展示的/etc/apt/preferences樣例文件里,首行Package: *表示該段落指令作用于所有軟件包。可以通過(guò)指定軟件包名稱來(lái)為某個(gè)特定的軟件包設(shè)置指定的Pin-Priority。
接下來(lái)的一行是Pin: release a=stable表示apt-get從包含Archive: stable節(jié)的Release文件所在的目錄獲得Packages.gz文件。
最后一行Pin-Priority: 500指定Pin-Priority為500。
如果多個(gè)軟件包同名,系統(tǒng)通常會(huì)安裝擁有最高Pin-Priority的軟件包。
在此,Pin-Priority表示:
1001及以上:可降級(jí)優(yōu)先級(jí)。
Pin-Priority處于該范圍的軟件包允許降級(jí)操作。
100到1000:標(biāo)準(zhǔn)優(yōu)先級(jí)。
不允許降級(jí)。幾個(gè)key Pin-Priority的值:
990:由--target-release或apt-get(8)-t選項(xiàng)設(shè)置的優(yōu)先級(jí)。
500:所有默認(rèn)軟件包文件的優(yōu)先級(jí)。
100:當(dāng)前安裝軟件包文件的優(yōu)先級(jí)。
0到99:非自動(dòng)優(yōu)先級(jí)。(僅用于軟件包沒(méi)有安裝或沒(méi)有別的可用版本時(shí)。)
小于0:決不選擇該版本。
按下面的方法設(shè)置/etc/apt/apt.conf可獲得與--target-release一樣的效果:
# echo 'APT::Default-Release "testing";' >> /etc/apt/apt.conf
命令行選項(xiàng)--target-release和/etc/apt/apt.conf中的設(shè)置會(huì)頂替/etc/apt/preferences的設(shè)置。在玩/etc/apt/preferences的時(shí)候小心兩者沖突。
6.3 Debian生存工具
掌握了這些知識(shí),就能讓你的系統(tǒng)“青春永駐”了:-)
6.3.1 檢測(cè)程序錯(cuò)誤尋求幫助
如你使用某個(gè)軟件包出現(xiàn)問(wèn)題,在尋求幫助或發(fā)送錯(cuò)誤報(bào)告之前請(qǐng)確認(rèn)查看過(guò)下列站點(diǎn)(lynx、links和w3m同樣好用):
$ lynx http://bugs.debian.org/
$ lynx http://bugs.debian.org/package-name # 如果你知道軟件包名稱
$ lynx http://bugs.debian.org/bugnumber # 如果你知道錯(cuò)誤序號(hào)
在Google(www.google.com)中使用關(guān)鍵字“site:debian.org”搜索。
如有疑問(wèn),可閱讀幫助文件。設(shè)置CDPATH如下:
export CDPATH=.:/usr/local:/usr/share/doc
然后輸入
$ cd packagename
$ pager README.Debian # if this exists
$ mc
更多技術(shù)支持資源列在Debian技術(shù)支持, 章 15。
6.3.2 APT升級(jí)錯(cuò)誤及解決方法
從unstable/testing進(jìn)行升級(jí)時(shí)可能出現(xiàn)升級(jí)Debian系統(tǒng), 節(jié) 5.3中提到的軟件包關(guān)聯(lián)問(wèn)題。多數(shù)情況下,是因?yàn)樯?jí)的軟件包所需的新增的關(guān)聯(lián)包沒(méi)有安裝?墒褂萌缦路椒ń鉀Q:
# apt-get dist-upgrade
如果這招無(wú)效,可以重復(fù)下面的方法至到問(wèn)題解決:
# apt-get upgrade -f # continue upgrade even after error
... 或
# apt-get dist-upgrade -f # continue dist-upgrade even after error
一些的確存在問(wèn)題的升級(jí)腳本會(huì)引起持續(xù)出錯(cuò)。最好的解決方法是檢查該軟件包的安裝腳本/var/lib/dpkg/info/packagename.{post-,pre-}{install,removal}然后運(yùn)行:
# dpkg --configure -a # 配置所有未完成安裝的軟件包
如果腳本報(bào)告缺少配置文件,查看一下/etc中相關(guān)的配置文件。如果配置文件有.new擴(kuò)展名(或其它類似的擴(kuò)展名),去掉(mv)它的擴(kuò)展名。
從unstable/testing進(jìn)行升級(jí)時(shí)可能出現(xiàn)軟件包關(guān)聯(lián)問(wèn)題?捎眠@個(gè)方法智。
# apt-get install -f package # 重載壞關(guān)聯(lián)
還可以用equivs包來(lái)解決此類問(wèn)題。參閱/usr/share/doc/equivs/README.Debian and equivs軟件包, 節(jié) 6.5.2。
6.3.3 使用dpkg救助
如果系統(tǒng)的dselect(APT)受損無(wú)法完成安裝,可使用dpkg來(lái)恢復(fù):
# cd /var/cache/apt/archives
# dpkg -i libc6* libdb2* perl*
# dpkg -i apt* dpkg* debconf*
# dpkg -i * # 直至不再出錯(cuò)
如果軟件包丟失,用下述方法從鏡像源下載:
# mc # use "FTP link" pointing to Debian FTP server
現(xiàn)在,在HTTP/FTP服務(wù)器上,軟件包的真正位置不再是傳統(tǒng)的/dist目錄而是新的/pool目錄。(參閱pool目錄, 節(jié) 2.1.10)
然后開(kāi)始安裝:
# dpkg -i /var/cache/apt/archives/packagefile.deb
對(duì)于壞關(guān)聯(lián),可這樣解決:
# dpkg --ignore-depends=package1,... -i packagefile.deb
# dpkg --force-depends -i packagefile.deb
# dpkg --force-depends --purge package
# dpkg --force-confmiss -i packagefile.deb # Install missing conffile
6.3.4 恢復(fù)軟件包選擇狀態(tài)的數(shù)據(jù)
如果/var/lib/dpkg/status因?yàn)槟撤N原因壞掉了,Debian系統(tǒng)將會(huì)完全丟失軟件包選擇狀態(tài)的數(shù)據(jù)。趕快到/var/lib/dpkg/status-old或/var/backups/dpkg.status.*下找找舊的/var/lib/dpkg/status文件。
將/var/backups/放在其它的分區(qū)是個(gè)好習(xí)慣,因?yàn)樵撃夸洶嗽S多非常重要的系統(tǒng)數(shù)據(jù)。
如果舊的/var/lib/dpkg/status文件也壞了,仍可以從/usr/share/doc/下的目錄進(jìn)行恢復(fù)這些信息。
# ls /usr/share/doc | \
grep -v [A-Z] | \
grep -v '^texmf$' | \
grep -v '^debian$' | \
awk '{print $1 " install"}' | \
dpkg --set-selections
# dselect --expert # reinstall system, de-select as needed
6.3.5 /var被刪除后如何恢復(fù)系統(tǒng)
/var目錄包含著定時(shí)更新的數(shù)據(jù)如mail,它們很容易遭破壞。將目錄放到別的分區(qū)可降低風(fēng)險(xiǎn),如果最壞的事情發(fā)生了,可以通過(guò)重建/var目錄來(lái)挽救Debian系統(tǒng)。
從相同或舊版本的最簡(jiǎn)Debian系統(tǒng)中取得/var目錄的內(nèi)容框架,例如var.tar.gz,然后它放入受損系統(tǒng)的root目錄,接著
# cd /
# mv var var-old # 如果剩有有用內(nèi)容
# tar xvzf var.tar.gz # 使用Woody框架文件
# aptitude # 或用dselect
上述步驟可使系統(tǒng)恢復(fù)工作。使用恢復(fù)軟件包選擇狀態(tài)的數(shù)據(jù), 節(jié) 6.3.4中描述的技術(shù)加速軟件包選擇數(shù)據(jù)的恢復(fù)。([FIXME]:該過(guò)程需要更多的實(shí)踐來(lái)檢驗(yàn))
6.3.6 為無(wú)法啟動(dòng)的系統(tǒng)安裝軟件包
使用Debian急救軟盤(pán)/CD或從多啟動(dòng)Linux系統(tǒng)其它分區(qū)啟動(dòng)。 See 啟動(dòng)系統(tǒng), 節(jié) 8.1. 將無(wú)法啟動(dòng)的系統(tǒng)掛載到/target并使用dpkg的chroot安裝模式。
# dpkg --root /target -i packagefile.deb
接下來(lái)就可以著手配置并解決問(wèn)題。
如是只是由于lilo損壞而造系統(tǒng)無(wú)法啟動(dòng),可使用標(biāo)準(zhǔn)Debian急救盤(pán)啟動(dòng)。假設(shè)你的root分區(qū)位于/dev/hda12且想使用runlevel 3,在啟動(dòng)提示符輸入:
boot: rescue root=/dev/hda12 3
這樣,你就可以使用軟盤(pán)中內(nèi)核啟動(dòng)系統(tǒng),新系統(tǒng)的功能基本齊全。(可能丟失某些內(nèi)核特性或模塊)
6.3.7 如果dpkg命令出錯(cuò)該怎么辦
如果dpkg損壞就不能安裝任何.deb文件。下面的操作可幫助你修復(fù)這種狀況。(在第一行,你可將“l(fā)inks”替換成你喜歡的瀏覽器。)
$ links http://http.us.debian.org/debian/pool/main/d/dpkg/
... 下載完好的dpkg_version_arch.deb
$ su
password: *****
# ar x dpkg_version_arch.deb
# mv data.tar.gz /data.tar.gz
# cd /
# tar xzfv data.tar.gz
對(duì)i386,亦可用http://packages.debian.org/dpkg作為URL。
6.4 Debian必殺技
有了這些命令的啟迪,你將會(huì)從無(wú)休止的升級(jí)沖突的地獄中解放出來(lái),達(dá)到Debian天堂。 :-)
6.4.1 文件信息
查找特定文件所屬的軟件包:
$ dpkg {-S|--search} pattern # search for pattern in installed packages
$ zgrep -e pattern /local/copy/of/debian/woody/Contents-i386.gz
# find filename-pattern of files in the debian archive
或使用專門的軟件包命令:
# apt-get install dlocate
# conflicts with slocate (secure version of locate)
$ dlocate filename # fast alternative to dpkg -L and dpkg -S
...
# apt-get install auto-apt # on-demand package installation tool
# auto-apt update # create db file for auto-apt
$ auto-apt search pattern
# search for pattern in all packages, installed or not
6.4.2 軟件包信息
搜索并顯示包文件的信息。編輯/etc/apt/sources.list,讓APT指向正確的包文件。如果想了解testing/unstable中的相應(yīng)軟件包與當(dāng)前系統(tǒng)安裝的軟件包有何差別,使用apt-cache policy—更好。
# apt-get check # 更新緩沖區(qū)并檢查損壞的軟件包
$ apt-cache search pattern # 按文本描述搜索軟件包
$ apt-cache policy package # 軟件包的priority/dists信息
$ apt-cache show -a package # 顯示所有dists中軟件包描述信息
$ apt-cache showsrc package # 顯示相應(yīng)源碼包的信息
$ apt-cache showpkg package # 軟件包調(diào)試信息
# dpkg --audit|-C # 搜索未完成安裝的軟件包
$ dpkg {-s|--status} package ... # 已安裝軟件包描述
$ dpkg -l package ... # 已安裝軟件包的狀態(tài)(每個(gè)占一行)
$ dpkg -L package ... # 列出軟件包安裝的文件的名稱
Woody發(fā)布版沒(méi)有為apt-cache showsrc建檔,但該命令可用:)
你也這可這樣查看軟件包信息(我用mc瀏覽):
/var/lib/apt/lists/*
/var/lib/dpkg/available
比較下面的文件可以確切了解最近的安裝過(guò)程對(duì)系統(tǒng)造成了那些改變。
/var/lib/dpkg/status
/var/backups/dpkg.status*
6.4.3 使用APT進(jìn)行全自動(dòng)系統(tǒng)安裝
進(jìn)行全自動(dòng)安裝,要在/etc/apt/apt.conf中加上一行:
Dpkg::Options {"--force-confold";}
另一種等階的方法是運(yùn)行apt-get -q -y packagename。這種方法可能產(chǎn)生嚴(yán)重的負(fù)作用,所以使用起來(lái)要小心。參閱apt.conf(5)和dpkg(1)。
安裝完畢以后,可以用重新配置已安裝軟件包, 節(jié) 6.4.4中的方法配置特定的軟件包。
6.4.4 重新配置已安裝軟件包
使用下列方法重新配置已安裝軟件包。
# dpkg-reconfigure --priority=medium package [...]
# dpkg-reconfigure --all # 重新配置所有的軟件包
# dpkg-reconfigure locales # 生成別的locales
# dpkg-reconfigure --p=low xserver-xfree86 # 重新配置X服務(wù)器
如果你想永久改變debconf對(duì)話框模式,可這么做。
某些程序用于生成特殊的配置腳本。
apt-setup - 創(chuàng)建/etc/apt/sources.list
install-mbr - 安裝主引導(dǎo)(Master Boot Record)管理器
tzconfig - 設(shè)定本地時(shí)間
gpmconfig - 設(shè)置gpm鼠標(biāo)daemon
sambaconfig - 在Potato中配置Samba(Woody使用debconf來(lái)配置)
eximconfig - 配置Exim (MTA)
texconfig - 配置teTeX
apacheconfig - 配置Apache (httpd)
cvsconfig - 配置CVS
sndconfig - 配置聲音系統(tǒng)
...
update-alternatives - 設(shè)定默認(rèn)啟動(dòng)命令,例如設(shè)定vi啟動(dòng)vim
update-rc.d - System-V init腳本管理工具
update-menus - Debian菜單系統(tǒng)
...
6.4.5 刪除軟件包
刪除軟件包但保留其配置文件:
# apt-get remove package ...
# dpkg --remove package ...
刪除軟件包并刪除配置文件:
# apt-get remove --purge package ...
# dpkg --purge package ...
6.4.6 阻止舊軟件包升級(jí)
舉個(gè)例子,要阻止libc6和libc6-dev通過(guò)dselect或使用apt-get -u upgrade package命令升級(jí),可執(zhí)行:
# echo -e "libc6 hold\nlibc6-dev hold" | dpkg --set-selections
這種方法不影響apt-get -u install package命令操作。要阻止apt-get -u upgrade package或apt-get -u dist-upgrade命令對(duì)軟件包執(zhí)行的強(qiáng)制自動(dòng)降級(jí)行為,可在/etc/apt/preferences中加上:
Package: libc6
Pin: release a=stable
Pin-Priority: 2000
這里“Package:”后不能使用通配符如“l(fā)ibc6*”,如果要保持所有與glibc源碼包相關(guān)的二進(jìn)制包的版本同步,可以明確的列出它們。
該命令可以顯示處于“阻止”狀態(tài)的軟件包:
dpkg --get-selections "*"|grep -e "hold$"
6.4.7 stable/testing/unstable混合系統(tǒng)
apt-show-versions可以列出發(fā)行版中可用軟件包的版本。
$ apt-show-versions | fgrep /testing | wc
... 你有多少testing軟件包
$ apt-show-versions -u
... 列出可升級(jí)的軟件包
$ apt-get install `apt-show-versions -u -b | fgrep /unstable`
... 將所有unstable軟件包升級(jí)到最新版本
6.4.8 刪除緩存包文件
使用APT安裝軟件包會(huì)在/var/cache/apt/archives目錄留下緩存文件,要清除這些文件可使用:
# apt-get autoclean # removes only useless package files
# apt-get clean # removes all cached package files
6.4.9 記錄/拷貝系統(tǒng)配置
對(duì)軟件包選擇情況進(jìn)行本地備份:
$ dpkg --get-selections "*" >myselections # or use \*
“*”使myselections包含那些被指定“完全刪除(purge)”的文件。
你可將這個(gè)文件發(fā)送到另一臺(tái)電腦并在那兒按文件中的選擇進(jìn)行軟件包安裝。
# dselect update
# dpkg --set-selections override
# editor override # adjust priority and section
# dpkg-scanpackages pool override /usr/local/ \
> dists/unstable/main/binary-i386/Packages
# cat > dists/unstable/main/Release > /etc/apt/sources.list
還可以這樣快速創(chuàng)建一個(gè)本地deb倉(cāng)庫(kù):
# apt-get install dpkg-dev
# mkdir /usr/local/debian
# mv /some/where/package.deb /usr/local/debian
# dpkg-scanpackages /usr/local/debian /dev/null | \
gzip - > /usr/local/debian/Packages.gz
# echo "deb file:/usr/local/debian ./" >> /etc/apt/sources.list
在/etc/apt/sources.list中設(shè)置相應(yīng)鏡像源入口地址,就可以通過(guò)HTTP或FTP方式遠(yuǎn)程訪問(wèn)存放在其中的包文件了。
6.4.12 轉(zhuǎn)化或安裝外來(lái)二進(jìn)制軟件包
alien可將其它格式的二進(jìn)制軟件包如Redhat的rpm、Stampede的slp、Slackware的tgz和Solaris的pkg等轉(zhuǎn)化成Debian的deb格式軟件包,如果你想在自己的系統(tǒng)上使用別的Linux發(fā)行版中的軟件包,可使用alien將它轉(zhuǎn)化成系統(tǒng)首選的軟件包格式后安裝。alien還支持LSB的軟件包。
6.4.13 校驗(yàn)已安裝軟件包
debsums可以校驗(yàn)已安裝軟件包的MD5編碼,對(duì)某些軟件包沒(méi)有可用的MD5編碼,系統(tǒng)管理員可使用一個(gè)臨時(shí)的解決辦法:
# cat >>/etc/apt/apt.conf.d/90debsums
DPkg::Post-Install-Pkgs {"xargs /usr/bin/debsums -sg";};
^D
per Joerg Wendland (untested).
6.4.14 優(yōu)化sources.list
簡(jiǎn)而言之,我嘗試過(guò)用各種優(yōu)化方法來(lái)創(chuàng)建sources.list,但任何一種方法對(duì)我這個(gè)住在美國(guó)的人來(lái)說(shuō)都沒(méi)有明顯的改善。最后我還是用apt-setup手工選擇近一點(diǎn)的站點(diǎn)。
apt-spy會(huì)根據(jù)站點(diǎn)回應(yīng)時(shí)間和帶寬自動(dòng)創(chuàng)建sources.list。netselect-apt會(huì)創(chuàng)建一個(gè)更完整的sources.list文件,但它使用更落后的方法來(lái)選擇鏡像站點(diǎn)(比較ping time)。
# apt-get install apt-spy
# cd /etc/apt ; mv sources.list sources.list.org
# apt-spy -d testing -l sources.apt
6.5 其它Debian特性
6.5.1 dpkg-divert命令
使用文件轉(zhuǎn)移(diversions)的方法可以強(qiáng)令dpkg將文件安裝到轉(zhuǎn)移目錄而非默認(rèn)目錄。對(duì)于某個(gè)引起沖突的文件,可以在Debian軟件包腳本中使用Diversions將它安裝到別的目錄。系統(tǒng)管理員還可以使用diversion來(lái)重載軟件包配置文件,或者用來(lái)保留某些舊配置文件(這些文件沒(méi)有在conffiles中登記)當(dāng)安裝新版軟件時(shí)這些文件會(huì)被覆蓋。(參閱保存本地設(shè)置, 節(jié) 2.2.4)。
# dpkg-divert [--add] filename # add "diversion"
# dpkg-divert --remove filename # remove "diversion"
記住,不到萬(wàn)不得已不要使用dpkg-divert。
6.5.2 equivs軟件包
如果你從源碼編譯程序,最好將它做成本地Debian化軟件包(*.deb)。最新的方法是使用equivs。
Package: equivs
Priority: extra
Section: admin
Description: Circumventing Debian package dependencies
This is a dummy package which can be used to create Debian
packages, which only contain dependency information.
6.5.3 自選命令
想用vi命令啟動(dòng)vim,可使用update-alternatives來(lái)定義:
# update-alternatives --display vi
...
# update-alternatives --config vi
Selection Command
-----------------------------------------------
1 /usr/bin/elvis-tiny
2 /usr/bin/vim
*+ 3 /usr/bin/nvi
Enter to keep the default, or type selection number: 2
Debian自選命令設(shè)定系統(tǒng)中的這些項(xiàng)目,都是/etc/alternatives下的鏈接文件。
想設(shè)置你喜愛(ài)的X window環(huán)境,執(zhí)行update-alternatives來(lái)指定/usr/bin/x-session-manager和/usr/bin/x-window-manager。詳情參閱自定義X會(huì)話, 節(jié) 9.4.5.1。
/bin/sh是指向/bin/bash或/bin/dash的鏈接。想兼容舊的Bash腳本,使用/bin/bash比較保險(xiǎn),但更好還是使用/bin/dash,因?yàn)樗螾OSIX標(biāo)準(zhǔn)。升級(jí)到2.4版Linux內(nèi)核,系統(tǒng)一般將它設(shè)置為/bin/dash。
6.5.4 System-V init文件和運(yùn)行級(jí)別
可在/etc/inittab中設(shè)定系統(tǒng)啟動(dòng)的默認(rèn)運(yùn)行級(jí)別(runlevel)。
不同于其它的發(fā)行版,Debian將運(yùn)行級(jí)別的管理職責(zé)完全賦予系統(tǒng)管理員。Debian更傾向于使用update-rc.d腳本來(lái)管理它那System-V風(fēng)格的init。
下面的命令表示,按優(yōu)先級(jí)數(shù)字20(normal)所指定的次序,分別在runlevel 1、2、3中啟動(dòng)/etc/init.d/name,在runlevel 4、5中停止它們:
# update-rc.d name start 20 1 2 3 . stop 20 4 5 .
要?jiǎng)h除init.d腳本中存在的符號(hào)鏈接可執(zhí)行:
# update-rc.d -f name remove
要編輯運(yùn)行級(jí)別,我通常在mc中用Alt-Enter拷貝鏈接名,然后在shell提示符下使用mv命令手工編輯,例如:
# mv S99xdm K99xdm # 禁用xdm (X display manager)
有時(shí)為了進(jìn)行臨時(shí)調(diào)試,我甚至在init.d腳本的開(kāi)頭加入exit 0來(lái)禁用一個(gè)daemon,反正它們都在conffiles登記過(guò)。
6.5.5 停止daemon服務(wù)
Debian發(fā)行版非常注重系統(tǒng)安全,并期望系統(tǒng)管理員能擔(dān)此重任。它將系統(tǒng)的易用性放在了第二位,許多daemon服務(wù)都定位在最高安全級(jí)別,因而,默認(rèn)安裝狀態(tài)下系統(tǒng)只啟動(dòng)最少的(甚至沒(méi)有)可用的服務(wù)。
如果拿不定把握(有關(guān)Exim、DHCP...),可執(zhí)行ps aux或檢查/etc/init.d/*和/etc/inetd.conf下的內(nèi)容,還可以使用通過(guò)PAM和login實(shí)現(xiàn)訪問(wèn)權(quán)限管理, 節(jié) 9.2.1中提到的方法檢查/etc/hosts.deny。pidof命令也很有用(參閱pidof(8))
在新版的Debian中,默認(rèn)狀態(tài)下X11不允許TCP/IP(遠(yuǎn)程)連接。參閱X的TCP/IP連接, 節(jié) 9.4.6,使用SSH進(jìn)行X傳送也是禁用的,參閱X遠(yuǎn)程聯(lián)接:ssh, 節(jié) 9.4.8。
原文地址 http://debian.linuxsir.org/book/reference/lyoo/ch-package.html
本文來(lái)自ChinaUnix博客,如果查看原文請(qǐng)點(diǎn):http://blog.chinaunix.net/u3/95834/showart_1917849.html |
|