폐쇄망에서 패키지 설치하기

스르륵·2022년 9월 2일
0

최근 심각하게 많은 업무가 몰려오면서 눈코뜰새 없이 바빴다.
그 와중에 이거는 꼭 정리해두면 나중에 쓸모가 있겠구나 싶은 내용이 있어서 정리하려고 한다.

혼자 공부할때나 취준/학생일 때는 폐쇄망이라는 것을 염두할 이유가 저어어어언혀 없다.
나도 그랬고 인터넷이 없는 환경에서 무언가 설치하고 환경을 구성해야한다는 것 자체를 생각해본 적이 없었다.
그런데 이번에 모 금융 SI 회사와 프로젝트를 하면서 폐쇄망에 airflow와 opensearch를 설치해야 했다.

처음에는 소스 파일 가지고 설치하면 되겠지 했지만... 설치에 필요한 dependency들을 일일히 확인해가며 설치한다는 것은 너무 많은 공수가 들고 설치할 것이 많다면 말도 안되는 짓이었다.
무사히 설치 파일을 준비하며 새로 알게된 인터넷 연결 없이 설치하는 방법을 정리해두려 한다.

1. 온라인 설치 방법

이 글에서는 인터넷이 연결된 환경에서 설치하는 경우는 온라인 설치, 그렇지 않은 경우는 폐쇄망 설치라고 부를 것이다.

우선 나는 리눅스 중에서도 우분투만 써봤다. 레드햇을 아무래도 굳이 개인이 돈내고 써야할 이유는 없기 때문이다. 그래서 apt-get install에 대응되는 것이 yum install이었는데, 우분투에서는 항상 별 생각없이 apt-get install <package>를 써왔지만 RHEL에서는 레포지토리 등록을 해야 yum install이 가능하다는 사실도 이번에 처음 알게 됐다.

이런 형태의 repo 파일을 만든뒤 등록을 해줘야 repository가 연결되고 온라인 설치를 진행할 수 있다. 처음 rhel 인스턴스를 만들고 들어가니 repo 등록이 전혀 안되어있어서 처음부터 당황했었다.
이후에는 인터넷에서 흔히 써있는 대로 yum을 사용하면 되겠다.

두 번째 방법은 rpm 파일을 받아서 설치하는 것이다. 우분투로 치면 deb파일로 설치한다고 할 수 있겠다. 하지만 yum install과 달리 자동으로 dependency까지 설치해주지는 않기 때문에 추가로 설치할 필요는 있다.

2. 폐쇄망 설치

우선 폐쇄망 설치를 위해서는 온라인 설치가 가능한 서버에서 패키지와 해당 패키지의 dependency를 모두 다운받은 뒤에 다운받은 패키지 모음을 폐쇄망으로 전송하고 설치하게 된다.
보통의 프로그램들은 소스를 통한 수동설치를 지원하지만 이때도 gcc와 같은 dependency들이 필요하기 준비해야한다.

1. yumdownloader 설치

yum-utils를 설치하면 yumdownloader를 사용할 수 있다. yumdownloader는 설치하려는 패키지와 dependency들을 다운받을 수 있게 해준다
예를 들어 gcc를 설치하기 위한 파일을 다운받기 위해서는

이렇게 사용하면 된다. 다운받을 폴더를 지정하려면 --downloaddir=을 추가해주면 된다.
이때 --downloadonly는 현재 서버에는 설치하지 않고 다운로드만 받겠다는 설정이지만 이미 설치된 패키지는 해당 명령으로 다운받을 수 없었다. 이미 설치된 패키지라면 지웠다가 사용해야 한다.
--resolve는 의존성 패키지도 같이 다운로드 해준다.

2. 다운받은 rpm 설치

이제 필요한 rpm 파일들을 모두 다운 받았고 rpm명령어로 설치만 하면 된다.
이때 이 rpm파일들을 가지고 새로운 repo를 만들어서 등록하고 설치하는 것도 가능하다.
하지만 이번에 그 방법은 안써봤기 때문에 해당 내용은 추후에 다시 알아보고 추가하겠다.

현재 폴더의 모든 rpm 파일을 설치하는 명령어이다.

3. 소스로 수동 설치

리눅스를 사용하면서 tar.gz형태의 압축파일로 프로그램을 설치하는 경험도 있었는데 수동 설치는 rpm설치와 같은 바이너리 패키지 설치에 비해 컴파일부터 시작하므로 조금더 자유로운 설정을 할 수 있다고 한다. 이번에 수동 설치로 postgresql을 설치하면서 rpm 설치로는 불가능한 설치 위치를 지정해줄 수 있었다.
소스 설치는 크게 나누어 컴파일 - make - install 이러한 순서로 진행된다고 할 수 있다.


--prefix 설정이 바로 설치 경로를 지정하는 옵션이다. 컴파일부터 해야하기 때문에 거대한 프로그램이든가 사양이 좋지 않다면 시간이 오래 걸릴 수 있다.

3. 파이썬 패키지 및 의존성 설치

이번에 airflow를 폐쇄망에 설치하면서 소스설치도 보긴 했지만 pip로 설치하는 것이 아무래도 간편하니까 위의 리눅스 패키지를 했던 것 처럼 파이썬 패키지도 비슷한 과정을 통해 설치할 수 있었다.

우선은 설치하고자 하는 파이썬 패키지들과 버전을 파악해야 한다.
pip3 freeze > requirements.txt 명령어는 많이 사용해 봤는데, 이걸로 설치된 패키지들을 보면서 필요한 것들만 골라서 따로 만들어주면 된다.

예를 들어서 pandas 패키지를 설치한다고 해보면...

먼저 필요한 파일들을 다운로드하면 whl 파일들이 생길 것이고 그것들을 폐쇄망으로 옮겨준다.
그 다음 설치해주면 끝이다. 처음 인터넷에서 글로 읽었을때는 뭐가 뭔지 감도 안잡히고 헷갈렸는데 막상 직접해보니 별 것 아니고 어렵지 않았다.

하지만 이렇게 한 개씩 하기엔 번거로우니 여러개를 한꺼번에 설치해보자.
이때는 지금까지 많이 썼던 pip install -r 을 사용하면 된다. 필요로 하는 패키지와 버전을 정리해서 특정 파일에 저장을 해두고 (github 등에 파이썬 코드 공유할때 의존성 공유하는 것과 같다)
위와 똑같이 진행하면 된다.

하나씩 할때와 똑같기 때문에 어렵지 않다.


이 방법으로 폐쇄망에서 airflow, postgres, opensearch를 설치하고 왔다. 폐쇄망을 접할 일이 없었고 고려해본 적이 없기 때문에 생소해서 어렵게 느꼈던 것 같다. 막상 해보니 익숙하지 않아서 어려워 보이는 것이지 큰 틀에서 보면 다를 것 없는 과정이었던 것 같다.

원래 이런건 다 하고나면 별거 아닌것 처럼 느껴지는 듯...

이제 다음 단계는 앤서블 등을 활용해서 자동화하는 것이 될 것 같다

profile
기록하는 블로그

0개의 댓글