Jak zainstalować program lokalnie bez uprawnień sudo?


73

Załóżmy, że mam dostęp ssh do niektórych serwerów Ubuntu jako użytkownik i potrzebuję niektórych nie systemowych narzędzi do zainstalowania dla wygody (mc, rtorrent, mcedit). Nie chcę niepokoić administratorów tymi małymi programami.

Czy istnieje sposób ich zainstalowania (uruchomienia) bez użycia czegoś takiego sudo apt-get install?



Zobacz także Gdzie należy umieścić lokalny plik wykonywalny? do odpowiedniej dyskusji.
George M



Odpowiedzi:


33
  1. Skompilować i zainstalować na ~/bin(i edytować .bashrc, aby ustawić PATHwłączenie go). biblioteki można podobnie kompilować i instalować w ~/lib(ustawiać, LD_LIBRARY_PATHaby wskazywały na to), a nagłówki programistyczne można instalować np ~/includes. w.

  2. W zależności od szczegółowych informacji o programach, które chcesz zainstalować i bibliotekach, od których są zależne, możesz pobrać pliki .deb i użyć „ dpkg-deb -x”, aby wyodrębnić je pod katalogiem domowym. Następnie będzie dużo „zabawy” ustawienie PATH, LD_LIBRARY_PATHi inne variables. Im bardziej złożony program lub aplikacja instalujesz, tym więcej zabawy będziesz gotowy :)

    Oczywiście nie będziesz w stanie instalować setuidplików binarnych w ten sposób - zostaną one zainstalowane, ale (ponieważ nie masz uprawnień, aby chown je rootować lub ustawić setuidna nich bit), będą to zwykłe pliki binarne, których właścicielem jesteś .

    Podobnie demony i usługi systemowe, które spodziewają się działać jako pewne UIDlub mają możliwość zmiany identyfikatora użytkownika lub oczekują, że pliki będą się /etcpojawiać ~/etcitd., Prawdopodobnie nie będą działać dobrze, jeśli w ogóle.

  3. Większość sysadminów uważa mci mceditjest „w większości nieszkodliwymi”, nieszkodliwymi programami.

    Jednak niewielu uważa, że ​​zainstalowanie klienta torrent jest nieszkodliwe, zwłaszcza jeśli będą musieli zapłacić za przepustowość lub ostatecznie ponosić prawną odpowiedzialność. Większość sysadminów prawdopodobnie nie byłaby zadowolona, ​​gdyby użytkownicy końcowi instalowali takie oprogramowanie bez pozwolenia. Mogą powiedzieć „pewnie, śmiało, powalić się” lub mogą nie… ale powinieneś zapytać o wszystko, co może powodować problemy dla właścicieli / administratorów maszyny.


Słyszałem, że ustawienie LD_LIBRARY_PATHto zły hack . Czy dotyczy to również tutaj, czy też źle zrozumiałem?
Will Vousden,

1
Obowiązują wszystkie problemy z ustawieniem LD_LIBRARY_PATH. tak, to jest lub może być zły hack. czasami złe hacki są konieczne do osiągnięcia określonych celów ... kluczową rzeczą przy łamaniu „zasad” jest ich znajomość na tyle dobrze, aby wiedzieć, od czego mają cię ocalić, i dokładnie, dlaczego musisz je złamać w tym konkretnym przypadku oraz jakie są lub mogą być ryzyka.
cas

Musiałem tylko zainstalować niezależny program (powiększenie), więc najpierw wypróbowałem drugą opcję ( dpkg-deb -xdo lokalnego katalogu ). Działa jak urok. Nie musiałem robić żadnych LD_LIBRARY_PATHhacków. Nawet gdybym musiał, zrobiłbym to w tym samym wierszu poleceń, aby nie wpływać na ustawienia globalne (na przykład $ LD_LIBRARY_PATH=/home/usr1/zoom/opt/zoom:/home/usr1/zoom/opt/zoom/zoom ZoomLauncher).
Antony

musisz ustawić LD_LIBRARY_PATH, tylko jeśli jeden lub więcej pakietów, które chcesz zainstalować, zawiera biblioteki współdzielone. Jeśli to tylko pliki wykonywalne i dane, dokumenty i pliki konfiguracyjne itp., Może korzystać z bibliotek systemowych.
cas

50

Musisz je skompilować ze źródła. To po prostu kwestia

apt-get source PACKAGE
./configure --prefix=$HOME/myapps
make
make install

Plik binarny byłby wówczas zlokalizowany w ~/myapps/bin. Tak, dodaj export PATH="$HOME/myapps/bin:$PATH"do .bashrcpliku i załaduj .bashrcplik source ~/.bashrc. Oczywiście zakłada to, że gcc jest zainstalowany w systemie.


6
Co z zależnościami? Czy istnieje sposób, aby obsłużyć je automatycznie bez uruchamiania tego samego kodu dla każdego z nich?
yura

1
@yura nie musisz tego zrobić sam.
Ulrich Dangel

Co jeśli nie masz uprawnień, aby to zrobić? Czy zwykle masz uprawnienia do kompilowania oprogramowania bez dostępu do sudo / root?
Freedo,

5

Możesz użyć JuNest , który tworzy mały kontener Linux w katalogu użytkownika, w którym możesz zainstalować dowolne pakiety.


0

Napotkałem ten sam problem, oto jak szybko go naprawiłem, zakładając, że masz serwer Linux z tym samym systemem operacyjnym i architekturą.

  1. Zainstaluj oprogramowanie w kontrolowanym systemie

  2. Znajdź przykładowy plik wykonywalny which pythoni skopiuj go~/

  3. Skopiuj biblioteki za pomocą:

    ldd "$(which python)"  | grep "=> /" | awk '{print $3}' | xargs -I '{}' cp -v '{}' ~/
    

Przenieś plik wykonywalny i biblioteki do innego systemu, w którym masz tylko lokalne uprawnienia, a następnie uruchom następujące czynności:

mkdir ~/lib
export PATH="$PATH:~/lib"
export LD_LIBRARY_PATH=~/lib:/lib:/usr/lib

Spowoduje to utworzenie folderu ~/libdo przechowywania bibliotek, dodanie go do ścieżki i powiedzenie LD, aby przejrzał tam biblioteki, więc po prostu dodaj pliki wykonywalne i biblioteki, teraz możesz uruchomić go tak, jak gdzie indziej

Może to być bardzo hackerskie, ale jest bardzo przenośne, szybkie i jeszcze nie znalazłem czegoś, czego nie mogę uruchomić w ten sposób, oczywiście, oprogramowanie nie może próbować robić rzeczy, które wymagają dostępu do roota, takich jak powiązanie z dolnym portem niż 1024 itd.


-1

Mam taki sam problem jak ty. Jeszcze tego nie próbowałem, ale wydaje się, że Linuxbrew może być przydatny w tej kwestii.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.