FreeBSD Ports 之间的依存关系及其管理

FreeBSD Ports 之间的依存关系及其管理

用过 FreeBSD 的朋友对 FreeBSD 的 ports 管理认识颇深,它让我们从来不苦恼于“装软件”。FreeBSD 会自动地下载所需的 ports 并安装它们,这是为什么很多使用 GNU/Linux 的朋友在了解到 FreeBSD 后义无反顾地加入 FreeBSD 阵营,包括我。

本 wiki 还要说一说不仅如此,FreeBSD 让我们从来不纠结于“不干净的卸载”。

ports 间的复杂关系

各种各样的 ports 之间可以有复杂的依存关系,如果用有向图画出来,它一定是 DAG (有向无圈图)。拿随机模拟软件 mcmc-jags-3.2.0 为例,安装它必须安装它的子孙节点。

FreeBSD Ports 之间的依存关系-1

如何干干净净地删除一个 port?

如何删除 ports?通常的做法是去那个 port 执行 make deinstall clean。可是,如果那个 port 还关联着一些“不再有用的” ports。举个例子,卸载了 jags 后,如果你同时也想卸载 “孤零零的” lapack,该如何做呢?总不至于去搞清除所安装的 ports 之间的复杂关系吧?拿随机模拟软件 jags 和 fbm 为例,它们的依存关系是这样的。

FreeBSD Ports 之间的依存关系-2

两个 ports 及其关联 ports 的关系就可以如此复杂,何况你安装的如此众多的 ports!苍天啊,大地啊,哪位天使姐姐能帮我一把啊?

有一个 port 可以帮助你,它就是 pkg_cutleaves!这是一个小巧的工具,它能生成你所安装 ports 中所有的“终极节点”,只需命令

# pkg_cutleaves -lxg

有关这些节点的信息存放在文件 /usr/local/etc/pkg_leaves.exclude 之中。一旦你不喜欢其中某个节点,可以在文件 pkg_leaves.exclude 中将之删除,然后运行

# pkg_cutleaves -Rxg

你猜怎么着?系统删除了该节点及其所有与之关联的“孤零零”的 ports,而不影响其他“终极节点”及其关联的 ports。pkg_cutleaves 催马过去,把敌人及其孤立党羽杀了个干干净净!

我多么希望我的大脑里也有一个这样的工具,把不美好的记忆删除得干干净净,然后更新一下,重新开始生活。

如何重建 ports 间的依存关系?

用 portmaster 重建 ports 间的依存关系,只需

# portmaster –check-depends

见识某些 ports 的依存图

最后分别见识一下 zh_cn-freebsd-doc,emacs 和 maxima 的依存图,感受一下 FreeBSD ports 的复杂关系,顺便惊叹一下 FreeBSD 在这些复杂关系上纵横驰骋的强大。FreeBSD 是位有内涵的美女,处之愈久,就愈爱她,但愿她能陪我到老。我还不了解她的姊妹 OpenBSD 和 NetBSD,虽然传说中她们也很美。

FreeBSD Ports 之间的依存关系-3

 FreeBSD Ports 之间的依存关系-4

FreeBSD Ports 之间的依存关系-5

原文链接:http://wiki.freebsdchina.org/software/p/pkg_cutleaves