我运行一个Debian Squeeze主机,用来构build一个多语言项目(python,java,php …),并自动生成自定义软件包(debian和RPM)(通过jenkins)
这些Debian软件包的目标分布是Etch,Lenny和Squeeze。 但是我们的项目有一些本地依赖,只能通过DebianRelease + 1仓库(即Lenny + 1 == Squeeze , Squeeze + 1 == Wheezy )。 例如,我们需要Lenny的Squeeze的jetty包,以及挤压的Wheezy的cyrus-imapd-2.4包。 一些额外的信息:
有些软件包,我们可以通过将DebianRelease + 1软件包镜像到我们自己的软件仓库来简单地'手动'回溯。 例如,Squeeze的jetty包在Lenny上运行良好,因为它不需要额外的依赖关系
但是我们确实需要重build一些包。 例如,Wheezy的cyrus-imapd-2.4在Squeeze上有很多不满意的依赖。 所以我们需要在Squeeze中重build它,然后把它上传到我们的回购站。
我需要有一个简单的方法来知道他们是否有任何更新这些额外的软件包(“正常”和“安全”更新)。 我可以编写一个简单的脚本,每周运行一次,从文件中获取一些参数,并生成一个更新报告。 假设文件如下所示:
jetty:squeeze cyrus-imapd-2.4:wheezy
脚本应该像普通用户一样运行,不要搞乱系统aptconfiguration,并发出相应的命令来生成报告。
Debian是否有一些内置的apt-*命令/选项专用于我可以用来编写这个脚本的那种问题? 如果没有,有人可以想到另一个干净的解决scheme,以实现我所需要的?
是。 我为此使用apt-show-versions。 安装如下简单:
# apt-get install apt-show-versions
在我的/etc/apt/apt.conf中有:
APT::Default-Release "unstable";
在/e/a/sources.list中,我有不稳定的,实验性的,有时候还有其他临时回收,例如旧的emacs-snapshot存档。
下面是一个asv实例的最新包的例子:
# apt-show-versions -a xmonad xmonad 0.10.1~darcs20120707-1 install ok installed xmonad 0.10-4+b2 unstable 192.168.10.1:3142 xmonad 0.10.1~darcs20120707-1 experimental 192.168.10.1:3142 xmonad/experimental uptodate 0.10.1~darcs20120707-1
这是一个不稳定和实验性的包的例子,但我只有不稳定的版本:
# apt-show-versions -a zsh zsh 4.3.17-1 install ok installed zsh 4.3.17-1 unstable 192.168.10.1:3142 zsh 5.0.0-2 experimental 192.168.10.1:3142 zsh/unstable uptodate 4.3.17-1
我可以使用apt-show-versions来查看实验中是否有升级:
# apt-show-versions |grep manually| head autogen/experimental *manually* upgradeable from 1:5.16-2 to 1:5.16.2-2 iproute/experimental *manually* upgradeable from 20121001-1 to 20121001-2 iproute-doc/experimental *manually* upgradeable from 20121001-1 to 20121001-2
这也很好,因为它会告诉你在任何回购中不再可用的软件包:
#apt-show-versions |grep -v uptodate |grep "No available" brscan2 0.2.5-1 installed: No available version in archive dfc-depends 1.0 installed: No available version in archive google-chrome-unstable 24.0.1297.0-r162078 installed: No available version in archive