Piszę pakiet dla czegoś, co wymaga ustawienia zmiennej środowiskowej w celu poprawnego wykonania. Czy krok instalacji menedżera pakietów powinien zmodyfikować środowisko użytkownika, czy po prostu zachęcić użytkownika do zrobienia tego sam? Moja intuicja byłaby tym drugim, ale widzę argumenty za tym pierwszym.
installer
environment
package-managers
David Cowden
źródło
źródło
.bashrc
mi się, że byłoby to lepsze niż pakowanie hacków lub mieszanie z nimi .bash
? Dostępnych jest wiele alternatywnych powłok z szeroką gamą plików startowych. Poważnie sugeruję znalezienie tutaj alternatywnego rozwiązania.tomcat
który potrzebuje kilku zmiennych środowiskowych do poprawnego działania; wszystkie są ustawione przez skrypt startowy, który jest uruchamiany zamiast bezpośredniego uruchamiania jego pliku binarnego.Odpowiedzi:
Ani. Instalatorzy pakietów nigdy nie powinni dotykać niczego w katalogu domowym dla konta, którego pakiet nie jest właścicielem. Pakiety powinny się również konfigurować tak, aby po ich zainstalowaniu były użyteczne bez specjalnego wysiłku ze strony użytkownika. (Są wyjątkowe przypadki, w których nie chcesz tego robić, ale jest ich niewiele i są bardzo odległe).
Środowiska Unixy mają miejsce na umieszczanie plików konfiguracyjnych, które są odczytywane za każdym razem, gdy użytkownik uruchamia powłokę logowania. W przypadku powłok Bourne i C możesz wstawić swoją konfigurację odpowiednio do
/etc/profile
i/etc/csh.cshrc
. (Nie zapomnij go usunąć podczas odinstalowywania).Wiele systemów obsługuje to także przy użyciu pojedynczych plików, co ułatwia dodawanie i usuwanie fragmentów konfiguracji bez konieczności upuszczania tekstu w dowolne miejsce w jednym pliku. (Daje to również wszystkie korzyści związane z kontrolą i odpowiedzialnością, które można uzyskać od menedżera pakietów.) Niektóre dystrybucje skonfigurują
/etc/profile
odczyt wszystkich pasujących plików/etc/profile.d/*.sh
.źródło
rc
nazwa skryptu pochodzi od CTSSruncom
(Run Commands), ale od tego czasu rozszerzyła się o inne znaczenia.profile.d
nie jest wbudowany w bash, jest to haczyk zwykle dostarczany z (zwykle podstawy dystrybucji)/etc/profile
. ;)To nie do przyjęcia, aby zmodyfikować użytkownika
/home
strukturę z menadżera pakietów, chyba że modyfikacja jest cały punkt.Główne podejścia do tego są następujące:
/etc/profile.d
. W niektórych systemach Linux, wszystkie skrypty w tym katalogu są pobierane przez domyślną konfigurację powłoki, więc możesz bezpiecznie ustawić tam zmienną.źródło
Pytanie Czy krok instalacji menedżera pakietów powinien zmodyfikować środowisko użytkownika?
Odpowiedź Nie. Zmodyfikowanie danych użytkownika to zły pomysł, w tym przypadku plik .bashrc. Dane użytkownika powinny być uważane za święte przez menedżera pakietów?
Pytanie Czy krok instalacji menedżera pakietów powinien po prostu zachęcić użytkownika do zrobienia tego sam?
Odpowiedź To rozwiązanie jest o wiele smaczniejsze, ale wciąż nie jest idealne.
Myślę, że powinieneś utworzyć skrypt powłoki opakowania, w którym możesz ustawić niezbędne zmienne środowiskowe, a następnie uruchomić plik wykonywalny.
źródło
Tęsknisz za lasem za drzewami. Oczywiście wygodniej jest przeprowadzić zmianę środowiska dla użytkownika, ale jest to również bardziej ryzykowne i nieco inwazyjne. Powinieneś połączyć to, co najlepsze z obu światów, pytając użytkownika, czy instalator powinien je zmodyfikować
.bashrc
, a w przeciwnym razie podaj instrukcje, jak powinien to zrobić sam.źródło
Zakładasz, że „użytkownik” jest liczbą pojedynczą. Co się stanie, jeśli mam tysiące użytkowników w tym systemie?
Zakładasz, że możesz nawet znaleźć katalog domowy użytkownika. Jeśli użytkownikami zarządza się np. Przez LDAP, może nie być możliwe uzyskanie listy wszystkich ważnych użytkowników. Katalogi domowe mogą nie znajdować się w katalogu / home; mogą być dynamicznie montowane z sieci. Katalog domowy użytkownika może być zaszyfrowany, a klucz niedostępny, gdy nie są zalogowani.
Nie ma sposobu, aby zrobić to niezawodnie w każdej możliwej sytuacji. Użyj mechanizmu dystrybucji do ustawiania zmiennych środowiskowych dla użytkowników podczas logowania lub odradzania powłok. Jeśli to nie zadziała, napisz opakowanie. (Opakowanie może również być binarny, jeśli to konieczne, aby rozwiązać ten argument w komentarzach).
źródło
Ustawienie zmiennej globalnej w pakiecie jest dopuszczalne, jeśli jest to zmienna zdefiniowana przez twój projekt (a to oznacza, że nazwa projektu jest częścią nazwy zmiennej!). Nawet wtedy nie powinieneś dotykać
.bashrc
pliku użytkownika - zamiast tego powinieneś dodać skrypt do /etc/profile.d .źródło