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.