Bsdadmin.ru

Записки администратора FreeBSD

Путь на сайте

Домашняя FreeBSD Установка патчей и обновление FreeBSD.

Установка патчей и обновление FreeBSD.

Если Вам необходимо обновить версию FreeBSD без перехода на более высокую версию ( например без перехода с FreeBSD 7.1 на FreeBSD 7.2) А просто наложить патчи безопасности. При этом Вы не перекомпилировали ядро и не изменяли встроенных пользователей.

Для этого делаем следующее:
Устанавливаем, если необходимо,прокси HTTP_PROXY http://myproxy:myport.
Например:(setenv HTTP_PROXY http://172.16.2.1:3128)
Выполняем #freebsd-update fetch.
Затем # freebsd-update install.
Перезагружаемся.


Смотрим, что имеем на сервере.
freebsd7a# u(name -a  
( FreeBSD freebsd7a.localdomain 7.2-RELEASE FreeBSD

...edited...

 Вот как это делается.
freebsd7a# setenv HTTP_PROXY http://172.16.2.1:3128
freebsd7a# freebsd-update fetch
Looking up update.FreeBSD.org mirrors... 3 mirrors found.
Fetching public key from update5.FreeBSD.org... done.
Fetching metadata signature for 7.2-RELEASE from update5.FreeBSD.org...
done.
Fetching metadata index... done.
Fetching 2 metadata files... done.
Inspecting system... done.
Preparing to download files... done.
Fetching 26 patches.....10....20... done.
Applying patches... done.
The following files will be updated as part of updating to 7.2-RELEASE-p3:
/boot/kernel/if_bce.ko
/boot/kernel/if_bce.ko.symbols
/boot/kernel/if_fxp.ko
/boot/kernel/if_fxp.ko.symbols
/boot/kernel/kernel
/boot/kernel/kernel.symbols
/lib/libc.so.7
/lib/libthr.so.3
...edited...
/usr/sbin/named
/usr/sbin/nologin
/usr/sbin/ntpd
freebsd7a# freebsd-update install
Installing updates... done.
freebsd7a# reboot
Смотрим, установился ли патч.
freebsd7a# un(ame -a
FreeBSD freebsd7a.localdomain 7.2-RELEASE-p2

 Другой вариант - установка патчей вручную.
Мы хотим вручную применить патчи безопасности.
Для этого необходимо проверить эти патчи с помощью Gnu Privacy Guard и импортировать ключи разработчиков. Так мы сможем проверять сигнатуры патчей, которые будем устанавливать.


Инсталлируем GnuPG
freebsd7# pkg_add -vr gnupg
scheme: [ftp]
user: []
password: []
host: [ftp.freebsd.org]
port: [0]
document: [/pub/FreeBSD/ports/i386/packages-7.1-release/Latest/gnupg.tbz]
---> ftp.freebsd.org:21
looking up ftp.freebsd.org
connecting to ftp.freebsd.org:21
...edited...

Инсталлируем GPG и импортируем ключи разработчиков
freebsd7# gpg --import /usr/share/doc/en_US.ISO8859-1/books/handbook/pgpkeys.html
gpg: directory '/root/.gnupg' created
gpg: new configuration file '/root/.gnupg/gpg.conf' created
gpg: WARNING: options in '/root/.gnupg/gpg.conf' are not yet active during this run
gpg: keyring '/root/.gnupg/secring.gpg' created
gpg: keyring '/root/.gnupg/pubring.gpg' created
gpg: /root/.gnupg/trustdb.gpg: trustdb created
gpg: key CA6CDFB2: public key "FreeBSD Security Officer < Этот адрес электронной почты защищен от спам-ботов. У вас должен быть включен JavaScript для просмотра.   >" imported
gpg: key FF8AE305: public key " Этот адрес электронной почты защищен от спам-ботов. У вас должен быть включен JavaScript для просмотра. " imported
gpg: key 7414629C: public key "FreeBSD portmgr secretary < Этот адрес электронной почты защищен от спам-ботов. У вас должен быть включен JavaScript для просмотра. >" importedgpg: Total number processed: 3
gpg: imported: 3 (RSA: 1)
gpg: no ultimately trusted keys found


Проверяем, установлены ли у нас source.
freebsd7# ls /usr/src
Должны увидеть следующее:
COPYRIGHT contrib rescue
LOCKS crypto sbin
MAINTAINERS etc secure
Makefile games share
Makefile.inc1 gnu sys
ObsoleteFiles.inc include tools
README kerberos5 usr.bin
UPDATING lib usr.sbin
bin libexec
cddl release
Значит, что установлено.

Если не видим,  ставим через sysinstall.
Запускаем sysinstall.
Выбираем Configure – Do post-install configuration of FreeBSD
Выбираем Distributions – Install additional distribution sets
Выбираем src – Sources for everything by highlighting and hitting the space bar
Выбираем All – Select all of the below by highlighting and hitting return.
Кнопка OK .
Кнопка OK на Select the distributions you wish to install pageand нажать return.
Выбираем CD/DVD – Install from a FreeBSD CD/DVD and нажать return.

Обновляем source код с помощью CVS.
freebsd7# cd /usr
freebsd7# cvs -d Этот адрес электронной почты защищен от спам-ботов. У вас должен быть включен JavaScript для просмотра. :/home/ncvs co -r RELENG_7_1_0 src
cvs checkout: Updating src
cvs checkout: Updating src/bin
cvs checkout: Updating src/bin/cat
...truncated...

   Демонстрация наложения патча
Скачиваем патч для ktimer
freebsd7# fetch http://security.FreeBSD.org/patches/SA-09:06/ktimer.patch
ktimer.patch 100% of 476 B 61 kBps
freebsd7# fetch http://security.FreeBSD.org/patches/SA-09:06/ktimer.patch.asc
ktimer.patch.asc 100% of 195 B 24 kBps

Проверяем сигнатуру подписи патча ktimer.
freebsd7# gpg --verify ktimer.patch.asc ktimer.patch
gpg: Signature made Sun Mar 22 19:59:58 2009 EDT using DSA key ID CA6CDFB2
gpg: Good signature from "FreeBSD Security Officer < Этот адрес электронной почты защищен от спам-ботов. У вас должен быть включен JavaScript для просмотра. >"
gpg: WARNING: This key is not certified with a trusted signature!
gpg: There is no indication that the signature belongs to the owner.
Primary key fingerprint: C374 0FC5 69A6 FBB1 4AED B131 15D6 8804 CA6C DFB2

Накладываем патч ktimer
freebsd7# patch < /root/ktimer.patch
Hmm... Looks like a unified diff to me...
The text leading up to this was:
-------------------------- 
|Index: sys/kern/kern_time.c

 |==================================

|--- sys/kern/kern_time.c (revision 190192)
|+++ sys/kern/kern_time.c (working copy)
--------------------------
Patching file sys/kern/kern_time.c using Plan A...
Hunk #1 succeeded at 1079 (offset -6 lines). 

В заключение мы пересоберем ядро GENERIC из source с патчами и проинсталлируем его.


Пересборка ядра
freebsd7# cd /usr/src/sys/i386/conf
freebsd7# cp GENERIC FREEBSD7
freebsd7# cd /usr/src
freebsd7# make buildkernel KERNCONF=FREEBSD7

--------------------------------------------------------------

>>> Kernel build for FREEBSD7 started on Thu Aug 20 11:01:55 EDT 2009

--------------------------------------------------------------

===> FREEBSD7
mkdir -p /usr/obj/usr/srcsys

--------------------------------------------------------------

>>> stage 1: configuring the kernel

...edited...

--------------------------------------------------------------

>>> Kernel build for FREEBSD7 completed on Thu Aug 20 11:54:29 EDT 2009

Инсталляция нового ядра.
freebsd7# make installkernel KERNCONF=FREEBSD7  

--------------------------------------------------------------

>>> Installing kernel

--------------------------------------------------------------
cd /usr/obj/usr/src/sys/FREEBSD7; MAKEOBJDIRPREFIX=/usr/obj MACHINE_ARCH=i386 MACHINE=i386 CPUTYPE= GROFF_BIN_PATH=/usr/obj/usr/src/tmp/legacy/usr/bin GROFF_FONT_PATH=/usr/obj/usr/src/tmp/legacy/usr/share/groff_font GROFF_TMAC_PATH=/usr/obj/usr/src/tmp/legacy/usr/share/tmac

 ...edited...


Если необходимо пересобрать мир и ядро, то выполняем следующие команды.
#cd /usr/src
#make buildworld
#make buildkernel KERNCONF=FREEBSD7
#make installkernel KERNCONF=FREEBSD7
#mergemaster -p
#make installworld
#mergemaster
#reboot

  Обновление FreeBSD c 7.1 на 7.2

freebsd7# freebsd-update upgrade -r 7.2-RELEASE
Looking up update.FreeBSD.org mirrors... 3 mirrors found.
Fetching public key from update4.FreeBSD.org... done.
Fetching metadata signature for 7.1-RELEASE fromupdate4.FreeBSD.org... done.
Fetching metadata index... done.
Fetching 2 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:
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.1-RELEASE for merging... done.
Preparing to download files...
..edited..

  freebsd7# freebsd-update install
Installing updates...
Kernel updates have been installed. Please reboot and run "/usr/sbin/freebsd-update install" again to finish
installing updates.
Перегружаемся:
freebsd7# reboot
freebsd7# freebsd-update install
Installing updates...done. 

Попросят пересобрать все third-party приложения (например, порты, установленные через дерево портов и т.п), в связи с обновлением системных библиотек. После выполнения предложенного требуется запустить freebsd-update еще раз для удаления старых (более не используемых) библиотек
# freebsd-update install
Проверяем версию FreeBSD
freebsd7# u(name -a
FreeBSD freebsd7.localdomain 7.2-RELEASE-p2 FreeBSD

Домашняя FreeBSD Установка патчей и обновление FreeBSD.