卸载最后 n 个 ports/packages

卸载最后 n 个 ports/packages

在编译某些端口时,我意识到它依赖于 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 cleanin ,但如果您想走这条路,/usr/ports删除树并使用 重新提取它可能会更快...portsnap


作为另一个非常特定于这种情况的(更肮脏的)选项:如果您知道自“错误”以来您没有安装任何其他端口,并且上次安装端口是在一段时间之前,您可以使用目录的创建日期/var/db/pkg- 只需删除在安装中止时创建其数据库条目的软件包。

与上面的其他选项一样,您仍然需要查看要删除的软件包,以确保您不会遗失任何重要的东西,但如果它适合您的情况,这个列表应该比其他两个选项短得多。

答案2

如果您知道开始的日期/时间,解决方案就非常简单make install

  • 获取所有已安装包的列表并按修改日期排序:ls -ltr /var/db/pkg
  • 将结果复制到您喜欢的文本编辑器
  • 删除需要保留的软件包的行
  • 删除除文件名之外的所有列
  • 在每个文件名前添加 pkg_delete
  • 将结果多次复制到你的 ssh 控制台***,直到选定的包被删除。

*** 运行一次是不够的,因为在您生成的包列表中,有一些包是相互依赖的。

答案3

make install cleaninstall在开始之前完成所有依赖项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 安装。)

相关内容