将软件包安装到本地目录?

我想安装软件包,类似于apt-get install 但是:

  1. 没有sudo ,和
  2. 进入本地目录

本练习的目的是隔离我的持续集成服务器中的独立构建。

我不介意从源代码编译,如果这是需要的,但显然我更喜欢最简单的方法。 我试过像这里提到的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依赖系统。

有两种解决方案:

  1. 安装源包,更改到源目录,配置和安装包,无论包装系统是否手动到您选择的目录。

     apt-get source  

    这不需要root,下载包源,将其解压缩到当前目录中的目录中。 然后,您可以切换到该目录,修改源,将安assembly置到另一个目标等。

    但是,配置程序应该到哪个安装目录取决于特定程序。 许多程序使用./configure --prefix localdir将安装目标定位到localdir; 但到目前为止并非总是如此。

  2. 创建一个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)"