GNU/Linux >> Linux Esercitazione >  >> Linux

Installa i binari in /bin, /sbin, /usr/bin e /usr/sbin, interazioni con --prefix e DESTDIR

Essenzialmente, la distinzione tra / e il /usr hierarchies non è e non dovrebbe essere nelle mani del manutentore a monte dei pacchetti (leggi:Non è tua responsabilità). Dal / dovrebbe contenere solo i file necessari per l'avvio e la creazione di /usr disponibile, è una decisione amministrativa ciò che va a / . Per le installazioni dal sorgente, questa decisione viene presa dall'installatore e, per le distribuzioni, dal manutentore del pacchetto.

Per una logica, supponiamo che qualcuno stia cercando di costruire un chroot ambiente. La distinzione tra /usr e / non ha senso nell'ambiente e non verrà fatta. Tutti i prefissi sono impostati su /foo/bar/chroot e qualsiasi script configure che interferisce con $prefix rischia di indurre comportamenti strani. Gli stessi argomenti valgono per script come Debian packaging helpers, che si basano sul solito $prefix semantica per funzionare.

La soluzione più pulita è quindi il bash-4.1 soluzione. Hai fondamentalmente due opzioni pulite:dividi il tuo pacchetto in parti critiche per l'avvio e parti non critiche per l'avvio, o lascia che il tuo configure script offre un prefisso alternativo per le parti critiche per l'avvio, impostato per impostazione predefinita su / , lasciando $prefix come /usr .


Ci sono due diversi livelli a questa domanda, e le tue domande sembrano tutte applicarsi al secondo significato (il pacchetto binario generato dal tuo file *.spec, o debian/rules, o un file *.pkg.) Per quanto riguarda gli autotools sei preoccupato, NON TI INTERESSA. Non devi tentare di specificare un prefisso predefinito diverso da /usr/local nel tuo file configure.ac. Specificare dove le cose dovrebbero essere installate viene fatto nei file di controllo del pacchetto binario e NON in configure.ac. La distribuzione di origine che utilizza lo script di configurazione generato da autoconf dovrebbe essere installata in /usr/local per impostazione predefinita e qualsiasi altra cosa è un errore di impacchettamento.

Se si desidera avere una distribuzione sorgente che l'utente possa utilizzare per installarla facilmente in una particolare posizione su una particolare piattaforma, sarebbe accettabile includere uno script nel tarball che lo faccia. Ad esempio, potresti includere uno script di compilazione simile a:

#!/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

che specificherebbe gli argomenti predefiniti da configurare per le piattaforme "foo" e "bar", ma sembra davvero che le tue domande riguardino i file di controllo per i pacchetti binari.


Linux
  1. Bash =~ Regex e HTTPS://regex101.com/?

  2. Linux – Unire /usr/bin e /usr/sbin in /bin (gnu/linux)?

  3. Perché /bin/sh punta a /bin/dash e non a /bin/bash??

  4. Node.js Conflitti:/sbin/node Vs /usr/bin/node?

  5. Qual è la differenza tra #!/usr/bin/env bash e #!/usr/bin/bash?

Linux – /sbin/init non esiste?

Kubuntu mostra un errore all'accesso (file:///usr/share/sddm//themes/breeze/main.qml:no Such File Or Directory)?

cmake --version punta a /usr/bin/cmake mentre which cmake punta a /usr/local/bin

Quando dovrei usare /dev/shm/ e quando dovrei usare /tmp/?

Spostato il contenuto di /bin in /usr/bin, è possibile annullare?

I siti web dovrebbero vivere in /var/ o /usr/ in base all'utilizzo consigliato?