Jaka jest różnica między / etc a / usr / local / etc

24

Rozwijam demona, który musi przechowywać wiele danych aplikacji, i zauważyłem, że w moim systemie (Fedora 15) jest /usr/local/etckatalog.

Zdecydowałem się zainstalować mojego demona /usr/local/bin i potrzebuję miejsca na moje pliki konfiguracyjne.

Nie widziałem tego na Wikipedii . Czy jest to niestandardowe, czy faktycznie jest to standardowe miejsce dla zainstalowanych programów /usr/local/bindo przechowywania plików konfiguracji?

Powodem jest to, że chcę to sprzedać sys-adminom, a zrozumienie czegoś takiego źle nie jest świetną zaletą ...

beatgammit
źródło
2
Czy jest jakiś powód, aby nie poddawać go bezpośrednio /etc/myapp? Gdybym chciał zmienić konfigurację, byłoby to pierwsze miejsce, w którym szukałem.
new123456
@ new123456- Osobiście podoba mi się pomysł przechowywania plików konfiguracyjnych blisko pliku binarnego (np. /usr/local/bin-> /usr/local/etc), ale w tym przypadku wygrywają konwencje.
beatgammit

Odpowiedzi:

24

/usr/localjest zwykle dla aplikacji zbudowanych ze źródła. tzn. instaluję większość moich pakietów za pomocą czegoś takiegoapt , ale jeśli pobiorę nowszą wersję czegoś lub oprogramowania nie będącego częścią mojej dystrybucji, zbudowałbym to ze źródła i umieściłbym wszystko w hierarchii `/ usr / local '.

Pozwala to na oddzielenie od reszty dystrybucji.

Jeśli tworzysz oprogramowanie dla innych, powinieneś je zaprojektować tak, aby można je było instalować w dowolnym miejscu, ale domyślnie powinny to być zwykłe katalogi systemowe określone przez FHS , gdy określają one prefiks /usr( /etc,/usr/bin etc.)

to znaczy /usr/local jest do użytku osobistego, nie powinno to być jedyne miejsce do instalacji oprogramowania.

Zapoznaj się dobrze z FHS i użyj standardowych narzędzi systemu Linux, aby umożliwić zbudowanie i zainstalowanie źródła w dowolnym miejscu, aby twórcy pakietów dla różnych dystrybucji mogli je skonfigurować zgodnie z wymaganiami dotyczącymi ich dystrybucji, a użytkownicy mogą je zainstalować, /usr/local jeśli chcą lub zwykłe katalogi systemowe, jeśli chcą.

EightBitTony
źródło
Tak, myślę, że dostosowywanie jest dobre, ale zastanawiałem się, czy /usr/local/etcjest standardem dla plików konfiguracyjnych dla tego rodzaju programów.
beatgammit
/ usr / local / etc to coś, co mógłbym wybrać, jeśli zbudowałem twojego demona ze źródła, ale / etc to miejsce, które ktoś wybrałby, gdyby spakował twojego demona z Debianem lub Ubuntu.
EightBitTony
4
W rzeczywistości standardy GNU wymagają domyślnego pakietu do ścieżki lokalnej, ponieważ ludzie budujący go ze źródła zwykle nie określają gdzie. Dystrybucje zmienią go na ścieżkę nielokalną podczas pakowania lub kompilacji.
psusi
@ psusi- Dobra uwaga, upewnię się, że ustawię to jako domyślne. Być może wykryję, kiedy moja make install zostanie uruchomiona jako użytkownik root lub zwykły użytkownik. Jeśli root, domyślnie będę to / usr / local, jeśli użytkownik, do katalogu domowego użytkowników. Dodam również ustawienia konfiguracji.
beatgammit
@ EightBitTony- Czy są jakieś inne platformy, które mają różne konwencje? Tworzę już różne skrypty startowe dla różnych platform (upstart, systemd, init).
beatgammit
7

Bardzo krótka odpowiedź

/ etc jest używany przez twój system operacyjny do plików konfiguracyjnych

/ usr / local / etc może być używany do twoich plików konfiguracyjnych przez ciebie i twoje zainstalowane oprogramowanie

AndyM
źródło
4

/usr/local/etcjest rzadko używany w świecie Linuksa. Ale decyzja o tym, czy przechowywać pliki konfiguracyjne /etc, /usr/local/etcczy w jakiejś innej lokalizacji, jest zazwyczaj podejmowana w czasie kompilacji (i często może być zastąpiona przez opcję wiersza poleceń lub zmienną środowiskową). Naprawdę nie ma znaczenia, jaka jest domyślna kompilacja, po prostu upewnij się, że łatwo ją ustawić (zazwyczaj jest to opcja --sysconfdirpo autoconf). Jeśli twój demon jest spakowany dla dystrybucji, plik wykonywalny przejdzie do /usr/sbin(domyślnie w przypadku kompilacji ze źródła /usr/local/sbin) i konfiguracja poniżej /etc.

Pamiętaj, że /etcnie jest to miejsce na „dużo danych aplikacji”. To idzie do /var. Domyślną wartością przy budowaniu ze źródła może być /var/local/mydaemonlub /var/lib/mydaemon; znowu nie ma żadnej silnej konwencji domyślnej przy budowaniu ze źródła. Powinien istnieć sposób na zmianę zarówno domyślnej wartości czasu kompilacji (zwykle za pomocą configure --localstatedir), jak i domyślnej wartości czasu wykonywania (za pomocą ustawienia w pliku konfiguracyjnym, ewentualnie za pomocą opcji wiersza polecenia lub zmiennej środowiskowej).

Gilles „SO- przestań być zły”
źródło
Czy istnieje powód, dla którego /usr/local/etcnie jest używany zbyt często? Podoba mi się pomysł utrzymywania plików konfiguracyjnych na tym samym poziomie systemu plików co plik binarny.
beatgammit
1
@tjameson Nie wiem, czy istnieje jakiś powszechny powód. BSD robi to w ten sposób. Jako administrator, lubię, że wszystkie pliki konfiguracyjne (które muszą być wspierane i kontrolowane zmiany, w przeciwieństwie do rzeczy w bini libi tak dalej, które mogą być ponownie zainstalowany) na żywo w tym samym miejscu.
Gilles „SO- przestań być zły”
1

Jako użytkownik Arch, unikałbym / usr / local alltogether i używałem tylko / etc do konfiguracji. Podczas instalacji ze źródła wolę napisać mały plik PKGBUILD, gdy jestem w nim, i ewentualnie przesłać go do Arch User Repository (AUR), zarówno dla innych, jak i dla mnie na innym komputerze w przyszłości. Sądząc po liczbie pakietów w AUR i szybkości, z jaką są tworzone, nie jestem osamotniony w myśleniu w ten sposób. Zwiększa to szanse dla wszystkich, że pakiet będzie dostępny zamiast instalować go ze źródła i być w stanie uniknąć przestarzałych lokalizacji, takich jak / usr / local.

Debianowi wydaje się również spodobać pomysł zbudowania pakietu źródła zamiast instalowania czegokolwiek w / usr / local, stąd narzędzia takie jak checkinstall .

Utworzenie pakietu źródła, które chcesz zainstalować, byłoby dobrym sposobem na śledzenie, gdzie znajdują się pliki i upewnienie się, że niektóre z nich nie zostaną niekonsekwentnie nadpisane przez inny pakiet lub inny „make install”. Deinstalacja za pomocą polecenia „make uninstall” nie jest dobrym rozwiązaniem. Informacje o tym, która wersja jest zainstalowana, to kolejna rzecz, którą dobrze zarządzają nowi menedżerowie pakietów.

Po prostu całkowicie zrezygnowałbym / usr / local. Nie jest to dobre miejsce do umieszczania czegokolwiek, nie do instalowania pakietów (katalogi systemowe są bardziej odpowiednie) i nie dla użytkowników.

Alexander
źródło