我将以 tar 文件形式提供的专有程序重新打包为 deb 文件,以便拥有公司范围的存储库。
我使用 reprepro 设置了一个存储库并对其进行了签名。unix 时间戳伪造了版本编号,因此我可以同时安装不同的(真实)版本。几乎所有操作都按预期进行。deb 文件如下所示:mysoft8.0v6_1366455181_amd64.deb
客户端机器上唯一的问题是,它会一遍又一遍地尝试安装相同的 deb 文件,因为它认为这是一个更新。我错过了什么:
deb 包中的控制文件如下所示:
Package: mysoft8.0v6
Version: 1366455181
Section: base
Priority: optional
Architecture: amd64
Installed-Size: 1272572
Depends:
Maintainer: me
Description: mysoft 8.0v6 dpkg repackaging
以及存储库中的配置:/mirror/mycompany.inc/conf/distributions:
Origin: apt.mycompany.inc
Label: apt repository
Codename: precise
Architectures: amd64 i386
Components: main
Description: Mycompany debian/ubuntu package repo
SignWith: yes
Pull: precise
非常感谢帮助
添加指南: 这是我用来创建存储库的指南。
答案1
要同时安装软件的不同版本,需要使用不同的软件包名称而不是不同的版本号;同一时间只能安装一个版本的软件包(通过名称标识)。
例如,假设您需要同时安装 MySoft 7 和 MySoft 8,但也需要在供应商发布小更新时升级每个版本。也许您从要安装的 MySoft 7.0 v6/opt/vendor/mysoft7
和要安装的 MySoft 8.0 v2开始,/opt/vendor/mysoft8
然后您将构建两个包:
Package: mysoft7
Version: 7.0.6
和
Package: mysoft8
Version: 8.0.2
创建mysoft7_7.0.6_amd64.deb
和mysoft8_8.0.2_amd64.deb
。理论上,你可以使用任何你想要的版本方案,但建议遵循Debian 惯例指定版本号时。
然后,如果您由于供应商的上游更改而需要升级任一版本,那么您将构建相关软件包的新版本并更新相关版本号。例如,如果发布了 MySoft 8.0 v3,您现在将构建:
Package: mysoft8
Version: 8.0.3
安装此软件包将自动卸载mysoft8
8.0.2 版本,从而删除已安装的文件mysoft8_8.0.2_amd64.deb
并将其替换为mysoft8_8.0.3_amd64.deb
如果您需要同时安装每个上游版本,则需要为每个版本使用不同的软件包名称。此时,软件包版本号变得无关紧要,您只需使用1.0
。每个版本都需要安装到不同的目录,因为一个文件一次只能由一个软件包拥有。在这种情况下,您必须通过卸载相关软件包来手动清理不需要的旧版本软件。
我不太清楚为什么您当前的 deb 会在已经安装的情况下尝试重新安装(不幸的是,这是您问题的关键!)。它表明apt
认为您的存储库中可用的软件包版本高于已安装的版本。也许版本号的大小令人困惑?/var/log/dpkg.log
应该/var/log/apt/history.log
向您展示发生了什么。