gdzie umieścić pliki binarne, aby zawsze znajdowały się na drodze i można je łatwo znaleźć

10

Tworzę całkiem sporo plików binarnych, skryptów itp., Które chcę łatwo zainstalować (używając własnych rpms). Ponieważ chcę, aby były one dostępne dla wszystkich, moją intuicją byłoby umieszczenie ich w / usr / bin;

  • nie trzeba zmieniać ŚCIEŻKI

jednak; moje pliki wykonywalne znikają teraz w puli wszystkich innych; jak mogę łatwo znaleźć wszystkie pliki wykonywalne, które tam umieściłem. Myślałem o:

  • podkatalog w / usr / bin (wiem, że nie mogę tego zrobić; tylko dla zilustrowania mojego myślenia)
  • inny katalog (/ opt / yourself / bin) i łączenie każdego pliku wykonywalnego z / usr / bin (dużo pracy)
  • inny katalog (/ opt / yourself / bin) i linkowanie katalogu do / usr / bin (czy to możliwe?)

jaki byłby „najlepszy, najbardziej zgodny z linuksem sposób”, aby to zrobić?

EDYCJA: rozmawialiśmy o tym w firmie i wymyśliliśmy tę nieoptymalną opcję: umieść pliki binarne w / usr / bin / company z dowiązaniem symbolicznym z / usr / bin. Nie jestem zachwycony tym rozwiązaniem (trwają dyskusje)

Chris Maes
źródło

Odpowiedzi:

7

Jeśli umieścisz swoje pliki binarne we własnych RPM, to banalne jest uzyskanie listy tego, czym są i gdzie zostały zainstalowane.

Przykład

$ 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

Sugerowałbym umieszczenie swoich plików wykonywalnych w jednym /usr/binlub /usr/local/bini uruchomienie własnego RPM. Jest to dość trywialne, a zarządzając wdrożeniem oprogramowania za pomocą RPM, możesz oznaczyć pakiet numerem wersji, co jeszcze bardziej ułatwi zarządzanie konfiguracją oprogramowania podczas jego wdrażania.

Ustalanie, które RPM są „moje”?

Możesz budować swoje RPM wykorzystując znane informacje, które mogą zostać uzgodnione przed wykonaniem budowy. Często buduję pakiety na systemach należących do mojej domeny, więc znalezienie RPM jest proste, wystarczy przeszukać wszystkie RPM zbudowane na hoście X.mydom.com.

Przykład

$ 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.

To byłaby Build Hostlinia w RPM.

Użycie / usr / bin / company?

Prawdopodobnie odradzałbym korzystanie z takiej lokalizacji. Głównie dlatego, że wymaga, aby wszystkie twoje systemy zostały $PATHrozszerzone o to i jest niestandardowy. Dostosowywanie rzeczy zawsze było „prawem przejścia” dla każdego niedoszłego administratora Unixa, ale zawsze go odradzam, chyba że jest to absolutnie konieczne.

Największym problemem związanym z takimi dostosowaniami jest to, że stają się one ciężarem zarówno w utrzymywaniu środowiska, jak i przyspieszaniu nowych osób, jak korzystać ze środowiska.

Czy mogę po prostu uzyskać listę plików z RPM?

Tak, możesz to osiągnąć, ale będzie to wymagało 2 połączeń z RPM. Pierwszy zbuduje listę pakietów, które zostały zbudowane na hoście X.mydom.com. Po uzyskaniu tej listy musisz ponownie wywołać kwerendę RPM dla plików należących do każdego z tych pakietów. Możesz to osiągnąć za pomocą tej jednej wkładki:

$ 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
slm
źródło
i jak uzyskać listę wszystkich plików binarnych, które zostały zainstalowane przez wszystkie zainstalowane rpms? Na szczęście zgodziliśmy się umieścić nazwę naszej firmy w nazwach RPM; więc coś w rodzaju „rpm -qa | grep company” wyświetla listę zainstalowanych rpms
Chris Maes
@ChrisMaes - zobacz aktualizacje. Używam hosta kompilacji, aby określić, które pkgs są „moje”.
slm
Dziękuję za aktualizację; jeśli można po prostu dodać polecenie, aby znaleźć wszystkie pliki binarne posiadanych przez moich RPM (które mają „spółka” w nazwie), które byłoby fantastyczne
Chris Maes
@ChrisMaes - patrz aktualizacja, LMK, jeśli potrzebujesz dalszych wskazówek.
slm
bardzo miła pisemna odpowiedź; kompletny i dobrze sformatowany. Wielkie dzięki!
Chris Maes,
4

Oczywistą sugestią jest nazywanie plików binarnych lub pakietów w specjalny sposób. Można na przykład poprzedzić je prefiksem cm-według inicjałów podanych w tym poście. Jeśli instalujesz rpms, muszą przejść do /usr/bin(jeśli są plikami wykonywalnymi na poziomie użytkownika), zgodnie z FHS. Nie powinni wchodzić na /usr/local/binprzykład. Dotyczy to tylko instalacji lokalnych.

Dla przypomnienia, nie wydaje mi się, aby umieszczać pliki binarne w specjalnym katalogu i łączyć je w ogóle z atrakcyjnymi, choć przypuszczam, że takie rzeczy są czasami robione. Pamiętaj również, że jeśli chcesz dowiedzieć się, które pliki binarne należą do danego pakietu, możesz po prostu zapytać o system pakowania.

Faheem Mitha
źródło
3

Pliki binarne, które nie są częścią systemu ani dystrybucji, zwykle znajdują się w

/usr/local/bin

katalog jest zwykle w standardzie, $PATHdzięki czemu można znaleźć twoje pliki binarne.

Matteo
źródło
normalnie / usr / local / bin jest dla plików binarnych, które istnieją tylko „lokalnie” na tym komputerze; nie dla plików binarnych Będę dystrybuował na innych komputerach przy użyciu rpm ...?
Chris Maes,
2
Pod Linuksem /usr/local/binjest dla ręcznie instalowanych plików wykonywalnych. Pliki wykonywalne zarządzane przez menedżera pakietów wchodzą /usr/bin.
Gilles 'SO - przestań być zły'
@Gilles, moją pierwszą interpretacją tego pytania było zainstalowanie na jednym komputerze, dzięki czemu pliki binarne są dostępne dla każdego użytkownika (nie instaluje się w $ HOME). Teraz widzę, że tak naprawdę nie rozumiałem tego.
Matteo,