Как я могу установить пакет без рут-доступа?

У меня нет root-доступа на этой машине.

Я хотел бы знать, есть ли способ загрузить пакеты Ubuntu и установить их без полномочий root?

Наверное по моему ~/bin или же ~/usr/share или что-то типа того? Будет ли это работать?

4 ответа

Решение

Apt не поддерживает это напрямую, но есть способы сделать это.

Одним из них является использование schroot создать некорневую chroot. Это довольно сложный процесс, но вы сможете найти помощь сообщества, так как многие разработчики настраивают среды chroot для компиляции кода.

Второй способ, который я знаю, это установка из пакета.deb. Вы можете загрузить его с веб-сайта или, если он есть в репозиториях Ubuntu, вы можете загрузить его с помощью.

apt-get download package

замещать package с названием пакета

Как только у вас есть вызов файла deb dpkg прямо из командной строки. Следующий пример установит package.deb в ваш домашний каталог.

dpkg -i package.deb --force-not-root --root=$HOME 

Недостаток использования dpkg, подобного этому, заключается в том, что сообщения об ошибках могут быть загадочными; dpkg не разрешает автоматически зависимости и не создает ожидаемую структуру каталогов.

Наконец, вы можете использовать apt-get source Команда для получения источника пакета и настроить его для локальной установки. Обычно это выглядит примерно так:

apt-get source package
cd package
./configure --prefix=$HOME
make
make install

Недостаток этого подхода состоит в том, что вам нужна среда разработки, доступная для этого подхода, чтобы работать вообще, и вы можете скомпилировать десятки пакетов, чтобы разрешить все зависимости.

РЕДАКТИРОВАТЬ:

Как dpkg -i не работает (см. комментарии), я предлагаю эту альтернативу:

dpkg -x package.deb dir

Это извлечет пакет.deb в каталог. Затем вы можете экспортировать путь, где находится двоичный файл. Пока все зависимости двоичного файла установлены, он должен работать как обычно.

Я полагаю, вы хотите установить Jedit. Сначала вы должны найти пакет и скачать его. Я просто беру файл deb из какого-то зеркала и открываю консоль / терминал:

  1. mkdir /tmp/jedit && cd /tmp/jedit - Создает новую директорию в tmp и превращается в него.
  2. wget http://mirrors.kernel.org/ubuntu/pool/universe/j/jedit/jedit_4.3.1.dfsg-0ubuntu1_all.deb - Скачать пакет
  3. ar x jedit_4.3.1.dfsg-0ubuntu1_all.deb или, легко набрать, ar x *.deb - это извлекает содержимое файла
  4. tar xvzf data.tar.gz -- файл data.tar.gz есть все, что вам нужно для выполнения программного обеспечения
  5. usr/bin/jedit открывает редактор
  6. сделанный:-)

Вы можете переместить файлы в какую-то точку вашего домашнего каталога и выполнить их оттуда.

Я написал программу под названием JuJu, которая в основном позволяет иметь очень маленький дистрибутив linux (содержащий только менеджер пакетов) внутри вашего каталога $HOME/.juju.

Это позволяет иметь собственную систему внутри домашнего каталога, доступную через proot, и, следовательно, вы можете устанавливать любые пакеты без прав root. Он будет работать корректно во всех основных дистрибутивах Linux, единственное ограничение - JuJu может работать на ядре Linux с минимальной рекомендуемой версией 2.6.32.

Например, после установки JuJu для установки jedit:

$>juju -f
(juju)$> pacman -S jedit
(juju)> jedit

Я считаю, что в принятом ответе отсутствует конкретный пример. Это полный рабочий пример:

      # - opam (snap, no sudo)
# ref: https://askubuntu.com/questions/339/how-can-i-install-a-package-without-root-access
apt-get download opam
#apt-get download opam_1.2.2-4_amd64
#ls | less
mkdir -p ~/.local
dpkg -x opam_1.2.2-4_amd64.deb ~/.local/bin
export PATH="$HOME/.local/bin:$PATH"
echo 'export PATH="$HOME/.local/bin:$PATH"' >> ~/.bashrc.user

tr ':' '\n' <<< "$PATH"

opam --version

в частности, вам нужно быть осторожным, потому что apt-get download теперь может дать вам .deb с точным именем, которое вы ожидаете.

Обратите внимание, что это обычно также работает:

      # - install the bin then put it in path and restart your bash
mkdir ~/.rbenv
cd ~/.rbenv
git clone https://github.com/rbenv/rbenv.git .

export PATH="$HOME/.rbenv/bin:$PATH"
echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bashrc
echo 'eval "$(rbenv init -)"' >> ~/.bashrc
#    exec $SHELL
#bash

rbenv -v
Другие вопросы по тегам