[질문] glibc를 버젼업을 한 뒤로 rpm이 먹통입니다.
글쓴이: redhat2k / 작성시간: 화, 2004/01/06 - 11:02오후
redhat8 에 커널버젼을 2.6.0 으로 커널컴파일로 올린후에
glibc 를 버젼업할 필요가 생겨 페도라에서 다운 받은 rpm패키지로
업그레이드 했는데...그 이후 rpm 명령을 사용하면
[root@xx rpm]# rpm -Uvh --nodeps *.rpm
cannot handle file 'libc.so.6' with TLS data
이러한 에러 메시지가 생깁니다.
여기저기 검색을 해보니...원래 순서가 rpm -> glibc 순으로 해야된다고
하는군요...즉, rpm을 먼저 업그레이드한 후에 glibc를 해야한다는 의견이 있더군요....
하지만 이미 엎질러진 물이니 이것을 해결하기 위해 어찌해야 할지 고수님들의 의견을 듣고 싶습니다.
참고사이트:
1. http://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=83737
2. http://www.involution.com/tls.php
특히 2번의 경우는 해결책이 나온듯하나 역시 안되더군요...
속 시원하게 rpm을 싹지우고 다시 rpm을 재설치하는법이나...
아님 더 좋은 방법을 알고 싶습니다. :cry: :cry:
Forums:
간단한 방법중에 하나라면야;;
rpm 은 rpm 패키지로 배포하기도 하지만,
컴파일된 바이너리로도 있습니다.
이중에 static 컴파일된 녀석도 있으니,
그 녀석으로 새로운 rpm 패키지로 rpm 을 업데이트 하면 되지요.
뱀발. 업그레이드 하기 가장 위험한 패키지중에 하나가 glibc죠..-.-;;
테스트용으로 막 굴리는 시스템 아니면 glibc 는 업그레이드 안한답니다;
답변 감사합니다.제 시스템이 아래와 같은데...--------
답변 감사합니다.
제 시스템이 아래와 같은데...
-------------------------------------------
[root@xxxx]# rpm -qa | grep rpm
rpm-python-4.1-1.06
redhat-rpm-config-8.0-1
librpm404-4.0.4-8x.27
rpm-build-4.1-1.06
rpm404-python-4.0.4-8x.27
rpm-4.1-1.06
rpm-devel-4.1-1.06
[root@xxxx]# rpm -qa | grep glibc
glibc-common-2.3.2-11.9
glibc-profile-2.3.2-11.9
glibc-kernheaders-2.4-8.10
glibc-devel-2.3.2-11.9
glibc-2.3.2-11.9
-----------------------------------------------
ftp://ftp.rpm.org/pub/rpm/dist/rpm-4.1.x/rpm-4.1.i386.tar.gz
ftp://ftp.rpm.org/pub/rpm/dist/rpm-4.1.x/rpm-4.1.tar.gz
4.2.*에는 없고 4.1.*에만 tar.gz가 있더군요.
4.1.* 는 새로 업그레이드한 glibc 2.3.2 에서 문제가 없을까요?
rpm -qa 로 확인해보면 지금 있는것이 4.1.* 인데요...
Re: [질문] glibc를 버젼업을 한 뒤로 rpm이 먹통입니다.
glibc 는 공유 라이브러리 입니다. 즉, 다른 바이너리들이 작동을 할 때 glibc 라이브러리를 호출하여 사용을 하게 됩니다.
그런데, 이 공유 라이브러리에는 soname 이라는 것이 있어, 이 버전이 틀릴 경우에는 사용을 하지 못하게 됩니다.
님의 케이스가 이 경우라고 볼 수 있죠.
일단 방법은, 부팅 설치 CD 를 넣고 rescue 모드로 부팅한 후에, chroot 명령으로 glibc 를 배포본에 있는 것으로 --force 명령을 주어 설치하는 수 밖에 없을 겁니다.
참고로 glibc 는 왠만하면, 배포본에서 제공하는 업데이트만 사용해야 합니다. 만약 꼭 버전을 올려야 할 일이 있다면, 해당 버전을 제공하는 배포본을 설치 하셔야 한다는 얘기입니다.
리눅스 버전이 올라간다는 것은 glibc 버전이 올라가는 것과 동일선상이라고 할 수도 있을 정도로 glibc 는 의존도가 높은 패키지 입니다.
답변 감사합니다.근데 설치CD부팅해서 linux rescue로 들
답변 감사합니다.
근데 설치CD부팅해서 linux rescue로 들어오니
마운트를 시도하길래 Continue하고 프롬프트에서
chroot하니 다음과 같은 에러가 납니다.
~/bin/sh-2.05#chroot /mnt/sysimage
/bin/sh: error while loading shared libraries: libc.so.6: cannot open shared object file: No such file or directory
아니 이게 무슨일이랍니까?
포기하고 다시 정상부팅후에 libc.so.6을 찾아보니
--------------------------------------------------
[root@xxxx]# find / -name libc.so.6
/var/ftp/lib/libc.so.6
/lib/i686/libc.so.6
/lib/libc.so.6
/lib/tls/libc.so.6
[root@xxxx]# find / -name libc-2.3.2.so
/var/ftp/lib/libc-2.3.2.so
/lib/i686/libc-2.3.2.so
/lib/libc-2.3.2.so
/lib/tls/libc-2.3.2.so
--------------------------------------------------
이 문제를 어찌해결해야 할지 모르겠습니다.
제발 도와주세요....
혹시 참고가 되실까해서 아래에 몇가지 정보를 첨부합니다.
--------------------------------------------------
simple.c 라는 간단한 C파일을 컴파일 및 실행해보았습니다.
main()
{
return(0);
}
컴파일
gcc -o simple simple.c
그런다음...
[root@xxxx]# ldd -v simple
libc.so.6 => /lib/tls/libc.so.6 (0x42000000)
/lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x40000000)
Version information:
./simple:
libc.so.6 (GLIBC_2.0) => /lib/tls/libc.so.6
/lib/tls/libc.so.6:
ld-linux.so.2 (GLIBC_2.3) => /lib/ld-linux.so.2
ld-linux.so.2 (GLIBC_2.1) => /lib/ld-linux.so.2
ld-linux.so.2 (GLIBC_2.0) => /lib/ld-linux.so.2
ld-linux.so.2 (GLIBC_PRIVATE) => /lib/ld-linux.so.2
동적으로 링크되어 실행이 됩니다....그외 자세한건 모르겠습니다.
[root@xxxx]# ldd rpm
not a dynamic executable
[root@xxxx]# objdump -R rpm
rpm: file format elf32-i386
objdump: rpm: not a dynamic object
objdump: rpm: Invalid operation
정적으로 링크된 실행파일인가 봅니다. 자세한건 역시 모르겠습니다.
--------------------------------------------------
기존 파티션들이 /mnt/sysimage 아래에 마운트 되어 있다고 하면
기존 파티션들이 /mnt/sysimage 아래에 마운트 되어 있다고 하면,
다음과 같이 하시면 됩니다.
rpm --root=/mnt/sysimage --nodeps --force -Uvh glibc-xxx.rpm
댓글 달기