将软件包安装到本地目录?
我想安装软件包,类似于apt-get install
但是:
- 没有
sudo
,和 - 进入本地目录
本练习的目的是隔离我的持续集成服务器中的独立构建。
我不介意从源代码编译,如果这是需要的,但显然我更喜欢最简单的方法。 我试过像这里提到的apt-get source --compile
,但我不能让它适用于像autoconf这样的软件包。 我收到以下错误:
dpkg-checkbuilddeps: Unmet build dependencies: help2man
我已经在本地目录中编译了help2man,但我不知道如何通知apt-get。 有任何想法吗?
更新 :我找到了一个几乎可以在https://askubuntu.com/a/350/23678上运行的答案。 chroot
的问题在于它需要sudo。 apt-get source
的问题是我不知道如何解决依赖关系。 我必须说, chroot
看起来非常吸引人。 是否有一个不需要sudo的等效命令?
通常,这是不可行的,因为你会混淆apt依赖系统。
有两种解决方案:
-
安装源包,更改到源目录,配置和安装包,无论包装系统是否手动到您选择的目录。
apt-get source
这不需要root,下载包源,将其解压缩到当前目录中的目录中。 然后,您可以切换到该目录,修改源,将安assembly置到另一个目标等。
但是,配置程序应该到哪个安装目录取决于特定程序。 许多程序使用
./configure --prefix localdir
将安装目标定位到localdir; 但到目前为止并非总是如此。 -
创建一个chroot环境,您将在其中安装软件包:
debootstrap precise myfancyinstall
现在,您已在myfancyinstall /目录中创建了虚拟安装
chroot myfancyinstall
你可以在chroot笼内使用apt-get install来安装你想要的任何东西。
使用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。 恢复正常模式不要忘记“退出”
祝好运。
如果您在具有ssh
访问权限的共享Web主机上但没有apt-get
no 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)"