【问题标题】:Saltstack for "configure make install"Saltstack 用于“配置 make install”
【发布时间】:2014-02-11 19:15:03
【问题描述】:

我被 SaltStack 弄湿了。我已经完成了我的第一个状态(具有静态配置的 Vim 安装程序),我正在处理我的第二个状态。

不幸的是,没有我想要在我的州安装的应用程序的 Ubuntu 软件包。我将不得不自己构建应用程序。是否有使用 Salt 进行“configure-make-install”类型安装的“最佳实践”?还是我应该只使用 cmd?

特别是,如果我是手工做的,我会做一些类似的事情:

wget -c http://example.com/foo-3.4.3.tar.gz
tar xzf foo-3.4.3.tar.gz
cd foo-3.4.3
./configure --prefix=$PREFIX && make && make install

【问题讨论】:

标签: salt-stack


【解决方案1】:

如果您愿意,可以使用状态模块来抽象前两行。

但您也可以只在目标 minion(s) 上运行命令。

install-foo:
  cmd.run:
    - name: |
        cd /tmp
        wget -c http://example.com/foo-3.4.3.tar.gz
        tar xzf foo-3.4.3.tar.gz
        cd foo-3.4.3
        ./configure --prefix=/usr/local
        make
        make install
    - cwd: /tmp
    - shell: /bin/bash
    - timeout: 300
    - unless: test -x /usr/local/bin/foo

只需确保包含 unless 参数以使脚本具有幂等性。

或者,将 bash 脚本分发给 minion 并执行。看: How can I execute multiple commands using Salt Stack?

至于best practice?我建议使用fpm 创建一个 .deb 或 .rpm 包并安装它。至少,将 tarball 复制到 salt master,三年后不要依赖外部资源。

【讨论】:

  • 关于外部资源的要点。我可能会在 master 上设置一个 nginx 服务器来镜像我需要的资源。感谢您的建议!
  • 你的 unless 子句不会像你期望的那样工作。它应该是一个纯字符串条目而不是一个列表。它目前总是返回 true。
  • 已修复。谢谢@TavisRudd
  • +1 在使用 fpm 打包二进制文件时,尤其是当您在 EC2 或其他云中运行时。如果您使用的是长期运行的实例,那么在您的第一次盐跑过程中多花一两分钟也没关系,但如果您在 ec2 中运行短期运行的实例,您肯定不会不想一遍又一遍地为编译时间付费。
【解决方案2】:

假设foo-3.4.3.tar.gz 已签入 GitHub。您可以在状态文件中采用以下方法:

git:
  pkg.installed

https://github.com/nomen/foo.git:
  git.latest:
    - rev: master
    - target: /tmp/foo
    - user: nomen
    - require:
      - pkg: git

foo_deployed:
  cmd.run:
    - cwd: /tmp/foo
    - user: nomen
    - name: |
        ./configure --prefix=/usr/local
        make
        make install
    - require:
      - git: https://github.com/nomen/foo.git

您的配置prefix 位置可以作为salt pillar 传递。如果构建过程比较复杂,可以考虑写一个custom state

【讨论】:

  • 我有一个类似的问题,make install 需要一个二进制文件(golang),该二进制文件之前安装了一个公式。问题是 PATH 没有重新加载,make 找不到新安装的二进制文件。这可以使用状态或公式来解决吗?
猜你喜欢
  • 2017-06-18
  • 1970-01-01
  • 1970-01-01
  • 2016-06-07
  • 2023-03-30
  • 1970-01-01
  • 2012-09-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多