mercredi, juillet 31, 2013

L'ordre est donc le suivant :
- montage des HD sur les rpy.
- création des points de montage
!!!!!!!!!!!!!!!!!! OUPS !!!!!!!!!!!!!! j'ai oublié, il faut faire le vpn avant !!!!!
- définition des glfs
- premier checkout svn de puppet
( - mise en place du cron de mise a jour auto [il faut d'abord que je récupère le script])
- suppression de etckeeper (*)

La définition des glfs est ok, mon problème, c'est la mise en place automatique du tuinnel.
J'étais parti sur un lancement par script.
Je vais quand meme jeter un coup d'oeil pour le configurer dans le service, ça serrait plus pratique si ça marchait dès le run

fait.

mon /var/log est plein.
je vais rajouter des trucs dans monit

cd /var/log && find . -name '*.gz' -delete
cd /var/log && ( FILE=$( ( for f in $( find . -type f ) ; do du $f ; done ) | sort -n | tail -1 | tr -s '\t ' '  ' | cut -f2 -d' ' ) ; test -f "$FILE" && echo >$FILE )

pas encore fait

mardi, juillet 30, 2013

site.pp d'origine

node default {

     $boxap_ssid = "AndroidAP4481"
     $boxap_psk = "1234567890"
     $wlan0_ip = $ipaddress_wlan0

     case $macaddress_eth0 {
     "b8:27:eb:ae:12:1d": {
        $hostn = "palette"
        $domainn = "ppprod.biz"
        $other_domainn = "ppprod2.biz"
        $arpa_domainn = "192.168.2"
        $other_arpa_domainn = "192.168.3"
        $invers_arpa_domainn = "2.168.192"
        $other_invers_arpa_domainn = "3.168.192"
        $eth0_ip = "192.168.2.1"
        $tor_nickname = "6cfdb97abb21"
        $site = "stm"
        $vpn_ip = "10.4.0.2"
        $vpn_other = "10.4.0.1"
        $vpn_other_host_fqdn = "experience.vpn"
        $vpn_other_host = "experience"
        }
     "b8:27:eb:ac:9f:fc": {
        $hostn = "experience"
        $domainn = "ppprod2.biz"
        $other_domainn = "ppprod.biz"
        $arpa_domainn = "192.168.3"
        $other_arpa_domainn = "192.168.2"
        $invers_arpa_domainn = "3.168.192"
        $other_invers_arpa_domainn = "2.168.192"
        $eth0_ip = "192.168.3.1"
        $tor_nickname = "6cfdb97abb9a"
        $site = "tln"
        $vpn_ip = "10.4.0.1"
        $vpn_other = "10.4.0.2"
        $vpn_other_host_fqdn = "palette.vpn"
        $vpn_other_host = "palette"
        }
     }

     service { "reboot":
          ensure     => running,
          hasrestart => false,
          start      => "/bin/true",
          hasstatus  => false,
          status     => "/bin/true",
          require    => Service["monit"],
     }
     exec { "hostname ${hostn}":
          command => "/bin/hostname ${hostn}",
     }

     file { "/etc/hostname":
          content => $hostn,
          require => Exec["hostname ${hostn}"],
     }

     host { localhost:
          ensure => present,
          ip => "127.0.0.1",
          host_aliases => $hostn,
          require => File["/etc/hostname"],
     }

     host { "${vpn_other_host_fqdn}":
          ensure => present,
          ip => "${vpn_other}",
          host_aliases => "${vpn_other_host}",
          require => File["/etc/hostname"],
     }

     cron { "puppet apply":
          command => "mount | grep ':puppet_rpi on /etc/puppet type fuse.glusterfs (rw,' 1>/dev/null || mount /etc/puppet ; cd /etc/puppet && find . -name '*~' -delete ; /usr/bin/puppet apply /etc/puppet/manifests/site.pp",
          user    => root,
          hour    => '1-23/2',
          minute  => 0,
          require => Mount["/etc/puppet"],
     }

     cron { "apt-get update":
          command => "/usr/bin/apt-get update",
          user    => root,
          hour    => '12',
          minute  => 0,
          weekday => 1,
     }

     cron { "apt-get full update":
          command => "apt-get update && apt-get -y upgrade && apt-get -y autoremove && apt-get -y dist-upgrade && rpi-update && reboot",
          user    => root,
          hour    => 0,
          minute  => 0,
          monthday => 1,
     }
     exec { "openvpn between rpi":
          command => "/bin/bash -c 'test -f /var/run/vpn.rpi.pid -a -n \"$( ps -e | grep openvpn | grep $( cat /var/run/vpn.rpi.pid ) )\" || /data/glusterfs/.local/scripts/vpn.rpi start'",
     }


     package { [glusterfs-server,glusterfs-client,monit]:
          ensure => latest,
     }

     service { "glusterfs-server":
          ensure  => running,
          enable  => true,
          require => [ Package[glusterfs-server,glusterfs-client], Exec["openvpn between rpi"] ],
          before  => Service["monit"],
     }

     mount { "/etc/puppet":
          atboot  => false,
          device  => "${vpn_ip}:puppet_rpi",
          ensure  => mounted,
          fstype  => glusterfs,
          require => Service["glusterfs-server"],
          before  => Service["monit"],
     }

     mount { "/usr/local/bin":
          atboot  => false,
          ensure  => mounted,
          device  => "/etc/puppet/scripts",
          fstype  => "none",
          options => "bind",
          require => Mount["/etc/puppet"],
          before  => Service["monit"],
     }

     file { "/etc/puppet/scripts/vpn.rpi.${site}.monit":
          content => template("scripts/vpn.rpi.monit.erb"),
          require => Mount["/etc/puppet"]
     }

     file { "/etc/monit/conf.d/vpn.rpi.monit":
          ensure  => "/data/glusterfs/.local/scripts/vpn.rpi.${site}.monit",
          require => [ Package[monit], File["/etc/puppet/scripts/vpn.rpi.${site}.monit"] ],
          notify  => Service["monit"],
     }
     file { "/etc/monit/monitrc":
          source  => "file:///etc/puppet/modules/common/files/monitrc",
          mode => 0600,
          require => [ Package[monit], File["/etc/monit/conf.d/vpn.rpi.monit"] ],
          notify  => Service["monit"],
     }

     service { "monit":
          ensure  => running,
          enable  => true,
          require => [ Package[monit], File["/etc/puppet/scripts/vpn.rpi.${site}.monit" ] ],
     }

     file { "/etc/rc.local":
          source  => "file:///etc/puppet/modules/common/files/rc.local",
          mode => 0755,
     }

     file { "/etc/network/interfaces":
          content => template("network/interfaces.erb"),
     }
     # notify => Service[reboot],

}

node common inherits default {

     exec { "ping rpi vpn":
          command => "/bin/ping -qc 1 ${vpn_ip}",
          require => Exec["openvpn between rpi"],
     }


     package { [bind9,squid3,privoxy,tor,tor-arm,dnsproxy,iptables]:
             ensure => latest,
     }

     file { "/root/iptables":
          content => template("common/iptables.erb"),
     }


     $anonymous_id = 1000
     $anonymous_user = "anonymous"

     exec { ["/usr/local/bin/gidmod.sh ${anonymous_id} ${anonymous_user}","/usr/local/bin/uidmod.sh ${anonymous_id} ${anonymous_user}"]:
          require => Mount["/usr/local/bin"],
     }
     group { "${anonymous_user}":
           ensure => present,
           gid => "${anonymous_id}",
           require => Exec["/usr/local/bin/gidmod.sh ${anonymous_id} ${anonymous_user}"],
     }

     user { "${anonymous_user}":
           ensure => present,
           uid => "${anonymous_id}",
           gid => "${anonymous_user}",
           home => "/tmp",
           require => [ Exec["/usr/local/bin/uidmod.sh ${anonymous_id} ${anonymous_user}"], Group["${anonymous_user}"] ],
           before  => Exec["do iptables"],
     }

     exec { "do iptables":
          command => "/sbin/iptables-restore
          require => File["/root/iptables"],
     }



     $bind_id = 116
     $bind_user = bind

     exec { ["/usr/local/bin/gidmod.sh ${bind_id} ${bind_user}","/usr/local/bin/uidmod.sh ${bind_id} ${bind_user}"]:
          require => [ Mount["/usr/local/bin"], Package[bind9] ],
     }

     group { "${bind_user}":
           ensure => present,
           gid => "${bind_id}",
           require => Exec["/usr/local/bin/gidmod.sh ${bind_id} ${bind_user}"],
     }

     user { "${bind_user}":
           ensure => present,
           uid => "${bind_id}",
           gid => "${bind_user}",
           require => [ Exec["/usr/local/bin/uidmod.sh ${bind_id} ${bind_user}"], Group["${bind_user}"] ],
           before  => Service["bind9"],
     }

     file { "/etc/bind/zones.rfc1918":
          content => template("common/zones.rfc1918.erb"),
          notify  => Service["bind9"],
          require => [ Package[bind9], Exec["ping rpi vpn"] ],
     }
     file { "/etc/bind/named.conf.options":
          content => template("common/named.conf.options.erb"),
          notify  => Service["bind9"],
          require => [ Package[bind9], File["/etc/bind/zones.rfc1918"] ],
     }

     file { "/etc/bind/db.${domainn}":
          content => template("common/db.domainn.erb"),
     }
     file { "/etc/bind/db.${arpa_domainn}":
          content => template("common/db.arpa_domainn.erb"),
     }
     File["/etc/bind/db.${domainn}","/etc/bind/db.${arpa_domainn}"] {
          ensure => present,
          notify  => Service["bind9"],
          require => File["/etc/bind/named.conf.options"],
     }

     file { "/etc/bind/named.conf.local":
          content => template("common/named.conf.local.erb"),
          notify  => Service["bind9"],
          require => [ Package[bind9], Exec["ping rpi vpn"],
                  File["/etc/bind/named.conf.options",
                        "/etc/bind/db.${domainn}",
                        "/etc/bind/db.${arpa_domainn}"] ],
     }

     file { "/etc/bind":
          mode    => "g+rws",
          group   => "${bind_user}",
          require => Group["${bind_user}"],
     }

     file { "/etc/default/bind9":
          source  => "file:///etc/puppet/modules/common/files/bind9.default",
          require => File["/etc/bind"],
          notify  => Service["bind9"],
     }

     service { "bind9":
          ensure  => running,
          enable  => true,
          require => File["/etc/default/bind9"],
     }

     file { "/etc/dnsproxy.conf":
          source  => "file:///etc/puppet/modules/common/files/dnsproxy.conf",
          notify  => Service["dnsproxy"],
     }
     service { "dnsproxy":
          ensure  => running,
          enable  => true,
          require => File["/etc/dnsproxy.conf"],
     }

     file { "/etc/resolv.conf":
          source  => "file:///etc/puppet/modules/common/files/resolv.conf",
          require => Service["bind9"],
     }

     $privoxy_id = 109
     $privoxy_user = privoxy

     exec { "/usr/local/bin/uidmod.sh ${privoxy_id} ${privoxy_user}":
          require => [ Mount["/usr/local/bin"], Package[privoxy] ],
     }

     user { "${privoxy_user}":
           ensure => present,
           uid => "${privoxy_id}",
           require => Exec["/usr/local/bin/uidmod.sh ${privoxy_id} ${privoxy_user}"],
           before  => [ Service["privoxy"], Exec["do iptables"] ],
     }

     file { "/var/log/privoxy":
          owner   => "${privoxy_user}",
          recurse => true,
          require => [ Package[privoxy], User["${privoxy_user}"] ],
          before  => Service["privoxy"],
          notify  => Service["privoxy"],
     }

     file { "/etc/privoxy/config":
          content => template("common/privoxy.config.erb"),
          require => [ Package[privoxy], File["/etc/resolv.conf"] ],
          notify  => Service["privoxy"],
     }

     file { "/etc/privoxy/trust":
          content => template("common/privoxy.trust.erb"),
          require => [ Package[privoxy], File["/etc/resolv.conf"] ],
          notify  => Service["privoxy"],
     }

     service { "privoxy":
          ensure  => running,
          enable  => true,
          require => [ File["/etc/privoxy/config","/etc/privoxy/trust"], Exec["do iptables"] ],
     }
     file { "/etc/monit/conf.d/privoxy":
          content => template("common/monit.privoxy.erb"),
          require => Service["privoxy"],
          notify => Service["monit"],
     }


     $squid_id = 13
     $squid_user = "proxy"

     exec { ["/usr/local/bin/gidmod.sh ${squid_id} ${squid_user}","/usr/local/bin/uidmod.sh ${squid_id} ${squid_user}"]:
          require => [ Mount["/usr/local/bin"], Package[squid3] ],
     }

     group { "${squid_user}":
           ensure => present,
           gid => "${squid_id}",
           require => Exec["/usr/local/bin/gidmod.sh ${squid_id} ${squid_user}"],
     }

     user { "${squid_user}":
           ensure => present,
           uid => "${squid_id}",
           gid => "${squid_user}",
           require => [ Exec["/usr/local/bin/uidmod.sh ${squid_id} ${squid_user}"], Group["${squid_user}"] ],
           before  => [ Service["squid3"], Exec["do iptables"] ],
     }

     mount { "/var/squid":
           device  => "LABEL=DATA-squid",
           fstype  => ext4,
           options => "defaults",
           pass    => 2,
           atboot  => true,
           ensure  => mounted,
     }
     mount { "/etc/squid3":
           device => "/var/squid/etc",
     }
     mount { "/var/log/squid3":
           device => "/var/squid/log",
     }
     mount { "/var/spool/squid3":
           device => "/var/squid/cache",
     }
     Mount["/etc/squid3","/var/log/squid3","/var/spool/squid3"] {
           fstype  => none,
           options => bind,
           require => Mount["/var/squid"],
           before  => Package[squid3],
           atboot  => true,
           ensure  => mounted,
     }

     file { "/etc/squid3/squid.conf":
          content => template("common/squid.conf.erb"),
          require => [ Package[squid3], Service["privoxy"], Mount["/etc/squid3"] ],
          notify  => Service["squid3"],
     }

     service { "squid3":
          ensure  => running,
          enable  => true,
          require => [ File["/etc/squid3/squid.conf"], Mount["/etc/squid3","/var/log/squid3","/var/spool/squid3"], User["${squid_user}"], Exec["do iptables"] ],
     }

     $tor_id = 117
     $tor_user = "debian-tor"

     exec { ["/usr/local/bin/gidmod.sh ${tor_id} ${tor_user}","/usr/local/bin/uidmod.sh ${tor_id} ${tor_user}"]:
          require => [ Mount["/usr/local/bin"], Package[tor] ],
     }

     group { "${tor_user}":
           ensure => present,
           gid => "${tor_id}",
           require => Exec["/usr/local/bin/gidmod.sh ${tor_id} ${tor_user}"],
     }

     user { "${tor_user}":
           ensure => present,
           uid => "${tor_id}",
           gid => "${tor_user}",
           require => [ Exec["/usr/local/bin/uidmod.sh ${tor_id} ${tor_user}"], Group["${tor_user}"] ],
           before  => [ Service["tor"], Exec["do iptables"] ],
     }

     file { "/etc/default/tor":
          source  => "file:///etc/puppet/modules/common/files/tor.default",
     }

     file { "/etc/tor/torrc" :
          content => template("common/torrc.erb"),
     }
     File["/etc/default/tor","/etc/tor/torrc"] {
          require => [ Package[tor], Service["squid3"] ],
          before  => Service["tor"],
          notify  => Service["tor"],
     }

     service { "tor":
          ensure  => running,
          enable  => true,
          require => [ File["/etc/default/tor", "/etc/tor/torrc"],
                       Exec["do iptables"],
                       User["${tor_user}"] ],
     }

     package { [rpcbind, nfs-common]:
          ensure => latest,
     }
     Package[nfs-common] {
          require => Package[rpcbind],
     }

     file { "/etc/exports":
          content => template("common/nfs.exports.erb"),
          before  => Service["nfs-common"],
          notify  => Service["nfs-common"],
     }

     service { "rpcbind":
          ensure  => running,
          enable  => true,
          require => Exec["do iptables"],
     }
     service { "nfs-common":
          ensure  => running,
          enable  => true,
          require => [ File["/etc/exports"],
                       Service["rpcbind"] ],
     }

     package { [apt-cacher-ng]:
             ensure => latest,
     }

     $acng_id = 112
     $acng_user = "apt-cacher-ng"

     exec { ["/usr/local/bin/gidmod.sh ${acng_id} ${acng_user}","/usr/local/bin/uidmod.sh ${acng_id} ${acng_user}"]:
          require => [ Mount["/usr/local/bin"], Package[apt-cacher-ng] ],
          before  => Service["apt-cacher-ng"],
     }
     group { "${acng_user}":
           ensure => present,
           gid => "${acng_id}",
           require => Exec["/usr/local/bin/gidmod.sh ${acng_id} ${acng_user}"],
     }

     user { "${acng_user}":
           ensure => present,
           uid => "${acng_id}",
           gid => "${acng_user}",
           require => [ Exec["/usr/local/bin/uidmod.sh ${acng_id} ${acng_user}"], Group["${acng_user}"] ],
           before  => Service["apt-cacher-ng"],
     }

     file { ["/etc/apt-cacher-ng/security.conf","/var/log/apt-cacher-ng"]:
           group => "${acng_user}",
           owner => "${acng_user}",
           recurse => true,
          require => [ Package[apt-cacher-ng], User["${acng_user}"], Group["${acng_user}"] ],
          before  => Service["apt-cacher-ng"],
          notify  => Service["apt-cacher-ng"],
     }

     file { "/etc/apt-cacher-ng/acng.conf":
          content => template("common/acng.conf.erb"),
     }

     file { "/etc/apt/apt.conf" :
          content => template("common/apt.conf.erb"),
     }

     File["/etc/apt-cacher-ng/acng.conf","/etc/apt/apt.conf"] {
          require => [ Package[apt-cacher-ng], User["${acng_user}"], Group["${acng_user}"] ],
          before  => Service["apt-cacher-ng"],
          notify  => Service["apt-cacher-ng"],
     }

     service { "apt-cacher-ng":
          ensure  => running,
          enable  => true,
          require => [ Package[apt-cacher-ng],
                  File["/etc/apt-cacher-ng/acng.conf","/etc/apt/apt.conf"],
                  Mount["/var/cache/apt-cacher-ng"] ],
     }

}
node palette inherits common {
     mount { "/var/cache/apt-cacher-ng":
           ensure => mounted,
           device => "${vpn_other_host_fqdn}:/var/apt-cacher-ng/cache",
           fstype => "nfs",
           options => "defaults",
           pass => 0,
           dump => 0,
           require => [ Exec["ping rpi vpn"], Host["${vpn_other_host_fqdn}"] ],
     }

}

node experience inherits common {
     mount { "/var/cache/apt-cacher-ng":
           ensure => mounted,
           device => "/var/apt-cacher-ng/cache",
           fstype => "none",
           options => "bind",
           pass => 0,
           dump => 0,
     }

     package { [samba4,dnsmasq]:
             ensure => latest,
     }

     file { "/etc/default/dnsmasq":
          source  => "file:///etc/puppet/modules/common/files/dnsmasq.default",
     }

     file { "/etc/dnsmasq.conf" :
          content => template("common/dnsmasq.conf.erb"),
     }

     File["/etc/default/dnsmasq","/etc/dnsmasq.conf"] {
          require => Package[dnsmasq],
          before  => Service["dnsmasq"],
          notify  => Service["dnsmasq"],
     }

     service { "dnsmasq":
          ensure  => running,
          enable  => true,
          require => [ Package[dnsmasq], File["/etc/default/dnsmasq","/etc/dnsmasq.conf"] ],
     }


}

GLFS sur rpy

DynDns a changé, il faut maintenant forcement un account. J'en ai pris un.
J'ai donc maintenant
- experience.dyndns-at-home.com
- palette.dyndns-at-home.com

1 ) experience : ip statique
2 ) palette : J'ai configuré la NEufBox pour faire du dyndns.
J'ai du configurer GANDI pour pointer sur le dns dynamique DynDns pour www.ppprod2.biz et www.ppprod.biz


Je sais que j'ai en plan le etckeeper sur
- ppprod
- experience
- palette

Je quand même sur pars sur le glfs.
En effet, je veux absolument avoir du puppet. Je ne veux pas appliquer chaque ligne sur chaque machine.

L'ordre est donc le suivant :
- montage des HD sur les rpy.
- création des points de montage
!!!!!!!!!!!!!!!!!! OUPS !!!!!!!!!!!!!! j'ai oublié, il faut faire le vpn avant !!!!!
- définition des glfs
- premier checkout svn de puppet
( - mise en place du cron de mise a jour auto [il faut d'abord que je récupère le script])
- suppression de etckeeper (*)


(*) En réfléchissant a la mise en place, je butte sur la mise en conf obligatoire du .etckeeper
Je galère tellement que je pense virer etckeeper et faire le mien
Mon idée est la meme que pour puppet :
- en cron :
1 ) ajout de ce qui ne l'est pas encore
2 ) suppression de ce qui ne l'est plus
3 ) commit auto



----------------------------------------------------------------------------------------------
vpn

apt-get install openvpn
On may:
openvpn --remote june.kg --dev tun1 --ifconfig 10.4.0.1 10.4.0.2 --verb 9
On june:
openvpn --remote may.kg --dev tun1 --ifconfig 10.4.0.2 10.4.0.1 --verb 9
----------------------------------------------------------------------------------------------

apt-get install lvm2 

   87  mkdir /data
   88  mkdir /data/local /data/remote
   90  mkdir -p /data/gluster/.local
   91  mount /dev/system/puppet.glfs.rpi /data/gluster/.local

je récupère un site.pp qui traine, je l'historise dans ce blog

http://www.gluster.org/category/ubuntu/

10.4.0.1 et .2
puppet_rpi



dimanche, juillet 07, 2013

puppet en gconf

concernant le rpy experience et palette, j'ai fait du glfs en raid1, mais sans historisation.

Il a donc la possibilité de récupérer les données, mais pas de consulter l'historique.

J'ai vu reçament sur le net des utilisateur qui ne se servait pas du master, mais qui reprennnait un checkout et qui le lançait localement.
Pour l'instant, sur exerience et palette, je fais comme ça : pas de démon.

Quand je regarde la gconf ancienne sur .net, le repo était sur .biz (palette).
Si je veux être commun a .net, experience et palette, ce n'est pas un de ces éléments qui doit être l'archiveur, ce que je pensais va donc être mis en place : backup en serveur svn.

Comme pour etc, je mettrais un svnsync sur experience et palette.

je vais mettre juste un export sur .net, avec un cron '30 */1' d'autocommit.
j'ai la chance que la patte wan sur exeprience et palette n'est pas la même : la box sur stm est en .254, celle de tln en .1, résultat, experience est en .1, et palette en .2
 je peux donc garder le glfs raid1, avec un autocommit basé sur le cron suivant : '0 /2'
je n'aurais aucun conflit.

en consultant mes archives, le chemin du svn était  http://www.ppprod.biz/svn/roottools/trunk/puppet
Je garde le nom du repo roottools

www:/etc# svn co  http://backup.ppprod.net/svn/roottools/trunk/puppet
Checked out revision 1.

rajouter run et ssl en ignore

www:/etc# cd puppet/
www:/etc/puppet# svn propedit svn:ignore .
Set new value for property 'svn:ignore' on '.'
www:/etc/puppet# svn propget svn:ignore
run
ssl

samedi, juillet 06, 2013

puppet et etckeeper

cat /etc/debian_version => 6.0.7

C'est reparti avec une squeeze !

J'installe puppet, et je reprends ma conf petit à petit.
Premier problème ... installer etckeeper, mais le plugger sur un svn distant (lequel ?)

anciennement, le svn de etc était sur experience. Est-ce judicieux ? je pense que je vais le mettre sur backup

On est donc parti pour faire un svn sur backup ;)

suivi du tuto http://www.howtoforge.com/debian_subversion_websvn

svn est déjà installlé, et etc déjà en place, oubli du ot de passe,
suivi du tuto http://notes.chpwssn.com/

commande  htpasswd -c -m /var/lib/svn/dav_svn.passwd $user_name


sur ppprod.net, install de git, subversion, git-svn

récupération du script "/usr/local/bin/etckeeper_svn_mkdir.sh", inutile : branche existante


config (on execute le contenu du puppet a la main)backup etcfetchinstall etckeeperrestore etcetckeeper commit

verif du debian_version

Bon, rien n'a marché, le fait de reprendre un svn avec contenu est une erreur. Je recrée un svn sur backup, et je recommence tout.

bon, comme d'hab, ça m'a pris 5 heures.

vous pouvez penser "quelle truffe", j'ai une petite question : pensez vous que mettre sur un svn accessible de l’extérieur votre -passwd est judicieux, pensez vous que vos .objects en gconf est judicieux ?Si vous répondez non a ces questions, vous aurez vite compris que (comme d'hab) le tutorial 'for dummies' ne correspond pas a votre besoin.

si vous voulez avoir un etckeeper sur svn distant, mailez moi ;)

Je m'attaque à puppet.
5 heures de plus : avoir un agent et un master sur la meme machine est impossible. problème de conf et conflit entre les ssl master et agent.
Le problème est que le 'puppet cert' se base sur la conf agent, sauf que la validation est faite par le master.
Encore un truc mal branlé !!!!!

Je passe par genconfig sur master avec modif du default pour la conf.
penser a commenter le genconfig


puppetmaster puppet-master[14719]: 
(/File[/var/puppet/facts]/ensure) change from directory to file failed: Could 
not set 'file on ensure: Is a directory - /var/puppet/facts

Comment out the 'factdest' setting in the [master] section of the config files
produced by the --genconfig option and it will work.

Résultat, je passe a l'agent lancé en cron. 

www:~# puppet agent --onetime --verbose --no-daemonize --ssldir /etc/puppet/ssl --server www.ppprod.net --fqdn localhost

info: Creating a new SSL key for localhost
info: Creating a new SSL certificate request for localhost
info: Certificate Request fingerprint (md5): 7E:7B:1C:93:E6:80:9C:7D:05:8E:BB:73:5C:56:8E:42

Exiting; no certificate found and waitforcert is disabled

www:/etc/puppet# puppetca --config=/etc/puppet/puppetmaster.conf -l
  "localhost" (7E:7B:1C:93:E6:80:9C:7D:05:8E:BB:73:5C:56:8E:42)
www:/etc/puppet# puppetca --config=/etc/puppet/puppetmaster.conf -s localhost
notice: Signed certificate request for localhost
notice: Removing file Puppet::SSL::CertificateRequest localhost at '/var/lib/puppet/ssl/ca/requests/localhost.pem'


www:~# puppet agent --onetime --verbose --no-daemonize --ssldir /etc/puppet/ssl --server www.ppprod.net --fqdn localhost
info: Caching certificate for localhost
info: Caching certificate_revocation_list for ca
info: Caching catalog for localhost
info: Applying configuration version '1373192799'
info: Creating state file /var/lib/puppet/state/state.yaml
notice: Finished catalog run in 0.01 seconds

pour lancer le service, penser a mettre --rundir=/etc/puppet/run dans le default.

Ca marche !

prochaine étape, puppet/manifest en gconf

reinstall de www.ppprod.net.

Je viens de lancer la reinstall de www.ppprod.net.

Je fais une install fraîche.

J'ai longtemps fait grossir un puppet qui configurait automatiquement mes serveurs.
Le problème, c'est que mon puppet est devenu tellement gros, que je me retrouve avec des dépendances cycliques dans tous les sens.

C'était devenu ingérable.

De plus, mes serveurs experience et palette était des machines "lourdes" (i.e. des serveurs avec pleins de disques et de RAM). J'ai eu des pbs de disques ET des pbs de RAM.
Je me suis donc orienté vers qqchose de plus smart : des raspberry.

J'ai en fait fait le yoyo : j'étais parti il y a 10ans sur plusieurs machines avec des services sur cette grappe. quelques années après, je e suis dit que des 'petits' services ne nécessitaient pas de machines dédiées. Je me suis tourné vers Xen. J'ai pété mes gentoo en mettant Xen, je suis allé sur Centos, jamais assez a jour pour pouvoir faire du direct-to-disc (avoir une carte contrôleur uniquement vue dans un domU), il n'y avait que la version 'pour dummy' qui fonctionnait pleinement, pour tout le reste, les noyaux n'étaient jamais assez a jour.

Je suis reparti il y a un an sur du "cluster", mais sans machine lourde : avec du rpy.

J'hésite vraiment quand à puppet. Bien entendu, je vais l'utiliser, ce soft est pour moi l'incontournable de l'administration.Je ne sais pas par-contre comment je vais le structurer de façon à être complet dans l'ordonnancement mais pas trop entremêler.
Quand au LDAP/Kerberos, je vais voir.

Dans un premier temps, il faut d'abord que je remette en place tous mes hacks sur le VDS Nerim (install de ntop sans polluer/spyer les autres [vous voulez écrouler votre VDS mais voir ce que tous les autres font : ntop est votre ami ;) ]). Il faut que je retrouve l'astuce pour insérer les modules dans un noyau Xen de façon à avoir les loop device, seul moyen d'avoir des partitions dédiées sur un VDS (par exemple si vous ne voulez pas que votre /var/log ruine votre système)