具有版本限制的apt-get下载


18

我需要用于apt-get download获取.deb文件的特定版本,但不一定要获取确切的版本。.deb依赖项允许使用诸如>=0.3.0和的表达式,我想apt-get download获取与使用此类依赖项下载的版本相同的版本。

总结一下,我要工作的是这样的:

$ apt-get download package='>=0.3.0'

知道如何获得该功能吗?


您为什么不只是从packages.ubuntu.com手动下载软件包
terdon

因为我需要确保下载的软件包与执行“ apt-get install”时将下载的软件包完全相同。我将其合并到cmake扩展脚本中。
mikosz 2013年

Answers:


2

为此,您可以先找出哪个版本是最新版本,并且该最新版本也大于或等于所需的最低版本。然后,您使用下载该版本apt-get download。这是一个执行此操作的脚本(虽然有点丑陋,但您可以理解):

#!/bin/bash

if [ $# -lt 2 ]; then
    echo "Usage: $0 <packagename> <minimum version>"
    exit 1
fi

pkgname="$1"
minversion="$2"

V="0"

for version in `apt-cache madison $pkgname | awk -F'|' '{print $2}'`; do
    echo "Considering $version"
    if dpkg --compare-versions $version ge $minversion; then
        echo "- Version is at least $minversion"
        if dpkg --compare-versions $version gt $V; then
            echo "- This is the newest version so far"
            V=$version
        else
            echo "- We already have a newer version"
        fi
    else
        echo "- This is older than $minversion"
    fi
done

if [ "$V" = "0" ]; then
    echo "There is no version greater than or equal to $minversion"
    exit 1
fi

echo "Selected version: $V"

echo "Downloading"
apt-get download $pkgname=$V
echo "Done"

如果该软件包不存在,则必须添加错误检查,等等。但这包含了核心解决方案。另外,我在这里假设您想要的是至少是特定版本的最新可用软件包。如果您想要的是至少是某个特定版本的最旧的可用软件包,则必须对脚本进行调整,以在找到至少您所需的某个版本后停止搜索。


0

由于您apt-get install确实想要能给您的东西,因此可能值得apt-get install使用自定义档案目录以“仅下载模式” 运行:

-d, --download-only
  Download only; package files are only retrieved, not unpacked or installed.
  Configuration Item: APT::Get::Download-Only.

如何更改档案目录?这是一个配置选项:

FILES
  [...]

  /var/cache/apt/archives/
  Storage area for retrieved package files. Configuration Item: Dir::Cache::Archives.

可以使用以下--option参数临时更改:

-o, --option
  Set a Configuration Option; This will set an arbitrary configuration option. 
  The syntax is -o Foo::Bar=bar.  -o and --option can be used multiple times 
  to set different options.

总结一下:

apt-get install -d -o dir::cache::archives="/some/cache/dir" <package>

这个命令将下载(只有下载,无法安装)相关的.deb文件<package>/some/cache/dir。该目录将包含.deb软件包的文件,其依赖项,锁定文件和“ partial”目录(应为空)。筛选出所需的确切.deb文件应该很简单。


不幸的是,apt-get install需要超级用户访问权限。
mikosz

0

apt-get download还允许您设置目标版本。会不会有帮助?

apt-get download package/testing

评论#1(不能使用注释) -添加参数--print-urisapt-get install不需要root权限(但你必须下载它本身-最好的wget -i file_list中)。


Mikolaj Radwan似乎正在寻找一种可能使用表达式来获取特定版本的方法,以供以后使用脚本。这将只允许下载当前软件包。
Will.Beninger

0

如果没有SU p​​riv,您仍然可以运行apt-cache并与过滤结合使用以获取该信息。使用类似:

在Debian 5上:

apt-cache show <pkg> | head | grep -i version 

在6上您可以使用:

apt-cache show <pkg> | tail | grep -i version

Apt缓存似乎已更改了列表5到6之间的顺序,从而使最新的6位在最后。

请注意,如果您使用此输出时说的是“获取与将使用此类依赖项下载的版本相同的版本”,则如果运行apt-get update(with当然是su privs),或者是否已将其设置为自动运行,并且发生在您收集版本以及运行脚本(该脚本希望安装该版本)之间。

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.