Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Saltstack for "configure make install"

Tags:

salt-stack

I'm getting my feet wet with SaltStack. I've made my first state (a Vim installer with a static configuration) and I'm working on my second one.

Unfortunately, there isn't an Ubuntu package for the application I'd like my state to install. I will have to build the application myself. Is there a "best practice" for doing "configure-make-install" type installations with Salt? Or should I just use cmd?

In particular, if I was doing it by hand, I would do something along the lines of:

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
like image 515
nomen Avatar asked Feb 11 '14 19:02

nomen


Video Answer


1 Answers

There are state modules to abstract the first two lines, if you wish.

  • file.managed: http://docs.saltstack.com/ref/states/all/salt.states.file.html
  • archive.extracted: http://docs.saltstack.com/ref/states/all/salt.states.archive.html

But you could also just run the commands on the target 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

Just make sure to include an unless argument to make the script idempotent.

Alternatively, distribute a bash script to the minion and execute. See: How can I execute multiple commands using Salt Stack?

As for best practice? I would recommend using fpm to create a .deb or .rpm package and install that. At the very least, copy that tarball to the salt master and don't rely on external resources to be there three years from now.

like image 91
Dan Garthwaite Avatar answered Oct 05 '22 18:10

Dan Garthwaite