Как я могу установить пакет без рут-доступа?
У меня нет 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 из какого-то зеркала и открываю консоль / терминал:
mkdir /tmp/jedit && cd /tmp/jedit
- Создает новую директорию вtmp
и превращается в него.wget http://mirrors.kernel.org/ubuntu/pool/universe/j/jedit/jedit_4.3.1.dfsg-0ubuntu1_all.deb
- Скачать пакетar x jedit_4.3.1.dfsg-0ubuntu1_all.deb
или, легко набрать,ar x *.deb
- это извлекает содержимое файлаtar xvzf data.tar.gz
-- файлdata.tar.gz
есть все, что вам нужно для выполнения программного обеспеченияusr/bin/jedit
открывает редактор- сделанный:-)
Вы можете переместить файлы в какую-то точку вашего домашнего каталога и выполнить их оттуда.
Я написал программу под названием 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