4장. 컴파일러 및 툴
sockaddr_in에서 gcc 호환성 문제 해결
기본 RHEL 6 컴파일러에는 이후 버전의 gcc(예: Red Hat Developer Toolset에서 제공되는 툴)에서 사용하는 것과 크게 다른 structaddr_in 을 복사하는 방법에 대한 규칙이 있습니다. 이로 인해 최신 컴파일러를 사용할 때 손상된 sockaddr_in 오버레이가 발생했습니다.
이번 업데이트에서는 sockaddr_in 구조의 사용되지 않는 부분이 정의된 방식을 변경합니다. 이제 최신 버전의 gcc가 올바르게 복사됩니다.
-fno-strict-aliasing은 이러한 소스를 컴파일하는 데 여전히 필요합니다. (BZ#1338673)
메모리를 할당하지 않은 프로세스의 메모리 사용량을 측정할 때 부동 소수점 예외 오류 해결
추가 메모리를 명시적으로 할당하지 않은 프로그램에서 memusage 유틸리티를 실행하면 부동 소수점 예외가 발생했습니다.
이번 업데이트에서는 제로된 내부 통계가 있는지 확인하고 해당 통계를 분리하지 않으므로 예외를 방지할 수 있습니다. (BZ#1331304)
IP 주소를 통과한 후 인터페이스를 스캔할 때 getaddrinfo()의 동작 개선
이 버전 이전의 glibc 버전에서는 호스트 이름이 숫자 IP 주소인 경우에도 getaddrinfo() 호출에서 참조하는 인터페이스의 모든 IP 주소를 검사합니다. 인터페이스에 구성된 IP 주소가 많은 시스템에서 호출에 과도한 시간이 소요되었습니다.
이번 업데이트를 통해 필요한 경우에만 검사가 발생하고 호출은 숫자 IP 주소를 전달할 때 신속하게 반환됩니다. (BZ#1270950)
스레드 취소 시 열려 있는 파일 설명자를 처리하기 위한 수정
POSIX 스레드 취소를 사용하면 glibc에서 특히 ID 정보를 처리할 때 열린 파일 설명자를 부적절하게 처리할 수 있습니다.
이 문제를 수정하고 스레드가 취소되는 경우에도 getpwuid_r 같은 기능이 완료되도록 하기 위해 exec 제품군의 호출에서 열린 파일 설명자를 올바르게 처리하도록 라이브러리 호출이 변경되었습니다. (BZ#1012343)
사용할 수 없는 Cryostat를 상속하는 tzdata-update에 대한 수정
/etc/localtime을 업데이트할 때 tzdata-update는 현재 프로세스를 적용하여 파일 권한을 결정합니다.
077과 같은 제한적인 값인 경우 루트가 아닌 사용자가 새 /etc/localtime 파일을 읽을 수 없습니다. 이 문제를 해결하기 위해 이제 tzdata-update를 무조건 rw-r--r- (0644)로 설정합니다. (BZ#1373646)
초기화되지 않은 데이터에 대한 getaddrinfo 액세스 해결
nscd가 활성화된 시스템에서 glibc의 getaddrinfo 함수는 초기화되지 않은 데이터에 액세스하고 잘못된 주소 정보를 반환할 수 있습니다.
이번 업데이트에서는 초기화되지 않은 데이터에 액세스하지 않고 올바른 주소가 반환됩니다. (BZ#1223095)
mutt의 컴파일된 기본 설정 또는 구성에서 시스템 기본 CA 번들이 기본값으로 설정되었습니다.
이전에는 TLS/SSL을 통해 새 시스템에 연결할 때
mutt 이메일 클라이언트에 사용자가 인증서를 저장해야 했습니다. 이번 업데이트를 통해 시스템 CA(인증 기관) 번들은 기본적으로 mutt 로 설정됩니다. 결과적으로 mutt 는 이제 SSL/TLS를 통해 인증서를 승인하거나 거부하라는 메시지를 표시하지 않고 유효한 인증서가 있는 호스트에 연결합니다. (BZ#1196787)
resolv::DNS 에서 더 이상 잘린 DNS 응답을 반환하지 않음
DNS 응답이 하드 코딩된 512바이트 제한에 맞지 않은 경우 Ruby
Resolv::DNS 확인자는 잘린 DNS 응답을 자동으로 반환했습니다. 결과적으로 완전한 DNS 응답을 받으려면 수많은 DNS 레코드에서 UDP(User Datagram Protocol)에서 TCP(Transmission Control Protocol)로 DNS 연결을 업그레이드해야 했습니다. 이러한 영향을 받는 Microsoft Active Directory 도메인에는 KDC(Key Distribution Center) 목록에 더 큰 서버 세트가 포함되어 있습니다. 이번 업데이트를 통해 UDP 응답이 잘린 경우 RFC 1123에 따른 올바른 동작인 TCP를 사용하여 Resolv::DNS 재시도합니다. 결과적으로 전체 DNS 응답이 반환됩니다. (BZ#1331086)
.history 파일이 네트워크 파일 시스템에 있을 때 tcsh 가 더 이상 응답하지 않음
이전 버전에서는
.history 파일이 NFS 또는 Samba와 같은 네트워크 파일 시스템에 있는 경우 로그인 프로세스 중에 tcsh 명령 언어 인터프리터가 응답하지 않는 경우가 있었습니다. 이번 업데이트를 통해 네트워크 파일 시스템에 있는 경우 .history 파일이 잠겨 있지 않습니다. 결과적으로 tcsh 는 설명된 상황에서 더 이상 응답하지 않습니다.
tcsh 의 여러 인스턴스가 실행 중이면 .history 파일이 손상될 수 있습니다. 명시적 파일 잠금 메커니즘을 활성화하여 이 문제를 해결할 수 있습니다. 이렇게 하려면 tcsh 구성 파일의 savehist 옵션에 lock 매개 변수를 추가합니다. 예를 들면 다음과 같습니다.
$ cat /etc/csh.cshrc
# csh configuration for all shell invocations.
set savehist = (1024 merge lock)
.history 가 네트워크 파일 시스템에 있을 때 tcsh 가 파일 잠금을 사용하도록 하려면 lock 매개 변수가 savehist 옵션의 세 번째 매개 변수여야 합니다. Red Hat이 lock 매개변수를 사용하면 로그인 프로세스 중에 tcsh 가 응답하지 않도록 할 수 없기 때문에 자체 위험으로 이 작업을 수행하십시오. (BZ#885901)
LWP::UserAgent Perl 모듈이 HTTPS 요청에 대한 프록시 설정을 올바르게 처리함
이전에는
LWP::UserAgent Perl 모듈이 기본적으로 HTTPS 프록시 환경 변수를 준수하지 않았습니다. perl-libwww-perl 패키지 버전 5.883-3은 TLS 구현을 위한 Net::SSL 모듈 대신 IO::Socket::SSL 모듈을 사용하기 시작했습니다. 결과적으로 Net:SSL 모듈에서 https_proxy 환경 변수 처리에 의존하는 애플리케이션은 HTTPS 프록시 서버를 사용하는 대신 HTTPS 서버에 직접 연결을 설정했습니다.
이번 업데이트를 통해
LWP::UserAgent 모듈에 Net::SSL 모듈의 동작이 추가되어 env_proxy 옵션이 LWP::UserAgent 모듈의 new() 메서드에 전달되지 않은 경우 https_proxy 및 HTTPS_PROXY 환경 변수가 적용됩니다. 또한 URL 스키마가 없는 프록시 사양이 인식됩니다. 결과적으로 perl-libwww-perl 패키지에서 IO::Socket::SSL 암호화 백엔드로 전환한 후 Net::SSL 모듈을 사용하는 애플리케이션이 올바르게 작동합니다. (BZ#1400632)
Frontier::Client Perl 모듈이 더 이상 HTTPS 요청에 대한 프록시 설정을 무시하지 않음
Frontier::Client Perl 모듈을 사용하여 프록시 서비스를 통해 XML-RPC 요청을 HTTPS 서버에 보낼 때 프록시 설정이 무시되었습니다. 결과적으로 요청이 프록시 서버가 아닌 HTTPS 서버로 직접 전송되었습니다. 이번 업데이트를 통해 HTTP 및 HTTPS 스키마타 모두에 대해 프록시 설정을 기본 LWP::UserAgent 오브젝트에 전달하도록 Frontier::Client Perl 모듈이 수정되었으며, Frontier::Client 는 HTTPS 요청에서도 프록시 설정을 준수합니다. (BZ#832390)
RPM 확인에서 더 이상 /var/account/pacct 파일의 오류를 보고하지 않음
이전에는 설치 후
/var/account/pacct 모드가 설정되지 않았기 때문에 RPM 확인 및 규정 준수 검사에서 오류가 보고되었습니다. 이 버그를 수정하려면 설치 후 /var/account/pacct 모드가 0600으로 변경됩니다. 결과적으로 RPM 확인 검사에서 더 이상 /var/account/pacct 의 오류를 보고하지 않으며 이제 root로만 파일에 액세스할 수 있습니다. (BZ#1182317)
tcsh 의 작업 출력이 stdout에 올바르게 표시됨
tcsh 의 여러 회귀 문제가 수정되었습니다.
이번 업데이트에서는 tcsh 명령 언어 인터프리터의 여러 회귀 문제가 수정되었습니다.
- 이제
Ctrl+P또는위쪽 화살표키를 사용하여 명령 기록을 검색하면 백슬래시가 올바르게 표시됩니다. - 이제 백슬래시가 사용자 정의 별칭을 올바르게 이스케이프합니다. 이 경우 git-completion이 수정되었습니다.
사용 가능한 메모리 사용으로 인해 Git 단축 로그 가 더 이상 충돌하지 않음
이전 버전에서는 이메일 주소 항목이 경우에만 다른 경우 git shortlog 명령의
.mailmap 기능이 중복 이메일 항목을 strdup 포인터로 대체하지 않았으며 사용 가능한 메모리를 참조했습니다. 결과적으로 Git 은 이미 사용 가능한 메모리를 사용하므로 예기치 않게 종료되었습니다. 이러한 항목이 교체되기 전에 메모리가 해제되고 git shortlog 가 할당된 메모리만 올바르게 사용하도록 하는 패치가 적용되었습니다. (BZ#874659)
문자열에 HASH를 보고할 때 Perl 인터프리터가 더 이상 충돌하지 않음
mod_perl 환경에서 XML::LibXSLT Perl 스크립트를 실행할 때 Perl 인터프리터는 런타임 오류를 문자열로하기 위해 Can't coerce HASH 를 보고하려고 하는 동안 세그먼트 오류로 예기치 않게 종료될 수 있었습니다. 오류 메시지를 인쇄하는 코드가 누락된 스크립트 줄 세부 정보를 올바르게 처리하도록 수정되었으며 이 시나리오에서는 Perl 인터프리터가 더 이상 충돌하지 않습니다. (BZ#1364206)
gdbserver 에서 컨테이너의 프로세스 원활한 디버깅 지원
이번 업데이트 이전에는
GDB 가 SPC(Super-Privileged Container) 내에서 실행 중이고 Red Hat Enterprise Linux Atomic Host의 다른 컨테이너에서 실행 중인 프로세스에 연결된 경우 GDB 는 기본 실행 파일 또는 디버깅할 프로세스에 의해 로드된 공유 라이브러리의 바이너리 이미지를 찾지 못했습니다.
결과적으로
GDB 는 존재하지 않거나 존재하지 않지만 일치하지 않는 파일과 관련된 오류 메시지를 표시할 수 있었습니다. 또한 GDB 는 올바르게 연결된 것처럼 보일 수 있지만 후속 명령은 잘못된 정보가 표시되거나 표시될 수 있습니다.
Red Hat Enterprise Linux 6.9에서 gdbserver 가 컨테이너의 디버깅 프로세스를 원활하게 지원하기 위해 확장되었습니다. Red Hat Enterprise Linux 6.9 버전의 gdbserver 는
qXfer:exec-file:read 및 vFile:setfs 패킷을 새로 지원합니다. 그러나 Red Hat Enterprise Linux 6.9 버전의 gdb 는 이러한 패킷을 사용할 수 없습니다. Red Hat Developer Toolset 4.1 이상 버전 gdb 는 컨테이너 및 Red Hat Enterprise Linux 6.9 gdb 서버와 함께 사용하는 것이 좋습니다. gdbserver 의 Red Hat Developer Toolset 버전도 사용할 수 있습니다.
Red Hat Enterprise Linux 6.9 gdb 는 이제 -p 매개변수(또는 attach 명령)와 함께 실행할 때 gdbserver 를 사용할 것을 권장하고, 동시에 연결된 프로세스가 컨테이너에 있는 프로세스를 감지할 수 있습니다. Red Hat Enterprise Linux 6.9 gdb 는 file 명령을 명시적으로 사용하여 디버깅되는 컨테이너에서 실행 가능한 프로세스의 위치를 지정하는 것을 제안합니다. 대신 gdb 의 Red Hat Developer Toolset 버전을 사용할 때는 file 명령을 입력할 필요가 없습니다.
이번 업데이트를 통해 Red Hat Enterprise Linux 6.9 gdb server 는 Red Hat Developer Toolset 4.1 이상과 함께 컨테이너에서 프로세스를 원활하게 디버깅할 수 있습니다. 또한 Red Hat Enterprise Linux 6.9 gdb 는 Red Hat Developer Toolset gdb 를 사용할 수 없는 경우 컨테이너에서 프로세스를 디버깅하는 방법을 안내합니다. (BZ#1316539)