Предположим, вы хотите добавить пакет foo, но когда вы вызываете pkg_add через:
pkg_add -r foo
вы получите ошибку:
Error: Unable to get ftp://.../foo.tbz: File unavailable ...
Это не проблема, поскольку, согласно справочной странице pkg_add, все, что вам нужно сделать, это установить переменную среды PACKAGEROOT в корневой каталог foo:
PACKAGEROOT=ftp://root/to/package
Не так быстро! Это является проблема - не работает! Если вы не экспортируете PACKAGEROOT, тогда pkg_add использует свое местоположение по умолчанию, и экспорт PACKAGEROOT дает вам ошибку:
pkg_add: can't stat package file 'foo'
То же самое и при установке переменной PACKAGESITE.
Теперь я действительно решил эту проблему:
pkg_add -r ftp://my/package/root/foo.tbz
работает отлично. Тем не менее, у меня есть два вопроса:
can't stat package file 'foo'
значит?Для интересующихся, я столкнулся с этой проблемой при попытке установить Enlightenment. Версия портов устарела, и я все равно не хотел компилировать, так как это требует времени. Я устанавливаю 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
САЙТ ПАКЕТА =ftp://ftp.freebsd.org/pub/FreeBSD/ports/i386/packages-8.0-release/Latest/
Отвечая на ваши вопросы:
Это означает, что pkg_add не смог найти файл. Вы видите это только с PACKAGESITE, потому что установка этой переменной переопределяет процесс поиска, который обычно приводит к «Не удалось найти пакет foo».
Оно делает. Когда вы указали PACKAGESITE, все "pkg_add -r foo" - это попытка открыть $ PACKAGESITE / foo.tbz. Ты видишь проблему? Перейдите на свой САЙТ ПАКЕТОВ и найдите enlightenment.tbz.
Вы не нашли. Ближайшее, что вы нашли, было enlightenment-0.16.999.042_3,2.tbz. Итак, pkg_add -r "enlightenment-0.16.999.042_3,2" будет работать. Измените САЙТ ПАКЕТОВ на ftp://ftp.freebsd.org/pub/FreeBSD/ports/i386/packages-8.0-release/Latest/ и это сработает.
Это вся причина, по которой существует подкаталог Latest /.
В версии 8.2 я обнаружил, что проблема в том, что я не использовал BASH в качестве корневой оболочки. Я добавил строку «export PACKAGEROOT» в свой ~ / .profile, но она не вступила в силу, пока я не использовал bash в качестве оболочки. Возможно, с вашей корневой оболочкой как / bin / csh, поэтому они назначают переменную, а затем экспортируют ее как отдельный оператор в ваш ~ / .profile. Я не проверял, чтобы знать наверняка
Просто из любопытства, вы действительно читали 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/
Кроме того, «cannot stat package 'foo'» в основном означает, что он не может найти этот файл (он пытался stat () файл и потерпел неудачу. Подробнее см. Man 2 stat)