Bsdadmin.ru

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

Путь на сайте

Домашняя FreeBSD Поддержание в актуальном состоянии пакетной базы FreeBSD

Поддержание в актуальном состоянии пакетной базы FreeBSD

Поддерживать пакеты в актуальном состоянии немного сложнее, и нам также потребуется для работы с пакетами ветка STABLE, т.к. в RELEASE они не обновляются. Давайте предположим,что вы установили FreeBSD STABLE из снапшота месяц назад, а заодно тогда же собрали и пакеты. 

У многих пакетов появились новые версии,  для некоторых возможно есть исправления, связанные с безопасностью. И вот эти пакеты следует обновить.
Можно скомпилировать их из портов с помощью portmaster (8), но зачем тратить
время на компиляцию, когда вы можете взять готовые бинарные сборки, что появляются каждые 2
недели в ветке STABLE?[5]. Скрипт под названием pkg_up-grade (1) из пакета
sysutils/bsdadminscripts может хорошо послужить в таком бинарном обновлении. Он загрузит
самые последние версии пакетов со STABLE FTP, и есть большие шансы в том, что в этих новых
версиях ошибки с безопасностью уже решены. Если же они не решены, то тогда конечно
применяйте portmaster (8).

Листинг I.7. Ограничьте необходимым минимумом количество процессов во время обновления

# top -b
last pid: 64835; load averages: 0.00, 0.00, 0.00 up 0+03:11:51
10:24:37
119 processes: 2 running, 117 sleeping

Mem: 960M Active, 355M Inact, 4014M Wired, 6096K Cache, 8368K Buf, 2527M Free Swap:

PID USERNAME THR PRI NICE SIZE RES STATE C TIME WCPU
COMMAND
2178 root 1 54 0 10304K 2748K ppwait 0 0:00 0.00% csh
2174 root 1 45 0 21696K 1992K wait 0 0:00 0.00%
login
2177 root 1 76 0 6912K 1284K ttyin 0 0:00 0.00%
getty
2176 root 1 76 0 6912K 1284K ttyin 1 0:00 0.00%
getty
2175 root 1 76 0 6912K 1284K ttyin 0 0:00 0.00%
getty
114 root 1 76 0 2764K 1056K pause 0 0:00 0.00%
adjkerntz

Листинг I.8. Устанавливаем свежесобранную базовую систему
# cd /usr/src
# mergemaster -p
# make installworld
# mergemaster -iU
# make delete-old
# shutdown -r now
Листинг Функция ports-check

function ports-check {
# Загрузить последний снимок дерева портов

sudo portsnap fetch update

# Проверить, для каких пакетов доступны новые версии
sudo portmaster -L --index-only | awk '/ [Nn]ew / {print substr($0,9,9999)}'
# Загрузить новую базу и проверить установленные пакеты на наличие уязвимостей

sudo portaudit -Fda
# Проверить /usr/ports/UPDATING
pkg_updating -d $( ls -ltr -D '%Y%m%d' /var/db/pkg | awk 'END{print $6}' )
}

Пример II.1. Примерный вывод о доступности новых/обновленных пакетах и их версиях

% ports-check
Looking up portsnap.FreeBSD.org mirrors... 5 mirrors found.
Fetching snapshot tag from portsnap5.freebsd.org... done. Fetching snapshot metadata...
done.
Updating from Mon Sep 5 07:11:28 CEST 2011 to Mon Sep 5
08:51:01 CEST 2011.
Fetching 3 metadata patches.. done. Applying metadata patches... done. Fetching 0 metadata
files... done.
Fetching 10 patches 10 done.
Applying patches... done.
Fetching 1 new ports or files... done.
Removing old files and directories... done.
Extracting new files:
/usr/ports/chinese/c2t/
/usr/ports/chinese/hc/
/usr/ports/devel/Makefile
/usr/ports/devel/p5-System-Command/
/usr/ports/german/mythes/
/usr/ports/math/p5-Statistics-R/
/usr/ports/polish/hunspell/
/usr/ports/textproc/es-mythes/
/usr/ports/textproc/nl-mythes/
/usr/ports/textproc/sk-mythes/
/usr/ports/textproc/sl-mythes/
Building new INDEX files... done.

New version available: arc-5.21p
New version available: ca root nss-3.12.11 1
New version available: expat-2.0.1 2
New version available: tinyxml-2.6.2
New version available: bash-4.1.11
New version available: gstreamer-plugins-0.10.35 1,3
New version available: gstreamer-plugins-0.10.35 1,3
New version available: gtk-2.24.6
New version available: gtk-update-icon-cache-2.24.6
New version available: libsamplerate-0.1.8 1
New version available: nas-1.9.3
New version available: nettle-2.4
New version available: p5-Date-Manip-6.25
New version available: p5-Mail-IMAPClient-3.29
New version available: p5-XML-Parser-2.41
New version available: xterm-273
New version available: filezilla-3.5.1
New version available: firefox-6.0.1,1
New version available: gtk-oxygen-engine-1.1.2
New version available: nginx-1.0.6,1
New version available: qemu-0.11.1 10
20 have new versions available
New database installed.
Database created: Thu Sep 1 21:20:00 CEST 2011
0 problem(s) in your installed packages found.

Пример II.3. Решаем проблемы с безопасностью путем пересборки нужного пакета

% ports-build ca_root_nss

===>>> Currently installed version: ca root nss-3.12.9 ===>>> Port directory:
/usr/ports/security/ca root nss (...)
===>>> Updating dependency entry for ca_root_nss-3.12.11_1 in each dependent port ===>>>
Upgrade of ca_root_nss-3.12.9 to ca_root_nss-3.12.11_1 complete

% ports-check
Looking up portsnap.FreeBSD.org mirrors... 5 mirrors found. Fetching snapshot tag from
portsnap2.freebsd.org... done. Fetching snapshot metadata... done.
Updating from Mon Sep 5 12:07:23 CEST 2011 to Mon Sep 5 12:25:09 CEST 2011.
Fetching 3 metadata patches.. done.
Applying metadata patches... done.
Fetching 0 metadata files... done.
Fetching 2 patches.. done.
Applying patches... done.
Fetching 0 new ports or files... done.
Removing old files and directories... done.
Extracting new files:
/usr/ports/devel/p5-File-NFSLock/
/usr/ports/devel/p5-MooseX-Aliases/
Building new INDEX files... done.

New version available: arc-5.21p
New version available: expat-2.0.1_2
New version available: tinyxml-2.6.2
New version available: bash-4.1.11
New version available: gstreamer-plugins-0.10.35_1,3
New version available: gtk-2.24.6
New version available: gtk-update-icon-cache-2.24.6
New version available: libsamplerate-0.1.8_1
New version available: nas-1.9.3
New version available: nettle-2.4
New version available: p5-Date-Manip-6.25
New version available: p5-Mail-IMAPClient-3.29
New version available: p5-XML-Parser-2.41
New version available: xterm-273
New version available: filezilla-3.5.1
New version available: firefox-6.0.1,1
New version available: gtk-oxygen-engine-1.1.2
New version available: nginx-1.0.6,1
New version available: qemu-0.11.1_10
19 have new versions available
auditfile.tbz 100% of 69 kB 54 kBps
New database installed.
Database created: Mon Sep 5 12:40:01 CEST 2011
0 problem(s) in your installed packages found.

Пример II.4. Обновляем установленные пакеты с ===> Update <nettle-2.2> to <nettle-2.4>
(security/помощью STABLE-ветки nettle)
=> Update <nas-1.9.2> to <nas-1.9.3> (audio/nas)
% ports-update succeeded
/var/db/uma/FTPINDEX 100% of ===> Update
<libsamplerate-0.1.7_1> to
21 MB 1139 kBps 00m00s <libsamplerate-0.1.8_1> (audio/
/usr/ports/packages/All/nettle-2.4.tbz 100% of libsamplerate)
1082 kB 332 kBps => Update <libsamplerate-0.1.7_1> to
/usr/ports/packages/All/gtk-2.24.6.tbz 100% of <libsamplerate-0.1.8_1>
(audio/
9822 kB 253 kBps 00m00s libsamplerate) succeeded
/usr/ports/packages/All/gstreamer-plugins-0.10100% of ===> Update <expat-2.0.1_1> to
<expat-2.0.1_2>
4091 kB 942 kBps (textproc/expat2)
/usr/ports/packages/All/gtk-oxygen-engine-1.1.100% of => Update <expat-2.0.1_1> to
<expat-2.0.1_2> (textproc/
509 kB 339 kBps expat2) succeeded
/usr/ports/packages/All/filezilla-3.5.1.tbz 100% of ===> Update <xterm-271> to
<xterm-273> (x11/xterm)
3301 kB 232 kBps 00m00s => Update <xterm-271> to <xterm-273> (x11/xterm)
/usr/ports/packages/All/nas-1.9.3.tbz 100% of succeeded
487 kB 494 kBps ===> Update <qemu-0.11.1_9> to <qemu-0.11.1_10>
/usr/ports/packages/All/expat-2.0.1_2.tbz 100% of (emulators/qemu)
130 kB 129 kBps => Update <qemu-0.11.1_9> to <qemu-0.11.1_10>
/usr/ports/packages/All/xterm-273.tbz 100% of (emulators/qemu) succeeded
262 kB 104 kBps ===> Update <p5-XML-Parser-2.40> to <p5-XML-Parser-2.41>
/usr/ports/packages/All/p5-XML-Parser-2.41.tbz100% of (textproc/p5-XML-Parser)
184 kB 381 kBps => Update <p5-XML-Parser-2.40> to <p5-XML-Parser-2.41>
/usr/ports/packages/All/nginx-1.0.6,1.tbz 100% of (textproc/p5-XML-Parser)
succeeded
225 kB 206 kBps ===> Update <gtk-update-icon-cache-2.24.5> to <gtk-
/usr/ports/packages/All/qemu-0.11.1_10.tbz 100% of update-icon-cache-2.24.6>
(graphics/
12 MB 359 kBps 00m00s gtk-update-icon-cache)
/usr/ports/packages/All/tinyxml-2.6.2.tbz 100% of => Update
<gtk-update-icon-cache-2.24.5> to <gtk-update-
170 kB 121 kBps icon-cache-2.24.6> (graphics/gtk-
/usr/ports/packages/All/p5-Date-Manip-6.25.tbz100% of update-icon-cache) succeeded
1301 kB 681 kBps ===> Update <gtk-2.24.5_1> to <gtk-2.24.6> (x11-
===> Update <tinyxml-2.6.1 1> to <tinyxml-2.6.2> toolkits/gtk20)
(textproc/tinyxml) => Update <gtk-2.24.5_1> to <gtk-2.24.6> (x11-toolkits/
=> Update <tinyxml-2.6.1_1> to <tinyxml-2.6.2> gtk20) succeeded
(textproc/tinyxml) succeeded ===> Update <gtk-oxygen-engine-1.1.1> to <gtk-oxygen-
===> Update <p5-Mail-IMAPClient-3.28> to <p5-Mail- engine-1.1.2>
(x11-themes/gtk-oxygen-
IMAPClient-3.29> (mail/p5-Mail- engine)
IMAPClient) => Update <gtk-oxygen-engine-1.1.1> to <gtk-oxygen-
=> Update <p5-Mail-IMAPClient-3.28> to <p5-Mail- engine-1.1.2>
(x11-themes/gtk-oxygen-
IMAPClient-3.29> (mail/p5-Mail- engine) succeeded
IMAPClient) succeeded ===> Update <gstreamer-plugins-0.10.35,3> to <gstreamer-
===> Update <p5-Date-Manip-6.24> to <p5-Date-Manip-6.25> plugins-0.10.35_1,3>
(multimedia/
(devel/p5-Date-Manip) gstreamer-plugins)
=> Update <p5-Date-Manip-6.24> to <p5-Date-Manip-6.25> => Update
<gstreamer-plugins-0.10.35,3> to <gstreamer-
(devel/p5-Date-Manip) succeeded plugins-0.10.35_1,3> (multimedia/
===> Update <nginx-1.0.5,1> to <nginx-1.0.6,1> (www/ gstreamer-plugins) succeeded
nginx) ===>>> Checking 2bsd-vi-050325_1
=> Update <nginx-1.0.5,1> to <nginx-1.0.6,1> (www/nginx)
succeeded (... )

Указанное верно, если вы ранее установили программы из пакетов, либо собирали порты с
опциями по-умолчанию. Если порт был собран с переопределением опций, его придется
пересобрать, либо отказаться от переопределенных в порте опций.
Что касается обновлений пакетов, проверяются они ежедневно,  по причинам,
связанным с безопасностью, узнать о которых можно с помощью утилиты portaudit (1) (из пакета
ports-mg-mt/portaudit ). Информация о новых версиях приходит часто, иногда даже в очень
большом объеме, но пока "0 problem(s) in your installed packages found" суетиться не стоит.
Время от времени, я запускаю pkg_upgrade -a -C для получения с FTP свежих пакетов ветки
STABLE.

Коротко об обновлении пакетов FreeBSD

• используйте пакеты из ветки STABLE, которые пересобираются каждые 2 недели
• используйте утилиту pkg_upgrade (1) для обновления пакетов
• используйте утилиту portmaster (8) для пересборки пакетов, у которых найдены
проблемы в безопасности

Несколько фактов об обновлении пакетов FreeBSD
• пакеты собираются для каждого нового выпуска в ветке RELEASE, и в этой ветке они не
обновляются (даже если в новой версии пакета устранена проблема безопасности)
• пакеты в ветке STABLE пересобираются каждые 2 недели

Во-первых, мы должны установить инструментарий, которым мы будем обновлять пакеты.

# pkg add -r bsdadminscripts portmaster portaudit

Здесь начинается самая важная часть - команды сгруппированы в функции таким образом, чтобы
позволить нам в простой форме проверить наличие новых версий пакетов, выявить проблемы безопасности и в конце-концов обновить их до новой или исправленной версии.
Функция ports-check загружает последний снимок дерева портов, затем показывает, для каких
установленных в системе пакетов доступны новые версии. После чего пакеты проверяются на
наличие проблем с безопасностью, с помощью portaudit(8) и, наконец, проверяется файл
/usr/ports/UPDATING на наличие различных сообщений, которые могут быть нам интересны.
Функция ports-check не перестраивает и не обновляет пакеты, а, как понятно из названия,
только проверяет.

Вторая функция - ports-update - предназначена для обновления пакетов из ветки STABLE. В
функции используется утилита pkg_upgrade (1) из пакета sysutils/bsdadminscripts. Компиляция
из портов производиться не будет. Вы можете использовать эту функцию в двух вариантах -
вызванная без аргументов она обновит все пакеты, которые будут найдены в STABLE FTP. Но, как
показано в Примере II.5, она может быть также использована для пересборки только конкретных
пакетов, которые требуется обновить. Например, ports-update openbox nautilus xterm.

Последняя функция (см. Листинг II.3), названная ports-build, пересобирает определенный пакет
или все из них, если вы не задали имена пакетов явно.

Пример Обновляем одиночный пакет
% ports-update openbox
===> Update <openbox-3.5.0> to <openbox-3.5.0> (x11-
wm/openbox)
=> Update <openbox-3.5.0> to <openbox-3.5.0> (x11-wm/
openbox) succeeded

(...)

===>>> Checking nss-3.12.11 ===>>> Checking open-motif-2.3.3 ===>>> Checking openbox-3.5.0
===>>> No installed ports depend on
openbox-3.5.0 ===>>> Emptying +REQUIRED_BY file.
Try

portmaster -s
пересобирает все указанные пакеты, без проверки на security problems. Кроме того, пакеты
пересобираются с портов, а не как указано выше no compilation. portmaster --packages)

Применяя такой подход по актуализации пакетов, вы должны имеет ввиду две вещи.

Если Вы собрали некий пакет с нестандартными опциями, используемыми при компиляции, то после обновления пакет "вернется" к стандартным значениям. Поэтому Вам придется перекомпилировать его снова так, как нужно именно Вам.

Сначала нужно обновить базовую систему, а после обновить пакеты. Наиболее часто используемые пакеты, в которых присутствуют модули ядра - emulators/virtualbox-ose (VirtualBox), sysutils/fuse-kmod (реализация FUSE) и самый примечательный - x11/nvidia-driver (бинарные графические драйвера для Nvidia-карт).

Домашняя FreeBSD Поддержание в актуальном состоянии пакетной базы FreeBSD