простые решения сложных проблем

Как отмечалось ранее, наиболее предпочтительным способом установки и обновления программ во FreeBSD явлеется установка их из портов. Основой системы портов является локальное дерево портов. Из этого следует, что для поддержания установленного программного обеспечения в актуальном состоянии необходимо регулярно обновлять локальное дерево портов. Одним из способов обновления локального дерева портов является его регулярная синхронизация с деревом портов главного репозитария FreeBSD CVS. Далее будет рассмотренно, как такая синхронизация осуществляется с помощью программы CVSup.

1. Установить CVSup проще всего из предкомпилированного пакета (либо из программы sysinstall, либо командой pkg-add). Из портов его устанавливать не рекомендуется, т.к. он тащит за собой язык Modula.

Итак, запускаем sysinstall, идем в подраздел configure/packages/sysutils и выбираем пакет cvsup-16.1h или cvsup-without-gui-16.1h, если не нужна графическая оболочка (этот пакет доступен, если указать источником коллекции пакетов ftp.freebsd.org или другой ftp сервер). 
После инсталляции этого пакета приступаем к его настройке.

2. Настройка CVSup осуществляется правкой конфигурационного файла supfile.
В каталоге /usr/share/examples/cvsup/ можно найти несколько примеров этого файла для разных применений. Нам для обновления портов интересен файл /usr/share/examples/cvsup/ports-supfile.
Скопируем его куда-нибудь, например в каталог /etc:

# cp /usr/share/examples/cvsup/ports-supfile /etc

и отредактируем:

*default host=cvsup.ru.FreeBSD.org 
*default base=/usr
*default prefix=/usr
*default release=cvs tag=.
*default delete use-rel-suffix
*default compress
## Ports Collection. (перечень коллекций портов)
ports-all
...

Где:
host=cvsup.ru.FreeBSD.org - указывает, откуда мы хотим получать обновления. Этот путь можно изменить при и запуске программы cvsup, запуская ее с ключом -h hostname.
base=/usr - указывает, где будут размещаться файлы статуса (для поддержки истории обновлений). В указанном случае будет использоваться каталог /usr/sup.
prefix=/usr - указывает, где будут размещаться полученные файлы.
release=cvs - означает, что сервер должен получать информацию из главного репозитария FreeBSD CVS.
tag=. - версия исходных текстов. "Точка" означает current (текущую) версию. Для обновления портов используйте только "точку".
delete - дает возможность CVSup удалять файлы, чтобы поддерживать дерево портов в актуальном состоянии. 
compress - включает использование gzip сжатия при передаче данных.
Слово default перед параметром означает, что он используется по умолчанию для всех далее перечисленных коллекций, которые мы хотим обновить.

Далее идет перечень коллекций, которые будут участвовать в обновлении:
ports-all - для обновления всей коллекции портов.
Чтобы обновить только определенные ветви коллекции портов, следует закомментировать строку ports-all и раскомментировать требуемые, например: ports-baseports-net и т.д. (ports-base раскомментировать обязательно, чтобы всегда обновлялась структура самого дерева портов).

3. Запустить обновление портов можно командой:

# cvsup -g -L 2 /etc/ports-supfile

Где:
-g - указывает не использовать GUI (графическую оболочку).
-L - уровень вывода сообщений: 
0 - не выводить никаких сообщений, кроме об ошибках;
2 - выводить информацию о каждом производимом обновлении.

(для получения информации о всех ключах используйте ключ -H)

4. После завершения обновления дерева портов можно посмотреть, какие программы требуют обновления:

# pkg_version -v

Эта команда показывает какие порты следует обновить.

5. Чтобы обновить программу, надо зайти в соответствующий ей порт и выполнить следующие шаги (команды):

# make clean
# make
# pkg_delete -f полное_имя_пакета
# make install

или:

# make clean
# make
# make deinstall
# make install

Но лучше вместо этих действий для обновления программ использовать утилиту portupgrade
Для этого необходимо:
1. установить ее из пакета или порта (sysutils/portupgrade).
2. создать базу данных установленных портов командой:

# pkgdb -F

(регулярно выполняйте эту команду для обновления базы данных пакетов)

Обновить определенный пакет можно командой:

# portupgrade имя_пакета

с флагом -r, если portupgrade должен отработать все пакеты, которые зависят от указанного, и использовать флаг -R для отработки всех пакетов, от которых зависит указанный пакет. Для использования при установке пакетов, а не портов, укажите флаг -P, а для простой загрузки дистрибутивных файлов без построения или установки чего бы то ни было задайте флаг -FИмя_пакета - это либо имя пакета с указанием версии, либо имя пакета без указания версии, либо шаблон.

Командой

# portupgrade -a

можно проверить и обновить все инсталлированные программы (эквивалентна команде portupgrade *).

Приведу еще несколько флагов утилиты portupgrade:

Флаг -f позволяет принудительно обновить порт даже в том случае, если версия устанавливаемой программы меньше уже установленной или требуется переустановить программу на ту же версию.
Флаг -N указывает, что надо установить программу, если она еще не установленна. Перед установкой программы все требуемые для нее пакеты будут обновлены.
Подробнее см. man portupgrade.

Внимание: не прерывайте работу утилит portupgrade и pkgdb - это может привести к повреждению базы данных пакетов. Если это произошло, воспользуйтесь командой pkgdb -fu.

Например, обновим Open SSH:

#  portupgrade  openssh-portable

или, если этот порт еще не установлен:
# portupgrade -N openssh-portable

Для автоматического запуска sshd при загрузке системы, необходимо в файл /etc/rc.conf добавить строки:

sshd_enable="YES"
sshd_program=/usr/local/sbin/sshd

КОММЕНТАРИИ К СТАТЬЕ:

прохожий - 25 октября 2011 г. 18:03

# /usr/local/bin/cvsup -g -L 2 /etc/cvsupfile

Я обновляю дерево портов каждую неделю через cron. Я создал файлик
cvsup_up.sh в /usr/local/sbin/ и поместил в него команду обновления
портов (см. выше). В /etc/crontab добавил следующую строчку

35 23 * * 6 root /usr/local/sbin/cvsup_up.sh

Чтобы посмотреть какие программы мне нужно обновить, я использую команду

# pkg_version -v > /tmp/newport

Оставьте свой комментарий: