红联Linux门户
Linux帮助
当前位置: 红联Linux门户 > Debian

Debian 必杀技

发布时间:2007-07-16 22:53:42来源:红联作者:bliunxrf
有了这些命令的启迪,你将会从无休止的升级冲突的地狱中解放出来,达到 Debian 天堂。

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

$ dpkg {-S|--search} pattern

或者搜索 Debian archive:

$ wget http://ftp.us.debian.org/debian/dists/sarge/Contents-i386.gz
$ zgrep -e pattern Contents-i386.gz

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

# 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,不论安装与否


--------------------------------------------------------------------------------

搜索并显示包文件的信息。编辑 /etc/apt/sources.list,让 APT 指向正确的包文件。如果想了解 testing/unstable 中的相应软件包与当前系统安装的软件包有何差别,使用 apt-cache 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 ... # 列出软件包安装的文件的名称

Woody 发布版没有为 apt-cache showsrc 建档,但该命令可用:)

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

/var/lib/apt/lists/*
/var/lib/dpkg/available

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

/var/lib/dpkg/status
/var/backups/dpkg.status*

使用 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 节 中的方法配置特定的软件包。

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

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

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

# aptitude remove package ...
# dpkg --remove package ...

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

# aptitude purge package ...
# dpkg --purge package ...

举个例子,要阻止 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=stable
Pin-Priority: 2000

这里“Package:”后不能使用通配符如“libc6*”,如果要保持所有与 glibc 源码包相关的二进制包的版本同步,可以明确的列出它们。

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

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

stable/testing/unstable 混合系统
apt-show-versions 可以列出发行版中可用软件包的版本。

$ apt-show-versions | fgrep /testing | wc
... 你有多少 testing 软件包
$ apt-show-versions -u
... 列出可升级的软件包
$ aptitude install `apt-show-versions -u -b | fgrep /unstable`
... 将所有 unstable 软件包升级到最新版本

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

# aptitude autoclean # 仅删除无用的包
# aptitude clean # 删除所有的包

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

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

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

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

# dselect update
# dpkg --set-selections # apt-get -u dselect-upgrade # 或者 dselect install

stable 系统引入软件包
对 stable 系统进行部分升级,在软件运行环境中重新编译源码的确是个诱人的想法,这样可以避免由于关联关系不得不对大量软件包升级。首先,将下列镜像源加入 /etc/apt/sources.list:

deb-src http://http.us.debian.org/debian testing \
main contrib non-free
deb-src http://http.us.debian.org/debian unstable \
main contrib non-free

由于屏幕输出的限制,上述每条 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 帐号。

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

# apt-get build-dep pine
# apt-get source -b pine

为了创建与 APT 和 dselect 系统兼容的本地软件包文件,需要创建 Packages,包中文件要放在特定的目录树中。

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

# aptitude install dpkg-dev
# cd /usr/local
# install -d pool # 软件包存放的物理地址
# install -d dists/unstable/main/binary-i386
# ls -1 pool | sed 's/_.*$/ priority section/' | uniq > override
# 编辑 override # 调整 priority and section
# dpkg-scanpackages pool override /usr/local/ \
> dists/unstable/main/binary-i386/Packages
# cat > dists/unstable/main/Release << EOF
Archive: unstable
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 方式远程访问存放在其中的包文件了。

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

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

$ sudo auto-apt update
... 升级数据库
$ auto-apt -x -y run
进入 auto-apt 模式:/bin/bash
退出这个命令继而退出 auto-apt 模式。
$ less /usr/share/doc/med-bio/copyright # 访问不存在的文件
... 安装提供了这个文件的软件包。
... 同样安装依赖的包

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).

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 testing -l sources.apt
文章评论

共有 1 条评论

  1. 北窗游客 于 2007-07-17 14:19:02发表:

    :0(1