====== Обновление ПО 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}}