우리 애플리케이션은 현재 RHEL 6에서 실행 중인 모놀리식 Perl 애플리케이션이며 RHEL 7에서 빌드하려고 합니다. 우리는 perlbrew를 사용하여 Perl 5.18.2 스레드에서 실행 중입니다. /opt/prism 디렉토리에 설치되었지만 /usr/local/bin/perl에 심볼릭 링크되어 있으므로 거기에 링크되어 있는 것을 볼 수 있습니다. 대부분의 모든 항목을 올바르게 설정했지만 libapreq2를 컴파일하려고 하면 이상한 문제가 발생합니다.
구성이 제대로 작동하고 문제 없이 make가 실행됩니다. 그러나 make test는 Apache::TestSSLCA에 대한 오류를 발생시킵니다.
루트가 아닌 사용자로 실행한 명령은 다음과 같습니다. 먼저 Perl 버전 정보를 확인하세요.
bash# perl -v
This is perl 5, version 18, subversion 2 (v5.18.2) built for x86_64-linux-thread-multi
(with 1 registered patch, see perl -V for more detail)
./configure --prefix=/opt/prism/work --enable-perl-glue --with-apache2-apxs=/opt/prism/work/bin/apxs --with-perl=/usr/local/bin/perl
make
make test
다음 오류가 발생합니다.
ulimit -c unlimited; /opt/prism/perl5/perlbrew/perls/threaded-perl-5.18.2/bin/perl /opt/PEC.longshot/libapreq2-2.13/module/t/TEST
[ debug] configuring httpd
[ debug] Using httpd: /opt/prism/work/bin/httpd
[ debug] isolated httpd_info VERSION = Apache/2.2.27 (Unix)
[ debug] isolated httpd_info BUILT = May 7 2020 10:37:33
[ debug] isolated httpd_info MODULE_MAGIC_NUMBER = 20051115:33
[ debug] isolated httpd_info SERVER_MPM = Prefork
[ debug] isolated httpd_defines APACHE_MPM_DIR = server/mpm/prefork
[ debug] isolated httpd_defines APR_HAS_SENDFILE = 1
[ debug] isolated httpd_defines APR_HAS_MMAP = 1
[ debug] isolated httpd_defines APR_HAVE_IPV6 (IPv4-mapped addresses enabled) = 1
[ debug] isolated httpd_defines APR_USE_SYSVSEM_SERIALIZE = 1
[ debug] isolated httpd_defines APR_USE_PTHREAD_SERIALIZE = 1
[ debug] isolated httpd_defines SINGLE_LISTEN_UNSERIALIZED_ACCEPT = 1
[ debug] isolated httpd_defines APR_HAS_OTHER_CHILD = 1
[ debug] isolated httpd_defines AP_HAVE_RELIABLE_PIPED_LOGS = 1
[ debug] isolated httpd_defines DYNAMIC_MODULE_LIMIT = 128
[ debug] isolated httpd_defines HTTPD_ROOT = /opt/prism/work
[ debug] isolated httpd_defines SUEXEC_BIN = /opt/prism/work/bin/suexec
[ debug] isolated httpd_defines DEFAULT_PIDLOG = logs/httpd.pid
[ debug] isolated httpd_defines DEFAULT_SCOREBOARD = logs/apache_runtime_status
[ debug] isolated httpd_defines DEFAULT_LOCKFILE = logs/accept.lock
[ debug] isolated httpd_defines DEFAULT_ERRORLOG = logs/error_log
[ debug] isolated httpd_defines AP_TYPES_CONFIG_FILE = conf/mime.types
[ debug] isolated httpd_defines SERVER_CONFIG_FILE = conf/httpd.conf
[ debug] inheriting config file: /opt/prism/work/conf/httpd.conf
[ debug] using httpd.conf inherited ServerRoot to resolve conf/mime.types
[ debug] conf/mime.types successfully resolved to existing file /opt/prism/work/conf/mime.types
[ debug] Matched Apache revision Apache/2.2.27 2
[ error] configure() has failed:
Use of each() on hash after insertion without resetting hash iterator results in undefined behavior, Perl interpreter: 0x18a2010 at /opt/prism/perl5/perlbrew/perls/threaded-perl-5.18.2/lib/site_perl/5.18.2/x86_64-linux-thread-multi/Apache/TestSSLCA.pm line 103.
Compilation failed in require at /opt/prism/perl5/perlbrew/perls/threaded-perl-5.18.2/lib/site_perl/5.18.2/x86_64-linux-thread-multi/Apache/TestConfig.pm line 1474.
TestSSLCA.pm 라인 103을 보면 다음과 같습니다.
#generate DSA versions of the server certs/keys
while (my($key, $val) = each %$cert_dn) {
next unless $key =~ /^server/;
my $name = join '_', $key, 'dsa';
$cert_dn->{$name} = { %$val }; #copy
$cert_dn->{$name}->{OU} =~ s/rsa/dsa/;
}
TestConfig.pm 라인 1474에는
require Apache::TestSSLCA;
어떤 도움이라도 대단히 감사하겠습니다.
답변1
인용한 코드는 %cert_dn
반복 루프 내에서 작성된 것으로 보입니다 %cert_dn
. 컴파일에 사용한 Perl 버전에 따르면 이것이 허용되지 않습니다.
RHEL 6에서 이전 Perl을 사용하여 구축하고 있나요?
mod_perl을 업그레이드하거나 Perl을 다운그레이드하면 성공적으로 빌드할 수 있을 것으로 생각됩니다.
내부에현재 mod_perl 트렁크문제의 스니펫은 다음과 같습니다.
#generate DSA versions of the server certs/keys
for my $key (keys %$cert_dn) {
next unless $key =~ /^server/;
my $val = $$cert_dn{$key};
my $name = join '_', $key, 'dsa';
$cert_dn->{$name} = { %$val }; #copy
$cert_dn->{$name}->{OU} =~ s/rsa/dsa/;
}
이것을 mod_perl 버전에 복사하면 결과도 빌드될 수 있습니다.