Portsnap


 * ports
 * Handbook
 * Handbook
 * portversion (ставится вместе с portupgrade)

Можно запускать из любой директории команду - по умолчанию все должно оказаться в /usr/ports, которая если не существует будет создана

Просто так обновить установленные порты не может - он работает со своей собственной базой, которую нужно создать, запустив с ключом fetch.

Нужно запускать каждый раз как первый этап обновления. Можно сразу две цели указывать (видимо, в более новых версиях стало можно)
 * Получение

Скачивание файла размером около 60Мб. portsnap fetch Looking up portsnap.FreeBSD.org mirrors... 3 mirrors found. Fetching public key from portsnap1.FreeBSD.org... done. Fetching snapshot tag from portsnap1.FreeBSD.org... done. Fetching snapshot metadata... done. Fetching snapshot generated at Tue Jun 9 00:18:32 UTC 2009: 5d583a9d5b7d6b7d75e0bdca7a58eaf0c256525a0bb0d1100% of  56 MB  332 kBps 00m00s Extracting snapshot... done. Verifying snapshot integrity... done. Fetching snapshot tag from portsnap1.FreeBSD.org... done. Fetching snapshot metadata... done. Updating from Tue Jun 9 00:18:32 UTC 2009 to Tue Jun  9 13:07:11 UTC 2009. Fetching 3 metadata patches.. done. Applying metadata patches... done. Fetching 0 metadata files... done. Fetching 34 patches.....10....20....30.. done. Applying patches... done. Fetching 1 new ports or files... done.<BR>

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

Updating from Mon Apr 5 17:02:56 MSD 2010 to Wed Feb  9 18:51:06 MSK 2011.

В результате в /var/db/portsnap/ создастся набор файлов, в директории files/ будут файлы, содержащие порты.

Локальных российских зеркал, как и ПО, позволяющего сделать portsnap-сервер - нет.

portsnap extract
 * Распаковка портов

В результате получаем готовое дерево (старое при этом, видимо, удаляется) du -h -d 0 /usr/ports 524M   /usr/ports

portsnap update "Ports tree is already up to date"
 * Обновление дерева портов

Если выполнить, когда портов нет вовсе, то предложит сначала запустить fetch No snapshot available. Try running<BR>
 * 1) portsnap fetch

Получение отдельного порта
portsnap -p /tmp/ports/ -d /tmp/portsworkdir/ fetch extract lang/php5

<PRE> Looking up portsnap.FreeBSD.org mirrors... 3 mirrors found. Fetching public key from portsnap2.FreeBSD.org... done. Fetching snapshot tag from portsnap2.FreeBSD.org... done. Fetching snapshot metadata... done. Fetching snapshot generated at Mon Apr 5 01:06:24 UTC 2010: 1e9cac0552e5685ff7ac5212fb36cddf2ff85496765a0d100% of  62 MB  402 kBps 00m00s Extracting snapshot... done. Verifying snapshot integrity... done. Fetching snapshot tag from portsnap2.FreeBSD.org... done. Fetching snapshot metadata... done. Updating from Mon Apr 5 01:06:24 UTC 2010 to Mon Apr  5 06:47:46 UTC 2010. Fetching 4 metadata patches... done. Applying metadata patches... done. Fetching 0 metadata files... done. Fetching 5 patches... done. Applying patches... done. Fetching 5 new ports or files... done. /tmp/ports//lang/php5-extensions/ /tmp/ports//lang/php5/ </PRE>

Данные скачиваются в директорию указанную посредством ключа -d. Сами порты выглядят как gz-архивов в поддиректории files/. Распакованные порты оказываются в директории, путь к которой указан ключом -p.

Распаковываются все порты, которые начинаются заданной строки. Например, в случае указания lang/php5 будут распакованы php5 и          php5-extensions.

Учитывает (?) /etc/make.conf

<PRE> NO_SENDMAIL=true WITHOUT_JAVA=yes WITHOUT_X11=yes USE_NONDEFAULT_X11BASE=yes MASTER_SITE_OVERRIDE?= ${MASTER_SITE_BACKUP} MASTER_SITE_BACKUP?=   \ ftp://ftp2.ru.FreeBSD.org/pub/FreeBSD/distfiles/${DIST_SUBDIR}/

PERL_VER=5.8.9 PERL_VERSION=5.8.9 </PRE>
 * 1) added by use.perl 2009-04-05 01:32:30

Автоматическое обновление
crontab -e -u root Ввести в запустившийся vi 0 3 * * * root portsnap -I cron update && pkg_version -vIL=