假设你想添加一个包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
工作正常。 不过,我有两个问题:
can't stat package file 'foo'是什么意思? 对于感兴趣的,我试图安装启蒙时遇到这个问题。 端口版本是旧的,我不想编译,因为这需要一段时间。 我通过不同的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/
回答你的问题:
这意味着pkg_add找不到文件。 你只能用PACKAGESITE看到它,因为设置该variables将覆盖search过程,这通常会产生“找不到软件包foo”。
它确实。 当你指定了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它知道肯定