FreeBSD. Порты и пакеты
21 декабря 2009
Заметки, Мир микросхем
В прошлый раз мы поставили FreeBSD 8.0, более-менее разобрали процесс установки и получили в итоге девственно чистую систему, аки родник, что течёт по склону Фудзиямы… Это, так называемая, базовая система. Но сама по себе она скучная и практически бесполезная. А нам надо, чтобы было весело и чтобы хуй войне. Поэтому необходимо научиться устанавливать любые программы в преподобной FreeBSD. Для этого есть 3 способа (аж три, да):
1. Установка с исходников (это трушно, но установка с портов ещё более трушно, поэтому останавливаться на этом пункте пока не будем)
2. Установка с портов (сам ем и нахваливаю, разберём в деталях)
3. Установка с пакетов (быстрый способ для ленивых, тоже разберём)
Также, в этой главе мы научимся обновлять коллекцию портов. Так что… не переключайтесь :)
Начнём, пожалуй, с системы портов. Что это такое?
«Порт» — это набор команд, задающих правила наложения заплаток на файлы исходного кода. Комбинируя заплатки и команды установки, FreeBSD может вести полный учет всего процесса установки программного обеспечения. Такой подход избавляет от трудностей установки программ и позволяет сконцентрироваться на их конфигурировании.
Проще говоря — это удобный, гибкий и, что немаловажно, централизованный инструмент для установки любых программ, какие вообще существуют под FreeBSD. Если вы по каким-то странным причинам не поставили коллекцию портов во время установки системы, сделаем это сейчас. Если не уверены, перейдите в папку /usr/ports. Если там есть что-то вроде такого:

коллекция портов у вас уже есть и её надо только обновить. Если там пусто, тогда ставим. Всего двумя командами:
# portsnap fetch - получаем коллекцию портов # portsnap extract - устанавливаем коллекцию портов
Знакомьтесь с программой portsnap. Вы с ней подружитесь, она хорошо работает с портами и вообще является с некоторых пор стандартным инструментом для их обслуживания. Она, в частности, занимается их обновлением.
Проводите обновление портов перед КАЖДОЙ установкой новых программ. Это реально важно. К примеру, с базовыми портами вы не сможете поставить mc (midnight commander, файловый менеджер). Я вот не смог. Проблема оказалась именно в порте mc, баг быстро пофиксили. Поэтому порты следует обновить, чтобы система была в курсе исправленных ошибок. Это делается так же легко:
# portsnap fetch extract - используется только в первый раз, когда апдейтов ещё не производилось # portsnap fetch update - используется каждый раз для обновления портов
Сравните это со старым методом обновления и поймёте насколько всё стало проще. Тут я немного лукавлю, есть ещё один метод обновления, с помощью csup (не путать с cvsup). Но я, честно говоря, не вижу в нём никаких преимуществ. Поэтому и говорить о нём не буду, чтобы не раздувать статью.
Такс… Допустим порты мы обновили. На это может уйти много времени. Зависит от интернет-канала и количества обновлений. Теперь мы можем установить нашу первую программу. Рекомендую сразу поставить mc, с ним будет удобнее работать в будущем.
Как нам среди десятков тысяч портов найти нужный? Легко :)
# cd /usr/ports # make search name=mc
В списке будет некоторое количество совпадений. Но mc там только одно :) И находится порт в папочке /usr/ports/misc/mc. Так что переходим туда и набираем магические слова:
# cd /usr/ports/misc/mc # make install clean
Это действительно волшебство, там как процесс скачивания, распаковки, поиска зависимостей, конфигурирования под вашу систему и установки приложений полностью автоматизирован. И кто сказал, что в Винде всё проще? :) Но гибкость портов заключается именно в конфигурировании сборки программ под ваши нужды. Поэтому по ходу установки, BSD будет спрашивать вас с какой функциональностью вы хотите увидеть программу. У программ обычно есть некоторые опции сборки. В случае с mc, это выглядит так. Сначала мы конфигурируем сам mc.

Потом mc тянет зависимости, компиляция которых также настраивается. Можно оставлять всё как есть по умолчанию, а можно и менять опции, если знаете что делаете. До конца сборки, вы увидите вот такие окна (а может и ещё какие-то):








Никаких ошибок быть не должно, компиляция заканчивается, вводим команду rehash, которая перечитывает систему и позволяет обойтись без перезагрузки. Ну и сам mc:
Вуаля! Всё ОК. Поздравляю, мы установили нашу первую, при чём немаловажную, программу. Так же ставятся с портов и все остальные.
Теперь уделим некоторое время нюансам. Куда же без них :)
Если вы что-то пропустили в конфигурировании, нажали ОК и только потом осознали свою ошибку — не беда. Процесс сборки можно прервать комбинацией Ctrl+C. После чего набираем команду make config, она запустит конфигуратор порта заново.
Если программа, установленная с порта, вам уже не нужна – перейдите в папку, где находится её порт и выполните команду make deinstall. Система найдёт и удалит программу.
Если у вас в процессе сборки выключился компьютер, или кончился интернет, или ещё что — не волнуйтесь. Просто начните процесс заново. FreeBSD достаточно умная система. чтобы найти место на котором она остановилась и продолжить, не начиная проходить весь путь с самого начала.
Это пока что всё, что нужно знать о системе портов. Теперь немного о пакетах.
Установка с пакетов имеет свои достоинства. Это простота и скорость. Отдельным пунктом замечу независимость от интернета. Актуально, если вы пользуетесь помегабайтным тарифом. А если у вас есть только один час, чтобы поднять шлюз, почтовый и веб серверы — пакеты то, что доктор прописал.
Пакеты есть на диске и есть в интернете. В интернете более свежие версии, а на диске более… локальные :) И далеко не все… Давайте поставим с диска текстовый редактор vim-lite:
# mount -t cd9660 /dev/acd0 /cdrom - монтируем диск # cd /cdrom/packages - идём в папку с пакетами
Узнаёте? Точно такая структура как и у портов. Неудивительно, так как пакеты — это скомпилированные порты со стандартными настройками. Смотрим где именно находится vim командой grep:

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

Если хотим удалить программу, установленную с пакета, для этого есть команда pkg_delete. Указываем в качестве аргумента полное название программы, вместе с номером её версии:
# pkg_delete vim-lite-7.2.239 (у меня такая версия)
Также можно устанавливать пакеты с интернета. Для этого добавляем ключ -r:
# pkg_add -r vim-lite
Вот и всё. Остальное — детали, которые можно обсудить в комментариях и таким образом дополнить статью. В следующий раз мы будем собирать с портов и настраивать MySQL, который очень важен для многих серьёзных программ. До встречи!





Dmitriy 30 декабря 2009 10:05
#./usr/ports portsnap fetch extract
portsnap: Directory does not exist or is not writable: /var/db/portsnap
Veles 30 декабря 2009 17:20
1. Все действия выполняются от рута.
2. Если вы всё делали по этой статье – проблем быть не должно.
3. Порты уже должны быть, чтобы обновлять их.
4. Можно подробнее описать действия которые вы производите?
Dmitriy 4 января 2010 15:55
Из под рута у меня не запускаются иксы
Я пользуюсь командой su
А что ещё можно описывать? Скопировал, вставил, нажал enter, получил ответ.
Dmitriy 4 января 2010 16:43
glib-2.22.3.tar.bz2 100% of 4891 kB 110 kBps 00m00s
===> Extracting for glib-2.22.3
=> MD5 Checksum OK for gnome2/glib-2.22.3.tar.bz2.
=> SHA256 Checksum OK for gnome2/glib-2.22.3.tar.bz2.
===> glib-2.22.3 depends on file: /usr/local/bin/perl5.8.6 – found
===> Patching for glib-2.22.3
===> glib-2.22.3 depends on file: /usr/local/bin/perl5.8.6 – found
===> glib-2.22.3 depends on package: libtool>=2.2 – not found
===> Found libtool-1.3.5_2
libtool-1.5.10_1
libtool-1.5.26, but you need to upgrade to libtool>=2.2.
*** Error code 1
Stop in /usr/ports/devel/glib20.
*** Error code 1
Stop in /usr/ports/devel/glib20.
*** Error code 1
Stop in /usr/ports/misc/mc.
*** Error code 1
Stop in /usr/ports/misc/mc.
Dmitriy 4 января 2010 16:43
Порты, кажись, обновились.
Dmitriy 4 января 2010 16:48
# cd /usr/ports/textproc/sdcv
# make install clean
===> Vulnerability check disabled, database not found
=> sdcv-0.4.2.tar.bz2 doesn’t seem to exist in /usr/ports/distfiles/.
=> Attempting to fetch from http://heanet.dl.sourceforge.net/project/sdcv/sdcv/0
.4.2/.
sdcv-0.4.2.tar.bz2 100% of 177 kB 96 kBps
===> Extracting for sdcv-0.4.2_1
=> MD5 Checksum OK for sdcv-0.4.2.tar.bz2.
=> SHA256 Checksum OK for sdcv-0.4.2.tar.bz2.
===> Patching for sdcv-0.4.2_1
===> sdcv-0.4.2_1 depends on package: libtool>=2.2 – not found
===> Found libtool-1.3.5_2
libtool-1.5.10_1
libtool-1.5.26, but you need to upgrade to libtool>=2.2.
*** Error code 1
Stop in /usr/ports/textproc/sdcv.
Veles 4 января 2010 17:24
Какие, нахрен, иксы на bsd-сервере?.. Ну да ладно…
Какая у вас версия FreeBSD? Этот мануал я делал одновременно со всем тем, что в нём описано.
А если по теме – порт требует библиотеку libtool 2.2. У вас она есть, но более старой версии. Найдите в портах именно 2.2 и установите её. Я также надеюсь, что перед каждой установкой вы обновляете порты и ваши действия последовательны. Удачи!
Dmitriy 4 января 2010 17:46
У меня версия 7.0
Dmitriy 4 января 2010 18:44
libtool 2.2 вроде установил
Попробовал снова установить mc
Установка шла довольно долго
Вот, что выдало под конец
checking for PCRE… configure: error: Package requirements (libpcre >= 7.2) were
not met:
Requested ‘libpcre >= 7.2′ but version of libpcre is 5.0
Consider adjusting the PKG_CONFIG_PATH environment variable if you
installed software in a non-standard prefix.
Alternatively, you may set the environment variables PCRE_CFLAGS
and PCRE_LIBS to avoid the need to call pkg-config.
See the pkg-config man page for more details.
===> Script “configure” failed unexpectedly.
Please run the gnomelogalyzer, available from
“http://www.freebsd.org/gnome/gnomelogalyzer.sh”, which will diagnose the
problem and suggest a solution. If – and only if – the gnomelogalyzer cannot
solve the problem, report the build failure to the FreeBSD GNOME team at
gnome@FreeBSD.org, and attach (a)
“/usr/ports/devel/glib20/work/glib-2.22.3/config.log”, (b) the output of the
failed make command, and (c) the gnomelogalyzer output. Also, it might be a
good idea to provide an overview of all packages installed on your system
(i.e. an `ls /var/db/pkg`). Put your attachment up on any website,
copy-and-paste into http://freebsd-gnome.pastebin.com, or use send-pr(1) with
the attachment. Try to avoid sending any attachments to the mailing list
(gnome@FreeBSD.org), because attachments sent to FreeBSD mailing lists are
usually discarded by the mailing list software.
*** Error code 1
Stop in /usr/ports/devel/glib20.
*** Error code 1
Stop in /usr/ports/devel/glib20.
*** Error code 1
Stop in /usr/ports/misc/mc.
*** Error code 1
Stop in /usr/ports/misc/mc.
Veles 4 января 2010 18:44
Очень странно… Ставьте уже или 7.2, если вы сторонник 7-й ветки, или всё-таки обзаведитесь 8.0. Если канал вам не позволяет скачать – купите у Лафоксов (lafox.net) за символическую сумму (хотя, смотря где вы живёте).
Dmitriy 4 января 2010 19:07
Я не сторонник 7-й ветки
Сколько она весит?
Вообщем, скачать не проблема, проблема, что с ней дальше делать?
Как её накатывать на 7-ю?
Veles 4 января 2010 19:51
Вы невнимательно читаете сообщения об ошибках. В них всё написано.
Requested ‘libpcre >= 7.2′ but version of libpcre is 5.0 одна из строк. То есть у вас стоит libpcre 5.0, а надо поставить 7.2 или новее.
ftp://ftp.freebsd.org/pub/FreeBSD/releases/i386/ISO-IMAGES/8.0/ – качайте CD или DVD. Вместо слова “накатить” используйте “обновить”. Не рекомендую вам этого делать. Обновление безопасно между 7.1 и 7.2, к примеру. Но обновляться от ветки к ветке чревато последствиями. Хотя однажды я опишу этот процесс. Лучше поставьте систему заново.
Dmitriy 5 января 2010 12:40
>То есть у вас стоит libpcre 5.0, а надо поставить 7.2 или новее.
Как это сделать?
# cd /usr/ports
# make search name=libpcre7.2
#
Молчит
Ставить систему заново? Я боюсь, а вдруг не справлюсь? А ведь, перед этим ещё нужно эту деинсталировать!?
У меня тут уже есть много разных настроек.
Лучше я пока “вылечу” эту?
wd 17 января 2010 5:06
Отличный обзор, коротко и ясно! Спасибо! :)
agressorr 23 февраля 2010 15:54
пасиб афтору!
Александр 7 марта 2010 21:46
огромное спасибо!! Если б не Вы так и неразобрался бы с портами!!