?? 6.htm
字號:
a=stable</SAMP>表示<CODE>apt-get</CODE>從包含<SAMP>Archive:
stable</SAMP>節的<CODE>Release</CODE>文件所在的目錄獲得<CODE>Packages.gz</CODE>文件。
<P>最后一行<SAMP>Pin-Priority: 500</SAMP>指定Pin-Priority為500。
<P>如果多個軟件包同名,系統通常會安裝擁有最高Pin-Priority的軟件包。
<P>在此,Pin-Priority表示:
<UL>
<LI>1001及以上:可降級優先級。
<P>Pin-Priority處于該范圍的軟件包允許降級操作。 </P></LI></UL>
<UL>
<LI>100到1000:標準優先級。
<P>不允許降級。幾個key Pin-Priority的值:
<UL>
<LI>990:由<SAMP>--target-release</SAMP>或<CODE>apt-get(8)</CODE><SAMP>-t</SAMP>選項設置的優先級。
</LI></UL>
<UL>
<LI>500:所有默認軟件包文件的優先級。 </LI></UL>
<UL>
<LI>100:當前安裝軟件包文件的優先級。 </LI></UL></LI></UL>
<UL>
<LI>0到99:非自動優先級。(僅用于軟件包沒有安裝或沒有別的可用版本時。) </LI></UL>
<UL>
<LI>小于0:決不選擇該版本。 </LI></UL>
<P>按下面的方法設置<CODE>/etc/apt/apt.conf</CODE>可獲得與<SAMP>--target-release</SAMP>一樣的效果:
<PRE> # echo 'APT::Default-Release "testing";' >> /etc/apt/apt.conf
</PRE>
<P>命令行選項<SAMP>--target-release</SAMP>和<CODE>/etc/apt/apt.conf</CODE>中的設置會頂替<CODE>/etc/apt/preferences</CODE>的設置。在玩<CODE>/etc/apt/preferences</CODE>的時候小心兩者沖突。
<HR>
<A name=s-survival></A>
<H2>6.3 Debian生存工具</H2>
<P>掌握了這些知識,就能讓你的系統“<STRONG>青春永駐</STRONG>”了:-)
<HR>
<A name=s-bug-check></A>
<H3>6.3.1 檢測程序錯誤尋求幫助</H3>
<P>如你使用某個軟件包出現問題,在尋求幫助或發送錯誤報告之前請確認查看過下列站點(<CODE>lynx</CODE>、<CODE>links</CODE>和<CODE>w3m</CODE>同樣好用):
<PRE> $ lynx http://bugs.debian.org/
$ lynx http://bugs.debian.org/<VAR>package-name</VAR> # 如果你知道軟件包名稱
$ lynx http://bugs.debian.org/<VAR>bugnumber</VAR> # 如果你知道錯誤序號
</PRE>
<P>在Google(www.google.com)中使用關鍵字“site:debian.org”搜索。
<P>如有疑問,可閱讀幫助文件。設置<SAMP>CDPATH</SAMP>如下: <PRE> export CDPATH=.:/usr/local:/usr/share/doc
</PRE>
<P>然后輸入 <PRE> $ cd <VAR>packagename</VAR>
$ pager README.Debian # if this exists
$ mc
</PRE>
<P>更多技術支持資源列在<A
href="http://qref.sourceforge.net/Debian/reference/ch-support.zh-cn.html">Debian技術支持,
第 15 章</A>。
<HR>
<A name=s-apt-trouble></A>
<H3>6.3.2 APT升級錯誤及解決方法</H3>
<P>從<SAMP>unstable</SAMP>/<SAMP>testing</SAMP>進行升級時可能出現<A
href="http://qref.sourceforge.net/Debian/reference/ch-woody.zh-cn.html#s-upgrade-system">升級Debian系統,
第 5.3 節</A>中提到的軟件包關聯問題。多數情況下,是因為升級的軟件包所需的新增的關聯包沒有安裝。可使用如下方法解決: <PRE> # apt-get dist-upgrade
</PRE>
<P>如果這招無效,可以重復下面的方法至到問題解決: <PRE> # apt-get upgrade -f # continue upgrade even after error
... 或
# apt-get dist-upgrade -f # continue dist-upgrade even after error
</PRE>
<P>一些的確存在問題的升級腳本會引起持續出錯。最好的解決方法是檢查該軟件包的安裝腳本<CODE>/var/lib/dpkg/info/packagename.<VAR>{post-,pre-}{install,removal}</VAR></CODE>然后運行:
<PRE> # dpkg --configure -a # 配置所有未完成安裝的軟件包
</PRE>
<P>如果腳本報告缺少配置文件,查看一下<CODE>/etc</CODE>中相關的配置文件。如果配置文件有<SAMP>.new</SAMP>擴展名(或其它類似的擴展名),去掉(<CODE>mv</CODE>)它的擴展名。
<P>從unstable/testing進行升級時可能出現軟件包關聯問題。可用這個方法智取: <PRE> # apt-get install -f <VAR>package</VAR> # 重載壞關聯
</PRE>
<P>還可以用<CODE>equivs</CODE>包來解決此類問題。參閱<CODE>/usr/share/doc/equivs/README.Debian</CODE>
and <A
href="http://qref.sourceforge.net/Debian/reference/ch-package.zh-cn.html#s-equivs"><CODE>equivs</CODE>軟件包,
第 6.5.2 節</A>。
<HR>
<A name=s-rescue-dpkg></A>
<H3>6.3.3 使用<CODE>dpkg</CODE>救助</H3>
<P>如果系統的<CODE>dselect</CODE>(APT)受損無法完成安裝,可使用<CODE>dpkg</CODE>來恢復: <PRE> # cd /var/cache/apt/archives
# dpkg -i libc6* libdb2* perl*
# dpkg -i apt* dpkg* debconf*
# dpkg -i * # 直至不再出錯
</PRE>
<P>如果軟件包丟失,用下述方法從<CODE><A
href="http://www.debian.org/misc/README.mirrors">鏡像源</A></CODE>下載: <PRE> # mc # use "FTP link" pointing to Debian FTP server
</PRE>
<P>現在,在HTTP/FTP服務器上,軟件包的真正位置不再是傳統的<CODE>/dist</CODE>目錄而是新的<CODE>/pool</CODE>目錄。(參閱<A
href="http://qref.sourceforge.net/Debian/reference/ch-system.zh-cn.html#s-pools"><SAMP>pool</SAMP>目錄,
第 2.1.10 節</A>)
<P>然后開始安裝: <PRE> # dpkg -i /var/cache/apt/archives/<VAR>packagefile.deb</VAR>
</PRE>
<P>對于壞關聯,可這樣解決: <PRE> # dpkg --ignore-depends=<VAR>package1</VAR>,... -i <VAR>packagefile.deb</VAR>
# dpkg --force-depends -i <VAR>packagefile.deb</VAR>
# dpkg --force-depends --purge <VAR>package</VAR>
# dpkg --force-confmiss -i <VAR>packagefile.deb</VAR> # Install missing conffile
</PRE>
<HR>
<A name=s-recover-status></A>
<H3>6.3.4 恢復軟件包選擇狀態的數據</H3>
<P>如果<CODE>/var/lib/dpkg/status</CODE>因為某種原因壞掉了,Debian系統將會完全丟失軟件包選擇狀態的數據。趕快到<CODE>/var/lib/dpkg/status-old</CODE>或<CODE>/var/backups/dpkg.status.*</CODE>下找找舊的<CODE>/var/lib/dpkg/status</CODE>文件。
<P>將<CODE>/var/backups/</CODE>放在其它的分區是個好習慣,因為該目錄包含了許多非常重要的系統數據。
<P>如果舊的<CODE>/var/lib/dpkg/status</CODE>文件也壞了,仍可以從<CODE>/usr/share/doc/</CODE>下的目錄進行恢復這些信息。
<PRE> # 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
</PRE>
<HR>
<A name=s-rescue-var></A>
<H3>6.3.5 <CODE>/var</CODE>被刪除后如何恢復系統</H3>
<P><CODE>/var</CODE>目錄包含著定時更新的數據如mail,它們很容易遭破壞。將目錄放到別的分區可降低風險,如果最壞的事情發生了,可以通過重建<CODE>/var</CODE>目錄來挽救Debian系統。
<P>從相同或舊版本的最簡Debian系統中取得<CODE>/var</CODE>目錄的內容框架,例如<CODE><A
href="http://people.debian.org/~osamu/pub/">var.tar.gz</A></CODE>,然后它放入受損系統的root目錄,接著
<PRE> # cd /
# mv var var-old # 如果剩有有用內容
# tar xvzf var.tar.gz # 使用Woody框架文件
# aptitude # 或用dselect
</PRE>
<P>上述步驟可使系統恢復工作。使用<A
href="http://qref.sourceforge.net/Debian/reference/ch-package.zh-cn.html#s-recover-status">恢復軟件包選擇狀態的數據,
第 6.3.4 節</A>中描述的技術加速軟件包選擇數據的恢復。([FIXME]:該過程需要更多的實踐來檢驗)
<HR>
<A name=s-un-bootable></A>
<H3>6.3.6 為無法啟動的系統安裝軟件包</H3>
<P>使用Debian急救軟盤/CD或從多啟動Linux系統其它分區啟動。 See <A
href="http://qref.sourceforge.net/Debian/reference/ch-tips.zh-cn.html#s-booting">啟動系統,
第 8.1 節</A>. 將無法啟動的系統掛載到<CODE>/target</CODE>并使用<CODE>dpkg</CODE>的chroot安裝模式。 <PRE> # dpkg --root /target -i <VAR>packagefile.deb</VAR>
</PRE>
<P>接下來就可以著手配置并解決問題。
<P>如是只是由于<CODE>lilo</CODE>損壞而造系統無法啟動,可使用標準Debian急救盤啟動。假設你的root分區位于<CODE>/dev/hda12</CODE>且想使用runlevel
3,在啟動提示符輸入: <PRE> boot: rescue root=/dev/<VAR>hda12</VAR> 3
</PRE>
<P>這樣,你就可以使用軟盤中內核啟動系統,新系統的功能基本齊全。(可能丟失某些內核特性或模塊)
<HR>
<A name=s6.3.7></A>
<H3>6.3.7 如果<CODE>dpkg</CODE>命令出錯該怎么辦</H3>
<P>如果<CODE>dpkg</CODE>損壞就不能安裝任何<SAMP>.deb</SAMP>文件。下面的操作可幫助你修復這種狀況。(在第一行,你可將“links”替換成你喜歡的瀏覽器。)
<PRE> $ links http://<VAR>http.us.debian.org</VAR>/debian/pool/main/d/dpkg/
... 下載完好的dpkg_<VAR>version</VAR>_<VAR>arch</VAR>.deb
$ su
password: *****
# ar x dpkg_<VAR>version</VAR>_<VAR>arch</VAR>.deb
# mv data.tar.gz /data.tar.gz
# cd /
# tar xzfv data.tar.gz
</PRE>
<P>對<SAMP>i386</SAMP>,亦可用<SAMP>http://packages.debian.org/dpkg</SAMP>作為URL。
<HR>
<A name=s-debian-package></A>
<H2>6.4 Debian必殺技</H2>
<P>有了這些命令的<STRONG>啟迪</STRONG>,你將會從無休止的升級沖突的地獄中解放出來,達到Debian<STRONG>天堂</STRONG>。
:-)
<HR>
<A name=s-info-file></A>
<H3>6.4.1 文件信息</H3>
<P>查找特定文件所屬的軟件包: <PRE> $ dpkg {-S|--search} pattern # search for pattern in installed packages
$ zgrep -e pattern <VAR>/local/copy/of/debian/woody/Contents-i386.gz</VAR>
# find filename-pattern of files in the debian archive
</PRE>
<P>或使用專門的軟件包命令: <PRE> # apt-get install dlocate
# conflicts with slocate (secure version of locate)
$ dlocate <VAR>filename</VAR> # 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 <VAR>pattern</VAR>
# search for pattern in all packages, installed or not
</PRE>
<HR>
<A name=s-info-package></A>
<H3>6.4.2 軟件包信息</H3>
<P>搜索并顯示包文件的信息。編輯<CODE>/etc/apt/sources.list</CODE>,讓APT指向正確的包文件。如果想了解testing/unstable中的相應軟件包與當前系統安裝的軟件包有何差別,使用<SAMP>apt-cache
policy</SAMP>—更好。 <PRE> # apt-get check # 更新緩沖區并檢查損壞的軟件包
$ apt-cache search <VAR>pattern</VAR> # 按文本描述搜索軟件包
$ apt-cache policy <VAR>package</VAR> # 軟件包的priority/dists信息
$ apt-cache show -a <VAR>package</VAR> # 顯示所有dists中軟件包描述信息
$ apt-cache showsrc <VAR>package</VAR> # 顯示相應源碼包的信息
$ apt-cache showpkg <VAR>package</VAR> # 軟件包調試信息
# dpkg --audit|-C # 搜索未完成安裝的軟件包
$ dpkg {-s|--status} <VAR>package</VAR> ... # 已安裝軟件包描述
$ dpkg -l <VAR>package</VAR> ... # 已安裝軟件包的狀態(每個占一行)
$ dpkg -L <VAR>package</VAR> ... # 列出軟件包安裝的文件的名稱
</PRE>
<P>Woody發布版沒有為<SAMP>apt-cache showsrc</SAMP>建檔,但該命令可用:)
<P>你也這可這樣查看軟件包信息(我用<SAMP>mc</SAMP>瀏覽): <PRE> /var/lib/apt/lists/*
/var/lib/dpkg/available
</PRE>
<P>比較下面的文件可以確切了解最近的安裝過程對系統造成了那些改變。 <PRE> /var/lib/dpkg/status
/var/backups/dpkg.status*
</PRE>
<HR>
<A name=s-apt-get-auto></A>
<H3>6.4.3 使用APT進行全自動系統安裝</H3>
<P>進行全自動安裝,要在<CODE>/etc/apt/apt.conf</CODE>中加上一行: <PRE> Dpkg::Options {"--force-confold";}
</PRE>
<P>另一種等階的方法是運行<SAMP>apt-get -q -y
<VAR>packagename</VAR></SAMP>。這種方法可能產生嚴重的負作用,所以使用起來要小心。參閱<CODE>apt.conf(5)</CODE>和<CODE>dpkg(1)</CODE>。
<P>安裝完畢以后,可以用<A
href="http://qref.sourceforge.net/Debian/reference/ch-package.zh-cn.html#s-reconfigure">重新配置已安裝軟件包,
第 6.4.4 節</A>中的方法配置特定的軟件包。
<HR>
<A name=s-reconfigure></A>
<H3>6.4.4 重新配置已安裝軟件包</H3>
<P>使用下列方法重新配置已安裝軟件包。 <PRE> # dpkg-reconfigure --priority=<VAR>medium</VAR> <VAR>package</VAR> [...]
# dpkg-reconfigure --all # 重新配置所有的軟件包
# dpkg-reconfigure locales # 生成別的locales
# dpkg-reconfigure --p=<VAR>low</VAR> xserver-xfree86 # 重新配置X服務器
</PRE>
<P>如果你想永久改變<CODE>debconf</CODE>對話框模式,可這么做。
<P>某些程序用于生成特殊的配置腳本。 <PRE> apt-setup - 創建/etc/apt/sources.list
install-mbr - 安裝主引導(Master Boot Record)管理器
tzconfig - 設定本地時間
gpmconfig - 設置gpm鼠標daemon
sambaconfig - 在Potato中配置Samba(Woody使用debconf來配置)
eximconfig - 配置Exim (MTA)
texconfig - 配置teTeX
apacheconfig - 配置Apache (httpd)
cvsconfig - 配置CVS
sndconfig - 配置聲音系統
...
update-alternatives - 設定默認啟動命令,例如設定vi啟動vim
update-rc.d - System-V init腳本管理工具
update-menus - Debian菜單系統
...
</PRE>
<HR>
<A name=s-remove></A>
<H3>6.4.5 刪除軟件包</H3>
<P>刪除軟件包但保留其配置文件: <PRE> # apt-get remove <VAR>package</VAR> ...
# dpkg --remove <VAR>package</VAR> ...
</PRE>
<P>刪除軟件包并刪除配置文件: <PRE> # apt-get remove --purge <VAR>package</VAR> ...
# dpkg --purge <VAR>package</VAR> ...
</PRE>
<HR>
<A name=s-hold></A>
<H3>6.4.6 阻止舊軟件包升級</H3>
<P>舉個例子,要阻止<CODE>libc6</CODE>和<CODE>libc6-dev</CODE>通過<CODE>dselect</CODE>或使用<SAMP>apt-get
-u upgrade <VAR>package</VAR></SAMP>命令升級,可執行: <PRE> # echo -e "libc6 hold\nlibc6-dev hold" | dpkg --set-selections
</PRE>
<P>這種方法不影響<SAMP>apt-get -u install
<VAR>package</VAR></SAMP>命令操作。要阻止<SAMP>apt-get -u upgrade
<VAR>package</VAR></SAMP>或<SAMP>apt-get -u
dist-upgrade</SAMP>命令對軟件包執行的強制自動降級行為,可在<CODE>/etc/apt/preferences</CODE>中加上: <PRE> Package: libc6
Pin: release a=stable
Pin-Priority: 2000
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -