我需要用于apt-get download
获取.deb
文件的特定版本,但不一定要获取确切的版本。.deb
依赖项允许使用诸如>=0.3.0
和的表达式,我想apt-get download
获取与使用此类依赖项下载的版本相同的版本。
总结一下,我要工作的是这样的:
$ apt-get download package='>=0.3.0'
知道如何获得该功能吗?
我需要用于apt-get download
获取.deb
文件的特定版本,但不一定要获取确切的版本。.deb
依赖项允许使用诸如>=0.3.0
和的表达式,我想apt-get download
获取与使用此类依赖项下载的版本相同的版本。
总结一下,我要工作的是这样的:
$ apt-get download package='>=0.3.0'
知道如何获得该功能吗?
Answers:
为此,您可以先找出哪个版本是最新版本,并且该最新版本也大于或等于所需的最低版本。然后,您使用下载该版本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"
如果该软件包不存在,则必须添加错误检查,等等。但这包含了核心解决方案。另外,我在这里假设您想要的是至少是特定版本的最新可用软件包。如果您想要的是至少是某个特定版本的最旧的可用软件包,则必须对脚本进行调整,以在找到至少您所需的某个版本后停止搜索。
由于您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
需要超级用户访问权限。
apt-get download
还允许您设置目标版本。会不会有帮助?
apt-get download package/testing
评论#1(不能使用注释) -添加参数--print-uris
到apt-get install
不需要root权限(但你必须下载它本身-最好的wget -i file_list中)。
如果没有SU priv,您仍然可以运行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),或者是否已将其设置为自动运行,并且发生在您收集版本以及运行脚本(该脚本希望安装该版本)之间。