Як встановити програму локально без привілеїв sudo?


73

Припустимо, у мене є ssh доступ до якогось сервера Ubuntu як користувача, і мені потрібні деякі несистемні інструменти, щоб встановити для зручності (mc, rtorrent, mcedit). Я не хочу турбувати адміністраторів для цих невеликих програм.

Чи є спосіб їх встановити (змусити їх працювати), не використовуючи щось подібне sudo apt-get install?



Також див. Де слід розмістити локальний виконуваний файл? для відповідної дискусії.
Джордж М


Дивіться також Відстеження програм
Gilles

Відповіді:


33
  1. Скомпілюйте та встановіть у нього ~/bin(та відредагуйте його, .bashrcщоб встановити його PATHдля включення) Бібліотеки можна аналогічно компілювати та встановлювати в них ~/lib(встановити їх LD_LIBRARY_PATHна вказівку), а заголовки розробок можна встановлювати, наприклад ~/includes.

  2. Залежно від конкретних деталей програм, які ви хочете встановити, та бібліотек, від яких залежать, ви можете завантажити .deb файли та використовувати ' dpkg-deb -x', щоб витягнути їх під домашній каталог. Потім у вас буде багато «веселощів» встановлюючи PATH, LD_LIBRARY_PATHі інші variables. Чим складніша програма чи програма, яку ви встановлюєте, тим веселіше будете :)

    Ви, звичайно, не зможете встановити setuidдвійкові файли таким чином - вони встановлять, але (оскільки ви не маєте дозволу їх порушувати, щоб викорінити або встановити setuidна них біт), вони будуть просто звичайними бінарними файлами, які належать вам .

    Точно так же, Демони і системні служби, які планують працювати в певному UIDабо має можливість змінити UID, або очікувати , файли , які будуть в /etcдосить ~/etcі так далі, ймовірно, добре працювати, якщо взагалі немає.

  3. Більшість системних адміністраторів буде розглядати mcі mceditбути « в основному невинні», нешкідливі програми.

    Дуже мало хто вважає встановлення клієнт-торента нешкідливим, особливо якщо їм доведеться платити за пропускну здатність або в кінцевому рахунку бути юридично відповідальними. Більшість sysadmins, мабуть, не буде цілком задоволена тим, що кінцеві користувачі встановлюють таке програмне забезпечення без дозволу. Вони можуть сказати «впевнений, іди вперед, вибий себе», а вони не зможуть ... але ви повинні запитати про все, що може спричинити проблеми для власників / адміністраторів машини.


Я чув, що налаштування LD_LIBRARY_PATH- це зла злом . Чи застосовується це і тут, чи я неправильно зрозумів?
Вілл Vousden

1
Усі проблеми з налаштуванням LD_LIBRARY_PATH стосуються. так, це, або може бути, зла злом. іноді злі хаки необхідні для досягнення певних цілей ... Найважливішим, що порушує "правила", - це знати їх досить добре, щоб знати, що вони призначені для того, щоб врятувати тебе, і саме для чого потрібно порушувати їх саме в цьому випадку та які ризики є чи можуть бути.
Cas

Я просто повинен був встановити незалежну програму (масштабування), тому спочатку я спробував 2 - й варіант ( dpkg-deb -xдля локальної директорії). Працював як шарм. Мені не довелося робити жодних LD_LIBRARY_PATHхак. Навіть якщо мені доведеться, я би робив це в тому ж командному рядку, щоб не впливати на глобальні налаштування (наприклад $ LD_LIBRARY_PATH=/home/usr1/zoom/opt/zoom:/home/usr1/zoom/opt/zoom/zoom ZoomLauncher).
Антоній

вам потрібно встановити LD_LIBRARY_PATH лише в тому випадку, якщо один або кілька пакунків, які ви хочете встановити, містять будь-які спільні бібліотеки. Якщо це просто виконувані файли та дані, документи та конфігураційні файли тощо, вони можуть використовувати системні бібліотеки.
cas

50

Скомпілювати їх потрібно з джерела. Це просто повинно бути справою

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

Потім двійковий файл буде розташований у ~/myapps/bin. Так, додайте export PATH="$HOME/myapps/bin:$PATH"в свій .bashrcфайл і перезавантажити .bashrcфайл source ~/.bashrc. Звичайно, це передбачає, що gcc встановлений у системі.


6
А як щодо залежностей? Чи є спосіб обробляти їх автоматично, не запускаючи однаковий код для кожного з них?
Юра

1
@yura, не треба робити це самостійно.
Ульріх Дангель

Що робити, якщо у вас немає привілеїв на це? Як правило, мати дозвіл на збирання програмного забезпечення без доступу sudo / root?
Фредо

5

Ви можете використовувати JuNest , який створює невеликий контейнер Linux в каталозі користувача, куди ви можете встановити будь-які пакунки.


0

Я зіткнувся з тією ж проблемою, ось, як я швидко його виправив, припускаючи, що у вас є Linux-сервер тієї ж ОС та архітектури.

  1. Встановіть програмне забезпечення в системі, якою ви керуєте

  2. Знайдіть виконавчий приклад which pythonта скопіюйте його~/

  3. Скопіюйте бібліотеки:

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

Перенесіть виконуваний файл і бібліотеки в іншу систему, де у вас є лише локальні привілеї, а потім запустіть наступне:

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

Це створить папку ~/libдля зберігання бібліотек, додасть її до свого шляху та скаже LD переглянути бібліотеки там, тож просто додайте свої виконувані файли та бібліотеки там, тепер ви можете запустити її як раніше

Це може бути дуже хакі, але це дуже портативно, швидко, і я ще не знайшов чогось, що не можу запустити таким чином, звичайно, програмне забезпечення не може намагатися робити речі, які потребують кореневого доступу, як прив'язка до нижнього порту ніж 1024 тощо.


-1

У мене така ж проблема, як і у вас. Я ще не пробував цього, але здається, що Linuxbrew може бути корисним у цьому питанні.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.