在FreeBSD上的pkg_add环境

假设你想添加一个包foo,但是当你通过调用pkg_add时:

pkg_add -r foo 

你得到一个错误:

 Error: Unable to get ftp://.../foo.tbz: File unavailable ... 

这不是一个问题,因为根据pkg_add的手册页,你所要做的就是将PACKAGEROOT环境variables设置为foo的根目录:

 PACKAGEROOT=ftp://root/to/package 

不是那么快! 这一个问题 – 这是行不通的! 如果您不导出PACKAGEROOT,那么pkg_add将使用其默认位置并导出PACKAGEROOT会给出错误:

 pkg_add: can't stat package file 'foo' 

设置PACKAGESITEvariables时也是如此。

现在,我已经解决了这个问题:

 pkg_add -r ftp://my/package/root/foo.tbz 

工作正常。 不过,我有两个问题:

  1. 什么can't stat package file 'foo'是什么意思?
  2. 为什么这不像广告?

对于感兴趣的,我试图安装启蒙时遇到这个问题。 端口版本是旧的,我不想编译,因为这需要一段时间。 我通过不同的terminal会话独立设置PACKAGEROOT和PACKAGESITE:

 export PACKAGEROOT=ftp://ftp.freebsd.org/pub/FreeBSD/ports/i386/packages-8.0-release/x11-wm 

 export PACKAGESITE=ftp://ftp.freebsd.org/pub/FreeBSD/ports/i386/packages-8.0-release/x11-wm/ 

但都没有工作。

PACKAGEROOT和PACKAGESITE之间的区别在于PACKAGEROOT保留了原始的目录逻辑,而PACKAGESITE则没有。 这是正确的:

PACKAGEROOT = ftp://ftp.freebsd.org

PACKAGESITE = ftp://ftp.freebsd.org/pub/FreeBSD/ports/i386/packages-8.0-release/Latest/

回答你的问题:

  1. 这意味着pkg_add找不到文件。 你只能用PACKAGESITE看到它,因为设置该variables将覆盖search过程,这通常会产生“找不到软件包foo”。

  2. 它确实。 当你指定了PACKAGESITE时,所有的“pkg_add -r foo”都会尝试打开$ PACKAGESITE / foo.tbz。 你看到这个问题吗? 转到您的PACKAGESITE值并查找启示.tbz。

    你没有find它。 你find的最接近的是启蒙-0.16.999.042_3,2.tbz。 所以pkg_add -r“启示-160.999.042_3,2”会起作用。 把你的PACKAGESITE改成ftp://ftp.freebsd.org/pub/FreeBSD/ports/i386/packages-8.0-release/Latest/ ,它就可以工作了。

    这是Latest /子目录存在的全部原因。

出于好奇,你真的阅读http://www.freebsd.org/doc/en/books/handbook/packages-using.html或只是浏览它? 它的工作原理与上述相同。

尝试

 export PACKAGESITE=ftp://ftp.freebsd.org/pub/FreeBSD/ports/i386/packages-8-stable/Latest/ 

另外,“can not stat package'foo'”基本上意味着它找不到那个文件(它试图stat()这个文件并失败了,详情参见man 2 stat)

有了8.2版本,我发现问题是我没有使用BASH作为我的根shell。 我把'export PACKAGEROOT'这一行添加到我的〜/ .profile中,但是直到我使用bash作为我的shell之后才真正生效。 也许用你的根shell作为/ bin / csh,这就是为什么他们分配variables,然后把它作为一个单独的语句在你的〜/ .profile中导出。 我没有testing它知道肯定