Теперь, после базовой системы, вторая категория: те программы, которые являются пакетами дополнений. В мире BSD это обычно называется «системой портов». Это имя выбрано не случайно.Традиционно, чтобы запустить программу в системе, первое, что вы должны были сделать, — это скомпилировать её. И часто перед компиляцией приходилось её допиливать. Ваша система могла требовать другие заголовочные файлы. Иногда отличались объявленные константы. Некоторые части иной раз переписывались с нуля из-за их несоответствия вашей системе.Другими словами, вам надо было «портировать» программу для своей ОС и/или для вашей конкретной системы. Основная цель системы портов — это сделать всю работу по портированию за вас. То, что она также автоматизирует сборку и инсталляцию и обеспечивает такими сервисами, как 'uninstall', в её имени, правда, не отражено.Но как это бывает со многими вещами, со временем система портов переросла своё имя и превратилась в того зверя, которого мы видим сегодня. Коллекция портов FreeBSD содержит более 10 000 пакетов. Самая очевидная особенность портов в том, что программы собираются из исходников, а не просто инсталлируются заранее собранные бинарники. Это ещё одно явное отличие, которое сбивает с толку людей, оценивающих BSD с точки зрения Linux. Но, то, что они собираются из исходников — это не первичная цель, сторонний эффект. Бинарные пакеты также доступны — фактически они собираются из дерева портов!Действительно, большинство пользователей Linux устанавливают бинарные пакеты, а пользователи BSD — собирают из исходников. Отчасти, причина этому — инструментарий. Система портов спроектирована вокруг концепции сборки из исходников, с отведенной на второй план возможностью собирать и устанавливать бинарные пакеты. В то время, как пакетная система Linux, например RPM или dpkg, в свою очередь, спроектирована вокруг концепции сборки и установки бинарников, сборка из исходников — в уме. Исторически сложилось, что бинарные пакеты не были доминантными в Unix-системах, как я уже говорил выше. Поэтому, пакеты сами по себе, — это более поздняя вещь. Традиционно, с деинсталляцией надо было разбираться вручную.Gentoo — это набирающий известность дистрибутив Linux. Одно из его преимуществ заключается в системе портежей, которая часто сравнивается с портами BSD. Пожалуй, самое заметное сходство заключается в сборке из исходников. Это исключает множество проблем бинарных пакетов. Сам я её никогда не использовал, но впечатления от информации о ней и знакомых, которые использовали её, позволяют говорить, что система взяла хорошие идеи отовсюду и соединила их вместе. Будет интересно понаблюдать за её развитием в ближайшие годы. Тем не менее, Gentoo всё же Linux, а не BSD, но претендует на то, чтобы быть ближе всех к стилю BSD из ведущих дистрибутивов Linux.Теперь, что касается преимуществ бинарных пакетов: это время (очень много времени) и обычно меньше требуемого места для установки пакетов, чем в случае с исходниками. В сборке из исходников есть свои преимущества, например, избежание чехарды с версиями библиотек (то, что меня расстраивает в бинарных пакетах). В Linux или BSD вы можете устанавливать пакеты, а можете собирать их из исходников. Но пользователи, кажется, настроены по-разному, потому что системы настроены по-разному, потому что пользователи настроены по-разному… вот такое соответствие.Я полагаю, здесь важно понять, что разница между портами и RPM состоит не только в том, что порты компилируются, а пакеты просто инсталлируются. Порты созданы для того, чтобы покрыть весь диапазон битов и составных частей процесса инсталляции: кодирование, трекинг и зависимости, пакеты, инсталляция и деинсталляция, локальные изменения, необходимые для инсталляции на вашей системе, конфигурационные «фишки» и прочее. RPM — это просто бинарный пакет. Если вы хотите автоматически подцепить все зависимости, вам потребуется инструмент более высокого уровня, например urpmi или apt-get. А так как это бинарник, вам всё равно придётся иметь дело с конфликтами версий библиотек, или пропущенными опциями компилятора, или любыми другими ограничениями, с которыми вы столкнётесь, НЕ собирая его на своей системе.Далее, порты, как и остальная часть в системах BSD, централизованы. «Дерево портов» — это огромный структурированный каталог, с кучей папок по категориям, содержащих Makefile с объявленными переменными, checksum, packing list, и другие подобные вещи. Каждая из этих папок представляет собой отдельную программу, которая описывается этими файлами. Куча чёрной магии творится за сценой, когда вы вводите
1. BSD vs Linux. Вступление.
2. BSD vs Linux. Действующие лица.
3. BSD vs Linux. Что такое «Базовая Система»?
make
: она находит и скачивает дистрибутив, где бы он ни был, проделывает все необходимые изменения, рекурсивно находит и устанавливает все зависимости, вызывает GNU configure или imake или любую другую подготовительную программу с нужными опциями, начинает компиляцию с нужными параметрами, и т.д.Но всеми файлами в этом большом каталоге управляет сам проект FreeBSD. Например, когда кто-то написал KDE, она не появилась магическим образом в дереве портов. Кто-то должен был написать необходимый «клей» для создания её порта, затем залить файлы на репозиторий FreeBSD CVS для того, чтобы она появилась в коллекции портов. Опять же, существует определенный уровень уверенности, что она работает со всеми остальными вещами в коллекции портов. Все существующие зависимости будут там, потому что она не может объявлять зависимости вне портов.Вещи ломаются, конечно. Может быть, у какой-либо зависимости исчезнет сайт, так что никто не сможет скачать исходник. Может быть, новая версия какой-то третьей программы сломает вашу программу, что приведет к сбою в работе зависящих от неё вещей. Конечно, всех проблем не решить. Но инцидентов с «я хочу А, которая требует Б, которую я не могу найти» намного меньше, чем с децентрализованными системами, подобными RPM.Для более детальной информации читайте раздел в хэндбуке.1. BSD vs Linux. Вступление.
2. BSD vs Linux. Действующие лица.
3. BSD vs Linux. Что такое «Базовая Система»?