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


38

我想安装软件包,类似于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上找到了几乎可以使用的答案。问题在于它需要sudo。问题是我不知道如何解决依赖关系。我必须说,看起来吸引人。是否有不需要sudo的等效命令?chrootapt-get sourcechroot


我认为这是这个问题的重复:[ askubuntu.com/questions/147654/... [1]:askubuntu.com/questions/147654/...

7
@kamil,不是。我不是在没有网络访问的情况下尝试安装。我正在尝试在没有sudo系统目录的情况下进行安装。
吉利2012年

4
伙计们,请不要在不解释原因的情况下拒绝我的问题。谢谢。
吉利2012年

如果您在系统上没有root用户,则将无法轻松解决依赖关系。但是,有时这是可能的。您将必须开始从家中的最底层依赖项开始安装软件,并修改LD_PATH以便程序可以找到其库。但是,如果任何软件包都需要root(或suid)才能运行,则您将失败。
1

@January,我正在尝试在自动构建系统中编译软件项目。据我所知,它的依赖项(需要编译)都不需要root。
吉利2012年

Answers:


20

通常,这是行不通的,因为您会弄混apt依赖系统。

有两种解决方案:

  1. 安装源软件包,转到源目录,配置并安装软件包(与打包系统无关),手动将其安装到所选目录中。

    apt-get source <package>
    

    不需要root,下载软件包源,将其解压缩到当前目录下的目录中。然后,您可以转到该目录,对源进行修改,将安装配置为另一个目标,等等。

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

  2. 创建一个chroot环境,您将在其中安装软件包:

    debootstrap precise myfancyinstall
    

    现在,您已经在myfancyinstall /目录中创建了一个虚拟安装。

    chroot myfancyinstall
    

    您可以在chroot笼中使用apt-get install来安装所需的任何东西。


这看起来很有希望。使用apt-get sourceno --compile似乎可以抑制有关未满足依赖项的警告(允许我自己解决)
Gili 2012年

有没有办法以这种方式获取没有源代码的软件包?
soandos 2014年

解决方案(2)不管如何都会起作用。否则,您将独自一人:也许还有另一种安装软件包的方法。或下载deb软件包文件并用ar:解压缩ar vx mypackage.deb。然后分析软件包的内容,并找出如何手动安装。
1

14

使用bash外壳程序并获取“ 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。返回正常模式不要忘记“退出”

祝好运。


dpkg抱怨创建丢失的文件后,它才开始进行段错误修复。
马特·钱伯斯

0

如果您使用的是具有ssh访问权限但apt-get没有root用户权限的共享Web主机或类似的受限制的系统,则以下内容可能对您有用。它在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)"
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.