외부 인터넷이 차단된 서버(off-line server)에 저장소를 만들고 패키지 설치 및 업데이트

양승현·2023년 5월 3일
2
post-thumbnail
  • 만약 서버가 외부망과 연결된 환경이라면 yum 혹은 wget 등 명령어를 통해 패키지를 설치 할 수 있다.

  • 하지만 대부분은 그렇지 않고 보안 정책등으로 외부 인터넷이 차단된 서버를 운영하여 내부망에서 설치를 수행해야 하는 경우가 있다.

  • 이런 서버에서 신규 패키지 설치나 업데이트를 위해 .rpm을 업로드해도 의존성이 있는 패키지가 있을 수 있으므로 관리가 매우 까다롭다.

  • 이럴때 여러 방식으로 local 혹은 내부 네트워크에 yum 저장소를 만들면 간편하게 문제를 해결할 수 있다.

※ 필요한 패키지 전체가 아닌 특정 rpm 별로 업로드 가능하며, 이때 installing dependencies에 해당하는 rpm도 함께 업로드 해야한다.

  • 네트워크 환경이 되지않는(내부망)에서 패키지를 설치해보자.

※ 사전에 여유 공간 디스크를 확보하고 진행하자.

$ df -h
  • 구성 환경
OS version - Centos-7
Software - minimal
  • 기존 repository는 삭제하고 진행
$ rm -rf /etc/yum.repos.d/CentOS-*

1.1 ISO 마운트

  1. 설치 DVD(centos.iso)를 다운로드한다.
    예) http://isoredirect.centos.org/centos/8/isos/x86_64/
# Desktop
$ scp CentOS-7.iso "user"@192.168.100.240:/address
  1. mount 할 폴더를 생성한다.
$ mkdir -p /yang/repos
  1. 다운받은 ISO 파일을 서버에 올린후 mount 한다.
$ mount -o loop CentOS-7.iso /yang/repos

혹은 부팅시 자동 마운트 되도록 /etc/fstab에 아래 내용 추가

$ vi /etc/fstab
CentOS7.iso /yang/repos iso9660/loop defualt 0 0

마운트 정보 확인

$ findmnt
  1. repository 정보 설정을 위해 /etc/yum.repo.d/local.repo 파일을 편집
$ vi /etc/yum.repos.d/local-repo 
# cat << EOF > /etc/yum.repos.d/local-repo

[local-repository]
name=centos-local-repository
baseurl=file:///yang/repos
enabled=1 # 활성화 1 , 비활성화 0
gpgcheck=0
  1. 설정 값 확인 (설정한 값이 보이면 정상)
$ yum repolist | grep local-repo

repo id                  repo name

local-repository         centos-local-repository

1.2 관리하는 서버가 많을 경우

  • 위 방식은 서버마다 직접 설정해야 하므로 관리해야할 서버가 많을 경우에는 반복적으로 작업을 해주어야한다.

  • 이 경우 web server 내부 네트워크용 저장소를 설정하면 다른 서버에서는 저장소 주소만 등록하면 되므로 편리하게 사용 가능하다.

※ repository를 제공할 서버 ip는 192.168.100.240 이라고 가정

서버 설정

  1. 저장소로 사용할 서버(192.168.100.240)에 ssh로 연결
    ※ ssh는 보안상 문제로 권장하지 않는다.
  1. Centos의 설치 DVD(iso)를 저장소 서버에 업로드
  1. web server로 제공할 폴더 mount
# -p 옵션 - 상위 경로도 함께 생성합니다.
$ mkdir -p /seung/repos
  1. 업로드한 설치 iso를 mount
$ mount -o loop CentOS-7.iso /seung/repos

혹은 부팅시 자동 마운트 되도록 /etc/fstab에 아래 내용 추가

$ vi /etc/fstab
CentOS7.iso /seung/repos iso9660 loop 0 0
  1. yum repository 를 생성할 수 있는 패키지인 createrepo를 설치
$ yum install createrepo -y
  1. repository index를 생성
$ cd /var/www/repos/centos
createrepo  .

Client 설정

  1. repository를 사용할 서버에 연결하기
  1. repository 정보를 설정하기 위해 /etc/yum.repos.d/centos-internal.repo파일을 편집
$ vi /etc/yum.repos.d/centos-internal.repo
# cat << EOF > /etc/yum.repos.d/centos-internal.repo

[internal-repo]
name=Internal Repository
baseurl=http://192.168.100.240/repos/centos/iso
enabled=1
gpgcheck=0
  1. 저장소 확인
$ yum repolist | grep internal-repo

2. CD-ROM/DVD_ROM 마운트

  • CD-ROM/DVD-ROM 이미지로 로컬 yum 리포지토리를 설정하는 방법
  • 인터넷 연결이 없고 조직에 yum 리포지토리 서버가 없을때 사용한다.
  • 로컬 yum 리포지토리를 사용하면 CD-ROM/DVD-ROM에서 사용 가능한 패키지를 사용하여 yum 설치를 수행할 수 있다.
  • 기존 os를 설치한 iso의 패키지를 사용
  1. 설치 파일들을 활용하기 위해 디스크를 마운트
$ cd /dev
# cdrom이 장치에 잡혀 있는지 확인
$ ll cdrom 
  1. mount 할 폴더를 생성한다
$ mkdir -p /hyun/cdrom
  1. cdrom을 mount 한다.
$ mount -o loop /dev/cdrom /hyun/cdrom

혹은 부팅시 자동 마운트 되도록 /etc/fstab에 아래 내용 추가

$ vi /etc/fstab
/dev/cdrom /yang/repos iso9660/loop defualt 0 0

마운트 확인

$ findmnt
  1. repository 정보 설정을 위해 /etc/yum.repos.d/cdrom.repo 파일을 편집
$ vi /etc/yum.repos.d/cdrom.repo
# cat << EOF > /etc/yum.repos.d/cdrom.repo

[cdrom-repository] # 이름확인
name=centos-cdrom-repository
baseurl=file:///hyun/cdrom   #yum이 참조할 경로
enabled=1 # 활성화 1 , 비활성화 0
gpgcheck=0
  1. 설정 값 확인 (설정한 값이 보이면 정상)
$ yum repolist | grep cdrom-repository

repo id                  repo name

cdrom-repository         centos-cdrom-repository
  1. 패키지 설치
# --disavlerepo 기존 참조 경로 무시
# --enablerepo CD-ROM 참조를 강제
# 명시하지 않으면 인터넷이 설정되지 않은 상태에서 인터넷에 접속하려 하므로 오류가 뜬다. 
# /etc/yum.repos.d에 여러 repo를 주소로 두었을 경우 아래와 같은 명령을 하게되면 disable한 repo는 비활성화하고 enable한 repo만 활성화한다
$ yum --disablerepo=\* --enablerepo=cdrom-repository install -y vim

주요 옵션

  • --enablerepo=[repo] 여러개의 yum repository가 있을 경우 사용할 repos 를 지정한다. * 같은 wildcard를 사용할 수 있다.
  • --disablerepo=[repo] 사용하지 않을 repos 를 지정한다. wildcard 사용 가능
  • --nogpgcheck GPG 서명검증을 사용하지 않는다. 해당 repos 의 공개키가 없어서 서명검증에 실패할 경우에 사용한다.
  • -d [debug level] debugging level을 지정한다. 0 - 10 까지 가능하며 숫자가 클수록 자세한 정보를 출력한다.
  • -y, --assumeyes yum 진행중 나오는 질문을 모두 yes 로 처리한다. 삭제할 경우에는 의존성있는 모든 패키지까지 삭제되므로 주의해야 한다.

신규 저장소 생성시

  • 만약 필요한(특정) rpm 파일만 따로 넣어 사용하고 싶다면 신규 저장소를 생성하고 repodata를 생성해 주어야한다.
  • yum repository를 생성할 수 있는 패키지인 createrepo를 설치
$ yum install createrepo -y

※ iso 파일의 repository는 createrepo를 통한 repodata를 생성하지 않아도 된다. 새롭게 사용할 저장소 생성시에만 적용하면 된다.

  • repository 생성
$ mkdir -p /test/repos
  • rpm 파일을 repository( /test/repos) 경로에 보낸다
  • repository index(repodata) 생성해야한다.
# rpm 메타데이터 정보 구축
$ cd /test/repos
$ createrepo ./
  • 로컬레파지토리에 패키지 파일을 추가 할 경우 아래 명령어로 업데이트
# repository 업데이트하여 신규 생성된 레포지토리 적용
$ createrepo --update 
  • 레포지토리 캐시 삭제 적용
# yum 캐쉬되어 있는 정보를 삭제해 줘야 제대로 반영이 된다.
$ yum clean all
  • repository 정보 설정을 위해 /etc/yum.repos.d/newrepo.repo 파일을 편집
$ vi /etc/yum.repos.d/newrepo.repo
# cat << EOF > /etc/yum.repos.d/newrepo.repo

[new-repository] # 이름확인
name=new-repository
baseurl=file:///test/repos   #yum이 참조할 경로
enabled=1 # 활성화 1 , 비활성화 0
gpgcheck=0
  1. 설정 값 확인 (설정한 값이 보이면 정상)
$ yum repolist | grep new-repository

repo id                  repo name

new-repository         new-repository


  • 외에도 ftp 방식을 사용하는 filezilla와 같은 소프트웨어로 리눅스 vsftpd를 설정하여 iso 파일을 마운트 할 수 있다.

!!! 주의!!!

  • 시스템 안정성 및 보안 패치를 위해 새로운 버전이 나올 경우 주기적으로 iso Image 를 업로드하고 위 작업을 다시 실행해야 합니다.

참고

https://seul96.tistory.com/343

0개의 댓글