dove mettere i binari in modo che siano sempre nel percorso e possano essere trovati facilmente


10

Sto realizzando alcuni binari, script ecc. Che voglio installare facilmente (usando i miei rpms). Dal momento che li voglio accessibili a tutti, la mia intuizione sarebbe di metterli in / usr / bin;

  • non è necessario cambiare PERCORSO

tuttavia; i miei eseguibili ora scompaiono in un pool di tutti gli altri; come posso ritrovare tutti gli eseguibili che ho messo lì in modo semplice. Stavo pensando a:

  • una sottodirectory in / usr / bin (so che non posso farlo; solo per illustrare il mio pensiero)
  • un'altra directory (/ opt / myself / bin) e il collegamento di ciascun eseguibile a / usr / bin (molto lavoro)
  • un'altra directory (/ opt / myself / bin) e il collegamento della directory a / usr / bin (è possibile?)

quale sarebbe il "modo migliore, più compatibile con Linux" per fare questo?

EDIT: abbiamo discusso di questo in azienda e abbiamo trovato questa opzione non ottimale: mettere i binari in / usr / bin / company con un collegamento simbolico da / usr / bin. Non sono entusiasta di questa soluzione (in corso discussioni)

Risposte:


7

Se raggruppi i tuoi binari nei tuoi RPM, è banale ottenere un elenco di ciò che sono e dove sono stati installati.

Esempio

$ rpm -ql httpd| head -10
/etc/httpd
/etc/httpd/conf
/etc/httpd/conf.d
/etc/httpd/conf.d/README
/etc/httpd/conf.d/autoindex.conf
/etc/httpd/conf.d/userdir.conf
/etc/httpd/conf.d/welcome.conf
/etc/httpd/conf.modules.d
/etc/httpd/conf.modules.d/00-base.conf

Suggerirei di inserire i tuoi eseguibili in /usr/bino /usr/local/bine di creare il tuo RPM. È abbastanza banale farlo e gestendo la distribuzione del software usando un RPM sarai in grado di etichettare un pacchetto con un numero di versione facilitando ulteriormente la gestione della configurazione del tuo software mentre lo distribuisci.

Determinare quali RPM sono "miei"?

Puoi costruire i tuoi RPM usando alcune informazioni note che potrebbero essere concordate prima di fare l'edificio. Costruisco spesso pacchetti su sistemi di proprietà del mio dominio, quindi è banale trovare RPM semplicemente cercando attraverso tutti gli RPM che sono stati creati sull'host X.mydom.com.

Esempio

$ rpm -qi httpd
Name        : httpd
Version     : 2.4.7
Release     : 1.fc19
Architecture: x86_64
Install Date: Mon 17 Feb 2014 01:53:15 AM EST
Group       : System Environment/Daemons
Size        : 3865725
License     : ASL 2.0
Signature   : RSA/SHA256, Mon 27 Jan 2014 11:00:08 AM EST, Key ID 07477e65fb4b18e6
Source RPM  : httpd-2.4.7-1.fc19.src.rpm
Build Date  : Mon 27 Jan 2014 08:39:13 AM EST
Build Host  : buildvm-20.phx2.fedoraproject.org
Relocations : (not relocatable)
Packager    : Fedora Project
Vendor      : Fedora Project
URL         : http://httpd.apache.org/
Summary     : Apache HTTP Server
Description :
The Apache HTTP Server is a powerful, efficient, and extensible
web server.

Questa sarebbe la Build Hostlinea all'interno degli RPM.

L'uso di / usr / bin / company?

Probabilmente scoraggerei l'uso di un luogo come questo. Principalmente perché richiede che tutti i tuoi sistemi siano $PATHpotenziati per includerlo ed è non standard. La personalizzazione delle cose è sempre stata un "diritto di passaggio" per ogni aspirante amministratore Unix, ma lo scoraggio sempre a meno che non sia assolutamente necessario.

Il problema più grande con la personalizzazione in questo modo è che diventano un peso sia per il mantenimento del proprio ambiente sia per portare nuove persone ad essere veloci su come utilizzare il proprio ambiente.

Posso semplicemente ottenere un elenco di file da RPM?

Sì, puoi farlo, ma richiederà 2 chiamate a RPM. Il primo costruirà un elenco di pacchetti che sono stati creati sull'host X.mydom.com. Dopo aver ottenuto questo elenco, dovrai chiamare nuovamente le query RPM per i file di proprietà di ciascuno di questi pacchetti. È possibile ottenere questo risultato usando questo solo rivestimento:

$ rpm -ql $(rpm -qa --queryformat "%-30{NAME}%{BUILDHOST}\n" | \
    grep X.mydom.com | awk '{print $1}') | head -10
/etc/pam.d/run_init
/etc/sestatus.conf
/usr/bin/secon
/usr/bin/semodule_deps
/usr/bin/semodule_expand
/usr/bin/semodule_link
/usr/bin/semodule_package
/usr/bin/semodule_unpackage
/usr/sbin/fixfiles
/usr/sbin/genhomedircon

e come ottenere un elenco di tutti i file binari che sono stati installati da tutti gli rpms che ho installato? Fortunatamente abbiamo deciso di inserire il nome della nostra azienda nei nomi dei giri / min; quindi qualcosa come "rpm -qa | grep company" elenca i miei rpms installati
Chris Maes,

@ChrisMaes - vedi aggiornamenti. Uso build host per determinare quali pkg sono "miei".
slm

grazie per l'aggiornamento; se potessi semplicemente aggiungere un comando per trovare tutti i binari di proprietà dei miei rpms (che hanno "compagnia" nel loro nome) sarebbe fantastico
Chris Maes,

@ChrisMaes - vedi aggiornamento, LMK se hai bisogno di ulteriori indicazioni.
slm

bella risposta scritta; completo e ben formattato. Molte grazie!
Chris Maes,

4

Un ovvio suggerimento è quello di nominare i tuoi binari o i tuoi pacchetti in un modo speciale. Quindi, ad esempio, potresti aggiungerli come prefisso cm-, come indicato in questo post. Se stai installando rpms, devono andare in /usr/bin(se sono eseguibili a livello di utente), secondo l'FHS. Non dovrebbero entrare /usr/local/binper esempio. Questo è solo per installazioni locali.

Per la cronaca, non trovo l'idea di mettere i binari in una directory speciale e collegarli in modo allettante, anche se suppongo che a volte queste cose vengano fatte. Ricorda anche che se hai bisogno di scoprire quali binari appartengono a quale pacchetto, puoi semplicemente interrogare il sistema di packaging.


3

I binari che non fanno parte del sistema o della distribuzione sono di solito dentro

/usr/local/bin

la directory è di solito nello standard in $PATHmodo da trovare i tuoi binari.


normalmente / usr / local / bin è per i binari che esistono solo "localmente" su quella macchina; non per i binari che distribuirò su altre macchine usando un rpm ...?
Chris Maes,

2
Sotto Linux, /usr/local/binè per eseguibili installati manualmente. Eseguibili eseguibili gestiti dal gestore pacchetti /usr/bin.
Gilles 'SO- smetti di essere malvagio' il

@Gilles, la mia prima interpretazione della domanda è stata l'installazione su un singolo computer che rendesse i binari disponibili per ogni utente (non installando in $ HOME). Ora vedo che non era proprio quello che ho capito.
Matteo
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.