![将包安装到本地目录?](https://linux22.com/image/824613/%E5%B0%86%E5%8C%85%E5%AE%89%E8%A3%85%E5%88%B0%E6%9C%AC%E5%9C%B0%E7%9B%AE%E5%BD%95%EF%BC%9F.png)
我想安装软件包,类似于apt-get install <foo>
但:
- 没有
sudo
,并且 - 进入本地目录
这次练习的目的是隔离我持续集成服务器。
如果需要的话,我不介意从源代码编译,但显然我更喜欢最简单的方法。我尝试了apt-get source --compile <foo>
上述方法这里但我无法让它为 autoconf 之类的软件包工作。我收到以下错误:
dpkg-checkbuilddeps: Unmet build dependencies: help2man
我已经在本地目录中编译了 help2man,但我不知道如何通知 apt-get。有什么想法吗?
更新:我找到了一个答案几乎工作于https://askubuntu.com/a/350/23678的问题chroot
是它需要 sudo。的问题apt-get source
是我不知道如何解决依赖关系。我必须说,chroot
看起来非常很有吸引力。是否有不需要 sudo 的等效命令?
答案1
这一般来说是不可行的,因为你会搞乱 apt 依赖系统。
有两种解决方案:
安装源包,切换到源目录,无论打包系统如何,手动配置和安装包到您选择的目录中。
apt-get source <package>
这不需要 root 权限,下载软件包源代码,将其解压到当前目录中的某个目录中。然后,您可以切换到该目录,对源代码进行修改,将安装配置到另一个目标等。
但是,配置程序应该安装到哪个目录取决于具体程序。许多程序使用
./configure --prefix localdir
将安装定位到 localdir;但情况并非总是如此。创建一个 chroot 环境,在其中安装软件包:
debootstrap precise myfancyinstall
现在你已经在 myfancyinstall/ 目录中创建了一个虚拟安装
chroot myfancyinstall
您可以在 chroot 框架中使用 apt-get install 来安装您想要的任何内容。
答案2
使用 bash shell 并获取“package.deb”文件(假设包名是“package”),您可以运行以下命令来完成您想要的操作 - 安装包,以便您的主目录以与“/”相同的方式处理在正常安装中。
这是命令:
apt-get download package; dpkg -i --force-not-root --root=$HOME package.deb
您可能会遇到一些错误,例如缺少 $HOME/var/lib/dpkg/lock,因此只需创建从错误中获取的所有缺失文件,然后安装就可以在没有 sudo 的情况下进行。
注意,如果“apt-get download”不起作用,您可以尝试“apt download”或“apitutde download package”。
如果两种方法都不起作用,你可以手动下载软件包http://packages.ubuntu.com/
另一种方法是运行带有参数 $HOME 的 chroot 命令,然后按照与上述相同的方式进行安装,但不使用 --root=$HOME。该命令将带您进入 shell,其中“/”是您当前的 $HOME。要返回正常模式,请不要忘记“退出”
祝你好运。
答案3
如果你使用的是共享网络托管服务商,有ssh
访问权限但没有apt-get
root 权限等,或者有类似的受限系统,下面的方法可能对你有用。在我使用的系统中,它uname -a
返回了类似SMP Debian 4.9.65-3+deb9u2~bpo8+1 (2017-01-05) x86_64 GNU/Linux
# examples tried on a shared hoster with ssh access but no apt-get no root etc.
# http://mirrors.kernel.org/ubuntu/pool/main/g/gawk/gawk_4.1.3+dfsg-0.1_amd64.deb
# https://github.com/dvorka/hstr/releases/download/1.25/hstr_1.25-1_amd64.deb
debURL="http://mirrors.kernel.org/ubuntu/pool/main/g/gawk/gawk_4.1.3+dfsg-0.1_amd64.deb"
# get the filename only, remove all till last slash "/"
# see http://wiki.bash-hackers.org/syntax/pe#substring_removal
debFile=${debURL##*/}
# change to your desired directory for installation/unpacking; here: $HOME
cd $HOME
# get the .deb file (no dependencies checked or resolved here)
curl -OL $debURL
# unpack only the data part from the .deb file
# see https://en.wikipedia.org/wiki/Deb_%28file_format%29
ar p $debFile data.tar.xz | tar xJv --strip-components=2 -f -
rm -v $debFile # clean up
echo "Done unpacking $debFile into $(pwd)"
答案4
解压 .deb 文件可能适用于您的应用程序,也可能不适用。我的建议是获取源代码并进行编译,然后将其安装在本地文件夹中。这应该是这个问题的通用解决方案。