Невозможно установить Image::ExifTool из-за зависания «сделать тест»

У меня есть Netgear ReadyNAS NV+, на котором я пытаюсь сделать некоторые вещи, используя perl.

Поскольку установка perl от поставщика скомпилирована без флага uselargefiles, я попытался скомпилировать/установить свою собственную версию для работы параллельно с системной.

Когда я впервые попытался скомпилировать perl на самой машине, я столкнулся с проблемой, так как в системе отсутствует множество обычных системных инструментов, что мешает правильной работе скрипта Configure.

# ./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!

Чтобы обойти это, я установил и использовал этот кросс-компилятор для сборки Perl на другой машине. Я не мог понять, как выполнить кросс-компиляцию с помощью стандартного скрипта конфигурации из Perl, поэтому я использовал этот.

После этого я мог просто скопировать мою новую папку perl на 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 работать на машине.

Однако у меня возникают проблемы, когда я пытаюсь установить дополнительные модули.

Я пытался установить Image::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.

Я думаю, я мог бы просто запустить make install и надеяться, что это не будет большой проблемой, если тест не может быть запущен/завершен, но это заставляет меня чувствовать себя немного неловко. Я бы предпочел выяснить, что не так.

Я также нахожу странным, что тест зависает так, как он есть, я мог бы признать, что он терпит неудачу, но то, что он просто продолжает работать непродуктивным образом, кажется странным.

Поскольку это первый раз, когда я собираю perl из исходного кода и впервые использую кросс-компилятор, я не удивлюсь, если узнаю, что сделал что-то очень неправильно, любая помощь в определении того, что очень приветствуется.

Что я делаю не так?

EDIT — компиляция на машине:

Выяснил, как заставить скрипт Configure работать изначально на машине. Постараюсь построить там, чтобы увидеть, будет ли это работать лучше. Однако это займет некоторое время, так как машина медленная.

Чтобы иметь возможность запустить скрипт конфигурации, мне нужно:

ССЗ

apt-get install libc6-dev gcc gdb libtag1-dev uuid-dev

базовые утилиты

apt-get install coreutils

-Dcc=gcc

./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

person azzid    schedule 06.01.2013    source источник


Ответы (2)


Я немного опоздал с этим комментарием, и у меня нет никаких идей по поводу вашего зависания "сделать тест", но я хотел указать, что Image::ExifTool - это чистый Perl, поэтому он не требует компиляции. Шаг установки так же прост, как копирование файлов дистрибутива в соответствующие каталоги.

  • Фил
person PhilHarvey    schedule 11.04.2014

Отказался от выяснения, почему тест терпит неудачу. В конце концов, все равно использовал модуль. Кажется, работает нормально с моими файлами.

person azzid    schedule 21.01.2013