Какие пакеты мне нужны для работающей цепочки инструментов CPAN под cygwin64? - PullRequest
2 голосов
/ 31 мая 2019

В моих системах * nix я часто использую пару модулей perl (FreeBSD, Linux, Mac). Я всегда устанавливаю их из cpan. Ранее в этом году мне нужно было использовать некоторые из них в 64-битной системе Windows, и примерно через 2 часа я установил самый последний на тот момент пакет Strawberry Perl, и из cpan я установил модули по своему желанию так же, как и я. раньше делал под * nix. Все заработало как положено.

В другой 64-битной системе Windows я сейчас пытаюсь настроить среду cygwin64 вместо установки Strawberry Perl. В этой системе нам нужно несколько инструментов, и они уже отлично работают под cygwin64, поэтому неплохо было бы добавить новые функции perl в уже существующую среду cygwin64. Чтобы проверить эту возможность, не вмешиваясь в производственную среду, я выполняю установки проб / ошибок в отдельной чистой системе Windows.

Я скачал текущий установщик cygwin64 и могу получить все инструменты, которые нам требовались в прошлом, и установить нормально. Я также могу установить Perl5. Но установка модулей через "cpan install" не работает. К сожалению, я не очень осведомлен о пакетах * nix, от которых зависит cpan, потому что все на моих устройствах (и, видимо, с Strawberry Perl под Windows) все зависимости устанавливаются автоматически, и мне никогда не приходилось заботиться об этом. В моей среде cygwin64 явно отсутствуют некоторые пакеты, необходимые для процесса сборки, выполняемого cpan. Но cpan в cygwin64 делает очень плохую работу, сообщая о том, чего не хватает или что не так.

Я попытался установить несколько комбинаций clang, gcc, mingw и других инструментов разработчика с помощью установщика cygwin, но все еще не смог заставить работать "cpan install требуемый :: модуль". В зависимости от используемой смеси пакетов я получаю разные ошибки (или признаки ошибок).

В качестве довольно надежной отправной точки, не могли бы вы дать мне список пакетов cygwin, которые я, безусловно, должен установить, чтобы иметь среду, в которой "cpan install ..." должен был бы успешно выполняться.


Дополнение # 1:

Если я устанавливаю только самые базовые пакеты cygwin (zsh, perl) и те, которые приходят в любом случае, я в итоге получаю это ...

keve@cygtest ~
$ perl -v

This is perl 5, version 26, subversion 3 (v5.26.3) built for     x86_64-cygwin-threads-multi
(with 7 registered patches, see perl -V for more detail)

Copyright 1987-2018, 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.


keve@cygtest ~
$ curl --version
curl 7.55.1 (Windows) libcurl/7.55.1 WinSSL
Release-Date: [unreleased]
Protocols: dict file ftp ftps http https imap imaps pop3 pop3s smtp smtps     telnet tftp
Features: AsynchDNS IPv6 Largefile SSPI Kerberos SPNEGO NTLM SSL

Любой из make, gmake, cmake, nmake, gcc, clang приводит к ответу «команда не найдена».

Запуск cpan делает это ...

$ cpan
Loading internal null logger. Install Log::Log4perl for logging messages
Sorry, we have to rerun the configuration dialog for CPAN.pm due to
some missing parameters. Configuration will be written to
 <</home/Valaki/.cpan/CPAN/MyConfig.pm>>


CPAN.pm requires configuration, but most of it can be done automatically.
If you answer 'no' below, you will enter an interactive dialog for each
configuration option instead.

Would you like to configure as much as possible automatically? [yes]

Use of uninitialized value $what in concatenation (.) or string at /usr/share/perl5/5.26/App/Cpan.pm line 669, <STDIN> line 1.
 <install_help>

Warning: You do not have write permission for Perl library directories.

To install modules, you need to configure a local Perl library directory or
escalate your privileges.  CPAN can help you by bootstrapping the local::lib
module or by configuring itself to use 'sudo' (if available).  You may also
resolve this problem manually if you need to customize your setup.

What approach do you want?  (Choose 'local::lib', 'sudo' or 'manual')
 [local::lib]

 ALERT: 'make' is an essential tool for building perl Modules.
Please make sure you have 'make' (or some equivalent) working.

Press SPACE and ENTER to disable curl
Press SPACE and ENTER to disable curl
Press SPACE and ENTER to disable curl
Press SPACE and ENTER to disable curl
Press SPACE and ENTER to disable curl
Press SPACE and ENTER to disable curl
Press SPACE and ENTER to disable curl
Press SPACE and ENTER to disable curl
Press SPACE and ENTER to disable curl
Press SPACE and ENTER to disable curl

и строка «Нажмите пробел и ENTER» продолжает заполнять мой экран, пока я не нажму Ctrl + C.

Итак, я снова запускаю установщик Cygwin и устанавливаю пакет devel / make. Таким образом, у меня есть это ...

$ make -v
GNU Make 4.2.1
Built for x86_64-unknown-cygwin
Copyright (C) 1988-2016 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

$ cpan
Loading internal null logger. Install Log::Log4perl for logging messages
Sorry, we have to rerun the configuration dialog for CPAN.pm due to
some missing parameters. Configuration will be written to
 <</home/Valaki/.cpan/CPAN/MyConfig.pm>>


CPAN.pm requires configuration, but most of it can be done automatically.
If you answer 'no' below, you will enter an interactive dialog for each
configuration option instead.

Would you like to configure as much as possible automatically? [yes]

Use of uninitialized value $what in concatenation (.) or string at /usr/share/perl5/5.26/App/Cpan.pm line 669, <STDIN> line 1.
 <install_help>

Warning: You do not have write permission for Perl library directories.

To install modules, you need to configure a local Perl library directory or
escalate your privileges.  CPAN can help you by bootstrapping the local::lib
module or by configuring itself to use 'sudo' (if available).  You may also
resolve this problem manually if you need to customize your setup.

What approach do you want?  (Choose 'local::lib', 'sudo' or 'manual')
 [local::lib]

Press SPACE and ENTER to disable curl
Press SPACE and ENTER to disable curl
Press SPACE and ENTER to disable curl
Press SPACE and ENTER to disable curl
Press SPACE and ENTER to disable curl
Press SPACE and ENTER to disable curl

На этот раз нет предупреждения о том, что "make" отсутствует, но та же самая строка "Press SPACE and ENTER" заполняет экран. Есть еще «неинициализированный $ what» и предупреждение о том, что у вас нет необходимых прав доступа к папкам. То, что я видел в вопросах других, обычно исправлялось переустановкой пакета perl с самым последним (у меня самый последний).

Итак, какой пакет мне не хватает? Или я сделал неправильный выбор выше, приняв значение по умолчанию? Обратите внимание: я установил дополнительные пакеты devel с моими предыдущими попытками. Но для простоты пока у меня есть только "perl" и "make".


Дополнение # 2

Следуя ответам Håkon и mob, я снова запустил установщик cygwin и установил рекомендуемые пакеты. Итак, теперь у меня установлены devel / binutils, devel / clang, devel / cmake, devel / gcc-core, devel / gcc-g ++, gccmakedep и make. Также доступен curl, который уже присутствовал, поэтому мне не нужно было устанавливать (возможно, это зависело).

К сожалению, я все еще получаю это при запуске "cpan":

$ cpan
Loading internal null logger. Install Log::Log4perl for logging messages
Sorry, we have to rerun the configuration dialog for CPAN.pm due to
some missing parameters. Configuration will be written to
 <</home/Valaki/.cpan/CPAN/MyConfig.pm>>


CPAN.pm requires configuration, but most of it can be done automatically.
If you answer 'no' below, you will enter an interactive dialog for each
configuration option instead.

Would you like to configure as much as possible automatically? [yes]

Use of uninitialized value $what in concatenation (.) or string at /usr/share/perl5/5.26/App/Cpan.pm line 669, <STDIN> line 1.
 <install_help>

Warning: You do not have write permission for Perl library directories.

To install modules, you need to configure a local Perl library directory or
escalate your privileges.  CPAN can help you by bootstrapping the local::lib
module or by configuring itself to use 'sudo' (if available).  You may also
resolve this problem manually if you need to customize your setup.

What approach do you want?  (Choose 'local::lib', 'sudo' or 'manual')
 [local::lib]

Press SPACE and ENTER to disable curl
Press SPACE and ENTER to disable curl

Относительно предупреждения $ what: Строки с 660 по 670 Cpan.pm идут так ...

BEGIN {
my $scalar = '';

sub _hook_into_CPANpm_report
    {
    no warnings 'redefine';

    *CPAN::Shell::myprint = sub {
        my($self,$what) = @_;
        $scalar .= $what;

Я могу избавиться от предупреждения, изменив строку 669 на эту ...

$scalar .= ($what // '');

... но это не решает проблему того, почему $ what все равно не определено. Тем не менее, я по-прежнему вижу, что «Нажмите пробел и ENTER, чтобы отключить скручивание», заполняя экран. И то же самое происходит, если я набираю «manual» и нажимаю «Enter» вместо того, чтобы принять параметр local :: lib по умолчанию.

Ответы [ 3 ]

2 голосов
/ 31 мая 2019

Исходя из вашего cpan вывода, вы можете попробовать использовать установщик Cygwin для установки следующих дополнительных пакетов перед повторным запуском cpan:

  • ALERT: 'make' is an essential tool for building perl Modules. -> установить make пакет.

  • Press SPACE and ENTER to disable curl, установите пакет curl. Кроме того, я думаю, что пакеты gcc и gcc-g++ необходимы для установки многих модулей CPAN. Тогда libcrypt-devel может потребоваться для вещей, связанных с SSH, а libreadline-devel приятно иметь для вызова истории в окне терминала Cygwin.

  • При желании можно установить библиотеку GNU MP Bignum: libgmp-devel. Я добавлю больше, как я получу обратную связь от вас:)
1 голос
/ 01 июня 2019

Вещи приняли интересный оборот. Я заметил, что, хотя у меня был curl с самого начала (поставляется с самой базовой средой Cygwin по умолчанию), я никогда не устанавливал его (не через установщик cygwin).

keve@cygtest ~
$ curl --version
curl 7.55.1 (Windows) libcurl/7.55.1 WinSSL
Release-Date: [unreleased]
Protocols: dict file ftp ftps http https imap imaps pop3 pop3s smtp smtps     telnet tftp
Features: AsynchDNS IPv6 Largefile SSPI Kerberos SPNEGO NTLM SSL

keve@cygtest ~
$ which curl
/cygdrive/c/Windows/system32/curl

И есть пакет curl, который можно пометить для установки. Итак, я установил Net / curl через установку cygwin, а затем получил это.

keve@cygtest ~
$ which curl
/usr/bin/curl

keve@cygtest ~
$ curl --version
curl 7.65.0 (x86_64-pc-cygwin) libcurl/7.65.0 OpenSSL/1.1.1b zlib/1.2.11 brotli/1.0.7 libidn2/2.0.4 libpsl/0.18.0 (+libidn2/2.0.2) libssh/0.8.7/openssl/zlib nghttp2/1.37.0
Release-Date: 2019-05-22
Protocols: dict file ftp ftps gopher http https imap imaps ldap ldaps pop3 pop3s rtsp scp sftp smb smbs smtp smtps telnet tftp
Features: AsynchDNS brotli Debug GSS-API HTTP2 HTTPS-proxy IDN IPv6 Kerberos Largefile libz Metalink NTLM NTLM_WB PSL SPNEGO SSL TLS-SRP TrackMemory UnixSockets

keve@cygtest ~
$ which -a curl
/usr/bin/curl
/cygdrive/c/Windows/system32/curl

В этот момент cpan больше не печатал сообщение «Нажмите пробел и ENTER, чтобы отключить скручивание», а начал вести себя как положено.

keve@cygtest ~
$ cpan
Loading internal null logger. Install Log::Log4perl for logging messages
Sorry, we have to rerun the configuration dialog for CPAN.pm due to
some missing parameters. Configuration will be written to
 <</home/keve/.cpan/CPAN/MyConfig.pm>>


CPAN.pm requires configuration, but most of it can be done automatically.
If you answer 'no' below, you will enter an interactive dialog for each
configuration option instead.

Would you like to configure as much as possible automatically? [yes]

Use of uninitialized value $what in concatenation (.) or string at /usr/share/perl5/5.26/App/Cpan.pm line 669, <STDIN> line 1.
 <install_help>

Warning: You do not have write permission for Perl library directories.

To install modules, you need to configure a local Perl library directory or
escalate your privileges.  CPAN can help you by bootstrapping the local::lib
module or by configuring itself to use 'sudo' (if available).  You may also
resolve this problem manually if you need to customize your setup.

What approach do you want?  (Choose 'local::lib', 'sudo' or 'manual')
 [local::lib]


Autoconfiguration complete.

Attempting to bootstrap local::lib...

Writing /home/keve/.cpan/CPAN/MyConfig.pm for bootstrap...
commit: wrote '/home/keve/.cpan/CPAN/MyConfig.pm'
Fetching with HTTP::Tiny:
http://www.cpan.org/authors/01mailrc.txt.gz
Reading '/home/keve/.cpan/sources/authors/01mailrc.txt.gz'
............................................................................DONE
Fetching with HTTP::Tiny:
http://www.cpan.org/modules/02packages.details.txt.gz
Reading '/home/keve/.cpan/sources/modules/02packages.details.txt.gz'
  Database was generated on Sat, 01 Jun 2019 09:17:02 GMT
  HTTP::Date not available
.............
  New CPAN.pm version (v2.26) available.
  [Currently running version is v2.18]
  You might want to try
    install CPAN
    reload cpan
  to both upgrade CPAN.pm and run the new version without leaving
  the current session.


...............................................................DONE
Fetching with HTTP::Tiny:
http://www.cpan.org/modules/03modlist.data.gz
Reading '/home/keve/.cpan/sources/modules/03modlist.data.gz'
DONE
Writing /home/keve/.cpan/Metadata
Fetching with HTTP::Tiny:
http://www.cpan.org/authors/id/H/HA/HAARG/local-lib-2.000024.tar.gz
Fetching with HTTP::Tiny:
http://www.cpan.org/authors/id/H/HA/HAARG/CHECKSUMS
Checksum for /home/keve/.cpan/sources/authors/id/H/HA/HAARG/local-lib-2.000024.tar.gz ok
'YAML' not installed, will not store persistent state
Configuring H/HA/HAARG/local-lib-2.000024.tar.gz with Makefile.PL
Attempting to create directory /home/keve/perl5

Checking if your kit is complete...
Looks good
Generating a Unix-style Makefile
Writing Makefile for local::lib
Writing MYMETA.yml and MYMETA.json
  HAARG/local-lib-2.000024.tar.gz
  /usr/bin/perl Makefile.PL --bootstrap -- OK
Running make for H/HA/HAARG/local-lib-2.000024.tar.gz
cp lib/local/lib.pm blib/lib/local/lib.pm
cp lib/POD2/PT_BR/local/lib.pod blib/lib/POD2/PT_BR/local/lib.pod
cp lib/POD2/DE/local/lib.pod blib/lib/POD2/DE/local/lib.pod
cp lib/lib/core/only.pm blib/lib/lib/core/only.pm
Manifying 4 pod documents
  HAARG/local-lib-2.000024.tar.gz
  /usr/bin/make -- OK
Running make test
PERL_DL_NONLAZY=1 "/usr/bin/perl.exe" "-I/home/keve/perl5/lib/perl5" "-MExtUtils::Command::MM" "-MTest::Harness" "-e" "undef *Test::Harness::Switches; test_harness(0, 'blib/lib', 'blib/arch')" t/*.t
t/bad_variables.t ...... ok
t/carp-mismatch.t ...... ok
t/classmethod.t ........ ok
t/de-dup.t ............. ok
t/lib-core-only.t ...... ok
t/pipeline.t ........... ok
t/shell.t .............. ok
t/stackable.t .......... ok
t/subroutine-in-inc.t .. ok
t/taint-mode.t ......... ok
All tests successful.
Files=10, Tests=172, 29 wallclock secs ( 0.03 usr  0.17 sys +  4.24 cusr 11.30 csys = 15.74 CPU)
Result: PASS
  HAARG/local-lib-2.000024.tar.gz
  /usr/bin/make test -- OK
Running make install
Manifying 4 pod documents
Installing /home/keve/perl5/lib/perl5/lib/core/only.pm
Installing /home/keve/perl5/lib/perl5/local/lib.pm
Installing /home/keve/perl5/lib/perl5/POD2/DE/local/lib.pod
Installing /home/keve/perl5/lib/perl5/POD2/PT_BR/local/lib.pod
Installing /home/keve/perl5/man/man3/lib.core.only.3pm
Installing /home/keve/perl5/man/man3/local.lib.3pm
Installing /home/keve/perl5/man/man3/POD2.DE.local.lib.3pm
Installing /home/keve/perl5/man/man3/POD2.PT_BR.local.lib.3pm
Appending installation info to /home/keve/perl5/lib/perl5/x86_64-cygwin-threads-multi/perllocal.pod
  HAARG/local-lib-2.000024.tar.gz
  /usr/bin/make install  -- OK

local::lib is installed. You must now add the following environment variables
to your shell configuration files (or registry, if you are on Windows) and
then restart your command line shell and CPAN before installing modules:

PATH="/home/keve/perl5/bin${PATH:+:${PATH}}"; export PATH;
PERL5LIB="/home/keve/perl5/lib/perl5${PERL5LIB:+:${PERL5LIB}}"; export PERL5LIB;
PERL_LOCAL_LIB_ROOT="/home/keve/perl5${PERL_LOCAL_LIB_ROOT:+:${PERL_LOCAL_LIB_ROOT}}"; export PERL_LOCAL_LIB_ROOT;
PERL_MB_OPT="--install_base \"/home/keve/perl5\""; export PERL_MB_OPT;
PERL_MM_OPT="INSTALL_BASE=/home/keve/perl5"; export PERL_MM_OPT;

Would you like me to append that to /home/keve/.bashrc now? [yes]


commit: wrote '/home/keve/.cpan/CPAN/MyConfig.pm'

You can re-run configuration any time with 'o conf init' in the CPAN shell
Terminal does not support AddHistory.

cpan shell -- CPAN exploration and modules installation (v2.18)
Enter 'h' for help.

cpan[1]>

И теперь я могу начать сборку модулей обычным методом «install требуемый :: пакет». Так что я наконец-то получил то, что хотел. Интересно, что каждый модуль, который я хотел собрать, не был собран. Но на keast они потерпели неудачу так, как я знаком с * nix. Так что теперь это еще одна проблема для другого дня.

Чтобы ответить на мой первоначальный вопрос: чтобы получить работающий "cpan" под cygwin, вы должны установить хотя бы эти пакеты. , .

  • Devel / Binutils
  • разви / лязг
  • разви / CMake
  • Devel / GCC-жильный
  • разви / GCC-г ++
  • разви / gccmakedep
  • разви / сделать
  • Net / локон

Последний, Net / curl чрезвычайно важен. Потому что базовая среда Cygwin уже имеет функциональный завиток, но «cpan» не работает с этим. Вы должны установить пакет Net / curl через установку cygwin. Это избавит от сообщений «Нажмите пробел и ENTER, чтобы отключить скручивание», заполняющих окно при запуске «cpan».

1 голос
/ 31 мая 2019

Основано на моем собственном наборе установленных пакетов и моей памяти о том, какие из них полезны в цепочке инструментов cpan:

binutils
bzip2
clang
cmake
gcc-core
gcc-g++
gccmakedep
make
curl  and/or  wget
...