2014-02-11 26 views
13

Ich bekomme meine Füße nass mit SaltStack. Ich habe meinen ersten Zustand (ein Vim-Installer mit einer statischen Konfiguration) gemacht und arbeite an meinem zweiten.Salzstapel für "configure make install"

Leider gibt es kein Ubuntu-Paket für die Anwendung, die ich meinen Zustand installieren möchte. Ich werde die Anwendung selbst erstellen müssen. Gibt es eine "Best Practice" für die Installation von "configure-make-install" Installationen mit Salt? Oder sollte ich nur cmd verwenden?

Insbesondere dann, wenn ich es von Hand zu tun, würde ich etwas entlang der Linien von tun:

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 
+0

auch https://github.com/SS-archive/salt-states/blob/master/small/ruby-1.9.2/init.sls – Paolo

Antwort

21

Es gibt staatliche Module zu abstrahieren die ersten beiden Zeilen, wenn Sie es wünschen.

Aber Sie könnten auch nur die Befehle auf dem Zieluntergebener (en) ausführen.

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 

So stellen Sie sicher, dass ein unless Argument enthält das Skript idempotent zu machen.

Alternativ können Sie ein Bash-Skript an den Diener verteilen und ausführen. Siehe: How can I execute multiple commands using Salt Stack?

Wie für best practice? Ich würde empfehlen, fpm zu verwenden, um ein .deb- oder .rpm-Paket zu erstellen und das zu installieren. Zumindest kopieren Sie diesen Tarball zum Salzmeister und verlassen Sie sich nicht auf externe Ressourcen, um in drei Jahren da zu sein.

+0

Guter Punkt über externe Ressourcen. Ich werde wahrscheinlich einen Nginx-Server auf dem Master einrichten, um die Ressourcen zu spiegeln, die ich brauche. Danke für deine Vorschläge! – nomen

+2

Ihre außer-Klausel funktioniert nicht wie erwartet. Es sollte ein einfacher String-Eintrag statt einer Liste sein. Es gibt derzeit immer True zurück. –

+0

Behoben. Danke @TavisRudd –

9

Angenommen, foo-3.4.3.tar.gz wird in GitHub eingecheckt. Hier ist ein Ansatz, den Sie in Ihrer Statusdatei verfolgen könnten:

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 

Ihre Konfiguration prefix Standort als salt pillar weitergegeben werden kann. Wenn der Build-Prozess komplizierter ist, sollten Sie eine custom state schreiben.

Verwandte Themen