최근 새로 구축한 Linux 환경에 설치하려는 솔루션이 지금보다 상위 버전의 Glibc를 요구하는 경우가 있었다.
결론부터 말하면 안하는 것을 추천한다 !!!!
(시간이 많은 프로젝트이고 테스트가 가능하다면 해도 됨)
하지만 알아본 내용 정리삼아 포스팅 해본다 ㅎㅎ
Glibc 란?
GNU C Library의 약자로, 리눅스의 C언어 프로그래밍을 수행하기 위한 표준 라이브러리
리눅스의 커널은 대부분 C언어로 쓰여있다.
한마디로 사용자가 리눅스를 쓰기 위해 필수로 사용하는 패키지라고 보면 되는데,
잘못 건드렸다가 OS 먹통된다는 커뮤니티 글이 상당수 보인다.
이론 상으로 Glibc를 건드리는 것은 리눅스 내부를 뜯어 고친다는 의미나 다름 없었다.
내 경우는 Red Hat 환경이였고,
찾아보니 버전마다 기본적으로 Glibc 버전이 패키지에 설치되어 릴리즈 되고 있었다.
Product | Red Hat 7 | Red Hat 8 | Red Hat 9 |
GA | glibc-2.17-55 | glibc-2.28-42 | glibc-2.34-28 |
Update 1 | glibc-2.17-78 | glibc-2.28-72 | glibc-2.34-40 |
Update 2 | glibc-2.17-105 | glibc-2.28-101 | glibc-2.34-60 |
Update 3 | glibc-2.17-157 | glibc-2.28-127 | glibc-2.34-83 |
Update 4 | glibc-2.17-196 | glibc-2.28-151 | |
Update 5 | glibc-2.17-222 | glibc-2.28-164 | |
Update 6 | glibc-2.17-260 | glibc-2.28-189.1 | |
Update 7 | glibc-2.17-292 | glibc-2.28-211 | |
Update 8 | glibc-2.17-307 | glibc-2.28-225 | |
Update 9 | glibc-2.17-317 | glibc-2.28-236 |
['24 년 8월 기준]
※ CentOS도 Red Hat과 glibc 마이너 버전은 다르지만, 메이저 버전은 전체적으로 동일
찾아보니 Red Hat 공식 Customer Portal에서는 Glibc 버전 업그레이드를 지원하지 않는다고 명시되어 있었다.
예를 들면, RHEL 8 버전은 glibc-2.28가 패키징되어 출시되었으며 업그레이드는 공식적으로 지원하지 않음(Not Supported)
나는 Red Hat 8 환경에서 Glibc 2.35 이상을 요청 받았다.
업그레이드 해도 동작하지 않을 가능성이 높고
잘 동작해도 이걸 운영으로 넘기는건 아닌 것 같다고 가이드했지만
급하다고 하니 테스트까지는 지원을 해줘야 할 것 같았다.
1. Glibc 버전 확인
# ldd --version
2. Glibc 버전 업그레이드
정확하게는 버전 업그레이드가 아닌, glibc 신규 버전을 추가로 빌드해주는 개념
# yum install bison
# yum install python3
-- bison, python3 패키지 설치, 그리고 glibc tar 파일을 서버에 업로드
https://ftp.gnu.org/gnu/glibc/
※ glibc는 여기서 다운로드 가능
# mkdir $HOME/glibc
# mkdir $HOME/glibc/build
# mkdir $HOME/glibc/install
-- glibc 2.35 Compile할 경로 생성
# cd $HOME/glibc/build
# $HOME/glibc-2.35/configure --prefix=/opt/glibc-2.35
# make
# sudo make install
-- 해당 경로에 glibc 2.35 Compile 및 설치 (/opt 하위 경로이므로 root 권한 필요)
-- Compile 진행 시간은 다소 걸린다. 5~10분 걸렸던 것 같다.
# ls /opt/glibc-2.35
# /opt/glibc-2.35/bin/ldd --version
-- 설치되면 빌드된 bin 경로 안에서 버전 확인이 가능하다.
-- 다른 경로에서 glibc 버전 확인하면 사진처럼 이전 버전이 보인다.(glibc를 추가 설치한 개념이기 때문)
-- 따라서 glibc가 필요한 S/W 상에서는 경로를 지정해줘야 함
라이브러리 경로를 아예 지정해줘서 출력하도록하면 사진처럼 Segmentation fault 가 발생한다.
glibc가 필수 패키지이기 때문에,
리눅스에서 제공하는 다수의 패키지들(ld-linux.so.2 포함)이 기존 버전을 바라보도록 하드 코딩 되어 있다고 한다.
--
상위 버전의 glibc 호환이 필요한 경우는 보통 구축 단계일테니,
해당 버전을 지원하는 OS로 변경하거나(ubuntu, fedora 등) 무관한 Windows 서버를 통해 해결하는 것이 가장 좋다고 판단된다.