В чем разница между сборкой из исходного кода и использованием установочного пакета?

46

Мне было интересно: при установке чего-то есть простой способ двойного щелчка по исполняемому файлу установки, а с другой стороны, есть способ собрать его из исходного кода.

Последний, загружающий исходный пакет, действительно громоздок.

Но в чем принципиальная разница между этими двумя методами?

kwagjj
источник

Ответы:

44

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

Эти бинарные пакеты являются один, которые уже строит из источника кто - то с общими функциями и параметрами, в программном обеспечении , так что большое количество пользователей может установить и использовать его.

Бинарные пакеты просты в установке .
Но, возможно, не все варианты из пакета upstream.

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

Преимущества установки из источника:

  • Вы можете установить последнюю версию и всегда оставаться в курсе, будь то исправление безопасности или новая функция.
  • Позволяет вам обрезать функции при установке в соответствии с вашими потребностями.
  • Точно так же вы можете добавить некоторые функции, которые могут отсутствовать в двоичном файле.
  • Установите его в желаемом месте.
  • В случае некоторого программного обеспечения вы можете предоставить информацию о вашем оборудовании для соответствующей установки.

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

Обновление : добавление аргумента, относящегося к безопасности, в комментариях ниже. Да, это правда, что при установке из двоичного файла у вас нет целостности исходного кода. Но тогда это зависит от того, откуда у вас бинарный файл. Существует множество надежных источников, из которых вы можете получить бинарный файл любого нового проекта, единственным минусом является время . Для того, чтобы бинарный файл обновлений или даже новый проект появился в наших доверенных репозиториях, может потребоваться некоторое время.

И, прежде всего, о безопасности программного обеспечения, я хотел бы выделить эту веселую страницу в Bell-Labs, предоставленную Джо в комментариях ниже.

beginer
источник
4
Исходный код также может быть скомпилирован оптимизированным образом для вашей системы (что .. может быть не очень хорошая идея, так как скомпилированный материал «специфичен» для системы и может не работать на резервном ... но у вас есть источник, вы можете перекомпилировать (если у вас есть время для этого))
Оливье Дюлак
Это зависит от того, есть ли у вас такая «резервная система». Если вы просто проводите какие-то исследования, вы обычно этого не делаете.
h22
1
Для гиперпараноида одним из преимуществ установки из исходного кода является безопасность и возможность просмотра кода, если вы можете и хотите это делать: когда вы устанавливаете из исходного кода, вы точно знаете, что у вас есть двоичный файл из этого исходного кода, а не бинарный файл с неизвестными модификациями (при условии, что вы доверяете источнику в первую очередь).
LawrenceC
6
@ultrasawblade - Ты явно недостаточно параноик! <G> - см. Cm.bell-labs.com/who/ken/trust.html для полной монти.
Джо
32

Исходный файл содержит исходный код, написанный разработчиком на любом языке, который он / она выбирает (C, C ++, Python и т. Д.), И является универсальным. Это не относится ни к одному дистрибутиву, а во многих случаях к любой операционной системе.

Пакет (например, RPM или DEB) - это двоичный исполняемый файл (или интерпретируемый скрипт и т. Д.), Предварительно подготовленный для вашего конкретного дистрибутива. Задача подготовки исходного кода для компиляции (добавления необходимых исправлений и т. Д.), Фактической компиляции, создания специфических для дистрибутива конфигурационных файлов, создания сценариев до и после установки и т. Д. Выполняется для вас сопровождающим пакета.

Другими словами, вся работа с ослом была выполнена для вас в пакете, в то время как вам придется делать это самостоятельно, если вы решите установить из исходного кода.

Практически во всех случаях использовать пакет намного проще:

  • Их намного проще установить
  • Они специально предназначены для работы с вашим дистрибутивом
  • Они иногда исправляются сопровождающим пакета, чтобы исправить ошибки, специфичные для дистрибутива.
  • Менеджер пакетов удалит их
  • Менеджер пакетов будет управлять всеми зависимостями для вас
  • Менеджер пакетов позаботится об обновлениях
  • Вам не нужно устанавливать инструменты разработчика в вашей системе (компиляторы, make и т. Д.)

Однако иногда упакованная версия является старой версией или, что еще хуже, упакованной версии не существует; в этом случае ваш единственный вариант - собрать себя. Если вы это сделаете, вам нужно учитывать следующее:

  • Вам нужно будет установить все инструменты разработчика в вашей системе
  • Вы будете нести ответственность за проверку обновлений и перекомпиляцию
  • Вам нужно будет убедиться, что все зависимости установлены, включая devпакеты - их может быть много.
  • Возможно, вам придется отлаживать проблемы, если они не работают должным образом в вашем дистрибутиве.

Если вы готовы приложить дополнительные усилия, то компиляция из исходного кода может дать вам следующие преимущества:

  • Доступ к последней доступной версии
  • Опция оптимизации процесса компиляции для производительности / стабильности
  • Наслаждение!

Обратите внимание, что, хотя в готовых пакетах некоторых дистрибутивов предусмотрены двоичные исполняемые файлы, которые готовы к установке и запуску (например, RPM и DEB), другие дистрибутивы предоставляют пакеты, которые просто автоматизируют процесс компиляции.

ebuildsПримером этого является Gentoo - пакет - это в основном инструкции для менеджера пакетов, описывающие, как скомпилировать и установить исполняемый файл. Это имеет много преимуществ традиционных менеджеров пакетов (автоматическое обновление, удаление и т. Д.), В то же время позволяя пользователю оптимизировать процесс компиляции по своему вкусу.

Arch Linux имеет систему упаковки, в которой основные пакеты являются двоичными, тогда как многие дополнительные пакеты компилируются в системе с использованием PKGBUILDфайлов.

garethTheRed
источник
19

Помимо других ответов, я хотел бы добавить кое-что:

Если вы решили скомпилировать программу самостоятельно, вам нужно подумать, что компиляция - это не то, что вы делаете только один раз. Вам, вероятно, потребуется подписаться на список рассылки для разработчиков приложений, которые вы решили скомпилировать, и быть в курсе новых версий и, особенно, обновлений безопасности.

Каждый раз, когда приложение обновляется, вам придется перекомпилировать новую версию, так что имейте в виду, что вам придется экономить часть своего времени каждую неделю.

Если вы не можете себе этого позволить, лучше, чтобы сопровождающий пакета выполнил эту работу за вас.

Даниил
источник
6

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

Это в основном важно для критически важных приложений, которые очень интенсивно используют ЦП, таких как, например, инструменты биоинформационного конвейера или инструменты геофизического моделирования. Такое программное обеспечение работает в очень контролируемой среде, не имеет функции контроля доступа само по себе, поэтому редко возникают ошибки безопасности, настолько срочные, что их необходимо исправлять за несколько дней или часов. Почти никогда не требуется запускать на другой машине с изначально неизвестной архитектурой.

Да, я знаю, что компьютеры очень, очень, очень быстрые, и любые предпринимаемые вами усилия или действия очень, очень, очень дороги, но на третий день сидения и ожидания завершения вашей программы (об этой ситуации я говорю) такие истины. начать смотреть сомнительно.

Иными словами, приложения, такие как браузеры и тому подобное, должны лучше использоваться из репозитория сопровождающего (а не из некоторых загруженных предварительно собранных пакетов), так как очень важно поддерживать их в актуальном состоянии.

h22
источник
В тех случаях, когда такие изменения, позволяющие максимально эффективно использовать ваш ЦП, имеют значение (это относится только к некоторому очень специализированному коду; говорят, что 95% времени тратится на 5% кода, так что оптимизация остальных 95% не делает заметных различий, и большинство современных программ в 99% случаев ждут, пока пользователь все же решится), программы предлагают различный код для включения в зависимости от загрузки процессора при запуске.
vonbrand
0

Один из способов получить лучшее из обоих миров (современное программное обеспечение, простая установка / удаление, включение большинства настроек и адаптаций дистрибутива, возможность оптимизации в соответствии с местными требованиями), а также затраты (приходится постоянно обновляться, следите за ошибками) и патчи в последнюю минуту, следите за разработкой, вы сами по себе в отношении исправления ошибок и несовместимости между версиями) не можете быть смягчены (сильно), это создавать ваши собственные пакеты, начиная с исходных пакетов из вашего дистрибутива. Да, это больше, чем просто сборка и установка.

vonbrand
источник
1
Это кажется интересным ответом («лучший из двух в мире»), но я не совсем понимаю, что вы имеете в виду здесь: «это создание ваших собственных пакетов, начиная с исходных пакетов из вашего дистрибутива». Не могли бы вы переписать / объяснить?
Ян Янковский