HPUNIX Сайт о ОС и не только!

Установка и обновление софта во FreeBSD

9 августа 2012 - unix
Установка и обновление софта во FreeBSD

В сети есть много инфы про внедрение портов и пакеджей FreeBSD. К огорчению, нередко эта информация оказывается устаревшей. Время от времени бывает, что одна статья противоречит другой.

Что касается хэндбука, то, на момент написания этих строк, в нем не было ни слова про утилиту pkg_upgrade, а информация об установке приложений из портов и их обновлении находилась на расстоянии 20 глав. В общем, мне такая ситуация не нравится, так что я решил осветить вопрос в собственном блоге.

1. Из чего избираем?

1-ое, что необходимо сделать относительно установки софта во FreeBSD — это запамятовать про «традиционный unix-метод», заключающийся в скачивании архива с исходниками, его распаковке и выполнении команд ./configure, make и make install. Может, несколько лет вспять в каком-нибудь Slackware к тому же было принято так делать, но даже в этом дистрибутиве уже появилась система портов.

Как я уже отмечал ранее, FreeBSD предоставляет два метода установки и обновления программ — из бинарных пакетов (packages) и начальных кодов (портов, ports). У каждого подхода есть свои достоинства. С некой осторожностью можно использовать их вместе.

Для начала разглядим два последних варианта — внедрение только пакеджей либо только портов.

2. Внедрение пакеджей

Бинарные пакеты представляют собой файлы определенного формата и дерево каталогов определенной структуры, упакованных в один архив. Все пакеты, кроме нескольких особенных случаев, можно скачать с ftp.freebsd.org.

Так как снутри пакеджей хранятся бинарные исполняемые файлы, то для каждой архитектуры микропроцессора и версии операционной системы необходимы свои пакеджи. Какие пакеты мы желаем использовать, определяется переменной окружения $PACKAGESITE. Вот вам наглядный пример для FreeBSD Восемь и архитектуры микропроцессора i386:

# это необходимо прописать в /root/.cshrc
setenv PACKAGESITE \
http://ftp.freebsd.org/pub/FreeBSD/ports/i386/packages-8-stable/Latest/

Установка Web Hosting FreeBSD 8.2 2.Step Compile Kernel - NovGames.RU

Как и в случае с версиями операционной системы, пакеджи бывают версий Release, Stable и Current. Stable — сбалансированный вариант в плане частоты обновления и стабильности, так что с Release и Current советую вообщем не связываться.

Если вы читали мою заметку про резвую установку FreeBSD, то сможете держать в голове, как для установки пакеджей использовалась утилита pkg_add. По дефлоту она отыскивает пакеджи в каталоге, обозначенном в переменной окружения $PKG_PATH. Поменять это поведение можно при помощи ключа -r:

pkg_add -r xorg

Программка скачает и установит Xorg, также все программки и библиотеки, от которых он зависит. Фактически, основная фишка системы пакеджей и портов заключается в автоматическом контроле зависимостей.

Не надо находить по всей сети исходники программ/библиотек, собирать их, а потом узнать, что для тебя необходимо было собрать другие версии. Одна команда — и система сделает все за тебя. Современные дистрибутивы Linux и *BSD употребляют только таковой подход.

Вот почему необходимо запамятовать «./configure; make; make install», как ужасный сон.

Поглядеть перечень всех установленных программ можно командой pkg_info. Обычно, перечень выходит достаточно большой, так что используйте grep и less.

Для удаления пакеджей предназначена команда pkg_delete. Использовать ее без ключей неловко, так как в данном случае необходимо указать полное заглавие пакета. К примеру, «pkg_delete xorg-fonts-7.5» будет работать, а «pkg_delete xorg-fonts» выведет ошибку, мол пакет не установлен. Чтоб поменять такое поведение, используйте ключи -ix:

pkg_delete -ix xorg

Эта команда будет пробовать удалить все пакеты, в заглавии которых содержится «xorg» и перед каждым удалением востребует нашего доказательства. Не правда ли, это удобнее, чем вручную вводить заглавие 10 пакетов, за ранее выясняя их версии при помощи pkg_info? Также pkg_delete смотрит, чтоб удаление пакета не привело к нарушению зависимостей.

Сейчас допустим, что нам охото почистить систему от ненадобных пакетов. Ненадобный пакет — это тот, который мы не используем и от которого не зависят другие пакеты. Последнее можно проверить последующим образом:

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_leafs»?) в /root/.cshrc сохранить команду в .sh-скрипт (почему не csh?) и потом использовать этот скрипт вкупе с grep.

Установка и обновление софта во FreeBSD

В конце концов, самое увлекательное — обновление пакетов. Идеальнее всего для этой цели подходит pkg_upgrade, входящий в пакет bsdadminscripts. Не удивляйтесь, что система не имеет средств для обновления программ «из коробки».

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

Перед обновлением нелишним будет выяснить, что фактически мы собираемся обновлять:

pkg_upgrade -an

Такого же эффекта можно достигнуть командой:

pkg_version -v /var/db/uma/FTPINDEX | grep needs

По дефлоту pkg_version употребляет индекс, расположенный в дереве портов, а совершенно не факт, что это дерево у нас имеется. Потому путь к файлу указывается очевидно. Сам файл FTPINDEX обновляется или pkg_upgrade’ом, как это показано выше, или утилитой uma.

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

pkg_upgrade -a

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

pkg_upgrade -rR xorg

И последнее — это поиск пакетов. Допустим, для вас нужен некий пакет, но вы не понимаете, как он именуется. Есть два пути. Во-1-х, можно пользоваться файлом FTPINDEX:

cat /var/db/uma/FTPINDEX | cut -d '|' -f Один | grep -i CodeBlocks

Во-2-х, можно пользоваться веб-поиском на freebsd.org.

3. Внедрение портов

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

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

Платить за все это приходится сначала временем установки программ. К примеру, даже на очень массивных компьютерах компиляция OpenOffice занимает около суток и просит сколько-то там гб оперативки и места на диске. Сколько точно — не помню.

Для сопоставления, установка OpenOffice при помощи пакетов занимает пару минут. Но это — последний случай. Маленькие утилиты обычно компилируются за минутки, на софт покрупнее может уходить час либо два.

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

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

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

Там перечислены все поддерживаемые типы микропроцессоров. У меня содержимое оказалось последующим:

# Currently the following CPU types are recognized:
#   Intel x86 architecture:
#       (AMD CPUs)      opteron athlon64 athlon-mp athlon-xp athlon-4
#                       athlon-tbird athlon k8 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
#   Alpha/AXP architecture: ev67 ev6 pca56 ev56 ev5 ev45 ev4
#   AMD64 architecture: opteron, athlon64, nocona, prescott, core2
#   Intel ia64 architecture: itanium2, itanium

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

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

Есть еще флаг -Os, созданный для оптимизации размера программки. Используйте его, если у вас на диске ну сильно мало места. Вообщем, не стоит очень волноваться на счет того, что программка будет тормозить, если скомпилировать ее с ключом -O2 заместо -O3.

К тому же, есть шанс (маленький, правда) что какие-то программки не соберутся с ключом -O3.

Еще желаю отметить, что ключи, которые вы зададите в CFLAGS, оказывают влияние лишь на порты. Это, а именно, значит, что не надо волноваться, что опыты с make.conf приведут к тому, что вы не можете обновить ядро системы из начальных кодов. Так, информация к сведению.

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

portsnap fetch extract

Примечание: В старенькых мануалах рекомендуется использовать утилиту cvsup, но это устаревший способ. Забудьте про cvsup так же, как и про «./configure; make; make install»!

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

portsnap fetch update

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

Есть несколько методов отыскать подходящую программку, не считая упомянутого поиска на freebsd.org. К примеру:

# поначалу перебегаем в каталог с портами
cd /usr/ports
# ищем порт по наименованию
make search name=firefox

How To Install Wine 1.5 On Ubuntu 12.10

# ищем по главному слову
Установка и обновление софта во FreeBSD
make search key=browser
# резвый поиск
echo /usr/ports/*/*firefox*

Перейдя в подходящий каталог, довольно сказать

make install clean

Система сама скачает и распакует исходники программки, также всех программ и библиотек, от которых она зависит, потом соберет и установит их, после этого удалит весь мусор. А сейчас представьте, что когда-то все это необходимо было делать руками!

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

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

Большая часть портов понимают команду:

make config-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 кажется во всем лучше.

Во-1-х, для работы ему не надо ничего, не считая самого дерева портов. В отличии от него, portupgrade работает с своей базой, которая часто портится, в связи с чем ее приходится перестраивать. Во-2-х, portmaster, в отличии от portupgrade, не тянет за собой Ruby.

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

Установка и обновление софта во FreeBSD

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

Итак, мы обновили порты при помощи portsnap и узнали, какие программки состарились, при помощи уже знакомого нам pkg_version. Кстати, эта утилита не является частью bsdadminscripts, а идет совместно с системой. Можно запускать portmaster?

Нет, не можно!

1-ое, что необходимо сделать перед обновлением приложений из портов — это пристально прочесть файл /usr/ports/UPDATING и выполнить все касающиеся нас аннотации. Не сомневайтесь, вы непременно забудете это сделать, так что лучше сходу подпишитесь на ленту со всеми переменами в этом файле. Если вы изредка заглядываете в свою RSS-читалку, воспользуйтесь обслуживанием rss2email.ru.

Обновить программку портмастером до боли просто (кстати, с его же помощью можно создавать установку):

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

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

Установка и обновление софта во FreeBSD
portmaster -rd vim

Еще можно обновить сходу известие устаревший софт:

portmaster -da

Неувязка в том, что компиляция исходников обычно занимает много времени. Есть два метода ускорить обновление. 1-ый — не удалять старенькые версии библиотек, тогда можно не обновлять зависимые приложения:

portmaster -wd vim

2-ой метод заключается в совместном использовании портов и пакеджей, но об этом чуток ниже. До того как перейти к данной теме, желаю направить ваше внимание на ключ -L, поддерживаемый portmaster’ом.

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

4. Совместное внедрение портов и пакетов

Пакеджи и порты можно использовать вместе. Если огромную часть времени вы используете пакеджи, то сможете временами устанавливать что-то из портов, так как в портах софт всегда свежее, чем в бинарных пакетах. Главное — обновить дерево портов перед установкой.

Вобщем, в данном случае с большой вероятностью могут произойти Bad Things™, в связи с чем новеньким лучше его избегать.

Если огромную часть времени вы пользуетесь портами, то сможете сберечь на времени установки и обновлении приложений. Для этого необходимо использовать portmaster с ключом -P:

# обновить vim, по способности используя пакеты
portmaster -rdP vim
Установка и обновление софта во FreeBSD

Если portmaster сумеет отыскать на $PACKAGESITE пакет той же версии, что и версия порта, приложение будет установлено из пакета, а не из портов. Еще portmaster имеет ключ -PP, значащий «устанавливать приложения только из пакетов, а если довольно свежайшего пакета нет, оборвать работу». Правда, полезности от этого ключа не много.

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

Может быть, это будет не сервер, а домашний компьютер, на котором вы будете компилировать пакеты для предстоящей установки на собственный ноутбук и рабочий компьютер. Но это при условии, что на всех 3-х машинах употребляется FreeBSD одной ветки и употребляются микропроцессоры одной архитектуры (i386 либо amd64).

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

5. И опять эта неувязка выбора…

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

Достоинства пакетов — простота использования и стремительная установка. За это приходится платить малой гибкостью и редчайшими обновлениями.

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

Используя связку порты+пакеты, можно мало восполнить недочеты каждого из способов. Но комбинированный подход обладает как преимуществами 2-ух способов, так и суммарными недочетами. Хорошим вариантом было бы завести сервер, созданный для сборки пакетов под наши нужды.

Но в данном случае придется выделить излишний сервер либо раскошелиться на VDS. Вобщем, если у вас есть машина с десятком виртуалок, считайте, что никаких заморочек у вас нет.

Совет стандартный. Используйте то, что больше подходит для вашей задачки. Себе я решил, что на ноутбуке лучше использовать пакеджи, а на сервере — порты.

Вообще-то, беря во внимание мощность современных компов, можно смело обходиться и одними пакетами.

Дополнение: Здесь товарищ visokos порекомендовал утилиту pkg_cleanup. Как нетрудно додуматься по наименованию, предназначена она для удаления ненадобных пакетов:

Утилита pkg_cleanup

Самое приятное в ней, что после удаления пакетов предлагается сделать повторный поиск. После него будет выведен перечень только тех пакетов, которые стали ненадобными в итоге предшествующей итерации. Очень комфортно!

Дополнение: В продолжение — Памятка по обновлению ядра и мира FreeBSD.

Похожие статьи

  • Практически беспристрастно на тему чем FreeBSD лучше Linux

    Если в вопросе Linux против Windows все достоинства и недочеты сравниваемых ОС более-менее ясны, то в вопросе «FreeBSD против Linux» все не так просто, как многим хотелось бы. Вот почему гайды...

  • Стремительная установка FreeBSD и настройка воркстейшн

    Эта заметка — попытка малость посодействовать тем, кто желает испытать FreeBSD. Из нее вы узнаете, как стремительно установить эту операционку, подключиться к сети и поднять графический интерфейс (X11 + Gnome)...

  • Памятка по обновлению ядра и мира FreeBSD

    31-го июля этого года завершилась поддержка FreeBSD 8.2. На моем ноутбуке Asus X51L как раз установлена FreeBSD, притом конкретно этой версии. Решил обновиться до FreeBSD 9.0 и запостить в бложик заме...

  • О юниксах, программировании и принятии решений

    До недавнешнего времени я очень заморачивался на темы вроде «кто платит каждый месяц за ссылки в SAPE, когда можно приобрести нескончаемые в GoGetLinks» либо «я не могу поставить эту программку, ведь она исполь...

  • Как обновить ядро Linux без перезагрузки системы

    Ksplice представляет собой расширение Linux, позволяющее создавать «горячее» обновление ядра, другими словами, без перезагрузки системы. Под катом представлена маленькая памятка по использованию Ksplice...

Рейтинг: +15 Голосов: 294 2490 просмотров
Комментарии (0)

Нет комментариев. Ваш будет первым!

Найти на сайте: параметры поиска

Windows 7

Среда Windows 7 на первых порах кажется весьма непривычной для многих.

Windows 8

Если резюмировать все выступления Microsoft на конференции Build 2013.

Windows XP

Если Windows не может корректно завершить работу, в большинстве случаев это

Windows Vista

Если к вашему компьютеру подключено сразу несколько мониторов, и вы регулярно...