Стандарт иерархии файловой системы
Дистрибутив получает /usr
, вы получаете /usr/local
, ISV получают /opt
.
Где лучший путь для установки всех файлов пакета при компиляции?
Например - я хочу установить 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 ... :-)
Стандарт иерархии файловой системы
Дистрибутив получает /usr
, вы получаете /usr/local
, ISV получают /opt
.
Наилучшие места для установки пакетов на вашем компьютере - это /usr/local
если у вас есть права администратора и вы хотите, чтобы все использовали вашу программу, или $HOME
если вы просто хотите сделать копию для себя.
Обычно вы устанавливаете префикс --prefix=/usr/local
так, чтобы файлы приложения сохранялись в /usr/local/bin
настройках /usr/local/etc
и т. Д.
Преимущество использования этих стандартных мест в том, что они стандартные. Люди знают, где искать файлы. Например, /usr/local/bin
он почти всегда у всех $PATH
, так что вам не придется возиться с $PATH
переменной, чтобы заставить ее работать. Точно так же библиотеки обнаруживаются путем проверки, $LD_LIBRARY_PATH
но /usr/local/lib
обычно проверяются по умолчанию, поэтому вам не нужно добавлять их вручную и так далее.
Относительно удаления: После того, как вы запустите, сконфигурируете и соберете программу, make install
она установит ее для вас и make uninstall
автоматически удалит файлы.
На самом деле, лучший подход, вероятно, заключается в создании пакета, который вы можете установить.
Многие приложения поставляются с необходимыми файлами для создания пакетов RPM или DEB. Если они этого не делают, есть инструменты для автоматического создания пакетов, например, checkinstall .
checkinstall
будет следить за операциями make install
и перенаправлять установленные файлы, чтобы создать из них пакет DEB или RPM. Таким образом, вы получаете обычный пакет, который интегрируется с другими вашими пакетами.
Есть некоторые предостережения (вы не получите зависимости, а некоторые очень сложные сценарии установки могут потерпеть неудачу), но обычно это работает очень хорошо.
Рекомендуется следовать Стандартной базе Linux, особенно стандарту иерархии файловой системы .