如果我有以下内容,它可以正常工作:
package {
2klic-certificates>=1.0.3: ensure => installed,
}
但2klic-certificates
来自自定义存储库,我们也有自己的beta版本。所以我也想提出一个上限。我在尝试:
package {
2klic-certificates>=1.0.3<1.1.0: ensure => installed,
}
这将返回错误:
Error: Execution of '/usr/bin/apt-get -q -y -o DPkg::Options::=--force-confold --force-yes install 2klic-certificates>=1.0.3<1.1.0' returned 100: Reading package lists...
Building dependency tree...
Reading state information...
E: Unable to locate package 2klic-certificates>
Error: /Stage[main]/Main/Node[default]/Package[2klic-certificates>=1.0.3<1.1.0]/ensure: change from purged to present failed: Execution of '/usr/bin/apt-get -q -y -o DPkg::Options::=--force-confold --force-yes install 2klic-certificates>=1.0.3<1.1.0' returned 100: Reading package lists...
Building dependency tree...
Reading state information...
E: Unable to locate package 2klic-certificates>
我也试过了:
package {
2klic-certificates>=1.0.3 and <1.1.0: ensure => installed,
}
查看documentation我看不到明确指定最小和最大版本号的选项。这可能吗?
答案 0 :(得分:0)
我将保持开放,因为这个答案不是一个完整的解决方案,而是一个解决方法(已确认适用于基于apt的系统)。
我们可以自由地控制我们的包命名约定,并将其与通配符相结合。例如:
package {
2klic-certificates>=1.0.*: ensure => latest,
}
确保安装1.0部分中的最新软件包。
因此,如果某个节点的版本为1.0.1
且1.0.3
可用且版本为1.1.0
,则上述内容将确保我们的主版本上安装了1.0.3
节点并忽略测试版。
如上所述,这不是一个真正的解决方案,因为您无法始终控制版本的命名约定。它适用于我的初始问题,但如果您想在1.0.1
和1.1.5
之间进行操作,例如它本质上是没用的。
在这种情况下,我建议您查看@MattSchuchard发布的片段