Установка исправления для зависимого модуля: cpanm все еще пытается установить неисправный модуль после того, как я установил исправленный модуль вручную - PullRequest
1 голос
/ 24 апреля 2020

Я пытаюсь установить Net::SSH::Perl, используя cpanm (из perlbrew и perl версия 5.30). Сбой установки:

$ cpanm Net::SSH::Perl
--> Working on Net::SSH::Perl
Fetching http://www.cpan.org/authors/id/S/SC/SCHWIGON/Net-SSH-Perl-2.14.tar.gz ... OK
Configuring Net-SSH-Perl-2.14 ... OK
==> Found dependencies: Crypt::Curve25519
--> Working on Crypt::Curve25519
Fetching http://www.cpan.org/authors/id/A/AJ/AJGB/Crypt-Curve25519-0.06.tar.gz ... OK
Configuring Crypt-Curve25519-0.06 ... OK
Building and testing Crypt-Curve25519-0.06 ... FAIL
! Installing Crypt::Curve25519 failed. See /home/hakon/.cpanm/work/1587758019.381709/build.log for details. Retry with --force to force install it.
! Installing the dependencies failed: Missing version info for module 'Crypt::Curve25519'
! Bailing out the installation for Net-SSH-Perl-2.14.

Проблема с установкой Crypt::Curve25519 описана в этой проблеме. Я скачал проблемный c модуль Crypt::Curve25519 и пропатчил его:

git clone git@github.com:ajgb/crypt-curve25519.git
wget https://www.cpan.org/authors/id/S/SR/SREZIC/patches/Crypt-Curve25519-0.06-PR10-ANOTHERLINK.patch
cd crypt-curve25519
git apply ../Crypt-Curve25519-0.06-PR10-ANOTHERLINK.patch
perl Makefile.PL
make  # No errors now
make test
make install

Однако при повторной попытке установить Crypt::Curve25519 он все еще пытается установить сломанный модуль из CPAN:

$ cpanm Net::SSH::Perl
--> Working on Net::SSH::Perl
Fetching http://www.cpan.org/authors/id/S/SC/SCHWIGON/Net-SSH-Perl-2.14.tar.gz ... OK
Configuring Net-SSH-Perl-2.14 ... OK
==> Found dependencies: Crypt::Curve25519
--> Working on Crypt::Curve25519
Fetching http://www.cpan.org/authors/id/A/AJ/AJGB/Crypt-Curve25519-0.06.tar.gz ... OK
Configuring Crypt-Curve25519-0.06 ... OK
Building and testing Crypt-Curve25519-0.06 ... FAIL
! Installing Crypt::Curve25519 failed. See /home/hakon/.cpanm/work/1587758833.382749/build.log for details. Retry with --force to force install it.
! Installing the dependencies failed: Missing version info for module 'Crypt::Curve25519'
! Bailing out the installation for Net-SSH-Perl-2.14.

Как заставить cpanm использовать вместо этого установленный патч (т.е. пропустить установку Crypt::Curve25519, поскольку он уже установлен)?

Ответы [ 2 ]

1 голос
/ 25 апреля 2020

Проблема, кажется, отсутствует VERSION информация в модуле. Добавление строки

our $VERSION = 0.06; 

в начало файла lib/Crypt/Curve25519.pm, а затем переустановка и установка cpanm Net::SSH::Perl работали нормально (она приняла исправленную установку и не пыталась загрузить неработающую версию) .

Вот патч, который я использовал для lib/Crypt/Curve25519.pm:

diff --git a/lib/Crypt/Curve25519.pm b/lib/Crypt/Curve25519.pm
index 686b706..d9c2b3d 100644
--- a/lib/Crypt/Curve25519.pm
+++ b/lib/Crypt/Curve25519.pm
@@ -1,4 +1,5 @@
 package Crypt::Curve25519;
+our $VERSION = 0.06;
 #ABSTRACT: Generate shared secret using elliptic-curve Diffie-Hellman function

 use strict;
1 голос
/ 24 апреля 2020

Есть несколько вещей, которые нужно проверить:

  • cpanm знает, где найти вашу исправленную версию.
  • Исправленная версия имеет версию выше, чем на CPAN. Идея модуля в CPAN предполагает, что вы всегда хотите иметь самую последнюю версию, поэтому убедитесь, что у вас установлена.
  • Вы не хотите устанавливать пропатченный модуль в стандартном месте, потому что не хотите, чтобы клиент cpan перезаписывал it.

Некоторые другие вещи, которые могут работать:

  • Принудительная установка модуля и игнорирование сбоев (cpanm имеет функцию --notest). Версия CPAN по-прежнему установлена, но это не имеет значения.
  • Храните исправленную версию в отдельном каталоге, который находится в начале @INC, чтобы ваша программа сначала его нашла. Это эффективно скрывает версию CPAN.
...