L'install d'un machine en remote a fait un petit bout de chemin, je passe en ssh avec un ssh-copy-id.
J'ai vite vu que grace à puppet, le boot se fait en 5 commandes ...
donc pas très utile, mais bon, j'ai les commandes dans un script ...
Concernant les machine,
j'ai configuré glusterfs pour faire du NFS, mais c'est pas évident : il faut penser à mettre le "v3", installer rpcbind, et (tout frais) ne pas installer nfs-commn.
Je dois mettre ça dans puppet
mon monit qui check apt-cacher-ng se basait sur le contenu de /var/cache/...
C'est pas bon car si le rep n'est pas mounté, il recréer l'arbo, du coup monit trouve le fichier, meme si le mount est KO.
il faut
- mounter un /tidy/ en bind sur / pour faire un clean cd /var/cache/apt-cacher-ng/
- arreter apt-cacher sur /var/cache/apt-cacher n'est pas mounté
- verif rpcbind (a faire dans puppet et monit)
- installer mitmproxy, car polipo ne fait pas intercepting proxy
- penser a virer netbios de dnsmasq.conf
mercredi, septembre 04, 2013
lundi, août 19, 2013
bind et puppet
exec { "/usr/sbin/service bind9 stop":
onlyif => ["/usr/sbin/service bind9 status", "/usr/bin/test -z \"$( /bin/grep \'^${bind_user}:x:${bind_id}:\' /etc/passwd )\""],
before => User["${bind_user}"],
require => Package[bind9],
}
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 { "/var/lib/bind":
mode => "g+rwx",
group => "${bind_user}",
require => Group["${bind_user}"],
recurse => true,
}
file { "set superbit in /etc/bind":
path => "/etc/bind",
mode => "g+rws",
group => "${bind_user}",
require => Group["${bind_user}"],
}
file { "/etc/bind":
group => "${bind_user}",
require => File["set superbit in /etc/bind"],
recurse => true,
}
file { "/etc/default/bind9":
source => "file:///etc/puppet/modules/common/files/bind9.default",
require => File["/etc/bind", "/var/lib/bind"],
notify => Service["bind9"],
}
onlyif => ["/usr/sbin/service bind9 status", "/usr/bin/test -z \"$( /bin/grep \'^${bind_user}:x:${bind_id}:\' /etc/passwd )\""],
before => User["${bind_user}"],
require => Package[bind9],
}
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 { "/var/lib/bind":
mode => "g+rwx",
group => "${bind_user}",
require => Group["${bind_user}"],
recurse => true,
}
file { "set superbit in /etc/bind":
path => "/etc/bind",
mode => "g+rws",
group => "${bind_user}",
require => Group["${bind_user}"],
}
file { "/etc/bind":
group => "${bind_user}",
require => File["set superbit in /etc/bind"],
recurse => true,
}
file { "/etc/default/bind9":
source => "file:///etc/puppet/modules/common/files/bind9.default",
require => File["/etc/bind", "/var/lib/bind"],
notify => Service["bind9"],
}
mercredi, août 07, 2013
plantage de palette
La carte SD de palette est partie en erreur.
Ca arrive en fait super souvent.
L'utilisation de NOOBS est un vrai plus, puiqu'il est possible de réinstaller le système à partir du raspberry lui-meme.
Par-contre, même si la mise en place de puppet est volontaire et a pour objectif de réisntaller le système en quelques commandes. La mise en place puppet reste trop fastidieuse.
En effet, il faut, pour puppet, mettre en place le vpn, glusterfs, ...
Je dois donc faire un complément.
Ce complément ne peux etre qu'un script shell, je ne vois pas trop d'autres choses.
Je suis donc obligé de me lancer dans l'écriture de ce script.
Première question, comment va t'il etre distribué ? (en fonction, je peux déterminer son emplacement)
Je pense que je vais le mettre sur www.ppprod.net.
Le plus simple serait de faire un premier script qui monterait un nfs.
Dans un deuxième temps, ce script lancerait un autre se trouvant sur le nfs.
bon, premier pb : pas de nfs sur nuxit.
2 possibilités : trouver un autre dépot ou recompiler
Autre solution, ne pas faire de nfs.
Ca arrive en fait super souvent.
L'utilisation de NOOBS est un vrai plus, puiqu'il est possible de réinstaller le système à partir du raspberry lui-meme.
Par-contre, même si la mise en place de puppet est volontaire et a pour objectif de réisntaller le système en quelques commandes. La mise en place puppet reste trop fastidieuse.
En effet, il faut, pour puppet, mettre en place le vpn, glusterfs, ...
Je dois donc faire un complément.
Ce complément ne peux etre qu'un script shell, je ne vois pas trop d'autres choses.
Je suis donc obligé de me lancer dans l'écriture de ce script.
Première question, comment va t'il etre distribué ? (en fonction, je peux déterminer son emplacement)
Je pense que je vais le mettre sur www.ppprod.net.
Le plus simple serait de faire un premier script qui monterait un nfs.
Dans un deuxième temps, ce script lancerait un autre se trouvant sur le nfs.
bon, premier pb : pas de nfs sur nuxit.
2 possibilités : trouver un autre dépot ou recompiler
Autre solution, ne pas faire de nfs.
lundi, août 05, 2013
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
- 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"] ],
}
}
$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
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
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/
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
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
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
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
pour lancer le service, penser a mettre --rundir=/etc/puppet/run dans le default.
Ca marche !
prochaine étape, puppet/manifest en gconf
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
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)
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)
Inscription à :
Articles (Atom)