Pull to refresh

BSD vs Linux. Что такое «Порт»?

*nix *
Translation
Original author: Matthew D. Fuller
Теперь, после базовой системы, вторая категория: те программы, которые являются пакетами дополнений. В мире 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, и другие подобные вещи. Каждая из этих папок представляет собой отдельную программу, которая описывается этими файлами. Куча чёрной магии творится за сценой, когда вы вводите make: она находит и скачивает дистрибутив, где бы он ни был, проделывает все необходимые изменения, рекурсивно находит и устанавливает все зависимости, вызывает GNU configure или imake или любую другую подготовительную программу с нужными опциями, начинает компиляцию с нужными параметрами, и т.д.Но всеми файлами в этом большом каталоге управляет сам проект FreeBSD. Например, когда кто-то написал KDE, она не появилась магическим образом в дереве портов. Кто-то должен был написать необходимый «клей» для создания её порта, затем залить файлы на репозиторий FreeBSD CVS для того, чтобы она появилась в коллекции портов. Опять же, существует определенный уровень уверенности, что она работает со всеми остальными вещами в коллекции портов. Все существующие зависимости будут там, потому что она не может объявлять зависимости вне портов.Вещи ломаются, конечно. Может быть, у какой-либо зависимости исчезнет сайт, так что никто не сможет скачать исходник. Может быть, новая версия какой-то третьей программы сломает вашу программу, что приведет к сбою в работе зависящих от неё вещей. Конечно, всех проблем не решить. Но инцидентов с «я хочу А, которая требует Б, которую я не могу найти» намного меньше, чем с децентрализованными системами, подобными RPM.Для более детальной информации читайте раздел в хэндбуке.

1. BSD vs Linux. Вступление.
2. BSD vs Linux. Действующие лица.
3. BSD vs Linux. Что такое «Базовая Система»?
Tags:
Hubs:
Total votes 38: ↑34 and ↓4 +30
Views 7K
Comments Comments 90