FreeBSD Часть 5 Обновление портов

   Статья писалась давно и устарела. Оставлю её без изменения. А насчет обновления портов, вот вам ссылка, в ней все досканально описано, не буду повторятся:

http://www.freebsd.org/doc/ru_RU.KOI8-R/books/handbook/ports-using.html

   Ну а это старая статья, если кому интересно читайте:

   В дальнейшем мы будем устанавливать много дополнительного софта из портов. Но перед этим нужно все порты обновить и делать эту процедуру нужно всегда перед установкой нового софта. Если пренебречь этой процедурой, то проблемы при установке вам обеспечены. А потому установим проги, которые как раз за обновление портов отвечают, а также попробуем автоматизировать процесс обновления портов, потому что процесс очень долгий. Порты можно обновлять двумя способами. Рассмотрим оба. Кстати может кто знает еще способы? Подскажите.

1. способ

Установим прогу cvsup

Переходим сюда

# cd /usr/ports/

набираем команду:

# make fetchindex

Переходим сюда

# cd /usr/ports/net/cvsup-without-gui/

Устанавливаем cvsup без всяких gui. Процесс установки не быстрый.

# make install clean

В процессе установки выскакивают всякие менюшки и просят вас чего нибудь выбрать. Пока ничего не трогаем а просто давим "OK".  После завершения процесса даем команду:

# rehash

для того, чтобы заставить FreeBSD перечитать файлы, находящиеся в маршрутах поиска, чтобы система обнаружила их появление (кстати запомните её и не забывайте давать эту команду всегда после установки нового софта)

Разберемся с файлом refuse. Файл позволяет отказаться от того что нам не надо качать, например китайскую документацию или ещё какой хлам.

Файл refuse можно найти здесь /usr/share/examples/cvsup/

Создаем папку

# mkdir /var/db/sup

Копируем файл refuse

# cp /usr/share/examples/cvsup/refuse /var/db/sup/

Редактируем файлик:

# ee /var/db/sup/refuse

строчки  doc/ru_* и ports/russian удаляем. Будьте осторожны, в этом файлике не должно быть ничего лишнего, даже знака #.

Копируем файл supfile - основной файл конфигурации cvsup

# cp /usr/share/examples/cvsup/stable-supfile /usr/local/etc/supfile

Открываем файл на редакцию:

# ee /usr/local/etc/supfile

Ищем строчку

*default host-CHANGE_THIS.FreeBSD.org

и меняем на 

*default cvsup2.ru.FreeBSD.org т.е. адрес откуда будем обновлять порты.

Ищем строчку

*default base=/var/db

и  изменяем на 

*default base=/var/db/sup

Выходим с сохранением. Переходим сюда

# cd /usr/ports/

Запускаем сам процесс обновления с такими опциями:

# cvsup -g -L 2 /usr/local/etc/supfile && make fetchindex

Процесс не быстрый. Ждем окончания.

 

Теперь нужно установить PORTUPGRADE из портов.

На заметку:  чтобы найти нужный порт можно поступить так:

# find /usr/ports/ -name "portupgrade"

Нашли, переходим в эту директорию:

# cd /usr/ports/ports-mgmt/portupgrade

запускаем процесс установки:

# make install clean

На все дополнительные вопросы тупо давим "OK"

# rehash

Пакет установлен. Важно! Перед запуском portupgrade нужно всегда запускать cvsup!!!

После каждого запуска cvsup нужно запускать команду для обновления индексов:

# portsdb -Uu

Процесс не быстрый и на экране никаких движений, но не надо ничего делать, процесс идет и нужно дождаться его окончания.

Перед запуском самой portupgrade запускаем обновление базы 

# pkgdb -F

Если Вы запустили эту команду, не прерывайте её работу, иначе Вы рискуете остаться с противоречивой базой данных. Если же неприятность случилась, эта команда устранит несовместимость:

# pkgdb -fu

Если и это не поможет то удаляем /var/db/pkg/pkgdb.db и снова pkgdb -fu 

Ну и запускаем обновление портов с такими опциями.

# portupgrade -arR --batch

Предупреждаю, процесс не быстрый и некоторые порты попросят вас выбрать опции. 

Чтобы нам при этом не присутствовать добавляем ключ --batch.

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

# portupgrade -Rf php5-\*

 

2. способ

Воспользоваться portsnap. Выполняется даже, если вы раньше использовали cvsup

Если делаем первый раз, переходим в /usr/ports и запускаем для загрузки снепшота:

# portsnap fetch

Затем разворачиваем дерево:

# portsnap extract

Затем сам апдейт:

# portsnap update

Всё, все порты обновлены. Теперь можно автоматизировать процесс запихав в cron в файл  /etc/crontab:

0 1 * * * root portsnap -I cron update && pkg_version -vIL=

Сразу скажу, что этим способом я в последнее время не пользуюсь, потому что были проблемы с установкой софта. Очень рекомендую первый способ. С ним у меня ещё не возникало проблем.

Автоматизация обновления портов:

   Если вы обратили внимание, то весь процесс обновления портов занимает продолжительное время. Чтобы это нас не задерживало, процесс обновления автоматизируем, напишем небольшой простенький скрипт update:

#!/bin/sh
#########################################
# Created: klops01 #
# Date: 2012-17-10 #
#########################################
portsclean -CDD;
cvsup -g -L 2 /usr/local/etc/supfile;
portsdb -Uu;
pkgdb -F;
portupgrade -arR --batch;

Кладём его например сюда: /etc/myscripts/update , и проверяем запустив его, всё должно работать. Вставим на выполнение в cron, в файлик /etc/crontab:

10  00  *  *  *  root  /etc/myscripts/update

т.е. каждый день в 00:10 будет все обновляться и каждый день все порты будут в актуальном состоянии. Но прошу учесть одну фишку, про которую все забывают, а потом ломают голову почему в ручном режиме скрипт запускается, а в кроне нет. Крон  будет использовать свои пути окружения и для нормальной работы скрипта ему нужно скормить все пути текущего пользователя. Предварительно узнаём эти пути командой

# echo $PATH

Вы должны увидеть что-то наподобие:

# /sbin:/bin:/usr/sbin:/usr/bin:/usr/games:/usr/local/sbin:/usr/local/bin:/data/bin

Вот всю это строчку в таком же виде вы и добавляете к существующим путям в первых строках кронтаба здесь /usr/etc/crontab. И наш скрипт без проблем сработает в кроне.

 

Фича полезная:

В случае, когда необходимо установить какой-то большой пакет (например KDE, или LibreOffice, которые мы не будем ставить :)), и не хочется постоянно следить за процессом в ожидании момента, когда в очередной раз надо нажать YES, можно использовать такую опцию:

BATCH=yes

Например:

/usr/ports/editors/libreoffice 

# make BATCH=yes install clean

Если надо добавить ещё какие-то опции — указываем их так:

/usr/ports/www/apache22 

# make WITH_SUEXEC=yes SUEXEC_DOCROOT=/ BATCH=yes install clean

И не забываем про команду:

# make config-recursive

которая позволяет выполнить заранее все make conf в портах, которые будут устанавливаться зависимостями от основного.

 

Категории:

Рейтинг: 
Голосов еще нет

Добавить комментарий

Filtered HTML

Plain text