Недавно сервер, который я использую для анализа биоинформатики, был обновлен до deb10. С тех пор возникло несколько проблем.
Одна из них - это настройка нашего средства просмотра генома JBrowse. Теоретически он запускается с использованием сценария setup.sh
, который затем вызывает целую кучу других сценариев для создания правильных файлов JBrowse и проверки настроек et c.
Первоначально он дал мне это сообщение об ошибке:
perl: symbol lookup error: /mnt/data1/www/html/mb/JBrowse-1.12.3/oldbin/../src/perl5/../../extlib/lib/perl5/x86_64-linux-gnu-thread-multi/auto/JSON/XS/XS.so: undefined symbol: Perl_xs_apiversion_bootcheck
После поиска причин, по которым это может быть вызвано, я обнаружил, что это может быть связано с несколькими установками perl, существующими в одной системе, и одной версией, пытающейся загрузить пакеты из Другой. Поэтому я изменил perl, использованный в сценариях, с #!/usr/bin/env perl
(perl 5.28) на #!/mnt/data1/commun/tools/perl-5.24.1/perl
(perl 5.24), потому что это казалось perl, который предназначался для запуска этих scripts.
Однако после замены я столкнулся с проблемами с PerlIO::gzip
. Я идентифицировал скрипт pm, который использовался и который не включал use PerlIO::gzip
, и добавил его к нему (Примечание: я не уверен, что это была проблема с ним).
РЕДАКТИРОВАТЬ: Я включил PerlIO::gzip
из-за сценария, выдающего мне это сообщение об ошибке:
Unknown PerlIO layer "gzip" at /mnt/data1/www/html/mb/JBrowse-1.12.3/bin/../src/perl5/Bio/JBrowse/Cmd/FormatSequences.pm line 250.
Строка 250 из FormatSequences.pm
равна
open $fasta_fh, "<$gzip", $fasta or die "$! reading $fasta";
с $gzip
равным ''
или ':gzip'
в зависимости от того, был ли заархивирован файл для чтения.
Это может быть неправильно (согласно комментарию), но для меня это означало, что мне нужно было указать сценарию, как читать файлы gzip , Заголовок этого модуля теперь выглядит следующим образом:
use strict;
use warnings;
use base 'Bio::JBrowse::Cmd';
use Pod::Usage ();
use File::Spec::Functions qw/ catfile catdir /;
use File::Path 'mkpath';
use File::Copy 'copy';
use File::Basename 'basename';
use POSIX;
use Bio::JBrowse::JSON;
use JsonFileStorage;
use PerlIO::gzip;
##this added by me
use constant ONE_BYTE => 1;
use constant FOUR_BYTE => 4;
use constant BITS_PER_BYTE => 8;
use constant BASES_PER_FOUR_BYTE => 16;
Это не решило проблему, а вместо этого подняло эту ошибку:
Can''t locate PerlIO/gzip.pm in @INC (you may need to install the PerlIO::gzip module)
(@INC contains:
/mnt/data1/www/html/mb/JBrowse-1.12.3/bin/../src/perl5/../../extlib/lib/perl5/5.24.1/x86_64-linux
/mnt/data1/www/html/mb/JBrowse-1.12.3/bin/../src/perl5/../../extlib/lib/perl5/5.24.1
/mnt/data1/www/html/mb/JBrowse-1.12.3/bin/../src/perl5/../../extlib/lib/perl5/x86_64-linux
/mnt/data1/www/html/mb/JBrowse-1.12.3/bin/../src/perl5/../../extlib/lib/perl5
/mnt/data1/www/html/mb/JBrowse-1.12.3/bin/../src/perl5/../../extlib/lib/perl5/5.24.1/x86_64-linux
/mnt/data1/www/html/mb/JBrowse-1.12.3/bin/../src/perl5/../../extlib/lib/perl5/5.24.1
/mnt/data1/www/html/mb/JBrowse-1.12.3/bin/../src/perl5/../../extlib/lib/perl5
/mnt/data1/www/html/mb/JBrowse-1.12.3/bin/../src/perl5
/mnt/data1/commun/tools/lib/perl5/site_perl/5.24.1/x86_64-linux
/mnt/data1/commun/tools/lib/perl5/site_perl/5.24.1
/mnt/data1/commun/tools/lib/perl5/5.24.1/x86_64-linux
/mnt/data1/commun/tools/lib/perl5/5.24.1
.
)
См., @INC
содержит /mnt/data1/www/html/mb/JBrowse-1.12.3/bin/../src/perl5/../../extlib/lib/perl5/x86_64-linux
, но PerlIO::gzip
был фактически расположен в /mnt/data1/www/html/mb/JBrowse-1.12.3/bin/../src/perl5/../../extlib/lib/perl5/x86_64-linux-gnu-thread-multi
. Я попытался скопировать файлы из x86_64-linux-gnu-thread-multi
в x86_64-linux
, а также добавить x86_64-linux-gnu-thread-multi
в @INC
, но оба вызывают эту ошибку:
Can't load '/mnt/data1/www/html/mb/JBrowse-1.12.3/extlib/lib/perl5/x86_64-linux-gnu-thread-multi/auto/PerlIO/gzip/gzip.so' for module PerlIO::gzip: /mnt/data1/www/html/mb/JBrowse-1.12.3/extlib/lib/perl5/x86_64-linux-gnu-thread-multi/auto/PerlIO/gzip/gzip.so: undefined symbol: PL_thr_key at /mnt/data1/commun/tools/lib/perl5/5.24.1/XSLoader.pm line 96.
at /mnt/data1/www/html/mb/JBrowse-1.12.3/extlib/lib/perl5/x86_64-linux-gnu-thread-multi/PerlIO/gzip.pm line 11.
Compilation failed in require at /mnt/data1/www/html/mb/JBrowse-1.12.3/bin/../src/perl5/Bio/JBrowse/Cmd/FormatSequences.pm line 26.
BEGIN failed--compilation aborted at /mnt/data1/www/html/mb/JBrowse-1.12.3/bin/../src/perl5/Bio/JBrowse/Cmd/FormatSequences.pm line 26.
Compilation failed in require at prepare-refseqs.pl line 7.
BEGIN failed--compilation aborted at prepare-refseqs.pl line 7.
Я предполагаю, что PL_thr_key
имеет делать с многопоточными perl, и не подходит для не поточных perl.
Затем я попытался установить PerlIO::gzip
в моем домашнем каталоге и использовать local::lib
для включения моего домашнего каталога в @INC
, как рекомендовал мой сисадмин. Но я в основном сталкиваюсь с той же проблемой, что и раньше: создаются два каталога, x86_64-linux-gnu-thread-multi
и x86_64-linux
, а PerlIO::gzip
существует только в x86_64-linux-gnu-thread-multi
.
Так что PerlIO::gzip
существует только для многопоточных Perl? Это чувство, которое я получаю от всего этого.
Быстрое примечание: у меня нет прав администратора на это, но при необходимости я могу попросить моего системного администратора установить или обновить модуль. Скажите, пожалуйста, нужна ли какая-либо дополнительная информация о моих perl версиях, или если вы хотите увидеть некоторые из сценариев более подробно.