【问题标题】:Check if a port is installed on FreeBSD检查端口是否安装在 FreeBSD 上
【发布时间】:2019-04-11 09:36:07
【问题描述】:

如何检查一个端口是否已经安装在 FreeBSD 上?

这将在用于配置的 shell 脚本中使用。即如果端口已经安装跳过安装,否则调用make 命令

【问题讨论】:

    标签: freebsd


    【解决方案1】:

    在 FreeBSD 10+ 下,您可以使用“pkg”。好的参考是:https://wiki.freebsd.org/PkgPrimer

    如果你的port被安装了,会导致:

    # pkg info apache-jmeter
    apache-jmeter-3.0.r2
    Name           : apache-jmeter
    Version        : 3.0.r2
    Installed on   : Thu May  5 18:58:45 2016 MSK
    Origin         : www/jmeter
    Architecture   : freebsd:10:x86:64
    ...
    

    否则:

    # pkg info jmeter
    pkg: No package(s) matching jmeter
    

    【讨论】:

    • 干杯迈克尔。以防万一有人发现这很有用..pkg info 在找到或未找到端口时给出正确的退出代码。这意味着不需要解析返回的字符串来检查它是否已安装,而是可以简单地写成布尔值:if ! pkg info mysql56-server ; then # install mysql logic here... fi
    • 请务必记住 FreeBSD 9 和其他 BSD 上的“packages”和“ports”之间的区别)。您通过一系列 make 脚本在本地系统上安装一个端口,这些脚本从源代码构建程序,并将其捆绑为一个包并将其安装在您的系统上。你不应该在通过端口安装的软件上使用“pkg delete”/“pkg remove”,而应该从端口树中“make deinstall”。执行“pkg install”会将预编译的包下载到您的系统并安装它。执行“pkg info ”将*不会告诉您它是否是从端口安装的。
    【解决方案2】:

    您不应该在您通过以下方式安装的软件上使用“pkg delete”/“pkg remove” 端口,而是从端口树内部“进行卸载”。执行“pkg 安装” 将预编译的软件包下载到您的系统并安装它。 执行“pkg info”将*不会告诉您它是否是从端口安装的。

    恐怕引用的陈述不正确。

    “端口”只是一个尚未编译和安装的“包”。 已安装的端口实际上是包,无论它是通过 pkg(8) 下载预编译和安装,还是从端口树本地编译然后安装,都可以像任何其他包一样对待。一旦“安装”了软件,术语“端口”和“包”就是同义词。

    pkg delete/remove <portname> 可以并且应该使用并且可能更可取,因为它会提示卸载不再需要的依赖项。 特定端口目录中的make deinstall 只会卸载该端口,不会卸载其他任何内容。

    pkg infopkg info <portname>是正确答案。

    【讨论】:

    • 这句话出自哪里?
    猜你喜欢
    • 2012-09-25
    • 2020-02-04
    • 2015-06-16
    • 2023-03-07
    • 2018-07-08
    • 2016-03-19
    • 2014-10-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多