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

Gil*_*ili 54 apt compiling

我想安装软件包,类似于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

Jan*_*ary 24

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

有两种解决方案:

  1. 安装源包,切换到源目录,配置包并手动将包安装到您选择的目录,而不考虑打包系统。

    apt-get source <package>
    
    Run Code Online (Sandbox Code Playgroud)

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

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

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

    debootstrap precise myfancyinstall
    
    Run Code Online (Sandbox Code Playgroud)

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

    chroot myfancyinstall
    
    Run Code Online (Sandbox Code Playgroud)

    您可以在 chroot 笼中使用 apt-get install 来安装您想要的任何内容。


小智 15

使用 bash shell,并获取“package.deb”文件(假设包名称为“package”),您可以运行以下命令来完成您想要的操作 - 安装包,以便您的主目录以相同的方式处理“/ " 将在正常安装中处理。

这是命令:

apt-get download package; dpkg -i --force-not-root --root=$HOME package.deb
Run Code Online (Sandbox Code Playgroud)

您可能会遇到一些错误,例如 $HOME/var/lib/dpkg/lock 丢失,因此只需创建您将从错误中获得的所有丢失文件,然后安装应该可以在没有 sudo 的情况下工作。

请注意,如果“apt-get 下载”不起作用,您可以尝试“apt 下载”或“apitutde 下载包”。

如果两种方法都不起作用,您可以从http://packages.ubuntu.com/手动下载软件包

另一种方法是使用参数 $HOME 运行 chroot 命令,然后以与上述相同的方式安装,但无需 --root=$HOME。该命令会将您带入一个 shell,其中“/”是您当前的 $HOME。返回正常模式不要忘记“退出”

祝你好运。


iol*_*mit 5

ssh如果您使用的是具有访问权限但没有root 等权限的共享网络托管服务apt-get,或者是类似受限制的系统,则以下内容可能适合您。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)"
Run Code Online (Sandbox Code Playgroud)