본문 바로가기
IT 실무/서버 관리

yum install/update 과정에서 pre-existing rpmdb 문제

by id 2020. 2. 23.
반응형
** Found 17 pre-existing rpmdb problem(s), 'yum check' output follows:
cloog-ppl-0.15.7-1.2.el6.x86_64 has missing requires of libgmp.so.3()(64bit)
goaccess-1.2-1.el6.x86_64 has missing requires of libtokyocabinet.so.8()(64bit)
libkadm5-1.10.3-65.el6.x86_64 has missing requires of krb5-libs(x86-64) = ('0', '1.10.3', '65.el6')
libkadm5-1.10.3-65.el6.x86_64 has missing requires of libkdb5.so.6()(64bit)
libkadm5-1.10.3-65.el6.x86_64 has missing requires of libkdb5.so.6(kdb5_6_MIT)(64bit)
mysql-community-server-5.7.29-1.el6.x86_64 has missing requires of libsasl2.so.2()(64bit)
openldap-2.4.40-16.el6.x86_64 has missing requires of libsasl2.so.2()(64bit)
openscap-1.0.8-1.0.1.el6.centos.x86_64 has missing requires of libpcre.so.0()(64bit)
openscap-1.0.8-1.0.1.el6.centos.x86_64 has missing requires of librpm.so.1()(64bit)
openscap-1.0.8-1.0.1.el6.centos.x86_64 has missing requires of librpmio.so.1()(64bit)
php-7.3.15-1.el6.remi.x86_64 has missing requires of httpd-mmn = ('0', '20051115', None)
2:postfix-2.10.1-6.el7.x86_64 has missing requires of libmysqlclient.so.18()(64bit)
2:postfix-2.10.1-6.el7.x86_64 has missing requires of libmysqlclient.so.18(libmysqlclient_18)(64bit)
ppl-0.10.2-11.el6.x86_64 has missing requires of libgmp.so.3()(64bit)
1:v8-3.14.5.10-25.el6.x86_64 has missing requires of libicudata.so.42()(64bit)
1:v8-3.14.5.10-25.el6.x86_64 has missing requires of libicui18n.so.42()(64bit)
1:v8-3.14.5.10-25.el6.x86_64 has missing requires of libicuuc.so.42()(64bit)

 

당신이 어떤 작업을 했는지는 케바케이겠지만, 여하튼 yum을 실행하려는데 위와 같은 pre-existing 문제로 update도 안되고 install 도 안 되는 난감한 상황이 발생하는 경우가 있다.

그냥 패키지 설치하려고 이런 저런 repo를 연계해서 설치하다 보니 dependancy가 꼬일 수도 있는데, 그런 경우 저 건수가 2~5건 정도로 작을 확률이 높다. 반면 필자의 경우처럼 CentOS 버전을 올린 경우 저 건수가 수백 개에 달하기도 한다.

 

어떤 missing requires 가 나왔는지에 따라 해결법이 모두 다르므로, 개략적인 해결법만 언급하자면

 

1. 꼬인 패키지를 풀어보자.

  • yum clean all
  • yum --skip-broken update
  • rpm --rebuilddb
  • package-cleanup --problems 
  • package-cleanup --dupes
    • 만약 package-cleanup 이 설치되지 않았다면 yum install yum-util

 

위 작업으로 간단하게 모든 것이 해결되면 가장 좋다. 하지만 대부분 저 명령어들로는 해결이 안되었기에 구글링을 하다 여기까지 들어왔으리라. 만약 되지 않는다고 해도 낙심하지 말고 아래 내용들을 보면서 실타레를 하나씩 풀어나가면 해결 못할 이슈는 없다.

 

[참고] 모든 실타레를 풀어야 해결되는 것은 아니다.

수백개의 pre-exsiting 에러가 났다고 '이번 서버는 망했다' 라고 생각할 필요 없다. 하나하 해결해나가다 보면 수십개가 한꺼번에 없어지기도 하고, 마지막에 수십개가 남았는데도 우리가 원하던 update가 되기도 한다. 하나하나 풀어가면서, 중간중간 하려던 yum update도 시도해 보자.

 

2. 패키지를 개별적으로 upgrade한다.

오류 내용을 보면 뭔가 심각하게 꼬인 것 같다. yum이 바보도 아니고 웬만한 dependancy 문제는 알아서 풀어주다가, 이도저도 안되는 상황이라 저런 에러를 뿜어낸 것 같지만, 의외로! 그냥 yum update openldap 처럼 업데이트를 해주니 아무런 문제 없이 pre-existing 문제가 해결되는 경우도 있다. 

 

3. 패키지를 지우거나 downgrade한다.

관련 건수가 많지 않은 경우 가장 확실한 방법이다. 저 목록 중에 나에게 굳이 불필요한 패키지가 있다면 yum remove로 지워버린다. 관련 dependancy까지 삭제되며, 패키지 한 개 삭제로 수십 개의 pre-existing 문제가 해결되기도 한다.

그런데 만약 grep처럼 도저히 지울 수 없는 패키지가 있다면 yum downgrade grep과 같이 버전을 다운그레이드 해준다. 저기 등장하는 대부분의 pre-existing 문제는 버전이 꼬여서 발생한 문제이므로 높은 확률로 저 목록 중 하나를 지워줄 것이다.

 

4. 필요한 친구를 설치해 준다.

mysql처럼 데이터가 날아가버릴까봐 같이 지우기도 찝찝하고, downgrade를 하려고 해도 해당사항이 없다고 나오는(nothing to do) 경우도 있다, 그런 경우 그들이 필요하다고 한 무언가를 찾아서 설치해주자.

내용을 보면 알겠지만, 대부분 필요한 so가 missing 되었다는 것이다. 구글에 검색을 하면 해당 so가 포함된 패키지의 rpm이 검색된다. 그리고 yum install로 특정 패키지를 설치하면 저 so가 설치된다는 정보들도 얻을 수 있다. 그리고 해당 패키지가 설치됨으로써 많은 pre-existing 문제가 해결되기도 한다.

 

ex) 위 오류에서 krb5-lib 에러는 yum install krb5-workstation krb5-libs krb5-auth-dialog를 통해 해결됨

ex) 위 오류에서 libicu* 에러는, libicu를 설치하려 하였으나, 기존의 libicu-last라는 패키지와 충돌이 발생한다는 오류가 있었고, libicu-last를 삭제한 후 libicu를 설치하여 해결됨

5. 결론

위에서 설명하는 내용들로 대략 유추가 되겠지만, 이 문제는 당신이  이전에 어떤 작업을 했느냐에 따라 나오는 내용이 천차만별이라 뚜렷한 만병통치약은 없다. 관련 에러 메시지를 죽 긁어서 구글링을 해 보았을 때, package-cleanup으로 모든 것이 한방에 해결되었다는 내용도 있고, 전혀 엉뚱한 패키지를 지웠더니 해결되었다는 말도 있다. 그 전혀 엉뚱한 패키지는 그 글을 쓴 사람이 이전에 삽질하다 잘못 설치된 패키지 때문에 오류가 생겼던 것이므로, 엉뚱하게 느껴졌다면 그건 당신에게 해당사항은 없는 것이다.

다시 말하지만 케바케이므로, 당신이 행했던 과거의 행위들과 관련지어서 해결해 나가야 한다. 뭔가 설치했다면 그것부터 지우거나 업그레이드 하거나 다운그레이드 해보자. 필자처럼 운영체제를 통째로 업그레이드 한 경우라면, 어쩔 수 없으니 하나하나 해결해 나가자.

 

아무쪼록, 잘 해결되길 기원합니다.

반응형

댓글0