每周左右,一个新版本的官方Ubuntu Trusty x64 Vagrant 虚拟基础框出现在 Hashicorp Atlas 上:https ://atlas.hashicorp.com/ubuntu/boxes/trusty64
据推测,为了可重复的一致性,这一切都是自动化的。
我知道有关于如何一般的博客帖子一个流浪底盒可以建,但我更感兴趣的是如何这些箱子都建立。我希望,就像我遇到的 Ubuntu 生态系统的其他部分一样,构建这些盒子的过程都是公开的开源。
更新:
我对 Ubuntu 操作系统安装过程中选择的选项以及在打包盒子之前所做的任何安装后更改特别感兴趣。
使用 Vagrant、Packer 或其他工具将机器打包成一个盒子的细节就不那么重要了。
我遇到了一个问题,一个特定版本的包需要另一个同样是特定版本的包,但 Apt-Get 选择了更新版本的依赖项,然后失败。
我在 Puppet Lab 的 MCollective 和 Nginx Mainline PPA 以及可能的其他软件包中遇到过这种情况,所以我的问题是关于 Apt-Get 依赖项解析的一般方法,但我将使用 Nginx 作为我的示例。
我有一个包镜像(使用 Aptly 构建),其中包含 nginx-full 包的 v1.7.5 及其所有依赖项,以及较新的 v1.7.6 包及其所有依赖项。
如果我执行,apt-get install nginx-full=1.7.5-1+trusty1
则安装失败并显示以下消息:
The following packages have unmet dependencies:
nginx-full : Depends: nginx-common (= 1.7.5-1+trusty1) but 1.7.6-1+trusty1 is to be installed
Run Code Online (Sandbox Code Playgroud)
但是,如果我执行apt-get install nginx-full=1.7.5-1+trusty1 nginx-common=1.7.5-1+trusty1
然后安装成功。
当我在镜像上同时拥有 nginx-common 包的 1.7.5 和 1.7.6 版本并且 nginx-full 包明确指出它需要 1.7.5 的 nginx-common 时,nginx-full 是我请求的包,为什么apt-get还是选择了不兼容的1.7.6版本的nginx-common?
这是dpkg -s nginx-full
安装 1.7.5 后的输出,显示了确切的版本依赖性约束:
Version: 1.7.5-1+trusty1
Depends: nginx-common …
Run Code Online (Sandbox Code Playgroud)