Где лучший путь для установки всех файлов пакета при компиляции?

Например - я хочу установить ProFTPd, так что есть возможность

--prefix=/usr/local/proftpd

Это означает, что все файлы после компиляции (включая двоичные файлы и файлы конфигурации) будут храниться здесь. Как вы знаете, все пакеты, которые устанавливаются через систему пакетов (например, zypper в SuSE или apt в Ubuntu), обычно хранят свои файлы конфигурации в /etc / и двоичные файлы в / sbin /, а также хранят ссылку в моем $ PATH, поэтому я могу запустить, просто набрав proftpd (без / sbin).

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

Я думаю, что смогу создать какой-нибудь командный файл, который я смогу использовать так:

uninstall --package=proftpd

И мой скрипт найдет все файлы proftpd по обычным путям (/etc, /sbin) и удалит их с помощью rm.

Есть ли рекомендации, где хранить все эти файлы, или есть какие-либо (не) преимущества моего первого примера (--prefix =/usr/local/proftpd)?

Я действительно не думаю, что хорошо иметь 2 пути с файлами конфигурации и двоичными файлами, но, возможно, я неправильно понимаю основные принципы Linux ... :-)

4 ответа4

9

Стандарт иерархии файловой системы

Дистрибутив получает /usr , вы получаете /usr/local , ISV получают /opt .

4

Наилучшие места для установки пакетов на вашем компьютере - это /usr/local если у вас есть права администратора и вы хотите, чтобы все использовали вашу программу, или $HOME если вы хотите просто сделать копию для себя.

Обычно вы устанавливаете префикс как --prefix=/usr/local чтобы файлы приложения сохранялись в настройках /usr/local/bin в /usr/local/etc и так далее.

Преимущество использования этих стандартных мест в том, что они стандартные. Люди знают, где искать файлы. Например, /usr/local/bin почти всегда находится в $PATH каждого, так что вам не придется возиться с $PATH чтобы заставить людей ее запускать. Аналогичным образом, библиотеки можно найти, проверив $LD_LIBRARY_PATH но /usr/local/lib обычно проверяется по умолчанию, поэтому вам не нужно добавлять его вручную и т.д.

Относительно удаления: После того, как вы запустите configure и соберете программу, make install установит ее для вас, а make uninstall автоматически удалит файлы.

3

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

Многие приложения поставляются с необходимыми файлами для создания пакетов RPM или DEB. Если они этого не делают, есть инструменты для автоматического создания пакетов, например, checkinstall.

checkinstall будет следить за операциями make install и перенаправлять установленные файлы, чтобы создать из них пакет DEB или RPM. Таким образом, вы получаете обычный пакет, который интегрируется с другими вашими пакетами.

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

0

Рекомендуется следовать Стандартной базе Linux, особенно стандарту иерархии файловой системы.

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