본문 바로가기
기초 튼튼탄탄탄/서버, OS(리눅스)

[리눅스-CentOS] 로컬 Repository 만들기

by 잇서니 2021. 1. 6.
반응형

 

개요

  • local repository를 구축하는 과정을 실습한다.
  • repository 개념을 확실하게 다진다.
  • 실습은 virtual box를 사용한다. (노드 2개)

 

목차

  1. repository란?
  2. local repository란?
  3. local repository 구축하기
    1. 패키지 옮기기
    2. httpd
    3. createrepo
    4. repo 파일 작성
    5. 배포 (hosts 파일, repo 파일)
  4. 테스트 노드에서 local repository 사용해보기

 


repository란?

말 그대로 저장소이다. 패키지를 설치할 때, 우리가 아무 생각 없이 yum install <패키지명>을 할 수 있었던 이유는 repository를 인터넷을 통해 접근할 수 있었기 때문이다.http://yum.mariadb.org/10.1/centos/6.5/x86_64/ 여긴 mariaDB repository이다. 각종 패키지들과 파일들이 저장되어 있는 걸 확인할 수 있다.

여기서 repodata 에 주목할 필요가 있다.
repository에 저장되어 있는 패키지들의 정보(metadata)가 있기 때문이다. 의존성있는 패키지가 무엇인지에 대한 정보들이 담겨있다. 그래서 yum install <패키지명>을 하면, repodata를 보고 의존성 있는 패키지들의 정보를 얻어 알아서 설치해준다.

또한, repo 파일 을 작성해야 한다. (repo id, baseurl 등을 명시하는 파일이다) /etc/yum.repos.d/ 하위에 작성한다.
[] 안에 있는 이름이 repo id가 된다. baseurl은 repository의 위치이다. yum을 사용하면, 이렇게 작성해놓은 repo 파일들을 모두 읽어서 repository를 찾아가 패키지를 설치한다.

[mariadb]
name = MariaDB
baseurl = 
http://yum.mariadb.org/10.1/centos/6.5/x86_64/ 
gpgkey=
https://yum.mariadb.org/RPM-GPG-KEY-MariaDB 
gpgcheck=1

 

local repository란?

외부 접속이 가능한 상황이라면, 외부에 있는 repository를 이용하면 된다. 하지만, 외부접속이 안되는 환경이라면? 패키지를 따로 다운받아와서 일일이 설치해줘야 한다. 심지어 의존성이 있는 패키지들도 하나씩 rpm 명령어를 통해 설치해야 할 것이다.

의존성을 신경쓰지 않고 패키지를 설치하기 위해서는 yum으로 패키지를 설치할 수 있는 환경이 필요하다. 그래서 local repo를 구축하는 게 필요하다. 즉, 외부가 아닌 로컬에 repository를 구축하는 것이다.

 

local repository 구축하기 (실습)

이 과정은 모두 repo node에서 진행한다.

 

실습환경

  • virtual box
    • vm #1 : repo node / vm #2 : test node
    • vm #1 : NAT, host-only / vm #2 : host-only (외부접속 불가)

 

패키지 옮기기

repositoy에 저장해놓을 패키지들을 옮기는 과정이다.

 

  • 인터넷이 안 되는 환경이라면 USB에 repository에 저장해놓을 패키지들을 미리 담아두어야 한다. 실습이니 MariaDB-client 패키지만 담아두겠습니다.

 

  • vm에서 USB 인식을 하려면 ntfs rpm을 설치해야 한다. (미리 USB에 ntfs rpm 패키지를 다운받아놓는다.)

ntfs-3g-2017.3.23-1.el6.src.rpm
1.23MB

 

  • USB mount

명령어로 usb가 인식된 파일시스템명을 확인한다. (예. /dev/sdc1)

# fdisk -l

그 다음 마운트할 디렉토리를 만들고 마운트를 해준다.

# mkdir -p /root/pkg/mariadb
# mount /dev/sdc1 /root/pkg/mariadb

 

 

httpd 설치하기

test 노드들이 repo 노드에 httpd를 통해 접근하도록 한다.

  • httpd 설치
    원래는 httpd 패키지들을 일일이 설치해줘야 함.#package
    1 apr-1.3.9-5.el6_2.x86_64.rpm
    2 apr-util-1.3.9-3.el6_0.1.x86_64.rpm
    3 apr-util-ldap-1.3.9-3.el6_0.1.x86_64.rpm
    4 httpd-tools-2.2.15-53.el6.centos.x86_64.rpm
    5 httpd-2.2.15-53.el6.centos.x86_64.rpm
  • 실습 편의상, repo 노드를 외부접속 가능하게 해서 yum으로 httpd 설치했습니다.
# yum install httpd

 

  • http 기본디렉토리(/var/www/html/)에 패키지들 옮기기
    httpd를 설치하면 /var/www/html/ 디렉토리가 생긴다. 여기에 이전에 마운트 해놓은 패키지들을 저장한다.
# mv /root/pkg/mariadb /var/www/html/

 

 

createrepo 실행

위에서 언급한 repository의 repodata가 없는 상태이다. createrepo를 통해 repodata를 만들어준다.

  • createrepo 설치
    원래는 createrepo 패키지들을 일일이 설치해줘야 함.#package
    1 deltarpm-3.5-0.5.20090913git.el6.x86_64.rpm
    2 python-deltarpm-3.5-0.5.20090913git.el6.x86_64.rpm
    3 createrepo-0.9.9-24.el6.noarch.rpm
  • 실습 편의상, repo 노드를 외부접속 가능하게 해서 yum으로 createrepo 설치했습니다.
# yum install createrepo
  • createrepo 실행
    이제 createrepo를 통해 repodata를 생성한다. httpd 기본디렉토리에 옮겨놓은 패키지들의 경로를 명시해주면 된다. 경로에 직접 가보면 repodata가 생성된 것을 확인할 수 있다.
# createrepo /var/www/html/pkg/mariadb

 

repo 파일 작성하기

  • repo파일 작성
# vi /etc/yum.repos.d/sunny.repo
[nexr-release]
name=test-for-localrepo
enabled=1
gpgcheck=0
baseurl=http://pxe.sunny.com/pkg/nexr-release

pxe.sunny.com은 repo 노드의 호스트네임이다.

 

  • repo 설정 적용하기
# yum cleanall
  • repo파일 확인
# yum repolist

 

 

배포

이제 test 노드에도 hosts파일과, repo 파일을 배포한다. 이를 위해 ansible과 ssh접속을 위한 설정을 해줘야 한다. (test 노드가 한대라면 scp 같은 명령어를 사용해도 된다. test 노드가 여러대라면 ansible로 한 번에 배포하는 게 편하다.)

 

  • ansible 설치 및 ansible host 작성
# yum install ansible

# cd /etc/ansible

# vi ansible.hosts
[sunny]
pxe.sunny.com
target1.sunny.com

 

  • expect 설치 및 ssh 접속 설정
# yum install expect

# vi ssh.exp

#!/usr/bin/expect

set userid "root"
set pw "ndap1234~!"

set nodeList 

{ pxe.sunny.com target1.sunny.com }

foreach node $nodeList {
spawn ssh-copy-id $userid@$node
expect {
-re "yes/no" 

{send "yes\r";exp_continue }

-re "password:" 

{send "$pw\r"; exp_continue }

}

catch wait result
}

# ssh-keygen
# chmod +x ssh.exp
# expect ssh.exp

 

  • 파일 배포
# ansible -i ansible.hosts sunny -m copy -a "src=/etc/hosts dest=/etc/hosts"

# ansible -i ansible.hosts sunny -m copy -a "src=/etc/yum.repos.d/sunny.repo dest=/etc/yum.repos.d/sunny.repo"

# ansible -i ansible.hosts sunny -m shell -a "yum clean all"

 

테스트 노드에서 local repo 사용해보기

이제 로컬레포 즉 /var/www/html/pkg/mariadb에 저장해놓은 패키지들을 테스트 노드에서 접근하여 설치할 수 있다. 단, 실습 편의상 MariaDB-client 패키지만 레포에 저장해놓은 상태라 다른 패키지들과 의존성이 있는 패키지들은 설치가 되지 않습니다(ㅎㅎ)

MariaDB-client패키지 설치로 테스트 해보니 정상적으로 설치가 되는 것을 확인할 수 있다.

# ssh root@target1.sunny.com

# yum install MariaDB-client

 

 

반응형

댓글