在编译某些端口时,我意识到它依赖于 1000 多个其他端口,并且会一直安装,直到我死机或我的磁盘已满(我的硬盘真的很小)。
我打断道make install clean
。
我该如何uninstall
处理clean
那些已经构建和安装的依赖项?(至少有 100 多个)
pkg_cutleaves
在这种情况下将不起作用,因为主端口尚未注册。
请帮忙。
FreeBSD 9.0-RELEASE amd64
编辑:提出这个问题的另一种方式:如何查看未注册端口的所有依赖项,以及这些依赖项的所有子依赖项,独立于先前安装的端口或它们的[子]依赖项?
答案1
下次运行make all-depends-list
前你开始构建端口。
如果你不喜欢列表中的内容,就不要再往下看了。
这个和其他精华可以在 中找到/usr/ports/Mk/bsd.port.mk
。不过阅读起来不太友好。
在清理烂摊子方面,你有点走投无路了。
我能想到的有两种选择:
选项1- 运行上述命令,找出您不需要的,然后卸载它。
这可能是最不痛苦的选择。选项 2- 运行
pkg_info -aR
并查找没有依赖项的包。
确定哪些包不需要并卸载它们。
(在我看来,这每年都是一个不错的管理做法,但很烦人。)
在清理构建残余物方面,make clean
在有问题的端口目录中执行简单操作应会触发依赖项的清理。您也可以执行make clean
in ,但如果您想走这条路,/usr/ports
删除树并使用 重新提取它可能会更快...portsnap
作为另一个非常特定于这种情况的(更肮脏的)选项:如果您知道自“错误”以来您没有安装任何其他端口,并且上次安装端口是在一段时间之前,您可以使用目录的创建日期/var/db/pkg
- 只需删除在安装中止时创建其数据库条目的软件包。
与上面的其他选项一样,您仍然需要查看要删除的软件包,以确保您不会遗失任何重要的东西,但如果它适合您的情况,这个列表应该比其他两个选项短得多。
答案2
如果您知道开始的日期/时间,解决方案就非常简单make install
:
- 获取所有已安装包的列表并按修改日期排序:
ls -ltr /var/db/pkg
- 将结果复制到您喜欢的文本编辑器
- 删除需要保留的软件包的行
- 删除除文件名之外的所有列
- 在每个文件名前添加 pkg_delete
- 将结果多次复制到你的 ssh 控制台***,直到选定的包被删除。
*** 运行一次是不够的,因为在您生成的包列表中,有一些包是相互依赖的。
答案3
make install clean
install
在开始之前完成所有依赖项clean
。如果您启动时 ports 树是干净的,那么您刚刚安装的依赖项是那些带有work
子目录和.install_done*
这些子目录中的文件的依赖项。
find /usr/ports -mindepth 3 -maxdepth 3 -type d -name work -print |
while read wrkdir; do
ls -1a "$wrkdir" | grep -q '^\.install_done' && dirname "$wrkdir"
done
答案4
试一试portmaster -s
。它将提示您删除系统上不依赖的端口。(如果您尚未安装,请先从 ports-mgmt/portmaster 安装。)