将包安装到本地目录?

将包安装到本地目录?

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

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

这次练习的目的是隔离我持续集成服务器。

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

有两种解决方案:

  1. 安装源包,切换到源目录,无论打包系统如何,手动配置和安装包到您选择的目录中。

    apt-get source <package>
    

    这不需要 root 权限,下载软件包源代码,将其解压到当前目录中的某个目录中。然后,您可以切换到该目录,对源代码进行修改,将安装配置到另一个目标等。

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

  2. 创建一个 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-getroot 权限等,或者有类似的受限系统,下面的方法可能对你有用。在我使用的系统中,它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 文件可能适用于您的应用程序,也可能不适用。我的建议是获取源代码并进行编译,然后将其安装在本地文件夹中。这应该是这个问题的通用解决方案。

相关内容