FreeBSD. Порты и пакеты

В прошлый раз мы поставили FreeBSD 8.0, более-менее разобрали процесс установки и получили в итоге девственно чистую систему, аки родник, что течёт по склону Фудзиямы… Это, так называемая, базовая система. Но сама по себе она скучная и практически бесполезная. А нам надо, чтобы было весело и чтобы хуй войне. Поэтому необходимо научиться устанавливать любые программы в преподобной FreeBSD. Для этого есть 3 способа (аж три, да):

1. Установка с исходников (это трушно, но установка с портов ещё более трушно, поэтому останавливаться на этом пункте пока не будем)
2. Установка с портов (сам ем и нахваливаю, разберём в деталях)
3. Установка с пакетов (быстрый способ для ленивых, тоже разберём)

Также, в этой главе мы научимся обновлять коллекцию портов. Так что… не переключайтесь :)

Начнём, пожалуй, с системы портов. Что это такое?

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

Проще говоря — это удобный, гибкий и, что немаловажно, централизованный инструмент для установки любых программ, какие вообще существуют под FreeBSD. Если вы по каким-то странным причинам не поставили коллекцию портов во время установки системы, сделаем это сейчас. Если не уверены, перейдите в папку /usr/ports. Если там есть что-то вроде такого:
progs_013

коллекция портов у вас уже есть и её надо только обновить. Если там пусто, тогда ставим. Всего двумя командами:

# portsnap fetch - получаем коллекцию портов
# portsnap extract - устанавливаем коллекцию портов

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

Проводите обновление портов перед КАЖДОЙ установкой новых программ. Это реально важно. К примеру, с базовыми портами вы не сможете поставить mc (midnight commander, файловый менеджер). Я вот не смог. Проблема оказалась именно в порте mc, баг быстро пофиксили. Поэтому порты следует обновить, чтобы система была в курсе исправленных ошибок. Это делается так же легко:

# portsnap fetch extract - используется только в первый раз, когда апдейтов ещё не производилось
# portsnap fetch update - используется каждый раз для обновления портов

progs_001
progs_002

Сравните это со старым методом обновления и поймёте насколько всё стало проще. Тут я немного лукавлю, есть ещё один метод обновления, с помощью 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.
progs_004

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

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

# mc
progs_012

Вуаля! Всё ОК. Поздравляю, мы установили нашу первую, при чём немаловажную, программу. Так же ставятся с портов и все остальные.

Теперь уделим некоторое время нюансам. Куда же без них :)

Если вы что-то пропустили в конфигурировании, нажали ОК и только потом осознали свою ошибку — не беда. Процесс сборки можно прервать комбинацией Ctrl+C. После чего набираем команду make config, она запустит конфигуратор порта заново.

Если программа, установленная с порта, вам уже не нужна – перейдите в папку, где находится её порт и выполните команду make deinstall. Система найдёт и удалит программу.

Если у вас в процессе сборки выключился компьютер, или кончился интернет, или ещё что — не волнуйтесь. Просто начните процесс заново. FreeBSD достаточно умная система. чтобы найти место на котором она остановилась и продолжить, не начиная проходить весь путь с самого начала.

Это пока что всё, что нужно знать о системе портов. Теперь немного о пакетах.

Установка с пакетов имеет свои достоинства. Это простота и скорость. Отдельным пунктом замечу независимость от интернета. Актуально, если вы пользуетесь помегабайтным тарифом. А если у вас есть только один час, чтобы поднять шлюз, почтовый и веб серверы — пакеты то, что доктор прописал.

Пакеты есть на диске и есть в интернете. В интернете более свежие версии, а на диске более… локальные :) И далеко не все… Давайте поставим с диска текстовый редактор vim-lite:

# mount -t cd9660 /dev/acd0 /cdrom - монтируем диск
# cd /cdrom/packages - идём в папку с пакетами

progs_014

Узнаёте? Точно такая структура как и у портов. Неудивительно, так как пакеты — это скомпилированные порты со стандартными настройками. Смотрим где именно находится vim командой grep:
progs_015

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

Если хотим удалить программу, установленную с пакета, для этого есть команда pkg_delete. Указываем в качестве аргумента полное название программы, вместе с номером её версии:

# pkg_delete vim-lite-7.2.239 (у меня такая версия)

Также можно устанавливать пакеты с интернета. Для этого добавляем ключ -r:

# pkg_add -r vim-lite

Вот и всё. Остальное — детали, которые можно обсудить в комментариях и таким образом дополнить статью. В следующий раз мы будем собирать с портов и настраивать MySQL, который очень важен для многих серьёзных программ. До встречи!

  1. 10:05

    #./usr/ports portsnap fetch extract
    portsnap: Directory does not exist or is not writable: /var/db/portsnap

  2. 17:20

    1. Все действия выполняются от рута.
    2. Если вы всё делали по этой статье – проблем быть не должно.
    3. Порты уже должны быть, чтобы обновлять их.
    4. Можно подробнее описать действия которые вы производите?

  3. 15:55

    Из под рута у меня не запускаются иксы
    Я пользуюсь командой su
    А что ещё можно описывать? Скопировал, вставил, нажал enter, получил ответ.

  4. 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.

  5. 16:43

    Порты, кажись, обновились.

  6. 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.

  7. 17:24

    Какие, нахрен, иксы на bsd-сервере?.. Ну да ладно…

    Какая у вас версия FreeBSD? Этот мануал я делал одновременно со всем тем, что в нём описано.

    А если по теме – порт требует библиотеку libtool 2.2. У вас она есть, но более старой версии. Найдите в портах именно 2.2 и установите её. Я также надеюсь, что перед каждой установкой вы обновляете порты и ваши действия последовательны. Удачи!

  8. 17:46

    У меня версия 7.0

  9. 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.

  10. 18:44

    Очень странно… Ставьте уже или 7.2, если вы сторонник 7-й ветки, или всё-таки обзаведитесь 8.0. Если канал вам не позволяет скачать – купите у Лафоксов (lafox.net) за символическую сумму (хотя, смотря где вы живёте).

  11. 19:07

    Я не сторонник 7-й ветки
    Сколько она весит?
    Вообщем, скачать не проблема, проблема, что с ней дальше делать?
    Как её накатывать на 7-ю?

  12. 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, к примеру. Но обновляться от ветки к ветке чревато последствиями. Хотя однажды я опишу этот процесс. Лучше поставьте систему заново.

  13. 12:40

    >То есть у вас стоит libpcre 5.0, а надо поставить 7.2 или новее.
    Как это сделать?
    # cd /usr/ports
    # make search name=libpcre7.2
    #
    Молчит
    Ставить систему заново? Я боюсь, а вдруг не справлюсь? А ведь, перед этим ещё нужно эту деинсталировать!?
    У меня тут уже есть много разных настроек.
    Лучше я пока “вылечу” эту?

  14. 5:06

    Отличный обзор, коротко и ясно! Спасибо! :)

  15. 15:54

    пасиб афтору!

  16. 21:46

    огромное спасибо!! Если б не Вы так и неразобрался бы с портами!!

↓ Можете опубликовать своё мнение