- Компиляция и установка пакетов из исходного кода с помощью Make
- Вступление
- Требования
- Извлечение и компилирование исходного кода на VPS
- Загрузка Tarball
- Конфигурирование и компилирование исходного кода
- Configure Make Install
- Перед установкой
- Configure
- Install
- Заметки Дебианщика
- debian, linux, php, mongo, oracle, bash
- Чарующая магия configure, make и make install
- ./configure
- make install
- Послесловие
- 2 thoughts on “ Чарующая магия configure, make и make install ”
- Что делает «make install»?
Компиляция и установка пакетов из исходного кода с помощью Make
Вступление
При работе с компьютером или сервером Linux большинство необходимых пакетов можно получить при помощи apt или другого менеджера пакетов. Но иногда нужен пакет или более современная версия программы, которых нет в репозиториях.
Данное руководство охватывает вопросы компиляции и установки cURL из исходного кода. Использованный здесь синтаксис применим на большинстве дистрибутивов.
Требования
Для компиляции исходного кода в Linux нужен пакет «build-essential» (в системах на основе Debian) или «Development Tools» (CentOS); данные пакеты содержат компиляторы и библиотеки gcc/g++.
Чтобы установить пакет на Debian и Ubuntu, используйте:
apt-get install build-essential
yum groupinstall «Development Tools»
Некоторые пакеты требуют для компилирования или запуска установки дополнительных зависимостей. Apt и другие менеджеры пакетов обычно устанавливают их. При компилировании пакетов самостоятельно нужно всегда проверять документацию, а также заранее устанавливать необходимые пакеты.
Перед компилированием cURL установите все необходимые зависимости. Также на используемом сервере нужно иметь привилегии root или sudo для установки и компилирования исходного кода.
Извлечение и компилирование исходного кода на VPS
Загрузка Tarball
Для начала нужно скачать исходный код cURL. Существует множество способов это сделать, но в данном руководстве используется tarball, доступный на сайте cURL. При желании URL в следующей команде можно заменить на URL текущей версии cURL, но при этом нужно помнить, что это должна быть ссылка на файл «tar.gz». Запустите:
Это скачает и сохранит исходный код как curl.tar.gz в текущем каталоге.
Теперь нужно извлечь tarball. Для этого запустите:
tar -xvzf curl.tar.gz
Исходный код будет расположен в папке по имени «curl-» с номером версии. При вводе:
будет выведен подобный результат:
/curl ls
curl-7.32.0 curl.tar.gz
В данном случае папка называется «curl-7.32.0», следовательно, чтобы войти в эту папку, нужно ввести:
Конфигурирование и компилирование исходного кода
В этой папке можно найти множество разных файлов. На данный момент нужно обратить внимание на файл «configure». Это скрипт, созданный для того, чтобы помочь запустить программу на различных компьютерах. Запустите:
Это автоматически использует переменные текущей системы, чтобы подготовить исходный код для данного VPS. В основном эта команда проверяет, соответствуют ли библиотеки, установленные в системе, тем, что нужны программе. Данное действие указывает компилятору, где искать библиотеки, нужные исходному коду, в данном случае cURL. Кроме того, данное действие определяет, куда впоследствии установить пакет. По завершению будет создан файл Makefile со всей нужной в нем информацией. Теперь все готово для компилирования исходного кода. Для этого запустите команду:
В результате этого действия будет выведено много лишней и непонятной информации на консоль. Подождите, пока это закончится. Это займет около минуты. По завершению нужно установить исходный код. Запустите как root:
Теперь make будет следовать инструкциям в «Makefile», чтобы установить скомпилированные пакеты. В большинстве случаев это все, что нужно для установки. Теперь можно ввести curl. Если cURL был установлен верно, будет выведен примерно такой результат:
curl: try ‘curl —help’ or ‘curl —manual’ for more information
При извещении об ошибке bash введите:
ln -s /usr/local/bin/curl /usr/bin/curl
Это создаст ссылку на /usr/bin/curl, которая соединяется с /usr/local/bin/curl. Это позволит запустить cURL, просто введя curl в консоль. Обычно это выполняется автоматически, но в некоторых случаях скрипт конфигурации не может найти нужное местоположение установки. Теперь можно ввести:
Это запустит текущую версию cURL. Выведенный результат имеет примерно такой вид:
/curl curl -V
curl 7.32.0 (x86_64-unknown-linux-gnu) libcurl/7.26.0 OpenSSL/1.0.1e zlib/1.2.7 libidn/1.25 libssh2/1.4.2 librtmp/2.3
Protocols: dict file ftp ftps gopher http https imap imaps ldap pop3 pop3s rtmp rtsp scp sftp smtp smtps telnet tftp
Features: Debug GSS-Negotiate IDN IPv6 Largefile NTLM NTLM_WB SSL libz TLS-SRP
Готово! cURL был успешно скомпилирован и установлен из исходного кода.
Действия, описанные в данном руководстве, подходят для большинства дистрибутивов, следовательно, их можно выполнить для компилирования исходного кода других пакетов. Тем не менее, всегда нужно заранее знакомиться с документацией пакета. Она, как правило, содержит информацию о необходимых зависимостях, и даже иногда подсказывает, какие команды нужно использовать.
Запомните последовательность: ./configure, затем make, а затем make install.
Источник
Configure Make Install
NB: Чем лучше Вы разбираетесь в C++, Linux и работе компиляторов — тем проще Вам будет разобраться с configure make install
Перед установкой
Сначала Вам скорее всего нужно скачать архив с программой, которую Вы хотите установить.
Например, команда для скачивания python3.7:
Затем распаковать архив
tar -xf Python-3.7.0.tgz
И перейти в только что распакованную директорию
В этой директории скорее всего будет находиться скрипт configure
Configure
configure — это не команда linux а скрипт, который обычно лежит в папке к configure
Означает, что означает что префикс установки /usr ,
Бинари уходят в usr/bin
libraries в usr/lib
Проверяется наличие всего необходимого
Создается файл MakeFile
—prefix=PREFIX — папка для установки программы, вместо /, например, может быть /usr/local/, тогда все файлы будут распространены не по основной файловой системе, а в /usr/local;
—bindir=DIR — папка для размещения исполняемых файлов, должна находится в PREFIX;
—libdir=DIR — папка для размещения и поиска библиотек по умолчанию, тоже в PREFIX;
—includedir=DIR — папка для размещения man страниц;
—disable-возможность — отключить указанную возможность;
—enable-возможность — включить возможность;
—with-библиотека — подобно enable активирует указанную библиотеку или заголовочный файл;
—without-библиотека — подобное disable отключает использование библиотеки.
.cpp файлы компилируются в .o файлы
один .h файл может использоваться несколькими .cpp файлами
makefile нужны для того чтобы печатать меньше названий файлов и опций вручную.
С их помощью можно делать build только тех файлов, которые изменились.
Make это инструмент, который вызывает компиллятор. Можно указать тот компиллятор который нужен именно Вам.
С помощью инструкций в makefile можно указать какие именно файлы нужно заново компилировать.
Рассмотрим пример из C++ .
В директории находятся три .cpp файла, два .h файла и три .o файла, оставшиеся от прошлой компиляции.
- Example.cpp , Example.o
- Second.cpp , Second.h , Second.o
- Third.cpp , Third.h , Third.o
Все они нужны для проекта и не могут быть объединены в один файл.
Известно, что Example.cpp включает в себя файл Second.h и других зависимостей не имеет.
Мы хотим, чтобы при изменении самого Example.cpp либо его зависимости Second.h начиналась новая компиляция Example.cpp а затем новый Example.o линковался со старыми Second.o и Third.o
Для этого напишем Makefile aomake
all: simple simple: Example.o Second.o Third.o g++ Example.o Second.o Third.o — Simple Example.o: Example.cpp Second.h g++ -c Example.cpp
Отступы нужно ставить табуляцией
Смотрим на последние две строки:
Если Second.h или Example.cpp (в который включен Second.h) изменились нужно компилировать файл Example.cpp после чего получается object файл Example.o и, как видно из первых двух строк — после обновления Example.o все object файлы линкуются.
Выигрыш в этой ситуации заключается в том, что нам не нужно было перекомпилировать Second.cpp и Third.cpp мы просто перелинковали уже существующие Second.o Third.o с новым Example.o
Чтобы запустить этот файл нужно к команде make добавить опцию f и название файла
У файла Second.cpp две зависимости: Second.h и Third.h
У файла Third.cpp только одна зависимость: Third.h
Учтём эти зависимости в нашем aomake
all: simple simple: Example.o Second.o Third.o g++ Example.o Second.o Third.o — Simple Second.o: Second.cpp Second.h Third.h g++ -c Second.cpp Third.o: Third.cpp Third.h g++ -c Third.cpp Example.o: Example.cpp Second.h g++ -c Example.cpp
Ещё одной полезной опцией является j
-j — jobs Определяет число работ — jobs (commands) которые запускаются одновременно.
Если указано больше чем одна -j опция, то применяться будет последняя.
Если -j опция дана без аргументов make не будет ограничивать количество работ запускаемых одновременно. То есть запуститься сможет неограниченное количество работ одновременно.
Более подробную информацию по Makefile вы можете найти в статье «makefile tutorial»
Install
Make — это не единственный способ устанавливать программы под linux. Более того, за сорок с лишним лет существования утилиты make вышло много её версий.
Прежде чем ставить что-то по-старинке с make install — советую изучить checkinstall
Источник
Заметки Дебианщика
debian, linux, php, mongo, oracle, bash
Чарующая магия configure, make и make install
Это небольшая заметка для начинающих линуксоидов, о том что же означают эти три замечательные команды и для чего одни нужны. Начнём, как говорится, с начала. Большинство программ перед использованием надо скомпилировать, то есть преобразовать из текста понятного человеку в набор единиц и нулей, понятных компьютеру. Процесс условно разделён на три этапа: конфигурирование (configure), сборка (make) и установка (make install). Подробности под катом 🙂
./configure
Данная команда выполняет поиск необходимых для компиляции библиотек и заголовочных файлов (это для программ частично или полностью написанных на C/C++ и подобных языков), а так же настройку особых параметров или подключение специальных библиотек, в случае если ./configure обнаружит всё что ему нужно, он создаст Makefiles — файл, необходимый для сборки программы
Выполнить настройку параметров конфигуратора можно при помощи ключей и аргументов этих самых ключей, например:
./configure —prefix=/opt/my_program
При помощи ключа —prefix=
Вы можете указать директорию, которая в дальнейшем будет выступать как префикс для вашей программы (то есть корневая директория). Это связанно с тем что в мире Linux и не только, существует специальная Иерархия Файловой Системы (HFS) в соответствии с которой любая программа, чтобы работать без ошибок, должна быть собрана и установлена.
В файловой системе есть три основных префикса, относительно которых большинство программ конфигурируется, а именно:
- / — корневая директория операционной системы, так называемый ROOT
- /usr — директория, в которой находятся приложения пользовательского окружения
- /usr/local — дополнительная директория для пользовательских программ, собираемых вручную, специально для того чтобы операционная система не превратилась в свалку
Если открыть любую из этих директорий, то можно увидеть очень схожую структуру, как минимум там будут папки: bin, etc, include, libs, sbin.
Если запустить ./configure без ключей, то префиксом по умолчанию (директория, в которую будет установлена собираемая программа) будет /usr/local, помните это если не можете запустить свою программу, возможно у Вас не прописан путь в PATH.
Кроме ключа —prefix в конфигураторе, как правило, имеется ещё множество других ключей, посмотреть их все можно если выполнить:
./configure —help
Самая важная и простая команда/программа, выполняет запуск процедуры компиляции приложения из исходного кода. Для своей работы данная программа использует специальные файлы Makefiles, в которых подробно описан процесс сборки приложения со всеми параметрами, которые мы указали конфигуратору. Результатом успешного выполнения команды make будет собранная программа в текущей директории.
make install
Данная команда выполняет непосредственную установку приложения в указанную, на этапе конфигурирования, директорию, после выполнения команды make install вы можете запустить свежеустановленную программу.
Послесловие
Чтобы не писать три команды по очереди можно написать их в одну строку:
./configure && make && make install
&& — это оператор И пришедший из языка C/C++, однако, с точки зрения оболочки он означает то, что следующую команду нужно выполнить только в случае успешного выполнения предыдущей команды, это очень удобно если один из этапов завершается с ошибкой.
На самом деле make install так же может выполнить сборку, потому как задача install зависит от задачи all (то есть непосредственно сборки приложения), это означает что этап make можно пропустить и выполнить всего две команды, если записать их в одну строку получится:
./configure && make install
Удачи Вам! И спасибо за то что дочитали!
2 thoughts on “ Чарующая магия configure, make и make install ”
Всё, что нужно знать про эти три команды, так это то, что это отличный способ запомоить систему.
Спасибо огромное за статью,всё чётко и понятно.
Источник
Что делает «make install»?
Переходя с Windows на Linux, я не могу понять процесс установки программного обеспечения в Linux. В Windows, когда мы запускаем установочный файл, он спрашивает, куда вы хотите установить программу, скорее всего, только в папке программных файлов. Позже он редактирует реестр. Это называется установкой в Windows. Что именно означает «установка программного обеспечения» в Linux?
Предположим, я скачал исходный код, настроил его, а затем собрал бинарный файл, используя make . Теперь это просто бинарная, а не полезная программа. Как это будет установлено? По make install ? И что именно делает эта команда?
Make — программа общего назначения, обычно используемая для компиляции. Но это может быть использовано для чего угодно.
Когда вы делаете что-то вроде «make all», программа make выполняет правило с именем «all» из файла в текущем каталоге с именем «Makefile». Это правило обычно вызывает компилятор для компиляции некоторого исходного кода в двоичные файлы.
Когда вы делаете «make install», программа make берет двоичные файлы из предыдущего шага и копирует их в некоторые подходящие места, чтобы к ним можно было получить доступ. В отличие от Windows, установка требует только копирования некоторых библиотек и исполняемых файлов, и в этом случае требования к реестру отсутствуют. Короче говоря, «make install» просто копирует скомпилированные файлы в соответствующие места.
make install делает все, что Makefile хочет автор. Как правило, к этому моменту уже слишком поздно менять каталог установки, как это часто известно ранее , во время сборки, поэтому на файлы справки и файлы конфигурации можно ссылаться с правильными путями.
Многие проекты используют GNU Autotools, чтобы попытаться улучшить их переносимость между аппаратными средствами и операционными системами. (Различные варианты Unix используют немного разные заголовки для объявлений функций, которые немного отличаются от обычного пути — за исключением того, что большинству программ нужна та или иная из тех, которые объявлены в разных местах.)
Когда проект использует Автоинструменты, обычная мантра для его установки:
./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 мантра действительно проста для пользователей, когда она работает.)
Источник