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


73

Предположим, у меня есть ssh-доступ к какому-либо серверу Ubuntu как пользователю, и мне для удобства нужно установить некоторые не системные инструменты (mc, rtorrent, mcedit). Я не хочу беспокоить администраторов для этих небольших программ.

Есть ли способ установить их (заставить их работать), не используя что-то подобное sudo apt-get install?



Также смотрите Где должен быть размещен локальный исполняемый файл? для соответствующего обсуждения.
Джордж М



Ответы:


33
  1. Компиляция и установить в ~/bin(и редактировать , .bashrcчтобы установить , PATHчтобы включить его). библиотеки аналогичным образом могут быть скомпилированы и установлены в ~/lib( LD_LIBRARY_PATHуказать на это), а заголовки разработки могут быть установлены, например, в ~/includes.

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

    Разумеется, вы не сможете установить setuidдвоичные файлы таким образом - они будут установлены, но (поскольку у вас нет прав на их закрепление в root или установку setuidна них прав ), они будут просто обычными двоичными файлами, принадлежащими вам. ,

    Точно так же демоны и системные службы, которые ожидают, что они будут работать как определенные, UIDили имеют возможность изменять uid, или ожидают, что файлы будут /etcскорее ~/etcи так далее, вряд ли будут работать хорошо, если вообще будут работать.

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

    Однако очень немногие считают, что установка торрент-клиента безвредна, особенно если им приходится платить за пропускную способность или в конечном итоге они несут юридическую ответственность. Большинство системных администраторов, вероятно, не будут рады, если конечные пользователи будут устанавливать такое программное обеспечение без разрешения. Они могут сказать: «Конечно, давай, нокаутируй себя», или они не могут ... но вы должны спросить обо всем, что может вызвать проблемы у владельцев / администраторов машины.


Я слышал , что установка LD_LIBRARY_PATHявляется злым хаком . Это применимо и здесь, или я неправильно понял?
Уилл Воусден

1
Все проблемы с настройкой LD_LIBRARY_PATH применимы. да, это, или может быть, злой взлом. иногда злые хаки необходимы для достижения определенных целей ... главное, когда нарушают «правила», это знать их достаточно хорошо, чтобы знать, от чего они спасти вас, и именно поэтому вам нужно нарушать их в данном конкретном случае и каковы риски или могут быть.
Cas

Мне просто нужно было установить независимую программу (масштабирование), поэтому сначала я попробовал второй вариант ( 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, чтобы она смотрела на библиотеки там, так что просто добавьте свои исполняемые файлы и библиотеки туда, теперь вы можете запускать ее, как в другом месте.

Это может быть очень хакерским, но очень портативным, быстрым, и я пока не нашел чего-то такого, что я не могу запустить таким образом, конечно, программное обеспечение не может пытаться делать то, что требует root-доступа, например привязку к нижнему порту чем 1024 и т. д.


-1

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.