我有沒有root访问权限在这台机器上。
我想知道我是否有办法可以以非 root 身份下载 Ubuntu 软件包并安装吗?
可能是在我的~/bin
或~/usr/share
类似的位置?这样可行吗?
答案1
Apt 不直接支持它,但是有办法实现它:
.deb
方法
apt-get download package_name # replace `package_name` with the name of the package.
dpkg -x package.deb dir
如果deb
不在 Ubuntu 存储库中,apt-get download package_name
则无法工作,但您可以从网站下载它。
这会将.deb
包提取到dir/
。然后您可以导出PATH
二进制文件所在的 。只要安装了二进制文件的所有依赖项,它就应该正常运行。
schroot
方法
另一种方法是使用schroot
创建非 root chroot。这有点涉及过程但是您应该能够找到社区帮助,因为许多开发人员设置了 chroot 环境来编译代码。
apt-get source
方法
最后,你可以使用apt-get source
命令获取包的源并将其配置为本地安装。通常这看起来像:
apt-get source package
cd package
./configure --prefix=$HOME
make
make install
这种方法的缺点是您需要有可用的开发环境才能使这种方法发挥作用,并且您可能会发现自己需要编译数十个包才能解决所有依赖关系。
历史方法
以前可以将package.deb
其安装dpkg
到某人的主目录中。
dpkg -i package.deb --force-not-root --root=$HOME
这样使用的缺点dpkg
是错误消息可能很隐晦;dpkg 不会自动解决依赖关系或创建它期望的目录结构。
答案2
我假设你想安装杰迪特。首先,你必须找到包并下载。我只是拿来自某个镜像的 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
打开编辑器- 完毕 :-)
您可以将文件移动到主目录中的某个位置并从那里执行它们。
答案3
我写了一个程序叫聚巢它基本上允许在你的 $HOME/.junest 目录中拥有一个非常小的 Linux 发行版(仅包含包管理器)。
它允许您通过 proot 访问主目录中的自定义系统,因此,您无需 root 权限即可安装任何软件包。它可以在所有主流 Linux 发行版下正常运行,唯一的限制是 JuNest 只能在推荐的最低版本为 2.6.32 的 Linux 内核上运行。
例如,安装 JuNest 后,要安装 jedit:
$>junest -f
(junest)$> pacman -S jedit
(junest)> jedit
答案4
我发现接受的答案缺乏具体的例子。这是一个完整的工作示例:
# - 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