超强悍Ubuntu 软件包管理

Ubuntu 软件包管理

高级包管理工具 aptitude 是目前首选的字符界面的 APT 前端程序。 它会记住哪些包是你安装的,哪些是为了满足依赖关系而安装的;在不被已安装包需要的情况下aptitude 会自动卸载后者。它内建一套高级的包过滤器,但是比较难上手。 synaptic 是目前首选的基于 GTK 的图形化 APT 前端程序。它的包过滤器比 aptitude 的好用多了。它包含了对 Debian Package Tags 的实验性支持。 为了减少 Ubuntu 仓库的网络负担和加快你下载的速度,你应该从 Ubuntu 镜像下载。 如果你需要在你本地网络的许多台机器上安装相同的包。在使用 APT 下载包的时候,请考虑使用 squid 来设置本地 HTTP 代理。必要的话,可以设置环境变量 http_proxy 或者在 /etc/apt/apt.conf 里面设置 http 的值。 尽管 apt_preferences(5) 中描述的 APT 的 pinning 功能非常强大,但造成的影响是难以察觉和管理的。你应该把它作为一个高级功能来看待。 在 chroot, 第 8.6.35 节 中描述的使用方法非常适合于需要同时确保系统的稳定性和使用最新软件的情况。

[编辑] 介绍

如果你没有精力阅读完所有的开发者文档,那么先看看本章的内容,然后开始体验 Ubuntu 的威力吧:-)

[编辑] 主要的包管理工具

这些工具不是用来取代对方的,比如 dselect 同时使用 APT 和 dpkg。 APT 使用 /var/lib/apt/lists/* 来跟踪可用的软件包,而 dpkg 使用的是 /var/lib/dpkg/available。如果你使用了 aptitude 或者其他 APT 前端来安装软件包,同时你希望使用 dselect 来安装软件包,请不要忘记使用 dselect 菜单上的 [U]pdate (或者运行”dselect update”) 来更新 /var/lib/dpkg/available。 在处理依赖关系上 apt-get 会自动下载安装依赖的软件包,但是不会处理所安装软件推荐的或者建议的软件包。 相反 aptitude 可以设置成安装所安装软件推荐的或者建议的软件包。 dselect 给使用者列出所安装软件推荐或建议的软件包,可以进行单独选择。 参阅 软件包依赖关系, 第 2.2.8 节.

[编辑] 方便的工具

[编辑] Ubuntu 软件包管理基础

[编辑] 设置 APT

参考 准备升级工作, 第 5.2 节 来设置 sources.list。 请参考 Ubuntu 系统安装提示, 第 3 章, 发行版升级到 Breezy、Dapper 或 Edgy, 第 5 章, 和 应急的编辑器, 第 11.2 节.

[编辑] 安装 tasks

你可以安装一些软件包集合,这些集合是由使 Ubuntu 系统满足某些特定用途的典型软件包组成的。 这些集合被称为“tasks”。 在初始化安装中,安装 tasks 最简单的方法就是使用 tasksel。 注意在使用之前,你需要运行 建议使用 aptitude 来安装 tasks。 它能让你在选择好 tasks 并准备安装之前,删除 tasks 中的某些软件包。

[编辑] aptitude

aptitude 是全新的可菜单操作的包安装工具,和 dselect 类似,但是是针对 APT 从头设计的。从大多数参数来讲,aptitude 完全可以作为 apt-get 的一个兼容的代替品。 参阅 aptitude(1) 和 /usr/share/doc/aptitude/README. 一旦开始使用 aptitude,你最好继续使用它,而不是选择其他替代工具。否则你将失去 aptitude 包存的软件安装清单,你就不能享受自动删除多余软件包的功能了。 全屏状态下 aptitude 接受单键的命令,大多数是小写的。主要的几个功能键如下: 和 apt-get 一样, aptitude 安装软件包的时候自动解决依赖问题。 aptitude 还能安装即将安装的软件包推荐或者建议的软件包。你通过 F10 -> 选项 -> 处理依赖关系 在菜单上更改这一默认设置。 aptitude 的其他特点如下:

  • aptitude 能访问所有版本的软件包。
  • aptitude 的动作记录在 /var/log/aptitude。
  • aptitude 能轻松的追踪陈旧的和本地建立的软件包,并在“过期的和在本地创建的软件包”上列出。
  • aptitude 内建强大的包搜索和显示功能。熟悉 mutt 的用户很容易上手,因为这个显示方法的灵感来源于 mutt。 参阅 /usr/share/doc/aptitude/README 中的 “SEARCHING, LIMITING, AND EXPRESSIONS”
  • aptitude 在全屏状态下有嵌入的 su 功能。普通用户都可以执行,直到安装或删除软件的时候再取得管理员权限。

[编辑] dselect

dselect 一直是主要的包维护工具。你可以考虑用 aptitude 代替。 当你启动程序的时候,dselect 会自动选择所有“Required”“Important”和“Standard”的包。 dselect 的用户界面是有些奇怪,但是大部分人已经习惯了。 它有四个主要命令: (指令都是大写的!): 使用 D 和 Q,你可以选择有冲突的选项。请小心使用这个命令。 在 /etc/dpkg/dselect.cfg 中加上一行“expert”来减少干扰。 如果你的机器运行 dselect 的速度很慢,你可以考虑在速度快一点的机器上运行 dselect,确定你要安装的软件包之后,在慢的机器上通过 apt-get 来安装它们。

[编辑] 使用 APT 来维护发行版本

请编辑 /etc/apt/preferences 并加入以下内容来维持系统为 dapper 版本: 更多复杂的例子请参考 apt_preferences(5),可以让您做更多的事情,例如安装 edgy 的软件包的同时还能把系统维持在 dapper。 关于限制特定软件在特定版本上,而其他软件随系统升级的设置在 examples subdirectory 找到,即 preferences.dapper 和 preferences.edgy。 如果你混用不同的发行版本,例如 dapper 和 breezy 或 edgy 和 dapper,你终究还是会安装上 dapper 或 edgy 版本的核心软件,例如 libc6,这样作无法确保系统中没有臭虫。你需要特别小心。 另外一个例子,preferences.breezy,会强制降级所有的软件到 breezy。 Ubuntu 不支持将某个 软件包降级到先前的发行版本。然而在新的软件包出问题时,你会发现你不得不安装旧的可用的软件包。你可以在本地的 /var/cache/apt/archives/ 或远端的 http://archive.ubuntu.com/ 中找到先前的版本。请参考 使用 dpkg 救助, 第 6.3.3 节。 从某个 发行版本降级到先前的发行版本也是不被支持的,而且这样做往往造成很多问题。不过你愿意冒险的话,作为最后的手段这样做也是值得的。

[编辑] aptitude, apt-get 和 apt-cache 命令

还是以上面使用 testing 发行版的用户为例,可使用下列命令来管系统:

  • aptitude upgrade (或 apt-get upgrade 或 aptitude dist-upgrade 或 apt-get dist-upgrade)

这样就会跟随 dapper 版本 — 它们会跟踪 dapper 版本的更新情况,对系统上所有软件包进行升级,并从 dapper 处重新分析依赖关系并安装相关的包。

  • apt-get dselect-upgrade

这个命令跟踪 dapper 版本 — 根据 dselect 的选择对系统上的软件包进行升级。

  • aptitude install package/edgy

从 edgy 中安装 package,并由 dapper 版本提供安装依赖的包。

  • aptitude install -t edgy package

通过设置 edgy 的 Pin-Priority 为 990,可以从 edgy 处安装 package 及其依赖的包。

  • apt-cache policy foo bar …

检查 foo bar … 软件包的状态。

  • aptitude show foo bar … | less (或 apt-cache show foo bar … | less)

查看 foo bar … 软件包的有关信息。

  • aptitude install foo=2.2.4-1

安装 foo 软件包的特定版本 2.2.4-1。

  • aptitude install foo bar-

安装 foo 软件包并删除 bar 软件包。

  • aptitude remove bar

删除 bar 软件包,但保留其配置文件。

  • aptitude purge bar

删除 bar 软件包及其所有配置文件。 在上面的例子中使用 -u 选项的作用是在实际升级之前将所有将要升级的软件包列出,并提示用户确认。下面的操作可将 -u 设置为默认行为: 使用 –no-act 可进行模拟升级,并不是进行真正的升级行为。

[编辑] Ubuntu 生存命令

掌握了这些知识,你就能够享受无尽的“升级”了 :-)

[编辑] 检测程序错误寻求帮助

如你使用某个软件包出现问题,在寻求帮助或发送错误报告之前请确认查看过下列站点 (lynx, links 和 w3m 都很好用): 在 Google(www.google.com)中使用关键字“site:launchpad.net”搜索。 如有疑问,可阅读帮助文件。设置 CDPATH 如下: 然后输入 更多技术支持资源列在 Debian 技术支持, 第 15 章。

[编辑] APT 升级错误以及解决方法

从 edgy/dapper 进行升级时可能出现 升级, 第 5.3 节 中提到的软件包关联问题。多数情况下,是因为升级的软件包所需的新增的关联包没有安装。可使用如下方法解决: 如果这招无效,可以重复下面的方法至到问题解决: 一些的确存在问题的升级脚本会引起持续出错。最好的解决方法是检查该软件包的安装脚本 /var/lib/dpkg/info/packagename.{post-,pre-}{install,removal} 然后运行: 如果脚本报告缺少配置文件,查看一下 /etc 中相关的配置文件。如果配置文件有 .dpkg-new 扩展名(或其它类似的扩展名),去掉(mv)它的扩展名。 从 edgy/dapper 进行升级时可能出现软件包关联问题。可用这个方法智取: 还可以用 equivs 包来解决此类问题。参阅 /usr/share/doc/equivs/README.Debian 和 equivs 软件包, 第 6.5.2 节。

[编辑] 使用 dpkg 救助

如果你在使用 APT 的时候遇到死胡同了,那么可以从 Ubuntu 的镜像站点下载软件包并使用 dpkg 来安装。如果你不能访问网络,可以在 /var/cache/apt/archives/ 中找到被缓存的软件包。 如果你用这种方法安装软件包,但是遇到了依赖问题安装失败了,并且你确实需要安装这个软件包。你可以用 dpkg 的 –ignore-depends,–force-depends 和其他参数来安装软件包。dpkg(8) 有更详细的介绍。

[编辑] 恢复软件包选择状态的数据

如果 /var/lib/dpkg/status 因为某种原因坏掉了,Ubuntu 系统将会完全丢失软件包选择状态的数据。赶快到 /var/lib/dpkg/status-old 或 /var/backups/dpkg.status.* 下找找旧的 /var/lib/dpkg/status 文件。 将 /var/backups/ 放在其它的分区是个好习惯,因为该目录包含了许多非常重要的系统数据。 如果旧的 /var/lib/dpkg/status 文件也坏了,仍可以从 /usr/share/doc/ 下的目录进行恢复这些信息。

[编辑] /var 崩溃之后如何恢复系统

/var 目录包含着定时更新的数据如 mail,它们很容易遭破坏。将目录放到别的分区可降低风险,如果最坏的事情发生了,可以通过重建 /var 目录来挽救 Ubuntu 系统。 从相同或旧版本的最简 Ubuntu 系统中取得 /var 目录的内容框架,例如 var.tar.gz,然后它放入受损系统的 root 目录,接着 上述步骤可使系统恢复工作。使用 恢复软件包选择状态的数据, 第 6.3.4 节 中描述的技术加速软件包选择数据的恢复。([FIXME]:该过程需要更多的实践来检验)

[编辑] 为无法启动的系统安装软件包

使用 Ubuntu 急救软盘 /CD 或从多启动 Linux 系统其它分区启动。 参阅 启动系统, 第 8.1 节. 将无法启动的系统挂载到 /target 并使用 dpkg 的 chroot 安装模式。 接下来就可以着手配置并解决问题。 如是只是由于 lilo 损坏而造系统无法启动,可使用标准 Ubuntu 急救盘启动。假设你的 root 分区位于 /dev/hda12 且想使用 runlevel 3,在启动提示符输入: 这样,你就可以使用软盘中内核启动系统,新系统的功能基本齐全。(可能丢失某些内核特性或模块)

[编辑] 如果 dpkg 命令出错怎么办

如果 dpkg 损坏就不能安装任何 .deb 文件。下面的操作可帮助你修复这种状况。(在第一行,你可将“links”替换成你喜欢的浏览器。) 对 i386,亦可用 http://packages.ubuntu.com/dpkg 作为 URL。

[编辑] Ubuntu 必杀技

有了这些命令的 启迪,你将会从无休止的升级冲突的地狱中解放出来,达到 Ubuntu 天堂。 :-)

[编辑] 文件信息

在已安装的软件包中许找特定文件所属的软件包: 或者搜索 Ubuntu archive: 或是用专门的软件包命令:

[编辑] 软件包信息

搜索并显示包文件的信息。编辑 /etc/apt/sources.list,让 APT 指向正确的包文件。如果想了解 dapper/edgy 中的相应软件包与当前系统安装的软件包有何差别,使用 apt-cache policy — 更好。 你也这可这样查看软件包信息(我用 mc 浏览): 比较下面的文件可以确切了解最近的安装过程对系统造成了那些改变。

[编辑] 使用 APT 无人执守安装

使用 APT 无人执守安装,要在 /etc/apt/apt.conf 中加上一行: /etc/apt/apt.conf: 另一种等价的方法是运行 apt-get -q -y packagename。这种方法可能产生严重的副作用,所以使用起来要小心。参阅 apt.conf(5)和 dpkg(1)。 安装完毕以后,可以用 重新配置已安装的软件包, 第 6.4.4 节 中的方法配置特定的软件包。

[编辑] 重新配置已安装的软件包

使用下列方法重新配置已安装的软件包。 如果你想永久改变 debconf 对话框模式,可这么做。 某些程序用于生成特殊的配置脚本。

[编辑] 删除和清除软件包

删除软件包但保留其配置文件: 删除软件包并清除配置文件:

[编辑] 阻止旧软件包升级

举个例子,要阻止 libc6 和 libc6-dev 通过 dselect 或使用 aptitude install package 命令升级,可执行: 这种方法不影响 aptitude install package 命令操作。要阻止 aptitude upgrade package 或 aptitude dist-upgrade 命令对软件包执行的强制自动降级行为,可在 /etc/apt/preferences 中加上: 这里“Package:”后不能使用通配符如“libc6*”,如果要保持所有与 glibc 源码包相关的二进制包的版本同步,可以明确的列出它们。 该命令可以显示处于“阻止”状态的软件包:

[编辑] breezy/dapper/edgy 混合系统

apt-show-versions 可以列出发行版中可用软件包的版本。

[编辑] 删除缓存包文件

使用 APT 安装软件包会在 /var/cache/apt/archives 目录留下缓存文件,要清除这些文件可使用:

[编辑] 记录/拷贝系统配置

对软件包选择情况进行本地备份: “*” 使 myselections 包含那些被指定“完全删除(purge)”的文件。 你可将这个文件发送到另一台电脑并在那儿按文件中的选择进行软件包安装。

[编辑] 向 breezy 系统引入软件包

对 breezy 系统进行部分升级,在软件运行环境中重新编译源码的确是个诱人的想法,这样可以避免由于关联关系不得不对大量软件包升级。首先,将下列镜像源加入 /etc/apt/sources.list: 由于屏幕输出的限制,上述每条 deb-src 命令均分成了 2 行,实际上在 sources.list 中它们均为单行。 然后下载源码并在本地生成软件包: 通常,需要安装一些带 “-dev” 后缀的软件包以满足关联关系。debsign 在 devscripts 软件包中。auto-apt 可以轻松解决这些关联问题。请使用 fakeroot,如是没有必要,就别使用 root 帐号。 现在,这些关联问题已被简化。例如,编译 pine 源码包:

[编辑] 本地软件包文件

为了创建与 APT 和 dselect 系统兼容的本地软件包文件,需要创建 Packages,包中文件要放在特定的目录树中。 Ubuntu 官方包文件喜欢存放于本地 deb 仓库,下面就来创建仓库: 还有一种快速但是肮脏的方法来创建本地 deb 仓库: 在 /etc/apt/sources.list 中设置相应镜像源入口地址,就可以通过 HTTP 或 FTP 方式远程访问存放在其中的包文件了。

[编辑] 转换或安装外来的二进制软件包

alien 可将其它格式的二进制软件包如 Redhat 的 rpm、Stampede 的 slp 、Slackware 的 tgz 和 Solaris 的 pkg 等转化成 Ubuntu 的 deb 格式软件包,如果你想在自己的系统上使用别的 Linux 发行版中的软件包,可使用 alien 将它转化成系统首选的软件包格式后安装。alien 还支持 LSB 的软件包。

[编辑] 自动安装命令

auto-apt 是一种请求式软件包安装工具。

[编辑] 校验已安装的软件包

debsums 可以校验已安装软件包的 MD5 编码,对某些软件包没有可用的 MD5 编码,系统管理员可使用一个临时的解决办法: per Joerg Wendland joergland@debian.org (untested).

[编辑] 优化 sources.list

简而言之,我尝试过用各种优化方法来创建 sources.list,但任何一种方法对我这个住在美国的人来说都没有明显的改善。最后我还是用 apt-setup 手工选择近一点的站点。 apt-spy 会根据站点回应时间和带宽自动创建 sources.list。netselect-apt 会创建一个更完整的 sources.list 文件,但它使用更落后的方法来选择镜像站点(比较 ping 时间)。

[编辑] 其他 Ubuntu 的特性

[编辑] dpkg-divert 命令

使用文件 转移(diversions)的方法可以强令 dpkg 将文件安装到 转移 目录而非默认目录。对于某个引起冲突的文件,可以在 Ubuntu 软件包脚本中使用 Diversions 将它安装到别的目录。系统管理员还可以使用 diversion 来重载软件包配置文件,或者用来保留某些旧配置文件(这些文件没有在 conffiles 中登记)当安装新版软件时这些文件会被覆盖。(参阅 保存本地配置, 第 2.2.4 节)。 记住,不到万不得已不要使用 dpkg-divert。

[编辑] equivs 软件包

如果你从源码编译程序,最好将它做成本地 Ubuntu 化软件包(*.deb)。最新的方法是使用 equivs。

[编辑] 来源:weixin_34200628

声明:本站部分文章及图片转载于互联网,内容版权归原作者所有,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2011年3月21日
下一篇 2011年3月21日

相关推荐