티스토리 뷰

 

1.

리눅스에서 인터넷 연결이 되지 않는 조건하에 postgresql과 postgis를 설치하라는 미션을 받았다.

당연히 인터넷 연결이 안 되는 환경이면 yum을 이나 apt 명령어를 사용할 수 없다.

그렇다면 rpm파일을 직접 풀어서 설치해야 하는데, 이때 가장 문제가 되는 것은 의존성 관계이다.

 

 

 

2. 의존성 관계란?

리눅스에서 A라는 프로그램을 설치하려고 A.rpm이라는 파일을 다운로드한다.

rpm -ivh A.rpm 또는 rpm -i A.rpm이라는 명령어를 이용해서 설치한다.

하지만 이때 아래와 같은 에러가 발생한다.

error: Failed dependencies: B is needed by A
                                             C is needed by A

 

위의 에러는 B랑 C라는 패키지가 설치되어야지만 A가 설치 가능하다는 의미이다.

따라서 순서대로 B랑 C를 먼저 설치하고 A를 설치해야 한다.

 

dependecy error

이러한 과정이 반복되면서 수많은 dependecy error를 해결하는 것은 매우 번거로운 일이다.

왜냐하면 B랑 C를 설치할 때 역시 error: Failed dependencies:라는 에러가 발생하게 되기 때문.

이렇게 하나의 파일이 다른 여러 파일과 얽혀있는 것을 의존성 관계라고 한다.

사실 위의 같은 과정을 인터넷이 되는 환경에서는 [yum install] 명령어 한 번으로 관련 의존성 파일을 한번에 다운로드 받을 수 있다. 원래는 패키지 하나 설치하려면 수십개의 파일을 설치해야하지만, 여태까지 우리는 명령어 한번으로 관련 의존성 파일을 쉽게 다운로드하고 있었던 것이다. 

 

 

 

3.

나는 처음 리눅스에서 아무것도 모르고 하나하나 rpm 파일을 설치하는 노가다를 했었는데,

수많은 dependency를 발견하고 이렇게 하는 건 아무리 생각해도 아닌 것 같아서 포기하고 다른 방법을 찾아봤다.

아래는 내가 해결하려던 dependency 에러이다.

postgresql12-devel-12.10
- libicu-devel       	
- - libicu(x86-64)     	 

- llvm-toolset-7-clang >= 4.0.1  	
- - libLLVM-5.0.so()(64bit)
- - - llvm-toolset-7-runtime		
- - - - scl-utils

- - libclang.so.4()(64bit)
- - - devtoolset-7-gcc-c++ 
- - - - devtoolset-7-gcc
- - - - - devtoolset-7-binutils >= 2.22.52.0.1
- - - - - - devtoolset-7-runtime
- - - - - - - /usr/sbin/semanage  ->  policycoreutils-python
- - - - - - - - audit-libs-python >= 2.1.3-4
- - - - - - - - - audit-libs(x86-64)  이 없어서 setools-libs로 대신하려고 했는데
setools-libs의 하위인 .libselinux와 libsepol이 없다....
아무래도 이상하다
그냥 vm 다시 파고 처음부터 해봐야겠다.,,,,

정말 답도 없다... 

 

 

 

4. yumdownloader

구글링 결과 yumdownloader를 통해 해당 환경의 의존성 관련 파일들을 한 번에 받을 수 있는 방법을 알게 되었다.

하지만 문제는 결국에 파일을 내려받았음에도 불구하고, 수많은 파일을 rpm -i라는 명령어로 내가 직접 의존성에 맞게 순서대로 설치해야 했다.

for x in *; do rpm -i $x; done이라는 명령어를 반복 실행하는 방법도 있지만,

결국에는 꼬리를 물고 돌고도는 엄청나게 복잡한 dependency error를 해결할 수 없었다. 

이를 해결할 수 있는 방법은 yum repository이다.

 

 

5. yum repository

yum repository이란?

하나의 저장소를 만들고, 그 저장소에 의존성 관련 rpm파일을 yumdownloader를 사용해서 넣어둔다.

[yum install 저장소이름] 명령어를 통해서 자동으로 dependency에러 없이 파일이 설치가 된다. (인터넷 사용 ㄴ)

 

따라서 yumdownloader를 이용해서 yum repository에 의존성 파일들을 한번에 넣어놓고 [yum install 저장소이름]

명령어 한번으로 패키지를 설치할 수 있다.

 

 

 

6. 따라서 필자는 A서버, B서버 총 두 가지의 서버를 만들었다.

- A서버: 인터넷 연결이 된 서버

- B서버: 인터넷 연결이 안 되는 서버 (=폐쇄망)

A서버에 저장소를 만들고 yumdownloader를 이용해서 관련 패키지를 내려받는다.

A서버에서 내려받은 파일을 B서버로 옮긴다. 

B서버도 저장소를 만들고 A서버에서 옮겨 받은 파일을 저장소에 넣는다. yum install을 이용해서 설치한다.

 

 

7. A서버에서 B서버로 파일 전송

A서버에서 B서버로 파일 전송하는 법은 다양한 방법이 있다.

USB 마운트, ssh, command 명령어

필자는 scp명령어를 이용해서 설치했다.

(※ 단, scp통신을 이용하려면 인터넷이 설치되어야 함)

 

 

8. 설치

B서버에서 [yum install 패키지] 이름 명령어로 간단하게 설치를 완료한다.

 

 

9. 마무리

필자는 이러한 방법을 모르고 많은 뻘짓을 하였지만,

이 글을 보는 사람들은 나 같은 실수를 안 하기를 빈다.. ㅠㅜ

 

 

 

Ref.

https://dololak.tistory.com/331

 

[Linux] 리눅스 yum이란? yum 명령어 사용법

yum(Yellodog Update Modified) yum이란 Yellodog Update Modified의 약자로 레드햇 계열의 리눅스 배포판에서 사용하는 프로그램(패키지) 설치 관리 도구 입니다. 명령어 이름으로만 봤을때는 전혀 기능과 관련

dololak.tistory.com

 

 

 

댓글