用户工具

站点工具


doc:start

用 pkg_cutleaves 来管理软件包

FreeBSD对包的管理极为严格,

# make deinstall clean

可以轻而易举地将一个软件包卸载干净。

如果由于某些特殊原因系统不能干净地删除某个目录,它会明白地提示用户哪个目录或哪个文件未清除,待用户进一步查明。与 GNU/Linux 相比,FreeBSD 对 port tree 的维护和管理要更学院派一些。我喜欢用

# make install clean

来编译源码安装,有时也随意地pkg_add。

按照运行依存(run dependency),工具软件之间的关系复杂,呈现网状结构,动一处则牵动甚多。FreeBSD 下安装软件简单至极,系统能自动按照依存关系递归地安装所需要的 ports。卸载软件也不难,但如果用户有“洁癖”,不想多保留任何“无用的东西”,则就需要 pkg_cutleaves 来帮忙管理这些软件包了。

问题的由来

我们在使用FreeBSD的时候,经常安装软件包。在安装的过程中,有一些 build 时依存的包会先被安装,而往往它们不是我们所需要的。例如在安装 xvidcap 时先安装 gawk,安装后也不卸载 gawk。如果我们不需要 gawk,就不得已在安装成功 xvidcap 后把 gawk 手动卸载。

问题是,包之间的复杂的依存关系让我们手动卸载时经常出错。这时,我们需要工具来梳理已经安装的软件包之间的关系,按照它们之间的依存关系整理出一个有向非循环图(DAG),我们不妨称之为依存图,以此约束我们每一次的卸载都是从叶子结点开始。幸运的是,我们有 pkg_cutleaves 这样好用的管理工具,可以帮助我们递归地卸载某些我们不需要的叶子结点。下面给出一个简短的介绍,假设命令都是 root 下达的。

显示所有叶子结点信息

首先,我们通过

# pkg_cutleaves -lc > ~/installed

来生成所有的叶子结点,大致样子如下:

ImageMagick-6.4.3.6 - Image processing tools
R-2.7.1 - A language for statistical computing and graphics
WordNet-3.0 - Dictionaries and thesauri with devel. libraries (C, TCL) and browsers
ardour-2.4.1 - Ardour - a digital audio workstation
auctex-emacs22-11.85 - Integrated environment for writing LaTeX using GNU Emacs
bibtool-2.48_1 - Command line manipulation of BibTeX files

以 root 身份运行下面的命令,也可以得到所有的叶子结点。

# portmaster --list-origins > ~/installed-port-list

这样做有个好处,如果你想重装以前安装过的 ports,可以

# portmaster `cat ~/installed-port-list`

卸载我们不需要的叶子结点

我们通过

# pkg_cutleaves -lxg

来生成一个文件:/usr/local/etc/pkg_leaves.exclude,这个文件记录了所有叶子结点的文件名,不包含版本信息。我们可以编辑修改这个文件,去掉我们不需要的叶子结点。接着,我们可以放心地清除我们不需要的build依存包,一个简单的命令就搞定:

# pkg_cutleaves -Rxg

系统会交互地询问我们是否删除某某某,保证文件 /usr/local/etc/pkg_leaves.exclude 所记录的就是软件依存图的所有叶子结点。概括而言,pkg_cutleaves 清除软件包安装过程中产生的冗余的包,为我们的系统瘦身。

/data/vhosts/wiki-data/pages/doc/start.txt · 最后更改: 2011/12/10 08:09 由 IOU