【问题标题】:using omnibus build tool to package a full app使用综合构建工具打包完整的应用程序
【发布时间】:2015-10-01 19:53:17
【问题描述】:

所以我的任务是打包一个 Ruby 应用程序。这个想法是消除 apt-get 任何包或 gem install 任何东西的需要。包是包罗万象的。

我已经找到了 Omnibus(也有 fmp-cookery,但它似乎并不为人所知)

我已经弄清楚了综合项目的一般结构,但现在遇到了具体问题:

1) 我有一堆在安装时与 Chef 一起运行的食谱。这些设置了 DB 和 nginx 配置。在目标机器上运行这些的最佳方法是什么?

2) 我在构建脚本中添加了一个捆绑安装行,但现在这重复了我的要求。例如 nokogiri 安装了两次。一次作为我的实际项目 Gem,另一次作为综合的另一个要求。那么我最终得到了 2 个二进制文件,一个在 /#{instal_dir}/embedded/bin 中,一个在 ${install_dir}/embedded/lib/ruby/.../gems 中,有什么办法可以防止这种情况发生吗?

【问题讨论】:

    标签: ruby chef-infra bundler ls gitlab-omnibus


    【解决方案1】:

    构建安装程序比创建厨师食谱要复杂一些。 用户需要为每个模块编写 DSL(这有关于收集工件并将其安装在特定操作系统上的说明)。

    创建综合项目后,请参阅 README 文件以开始使用基础知识。

    有关如何构建自己的 DSL 的详细信息,请参阅此 github 项目。 Gitlab 综合项目为一些模块(如 postgresql 等)提供了 DSL。

    https://gitlab.com/gitlab-org/omnibus-gitlab/tree/master

    在安装程序中嵌入 nginx 模块的示例 DSL 如下所示:

    名称“nginx” default_version "1.9.10"

    依赖“pcre” 依赖“openssl”

    源网址:“http://nginx.org/download/nginx-#{version}.tar.gz”, md5: "64cc970988356a5e0fc4fcd1ab84fe57"

    relative_path "nginx-#{version}"

    构建做 命令 ["./configure", "--prefix=#{install_dir}/embedded", "--with-http_ssl_module", "--with-http_stub_status_module", "--with-http_gzip_static_module", "--with-http_v2_module", "--with-ipv6", “--带调试”, "--with-ld-opt=-L#{install_dir}/embedded/lib", "--with-cc-opt=\"-L#{install_dir}/embedded/lib -I#{install_dir}/embedded/include\""].join(" ") 命令 "make -j #{workers}", :env => {"LD_RUN_PATH" => "#{install_dir}/embedded/lib"} 命令“进行安装” 结束

    【讨论】:

    • 请不要使用称呼(“hi”)、告别词(“regards”)或签名(“Srikar”)。 SO 不是讨论论坛,而是参考书。