====== Обновление ПО FreeBSD ======
===== Менеджер пакетов pkg =====
[[https://www.freebsd.org/cgi/man.cgi?pkg|man pkg]]
pkg search
pkg install
pkg remove
pkg upgrade
Управлять программным обеспечением с помощью менеджера бинарных пакетов проще, быстрее, но это как говорится путь на "темную сторону силы", поэтому я чаще пользуюсь портами FreeBSD. Там преднастройку пакетов можно сделать и скомпилировать все под свои конкретные нужды (и оборудование), правда это может быть значительно дольше(компилировать же все придется).
Список всех установленных пакетов:
pkg info
Если хотите сделать бэкап установленного пакета перед обновлением (или для дальнейшей установки этого пакета на другом компьютере), то можно воспользоваться командой
pkg create имя_пакета
Можно сделать бэкап всех установленных пакетов
pkg create -a
===== Обновление из портов =====
Искать каталог нужной программы(пакета) в портах:
whereis имя_пакета
Обновлять можно и вручную. Заходить в каталог нужного порта и делать ''make&&make deinstall&&make reinstall&&make clean''. Но для упрощения процесса есть пакеты portupgrade и portmaster, которые придется установить вручную из портов или с помощью pkg. Кстати лучше иметь в системе установленными оба пакета для разных ситуаций оба могут пригодиться.
Вообще-то лучше почитать /usr/ports/UPDATING перед обновлением ПО. Но обычно его читать начинают, когда при обновлении что-то пошло не так (принцип стоматолога - к нему бегут, когда зуб совсем развалится)
==== Обновление дерева портов ====
https://www.freebsd.org/doc/en/books/handbook/ports-using.html
Первый запуск:
portsnap fetch extract
После этого можно пользоваться
portsnap fetch update
==== portupgrade ====
Установка
cd /usr/ports/ports-mgmt/portupgrade && make install clean
pkg install portupgrade
Этот пакет содержит несколько полезных утилит (''cat /usr/ports/ports-mgmt/portupgrade/pkg-descr''):
* portinstall - установка ПО из портов
* portversion - просмотр установленных/доступных версий
* portsclean - очистка системы портов
* portupgrade - собственно программа для обновления.
и другие, но их запуск вручную бывает нужен редко.
Просмотр пакетов, требующих обновления:
portversion -vl "<"
Смотрим список обновляемых пакетов. Есть пакеты, от которых ничего особо не зависит (mc, bash...)- их можно обновить в первую очередь. Другие могут быть связаны сложными зависимостями их все-равно придется обновлять рано или поздно, но я надеюсь что как минимум бэкап конфигов у вас есть (хотя бы ''tar cvzf backup.tar.gz /etc /usr/local/etc'')
Обновление пакета и пакетов зависящих от него и пакетов от которых он зависит (rR - обновление с зависимостями). Сначала тестовый запуск без самого обновления(ключ n):
portupgrade -rRn имя_пакета
Затем собственно обновляем.
portupgrade -rR имя_пакета
Обновление всех пакетов, для которых есть обновления (ключ c - сделать make config перед процессом обновления).
portupgrade -rRac
Безоговорочное обновление всех пакетов независимо от наличия новых версий (ключ f).
portupgrade -frRac
==== pormaster ====
[[https://man.freebsd.org/cgi/man.cgi?portmaster|man portmaster]]
Вывод списка установленного ПО и наличия обновлений
portmaster -L
Обновление всех пакетов, требующих обновления
portmaster -a
То же самое исключая указанный пакет (ключ -x можно указывать несколько раз)
portmaster -a -x clamav-lts
Безусловное обновление всех пакетов
portmaster -afdy
То же самое исключая указанный пакет
portmaster -afd -x bind-tools
Некоторые полезные ключи
--delete-build-only
delete ports that are build-only dependencies after a successful run,
only if installed this run
--packages-build
use packages for all build dependencies
-l list all installed ports by category
-L list all installed ports by category, and search for updates
--packages-build
use packages for all build dependencies
Исключение портов из обработки
/var/db/pkg/*/+IGNOREME
If this file exists for a port that is already installed, several
things will happen:
1. The port will be ignored for all purposes.
This includes dependency updates even if there is no directory
for the port in /usr/ports and there is no entry for it in
/usr/ports/MOVED. If the -v option is used, the fact that the
port is being ignored will be mentioned.
2. If using the
-L option, and a new version exists, the existence of the
+IGNOREME file will be mentioned.
3. If you do a regular update of the port, or if the
-a option is being used you will be asked if you want to update
the port anyway.
==== Решение проблем ====
=== Ошибка: The one in /usr/local/lib/compat/pkg is not used ===
В процессе работы portupgrade в папке /usr/local/lib/compat/pkg иногда скапливаются симлинки на уже несуществующие библиотеки и portupgrade ругается на них.
Вывести список "битых" линков:
find /usr/local/lib/compat/pkg -type l -exec test ! -e {} \; -print
Удалить "битые" симлинки:
find /usr/local/lib/compat/pkg -type l -exec test ! -e {} \; -delete
=== configure: error: C compiler cannot create executables ===
Решение: Rebuild devel/binutils
cd /usr/ports/devel/binutils && make && make deinstall install clean
{{tag>freebsd unix}}