Установщик модулей CPAN Perl не находит tar-файл
Кажется, у меня проблема с настройкой при установке модулей Perl через CPAN, и я не знаю, как ее исправить:
[root@ip JESSE]# pwd
/root/.cpan/sources/authors/id/J/JE/JESSE
[root@ip JESSE]# ls -l
total 240
-rw-r--r-- 1 root root 105464 Feb 20 11:39 CHECKSUMS
-rw-r--r-- 1 root root 9223 Apr 12 2011 Locale-Maketext-Simple-0.21.tar.gz
-rw-r--r-- 1 root root 125483 Feb 20 11:39 WWW-Mechanize-1.72.tar.gz
[root@ip JESSE]# cpan -i WWW::Mechanize
CPAN: Storable loaded ok (v2.20)
Reading '/root/.cpan/Metadata'
Database was generated on Mon, 20 Feb 2012 11:10:26 GMT
Running install for module 'WWW::Mechanize'
Running make for J/JE/JESSE/WWW-Mechanize-1.72.tar.gz
CPAN: Digest::SHA loaded ok (v5.61)
CPAN: Compress::Zlib loaded ok (v2.033)
Checksum for /root/.cpan/sources/authors/id/J/JE/JESSE/WWW-Mechanize-1.72.tar.gz ok
CPAN: Archive::Tar loaded ok (v1.82)
Uncompressed /root/.cpan/sources/authors/id/J/JE/JESSE/WWW-Mechanize-1.72.tar.gz successfully
Using Tar:/bin/tar xvf "WWW-Mechanize-1.72.tar":
Couldn't untar WWW-Mechanize-1.72.tar
CPAN: File::Temp loaded ok (v0.22)
CPAN: CPAN::Meta loaded ok (v2.112150)
Package seems to come without Makefile.PL.
(The test -f "/root/.cpan/build/JESSE-n72IRU/Makefile.PL" returned false.)
Writing one on our own (setting NAME to WWWMechanize)
Had problems unarchiving. Please build manually
Running make test
Make had some problems, won't test
Running make install
Make had some problems, won't install
[root@ip JESSE]# ls -l
total 240
-rw-r--r-- 1 root root 105464 Feb 20 11:39 CHECKSUMS
-rw-r--r-- 1 root root 9223 Apr 12 2011 Locale-Maketext-Simple-0.21.tar.gz
-rw-r--r-- 1 root root 125483 Feb 20 11:39 WWW-Mechanize-1.72.tar.gz
[root@ip JESSE]# which tar
/bin/tar
[root@ip JESSE]# which gzip
/bin/gzip
Проблема, кажется, здесь:
Uncompressed /root/.cpan/sources/authors/id/J/JE/JESSE/WWW-Mechanize-1.72.tar.gz successfully
Using Tar:/bin/tar xvf "WWW-Mechanize-1.72.tar":
Couldn't untar WWW-Mechanize-1.72.tar
Файл tar.gz действительно несжатый и может быть найден здесь в новом каталоге:
/root/.cpan/build/JESSE-KjCEMS/WWW-Mechanize-1.72.tar
Если я запускаю ту же команду из оболочки, я получаю дополнительную информацию:
cpan[1]> install WWW::Mechanize
CPAN: Storable loaded ok (v2.20)
Reading '/root/.cpan/Metadata'
Database was generated on Mon, 20 Feb 2012 11:10:26 GMT
Running install for module 'WWW::Mechanize'
Running make for J/JE/JESSE/WWW-Mechanize-1.72.tar.gz
CPAN: Digest::SHA loaded ok (v5.61)
CPAN: Compress::Zlib loaded ok (v2.033)
Checksum for /root/.cpan/sources/authors/id/J/JE/JESSE/WWW-Mechanize-1.72.tar.gz ok
Scanning cache /root/.cpan/build for sizes
Use of uninitialized value $newdir in substitution (s///) at /usr/lib64/perl5/Cwd.pm line 502.
Use of uninitialized value $newdir in chdir at /usr/lib64/perl5/Cwd.pm line 510.
Use of chdir('') or chdir(undef) as chdir() is deprecated at /usr/lib64/perl5/Cwd.pm line 510.
Use of uninitialized value $newdir in pattern match (m//) at /usr/lib64/perl5/Cwd.pm line 525.
Use of uninitialized value $newdir in split at /usr/lib64/perl5/Cwd.pm line 531.
..........................................................................--DONE
DEL(1/10): /root/.cpan/build/CPAN-1.9600-jGTV10
DEL(2/10): /root/.cpan/build/File-Which-1.09-yoVWZC
DEL(3/10): /root/.cpan/build/Test-Script-1.07-aJWrXb
DEL(4/10): /root/.cpan/build/Probe-Perl-0.01-gzZ2eR
DEL(5/10): /root/.cpan/build/IPC-Run3-0.044-AP6EMp
DEL(6/10): /root/.cpan/build/Time-HiRes-1.9721-xxseE6
DEL(7/10): /root/.cpan/build/CPAN-Meta-YAML-0.003-wGtH0a
DEL(8/10): /root/.cpan/build/JSON-PP-2.27105-fvkwNa
DEL(9/10): /root/.cpan/build/Package-Constants-0.02-7Ms_OL
DEL(10/10): /root/.cpan/build/Module-Metadata-1.000004-tXKIBB
CPAN: Archive::Tar loaded ok (v1.82)
Uncompressed /root/.cpan/sources/authors/id/J/JE/JESSE/WWW-Mechanize-1.72.tar.gz successfully
Using Tar:/bin/tar xvf "WWW-Mechanize-1.72.tar":
Couldn't untar WWW-Mechanize-1.72.tar
CPAN: File::Temp loaded ok (v0.22)
CPAN: CPAN::Meta loaded ok (v2.112150)
Package seems to come without Makefile.PL.
(The test -f "/root/.cpan/build/JESSE-DGrTh_/Makefile.PL" returned false.)
Writing one on our own (setting NAME to WWWMechanize)
Had problems unarchiving. Please build manually
Running make test
Make had some problems, won't test
Running make install
Make had some problems, won't install
Failed during this command:
JESSE/WWW-Mechanize-1.72.tar.gz : unwrapped NO -- untar failed
Мне кажется, что $newdir не обновляется динамически сгенерированным /root/.cpan/build/JESSE-DGrTh_/
или же /root/.cpan/build/JESSE-KjCEMS/
или что-либо, что генерирует система, или, по крайней мере, эта информация не попадает в команду tar
Кто-нибудь знает, как можно починить механизм, не прибегая к ручной установке?
5 ответов
Редактировать:
Я снова столкнулся с этой проблемой. Все, что мне нужно было сделать - это освободить память, как предложил Кит Бротон.
Я столкнулся с той же проблемой и попытался найти причину этой проблемы. Я привожу здесь свои выводы, чтобы другим гуглерам не пришлось потратить пару часов, прежде чем сдаться...
Что для меня решило, так это простая перезагрузка системы.
Вещи, которые я пытался:
- Обновление CPAN. Это также может привести к ошибке с сообщением об ошибке "Не удалось распаковать". Не имеет значения, если вы попробуете это с помощью оболочки cpan, "cpan -i CPAN" или "perl -MCPAN -e 'install CPAN'". Я не думал, что что-то из этого решит проблему, но когда вы начинаете поискать в Google, все они предлагаются в качестве возможных решений.
- Замена tar на скрипт, который регистрирует входные данные, чтобы проверить, является ли один из параметров или cwd неправильным при его вызове. Сценарий никогда не называется, кажется. Сообщение "Не удалось распаковать" остается прежним, даже после временного переименования /bin/tar.
- Проверка CPAN/Tarzip.pm и добавление строк печати рядом с кодом, который пишет сообщение "Не удалось распаковать". Кажется, что вызов system() завершается неудачно, и tar (или ls в моем отладочном коде) никогда не вызывается.
Тогда я решил перезагрузиться, что было вариантом, потому что это не живая система. После этого проблема исчезла, и модули Perl были установлены с первой попытки.
Другие наблюдения:
- Система, кажется, работает просто отлично для остальных. Вы все еще можете подключиться к системе, вы можете редактировать файлы, модификации все еще там после перезагрузки. Я ожидаю, что любой из них потерпит неудачу задолго до того, как системный вызов Perl начнет терпеть неудачу.
- При быстром сканировании лог-файлов красные флаги не отображаются.
Иногда это может происходить просто из-за недостатка доступной памяти. Попробуйте отключить некоторые запущенные службы и повторите попытку.
Работал на меня:-)
Обнаружена та же проблема с дроплетом DigitalOcean с 512 МБ оперативной памяти под управлением Ubuntu (около 200 МБ свободной).
Я смог решить эту проблему путем перезагрузки компьютера, я попытался обновить свой CPAN с помощью 'install Bundle::CPAN'. Он работал для первых нескольких модулей, а затем снова появилось сообщение "Не удалось разархивировать".
Перезагрузка позволила мне прогрессировать в установке. Эти повторные перезагрузки, конечно, не оптимальное решение.
Учитывая, что в системе имеется свободная память, и проблема появляется вновь после некоторого использования машины, похоже, это может быть связано с проблемой с общими библиотеками.
Чтобы устранить следующую ошибку:
Couldn't untar WWW-Mechanize-1.72.tar
Попробуйте установить Archive::Tar
На Centos 6.X:
yum install perl-Archive-Tar.x86_64