4.4.3. Управление пакетами
pkg_info(1) является утилитой для вывода списка и описаний
различных установленных пакетов.
# pkg_info cvsup-16.1 A general network file distribution system optimized for CV docbook-1.2 Meta-port for the different versions of the DocBook DTD ...
pkg_version(1) является утилитой для вывода отчёта о версиях
всех установленных пакетов. Она сравнивает версию имеющегося пакета
с текущей версией, находящейся в дереве портов.
# pkg_version cvsup = docbook = ...
Символы во второй колонке указывают сравнительную разницу в
возрасте установленной версии и версии, находящейся в локальном дереве
портов.
19.2.2. Работа с веткой stable во FreeBSD
19.2.2.1. Что такое FreeBSD-STABLE?
FreeBSD-STABLE является нашей веткой разработки, из которой делаются
основные релизы. Изменения в этой ветке происходят с разной
скоростью, и при этом предполагается, что сначала они были выполнены
для FreeBSD-CURRENT в целях тестирования. Однако эта ветка
остаётся веткой для разработки, а это значит,
что в любой момент времени исходные тексты FreeBSD-STABLE могут
оказаться неприменимы для некоторой задачи. Это просто ещё одна
ветка при разработке, а не ресурс для конечных пользователей.
19.2.2.2. Кому нужна FreeBSD-STABLE?
Если вы заинтересованы в отслеживании процесса разработки FreeBSD
или хотите принять в нём участие, особенно в той мере, насколько это
касаеся выпуска следующего релиза FreeBSD с «точкой», то
вам необходимо отслеживать FreeBSD-STABLE.
Хотя правда то, что исправления, касающиеся безопасности, также
делаются и в ветке FreeBSD-STABLE, вам не нужно
для этого отслеживать FreeBSD-STABLE. Каждый бюллетень по безопасности
FreeBSD описывает, как решить проблему для тех релизов, которых он
касается
, а отслеживание ветки разработки в полном объёме только ради
исправлений пробелов в безопасности приводит к появлению большого
количества дополнительных ненужных изменений.
Хотя мы прилагаем все усилия, чтобы ветка FreeBSD-STABLE всегда
компилировалась и работала, этого нельзя гарантировать. Кроме того,
несмотря на то, что перед включением в FreeBSD-STABLE, код
разрабатывается в FreeBSD-CURRENT, гораздо большее количество людей
работают с FreeBSD-STABLE, чем с FreeBSD-CURRENT. Поэтому неудивительно,
что в FreeBSD-STABLE иногда
обнаруживаются ошибки и всплывают непредвиденные ситуации, которые не
проявляли себя в FreeBSD-CURRENT.
По этим причинам мы не рекомендуем слепо
отслеживать FreeBSD-STABLE, и, что особенно важно, вы не должны
обновлять какие-либо сервера, находящиеся в активной эксплуатации, до
FreeBSD-STABLE без предварительного тщательного тестирования кода в
вашей среде разработки. Если у вас нет возможности сделать это, то мы рекомендуем
работать с самой последним релизом FreeBSD и использовать механизм
обновления бинарных файлов для перехода от релиза к релизу
Если у вас нет возможности сделать это, то мы рекомендуем
работать с самой последним релизом FreeBSD и использовать механизм
обновления бинарных файлов для перехода от релиза к релизу.
19.2.1. Как следовать текущим разработкам во FreeBSD
Пока вы читаете этот текст, помните, что FreeBSD-CURRENT является
«передовым краем» работ над FreeBSD. Предполагается, что
пользователи FreeBSD-CURRENT технически более грамотны и могут решать
проблемы с системой самостоятельно. Если вы являетесь во FreeBSD
новичком, вам лучше сначала дважды подумать, прежде чем
её устанавливать.
19.2.1.1. Что такое FreeBSD-CURRENT?
FreeBSD-CURRENT является последними рабочими версиями исходных
текстов FreeBSD. Сюда включаются неоконченные работы, экспериментальные
изменения и промежуточные механизмы, которые могут присутствовать, а
могут и отсутствовать в следующем официальном релизе программного
обеспечения. Хотя многие из разработчиков FreeBSD выполняют компиляцию
из исходных текстов FreeBSD-CURRENT ежедневно, случаются периоды, когда
исходные тексты заведомо не могут быть откомпилированы. Такие
проблемы обычно решаются так быстро, как это возможно, но всё-таки
момент, когда вы сгрузили исходные тексты FreeBSD-CURRENT, может
повлиять на то, содержат они мину замедленного действия или очень
нужную функциональность!
19.2.1.2. Кому нужна FreeBSD-CURRENT?
FreeBSD-CURRENT предназначается трём основным заинтересованным
группам:
-
Члены команды разработчиков FreeBSD, активно работающие над
некоторой частью дерева исходных текстов и для кого работа в
«current» является абсолютной
необходимостью. -
Члены команды разработчиков FreeBSD, которые являются
активными тестерами. Они тратят свое время на
исправление проблем для того, чтобы FreeBSD-CURRENT оставалась,
насколько это возможно, нормально работающей системой. Есть
также люди, которые вносят важные предложения по изменениям и
общему направлению развития FreeBSD и присылают свои патчи,
реализующие эти изменения. -
Те, кто просто хотят быть в курсе всех изменений или
используют текущие исходные тексты для ознакомительных целей (к
примеру, для чтения, но не для
использования). Такие люди также иногда высказывают замечания
или предоставляют код.
19.2.1.3. Чем FreeBSD-CURRENT не является?
-
Быстрым способом получить предварительную версию, в
случае, если вы услышали, что здесь появилась некая крутая
возможность, и вы хотите быть первым в вашем микрорайоне, у
кого она есть. Здесь быть первым из тех, кто имеет это
программное обеспечение означает также быть первым из тех, кто
столкнулся с ошибками в нём. -
Быстрым способом получения исправлений. Любая версия
FreeBSD-CURRENT является в равной мере как источником исправлений
существующих ошибок, так и источником появления новых. -
«Официально поддерживаемой» каким бы то ни было
способом. Мы прилагаем все усилия, чтобы помочь тем, кто
изначально принадлежит одной из трех «признанных»
групп пользователей FreeBSD-CURRENT, но у нас просто нет
времени на техническую поддержку. Это не потому, что
мы гадкие и злые люди, которые ни за что не будут помогать другим
(если бы это было так, мы бы не создали FreeBSD). Мы просто не в
силах отвечать на сотни сообщений в день и
работать над FreeBSD! Если бы стоял выбор между тем, отвечать ли
на множество вопросов об экспериментально коде или продолжать
работу над совершенствованием FreeBSD, большинство разработчиков
проголосовало бы за последнее.
Минусы.
С одной стороны, если оставить один репозиторий pkg.FreeBSD.org, то даже Midnight Commander не сразу смог скачаться по непонятной причине. С другой стороны, множество репозиториев-зеркал и вот уже частенько приходится скачивать увесистые списки перед каждым чихом.
Ещё одним минусом можно посчитать более сложное обновление важных компонент в системе, типа языков программирования. Позвольте провести параллель — в Ubuntu даже сердце системы ядро линукса и то проще меняется, чем во Фри версия языка программирования. Чтобы не быть голословным, вот реальный пример. Обновление всего установленного зацепило perl. Судя по документации, его следует отдельно обновить так:
Как сказано выше, пока нет криптографической подписи у пакетов и их, кстати, никогда не было! Если вспомнить раннюю систему, работающую с бинарными пакеджами (утилиты pkg_*), а система портов умеет проверять только контрольную сумму.
Мне ещё рано судить о новинке, которая с одной стороны радует одним своим появлением, но с другой стороны, привыкши к мощи и простоте apt, увижу ли от pkg что-то поразительное в его работе?
Дополнительные материалы:Source Based FreeBSD против Package Based Linux.Почему я не люблю Source Based?FAQ FreeBSD.
Дата последней правки: 2013-11-29 08:24:03
4.5.5. Обновление портов
Поддержание ваших портов в актуальном состоянии может оказаться нудным занятием. К
примеру, чтобы обновить порт, вам нужно перейти в каталог с портами, построить порт,
удалить старый порт, установить новый, а затем вычистить его после построения.
Представьте, сколько действий (пять) нужно сделать! Скучно, да? Это было большой
проблемой для системных администраторов, но теперь есть утилиты, выполняющие эти действия
за нас. Например, утилита sysutils/portupgrade сделает всё за вас сама! Просто установите её,
как обычный порт, при помощи команды make install clean.
Теперь создайте базу данных командой pkgdb -F. Она выяснит
перечень установленных портов и создаст файл базы данных в каталоге /var/db/pkg. Теперь при вызове команды portupgrade
-a, она будет использовать эту базу данных и файл портов INDEX. Наконец, portupgrade загрузит,
построит, сделает резервную копию, установит и очистит порты, которые были обновлены.
portupgrade имеет массу параметров для использования в разных
ситуациях, из которых наибольшего внимания заслуживают описываемые далее.
Если вы хотите обновить только определённое приложение, но не полностью базу данных,
используйте portupgrade pkgname, с флагом , если
portupgrade должен отработать все пакеты, которые зависят от
указанного, и использовать флаг для отработки всех
пакетов, которые требуют указанные пакеты.
Для использования при установке пакетов, а не портов, укажите флаг . С этим параметром portupgrade будет
искать пакеты в локальных каталогах, указанных в переменной окружения PKG_PATH, или, если не найдет их, загрузит с удаленного сайта. Если пакеты
не могут быть найдены локально или загружены удаленно, portupgrade использует порты. Чтобы запретить использование портов,
укажите .
Для простой загрузки дистрибутивных файлов без построения или установки чего бы то ни
было, задайте флаг . Дополнительную информацию можно
получить на странице справки по утилите
portupgrade(1).
Существуют и другие утилиты, которые делают подобные вещи, посмотрите в каталоге
ports/sysutils и выберите то, что вам подходит.
4.5.3 Удаление установленных портов
Теперь, когда вы знаете, как устанавливать порты, вы наверное, уже задумывались о том,
как же их удалять, просто даже на тот случай, если вы установили один из них, а позже
решили, что установили не тот порт
Мы удалим порт из нашего предыдущего примера (а это
была программа lsof, если вы обратили внимание). Как и при
установке портов, первым делом вы должны перейти в каталог с портом, /usr/ports/sysutils/lsof
После смены каталога вы готовы к удалению
xchat. Это делается командой make
deinstall:
# cd /usr/ports/sysutils/lsof # make deinstall ===> Deinstalling for lsof-4.57
Это было достаточно легко. Вы удалили lsof из вашей системы.
Если вам захочется переустановить эту программу, то это можно будет сделать, выдав
команду make reinstall из каталога /usr/ports/sysutils/lsof.
4.5.3. Удаление установленных портов
Теперь, когда вы знаете, как устанавливать порты, вы наверное, уже задумывались о том,
как же их удалять — просто даже на тот случай, если вы установили один из них, а позже
решили, что установили не тот порт
Мы удалим порт из нашего предыдущего примера (а это
была программа lsof, если вы обратили внимание). Как и при
установке портов, первым делом вы должны перейти в каталог с портом, /usr/ports/sysutils/lsof
После смены каталога вы готовы к удалению
lsof. Это делается командой make
deinstall:
# cd /usr/ports/sysutils/lsof # make deinstall ===> Deinstalling for lsof-4.57
Это было достаточно легко. Вы удалили lsof из вашей системы.
Если вам захочется переустановить эту программу, то это можно будет сделать, выдав
команду make reinstall из каталога /usr/ports/sysutils/lsof.
4.5.1. Получение Коллекции Портов
Перед тем, как вы сможете устанавливать порты, вы сначала должны
установить коллекцию портов—она представляет собой в основном
набор make-файлов, патчей, файлов описаний, и размещается обычно в
/usr/ports.
При установке вашей системы FreeBSD утилита
Sysinstall запрашивает, требуется ли вам
установка коллекции портов. Если вы ответили отрицательно, то можете
следовать этим указаниям для установки коллекции портов.
Метод с использованием Sysinstall
В этом методе повторно используется
sysinstall для ручной установки коллекции
портов.
-
Работая как пользователь root, запустите
/stand/sysinstall так, как это показано
ниже:# /stand/sysinstall
-
Опуститесь вниз и выберите Configure,
нажмите Enter -
Опуститесь вниз и выберите Distributions,
затем нажмите Enter -
Опуститесь вниз к ports, нажмите пробельную
клавишу -
Поднимитесь вверх к Exit, нажмите
Enter -
Выберите желаемый носитель для установки, например, CDROM,
FTP и так далее. -
Пройдите по меню до выхода (Exit) из
sysinstall.
Альтернативный метод получения и постоянной актуализации
вашей коллекции портов заключается в использовании
CVSup. Посмотрите на файл
CVSup из портов,
/usr/share/examples/cvsup/ports-supfile.
Прочтите раздел Использование CVSup
() для получения более полной информации об
использовании CVSup и указанного
файла.
История.
Напомню, что создание ПО из портов — это создание программы на этапе компиляции из исходных файлов с исправлениями для FreeBSD с помощью строго регламентированной процедуры. То есть философия — Source Based дистрибутив.
Существует каталог /usr/ports/, который хранит в разветвлённой системе каталогов файлы сценариев и исправлений, что, собственно, и называется портом. К примеру, порт файлового менеджера Midnight Commander находится по адресу /usr/ports/misc/mc/
Если вы не знаете, где хранится та или иная программа, то стоит вам перейти в каталог /usr/ports/ и скомандовать как вам укажут где хранится данный порт внутри /usr/ports/. Перейдя в нужный каталог (порт) и, командуя , мы не явно запускаем команду make с целью install. Но до цели install автоматически вызываются следующие цели:
- fetch — загружается тарбол программы с URL из переменной MASTER_SITES, указанной в файле Makefile.
- checksum — проверка контрольных сумм.
- extract — распаковка тарбола.
- patch — применение исправлений из подкаталога files/ для ФриБСДизации программы.
- configure — запуск сценария конфигурирования.
- build — создание бинарных исполняемых файлов с помощью компиляции.
Что нужно знать?
- Цели (этапы) являются независимыми и вы можете сами вызывать любую цель. К примеру, make fetch.
- Система портов обеспечивает сборку программы, учитывая зависимости.
- После установки порта запись о нём вносится в базу данных /var/db/pkg, то есть порт ничем не отличается от бинарного пакета. Другими словами, можно поставить программу, компилируя, а удалить командой pkg_delete словно бинарный пакет. А те бинарные пакеты, установленные во время установки системы с CD, в будущем, можно заменить новыми версиями, используя порты. Этот момент, мало кто понимает, когда речь заходит о бинарных пакетах и об исходниках в /usr/ports/
A.6.4. Первый запуск Portsnap
При первом запуске утилите portsnap(8) потребуется
загрузить упакованный снэпшот полного дерева портов в каталог /var/db/portsnap/ (/usr/local/portsnap/, если
Portsnap был установлен из Коллекции портов). На начало 2006
года размер снэпшота составляет около 41═МБ.
# portsnap fetch
После загрузки снэпшота из него может быть развернуто основное дерево портов. Это
необходимо, даже есть каталог /usr/ports/заполнен каким-либо
другим способом, например при помощи CVSup, поскольку
позволяет установить точку отсчета, от которой portsnap будет
определять необходимый объем изменений.
# portsnap extract
Установка портов во FreeBSD
Давайте рассмотрим такую ситуацию, Вы только что поставили свежую сборку FreeBSD 8.2 Загрузились и видите черный экран который предлагает вам ввести логин\пароль и далее пускает вас в режим консоли во все тот же черный экран. Первое, что меня убило наповал, во FreeBSD по дефолту нет bash или dash (так привычной нам) оболочки.
Справка:
csh — C shell (csh) — командная оболочка UNIX со встроенным скриптовым языком, разработанная Биллом Джоем, активным разработчиком BSD UNIX и создателем редактора vi, в 1979 году.
csh такой же мутный как и редактор vi, по этому, эта POSIX-совместимая штуковина вообще нихрена не юзабильна. Так вот, Вы хотите поставить для начала родной bash. Как это сделать? Ставить нужно из портов…которых вдруг нет. Это легко проверить, порты располагаются в папке /usr/ports/ если их там нет, значит нужно поставить.
Внимание!
Все действия по установке портов нужно проводить от имени root’a. Получить root’a можно так:
login root
Для получения портов существует несколько разных, одинаково полезных вариантов:
- Через утилиту sysinstall
- Через CVSup
- Через систему доставки портов Portsnap
Тестирование pkg в FreeBSD 9.2.
Свежеустановленная система FreeBSD обладает устаревшими портами, которые следует обновить: , так как нам нужна версия pkg не моложе 1.1.4_8.
Пока нет WITH_PKGNG=yes в /etc/make.conf командуем
Добавляем и вызываем
Нам нужно очистить файл системный конфигурационный файл /usr/local/etc/pkg.conf.
Создать директорию с репозиториями и сформировать файл конфигурации /usr/local/etc/pkg/repos/FreeBSD.conf с видом:
FreeBSD1: { url: "http://pkg.FreeBSD.org/${ABI}/latest", mirror_type: "srv", enabled: "yes" } FreeBSD2: { url: "http://pkg.us-east.FreeBSD.org/${ABI}/latest", mirror_type: "srv", enabled: "yes" } FreeBSD3: { url: "http://pkg.us-west.FreeBSD.org/${ABI}/latest", mirror_type: "srv", enabled: "yes" }
Pkg поддерживает типичные функции таких систем управления пакетами, как APT и YUM, включая управление установленными пакетами, поиск пакетов pkg search, обновление пакетов из внешних репозиториев pkg upgrade, учёт зависимостей, средства для работы с метаданными. Для оценки наличия уязвимостей в установленных пакетах подготовлена команда pkg audit. Присутствует режим удаления пакетов, которые были установлены как зависимости и в которых больше нет необходимости — pkg autoremove.
В качестве формата пакета используется обычный TAR-архив, сжатый при помощи xz, в который помещены файлы, связанные с распространяемым приложением, а также набор управляющих скриптов и метаданных. Метаданные оформлены в виде текстового файла «+MANIFEST» в формате YAML и содержат всю информацию о пакете и определение особенностей его обработки.
В системе информация об установленных пакетах и пакетах, присутствующих в репозиториях, хранится в базе данных SQLite. Информация о начинке репозиториев также экспортируется в формате SQLite.
Обновление портов
Обновить дерево портов FreeBSD можно штатной утилитой – Portsnap, она имеет несколько служебных команд для выполнения различных действий:
- Команда fetch – Скачивает снимок ( snapshot ), основного дерева портов с указанного в конфигурации сервера. Используется только для интерактивной работы, не через cron
- Команда cron – Используется для запуска из планировщика заданий cron.
- Команда extract – Разворачивает дерево портов, данная команда полностью удаляет существующее дерево портов, включая все внесенные в него изменения, как правило выполняется в первый раз и в случае, если нужно получить, чистое дерево портов или при использовании с опцией path( cм. ниже )
- Команда update – Служит для, непосредственно, обновления, основного дерева портов.
- path – Это дополнительная опция, используется с командой extract, для обновления конкретного порта, или нескольких портов.
Если это первый запуск portnap, делаем:
# portsnap fetch Looking up portsnap.FreeBSD.org mirrors... 6 mirrors found. Fetching snapshot tag from ec2-eu-west-1.portsnap.freebsd.org... done. Fetching snapshot metadata... done. Updating from Tue Apr 9 23:00:28 EEST 2013 to Wed Apr 24 19:34:54 EEST 2013. Fetching 3 metadata patches.. done. Applying metadata patches... done. Fetching 3 metadata files... done. Fetching 1749 patches.....10....20....30....40....50....60....70....80....90....100....110....120....130....140....150....160....170....180....190....200....210....220....230....240....250....260....270....280....290....300....310....320....330....340....350....360....370....380....390....400....410....420....430....440....450....460....470....480....490....500....510....520....530....540....550....560....570....580....590....600....610....620....630....640....650....660....670....680....690....700....710....720....730....740....750....760....770....780....790....800....810....820....830....840....850....860....870....880....890....900....910....920....930....940....950....960....970....980....990....1000....1010....1020....1030....1040....1050....1060....1070....1080....1090....1100....1110....1120....1130....1140....1150....1160....1170....1180....1190....1200....1210....1220....1230....1240....1250....1260....1270....1280....1290....1300....1310....1320....1330....1340....1350....1360....1370....1380....1390....1400....1410....1420....1430....1440....1450....1460....1470....1480....1490....1500....1510....1520....1530....1540....1550....1560....1570....1580....1590....1600....1610....1620....1630....1640....1650....1660....1670....1680....1690....1700....1710....1720....1730....1740.... done. Applying patches... done. Fetching 28 new ports or files... done.
Теперь можно распаковать дерево:
# portsnap extract
Данная команда разворачивает все дерево целиком, поэтому время выполнения не зависит от того, как давно вы обновлялись.
Теперь обновляем:
# portsnap update
Вот и все, имеем свежее дерево портов.