Dlaczego oprogramowanie instaluje się w / usr / lib?

11

Używam serwerów Linuksa od lat i wciąż jestem zdezorientowany standardem Hierarchii Systemów Plików. Zwykle mogę żyć z zamieszaniem. Ale teraz, gdy tworzę własne oprogramowanie dla Linuksa, muszę zrozumieć, gdzie powinien je zainstalować menedżer pakietów.

Byłem całkiem przekonany, że / opt to idealna lokalizacja dla mojej aplikacji. Ale po sprawdzeniu mojego systemu plików Debiana nie jestem już pewien: wiele programów jest faktycznie zainstalowanych w / usr / lib! Aby wymienić tylko kilka: MySQL, MySQLWorkbench, Nautilus, Rythmbox ...

Według FHS, / usr / lib powinien zawierać „Biblioteki do programowania i pakietów” oraz „zawiera pliki obiektowe, biblioteki i wewnętrzne pliki binarne, które nie są przeznaczone do bezpośredniego uruchamiania przez użytkowników lub skrypty powłoki” ( patrz tutaj ).

Wiele programów znajdujących się w / usr / lib mojego serwera Debiana nie jest bibliotekami ani wewnętrznymi plikami binarnymi, ale pełnowartościowym oprogramowaniem wykonywalnym użytkownika!

Nadal jestem na dobrej drodze do zainstalowania mojej aplikacji w / opt. Ale naprawdę chciałbym zrozumieć, czy to prawda, a przede wszystkim dlaczego .

Z góry dziękuję za miłe porady,

Eric

Eric MORAND
źródło
2
Sprawdzanie miejscowe, z tego co mogę powiedzieć MySQLWorkbench instaluje tylko biblioteki w / usr / lib. Co sprawia, że ​​myślisz, że w / usr / lib znajduje się „pełnoprawne oprogramowanie wykonywalne użytkownika”?
Mark Wagner
Rzeczywisty skrót znajdujący się w menu aplikacji wskazuje plik binarny znajdujący się w / usr / lib, jeśli dobrze pamiętam.
Eric MORAND
Wygląda na to, że jesteś zdezorientowany, gdzie zainstalowane jest wymienione oprogramowanie. Oto linki do wykazów, jeśli pliki MySQL i Nautilus. Zauważ, że pliki są podzielone na / etc, / usr / bin, / usr / lib itd., Tak jak twierdzi FHS. packages.debian.org/wheezy/i386/mysql-server-5.5/filelist packages.debian.org/wheezy/i386/nautilus/filelist
sciurus

Odpowiedzi:

6

Prawdziwym kluczem do zrozumienia standardu Heirarchy System plików jest wiedza, że ​​został on zaprojektowany z myślą o sieciowych systemach plików.

Dla każdej maszyny z tym samym systemem operacyjnym, wydaniem i architekturą możesz udostępnić / usr przez NFS i zamontować go.
/ usr jest (ponownie) montowany po zainicjowaniu stosu sieciowego.

/var <-- local, r/w optimized
/usr <-- can be mounted over network, possibly even read-only!
/opt <-- local, read mostly
/etc <-- local, read mostly
/srv <-- local, r/w optimized

/home <-- either/or
Dan Garthwaite
źródło
Czy mógłbyś podać link do standardów lokalnych / zdalnych i r / r?
Kapitan Giraffe
Czy to oznacza, że ​​można mieć jedno „repozytorium” / usr dla każdego serwera Linux lub stacji roboczej w sieci?
Eric MORAND
1
To wymaga trochę pracy, ale tak, możesz. Kiedyś dyski twarde były drogie, co było normą dla każdego dużego wdrożenia.
Dan Garthwaite
@ eric-morand From FHS: "/ usr to druga główna sekcja systemu plików. / usr to dane, które mogą być udostępniane tylko do odczytu. Oznacza to, że / usr powinien być dostępny dla różnych hostów zgodnych z FHS i nie może być zapisywany na Wszelkie informacje specyficzne dla hosta lub zmieniające się w czasie są przechowywane gdzie indziej. ” pathname.com/fhs/pub/fhs-2.3.html#THEUSRHIERARCHY
Dan Garthwaite
Ups Powyższy komentarz dotyczył @CaptainGiraffe
Dan Garthwaite
12

Różnica polega na tym, /usrże pakiety mają być instalowane jako część systemu . Pakiety, które otrzymujesz z repozytoriów Debian / Ubuntu, PPA itp., Przejdź tutaj. Chociaż /optjest przeznaczony do uwolnionych aplikacji innych firm, które nie są dystrybuowane w procesie dystrybucji pakietów dystrybucji.

Jeśli dystrybuujesz pakiety .deb lub .rpm, z myślą o ewentualnym włączeniu oprogramowania do oficjalnych repozytoriów, powinieneś zainstalować /usr. W przeciwnym razie zainstaluj /opt. W obu przypadkach twoja aplikacja powinna mieć możliwość kompilacji do działania w dowolnym dowolnym miejscu (np. Przy pomocy autotools GNU).

Michael Hampton
źródło
Dzięki. W tej chwili nie planuję umieszczać mojej aplikacji w oficjalnym repozytorium.
Eric MORAND
Co zatem z / usr / local? A może to dyskretne
Aaron Copley
@AaronCopley /usr/localnie wchodziło w zakres tego pytania. Ale jest przeznaczony do oprogramowania innych firm, które lokalny administrator kompiluje i instaluje.
Michael Hampton
Dlatego zapytałem, czy można to uznać za dyskretne.
Aaron Copley,
2

Instalujesz biblioteki w <prefix>/lib, pliki binarne w <prefix>/bin, pliki nagłówka w <prefix>/include, strony man w prefix/[share/]man, pliki pkgconfig w <prefix>/lib/pkgconfiglub <prefix/share/pkgconfig, twoje pliki cmake .m4 w<prefix>/share/aclocal

Następnie pozwól menedżerowi pakietu zdecydować o prefiksie. Jeśli sam dystrybuujesz rpm / deb, /usrto dobry wybór na prefiks.

./configure --prefix=~/.local/ Powinien nadal działać, więc proszę, nie nigdzie nie wpisuj swojej ścieżki na stałe!

Niektóre biblioteki są zapakowane w inne narzędzie, które sprawia, że ​​są one również uruchamialne i użyteczne jako biblioteka, ale nadal są bibliotekami, a nie w $ PATH, więc myślę, że można je umieścić w / lib.

Jens Timmerman
źródło
1

Sugeruję, aby unikać instalowania aplikacji w / opt. Powód 1: Niektóre dystrybucje domyślnie nie mają opcji / opt Powód 2: / usr / lib to standardowa ścieżka do bibliotek {Jeśli inne aplikacje muszą korzystać z biblioteki, musisz ręcznie dodać ścieżkę biblioteki do / etc / ldconfig} / opt jest wygodniejszy, gdy masz samodzielne aplikacje, które instalujesz ręcznie i chcesz wiedzieć, gdzie się znajdują

Jednym z powodów, dla których w pełni rozwinięte pliki wykonywalne znajdują się w katalogu / usr / lib, może być to, że są one używane z innych skryptów. {Na przykład skrypty bash nie mogą bezpośrednio korzystać z interfejsu API. z tego powodu powszechną sztuczką jest budowanie „otoki” wokół tego interfejsu API i wypychanie parametrów jako argumentów skryptu}

Nikolaidis Fotis
źródło
2
Nie zgadzam się. Jeśli chce zainstalować w / opt, menedżer pakietów utworzy katalog, więc nie stanowi to problemu. Również pliki binarne zainstalowane w / usr / lib to zły pomysł.
Walter,
Dzięki @Nikolaidis Fotis. Ale w moim przypadku moja aplikacja nie zawiera biblioteki publicznej i nie będzie używana przez inne aplikacje.
Eric MORAND
0

Zainstaluj go w / opt.

Zbyt wiele aplikacji Linuksa sprawia, że ​​programiści Windowsa robili to samo w latach 90-tych.

Zainstalujmy nasze rzeczy w C: \ windows, aby było to łatwe i łatwe do znalezienia (i nieco szybciej). Potem przyszło 15 lat piekła DLL, ponieważ różne pakiety oprogramowania wymagały różnych wersji tych samych bibliotek (które w systemie Windows nie miały wersji bibliotek).

O ile nie piszesz rzeczywistego oprogramowania systemowego, włącz / opt, aby ludzie mogli lepiej śledzić, kto co zainstalował.

Walter
źródło
4
To nie jest Windows. Mamy menedżerów pakietów, którzy działają i to naprawdę nie jest duży problem.
Michael Hampton
Jeśli naprawdę martwisz się tym, że wszystko jest w tym samym drzewie, sprawdź menedżera pakietów Nix . Najlepsze z obu światów, jeśli mnie pytasz.
TheSola10