Содержание
Обновление ПО FreeBSD
Менеджер пакетов 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
Вывод списка установленного ПО и наличия обновлений
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