42

Переходя с Windows на Linux, я не могу понять процесс установки программного обеспечения в Linux. В Windows, когда мы запускаем установочный файл, он спрашивает, куда вы хотите установить программу, скорее всего, только в папке программных файлов. Позже он редактирует реестр. Это называется установкой в Windows. Что именно означает «установка программного обеспечения» в Linux?

Предположим, я скачал исходный код, настроил его, а затем собрал бинарный файл, используя make . Теперь это просто бинарная, а не полезная программа. Как это будет установлено? По make install ? И что именно делает эта команда?

4 ответа4

37

Make - это программа общего назначения, обычно используемая для компиляции. Но это может быть использовано для чего угодно.

Когда вы делаете что-то вроде "make all", программа make выполняет правило с именем "all" из файла в текущем каталоге с именем "Makefile". Это правило обычно вызывает компилятор для компиляции некоторого исходного кода в двоичные файлы.

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

34

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

Многие проекты используют GNU Autotools, чтобы попытаться улучшить их переносимость между аппаратными и операционными системами. (Различные варианты Unix используют немного разные заголовки для объявлений функций, которые немного отличаются от обычного пути - за исключением того, что большинству программ нужна та или иная из тех, которые объявлены в разных местах.)

Когда проект использует Автоинструменты, обычная мантра для его установки:

./configure
make
make install

./configure обычно позволяет вам использовать параметр командной строки, например --prefix /opt/apache или что-то подобное, чтобы указать другое имя пути. /usr/local/ - это общий prefix умолчанию. Локально построенному программному обеспечению гораздо проще жить в одном месте, а поставляемому дистрибутивному программному обеспечению - жить в "главных каталогах": /usr/ /bin/ и так далее. (Упаковщики очень осторожны, чтобы никогда не трогать файлы в /usr/local/ - они знают, что это исключительно для системных администраторов.)

В любом случае, ./configure --prefix /path/to/new/prefix установит переменную в Makefile которая будет доступна при компиляции программы, изменяя страницы справочника так, чтобы они указывали на правильное расположение файлов, изменяя файлы конфигурации, и т.д. Так что make создаст программное обеспечение специально для места установки, которое вы хотите, и make install установит его в это место.

Большинство программ могут работать даже без последнего шага make install - просто ./program_name часто запускает их. Это определенно для каждого проекта - некоторые, такие как postfix , qmail и т.д., Состоят из множества различных движущихся частей и полагаются на то, что все они работают вместе. Другие, такие как ls или su могут быть достаточно автономными для корректного выполнения из каталога, в котором они были встроены. (Это не часто полезно, но иногда очень полезно.)

Однако не все проекты используют Autotools - они огромные, сложные и убогие в обслуживании. Рукописные Makefile гораздо проще в написании, и я лично считаю, что распространение простого Makefile с доступными переменными конфигурации намного проще как для разработчиков, так и для пользователей. (Хотя ./configure ; make ; make install mantra действительно удобен для пользователей, когда он работает.)

17

make install ничего не делает меньше , то выполнение функции / раздел install в вашем Makefile

8

Самое важное, что следует упомянуть при установке программного обеспечения в Linux, это то, что гораздо более надежно и легко установить программное обеспечение из вашего дистрибутива (это его цель!). Используйте make install только в том случае, если нет другого пути (также рассмотрите альтернативные программы).

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

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

В качестве дополнительного примечания, хотя дистрибутивы, такие как Ubuntu, всегда содержат устаревшие пакеты, существуют также дистрибутивы, такие как Arch Linux, которые всегда актуальны (хотя они не предлагают буквально все программы, когда-либо выпущенные для Linux, такие как Debian/Ubuntu).

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .