Portsnap за proxy

В общем был у меня сервачек в одной канторе, все было хорошо пока я в очередной раз обнавляя порты получил следующую ошибку:

#  portsnap fetch
Looking up portsnap1.FreeBSD.org mirrors... none found.
Fetching snapshot tag... fetch: http://portsnap1.FreeBSD.org/snapshot.ssl: No address record

Выяснилось, что провайдер поставил proxy, да еще с авторизацией по паролю. Обновлять систему простым способом (portsnap fetch update) стало не возможно.

Первое что пришло в голову так это прописать настройки проксика в /etc/make.conf:

#Синтаксис
#HTTP_PROXY="http://<ip_proxy>:<port>"
#HTTP_PROXY_AUTH="basic:*:<user_name>:<passwd>"

#Пример
HTTP_PROXY="http://192.168.0.1:8080"
HTTP_PROXY_AUTH="basic:*:123"

#Если установлен wget то можно заменить fetch на wget
FETCH_CMD=/usr/local/bin/wget -t 10 --retry-connrefused -c --proxy
DISABLE_SIZE=yes

Мда… Как и должно было, на установку из портов это подействовало, а вот portsnap ничего не понял…

Смотрим почему. man ничего не дал. Решил посмотреть сам файл /usr/sbin/portsnap, оказалось что portsnap это простой sh-скрипт. Смотрим:

fetch_key() {
        if [ -r pub.ssl ] && [ `${SHA256} -q pub.ssl` = ${KEYPRINT} ]; then
                return
        fi
        echo -n "Fetching public key... "
        rm -f pub.ssl
        fetch ${QUIETFLAG} http://${SERVERNAME}/pub.ssl \

Как видно fetch прописан жестко. Править весь скрипт нет желания, по этому пропишем пару строчек в начало скрипта (из примера выше):

#Синтаксис
#HTTP_PROXY="http://<ip_proxy>:<port>"
#HTTP_PROXY_AUTH="basic:*:<user_name>:<passwd>"
#Пример
HTTP_PROXY="http://192.168.0.1:8080"
HTTP_PROXY_AUTH="basic:*:123"

О, так заработало! Но радость была преждевременной…

#  portsnap fetch
Looking up portsnap.FreeBSD.org mirrors... using portsnap1.FreeBSD.org.
Fetching snapshot tag... done.
Fetching snapshot metadata... done.
Updating from Mon Dec 29 07:47:08 NOVT 2008 to Mon Dec 29 15:30:00 NOVT 2008.
Fetching 3 metadata patches. done.
Applying metadata patches... done.
Fetching 3 metadata files... /usr/sbin/portsnap: cannot open ad87c5cf79fef1e351498718c9ad09f52459b7531e751b04630e01ff53879113.gz:
No such file or directory metadata is corrupt.

Еще поглядев скрипт portsnap еще раз я увидел еще один ключик (почему то скрыт) —debug

#portsnap --debug fetch
Looking up portsnap1.FreeBSD.org mirrors... none found.
pub.ssl                                       100% of  451  B 4618  Bps
done.
Fetching snapshot tag...
snapshot.ssl                                  100% of  256  B 2615  Bps
done.
Fetching snapshot metadata...
d13209cad4efce194cf08b26861074625f898e356cd485100% of  375  B 3822  Bps
done.
Fetching snapshot generated at Tue Dec 30 06:13:52 NOVT 2008:
fetch: http://portsnap1.FreeBSD.org/s/d13209cad4efce194cf08b26861074625f898e356cd48509f70e1a231690c66d.tgz: size of remote file is not known
d13209cad4efce194cf08b26861074625f898e356cd485         602 kB 1715 kBps^C

Как выяснилось, проксик еще и фильтровал контент, по этому часть файлов просто не скачивалось… Пришлось беседовать с провом 🙂

P.S. Нашел еще пару причин в инете. У меня этих проблем не было, но может кому пригодится:

  • Проверьте наличие строки «http 80/tcp» в файле /etc/services.
  • Проблема решилась установкой версии Portsnap 0.9.5 и все стало нормально.

Leave a Reply