GNU/Linux >> Znalost Linux >  >> Linux

Nainstalujte binární soubory do /bin, /sbin, /usr/bin a /usr/sbin, interakce s --prefix a DESTDIR

V podstatě jde o rozdíl mezi / a /usr hierarchie není a neměl by ležet v rukou nadřazeného správce balíčků (čtěte:Není vaší odpovědností). Od / by měl obsahovat pouze soubory nezbytné pro zavedení a vytvoření /usr k dispozici, je to správní rozhodnutí, co jde do / . U instalací ze zdroje toto rozhodnutí provádí instalační program au distribucí správce balíčků.

Pro zdůvodnění předpokládejme, že se někdo pokouší vytvořit chroot životní prostředí. Rozdíl mezi /usr a / je v prostředí bezvýznamný a nebude se dělat. Všechny předpony jsou nastaveny na /foo/bar/chroot a všechny konfigurační skripty zaměňující s $prefix pravděpodobně vyvolá podivné chování. Stejné argumenty platí pro skripty, jako jsou pomocníci balení Debianu, které spoléhají na obvyklé $prefix aby sémantika fungovala.

Nejčistším řešením je proto bash-4.1 řešení. V zásadě máte dvě čisté možnosti:Rozdělit balíček na části kritické pro spuštění a části, které nejsou kritické pro spuštění, nebo nechat configure skript nabízí alternativní předponu pro části kritické pro spuštění, která je ve výchozím nastavení nastavena na / , zbývá $prefix jako /usr .


Tato otázka má dvě různé úrovně a zdá se, že všechny vaše otázky platí pro druhý význam (binární balíček vygenerovaný vaším souborem *.spec nebo debian/rules nebo souborem *.pkg.) Pokud jde o autotools máte obavy, je vám to jedno. V konfiguračním.ac se nesmíte pokoušet zadat jinou výchozí předponu než /usr/local. Určení, kam se mají věci instalovat, se provádí v řídicích souborech binárních balíčků a NE v configure.ac. Zdrojová distribuce využívající konfigurační skript generovaný autoconf by se měla ve výchozím nastavení nainstalovat do /usr/local a cokoli jiného je chyba balení.

Pokud chcete mít zdrojovou distribuci, kterou může uživatel použít ke snadné instalaci na určité místo na konkrétní platformě, bylo by přijatelné zahrnout do tarballu skript, který to udělá. Můžete například zahrnout sestavení skriptu, který vypadá nějak takto:

#!/bin/sh

case $1 in
foo) args='--prefix=/usr --bindir=/bin --sysconfdir=/etc';;
bar) args='--prefix=/opt';;
*) args=;;
esac
$(dirname $0)/configure $args &&
make &&
make install

což by specifikovalo výchozí argumenty pro konfiguraci pro platformy 'foo' a 'bar', ale opravdu to zní, jako by se vaše otázky týkaly řídicích souborů pro binární balíčky.


Linux
  1. /usr/bin Vs /usr/local/bin Na Linuxu?

  2. Linux – sloučení /usr/bin A /usr/sbin do /bin (gnu/linux)?

  3. Jaký je rozdíl mezi #!/usr/bin/env bash a #!/usr/bin/bash?

  1. cmake --version ukazuje na /usr/bin/cmake, zatímco který cmake ukazuje na /usr/local/bin

  2. Jaké jsou významy /usr/sbin, /usr/local/sbin a /usr/local/bin?

  3. Rozdíl mezi /bin a /usr/bin

  1. Rozdíl mezi /bin/false &/sbin/nologin

  2. Přesunutý obsah /bin do /usr/bin, je možné vrátit zpět?

  3. Měly by weby žít ve /var/ nebo /usr/ podle doporučeného použití?