Microsoft 社는 2022년 6월 15일 Internet Explorer 11의 지원을 종료했습니다.

perl-5.30.3 on CentOS 5.8

제목

perl-5.30.3 on CentOS 5.8

1. 준비작업

1.1. 다운로드

https://www.cpan.org/src/README.html 에서 다운로드 한다.

CentOS 5.8 에서 직접 다운로드 할 수 없고, 다른 장비에서 다운로드 한 파일을 sftp 따위로 올려야 한다.

curl 이든 wget 이든 안되고, wget 에 "--no-check-certificate" 을 추가해도 안된다.

curl -O https://www.cpan.org/src/5.0/perl-5.30.3.tar.gz

1.2. gcc 및 make 설치

yum install gcc make -y

2. 컴파일 및 설치

설치 디렉토리(-Dprefix=) 는 알아서 변경한다.

대부분의 Linux 배포판들은 /usr 이 설치 디렉토리(--prefix)이지만, 컴파일해서 설치하는 것들은 /usr/local 이나 /opt 아래에 두는 경우가 많다.

Configure 에서 "-de" 옵션을 생략하면 물어보는 것에 답을 해야 하고, Configure 명령어에서 "> ../logs/" 이하를 생략하고 실행해야 한다.

mkdir -p logs/perl-5.30.3
tar xvfz perl-5.30.3.tar.gz > logs/perl-5.30.3/tar.`date +%Y%m%d.%H%M%S`.log 2>&1
cd perl-5.30.3
sh Configure -de -Dcc=gcc -Dprefix=/opt/perl-5.30.3 > ../logs/perl-5.30.3/config.`date +%Y%m%d.%H%M%S`.log 2>&1
make > ../logs/perl-5.30.3/make.`date +%Y%m%d.%H%M%S`.log 2>&1
make test > ../logs/perl-5.30.3/test.`date +%Y%m%d.%H%M%S`.log 2>&1
make install > ../logs/perl-5.30.3/install.`date +%Y%m%d.%H%M%S`.log 2>&1

thread 지원을 위해 다음과 같이 -Dusethreads 를 추가할 수도 있다.

sh Configure -de -Dcc=gcc -Dprefix=/opt/perl-5.30.3 -Dusethreads > ../logs/perl-5.30.3/config.`date +%Y%m%d.%H%M%S`.log 2>&1

3. 다른 버전에서 발생하는 에러에 대해서

CentOS 5.8 에서는 perl-5.30.3 을 제외한 나머지 버전은 make test 에서 에러가 발생한다.

3.1. 5.32 ~ 5.38 에서 발생하는 에러

3.1.1. 에러 메시지

make test 의 말미에 다음과 같은 메시지가 출력된다.

Failed 1 test out of 2516, 99.96% okay.
../dist/IO/t/cachepropagate-unix.t

실패한 부분을 따라서 올라가면 다음과 같다.

dist/IO/t/cachepropagate-unix ....................................
# Failed test 'protocol defined'
# at t/cachepropagate-unix.t line 54.
# Failed test 'protocol defined'
# at t/cachepropagate-unix.t line 109.
# Looks like you failed 2 tests of 15.

3.1.2. 원인

CentOS 5.8 커널(2.6.18)이 SO_PROTOCOL 을 지원하지 않는 버전이다.

SO_PROTOCOL 은 2.6.32 이상에서 지원한다.

IO::Socket::UNIX->new()->protocol() 함수가 undef 를 반환하기 때문이다.

언젠가는 (TODO) SO_PROTOCOL 을 지원하지 않는 경우 테스트를 생략하도록 변경할 예정이라고 한다(cachepropagate-unix.t 참조).

(저 함수가 지원되지 않는다는 전제하에) 에러를 무시하고 설치해도 된다는 취지라고 생각된다.

3.2. 5.28 이하 에서 발생하는 에러

3.2.1. 에러 메시지

make test 의 말미에 다음과 같은 메시지가 출력된다.

Failed 1 test out of 1609, 99.94% okay.
../lib/Time/Local.t

실패한 부분을 따라서 올라가면 다음과 같다.

lib/Time/Local................................................
# Failed test 'timelocal year for 1970 1 2 0 0 0'
# at ../lib/Time/Local.t line 109.
# got: '170'
# expected: '70'
FAILED at test 6

3.2.2. 원인

perl 5.28 이전에는 (y2k 버그가 있는) Time::Local 1.25 이전 버전이 번들되었기 때문이다.

Time::Local 1.28 미만, 2020년 이후에 발생한다.

Time::Local 의 y2k 버그는 1.28 버전에서 수정되었다.

설치한 이후에 cpan 에서 Time::Local 을 업데이트 하는 방법으로 해결해도 된다.

제목

첨부파일