Обновление системы

Установка, настройка, эксплуатация.
Ответить
Аватара пользователя
root
Site Admin
Сообщения: 501
Зарегистрирован: 15 авг 2026 01:31

Обновление системы

Сообщение root »

Установка полной версии subversion (svn) через соответствующий пакет или, при наличии исходных текстов в /usr/ports, командами:

Код: Выделить всё

# cd /usr/ports/devel/subversion && make clean install
Если система 10-STABLE или новее, использование предустановленной системной утилиты svnlite вместо svn
Получение исходных текстов, использование утилиты svn (или svnlite, замените команду):
Не забываем сохранить локальные правки в дереве исходного кода и свою конфигурацию ядра из /sys/{amd64,i386}/conf/ВАША_КОНФИГУРАЦИЯ (если такие есть).
Создаём shell скрипт с такими строчками:

Код: Выделить всё

#!/bin/sh
# Sources
rm -rf /usr/src/* && svnlite co svn://svn.freebsd.org/base/head /usr/src
# Ports
rm -rf /usr/ports/* && svnlite co svn://svn.freebsd.org/ports/head /usr/ports
# Documentation
rm -rf /usr/doc/* && svnlite co svn://svn.freebsd.org/doc/head /usr/doc
Если вам не нужны исходные тексты документации, всю секцию Documentation комментируем.
- релизы

Код: Выделить всё

# svnlite list svn://svn.freebsd.org/base/release
RELENG - или иначе bugfix'ы к релизам:

Код: Выделить всё

# svnlite list svn://svn.freebsd.org/base/releng
- stable

Код: Выделить всё

# svnlite list svn://svn.freebsd.org/base/stable
- current или альтернативный тег head (head он же "." точка)

Код: Выделить всё

# svnlite list svn://svn.freebsd.org/base/head
Если вам нужно отслеживать текущую версию разработки (CURRENT), команду svn в секции Source меняем на

Код: Выделить всё

svnlite co svn://svn.freebsd.org/base/head /usr/src
Запускаем первоначальный shell-скрипт, получаем исходные тексты.
После получения исходного кода смотрим файл /usr/src/UPDATING, там описаны все основные изменения от версии к версии.
Последующие обновления можно получать таким shell скриптом:

Код: Выделить всё

#!/bin/sh
# Sources
svnlite update /usr/src
# Ports
svnlite update /usr/ports
# Documentation
svnlite update /usr/doc
Перед обновлением системы нужно почистить директорию /usr/obj

Код: Выделить всё

cd /usr/obj && chflags -R noschg * && rm -rf *
cd /usr/src && make cleandir  && make cleandir # хендбук рекомендует выполнять эту команду дважды (!)
Обновляем систему

Код: Выделить всё

cd /usr/src
make -j `sysctl -n hw.ncpu` buildworld
make -j `sysctl -n hw.ncpu` buildkernel  ## Добавить "KERNCONF = yourkernelname", если вы сделали собственное ядро.
make installkernel                       ## Добавить "KERNCONF = yourkernelname", если вы сделали собственное ядро.
reboot                                   ## Рекомендуется перейти в однопользовательский режим, но не обязательно.
cd /usr/src
mergemaster -p                           ## Если что-то должно быть объединено, добавлено или удалено.
make installworld
mergemaster -iUF                         ## Вы будете объединить новые конфигурационные файлы с вашими старыми.
yes | make delete-old && yes | make delete-old-libs
cd /usr/obj && chflags -R noschg * && rm -rf *
cd /usr/src && make cleandir  && make cleandir
reboot
Для добавления новых изменений в конфигурационные файлы в каталоге /etc, необходимые для сборки ядра и утилит (например, в /etc/make.conf) необходима синхронизация при помощи mergemaster(8):
Нужно внимательно смотреть, что mergemaster предлагает сделать с тем или иным конфигурационным файлом, и выбирать устраивающий вас вариант действий.

Код: Выделить всё

d - оставить старый вариант файла, удалив новый;
i - установить новый, удалив старый;
m - построчное сравнение старого и нового файла;
v - сравнить файлы еще раз. 
При выборе построчного сравнения, на экран будут выведены обе версии файла, слева - содержимое старого файла, справа - нового. Возможные варианты действий:

Код: Выделить всё

l - использовать вариант слева, то есть старый;
r - использовать вариант справа, то есть новый.
Имейте в виду, простая установка свежих версий конфигурационных файлов не всегда является тем, что вам нужно, поскольку в процессе работы вы могли настраивать какие-то конфигурационные файлы под свои нужды и, выбрав установку новой версии файла, все изменения в старом файле будут утеряны.

bind - deprecate, вместо него в системе unbound
nslookup -> host

Код: Выделить всё

host -t a www.bsdportal.ru
www.bsdportal.ru has address 109.95.210.170
host -t any www.bsdportal.ru
www.bsdportal.ru has address 109.95.210.170
host -t cname www.bsdportal.ru
www.bsdportal.ru has no CNAME record
host -t ns bsdportal.ru
bsdportal.ru name server 1ns.ru.
bsdportal.ru name server ns2.r01.ru.

Portupgrade и Portmaster
Утилита portupgrade

Portupgrade – это не одна утилита, а целый пакет утилит по управлению портами.
В пакет portupgrade входят:

1. portupgrade – одноименная утилита, средство автоматического обновления установленных программ
2. portinstall – утилита установки новых программ, присутствующих в системе портов FreeBSD
3. portversion – утилита показывающая установленный софт и наличие обновлений для него.
4. portsclean – утилита очистки мусора остающегося после сборки портов
5. portsdb – утилита создающая базу программ, присутствующих в портах FreeBSD
6. ports_glob – предназначена для поиска по базе портов
7. portcvsweb – браузер для CVSWeb
8. pkgdu – утилита, предназначенная для подсчета дискового пространства занятого установленными программами
9. pkgdb – еще одна утилита для управления базой портов
10. pkg_which – предназначен для поиска по базе портов
11. pkg_sort – утилита сортирует порты в соответствии c зависимостями
12. pkg_fetch – утилита для скачки собранных(бинарных) пакетов
13. pkg_deinstall – средство для массового удаления установленного софта

Устанавливаем:

Код: Выделить всё

# cd /usr/ports/ports-mgmt/portupgrade && make install clean 
Не забываем обновлять порты перед использованием утилит!

Код: Выделить всё

# svnlite update /usr/ports
Использование утилит из пакета portupgrade.

1. Обновить все программы (-a) с зависимостями от обновляемых портов (-r) и зависимостями для этих портов (-R)

Код: Выделить всё

# portupgrade -arR
А такая команда позволит скачать новые программы, не устанавливая их:

Код: Выделить всё

# portupgrade -aFrR
2. Если в системе что-то сломалось и мы хотим обновить все программы независимо от того, нуждаются они в обновлении или нет, выполняем:

Код: Выделить всё

# portupgrade -af
При добавлении ключа (-b) к этой команде позволяет сохранить старые версии пакетов в бэкап (/usr/ports/packages/All/), установить пакет из бэкапа можно используя команду:

Код: Выделить всё

# pkg_add 
3. Определяем программы, нуждающиеся в обновлении:

Код: Выделить всё

# pkg_version -v | grep "need"
или

Код: Выделить всё

# portversion | grep "<"
Можно и так:

Код: Выделить всё

# portversion -l "<"
Вид списка нуждающихся в обновлении портов будет разным.
4. С помощью portinstall можно устанавливать программы, делаем так:

Код: Выделить всё

# portinstall /usr/ports/databases/mysql51-server/
Сборка и установка порта будет произведена по правилам, указанным в файле конфигурации.
5. Для периодической чистки дерева портов от всякого мусора, оставшегося от неудачных сборок, используем portsclean:

Код: Выделить всё

# portsclean -C
- для очистки рабочих директорий, тех которые используются для сборки программ и

Код: Выделить всё

# portsclean -D
- для очистки директории /usr/ports/distfiles от устаревших файлов исходников программ

6. Pkgdb - в основном используется для исправления нарушенных зависимостей портов:

Код: Выделить всё

# pkgdb -F
7. Удаляем пакеты при помощи pkg_deinstall:

Код: Выделить всё

# pkg_deinstall apache
Интересная особенность, не нужно больше указывать полностью номер версии!
Portupgrade - очень полезный и надежный инструмент!


Утилита Portmaster

Не менее удобное, чем potrupgrade, средство, кроме этого, есть одно очень позитивное отличие: если portupgrade при сбое и повторном запуске начинает все сначала, причем при этом еще и может пострадать его база данных, portmaster, не используя никаких сторонних баз, строит список пересобранных портов. В случае, если возникает какая-либо нерешаемая ситуация, и пересборка портов останавливается, достаточно вручную решить проблему и перезапустить portmaster.

Установка:

Код: Выделить всё

# /usr/ports/ports-mgmt/portmaster
# make install clean
Использование Portmaster
1. Ищем что необходимо обновить:

Код: Выделить всё

# portmaster -L | grep -B1 «New version»
Выводятся имена пакетов
2. Обновляем все пакеты:

Код: Выделить всё

# portmaster -Da
Для удобства можно написать скрипт все стадии и настроить cron.

Обновление портов

Код: Выделить всё

#!/bin/sh
clear

echo "------------------------------------- Updating ports"
svnlite update /usr/ports

echo "------------------------------------- Upgrading portsaudit's database"
portaudit -Fda > ports-portaudit.txt

echo "------------------------------------- Listing outdated ports"
portmaster -L | grep -B1 "New version" > ports-to-upgrade.txt
Утилиты Portupgrade и Portmaster могут прекрасно уживаться вместе и дополнять друг друга. Пример из жизни - случилась неприятная ситуация с повреждением базы установленных портов. Pkgdb -F не помогал. На помощь пришел Portmaster:

Код: Выделить всё

#portmaster --check-depends  
#portmaster --check-port-dbdir  
#pkgdb -Fu
На вопросы об удалении нарушенных зависимостей отвечаем утвердительно ("у").
Ответить