13.04.2014

Обновление программ в FreeBSD

Обновление программ в FreeBSD


1. Использование [установка, удалени, обновление] пакажей в FreeBSD


Установка программ [бинарная]

Установка пакеджа firefox [с http://ftp.freebsd.org/ ]:

# pkg install firefox

Информация о доступных программах в удаленном репозитарии

Посмотреть список всех доступных для установки программ:

$ pkg rquery %n-%v

// Комментарий: сортировка %n - имя пакеджа, %v - номер версии.

$ pkg rquery 'nomo-versio: %n-%v \n amplekso: %sh \n %e' firefox

// Комментарий: '%n' - имя пакеджа, '%v' - номер версии; '\n' - перенос строки; '%sh' - 's' есть размер, а 'h' - человеческий формат; '%e' - описание пакеджа.

$ pkg rquery -e '%e ~ *firefox*' '> nomo-versio: %n-%v \n amplekso: %sh \n%e\n\n' | less

или

$ pkg rquery -e '%n ~ *firefox*' '> nomo-versio: %n-%v \n amplekso: %sh \n%e\n\n' | less

// Комментарий:
'-e' - указывает команде pkg rquery формат запроса " evaluation-condition" [оценочное-условие].

Первый строковой параметр является строкой запроса
'%e' - переменная содержащая строковое описание пакажо
'%n' - переменная содержащая строковое название пакажо
'~' - оператор вхождения одной строки в другую

Второй строковой параметр является строкой вывода результата запроса
'%n' - название пакажо
'%v' - версия пакажо
'\n' - перенос строки вывода
'%e' - описание пакажо.


Информация об установленных программах

Посмотреть список всех установленных программ:

$ pkg info

Посмотреть версию установленой порграммы:

$ pkg info | grep firefox

Вывод терминала информации версии и краткого описания программы firefox:

firefox-8.0,1       Web browser based on the browser portion of Mozilla

Удаление программ [бинарное]

Удаления пакеджей:

# pkg delete firefox-8.0,1

или проще

# pkg delete -ix firefox

// Комментарии: Эта команда удалит все пакеджи, в названии которых содержится «firefox», и перед каждым удалением потребует нашего подтверждения.


Очистка системы от ненужных программ

Ненужный пакедж — это тот, который мы не используем и от которого не зависят другие пакеджи.

Вывести список ненужных пакеджей:

$ pkg info -Ra | less

Упростить себе работу можно, используя Perl и регулярные выражения.

$ pkg info -Ra \
| perl -e 'while(<>){$t.=$_};@t=$t=~/Information for ([^:]+):(?:\s{3}|\s{2}Required by:\s{4})/sig;print join("\n",@t)."\n";'

Обновление программ [бинарное]

Лучше всего для этой цели подходит pkg_upgrade, входящий в пакет bsdadminscripts.

Устанавливаем bsdadminscripts:

# pkg install bsdadminscripts

или из портов

$ whereis bsdadminscripts

// Комментарии: Выясняем путь где находится порт bsdadminscripts.

и устанавливаем порт

# cd /usr/ports/sysutils/bsdadminscripts 
# make install clean

Список пакеджей для обновления:

# pkg upgrade -n

или сложнее(

# pkg version -v | grep needs

Обновление бинарных пакетов обычно происходит быстро, так что можно сразу обновить весь устаревший софт.

Обновление всех пакеджей:

# pkg upgrade

Обновление опредлённого пакеджа:

# pkg upgrade -rR firefox

Если же вам нужно обновить только одну или несколько программ, не забывайте, что вы можете нарушить зависимости. Избежать такой неприятности можно с помощью ключей -R (обновить то, что зависит от данного пакеджа) и -r (обновить то, от чего зависит данный пакедж)

Если при обновлении пакеджей в FreeBSD 9.0 вылезает следующая ошибка:

pkg upgrade. fetch: ftp://ftp.freebsd.org/pub/FreeBSD/ports/i386/packages-9-stable/INDEX: File unavailable (e.g., file not found, no access)

то необходимо прописать в переменную окружения 'PACKAGESITE' правильный адрес:

# setenv PACKAGESITE ftp://ftp.freebsd.org/pub/FreeBSD/ports/i386/packages-9.0-release/Latest/

2. Использование [установка, удалени, обновление] портов в FreeBSD


Вводная информация о портах

Указать аргументы компилятора и тип процессора можно в файле /etc/make.conf:

LOCALIZED_LANG=ru

# added by use.perl 2011-12-23 00:38:05
PERL_VERSION=5.12.4

# тип процессора
CPUTYPE=core2

# аргументы компилятора, см 'man gcc'
CFLAGS?=-O3 -pipe

В принципе, можно этот файл и не трогать. Но раз мы решили заюзать порты, почему бы не воспользоваться всеми их плюсами? Если вы не уверены на счет того, какой типа процессора указать, загляните в /usr/share/examples/etc/make.conf. Там перечислены все поддерживаемые типы процессоров. У меня содержимое оказалось следующим:

# The CPUTYPE variable controls which processor should be targeted for
# generated code.  This controls processor-specific optimizations in
# certain code (currently only OpenSSL) as well as modifying the value
# of CFLAGS to contain the appropriate optimization directive to gcc.
# The automatic setting of CFLAGS may be overridden using the
# NO_CPU_CFLAGS variable below.
# Currently the following CPU types are recognized:
#   Intel x86 architecture:
#       (AMD CPUs)      opteron-sse3 opteron athlon64-sse3 athlon64 athlon-mp
#                       athlon-xp athlon-4 athlon-tbird athlon k8-sse3 k8
#                       geode k6-3 k6-2 k6 k5
#       (Intel CPUs)    core2 core nocona pentium4m pentium4 prescott
#                       pentium3m pentium3 pentium-m pentium2
#                       pentiumpro pentium-mmx pentium i486 i386
#       (Via CPUs)      c3 c3-2
#   AMD64 architecture: opteron, athlon64, nocona, prescott, core2
#   Intel ia64 architecture: itanium2, itanium
#   SPARC-V9 architecture:      v9 (generic 64-bit V9), ultrasparc (default
#                               if omitted), ultrasparc3

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

Теперь — об аргументах компилятора (CFLAGS). Чем выше уровень оптимизации, тем медленнее собираются программы, но и тем быстрее они будут работать. Например, флаг -O0 вообще отключает оптимизацию (используется gcc по умолчанию), а -O3 включает все доступные способы оптимизации. Еще есть флаг -Os, предназначенный для оптимизации размера программы. Используйте его, если у вас на диске ну очень мало места. Вообще, не стоит слишком беспокоиться на счет того, что программа будет тормозить, если скомпилировать ее с ключом -O2 вместо -O3. К тому же, есть шанс (небольшой, правда) что какие-то программы не соберутся с ключом -O3.


Обновление исходников всех портов

Дерево портов хранится в каталоге /usr/ports/. Если у вас этот каталог пустой, порты можно скачать с помощью программы portsnap.

Создание и загрузка исходников дерева портов [делается первый и единственный раз]:

# portsnap fetch extract

Обновление исходников дерева портов [делается переодически]:

# portsnap fetch update

Поиск портов

// сначала переходим в каталог с портами
$ cd /usr/ports

// ищем порт по названию
$ make search name=firefox

// ищем по ключевому слову
$ make search key=browser

// быстрый поиск
$ echo /usr/ports/*/*firefox*

Установка портов

Чтобы установить программу из портов, сначала нужно найти соответствующей ей каталог. Имена каталогов образуются следующим образом: /usr/ports/группа/программа/.

Установка порта:

// сначала переходим в каталог с портом
# cd /usr/ports/группа/программа/

// сборка и компиляция; установка; и очистка
# make install clean

или проще:

# whereis firefox

Некоторые порты имеют дополнительные настройки, которые вас попросят уточнить в процессе установки. Если вы не понимаете, что от вас хотят, соглашайтесь на настройки по умолчанию. Часто во время установки нужного вам порта также устанавливаются его зависимости. Некоторые зависимости интересуются, с какими настройками вы хотели бы их собрать. В результате приходится следить за всем процессом и время от времени отвечать на вопросы. Это не совсем удобно.

Настройка/конфигурация порта:

//показать текущие опции сборки порта
# make showconfig

//задание или изменение текущих настроек
# make config

//удалить все текущие настройки для порта
# make rmconfig

//показать настройки для текущего порта и всех зависимостей
# make showconfig-recursive

//задать настройки для текущего порта и всех зависимостей
# make config-recursive

//удалить настройки для текущего порта и всех зависимостей
# make rmconfig-recursive

Некоторые порты имеют дополнительные настройки, которые вас попросят уточнить в процессе установки. Если вы не понимаете, что от вас хотят, соглашайтесь на настройки по умолчанию. Часто во время установки нужного вам порта также устанавливаются его зависимости. Некоторые зависимости интересуются, с какими настройками вы хотели бы их собрать. В результате приходится следить за всем процессом и время от времени отвечать на вопросы. Это не совсем удобно.

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

Настройка/конфигурация порта По Умолчанию:

# make -DBATCH install clean

Самое интересное в портах то, что после компиляции все приложения собираются в пакеты, после чего происходит установка этих самых пакетов. Другими словами, всем хозяйством, установленным из портов, можно управлять теми же средствами, что мы использовались при работы с пакетами — pkg_info, pkg_delete и так далее!

// Комментарии: Собрать бинарный пакет из портов можно командой «make package». Для создания пакетов из уже установленных приложений используйте команду pkg_create. Например, команда «pkg_create -R -b xorg-fonts-7.5» создаст бинарные пакеты xorg-fonts и всех его зависимостей, а командной «pkg_create -vb ‘*’» можно сделать резервную копию всех установленных приложений. Подробности — в man-pages.


Обновление портов

Следующим по интересности, как и следовало ожидать, идет обновление. Есть две утилиты, предназначенные для обновления программ из портов — portupgrade и portmaster. Мне portmaster кажется во всех отношениях лучше. Во-первых, для работы ему не нужно ничего, кроме самого дерева портов. В отличии от него, portupgrade работает с собственной базой, которая частенько портится, в связи с чем ее приходится перестраивать. Во-вторых, portmaster, в отличии от portupgrade, не тянет за собой Ruby. Поскольку программ, использующих Ruby, довольно мало, не хочется тратить время на его сборку ради одного только portupgrade. Мы ведь помним, что каждый лишний порт — это лишнее время на его компиляцию при установке и обновлении?

В общем, я буду считать, что вы используете portmaster (/usr/ports/ports-mgmt/portmaster/). Однако если это не так, не переживайте — portupgrade имеет точно такой же интерфейс, что и portmaster. То есть, при одинаковых аргументах эти программы (как правило) делают одно и то же.

Первое, что нужно сделать перед обновлением приложений из портов — это внимательно прочитать файл /usr/ports/UPDATING и выполнить все касающиеся нас инструкции. Не сомневайтесь, вы обязательно забудете это сделать, так что лучше сразу подпишитесь на ленту со всеми изменениями в этом файле [http://updating.versia.com/atom].

Список портов для обновления:

$ portmaster -L

Обновление портов с помощью portmaster/portupgrade:

// ключ -d означает "удалять старые архивы с исходниками" если не указать,
// портмастер будет доставать вас множеством вопросов по этому поводу
# portmaster -d vim

// Комментарии: Кстати, с его же помощью можно производить установку.

Сложности начинаются, когда вспоминаешь про зависимости. Самое правильное решение заключается в обновлении всех портов, зависящих от данного (приложения, от которых зависит порт, обновляются всегда).

Обновление портов с зависимостями с помощью portmaster/portupgrade:

# portmaster -rd vim

Если же вам нужно обновить только один или несколько портов, не забывайте, что вы можете нарушить зависимости. Избежать такой неприятности можно с помощью ключей -R (обновить то, что зависит от данного порта) и -r (обновить то, от чего зависит данный порт)

Полное обновление установленных программ в системе с помощью portmaster/portupgrade:

# portmaster -da

3. Совместное использование портов и пакетов в FreeBSD

Обновление портов по возможности используя пакеджи с помощью portmaster/portupgrade:

# portmaster -rdP vim

Дополнение: Утилита pkg_cleanup предназначена для удаления ненужных пакетов.


Тэги: <BSD, FreeBSD, обновение, пакажо, pakaĵo, порты, программы, pkgng>

Комментариев нет:

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