搜索
  回 操作系统
8905835帖:第6 章- Ubuntu 软件包管理 热点 [人气值:1437 得分:0]   [大字体 中字体 小字体 可以跟贴

社区公历: 2008-5-6 0:43:15 nkyqsl 这样 地写道: 繁體 | 给好友推荐 | 收 藏 | 返 回 | 全部展开
 arrangement 排列 woodpecker   [5wudpekE]   n.啄木鸟

第6 章- 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 节中描述的使用方法非常适合于需要同时确保系统的稳定性和使

用最新软件的情况。

6.1 介绍

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

的威力吧:-)

6.1.1 主要的包管理工具

dpkg – Debian 包安装工具

apt-get – APT 的命令行前端

aptitude – APT 的高级的字符和命令行前端

synaptic – 图形界面的APT 前端

dselect – 使用菜单界面的包管理工具

tasksel – Task 安装工具

这些工具不是用来取代对方的,比如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 节.

63

6.1.2 方便的工具

dpkg-reconfigure - 重新配置已安装的软件包

(如果它是使用debconf 进行配置的)

dpkg-source - 管理源码包

dpkg-buildpackage - 自动生成包文件

apt-cache - 在本地缓冲区检查包文件

6.2 Ubuntu 软件包管理基础

6.2.1 设置APT

参考准备升级工作, 第5.2 节来设置sources.list。请参考Ubuntu 系统安装提示,

第3 章, 发行版升级到Breezy、Dapper 或Edgy, 第5 章, 和应急的编辑器, 第11.2

节.

6.2.2 安装tasks

你可以安装一些软件包集合,这些集合是由使Ubuntu 系统满足某些特定用途的典型软件包

组成的。这些集合被称为“tasks”。

在初始化安装中,安装tasks 最简单的方法就是使用tasksel。注意在使用之前,你需要

运行

dselect update

建议使用aptitude 来安装tasks。它能让你在选择好tasks 并准备安装之前,删除

tasks 中的某些软件包。

6.2.3 aptitude

aptitude 是全新的可菜单操作的包安装工具,和dselect 类似,但是是针对APT 从头设

计的。从大多数参数来讲,aptitude 完全可以作为apt-get 的一个兼容的代替品。参阅

aptitude(1) 和/usr/share/doc/aptitude/README.

一旦开始使用aptitude,你最好继续使用它,而不是选择其他替代工具。否则你将失去

aptitude 包存的软件安装清单,你就不能享受自动删除多余软件包的功能了。

全屏状态下aptitude 接受单键的命令,大多数是小写的。主要的几个功能键如下:

按键动作

F10 菜单

? 按键命令帮助(完整的清单)

u 更新软件包信息

+ 标记软件包为升级或者新安装

- 标记软件包为删除(保留配置文件)

_ 标记软件包为完全删除(删除配置文件)

=== 保持软件包的当前版本,阻止其被升级

U 标记所有可以升级的软件包为升级

64

g 下载和安装选择的软件包

q 退出当前屏幕,保存改变

x 退出当前屏幕,忽略改变

Enter 查看一个软件包的信息

C 查看一个软件包的更新日志

l 改变软件包树状显示限制

/ 搜索第一个匹配的软件包

\ 重复最后一次搜索

和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 功能。普通用户都可以执行,直到安装或删除

软件的时候再取得管理员权限。

6.2.4 dselect

dselect 一直是主要的包维护工具。你可以考虑用aptitude 代替。

当你启动程序的时候,dselect 会自动选择所有“Required”“ Important”和“Standard”

的包。

dselect 的用户界面是有些奇怪,但是大部分人已经习惯了。它有四个主要命令: (指令

都是大写的!):

按键动作

Q 退出。确认当前的选择并退出。

(忽略依赖关系)

R 撤销! 我不是那个意思。

D 不管他!我不管你dselect 怎么想的,照做就好了!

U 都照建议的来做

使用D 和Q,你可以选择有冲突的选项。请小心使用这个命令。

在/etc/dpkg/dselect.cfg 中加上一行“expert”来减少干扰。

如果你的机器运行dselect 的速度很慢,你可以考虑在速度快一点的机器上运行dselect,

确定你要安装的软件包之后,在慢的机器上通过apt-get 来安装它们。

65

6.2.5 使用APT 来维护发行版本

请编辑/etc/apt/preferences 并加入以下内容来维持系统为dapper 版本:

Package: *

Pin: release a=edgy

Pin-Priority: 800

Package: *

Pin: release a=dapper

Pin-Priority: 600

更多复杂的例子请参考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 节。

从某个发行版本降级到先前的发行版本也是不被支持的,而且这样做往往造成很多问题。不

过你愿意冒险的话,作为最后的手段这样做也是值得的。

6.2.6 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

66

通过设置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 设置为默认行为:

$ cat >> /etc/apt/apt.conf << .

// Always show packages to be upgraded (-u)

APT::Get::Show-Upgraded "true";

.

使用--no-act 可进行模拟升级,并不是进行真正的升级行为。

6.3 Ubuntu 生存命令

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

6.3.1 检测程序错误寻求帮助

如你使用某个软件包出现问题,在寻求帮助或发送错误报告之前请确认查看过下列站点

(lynx, links 和w3m 都很好用):

$ lynx https://launchpad.net/distros/ubuntu/+bugs/

$ lynx https://launchpad.net/distros/ubuntu/+bugs/package-name # 如果你知道软

件包的名字

$ lynx https://launchpad.net/distros/ubuntu/+bugs/bugnumber # 如果你知道错

误序号

67

在Google(www.google.com)中使用关键字“site:launchpad.net”搜索。

如有疑问,可阅读帮助文件。设置CDPATH 如下:

export CDPATH=.:/usr/local:/usr/share/doc

然后输入

$ cd packagename

$ pager README.Debian # 如果存在的话

$ mc

更多技术支持资源列在Debian 技术支持, 第15 章。

6.3.2 APT 升级错误以及解决方法

从edgy/dapper 进行升级时可能出现升级, 第5.3 节中提到的软件包关联问题。多数情

况下,是因为升级的软件包所需的新增的关联包没有安装。可使用如下方法解决:

# aptitude dist-upgrade

如果这招无效,可以重复下面的方法至到问题解决:

# aptitude -f upgrade # 即使遇到错误也继续upgrade

... 或

# aptitude -f dist-upgrade # 即使遇到错误也继续dist-upgrade

一些的确存在问题的升级脚本会引起持续出错。最好的解决方法是检查该软件包的安装脚本

/var/lib/dpkg/info/packagename.{post-,pre-}{install,removal} 然后运行:

# dpkg --configure -a # 配置所有安装的软件包

如果脚本报告缺少配置文件,查看一下/etc 中相关的配置文件。如果配置文件有.dpkgnew

扩展名(或其它类似的扩展名),去掉(mv)它的扩展名。

从edgy/dapper 进行升级时可能出现软件包关联问题。可用这个方法智取:

# aptitude -f install package # 重载坏关联

还可以用equivs 包来解决此类问题。参阅/usr/share/doc/equivs/README.Debian 和

equivs 软件包, 第6.5.2 节。

6.3.3 使用dpkg 救助

如果你在使用APT 的时候遇到死胡同了,那么可以从Ubuntu 的镜像站点下载软件包并使

68

用dpkg 来安装。如果你不能访问网络,可以在/var/cache/apt/archives/ 中找到被缓存

的软件包。

# dpkg -i fetchmail_6.2.5-4_i386.deb

如果你用这种方法安装软件包,但是遇到了依赖问题安装失败了,并且你确实需要安装这个

软件包。你可以用dpkg 的--ignore-depends,--force-depends 和其他参数来安装软件

包。dpkg(8) 有更详细的介绍。

6.3.4 恢复软件包选择状态的数据

如果/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/ 下的目录进行

恢复这些信息。

# ls /usr/share/doc | \

grep -v [A-Z] | \

grep -v '^texmf$' | \

grep -v '^debian$' | \

awk '{print $1 " install"}' | \

dpkg --set-selections

# dselect --expert # 重新安装系统,如果需要的话去除一些选项

6.3.5 /var 崩溃之后如何恢复系统

/var 目录包含着定时更新的数据如mail,它们很容易遭破坏。将目录放到别的分区可降低

风险,如果最坏的事情发生了,可以通过重建/var 目录来挽救Ubuntu 系统。

从相同或旧版本的最简Ubuntu 系统中取得/var 目录的内容框架,例如var.tar.gz,然

后它放入受损系统的root 目录,接着

# cd /

# mv var var-old # 如果里面还有其他有用资料的话

# tar xvzf var.tar.gz # 使用Woody 框架文件

# aptitude # 或是用dselect

上述步骤可使系统恢复工作。使用恢复软件包选择状态的数据, 第6.3.4 节中描述的技

术加速软件包选择数据的恢复。([FIXME]:该过程需要更多的实践来检验)

6.3.6 为无法启动的系统安装软件包

使用Ubuntu 急救软盘/CD 或从多启动Linux 系统其它分区启动。参阅启动系统, 第

69

8.1 节. 将无法启动的系统挂载到/target 并使用dpkg 的chroot 安装模式。

# dpkg --root /target -i packagefile.deb

接下来就可以着手配置并解决问题。

如是只是由于lilo 损坏而造系统无法启动,可使用标准Ubuntu 急救盘启动。假设你的

root 分区位于/dev/hda12 且想使用runlevel 3,在启动提示符输入:

boot: rescue root=/dev/hda12 3

这样,你就可以使用软盘中内核启动系统,新系统的功能基本齐全。(可能丢失某些内核特

性或模块)

6.3.7 如果dpkg 命令出错怎么办

如果dpkg 损坏就不能安装任何.deb 文件。下面的操作可帮助你修复这种状况。(在第一

行,你可将“links”替换成你喜欢的浏览器。)

$ links http://archive.ubuntu.com/ubuntu/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

对i386,亦可用http://packages.ubuntu.com/dpkg 作为URL。

6.4 Ubuntu 必杀技

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

:-)

6.4.1 文件信息

在已安装的软件包中许找特定文件所属的软件包:

$ dpkg {-S|--search} pattern

或者搜索Ubuntu archive:

$ wget http://archive.ubuntu.com/ubuntu/dists/dapper/Contents-i386.gz

$ zgrep -e pattern Contents-i386.gz

或是用专门的软件包命令:

70

# aptitude install dlocate

# 和slocate 冲突(locate 的安全版本)

$ dlocate filename # dpkg -L 和dpkg -S 的高效代替品

...

# aptitude install auto-apt # 请求式软件包安装工具

# auto-apt update # 为auto-apt 建立db 文件

$ auto-apt search pattern

# 在所有软件包中搜索pattern,不论安装与否

6.4.2 软件包信息

搜索并显示包文件的信息。编辑/etc/apt/sources.list,让APT 指向正确的包文件。如

果想了解dapper/edgy 中的相应软件包与当前系统安装的软件包有何差别,使用aptcache

policy — 更好。

# apt-get check # 更新缓冲区并检查损坏的软件包

$ apt-cache search pattern # 按文本描述搜索软件包

$ apt-cache policy package # 软件包的priority/dists 信息

$ apt-cache show -a package # 显示所有dists 中软件包描述信息

$ apt-cache showsrc package # 显示相应源码包的信息

$ apt-cache showpkg package # 软件包调试信息

# dpkg --audit|-C # 搜索未完成安装的软件包

$ dpkg {-s|--status} package ... # 已安装软件包描述

$ dpkg -l package ... # 已安装软件包的状态(每个占一行)

$ dpkg -L package ... # 列出软件包安装的文件的名称

你也这可这样查看软件包信息(我用mc 浏览):

/var/lib/apt/lists/*

/var/lib/dpkg/available

比较下面的文件可以确切了解最近的安装过程对系统造成了那些改变。

/var/lib/dpkg/status

/var/backups/dpkg.status*

6.4.3 使用APT 无人执守安装

使用APT 无人执守安装,要在/etc/apt/apt.conf 中加上一行: /etc/apt/apt.conf:

Dpkg::Options {"--force-confold";}

另一种等价的方法是运行apt-get -q -y packagename。这种方法可能产生严重的负作用,

所以使用起来要小心。参阅apt.conf(5)和dpkg(1)。

安装完毕以后,可以用重新配置已安装的软件包, 第6.4.4 节中的方法配置特定的软件

71

包。

6.4.4 重新配置已安装的软件包

使用下列方法重新配置已安装的软件包。

# dpkg-reconfigure --priority=medium package [...]

# dpkg-reconfigure --all # 重新配置所有的软件包

# dpkg-reconfigure locales # 生成额外的locales

# dpkg-reconfigure --p=low xserver-xfree86 # 重新配置X 服务器

如果你想永久改变debconf 对话框模式,可这么做。

某些程序用于生成特殊的配置脚本。

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 菜单系统

...

6.4.5 删除和清除软件包

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

# aptitude remove package ...

# dpkg --remove package ...

删除软件包并清除配置文件:

# aptitude purge package ...

# dpkg --purge package ...

6.4.6 阻止旧软件包升级

举个例子,要阻止libc6 和libc6-dev 通过dselect 或使用aptitude install package

命令升级,可执行:

# echo -e "libc6 hold\nlibc6-dev hold" | dpkg --set-selections

这种方法不影响aptitude install package 命令操作。要阻止aptitude upgrade

package 或aptitude dist-upgrade 命令对软件包执行的强制自动降级行为,可在

/etc/apt/preferences 中加上:

Package: libc6

Pin: release a=dapper

Pin-Priority: 2000

这里“Package:”后不能使用通配符如“libc6*”,如果要保持所有与glibc 源码包相关的

二进制包的版本同步,可以明确的列出它们。

该命令可以显示处于“阻止”状态的软件包:

dpkg --get-selections "*"|grep -e "hold$"

6.4.7 breezy/dapper/edgy 混合系统

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

$ apt-show-versions | fgrep /dapper | wc

... 你有多少testing 软件包

$ apt-show-versions -u

... 列出可升级的软件包

$ aptitude install `apt-show-versions -u -b | fgrep /edgy`

... 将所有edgy 软件包升级到最新版本

6.4.8 删除缓存包文件

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

可使用:

# aptitude autoclean # 仅删除无用的包

# aptitude clean # 删除所有的包

6.4.9 记录/拷贝系统配置

对软件包选择情况进行本地备份:

$ dpkg --get-selections "*" >myselections # 或使用\*

"*" 使myselections 包含那些被指定“完全删除(purge)”的文件。

你可将这个文件发送到另一台电脑并在那儿按文件中的选择进行软件包安装。

# dselect update

# dpkg --set-selections <myselections

# apt-get -u dselect-upgrade # 或者dselect install

6.4.10 向breezy 系统引入软件包

对breezy 系统进行部分升级,在软件运行环境中重新编译源码的确是个诱人的想法,这样

可以避免由于关联关系不得不对大量软件包升级。首先,将下列镜像源加入

/etc/apt/sources.list:

deb-src http://archive.ubuntu.com/ubuntu dapper \

main multiverse restricted universe

deb-src http://archive.ubuntu.com/ubuntu edgy \

main multiverse restricted universe

由于屏幕输出的限制,上述每条deb-src 命令均分成了2 行,实际上在sources.list 中

它们均为单行。

然后下载源码并在本地生成软件包:

$ apt-get update # 更新软件包搜索列表

$ apt-get source package

$ dpkg-source -x package.dsc

$ cd package-version

... 查找需要的软件包(编译所需的关联包列在.dsc 文件中)并安装它们,

你还需要“fakerroot”软件包。

$ dpkg-buildpackage -rfakeroot

……或者(没有签名)

$ dpkg-buildpackage -rfakeroot -us -uc # 如果需要,再使用“debsign”

……然后安装

$ su -c "dpkg -i packagefile.deb"

通常,需要安装一些带“-dev” 后缀的软件包以满足关联关系。debsign 在devscripts 软

件包中。auto-apt 可以轻松解决这些关联问题。请使用fakeroot,如是没有必要,就别使

用root 帐号。

现在,这些关联问题已被简化。例如,编译pine 源码包:

# apt-get build-dep pine

# apt-get source -b pine

6.4.11 本地软件包文件

为了创建与APT 和dselect 系统兼容的本地软件包文件,需要创建Packages,包中文件

要放在特定的目录树中。

Ubuntu 官方包文件喜欢存放于本地deb 仓库,下面就来创建仓库:

# aptitude install dpkg-dev

# cd /usr/local

# install -d pool # 软件包存放的物理地址

# install -d dists/edgy/main/binary-i386

# ls -1 pool | sed 's/_.*$/ priority section/' | uniq > override

# 编辑override # 调整priority and section

# dpkg-scanpackages pool override /usr/local/ \

> dists/edgy/main/binary-i386/Packages

# cat > dists/unstable/main/Release << EOF

Archive: edgy

Version: 3.0

Component: main

Origin: Local

Label: Local

Architecture: i386

EOF

# echo "deb file :/usr/local unstable main" \

>> /etc/apt/sources.list

还有一种快速但是肮脏的方法来创建本地deb 仓库:

# aptitude 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 中设置相应镜像源入口地址,就可以通过HTTP 或FTP 方式远

程访问存放在其中的包文件了。

6.4.12 转换或安装外来的二进制软件包

alien 可将其它格式的二进制软件包如Redhat 的rpm、Stampede 的slp 、Slackware 的

tgz 和Solaris 的pkg 等转化成Ubuntu 的deb 格式软件包,如果你想在自己的系统上

使用别的Linux 发行版中的软件包,可使用alien 将它转化成系统首选的软件包格式后安

装。alien 还支持LSB 的软件包。

6.4.13 自动安装命令

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

$ sudo auto-apt update

... 升级数据库

$ auto-apt -x -y run

进入auto-apt 模式:/bin/bash

退出这个命令继而退出auto-apt 模式。

$ less /usr/share/doc/med-bio/copyright # 访问不存在的文件

... 安装提供了这个文件的软件包。

... 同样安装依赖的包

6.4.14 校验已安装的软件包

debsums 可以校验已安装软件包的MD5 编码,对某些软件包没有可用的MD5 编码,系统管

理员可使用一个临时的解决办法:

# cat >>/etc/apt/apt.conf.d/90debsums

DPkg::Post-Install-Pkgs {"xargs /usr/bin/debsums -sg";};

^D

per Joerg Wendland joergland@debian.org (untested).

6.4.15 优化sources.list

简而言之,我尝试过用各种优化方法来创建sources.list,但任何一种方法对我这个住在

美国的人来说都没有明显的改善。最后我还是用apt-setup 手工选择近一点的站点。

apt-spy 会根据站点回应时间和带宽自动创建sources.list。netselect-apt 会创建一个

更完整的sources.list 文件,但它使用更落后的方法来选择镜像站点(比较ping 时间)。

# aptitude install apt-spy

# cd /etc/apt ; mv sources.list sources.list.org

# apt-spy -d dapper -l sources.apt

6.5 其他Ubuntu 的特性

6.5.1 dpkg-divert 命令

使用文件转移(diversions)的方法可以强令dpkg 将文件安装到转移目录而非默认目录。

对于某个引起冲突的文件,可以在Ubuntu 软件包脚本中使用Diversions 将它安装到别的

目录。系统管理员还可以使用diversion 来重载软件包配置文件,或者用来保留某些旧配

置文件(这些文件没有在conffiles 中登记)当安装新版软件时这些文件会被覆盖。(参阅

保存本地配置, 第2.2.4 节)。

# dpkg-divert [--add] filename # 添加“转移”

# dpkg-divert --remove filename # 删除“转移”

记住,不到万不得已不要使用dpkg-divert。

6.5.2 equivs 软件包

如果你从源码编译程序,最好将它做成本地Ubuntu 化软件包(*.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 Alternative 命令

如果想用vi 来启动vim,请用update-alternatives:

# 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

Ubuntu alternatives 系统中的这些项目,都是以符号连接的形式存放在

/etc/alternatives 下的。

想设置你喜爱的X window 环境,执行update-alternatives 来指定/usr/bin/xsession-

manager 和/usr/bin/x-window-manager。详情参阅自定义X 会话, 第9.4.5.1

节。

/bin/sh 是指向/bin/bash 或/bin/dash 的链接。想兼容旧的Bash 脚本,使用

/bin/bash 比较保险,但更好还是使用/bin/dash,因为它更符合POSIX 标准。升级到2.4

版Linux 内核,系统一般将它设置为/bin/dash。

6.5.4 运行级别Runlevel

安装好之后,大部分Ubuntu 软件包的服务被设定为在runlevel 2 到5 时运行。所以,

在没有定制过的Ubuntu 系统中,runleve 2、3、4、5、6 是没有区别的Ubuntu 保留这些

给本地管理员使用。自定义运行级别, 第2.4.3 节说明如何定制runlevels。这样的

runlevels 系统和其他流行的GNU/Linux 发行版本完全不同。你可能要做的改变之一就是

取消runlevel 2 上的xdm 和gdm,使得在完成启动之后X 显示管理去不会自动启动;然

后你可以通过切换到runlevel 3 来启动X 显示管理器。

参阅运行级别, 第2.4.2 节来获得更多关于runlevels 的信息。

6.5.5 停止daemon 服务

Ubuntu 发行版非常注重系统安全,并期望系统管理员能担此重任。它将系统的易用性放在

77

了第二位,许多daemon 服务都定位在最高安全级别,因而,默认安装状态下系统只启动最

少的(甚至没有)可用的服务。

如果拿不定把握(有关Exim、DHCP...),可执行ps aux 或检查/etc/init.d/* 和

/etc/inetd.conf 下的内容,还可以使用用PAM 来控制登录, 第9.2.1 节中提到的方法

检查/etc/hosts.deny。pidof 命令也很有用(参阅pidof(8))

在Ubuntu 系统中,默认状态下X11 不允许TCP/IP(远程)连接。参阅在TCP/IP 中使

用X, 第9.4.6 节,但是使用SSH 进行X 传送是允许的,参阅联接远程的X 服务器–

ssh, 第9.4.8 节。

【nkyqsl在他的大作中提到】

目录

第1 章- 序言......................................................4

1.1 官方文档......................."




本文地址:http://club2.guet.edu.cn/bbs/plan_disp.asp?topid=8905821&owner=E013&ID=8905835 复制
你对此贴的评价:

很有收获(2分)

较有收获(1分)

一般(0分)

  

二频道希望小学认捐开始,请点击    不良信息举报电话   二频永久域名:www.myclub2.com教育网域名:club2.gliet.edu.cn

 


人……累……类人就好……


本帖版权属于原作者所有,转载请与原作者联系并注明出处 - 第二频道综合教育社区 [202.193.**.***]
我的BLOG: 进入
个人收藏推荐: More...
  请用这14杯茶爱自己 营养美食 2008年5月13日
  UbuntuManual-linux for humen being! 操作系统 2008年5月7日
  感恩义卖 信息材料科学与工程系 2008年5月7日
  !!小狗小时候的小样!! 宠物乐园 2007年12月10日
  不是原创,我也不是愤愤, 原创图片类 2007年12月4日
我的原创: More...  
1. 爱,就是一杯温开水 恋爱季节 2008年9月21日 ..
2. UbuntuManual-linux for humen being! 操作系统 2008年5月6日 ..
3. 讨厌这样…… 恋爱季节 2007年12月4日 ..
4. 那个先转身的人 恋爱季节 2007年11月28日 ..
5. 只是个男人的唠叨…… 恋爱季节 2007年11月27日 ..
| 快速返回
相 关 帖 子 作 者 人气 发 表 时 间
UbuntuManual-linux for humen being! (15056字) nkyqsl [1472] 2008-5-6 0:31:38
   第1 章- 序言 (6506字) nkyqsl [922] 2008-5-6 0:32:05
   第2 章- Ubuntu 基础 (32558字) nkyqsl [976] 2008-5-6 0:34:47
   第3 章- Ubuntu 系统安装提示 (37504字) nkyqsl [1024] 2008-5-6 0:36:21
   第4 章- Ubuntu 指南 (49080字) nkyqsl [1221] 2008-5-6 0:41:17
   第5 章- 发行版升级到Breezy、Dapper 或Edgy (3886字) nkyqsl [945] 2008-5-6 0:42:13
   第6 章- Ubuntu 软件包管理 (33260字) nkyqsl [1438] 2008-5-6 0:43:15
   第7 章- Ubuntu 下的Linux 内核 (12674字) nkyqsl [1005] 2008-5-6 0:45:00
   第8 章- Ubuntu 小技巧 (49576字) nkyqsl [1262] 2008-5-6 0:45:43
   Re:第4 章- Ubuntu 指南 (476字) shumu [896] 2008-5-6 0:46:20
   第9 章- Ubuntu 系统微调 (95058字) nkyqsl [1413] 2008-5-6 0:46:45
   第10 章- 网络设置 (60852字) nkyqsl [1675] 2008-5-6 0:48:35
   第11 章- 编辑器 (12534字) nkyqsl [922] 2008-5-6 0:49:16
   第12 章- 系统版本控制 (14822字) nkyqsl [915] 2008-5-6 0:49:43
   第13 章- 编程 (38168字) nkyqsl [936] 2008-5-6 0:50:30
   第14 章- GnuPG (4938字) nkyqsl [1024] 2008-5-6 0:51:06
   第15 章- Ubuntu 技术支持 (14716字) nkyqsl [926] 2008-5-6 0:52:09
   附录A - 附录 (12608字) nkyqsl [992] 2008-5-6 0:53:27
   Re:UbuntuManual--linux for humen being! (498字) nkyqsl [1336] 2008-5-6 1:07:23
   Re:UbuntuManual-linux for humen being! (312字) ani [762] 2008-10-31 9:53:39
   Re:buntuManual--linux for humen being! (330字) ani [764] 2008-10-31 10:26:30

你没有登录或连接已超时

请重新登录

 

页面执行时间:171.875毫秒