📄 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 + -