У меня есть Netgear ReadyNAS NV +, на котором я пытаюсь сделать что-то с помощью perl.Невозможно установить изображение :: ExifTool из-за «make test» висит
Поскольку установка perl у поставщика скомпилирована без uselargefiles -flag Я попытался скомпилировать/установить свою собственную версию для параллельной работы с системой.
Когда я впервые попытался скомпилировать perl на самой машине, у меня возникли проблемы, так как в системе не было много обычных системных инструментов, которые препятствуют правильному запуску Configure-script.
# ./Configure -des -Dprefix=$HOME/perl-5.16.2
First let's make sure your kit is complete. Checking...
./Configure: line 1986: split: command not found
cat: /root/dload/perl-5.16.2/UU/x??: No such file or directory
Locating common programs...
I don't know where 'comm' is, and my life depends on it.
Go find a public domain implementation or fix your PATH setting!
Чтобы обойти, что я установил и использовал this cross-compiler построить Perl на другой машине. Я не мог понять, как перекрестно скомпилировать с помощью стандартного configure-скрипта из perl, поэтому я использовал this.
После того, что я мог бы просто скопировать мою новую жемчужно-папку на NAS и иметь дело, как следующие работы:
# ~/sparc-perl-5.16.2/bin/perl -version
This is perl 5, version 16, subversion 2 (v5.16.2) built for sparc-linux
Copyright 1987-2012, Larry Wall
Perl may be copied only under the terms of either the Artistic License or the
GNU General Public License, which may be found in the Perl 5 source kit.
Complete documentation for Perl, including FAQ lists, should be found on
this system using "man perl" or "perldoc perl". If you have access to the
Internet, point your browser at http://www.perl.org/, the Perl Home Page.
# ~/sparc-perl-5.16.2/bin/perl -e 'print "A string!\n";'
A string!
Так что в каком-то смысле я чувствую, что я был успешным в моих поисках, чтобы получить " мой "perl, работающий на машине.
У меня возникают проблемы, когда я пытаюсь установить дополнительные модули.
Я пробовал установить Изображение :: ExifTool с использованием cpanp (среди прочего), но установка никогда не заканчивается.
Сегодня я прибегал к установке вручную.
wget http://search.cpan.org/CPAN/authors/id/E/EX/EXIFTOOL/Image-ExifTool-9.12.tar.gz
tar xzf Image-ExifTool-9.12.tar.gz
cd Image-ExifTool-9.12
~/sparc-perl-5.16.2/bin/perl Makefile.pl
make
Все работы, как предполагается.
, когда я получаю сделать испытаний однако он висит на неопределенный срок, как так:
# make test
PERL_DL_NONLAZY=1 /root/sparc-perl-5.16.2/bin/perl "-MExtUtils::Command::MM" "-e" "test_harness(0, 'blib/lib', 'blib/arch')" t/*.t t/AFCP.t ...........
Глядя на запущенные процессы, я думаю, это те, представляющие команду:
# ps aux | grep per[l]
root 26187 0.5 0.7 12000 7808 pts/0 S+ 10:31 0:07 /root/sparc-perl-5.16.2/bin/perl -MExtUtils::Command::MM -e test_harness(0, 'blib/lib', 'blib/arch') t/AFCP.t t/AIFF.t t/APE.t t/ASF.t t/BigTIFF.t t/BMP.t t/CanonRaw.t t/Canon.t t/CanonVRD.t t/Casio.t t/DICOM.t t/DjVu.t t/DNG.t t/DV.t t/EXE.t t/ExifTool.t t/FLAC.t t/FlashPix.t t/Flash.t t/Font.t t/FotoStation.t t/FujiFilm.t t/Geotag.t t/GeoTiff.t t/GE.t t/GIF.t t/GIMP.t t/GPS.t t/HTML.t t/InDesign.t t/IPTC.t t/ITC.t t/Jpeg2000.t t/JVC.t t/Kodak.t t/KyoceraRaw.t t/Lang.t t/LNK.t t/M2TS.t t/Matroska.t t/MIE.t t/MIFF.t t/Minolta.t t/MP3.t t/MWG.t t/MXF.t t/Nikon.t t/Olympus.t t/OpenEXR.t t/Panasonic.t t/PDF.t t/Pentax.t t/PGF.t t/PhotoCD.t t/PhotoMechanic.t t/Photoshop.t t/PICT.t t/PNG.t t/PostScript.t t/PPM.t t/PSP.t t/QuickTime.t t/Radiance.t t/Real.t t/Ricoh.t t/RIFF.t t/RTF.t t/Sanyo.t t/Sigma.t t/Sony.t t/Unknown.t t/Vorbis.t t/Writer.t t/XMP.t t/ZIP.t
root 26189 1.7 0.0 0 0 pts/0 Z+ 10:31 0:24 [perl] <defunct>
Это полностью соответствует тому, что происходит, когда я пытаюсь выполнить ту же установку с помощью cpanp.
Я думаю, я мог бы просто запустить сделать установку и надеяться, что это не будет большой проблемой, которую тест не может выполнить/завершить, но это заставляет меня чувствовать себя немного неловко. Я бы скорее понял, что не так.
Я также считаю странным, что тест висит так, как он есть, я мог бы признать, что он терпит неудачу, но что он просто продолжает работать в непроизводственной манере, это кажется странным.
Поскольку это первый раз, когда я построил perl из исходного кода, и в первый раз, когда я использовал кросс-компилятор, я бы не удивился, узнав, что я сделал что-то очень плохое, любая помощь в определении того, что очень Добро пожаловать.
Что я делаю неправильно?
EDIT - составление на Mahcine:
Разобрался как получить Configure скрипт работает изначально на машине. Попробуем построить там, чтобы увидеть, будет ли это работать лучше. Это займет некоторое время, хотя, машина slow.
Чтобы иметь возможность запускать конфигурационные сценарии мне нужно:
GCC
apt-get install libc6-dev gcc gdb libtag1-dev uuid-dev
Coreutils
apt-get install coreutils
-Dcc = НКУ
./Configure -des -Dprefix=$HOME/perl-5.16.2 -Dcc=gcc
EDIT2 - Заполнять не удалось:
Наиболее кратковременное успех никогда:
# make
`sh cflags "optimize='-O2'" perlmini.o` -DPERL_IS_MINIPERL -DPERL_EXTERNAL_GLOB perlmini.c
CCCMD = gcc -DPERL_CORE -c -fno-strict-aliasing -pipe -I/usr/local/include -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -O2 -Wall
In file included from perl.c:33:
perl.h:699: error: conflicting types for `syscall'
/usr/include/unistd.h:939: error: previous declaration of `syscall'
ake: *** [perlmini.o] Error 1
EDIT3 - Знакомимся вилка:
Пробовал следующее, чтобы проверить, что вилка работает как надо , Я считаю, что тест прошел успешно, но я никогда не пробовал fork раньше, поэтому, пожалуйста, дайте мне знать, если я прочитаю результат неправильно.
# cat test_forkwait.px
#!/root/sparc-perl-5.16.2/bin/perl
$pid = fork();
die if $pid < 0;
$SIG{CHLD} = sub { warn "SIGCHLD\n"; };
if($pid) {
$status = waitpid($pid, 0);
warn "wait status: $status\n";
} else {
warn "Child starting\n";
sleep 1;
warn "Child terminating\n";
}
# ./test_forkwait.px
Child starting
Child terminating
SIGCHLD
wait status: 29913