Назад | Перейти на главную страницу

pkg_add Среда во FreeBSD

Предположим, вы хотите добавить пакет 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

работает отлично. Тем не менее, у меня есть два вопроса:

  1. Что именно делает can't stat package file 'foo' значит?
  2. Почему это не работает так, как рекламируется?

Для интересующихся, я столкнулся с этой проблемой при попытке установить 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/

Отвечая на ваши вопросы:

  1. Это означает, что pkg_add не смог найти файл. Вы видите это только с PACKAGESITE, потому что установка этой переменной переопределяет процесс поиска, который обычно приводит к «Не удалось найти пакет foo».

  2. Оно делает. Когда вы указали 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)