Разделы сайта
Выбор редакции:
- Как уменьшить размер pdf, подробная инструкция
- Можно ли поменять аккумулятор в айфон 4
- Лучшие программы для дефрагментации жесткого диска на ОС Windows
- Выбор ресивера и акустики (бюджетный hi-fi) Напольные и полочные
- Не работает кулер на ноутбуке
- Установка пароля на страницу Как защитить страницу php паролем
- Окрестности кальпе испания
- Как правильно заряжать ноутбук, чтобы продлить срок службы батареи Как заряжать аккумулятор ноутбука первый раз
- Skyrim - гайд по улучшению графики (UPD) Основные графические настройки Скайрим
- Как усыновить ребёнка в Скайриме – Дети для усыновления Скачать мод на скайрим улучшенные дети
Реклама
Хочется взять и расстрелять, или ликбез о том, почему не стоит использовать make install. Компиляция и установка программ из исходников Скачиваем исходники ядра |
Бывают ситуации, когда вам нужна самая свежая версия программы, но её нет в репозитории вашего дистрибутива. Или эту программу вообще туда не добавляют по каким-то причинам. Вариантов получить эту программу тут несколько, один из них - собрать программу из исходного кода, непосредственно под ваш дистрибутив. Разумеется речь идёт о программах с открытым исходным кодом:) Сборка (компиляция) программы - это превращение её исходного кода, написанного на каком-нибудь компилируемом языке программирования (например C++), который понятен программисту, в бинарный код (последовательность нулей и единиц), который понятен центральному процессору компьютера. Не все языки программирования являются компилируемыми. Например код на языке Python , можно запускать сразу, без перевода его в бинарный код (хотя и это возможно). Для сборки программы, желательно иметь достаточно мощный, и желательно многоядерный процессор. Ни в коем случае не компилируйте программы на ноутбуках! Это крайне негативно скажется на продолжительности их жизни (они не рассчитаны на такие нагрузки, если конечно у вас не игровой ноутбук). В сборке программы из исходного кода нет ничего сложного. Главное помнить одно правило: в пакетном дистрибутиве ни в коем случае нельзя использовать метод make install . Иначе в будущем получите большую такую кучу проблем. Когда поймёте, что хотели удалить программу (поставленную таким образом), а пакетный менеджер о ней не знает. А сама программа состоит из нескольких сотен файлов, разбросанных по разным каталогам. Страшно? Поэтому в пакетных дистрибутивах, программу нужно собирать в, собственно, пакет. Тогда её можно будет без проблем удалить, в случае чего. Я написал это потому что многие руководства по компиляции программ в Linux, которые мне попадались, описывают именно make install . Удалить программу, установленную таким образом можно только в двух случаях:
Отмечу, что не каждую программу можно собрать одним и тем же способом. Поэтому всегда нужно читать инструкцию по сборке, которая есть в архиве с исходным кодом. Бывает что разработчик положил туда скрипт, который при запуске делает всё сам (собирает и устанавливает, но мы помним про make install), или для сборки может не подойти make , а нужна другая система сборки. Также для сборки программы, необходимо будет установить нужные для неё сборочные зависимости (это пакеты с префиксом -dev ). Для того чтобы быстро собрать программу в пакет, дабы иметь возможность без проблем её установить или удалить, существует утилита, под названием checkinstall . Она позволит создать родной для системы пакет (deb или rpm ), что позволит использовать штатный пакетный менеджер для её установки/удаления Для сборки программ в GNU/Linux используется (в основном) программа make , которая запускает инструкции из Makefile , но поскольку дистрибутивов GNU/Linux много, и они все разные, то для того чтобы собрать программу, нужно для каждого дистрибутива отдельно прописывать пути, где какие лежат библиотеки и заголовочные файлы. Программисты не могут изучать каждый дистрибутив и для каждого отдельно создавать Makefile. Поэтому придумали конфигураторы, которые «изучают» систему, и в соответствии с полученными знаниями создают Makefile. Для сборки нам нужны компиляторы: они прописаны в зависимостях пакета build-essential , так что достаточно установить его со всеми зависимостями. Ещё нужны autoconf и automake . Если программа написана на Qt , то обычно она собирается либо командой qmake (естественно она должна быть установлена), либо путём открытия файла проекта в какой-нибудь IDE (обычно Qt Creator ) и сборки в ней. Сперва нужно подготовить систему. Для этого установим необходимый набор инструментов: Sudo apt install build-essential gcc devscripts git fakeroot automake autoconf Получить исходный код можно разными способами. Скачать из интернета (например с сайта разработчика), склонировать репозиторий с исходным кодом и так далее. В первом случае, в общем-то, всё ясно. Во втором: предположим, что программа лежит в git -репозитории (на GitHub , например). Мы можем как зайти в этот репозиторий и скачать оттуда архив с кодом Так и скопировать весь репозиторий себе (как это делают разработчики). Для примера возьмём программу mgba . Это эмулятор игровой консоли Nintendo GameBoy . Адрес репозитория . Копируем его себе: git clone https://github.com/mgba-emu/mgba.git В домашнем каталоге у вас появится директория с его исходным кодом. На той же странице программы, есть инструкция по сборке. Внимательно читаем. Открываем терминал и переходим в каталог с исходным кодом: cd ~/mgba И собираем программу: mkdir build Будут запрошены кое-какие данные (имя пакета, версия и так далее. Желательно заполнить все поля). После сборки, в директории выше (то есть в mgba), появится deb-пакет с программой. Теперь его можно просто установить двойным кликом или командой sudo dpkg -i имяпакета.deb . Если во время сборки у вас начали появляться сообщения об ошибках - внимательно их читайте. Возможно не хватает каких-либо сборочных зависимостей. Возьмём немного другой пример, в котором используется конфигуратор. В таком случае, в директории с исходным кодом, располагаются скрипты: autogen.sh , configure и подобные. Autogen.sh генерирует скрипт configure , с помощью которого уже можно сконфигурировать программу перед сборкой (да да, конфигуратор конфигуратора). Как всегда не забываем читать инструкцию по сборке той или иной программы. Предположим, что в архиве есть скрипт autogen.sh . Выполним его: ./autogen.sh После выполнения, должен появиться файл configure. Чтобы посмотреть с какими параметрами можно собрать программу, введите: ./configure --help Просмотрите все доступные параметры. Обычно, это могут быть поддержки различных плагинов, сборка с альтернативным интерфейсом, даже сборка под другую процессорную архитектуру. Допустим программа использует интерфейс, написанный на GTK+ 2 , но имеет альтернативный на GTK+ 3 . Тогда конфигурация программы будет выглядеть так: ./configure --with-gtk3 ./configure --enable-gtk3 Всё подробно будет описано в инструкции. Есть некоторый набор стандартный опций (после ввода./configure --help, они пишутся вначале), таких как указание пути для установки: Prefix=/usr После запуска configure и успешного конфигурирования кода, можно запустить сборку: sudo checkinstall Вот и всё. Как видите, здесь нет ничего сложного. Хотя, не стану скрывать, бывает так, что разработчик не озаботился качественной инструкцией по сборке. Но такое бывает редко. Хочу также обратить ваше внимание на следующее: прибегайте к сборке программы из исходников только в крайнем случае. Если вы используете Ubuntu LTS , то посмотрите (при помощи гугла), нет ли необходимой вам программы (или свежей версии) в более свежем выпуске Ubuntu. Или возможно есть А также других систем приходится устанавливать дополнительные программы. В операционных системах Windows все очень просто, как правило есть установщик setup.exe, который помогает установить софт. А вот в линуксе дела обстоят несколько иначе. Как устанавливать программы в Linux? Сейчас рассмотрим этот вопрос. В линуксе есть несколько типов установочных пакетов и каждый дистрибутив имеет свой формат пакетов. В дистрибутивах Fedora, Mandriva, Red Hat и Suse используется стандартная установка для линукс RPM, разработанная компанией Red Hat. Файл пакета RPM как правило имеет название имя_программы-версия.rpm. Еще один из очень популярных форматов это DEB. Используется в Debian, Ubuntu, Knoppix и Mepis. Имеет название имя_программы-версия.deb. И подошли мы к архивам. Обычно это .tar , .tar.gz , .tgz расширения. Их следует распаковать, а потом уже устанавливать/компилировать. Выполнять процедуру установки программ нужно от имени суперпользователя. Быстрая навигация Установка программ на Debian, UbuntuДля работы с пакетами формата DEB есть множество инструментов, но чаще всего используют apt-get , он входит в стандартный набор инструментов. Для установки приложения вводим команду: apt-get install имя_пакета Для удаления: apt-get remove имя_пакета APT хранит локальную базу данных всех доступных для установки пакетов и ссылок где их брать. Эту базу нужно обновлять время от времени, командой: apt-get update Для обновления устаревших пакетов (программ) на компьютере набираем следующие команды: apt-get update ; apt-get upgrade Установка программ на Fedora, Red HatУтилита, аналогичная APT — yum. Загрузить и установить пакет из настроенного хранилища пишем команду: yum install имя_пакета yum remove имя_пакета Локальная база yum не сохраняется, поэтому нет необходимости обновлять. Для установки обновлений воспользуемся командой: yum update Выбрать что-то определенное для обновления: yum update имя_пакета Установка программ в MandrivaВ Mandriva есть свой набор инструментов для работы с пакетами, называется urpmi. Для установки: urpmi имя_пакета Чтобы удалить: urpme имя_пакета Обновить локальную базу со списком пакетов: urpmi.update -a Чтобы установить обновления: urpmi --auto- select Установка программ из архивов (тарболов)Для архивов сжатых с помощью GZIP (gz, gz2 и т.д.) делаем так: tar -xvz f имя_файла Для архивов сжатых с помощью BZIP (bz, bz2 и т.д.) несколько по другому: tar -xvjf имя_файла Команды Tar:
После выполнения команды, будет создана папка с именем, аналогичным названию пакета. Затем нужно открыть эту созданную папку командой: cd имя_папки Далее в распакованном архиве читаем инструкцию в файле README если есть. Во всяком случае, если программа собрана в виде исполняемого файла, то в пакете будет файл .sh , как правило называется install.sh Всем привет! Это небольшая заметка для начинающих линуксоидов, о том что же означают эти три замечательные команды и для чего одни нужны. Начнём, как говорится, с начала. Большинство программ перед использованием надо скомпилировать, то есть преобразовать из текста понятного человеку в набор единиц и нулей, понятных компьютеру. Процесс условно разделён на три этапа: конфигурирование (configure), сборка (make) и установка (make install). Подробности под катом 🙂 ./configureДанная команда выполняет поиск необходимых для компиляции библиотек и заголовочных файлов (это для программ частично или полностью написанных на C/C++ и подобных языков), а так же настройку особых параметров или подключение специальных библиотек, в случае если ./configure обнаружит всё что ему нужно, он создаст Makefiles - файл, необходимый для сборки программы Выполнить настройку параметров конфигуратора можно при помощи ключей и аргументов этих самых ключей, например: ./configure --prefix=/opt/my_program При помощи ключа --prefix= В файловой системе есть три основных префикса, относительно которых большинство программ конфигурируется, а именно:
Если открыть любую из этих директорий, то можно увидеть очень схожую структуру, как минимум там будут папки: bin, etc, include, libs, sbin. Если запустить ./configure без ключей, то префиксом по умолчанию (директория, в которую будет установлена собираемая программа) будет /usr/local , помните это если не можете запустить свою программу, возможно у Вас не прописан путь в PATH . Кроме ключа --prefix в конфигураторе, как правило, имеется ещё множество других ключей, посмотреть их все можно если выполнить: ./configure --help makeСамая важная и простая команда/программа, выполняет запуск процедуры компиляции приложения из исходного кода. Для своей работы данная программа использует специальные файлы Makefiles , в которых подробно описан процесс сборки приложения со всеми параметрами, которые мы указали конфигуратору. Результатом успешного выполнения команды make будет собранная программа в текущей директории. make installДанная команда выполняет непосредственную установку приложения в указанную, на этапе конфигурирования, директорию, после выполнения команды make install вы можете запустить свежеустановленную программу. ПослесловиеЧтобы не писать три команды по очереди можно написать их в одну строку: ./configure && make && make install && - это оператор И пришедший из языка C/C++, однако, с точки зрения оболочки он означает то, что следующую команду нужно выполнить только в случае успешного выполнения предыдущей команды, это очень удобно если один из этапов завершается с ошибкой. На самом деле make install так же может выполнить сборку, потому как задача install зависит от задачи all (то есть непосредственно сборки приложения), это означает что этап make можно пропустить и выполнить всего две команды, если записать их в одну строку получится: ./configure && make install Удачи Вам! И спасибо за то что дочитали! терминал и команды Часто ли вы сталкивались с тем, что нужной версии приложения для вашей архитектуры в дистрибутиве Ubuntu просто нет, но данная программа имеется на сайте разработчиков в виде исходников в архиве.tar.gz. Думаю многим знакома данная ситуация, но не все продолжали искать пути решения данного вопроса и просто искали другой аналог приложения или версию немного старее и продолжали работать. Сразу же хочется добавить несколько слов для новичков в Linux, прежде чем что-то выполнять с данной статьи, изучите основательно терминал и команды которые используются для работы с ним, почитайте маны или же материалы в сети.
На этом пожалуй первый этап завершен, что мы делаем далее? А далее мы запускаем терминал и перейдем в нашу распакованную папку с файлами: Cd /home/linux/Загрузки/gimp-2.9.2/ ls
Что значит выполняет много рутинной работы вместо меня, спросите вы, если запустить конфигурацию исходников приложения с приставкой данного пакета например в виде: Auto-apt -y run ./configure Конечно можно выполнить конфигурацию и без помощь данного пакета и просто выполнить команду: ./configure Если выполнять конфигурацию с приставкой - auto-apt -y run, то подготовка исходников к сборке будет происходить в автоматическом режиме, то есть эта команда может автоматически скачивать и установит вместо вас все необходимые файлы и библиотеки и удовлетворит все зависимости которые потребуются.
Пробуем установить отсутствующий пакет командой: Sudo apt-get install pakage_name В том случае если пакет при выполнении команды выше не обнаруживается, меня очень часто выручает следующая комбинация, ищем пакеты которых нам не хватает в кеше: Apt-cache search pakage_name
Установили пакет, после можно выполнить команду: Checkinstall -D
В моем случае я работаю в Ubuntu и выполнил команду с атрибутом -D , далее пойдет сборка приложения в готовый пакет формата Deb, от нас потребуются некоторые уточнительные данные например такие как добавить описание к пакету, так как вы его собираете и соответственно описание совершенно чистое и как бы от вас требуется краткая справка, что это за приложение для чего. В моем случае как я проверил автоматически заполняются так же следующие поля: 1 - Summary: [ EOF ] 2 - Name: [ gimp ] 3 - Version: [ 2.9.2 ] 4 - Release: [ 1 ] 5 - License: [ GPL ] 6 - Group: [ checkinstall ] 7 - Architecture: [ i386 ] 8 - Source location: [ gimp-2.9.2 ] 9 - Alternate source location: 10 - Requires: 11 - Provides: [ gimp ] 12 - Conflicts: 13 - Replaces:
Я ранее как то устанавливал без сборки пакета, выполняя команды: Make make install Если вы захотите удалить установленное приложение, стоит выполнить команду: Make uninstall команда выше в автоматическом режиме удалит относящиеся к приложению, что вы устанавливали и не затронет ничего стороннего, желательно не бегать по директориям и выполнять ее с той же директории приложения в которой вы работали, то есть подготавливали конфигурацию итд. Хотя и без ошибок прошло все, но весь процесс длился очень долго, примерно минут 20 пока у меня установился гимп с исходников, я успел пойти сделать кофе и еще наблюдать за процессом установки, долго все происходит из-за того, что приходится в много разных папок раскидать файлы исходников приложения, каждый файл имеет свое предназначение и должен находиться в определенной директории, так вот после выполнения make install и происходит процесс установки тысяч файлов исходников по требуемым директориям. Вот как то так и происходит установка приложения с исходников, да, не все так просто на первый взгляд, я и не говорил что будет легко, но если попробовать то это очень хорошо развивает ваше мышление и способы поиска решений в той или иной ситуации, что есть даже очень хорошо. На этом пожалуй все, если у вас будут вопросы по материалу выше, или вы пытались установить и столкнулись с ошибками, спрашивайте в комментариях к материалу, будем искать решение вместе. Суть сводится к тому, что эту команду в виде «make install» или «sudo make install» использовать в современных дистрибутивах нельзя. Но ведь авторы программ в руководствах по установке пишут, что нужно использовать эту команду, возможно, скажете вы. Да, пишут. Но это лишь означает, что они не знают, какой у вас дистрибутив, и дистрибутив ли это вообще, может, вы вступили в секту и об курились читались LFS и теперь решили под свою хтоническую систему скомпилять их творение. А make install является универсальным, хоть и зачастую неправильным способом это сделать. Лирическое отступлениеКак известно, для нормальной работы большинство софта должно быть не только скомпилировано, но и правильно установлено в системе. Программы ожидают найти нужные им файлы в определённых местах, и места эти в большинстве *nix-систем зашиты в код на этапе компиляции. Помимо этого аспекта основным отличием процесса установки в linux/freebsd/whatever от таковой в Windows и MacOS является то, что программа не просто складывает кучу файлов в отдельную директорию в Program Files или /Applications, а «размазывает» себя по всей файловой системе. Библиотеки идут в lib, исполняемые файлы в bin, конфиги в etc, разного рода данные в var и так далее. Если вам вдруг понадобится её обновить, то всё это надо сначала как-то вычистить, т. к. при использовании новой версии остатки файлов от старой могут привести к совершенно непредсказуемым последствиям , зачастую нехорошим. Вероятность этого события не так велика, но оно вам надо на боевом сервере?И что с того?Так вот, если вы делали установку напрямую через make install, то нормально удалить или обновить софтину вы, скорее всего, не сможете . Более того, установка новой версии поверх старой, скорее всего, затрёт ваши изменения в конфигах . make install делает ровно то, что ему сказано - производит установку файлов в нужные места, игнорируя тот факт, что там что-то уже есть. После этого процесса совершенно никакой информации о том, что и куда ставилось, получить в удобоваримом виде невозможно. Иногда, конечно, Makefile поддерживает действие uninstall, но это встречается не так часто, да и не факт, что корректно работает. Помимо этого хранить для деинсталяции распакованное дерево исходников и правил сборки как-то странно.Как бороться?Поскольку в дистрибутивах пакеты имеют свойство иногда всё-таки обновляться, для решения этой проблемы придумали такую штуку как пакетный менеджер. При его использовании установка происходит примерно так:
В этом случае при обновлении можно безболезненно поудалять лишнее, а заодно посмотреть, не поменялись ли в системе файлы, помеченные как конфигурационные и спросить, что делать, если в новой версии их содержимое отличается. Помимо этого, пакетный менеджер не даст затереть файлы одного пакета при установке другого. В общем, много полезных штук он может сделать. Если вы по незнанию/лени скопипастили make install из инструкции, то в системе появляются файлы, о которых пакетный менеджер не знает . Со всеми вытекающими, если вам мало того, что было перечислено ранее. Что делать?Можно, конечно, сконфигурировать дерево исходников так, чтобы установка всего и вся шла куда-нибудь в /opt/mycoolapp/, а потом при необходимости руками удалить, но тут может вылезти масса неприятных вещей, начиная с того, что программа ожидает, что сможет загрузить свои библиотеки, а загрузчик о директории, где они лежат ничего не знает, заканчивая тем, что автор программы может рассчитывать, что например, если он кладёт файл, скажем в $prefix/share/xsessions/, то его подхватит менеджер дисплея. Не говоря уже о путях для pkgconfig и прочем.Так что надо собирать пакет. У меня нет времени, чтобы ***ться с этим, лучше ещё раз сделаю make install, всё просто и понятно!Спокойно, спокойно. Он у нас за ноги привязан. Всё не так уж страшно и сложно, как кажется на первый взгляд.checkinstallДанная чудесная утилита, будучи запущенной вместо make install задаст несколько вопросов, после чего сама соберёт и установит пакет. Всё, при обновлении никаких проблем с вычисткой старого хлама у вас не будет.Сборка deb-пакета вручнуюЕсли вы не склонны доверять такой автоматике (которая иногда всё же косячит) или же хочется внести пару изменений, но разбираться с нормальным процессом сборки пакетов всё же лениво, то можно собрать пакет ручками. Я привожу способ, как соорудить его для систем на базе Debian, т. к. лучше всего знаком именно с ними. Он не является идеологически правильным, но на выходе получается вполне корректный пакет без задействования дополнительных сущностей. Делается это следующим образом.Для начала собираем софт с предварительно указанными для configure или autogen.sh параметрами --prefix=/usr и --exec-prefix=/usr. Далее производим установку во временную директорию. Пишем: Fakeroot
make install DESTDIR=`pwd`/tempinstall
Cd tempinstall
mkdir DEBIAN
find etc | sed "s/^/\//" > DEBIAN/conffiles
При необходимости там же можно создать скрипты preinst, postinst, prerm и postrm. Всё, делаем dpkg -b tempinstall и получаем на выходе tempinstall.deb, на который можно натравить dpkg -i и который корректно установится, обновится или удалится. «Правильный» процесс с предварительным созданием пакета исходного кода выходит за рамки данной заметки, а потому описан не будет, но для ваших целей оно обычно и не нужно. ЗаключениеКак видите, тут нет абсолютно ничего сложного, но выполнение этих действий избавит вас от огромного числа проблем в будущем. |
Новое
- Можно ли поменять аккумулятор в айфон 4
- Лучшие программы для дефрагментации жесткого диска на ОС Windows
- Выбор ресивера и акустики (бюджетный hi-fi) Напольные и полочные
- Не работает кулер на ноутбуке
- Установка пароля на страницу Как защитить страницу php паролем
- Окрестности кальпе испания
- Как правильно заряжать ноутбук, чтобы продлить срок службы батареи Как заряжать аккумулятор ноутбука первый раз
- Skyrim - гайд по улучшению графики (UPD) Основные графические настройки Скайрим
- Как усыновить ребёнка в Скайриме – Дети для усыновления Скачать мод на скайрим улучшенные дети
- Разблокировать Bootloader HTC