W przypadku oprogramowania, którego potrzebujesz, użyj katalogu domowego zamiast /usr/local.
Zamiast zmieniać własność /usr/locallub uruchamiać polecenia jako root, gdy nie chcesz, powinieneś po prostu skonfigurować swoje kompilacje, aby instalowały się w twoim katalogu domowym zamiast /usr/local. Rozwiązuje to wszystkie potencjalne problemy ze zmianą własności /usr/local, w tym sposób, w jaki jej bini sbinpodkatalogi są na rootdrodze.
Jeśli musisz zezwolić innym użytkownikom na uruchamianie twojego oprogramowania, możesz dać im dostęp. W rzeczywistości prawdopodobnie będą już w stanie to zrobić, ponieważ domyślnie twój katalog domowy ma dozwolony dostęp do odczytu i wykonywania . (Jeśli tego nie chcesz, możesz to dość łatwo zmienić, po prostu używając chmoddowolnych plików lub katalogów, które chcesz ustawić jako prywatne, i ewentualnie również zmieniając swój umask.)
Po zainstalowaniu oprogramowania w katalogu domowym, pliki binarne, które zostałyby wprowadzone, /usr/local/binwejdą zamiast niego . Otrzymasz inne podkatalogi swojego katalogu domowego odpowiadające podkatalogom tego , którego potrzebuje zainstalowane oprogramowanie. Zwykle dzieje się to automatycznie po zainstalowaniu oprogramowania z kodu źródłowego./home/username/bin/usr/local
Konfigurowanie twoich kompilacji
Większość oprogramowania tworzonego z kodu źródłowego ma jeden etap:
./configure
W zdecydowanej większości oprogramowania dostarczanego ze configureskryptem, który można uruchomić w ten sposób, domyślnie konfiguruje się kompilację do instalacji wewnątrz, /usr/localgdy w końcu uruchomisz ją, sudo make installaby ją zainstalować. Powodem jest to, że jest to domyślnie równoważne z uruchomieniem:
./configure --prefix=/usr/local
Aby skonfigurować kompilację do instalacji w katalogu domowym, użyj tego zamiast:
./configure --prefix="$HOME"
W praktyce w Ubuntu ścieżki do katalogu domowego nie zawierają spacji, innych białych znaków ani innych znaków, które będą traktowane specjalnie przez powłokę, np. *Chyba że skonfigurujesz konto użytkownika dość dziwnie, możesz po prostu wpisać:
./configure --prefix=$HOME
(Nie polecam jednak przyzwyczaić się do pisania skryptów . Ponadto w niektórych innych systemach operacyjnych - takich jak macOS - rzadziej ścieżki do katalogów domowych użytkowników zawierają spacje).
Lub jeśli wolisz, możesz wpisać pełną ścieżkę do katalogu domowego:
./configure --prefix=/home/username
( usernameOczywiście zamień na swoją rzeczywistą nazwę użytkownika. Jeśli z jakiegoś powodu twojego katalogu domowego nie /homema, będziesz musiał odpowiednio dostosować.)
Instalowanie twoich kompilacji
Po uruchomieniu makemożesz być przyzwyczajony do uruchamiania sudo make install, ale podczas instalacji we własnym katalogu domowym nie musisz uruchamiać go jako root, więc możesz - i powinieneś - usiąść sudo. Po prostu biegnij:
make install
Podobnie w przypadku oprogramowania obsługującego uninstallcel:
make uninstall
Właśnie o to prosiłeś ... nie w twoim katalogu domowym /usr/local.
Uruchamianie programów
Prawdopodobniebin podkatalogu katalogu domowym jest:
- już w swojej
$PATH, lub
- będzie w twoim,
$PATHjeśli wylogujesz się i wrócisz.
Powodem jest to, że .profileplik w katalogu domowym, który zawiera polecenia uruchamiane podczas logowania, zawiera go domyślnie dla kont użytkowników utworzonych w większości wersji Ubuntu (w tym początkowego konta administratora utworzonego podczas instalacji systemu operacyjnego):
# set PATH so it includes user's private bin if it exists
if [ -d "$HOME/bin" ] ; then
PATH="$HOME/bin:$PATH"
fi
Ten kod działa, gdy się logujesz (ponieważ jest .profile) i umieszcza Twój osobisty binkatalog $PATH tylko wtedy, gdy istnieje. Dlatego może być konieczne wylogowanie się i ponowne zalogowanie.
Starsze wersje, takie jak Ubuntu 14.04, a także nowsze wersje, takie jak Ubuntu 17.10, mają tę funkcję . Jednak Ubuntu 16.04, które jest prawdopodobnie najpopularniejszą wersją tego pisma, ma to zamiast tego:
# set PATH so it includes user's private bin directories
PATH="$HOME/bin:$HOME/.local/bin:$PATH"
To po prostu dodaje binpodkatalog twojego katalogu domowego ---, a także .local/binpodkatalog - do twojego $PATH, bez sprawdzania, czy te katalogi faktycznie istnieją. Jeśli więc korzystasz z wersji 16.04 lub zaktualizowałeś system z wersji 16.04, kiedy Twoje konto użytkownika zostało utworzone, wtedy binpodkatalog twojego katalogu domowego jest już prawdopodobnie w twoim katalogu $PATH.
Twój .profileplik jest kopiowany z /etc/skelkatalogu podczas tworzenia konta użytkownika. Jeśli twoje konto użytkownika zostało utworzone w starszej wersji Ubuntu, otrzymało tę wersję .profilei nie zostało zmienione - dla twojego konta użytkownika - przez uaktualnienie do nowszej wersji.
Gdy binpodkatalog twojego katalogu domowego będzie już w twoim $PATH, będziesz mógł uruchamiać programy, których pliki wykonywalne są tam instalowane, po prostu wpisując ich nazwy, tak jak w przypadku programów zainstalowanych przez menedżera pakietów Ubuntu lub zainstalowanych wewnątrz /usr/local.
.localOption
Być może zauważyłeś, że domyślny .profileplik dla kont użytkowników utworzonych w niektórych wersjach Ubuntu, w tym w 16.04, jak opisano powyżej, dodaje nie tylko $HOME/bintwojej ścieżce, ale także $HOME/.local/bin. Jeśli .profilenie dodajesz tego, ale chcesz , możesz to po prostu edytować.
Choć często używane do przechowywania ustawień i danych w pamięci podręcznej , można również zainstalować oprogramowanie w .localpodkatalogu katalogu domowego. Powinieneś czuć się nieskrępowany, ponieważ z punktu widzenia użyteczności i bezpieczeństwa --prefix="$HOME/.local"jest podobny --prefix="$HOME".
Pamiętaj, że pliki i katalogi, które zaczynają się od, .nie są domyślnie wyświetlane w graficznych przeglądarkach plików (użyj Ctrl+, Haby je odkryć i ukryć) lub w lspoleceniu (przekaż flagę -Alub, -aaby je pokazać). To może nie być to, czego chcesz lub może być dokładnie to, czego chcesz. Jest to kwestia osobistych preferencji.
Zauważyłem jednak, że niektóre zautomatyzowane menedżery pakietów oparte na źródłach, które budują i instalują oprogramowanie w swoim katalogu domowym $HOME/.local. Nie wiem, jak często to się dzieje - mam nadzieję, że zbadam dalej i zaktualizuję tę odpowiedź - ale możesz chcieć używać tylko $HOMEdo rzeczy, które kompilujesz ręcznie. W ten sposób będzie jasne, skąd się wzięły rzeczy. A jeśli dojdzie do kolizji, oprogramowanie nadal prawdopodobnie będzie akceptowalnie współistnieć.
Możesz również celowo zainstalować niektóre oprogramowanie $HOME/.locali inne oprogramowanie w $HOME. To zależy od Ciebie. Którykolwiek binkatalog pojawi się jako pierwszy w $PATHzmiennej środowiskowej, to ten, z którego uruchomione zostanie polecenie, w przypadku, gdy w obu występują polecenia o tej samej nazwie.
Podziękowania należą się Zanna i Videonauth za wskazanie błędów w poprzedniej wersji tej odpowiedzi, dotyczących tego, które wersje Ubuntu mają domyślny kod .profile, oraz pomoc w ich poprawieniu (patrz także tutaj ).