Как установить tar-файл «глобально»?

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

В принципе, я хочу установить локальный tar-файл таким образом, чтобы он был сразу доступен в командной строке, как если бы я использовал «sudo apt-get install XYZ» (предположим, что нет зависимостей).

Я знаю, как распаковать tar, а затем скомпилировать с помощью configure / make, но это просто оставляет мне исполняемый файл, который должен добавить путь позже.

Полагаю, я мог бы скопировать в / bin и покончить с этим, но мне было просто интересно, что такое стандартная практика.

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

Благодаря!

Если программа, которую вы хотите установить, соответствует хорошей практике, вы можете установить ее с помощью

 ./configure make make install 

./configure проверяет, соответствует ли ваша система всем требованиям и настраивает параметры установки. make компилирует все и make install копии всех необходимых файлов в нужные места. Вы не хотите делать последний шаг вручную, потому что будет достаточно утомительно, чтобы получить все библиотеки, справочные страницы и многое другое.

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

 ./configure --prefix="$HOME"/somefolder 

make install затем установит его в эту папку. Обычно вам это не понадобится.

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

Переменная среды $PATH

Под «немедленно доступным в командной строке» я предполагаю, что вы имеете в виду, что вы можете запускать его, как name , вместо того, чтобы вводить что-то вроде /path/to/name , например /home/galahad/bin/name или ./name ,

Переменная среды $PATH содержит список : -разделенных имен каталогов. Когда вы запускаете команду в своей оболочке, которая содержит символ / , она интерпретируется как точное местоположение и имя исполняемого файла для запуска. Но когда вы запускаете команду, которая не содержит / , ваша оболочка ищет каталоги в $PATH для исполняемых файлов под этим именем и запускает первый найденный. (Он также может помнить, где находятся исполняемые файлы, которые вы запустили раньше, поэтому на практике их не нужно искать каждый раз.)

Вот почему ./name – это общий способ запуска исполняемого name указанного в текущем каталоге. Запуск name вместо этого будет искать каталоги в $PATH .

Если вы запустите echo "$PATH" вы увидите что-то подобное, хотя это может быть не так:

 /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin 

Каталоги в $PATH не должны называться bin , но это обычное явление.

Настройка вашей сборки

Когда у вас есть исходный код, который скомпилирован при запуске ./configure и make , вы обычно будете использовать make install (или sudo make install ) для его установки. Это копирует файлы из каталога сборки в место установки. Когда вещь, которую вы устанавливаете, предоставляет исполняемые команды, эти исполняемые файлы обычно копируются в каталог, который находится в $PATH или что вы должны рассмотреть возможность добавления в $PATH .

Хотя создание и установка программного обеспечения часто так же просто, как запуск ./configure , make , иногда make check или make test , а затем make install или sudo make install , вы иногда захотите передать параметры скрипту configure для настройки сборки. В частности, как говорит pfnuesel , именно так вы настраиваете, где будет установлено программное обеспечение. Несмотря на то, что шаг make install действительно устанавливает программное обеспечение, места, где все будет установлено, обычно устанавливаются на шаге ./configure .

Наиболее распространенным вариантом для этого является --prefix . Префикс по умолчанию, когда вы не укажете, как configure что использовать, обычно /usr/local . (Иногда исходный код программы или библиотеки по умолчанию используется для какого-либо другого префикса. К счастью, это редкость.)

Так что ./configure обычно эквивалентно ./configure --prefix=/usr/local . Чтобы установить программное обеспечение в свой домашний каталог, вы можете использовать ./configure --prefix=/home/galahad (если /home/galahad – ваш домашний каталог) или --prefix="$HOME" . Тогда, конечно, вы все равно должны создавать и устанавливать программное обеспечение с помощью make . Я должен сказать, что не все программное обеспечение, которое распространяется в форме исходного кода, построено таким образом. Вы всегда должны искать документацию внутри извлеченного архива исходного кода.

Что означает --prefix

Когда вы запускаете ./configure --prefix= directory , вы указываете, что программное обеспечение должно быть установлено в directory каталога. Но это редко, если вообще когда-либо, размещает свободные файлы в directory . Вместо этого он помещает файлы, которые служат для разных целей в разных подкаталогах directory . Если эти подкаталоги не существуют, они создают их.

Исполняемые файлы обычно идут в directory /bin , хотя они могут отправляться в directory /sbin если они обычно используются для системного администрирования, или они могут пойти (реже, в эти дни) в directory /games если они являются играми. Библиотеки directory /lib32 в directory /lib или другую аналогичную директорию, такую ​​как directory /lib32 . Файлы заголовков directory /include в directory /include . Страницы руководства переходят в directory /man . Файлы данных, используемые программным обеспечением, находятся в directory /share .

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

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

Во многих системах вы можете найти более подробную информацию о типовом расположении файловой системы, запустив man hier . Если вы используете систему GNU / Linux, вам может быть интересен стандарт иерархии файловой системы .

Где ваша система устанавливает программное обеспечение

Большинство программ, входящих в вашу систему, включая программы, установленные менеджерами пакетов в подавляющем большинстве операционных систем GNU / Linux (одно исключение GoboLinux ) и некоторые другие Unix-подобные системы, установлены с префиксом /usr . Редко вы должны передать этот префикс ./configure , потому что вы вообще хотите избежать конфликтов с программным обеспечением, предоставляемым системой.

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

Управление пакетами

Большинство менеджеров пакетов поддерживают установку двоичных файлов (хотя есть исключения). Обычно, когда вы устанавливаете программное обеспечение в системе GNU / Linux с вашим диспетчером пакетов, вы устанавливаете двоичные пакеты. В этом случае менеджер пакетов ничего не компилирует сам. Тем не менее, установка по-прежнему связана с копированием или извлечением файлов в места в файловой системе.

Это то, что я имею в виду, когда говорю, что ваш менеджер пакетов устанавливает большинство вещей с префиксом /usr . Я не имею в виду, что он обязательно запускается ./configure --prefix=/usr или любая команда ./configure .

В разных операционных системах есть разные менеджеры пакетов. Если вы используете дистрибутив типа Debian или Ubuntu, который предназначен для использования таких утилит, как dpkg , apt-get и aptitude , тогда вы не должны пытаться устанавливать программное обеспечение с помощью rpm , yum и dnf .

Но основной принцип одинаковый для менеджеров пакетов. Когда менеджер пакетов устанавливает команду, он обычно отправляется в каталог, который, как ожидается, будет находиться в $PATH среды $PATH . В системах GNU / Linux менеджер пакетов обычно управляет всей системой – за исключением того, что вы устанавливаете самостоятельно другими способами – и, таким образом, устанавливает большинство программ с префиксом /usr , тем самым размещая большинство исполняемых команд в /usr/bin . (Конечно, как и make install или sudo make install , менеджеры пакетов обычно устанавливают другие файлы в другие места.)