如何使用azkpipe理系统依赖关系?

我正在使用azk ,我的系统依赖于额外的软件包。 我可以安装它们(因为我使用的是基于Ubuntu的镜像):

apt-get -yq update && apt-get install -y libqtwebkit-dev qt4-qmake 

我可以添加这个步骤来提供? 在Azkfile.js ,它看起来像:

 // ... provision: [ "apt-get -yq update", "apt-get install -y libqtwebkit-dev qt4-qmake", "bundle install --path /azk/bundler", "bundle exec rake db:create", "bundle exec rake db:migrate", ] 

或者最好创build一个新的Docker镜像?

配给步骤在独立的容器中运行,因此在configuration步骤之后,其内部生成的所有数据都将丢失,除非您坚持这些步骤。 这就是为什么你可能有bundle文件夹作为持久性文件夹 。

因此,在这种情况下,您应该使用Dockerfile。 它看起来像这样:

 FROM azukiapp/ruby:2.2.2 # or the image you were using previously RUN apt-get -yq update && \ apt-get install -y libqtwebkit-dev qt4-qmake && \ apt-get clean -qq && \ rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* # Keeping the image as small as possible 

之后,你应该编辑你的Azkfile.js并replace你的主系统的image属性来使用创build的Dockerfile (你可以在这里查看azk文档):

 image: { dockerfile: './PATH_TO_DOCKERFILE' }, 

最后,当你运行azk startazk会build立这个Dockerfile,并且在安装你所有的依赖的时候使用它。

提示:如果你想强制azk重build你的Dockerfile,只需要传递-B标志到azk start

看起来您使用的是基于Debian的Linux发行版,您可以创build( https://wiki.debian.org/Packaging )您自己的Debian虚拟软件包( https://www.debian.org/doc/manuals /debian-faq/ch-pkg_basics.en.html#s-virtual )列出了所有依赖的软件包。 如果你只是这样做的话,你可以使用dpkg -i(或者如果你自己托pipe一个自定义的debian仓库,apt-get install)你的自定义软件包,它会通过apt来安装你需要的所有依赖项。

然后,您可以继续学习Debian包中的postinst和prerm脚本( https://www.debian.org/doc/manuals/debian-faq/ch-pkg_basics.en.html#s-maintscripts )。 这将允许您运行bundle和gem这样的命令作为程序包安装的最后一步,也是程序包移除的第一步。

这样做有几个好处:
1.如果你在某个地方托pipe了一个软件包仓库,你可以在一个dynamic扩展环境中使用一种依赖性安装的拉动方法,只需要主机apt-get update && apt-get install custom-dependencies-diego
2.版本控制依赖关系列表 – 使用dpkg -l,你可以知道给定主机上的所有版本,包括你的依赖关系虚拟包的版本。
3.使用prerm脚本,可以确保删除虚拟程序包也会消除安装脚本所做的更改,从而使主机回到“干净”状态。

这样做的缺点是它是debian / apt特定的。 如果你想部署到Slack或RHEL,你必须改变一些东西。 换一个新的发行版并不会特别困难,但它绝对不像使用Bash那样便携。