Что делает «сделать установку»?

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

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

39 голосов | спросил KawaiKx 21 12011vEurope/Moscow11bEurope/MoscowMon, 21 Nov 2011 12:16:28 +0400 2011, 12:16:28

4 ответа


35

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

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

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

ответил sharjeel 21 12011vEurope/Moscow11bEurope/MoscowMon, 21 Nov 2011 12:23:48 +0400 2011, 12:23:48
33

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

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

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

./configure
make
make install

./configure обычно позволяет использовать параметр командной строки, например --prefix /opt/apache или что-то подобное, чтобы указать другое имя пути. /usr/local/ является стандартным значением по умолчанию prefix. Для локально построенного программного обеспечения намного проще жить в одном месте, а программное обеспечение, поставляемое с дистрибутивом, жить в «основных каталогах»: /usr/ ---- +: = 8 =: + ---- и т. д. (Packers very осторожны, чтобы никогда касаться файлов в /bin/ - они знают он предназначен исключительно для системных администраторов.)

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

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

Однако не все проекты используют Autotools - они огромные , сложные и убогие в обслуживании. Рукописные su s гораздо проще писать, и я лично считаю, что просто распространяю простой Makefile с доступными параметрами конфигурации намного проще для разработчиков и пользователей. (Хотя ---- +: = 22 =: + ---- мантра действительно проста в использовании, когда она работает.)

ответил sarnold 21 12011vEurope/Moscow11bEurope/MoscowMon, 21 Nov 2011 12:28:51 +0400 2011, 12:28:51
15

make install выполняет не что иное, как выполнение install в разделе Makefile

ответил sascha 21 12011vEurope/Moscow11bEurope/MoscowMon, 21 Nov 2011 12:21:51 +0400 2011, 12:21:51
8

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

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

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

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

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

ответил corvinus 28 12011vEurope/Moscow11bEurope/MoscowMon, 28 Nov 2011 00:02:55 +0400 2011, 00:02:55

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132