2012년 11월 20일 화요일

Local yum Repository로 RHEL 업데이트 하기

RedHat Enterprise Linux는 RedHat의 RHN(RedHat Network)을 등록하지 않으면 공식 업데이트 서비스를 받을 수 없다. RHN은 1년에 백만원정도 하는 유지보수 계약을 통해서 받을 수 있는데 이는 소프트웨어 구입비용과 달리 공식 업데이트 사용과 문제 발생시 지원관련된 비용이다. 유지보수비용이 문제라면 Local Network에 최신 상태로 업데이트 할 수 있는 yum Repository를 구축할 수 있다. 소프트웨어 자체는 무료이기 때문에 이는 합법적이다.
하지만 한가지 아쉬운 점은 RHEL의 최신 ISO를 받을 수 있는 기간이 계정별로 30일밖에 안된다는 것이다.

Local Repository의 이점
Local Repository를 구축하면 다음과 같은 장점이 있다.

1. 최초 설치시 설치하지 않은 패키지를 쉽게 설치할 수 있다.
만약 http패키지를 최초 설치시 빼먹었다면 RHN에 등록된 것 같이 "yum install httpd" 명령으로 쉽게 설치 가능하다. Repository가 없다면 DVD를 사용하거나 RPM파일을 복사해서 설치를 해야한다. 또한 의존성을 따지면서 추가로 많은 RPM들을 깔아야 할테지만 yum명령을 쓰면 의존성이 걸린 패키지까지 알아서 설치해 준다.

2. 업데이트가 있다면 RHN에 등록하지 않고 쉽게 업데이트 할 수 있다.
추가 패키지 설치와 마찬가지로 yum명령을 사용해서 의존성 문제를 쉽게 해결할 수 있다. 단 Local Repository에 최신 버전이 올라가 있어야 한다.

3. 꼭 최신 패키지가 필요하지 않을 때 버전을 고정시킬 수 있다.
최신 RHEL이 6.3버전이고, 안정성 문제로 6.2에서만 머무르고 싶을 때 Local Repository를 6.2 버전으로 만들어 놓는다면 "yum update"를 사용하더라도 6.2버전으로만 업데이트 할 수 있다. 또한 2개 버전을 올려놓고, 업데이트할 서버에서 .repo파일의 baseurl옵션의 타겟만 바꿔서 사용할 수 있다. (repo파일 관련내용은 아래 구축.4 내용 참고)

RHEL 외 CentOS, Fedora도 같은 방법으로 Local Repository를 구축하고, 쉽게 yum명령을 사용할 수 있다. Local Repository는 RHN등록을 피하면서, yum 명령을 사용할 수 있는 유용한 수단이다.

Local Repository 구축단계
구축 단계는 아래와 같다.

1. 최신 RHEL Binary DVD ISO 다운로드
2. 업데이트할 서버가 접속가능한 네트워크에 http 또는 ftp 서버 구성
3. http 또는 ftp 홈 디렉토리 아래에 새 디렉토리를 만들고 1번에서 다운로드 받은 ISO를 mount 또는 풀어서 옮김
4. 업데이트 받을 서버의 /etc/yum.repos.d/ 디렉토리에 새로 구축한 yum Repository 설정파일 생성 및 "yum repolist" 명령으로 확인
5. 업데이트 실행

1. 최신 RHEL Binary DVD ISO 다운로드

업데이트 하려는 RHEL의 최신 버전의 Binary DVD ISO파일을 RedHat Software & Download Center에서 다운로드 받아야 한다. 계정별로 30일간 다운로드 가능하며, 다운로드 방법은 다음 링크를 참조한다.

* RHEL ISO Download 방법

2. 업데이트할 서버가 접속가능한 네트워크에 http 또는 ftp 서버 구성

어떤 네트워크(Public or Private)든 상관없이 업데이트할 서버가 접속한 네트워크에 http 또는 ftp 서버를 구축한다. ftp 프로토콜이 더 빠르긴 하겠지만 http서버 구성이 더 간단하다. 이미 http 또는 ftp서버가 구축되어 있다면 이번 단계는 넘어간다.

httd서버를 구성할 경우 서버역할을 할 서버에서 아래와 같이 명령을 실행한다.
>yum -y install httpd

iptables를 사용한다면 iptables에 http포트 예외 추가
>iptables -A INPUT -p tcp --dport 80 -j ACCEPT


3. http 또는 ftp 홈 디렉토리 아래에 새 디렉토리를 만들고 1번에서 다운로드 받은 ISO를 mount 또는 풀어서 옮김

2번과 같이 했다면 httpd의 홈 디렉토리는 /var/www/html이다. 아 디렉토리 아래에 아래와 같이 디렉토리를 생성한다.
>mkdir -p /var/www/html/rhel

1번에서 다운로드 받은 ISO를 위에서 만든 디렉토리에 mount 또는 풀어서 복사 한다.


mount할 경우(ISO파일이 /root에 있다고 가정)
>mount -o loop /root/rhel-server-VERSION-x86_64-dvd.iso /var/www/html/rhel

복사할 경우
>mount -o loop /root/rhel-server-VERSION-x86_64-dvd.iso /mnt
>cp -r /mnt/* /var/www/html/rhel


웹브라우저에서 "http://SERVER-IP/rhel"주소로 들어가면 복사한 파일들을 확인할 수 있다. 파일이 보이지 않는다면 아래 사항을 점검한다.

A. 2번 방법으로 httpd서버를 새로 구성했다면 파일이 제대로 복사되지 않았을 것이다. cd /var/www/html/rhel로 이동해서 파일들이 제대로 있는지 확인한다.
B. 이미 http 또는 ftp가 구축되어 있던 서버에 파일을 복사했다면 설정파일에서 브라우징 가능하게 설정되어 있는지 확인한다. httpd의 경우 /etc/httpd/conf/httpd.conf파일에서 아래 부분을 수정한다. (Indexes 추가)

<directory "/var/www/html">
#  Options FollowSymLinks
  Options Indexes FollowSymLinks
</directory>

C. 방화벽을 점검한다. "iptables -F"와 "setenforce 0"명령을 실행 후 파일들이 보인다면 방화벽 설정 문제다. 방화벽에 대해 잘 모른다면 앞의 두 명령을 실행해서 업데이트 한다. 방화벽 복구 방법은 "service iptables restart"와 "setenforce 1"이다.

4. 업데이트 받을 서버의 /etc/yum.repos.d/ 디렉토리에 새로 구축한 yum Repository 설정파일 생성 및 "yum repolist"명령으로 확인

업데이트 할 서버의 /etc/yum.repos.d/ 디렉토리 아래에 새로 구축한 yum Repository 정보를 만들어 준다. Repository 정보를 가진 파일은 .repo 확장자를 가져야 한다. 아래는 예시를 따라 .repo파일을 만든다.

>vi /etc/yum.repos.d/local.repo
[LOCAL]
name=Local Repo
baseurl=http://serverip/rhel
enabled=1


  • [LOCAL] : repo id로 공백없이 마음에 드는 값을 넣어준다.
  • name : repo name으로 공백 상관없이 간단히 Repository를 설명한다. 업데이트에 영향을 주지 않는다.
  • baseurl :  ftp를 사용할 경우 http대신 ftp로 시작하는 url을 넣어 준다. serverip는 2번에서 구성한 서버의 ip 또는 domain name을 넣어준다.
  • enabled : [LOCAL] Repository 사용 여부를 결정하는 항목이다. RHN에 등록되지 않았다면 같은 디렉토리에 있는 공식 업데이트 Repository 관련 파일내용에서 enabled 항목이 0으로 되어 있는 것을 확인할 수있다. (0:사용안함, 1:사용)

위 파일을 생성했다면 아래 명령으로 제대로 설정 되었는지 확인한다.
>yum repolist
Loaded plugins: product-id, refresh-packagekit, security, subscription-manager
Updating certificate-based repositories.
Unable to read consumer identity
LOCAL                                                 | 4.0 kB     00:00
repo id                  repo name                                        status
LOCAL                  Local repo                                        3,585
repolist: 3,585

repo id와 repo name이 파일에 설정한대로 나왔다면 OK
제대로 나오지 않는다면 브라우저에서 baseurl을 넣어본다. 파일들이 보이면 설정파일에 오타가 있는지 확인하고, 파일이 보이지 않으면 3번 과정을 확인한다. iptables 또는 SELinux가 포트를 막을 수 있으므로 "iptables -F" 또는 "setenforce 0" 명령으로 방화벽을 모두 제거하고 다시 시도해 본다.

5. 업데이트 실행

4번까지 제대로 되었다면 업데이트를 실행한다.
>yum -y update

kernel등 일부 패키지는 재부팅해야 적용이 된다.
>yum -y update kernel && reboot

daemon등 일부 패키지는 서비스를 재시작해야 적용이 된다.
>yum -y update httpd && servece httpd restart

댓글 없음:

FIX :: ssh 접속이 느리고, /var/log/messages에 systemd-logind.service failed. 메시지가 남을 때

ssh 접속이 느릴 때가 있습니다. 보통은DNS가 제대로 설정되지 않았는데 /etc/ssh/sshd_config에 UseDNS가 yes로 되어 있을 때 발생합니다. 위와 같을 경우 /etc/ssh/sshd_config파일에서 아래와 같이 수정 후 ...