Как я могу установить версию Perl у себя дома, используя perlbrew? - PullRequest
2 голосов
/ 15 сентября 2010

Я установил perlbrew , что кажется хорошим решением, но я получаю бессмысленную ошибку при попытке установить какую-либо версию Perl:

$ perlbrew install perl-5.12.1
Attempting to load conf from /home/dave/perl5/perlbrew/Conf.pm
Fail to get http://search.cpan.org/dist/perl-5.12.1 (error: ) at /home/dave/perl5/perlbrew/bin/perlbrew line 1277.

1 Ответ

6 голосов
/ 15 сентября 2010

Исходя из ваших комментариев, установлена ​​ли в вашей оболочке http_proxy переменная ENV?

$ env | grep http_proxy

Если нет, то установите ее с настройками прокси-сервера и повторите попытку установки perlbrew:

 $ export http_proxy = "http://yourProxyURLorIP:8080"
 $ perlbrew install perl-5.12.1

perlbrew использует эту переменную ENV для получения прокси-сервера.Если эта переменная ENV не установлена, то она пытается обычное прямое HTTP-соединение (см. строка 1274 в текущем master-файле perlbrew на Github )

$ua->proxy($ENV{http_proxy}) if $ENV{http_proxy};

Если это не работает, тогдавзгляд на HTTP::Lite.Это то, что perlbrew использует под капотом для получения исходного кода. NB.perlbrew использует свою собственную копию HTTP :: Lite

Наконец, если вам все же не повезло, вы упомянули, что «сначала установили его» через CPAN.В документах упоминаются проблемы при обновлении с предыдущей версии CPAN.Это может быть что-то еще, что вам нужно изучить?


Обновление Проверьте этот сценарий HTTP::Lite и дайте мне знать, что вы видите (NB. Вы можетенеобходимо установить HTTP::Lite):

use strict;
use warnings;
use HTTP::Lite;

my $ua = HTTP::Lite->new;

$ua->proxy("yourProxyURLorIP:8080");  # <= http_proxy env minus "http://"

my $req = $ua->request( 'http://search.cpan.org/dist/perl-5.12.1/' ) 
    or die "Unable to get document: $!";


print $ua->body();   # <= if you get this then all is good!

Я думаю, что вы, вероятно, столкнулись с известной ошибкой с HTTP::Lite, см. RT RT Утили прокси в стиле uri не могут правильно настроить прокси и порт .

Приведенный выше код является обходным путем для этой ошибки.Я предполагаю, что та же ошибка есть в perlbrew копии HTTP::Lite.Если после этого удаление http:// из http_proxy ENV решит проблему (известные последние слова!)


Обновление 2

Просто чтобы сделать мойпоследний комментарий очищается, когда вы запускаете perlbrew, вы можете сделать это (из оболочки вроде bash):

http_proxy=IPaddr:Port perlbrew install perl-5.12.1

Вам нужно будет всегда ставить префикс каждой команды perlbrew, как это, по крайней мере, до HTTP::Lite или perlbrew ошибка прокси исправлена.

Альтернативой выше является то, что вы можете просто исправить вашу локальную версию, просто добавив следующее перед строкой 1277:

$ENV{http_proxy} = "IPaddr:Port";   # <= your proxy IP & port

Надеемся, мы наконец-товзломал это!Дайте мне знать, если все успешно, потому что если это так, то я опубликую исправление Гугод (автор perlbrew) с необходимыми локальными изменениями HTTP::Lite.

...