개요
- local repository를 구축하는 과정을 실습한다.
- repository 개념을 확실하게 다진다.
- 실습은 virtual box를 사용한다. (노드 2개)
목차
- repository란?
- local repository란?
- local repository 구축하기
- 패키지 옮기기
- httpd
- createrepo
- repo 파일 작성
- 배포 (hosts 파일, repo 파일)
- 테스트 노드에서 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 패키지를 다운받아놓는다.)
- USB mount
명령어로 usb가 인식된 파일시스템명을 확인한다. (예. /dev/sdc1)
# fdisk -l
그 다음 마운트할 디렉토리를 만들고 마운트를 해준다.
# mkdir -p /root/pkg/mariadb
# mount /dev/sdc1 /root/pkg/mariadb
httpd 설치하기
test 노드들이 repo 노드에 httpd를 통해 접근하도록 한다.
- httpd 설치
원래는 httpd 패키지들을 일일이 설치해줘야 함.#package1 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 패키지들을 일일이 설치해줘야 함.#package1 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 nodeList { pxe.sunny.com target1.sunny.com } foreach node $nodeList { {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
'기초 튼튼탄탄탄 > 서버, OS(리눅스)' 카테고리의 다른 글
[putty] 윈도우에서 리눅스 서버(EC2) 접속하는 방법 (4) | 2022.02.19 |
---|---|
웹서버(apache) / WAS(wildfly) / DB(MariaDB) 설치 및 연동하기 (8) | 2021.01.06 |
PCS로 HA 클러스터 구성하기 (WAS-wildfly) (6) | 2021.01.04 |
PXE & kickstart로 CentOS 설치 자동화하기 (8) | 2021.01.03 |
디스크 RAID / 파티션 / 포맷 / 마운트 (550) | 2020.07.27 |
댓글