FreeBSD2012. 5. 9. 11:50

출처 : http://hbesthee.tistory.com/584

 

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하면 업그레이드가 마무리 됩니다.

'FreeBSD' 카테고리의 다른 글

FreeBSD disk partition 정보 확인  (0) 2012.05.10
FreeBSD su sudo 사용 방법  (0) 2012.05.09
freebsd-update를 이용한 보안 업데이트  (0) 2012.05.09
FreeBSD 8.2 APM 설치  (0) 2012.05.09
FreeBSD + APM + cacti 설치  (0) 2012.05.09
Posted by 배움나눔
FreeBSD2012. 5. 9. 11:39

출처 : http://sunkyu.tistory.com/71456

 

FreeBSD를 위한 자동 바이너리 보안 업데이트 시스템 개요

1.
원문 출처

http://www.daemonology.net/freebsd-update/index.html
http://www.daemonology.net/freebsd-update/binup.html
http://www.daemonology.net/bsdiff/index.html

2. freebsd-update
설치

자동 바이너리 보안 업데이트 시스템(이하 freebsd-update)를 사용하려면

/usr/ports/security/freebsd-update
에서 포트를 직접 설치하고

/usr/local/etc/freebsd-update.conf.sample
freebsd-update.conf

복사하여 사용하면 됩니다
.

현재 1.4 대의 클라이언트 프로그램이 나와 있는 상태이므로

1.3 port
라면 먼저 cvsup으로 ports을 업그레이드하고 설치하면 됩니다
.

3. freebsd-update
사용 가능 여부

freebsd-update
사용 가능한 버젼은 현재 4.7, 4.8, 4.9이며

공식 FreeBSD 배포판만(official FreeBSD distribution) 업데이트가 가능하며

일부를 재컴파일하였다면 모든 필요한 파일이 업데이트되지 않을 수도 있습니다
.
하지만 이 경우 1.4.1 버젼의 클라이언트를 사용한다면 업데이트되지 않는 파일에 대한

경고 메시지를 보여줍니다.(-q, quiet 옵션을 사용하지 않았을 경우에 해당
)

)
[root@bsd etc]# freebsd-update fetch
Fetching updates signature...
Fetching hash list signature...
Examining local system...

The following files are affected by security
fixes, but cannot be updated because they
have been modified locally:

/usr/libexec/named-xfer
/usr/sbin/named

No updates available

4. freebsd-update
사용 방법

클라이언트 프로그램을 설치하였다면 다음 과정을 거쳐 바이너리가 업데이트 됩니다
.
-
바이너리 보안 업데이트 가져오기

# freebsd-update fetch

-
바이너리 보안 업데이트 설치하기

# freebsd-update install

- freebsd-update cron
사용하기

약 매 3600(1시간)마다 updates를 확인하여 다운로드한 후

관리자에게 메일로 알려줍니다. 특별한 언급이 없는 것으로 보아서는

아마도 root에게 메일을 보낼 듯합니다
.
# freebsd-update cron &

5.
참고 사항

- freebsd-update
는 암호화된 서명을 이용하며 상당한 양의 트래픽 사용을

감소시키기 위해 binary diff(bsdiff, bspatch)로써 배포됩니다
.

- /usr/local/etc/freebsd-update.conf
# Configuration file for freebsd-update-client
#

# Specifies the base URL from which updates will be fetched
URL=http://update.daemonology.net/

# Specifies a trusted public key fingerprint
KEYPRINT=f212b8797f3b2f981a772cdbacccfed9

- freebsd-update install
작업 디렉토리

# ls /usr/local/freebsd-update
md5vals num pub.key updates

# cat md5vals
/usr/libexec/named-xfer$428a22618d68eb27054b19aa7b3fc48e
/usr/libexec/named-xfer$9de98a9f61de848ebbcd6dbaff2e30c7
/usr/sbin/named$35a4c4e6c31eabbd9ac2b991e4d9b82f
/usr/sbin/named$98a01a49593dd0167daae1be4e87e570

# cat updates(
형식
: /path/to/file$oldhash$newhash)
/usr/libexec/named-xfer$428a22618d68eb27054b19aa7b3fc48e$9de98a9f61de848ebbcd6dbaff2e30c7
/usr/sbin/named$98a01a49593dd0167daae1be4e87e570$35a4c4e6c31eabbd9ac2b991e4d9b82f

6.
옵션

usage: freebsd-update [options] command

Options:
-b basedir -- Set the base directory to basedir (default: /)
-d workdir -- Store working files in workdir
(default: /usr/local/freebsd-update/)
-f conffile -- Read configuration options from conffile
(default: /usr/local/etc/freebsd-update.conf)
-q -- Quiet.
-v -- Verbose.

Commands:
fetch -- Fetch updates from server
cron -- Sleep rand(3600) seconds, fetch updates, and send an
email to root if updates were found.
install -- Install downloaded updates
rollback -- Uninstall most recently installed updates
IDS -- For every file which is installed as part of a
binary RELEASE install, compare against a signed
index of "known good" files.

Posted by 배움나눔