본문 바로가기
IT 지식/운영체제

내부망에서 yum 사용

by 이민우 2022. 12. 10.
728x90
반응형

개발이 완료된 후에는 클라이언트의 서버에 개발 완료된 프로그램을 배포해주어야 한다.

하지만 당연하게도 프로그램은 단일로 동작하지 않고, Java, DB등 여러 인프라가 필요하다.
만약 서버가 외부망에 연결된 환경이라면 yum이나 wget 등 명령어를 통해 인프라를 쉽게 설치가 가능하겠지만, 대부분은 그렇지 않고 결국 오프라인 환경 (내부망 환경)에서 설치를 수행해야 할 일이 많았다.

 

wget의 경우는 그냥 단순하게 파일을 옮기기만 하면 된다. 하지만 yum은? 꽤나 번거로운 작업을 요구했다.

 

그동안은 사수분께서 인프라 설치를 도맡아 해주셨지만 팀이 내부적으로 분리된 지금은 내가 그 역할을 수행해야 했고, 이에 대비하기 위해 공부한 내용을 까먹지 않기 위해 저장하고자 한다.

 

1. Offline에서 yum 사용


온라인 환경에서 yum 사용 시 자동으로 인터넷에 올라온 패키지가 설치된다.
하지만 인터넷이 연결되지 않은 내부망(폐쇄망)에서는 이게 불가능하고, 결국 rpm을 사용한 설치를 수행해야 한다.


간단하게는 

yumdownloader --downloadonly --resolve {packagename}

*resolve : dependency 가 있는 패키지도 함께 설치


명령어를 통해서 rpm을 다운로드받고, 대상 서버에서

yum install {package 경로}/{package 파일명}.rpm

명령어로 풀어주는 방법이 있다. 하지만 이는 미리 준비한 패키지만 설치가 가능하고, 추가적으로 패키지가 필요할 경우 다시 준비를 해와서 설치를 해줘야 하는 단점이 존재했다.

그래서 다른 방법은 없나... 하고 구글링을 한 결과 Local에 Repository를 구축하는 방법을 찾아냈다.

 

Local Repository 구축 방법은 아래와 같다.

먼저 대상 서버의 OS 버전을 확인한다. 테스트는 CentOS를 기준으로 수행했다.
아래 명령어 실행 시 아래와 같이 CentOS의 버전이 출력된다.

cat /etc/redhat-release


버전은 7.9로 확인되었다. 이제 repository를 구축하기 위해 해당 버전의 Everything 버전 설치 파일을 다운로드 받는다.


Everything 설치파일 내부에는 해당 OS 버전의 rpm 파일들이 존재한다. 이제 이 rpm파일들을 내부로 옮겨주는 작업을 할 것이다.


SCP 프로그램을 이용해 설치 파일을 서버 내부에 옮겨준다. 그리고 MOUNT 명령어를 통해 디렉터리에 ISO 파일을 마운트한다.

mkdir /tmp/repos
mount -o loop /root/CentOS-7-X86_64-Everything-2009.iso /tmp/repos


마운트가 완료되었다면 이제 내부의 RPM 파일을 외부로 빼내야 한다.
아래 명령어를 사용하면 된다.

mkdir /root/repos
cp -rfvp /tmp/repos/* /root/repos

 

작업이 완료되었다면 이제 마운트를 해제해주고 쓸데없는 용량을 차지하지 않도록 설치 파일을 삭제한다.

umount /tmp/repos
rm -rf /tmp/repos
rm -f /root/CentOS-7-X86_64-Everything-2009.iso

 

이제 빼낸 RPM 파일들을 사용해 Local Repository를 구축한다.
기존의 Repository는 오프라인 환경에서는 쓸모가 없으니 삭제하도록 한다.

rm -rf /etc/yum.repos.d/CentOS-*


Local Repository 구축 과정은 크게 특별할 건 없고, 그냥 .repo 파일을 하나만 생성해주면 된다.

vi /etc/yum.repos.d/local.repo


vi 편집기에 아래와 같이 입력한 후 저장한다.

[local]
name=local
baseurl=file:///root/repos
enabled=1
gpgcheck=0


이제 repolist 갱신 및 확인을 위해 다음 명령어로 repolist에 local이 정상적으로 들어갔는지 확인한다.

yum repolist


마지막으로 vim을 설치해봄으로써 local repository가 정상적으로 작동하는지 확인한다.

yum install -y vim


2. Docker Community Edition 설치


Docker Community Edition 설치를 위해서 CentOS 기본 Repository 외에 특정 Repository가 필요하다.

이 Repository는 위와 같은 방법으로 직접 웹에 들어가서 rpm 파일들을 다운로드받은 후 옮겨서 Local Repository로 구축이 가능하다.
https://download.docker.com/linux/centos/7/x86_64/stable/Packages/


하지만 굳이 Repository를 통째로 옮기고 싶지 않았고, 여러 시도 끝에 dependency 순서를 파악하여 내용을 공유하고자 한다.


먼저 온라인 환경 서버에서 아래 명령어를 통해 필요 rpm 파일들을 추출한다.

yumdownloader --downloadonly --resolve {packagename}


docker-ce는 --resolve가 정상적으로 작동하지 않는 듯 하여 일일히 타이핑해서 설치해주어야 한다. 물론 상단의 웹 사이트에서 곧바로 설치해도 무방하다.


이제 SCP로 대상 서버에 rpm을 옮긴다. 그리고 아래 명령어를 순차적으로 실행해주면 Docker 설치가 완료된다.

yum -y install {디렉토리}/container-selinux-2.119.2-1.911c772.el7_8.noarch.rpm
yum -y install {디렉토리}/containerd.io-1.6.10-3.1.el7.x86_64.rpm
yum -y install {디렉토리}/docker-scan-plugin-0.21.0-3.el7.x86_64.rpm
yum -y install {디렉토리}/docker-ce-cli-20.10.21-3.el7.x86_64.rpm
yum -y install {디렉토리}/fuse3-libs-3.6.1-4.el7.x86_64.rpm
yum -y install {디렉토리}/fuse-overlayfs-0.7.2-6.el7_8.x86_64.rpm
yum -y install {디렉토리}/slirp4netns-0.4.3-4.el7_8.x86_64.rpm
yum -y install {디렉토리}/docker-ce-rootless-extras-20.10.21-3.el7.x86_64.rpm {디렉토리}/docker-ce-20.10.21-3.el7.x86_64.rpm
yum -y install {디렉토리}/docker-compose-plugin-2.12.2-3.el7.x86_64.rpm
yum -y install {디렉토리}/nodejs-14.21.1-1nodesource.x86_64.rpm


Docker 설치가 완료되었다면 아래 명령어를 통해 컨테이너를 옮겨줄 수 있게된다.

# 이미지 추출
docker commit {실행중인 컨테이너명} {새로운 이미지 이름}
docker save -o {저장할 tar 파일명} {이미지명}

# 이미지 로드
docker load -i {tar 파일명}

 

3. npm 패키지 설치


npm 패키지 설치는 아래와 같이 수행한다.

먼저 온라인 환경에서 필요한 파일을 tgz 파일로 만든다.

npm install -g npm-pack-all

# 아래 명령어는 npm을 이용해 옮기고 싶은 package를 먼저 설치하고 실행한다.
cd /usr/lib/node_modules/{원하는 package}
npm-pack-all


위 명령어를 입력하면 아래와 같이 package의 tgz 파일이 생성된다.


이제 서버로 옮긴 후 아래 명령어로 풀어주기만 하면 끝난다.

npm install {디렉토리}/{package}.tgz
728x90
반응형