Correction : vm_hosted : rule_runit_configure .
[lhc/ateliers.git] / vm_hosted
index 46aa6af..9743830 100755 (executable)
--- a/vm_hosted
+++ b/vm_hosted
@@ -7,6 +7,7 @@ while test -L "$tool"
 tool=${tool%/*}
 . "$tool"/lib/rule.sh
 . "$tool"/etc/vm.sh
+export TRACE=1
 
 rule_help () { # SYNTAX: [--hidden]
        local hidden; [ ${1:+set} ] || hidden=set
@@ -35,6 +36,16 @@ rule_git_configure () {
        tool=$(cd "$tool"; cd -)
        sudo ln -fns "$tool"/vm_hosted /usr/local/sbin/
        sudo ln -fns "$tool"/vm_hosted /usr/local/sbin/vm
+       sudo install -m 770 /dev/stdin .git/hooks/post-update <<-EOF
+               #!/bin/sh -efux
+               case \$1 in
+                (refs/remotes/master)
+                       cd ..
+                       git --git-dir=\$PWD/.git checkout -f -B master remotes/master
+                       git --git-dir=\$PWD/.git clean -f -d -x
+                       ;;
+                esac
+               EOF
        )
  }
 rule_git_reset () {
@@ -208,7 +219,7 @@ rule_apache2_configure () {
                 /etc/apache2/site.d/"$site" \
                 /home/www/etc/apache2/"$site"
                test -e /home/www/pub/"$site" ||
-               sudo install -d -m 770 -o www."$site" -g www."$site" \
+               sudo install -d -m 2770 -o www."$site" -g www."$site" \
                 /home/www/pub/"$site"
                getent passwd www."$site" >/dev/null ||
                sudo adduser \
@@ -589,7 +600,7 @@ rule_gitolite_configure () {
                rmdir "$home"/etc/gitolite/"$d"
         done
        rule apt_get_install gitweb highlight
-       #sudo sv restart spawn-fcgi.git.80.git.heureux-cyclage.org
+       #sudo sv restart fcgi.git.80.git.heureux-cyclage.org
        #sudo sv restart git-daemon.git.9418
  }
 rule_locales_configure () {
@@ -711,9 +722,11 @@ rule_mysql_configure () {
        sudo install -m 644 -o root -g root \
            "$tool"/etc/mysql/my.cnf \
            /etc/mysql/my.cnf
-       sudo install -d -m 750 -o mysql -g mysql \
-        /home/mysql
-       sudo service mysql restart
+       if test ! -d /home/mysql; then
+           sudo install -d -m 750 -o mysql -g mysql \
+               /home/mysql
+           sudo -u mysql mysql_install_db --no-defaults --datadir=/home/mysql/
+       fi
  }
 rule_network_configure () {
        sudo install -m 644 -o root -g root /dev/stdin /etc/hostname <<-EOF
@@ -783,7 +796,7 @@ rule_www_configure () {
        sudo install -d -m 750 -o www -g www \
         /home/www/etc
        sudo install -d -m 1771 -o www-data -g www-data \
-        /home/www/pub \
+        /home/www/pub
        sudo install -d -m 1771 -o log.www -g log.www \
         /home/www/log
  }
@@ -1024,6 +1037,7 @@ rule_postfix_configure () {
                abuse: root
                admin: root
                contact: root
+               mailer-daemon: root
                postmaster: root
                root: $(getent group sudo | cut -f 4 -d : | tr , ' ')
                EOF
@@ -1104,10 +1118,20 @@ rule_procmail_configure () {
 rule_runit_configure () {
        rule apt_get_install runit
        local -; set +f
-       rm -f /etc/service/*
-        # NOTE: runsvdir éteindra les services qui n'apparaîtront plus ici.
-       for sv in "$tool"/etc/sv/*
-        do sv=${sv#"$tool"/etc/sv/}
+       for sv in ${1-/etc/service/*}
+        # NOTE: stoppe les services en retenant leur status de départ
+        do sv=$(basename "$sv")
+               local sv_hash=$(printf %s "$sv" | sha1sum | cut -f 1 -d ' ')
+               local sv_status
+               IFS= read -r sv_status_$sv_hash <<-EOF
+                       $(sv status "$sv")
+                       EOF
+               rm -f /etc/service/"$sv"
+        done
+       for sv in ${1-"$tool"/etc/sv/*}
+        # NOTE: configure et (re-)démarre les services
+        do sv=$(basename "$sv")
+               local sv_hash=$(printf %s "$sv" | sha1sum | cut -f 1 -d ' ')
                sudo install -d -m 770 -o root -g root \
                 /etc/sv/"$sv"
                sudo install -m 770 -o root -g root \
@@ -1121,12 +1145,14 @@ rule_runit_configure () {
                         "$tool"/etc/sv/"$sv"/log/run \
                                /etc/sv/"$sv"/log/run
                 fi
-               if test ! -x "$tool"/etc/sv/"$sv"/configure ||
-                       "$tool"/etc/sv/"$sv"/configure
-                then
-                       ln -fns ../sv/"$sv" /etc/service/"$sv"
-                       sv restart "$sv"
-                fi
+               test ! -x "$tool"/etc/sv/"$sv"/configure ||
+               "$tool"/etc/sv/"$sv"/configure
+               ln -fns ../sv/"$sv" /etc/service/"$sv"
+               eval local sv_status=\"\${sv_status_$sv_hash-}\"
+               case $sv_status in
+                ("") sv start "$sv";;
+                (run:*) sv restart "$sv";;
+                esac
         done
  }
 rule_ssh_configure () {