최근 포토로그


Solaris 패키지 패치 by Keeper

1. 패치 확인

 

103640의 패치에 대해 확인을 하려면

# showrev -p | grep 103640
--> 솔라리스 2.5.1의 경우

# patchadd -p | grep 103640
--> 솔라리스 2.6 이상

전체 패치 목록을 보고 싶다면 다음과 같이 하면 된다.

# showrev -p

# patchadd -p

물론 솔라리스 2.6에서도 showrev 라는 명령어를 사용 할 수 있다.

patchadd라는 명령어는 패치 관련하여 솔라리스 2.6에 새로이 추가 된 관리 명령어이다.

2. 패치 적용

 

SunSolve 사이트에서 다운로드 된 패치는 압축된 형태로 배포된다. 패치 ID를 그대로 ‘tar’로 묶어서 이를 ‘compress’라는 명령어로 압축을 해서 배포가 된다.

해서 패치는 ‘패치ID.tar.Z’ 형식을 갖고 배포된다.

다음은 패치를 적용을 할 때 유의해야 할 사항이다.

- 반드시 슈퍼유저 계정에서 작업

- 되도록 이면 온-라인(On-line) 서비스 이외의 시간에 적용
- 작업 전 시스템에 운영중인 프로세스나 서비스 등을 중지한다
- 패치의 적용 시 예상 소용 시간을 예측
- 패치를 적용할 때에는 가능하다면 싱글 모드(Single mode : Run level 1 또는 s )에서 하는 것이 좋다.
- DB(Data Base)가 운영중인 서버일 경우 반드시 DB 엔진을 정지하고 적용해야 한다.
- 패치의 적용 후에는 반드시 시스템을 리부팅(Rebooting)을 해야만 한다

슈퍼유저에서 해야 하는 이유는 적용이 되는 시스템에 대해 모든 것에 대해 접근 할 수 있는 권한을 가여야 하기 때문이고, 패치를 적용하는 과정에 시스템이 어떤 상황이 발생을 하면 서비스를 하는데 있어서 치명적일 수 있고, 적절한 예상 시간의 예측은 시스템을 운영하는데 있어서 도움이 된다. 현재 모든 서비스가 중단된 상태이고 전혀 다른 업무가 시스템에서 운영이 되고 있지 않다면 멀티모드(Run level 3)에서 해도 무관하다.

리부팅을 해야만 하는 이유는 적용이 된 패치의 내용들이 커널에 적용되어 리빌드(Rebuild) 되거나 메모리에 적재(load)되어 실제로 시스템에 적용이 되기 때문이다.

적용하고자 하는 패치가 현재 시스템에 적용되어 있는지의 확인과 적용이 되어 있다면 적용 되어 있는 패치의 리비젼(Revision)에 따라 패치의 적용 여부가 달라질 수 있다. 만약, 패치 ID와 리비젼이 같은 패치가 적용되어 있다면 해당 패치를 시스템에 적용할 필요는 없다. 다음은 현재 시스템에 패치가 적용이 되어 있는지 아닌지를 확인하는 과정이다.

현재 시스템에 있는 패치들에 대한 목록과 이의 정보를 알고 싶으면 다음의 명령어를 사용한다.

# showrev -p
Patch: 105256-01 Obsoletes: Packages: SUNWcsu
Patch: 103630-13 Obsoletes: Packages: SUNWcsu, SUNWcsr
Patch: 103663-15 Obsoletes: 103683-01 Packages: SUNWcsu, SUNWcsr, SUNWhea
Patch: 103582-18 Obsoletes: Packages: SUNWcsu, SUNWcsr
Patch: 103594-16 Obsoletes: 105520-01 Packages: SUNWcsu, SUNWcsr, SUNWnisu
Patch: 103603-09 Obsoletes: Packages: SUNWcsu
:

특정 패치에 대해 알아 보려면 다음의 예처럼 ‘grep 패치ID’를 사용하면 된다.

# showrev -p | grep 103640
Patch: 103640-24 Obsoletes: 103591-09, 103658-02, 103920-05, 103600-18, 103609-02 Packages: SUNWcsu, SUNWcsr, SUNWkvm, SUNWcar, SUNWhea
Patch: 103640-29 Obsoletes: 103591-09, 103658-02, 103920-05, 103600-18, 103609-02, 104317-01, 106623-01, 103612-51, 103615-04, 103654-01, 104447-01, 107239-01
Packages: SUNWcsu, SUNWcsr, SUNWkvm, SUNWcar, SUNWscpu, SUNWarc, SUNWfns, SUNWhea, SUNWnisu, SUNWsra, SUNWsutl

단순하게 showrev를 입력하면 현재 시스템의 정보를 보여준다.

# showrev
Hostname: cyber
Hostid: 80a47645
Release: 5.5.1
Kernel architecture: sun4u
Application architecture: sparc
Hardware provider: Sun_Microsystems
Domain:
Kernel version: SunOS 5.5.1 Generic 103640-32 July 1999

위 내용을 보면 시스템의 호스트 명, 호스트 ID, OS버전, 커널 아키텍쳐, 커널 패치 버전등을 볼 수 있다.

마지막을 보면 103640-29라는 것이 있는데, 이는 솔라리스 2.5.1의 커널에 대한 패치 ID및 리비젼이다.

이는 수 많은 패치들 중에서 가장 중요한 패치로서, 시스템의 성능이나 운영에 가장 큰 영향을 미치므로

이의 리비젼을 수시로 확인하여 업데이트(Update) 계획을 세우는 것이 좋다.

이 커널 패치는 다음의 명령어로도 확인이 가능하다.

# uname -a
SunOS cyber 5.5.1 Generic_103640-32 sun4u sparc SUNW,Ultra-2

다음 표는 OS 버전에 따른 커널 패치 ID를 보여 주고 있다. 

   OS 버전          패치 ID


솔라리스 2.4 103935 - XX
솔라리스 2.5
솔라리스 2.5.1 103640 - XX
솔라리스 2.6
솔라리스 2.7 106541 - XX
솔라리스 2.8 108528 - XX

 

-XX는 각 패치의 리비젼(revision) 번호를 의미한다. 리비젼 번호가 클수록 가장 최근에 발표가 된 패치를 의미한다.

이제 패치를 적용하기 위한 준비가 되었으면 패치를 패치를 적용해 보자.

여기에서는 솔라리스 2.5.1의 커널 패치의 적용을 예를 들어 설명을 하겠으며,

솔라리스 2.5.1 커널 패치의 ID는 103640이고, 리비젼은 32이다. 적용할 패치의 리비젼은 34이다.

(1) 슈퍼 유저로 로그인 또는 슈퍼 유저 권한을 획득한다.

(2) /tmp 디렉토리로 패치를 카피(copy) 또는 이동(move) 시킨다.
이는 /tmp의 영역이 크고, 시스템에 큰 영향이 없고, 리부팅을 하게 되면 자동으로 삭제가 되기 때문이다.

# cp 103640-34.tar.Z /tmp
# cd /tmp
# ls
103640-34.tar.Z

(3) 압축 파일을 푼다. (2가지 방법)

# uncompress 103640-34.tar.Z
# ls 103640*
103640-34.tar
# tar xvf 103640-34.tar

# zcat 103640-34.tar.Z | tar xvf -

확장자가 ‘.Z’가 아니고, .’gz’으로 끝나면 zcat 명령어 대신에 gzcat 명령을 사용한다.

# gzcat 103640-34.tar.gz | tar xvf -

두 번째 방법을 가장 많이 사용하며, 압축을 풀면 해당 패치 ID이름으로 디렉토리가 생성이 된다.

# cd 103640-34
# pwd
/tmp/103640-34
# ls
Install.info SUNWcar.u SUNWkvm.u
MANPAGE_ACLFROMMODE SUNWcar.u1 SUNWkvm.u1
MANPAGE_ACLTMODE SUNWcsr SUNWnisu
MANPAGE_NISOPACCESS SUNWcsu SUNWscpu
MANPAGE_SETFACL SUNWdrr.u1 SUNWsra
README.103640-32 SUNWfns SUNWsutl
SUNWarc SUNWhea backoutpatch
SUNWcar.c SUNWkvm.c installpatch
SUNWcar.d SUNWkvm.d prePatch
SUNWcar.m SUNWkvm.m prepatch

(4) 패치의 적용

1> 솔라리스 2.5.1의 경우(패치 ID 디렉토리에서)

# ./installpatch .

2> 솔라리스 2.6 이상의 경우(패치 ID 디렉토리에서)

# patchadd patch_id_directory

다음의 예는 솔라리스 2.5.1에서 패치가 적용이 되는 과정을 보여주고 있다.

# ./installpatch .

Executing prePatch script...
Checking installed patches...
Executing prepatch script...

If possible, perform patch installation in single user mode.
If this can not be done, we recommend having the system in as
quiet a state as possible: no users logged on, no user jobs
running.

Do you wish to continue this installation {yes or no} [yes]?
(by default, installation will continue in 60 seconds) yes
Generating list of files to be patched...
Verifying sufficient filesystem capacity (exhaustive method)...
Installing patch packages...

Patch number 103640-32 has been successfully installed.
See /var/sadm/patch/103640-32/log for details

Patch packages installed:
SUNWarc
SUNWcar
SUNWcsr
SUNWcsu
SUNWfns
SUNWhea
SUNWkvm
SUNWnisu
SUNWscpu
SUNWsra
SUNWsutl
#

만약, 패치가 적용되어지는 시간을 알고 싶으면 다음과 같이 하면 된다.

# timex ./installpatch .

마지막 줄에 패치를 하는데 소요된 전체 시간을 확인 할 수 있다.

3. 패치 삭제

 

경우에 따라서는 패치가 잘못 적용이 되는 경우가 있으며, 필요에 의해 해당 패치를 삭제해야 할 경우가 있다. 패치의 삭제는 파일을 삭제하듯이 할 수 있는 성질이 아니다.

솔라리스 2.5.1에서는 Backoutpatch를 사용하고, 솔라리스 2.6이상에서는 patchrm이라는 명령어를 사용 하면 된다. 물론 솔라리스 2.6에서도 패치를 인스톨 하는 Installpatch, 삭제하는 backoutpatch를 실행 할 수 있다.

1> 삭제(remove)할 패치 ID를 확인

2> 패치 정보가 있는 디렉토리로 이동
# cd /var/sadm/patch/104654-05

3> 패치 디렉토리에서 backoutpatch를 적용
# pwd
/var/sadm/patch/104654-05
# backoutpatch 104654-05

patchrm을 사용할 경우 간단하다(솔라리스 2.6이상)

# patchrm patch_ID

# patchrm 104654-05

 

* 출처 : http://user.chol.com/~unixsun/


덧글

댓글 입력 영역