Linux,Unix,BSD

freebsd-update를 이용한 커널(Kernel) 업그레이드 7.0 -> 7.2

채윤아빠 2009. 6. 1. 23:30
728x90
반응형
freebsd-update로 간단하고 손쉽게 패치들을 적용할 수 있게 되었습니다.

커널을 업그레이들 하려면, 다음과 같은 순서로 작업을 합니다.

  1. 모든 패키지가 최신으로 업그레이드 되어 있고, 잘 설치되는지 확인 : portupgrade -af
  2. 커널의 메이저 및 마이너 업그레이드를 위하여 패치 파일 다운로드 : freebsd-update -r 7.2-RELEASE upgrade
  3. 패치 적용 : freebsd-update install
  4. 재부팅 한 이후에 다시 남은 패치 적용 : freebsd-update install
  5. 패키지에 문제가 있으면, 패키지 재 설치
    # portupgrade -f ruby
    # rm /var/db/pkg/pkgdb.db
    # portupgrade -f ruby18-bdb
    # rm /var/db/pkg/pkgdb.db /usr/ports/INDEX-*.db
    # portupgrade -af

저의 경우 다음과 같은 오류가 발생하였었습니다.

stone# freebsd-update fetch
Looking up update.FreeBSD.org mirrors... 2 mirrors found.
Fetching public key from update4.FreeBSD.org... failed.
Fetching public key from update5.FreeBSD.org... failed.
No mirrors remaining, giving up.


원인을 분석하기 위해서 7.2 Release 버전에 대한 공개키를 받는 것에 문제가 없는지 확인합니다.
stone# fetch -vvv http://update1.FreeBSD.org/7.2-RELEASE/i386/pub.ssl
scheme:   [http]
user:     []
password: []
host:     [update1.FreeBSD.org]
port:     [0]
document: [/7.2-RELEASE/i386/pub.ssl]
---> update1.FreeBSD.org:80
looking up update1.FreeBSD.org
connecting to update1.FreeBSD.org:80
requesting http://update1.FreeBSD.org/7.2-RELEASE/i386/pub.ssl
>>> GET /7.2-RELEASE/i386/pub.ssl HTTP/1.1
>>> Host: update1.FreeBSD.org
>>> User-Agent: fetch libfetch/2.0
>>> Connection: close
>>>
<<< HTTP/1.1 200 OK
<<< Date: Tue, 02 Jun 2009 13:20:01 GMT
<<< Server: Apache/1.3.41 (Unix)
<<< Cache-Control: max-age=60
<<< Expires: Tue, 02 Jun 2009 13:21:01 GMT
<<< Last-Modified: Sat, 02 May 2009 18:02:40 GMT
last modified: [2009-05-02 18:02:40]
<<< ETag: "702e56-320-49fc8ac0"
<<< Accept-Ranges: bytes
<<< Content-Length: 800
content length: [800]
<<< Connection: close
<<< Content-Type: text/plain
<<<
offset 0, length -1, size -1, clength 800
remote size / mtime: 800 / 1241287360
pub.ssl                                       100% of  800  B 2158 kBps

freebsd-update의 디버깅을 아래와 같이 진행합니다.
stone# freebsd-update -v debug -s update.FreeBSD.org upgrade -r 7.2-RELEASE
Looking up update.FreeBSD.org mirrors... 2 mirrors found.
Fetching public key from update5.FreeBSD.org... fetch: http://update5.FreeBSD.org/7.0-STABLE/i386/pub.ssl: Not Found
failed.
Fetching public key from update4.FreeBSD.org... fetch: http://update4.FreeBSD.org/7.0-STABLE/i386/pub.ssl: Not Found
failed.
No mirrors remaining, giving up.


위 디버깅 정보를 보면, 공개키가 들어 있는 파일을 가져오는곳에서 문제가 발생하는 것을 알 수 있습니다.
현재 커널의 정보를 확인해 보았더니, 아래와 같았습니다.
stone# uname -a
FreeBSD stone.bflysoft.kr 7.0-STABLE FreeBSD 7.0-STABLE #1: Thu Mar 20 08:52:44 UTC 2008  i386


서버의 릴리즈 정보에 해당하는 공개키가 없어서 문제가 발생하는 것이므로, 아래와 같이 임시적으로 서버의 버전 정보를 수정합니다.
stone# setenv UNAME_r 7.0-RELEASE
stone# uname -a
FreeBSD stone.bflysoft.kr 7.0-RELEASE FreeBSD 7.0-STABLE #1: Thu Mar 20 08:52:44 UTC 2008 i386


위와 같이 릴리즈 정보가 변경되었음을 확인한 이후에 다시 freebsd-update를 시도하여 그제서야 마이너 업그레이드가 제대로 진행이 되었습니다.

업그레이드가 진행중에 다음과 같은 메시지가 표시되면서 각종 텍스트 파일의 수정이 필요합니다.
stone# freebsd-update -r 7.2-RELEASE upgrade                              
Looking up update.FreeBSD.org mirrors... 2 mirrors found.
Fetching metadata signature for 7.0-RELEASE from update4.FreeBSD.org... done.
Fetching metadata index... done.
Fetching 1 metadata patches. done.
Applying metadata patches... done.
Fetching 1 metadata files... done.
Inspecting system... done.

The following components of FreeBSD seem to be installed:
kernel/generic src/base src/bin src/cddl src/contrib src/crypto src/etc
src/games src/gnu src/include src/krb5 src/lib src/libexec src/release
src/rescue src/sbin src/secure src/share src/sys src/tools src/ubin
src/usbin world/base world/dict world/doc world/games world/info
world/manpages world/proflibs

The following components of FreeBSD do not seem to be installed:
src/compat world/catpages

Does this look reasonable (y/n)? y

Fetching metadata signature for 7.2-RELEASE from update4.FreeBSD.org... done.
Fetching metadata index... done.
Fetching 1 metadata patches. done.
Applying metadata patches... done.
Fetching 1 metadata files... done.
Inspecting system... done.
Fetching files from 7.0-RELEASE for merging... done.
Preparing to download files... done.
Attempting to automatically merge changes in files... done.

The following file could not be merged automatically: /etc/defaults/periodic.conf
Press Enter to edit this file in vi and resolve the conflicts
manually...



버전 정보에 따라 절절히 모든 파일을 수정해 줍니다.

그리고 난 후에 install 합니다.
stone# freebsd-update install
Installing updates...
Kernel updates have been installed.  Please reboot and run
"/usr/sbin/freebsd-update install" again to finish installing updates.


재부팅 이후에, 다시 한번 freebsd-update install하면 업그레이드가 마무리 됩니다.


참고자료