만약 서버가 외부망과 연결된 환경이라면 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-*
- 설치 DVD(centos.iso)를 다운로드한다.
예) http://isoredirect.centos.org/centos/8/isos/x86_64/# Desktop $ scp CentOS-7.iso "user"@192.168.100.240:/address
- mount 할 폴더를 생성한다.
$ mkdir -p /yang/repos
- 다운받은 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
- 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
- 설정 값 확인 (설정한 값이 보이면 정상)
$ yum repolist | grep local-repo repo id repo name local-repository centos-local-repository
위 방식은 서버마다 직접 설정해야 하므로 관리해야할 서버가 많을 경우에는 반복적으로 작업을 해주어야한다.
이 경우 web server 내부 네트워크용 저장소를 설정하면 다른 서버에서는 저장소 주소만 등록하면 되므로 편리하게 사용 가능하다.
※ repository를 제공할 서버 ip는 192.168.100.240 이라고 가정
- 저장소로 사용할 서버(192.168.100.240)에 ssh로 연결
※ ssh는 보안상 문제로 권장하지 않는다.
- Centos의 설치 DVD(iso)를 저장소 서버에 업로드
- web server로 제공할 폴더 mount
# -p 옵션 - 상위 경로도 함께 생성합니다. $ mkdir -p /seung/repos
- 업로드한 설치 iso를 mount
$ mount -o loop CentOS-7.iso /seung/repos
혹은 부팅시 자동 마운트 되도록 /etc/fstab에 아래 내용 추가
$ vi /etc/fstab CentOS7.iso /seung/repos iso9660 loop 0 0
- yum repository 를 생성할 수 있는 패키지인 createrepo를 설치
$ yum install createrepo -y
- repository index를 생성
$ cd /var/www/repos/centos createrepo .
- repository를 사용할 서버에 연결하기
- 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
- 저장소 확인
$ yum repolist | grep internal-repo
- 설치 파일들을 활용하기 위해 디스크를 마운트
$ cd /dev # cdrom이 장치에 잡혀 있는지 확인 $ ll cdrom
- mount 할 폴더를 생성한다
$ mkdir -p /hyun/cdrom
- cdrom을 mount 한다.
$ mount -o loop /dev/cdrom /hyun/cdrom
혹은 부팅시 자동 마운트 되도록 /etc/fstab에 아래 내용 추가
$ vi /etc/fstab /dev/cdrom /yang/repos iso9660/loop defualt 0 0
마운트 확인
$ findmnt
- 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
- 설정 값 확인 (설정한 값이 보이면 정상)
$ yum repolist | grep cdrom-repository repo id repo name cdrom-repository centos-cdrom-repository
- 패키지 설치
# --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 로 처리한다. 삭제할 경우에는 의존성있는 모든 패키지까지 삭제되므로 주의해야 한다.
- 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
- 설정 값 확인 (설정한 값이 보이면 정상)
$ yum repolist | grep new-repository repo id repo name new-repository new-repository
- 외에도 ftp 방식을 사용하는 filezilla와 같은 소프트웨어로 리눅스 vsftpd를 설정하여 iso 파일을 마운트 할 수 있다.
!!! 주의!!!
- 시스템 안정성 및 보안 패치를 위해 새로운 버전이 나올 경우 주기적으로 iso Image 를 업로드하고 위 작업을 다시 실행해야 합니다.
참고