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)
samedi, février 19, 2011
J'ai laissé tomber LDAP un moment. J'ai eu l'occasion de bosser dessus dans un autre cadre, ça ne me fait plus assez peur pour que j'en fasse une priorité.
Je bosse plutôt sur les jail, et ce que je peux faire sur mon VDS.
Ça roule à fond. aujourd’hui premier squid dans un jail (ok, trivial me direz vous). Ben pas tant que ça.
Je fais tout par puppet et monit. j'ai fait un debootstrap ubuntu 10.04 dans une debian sur le VDS. N'ayant que 4Go, je mutualise le jail, et je fais des "fake" ou les services varient.
Ça tourne bien. Je peux me re-concentrer sur les services rendu, et pas sur l'infra.
cool !
vendredi, juin 04, 2010
mercredi, juin 02, 2010
pam,ladp et krb5 dans un env chrooté
Ça fait une semaine que je galère pour faire du (pam+ldap+krb5) dans un jail. Je pense avoir lu tous les articles du net sur le sujet. On peut pas vraiment dire que j'ai fais comme je le voulais, mais j'ai réussi. Maintenant, je dois essayer de continuer le planning prévu. Je pense que je vais avoir un problème de place. Il va falloir que je joue avec archivemount et autre ftpmount, voir gmailfs.
jeudi, mai 27, 2010
Avancement sur le dédié
Je vais faire un point sur ce qui reste a faire (et ce qui est fait).
De plus, je planifie la mise en place de Tor de façon différente :
plutôt que de faire [chroot 1 : squid + privoxy + tor client ] + [chroot 2 - tor relais (prio-) ]
je vais faire [chroot 1 : squid + privoxy +/] [chroot 2 - /+ tor (client,relais,sortie) +/] [chroot 3 - /+ squid + DansGuardian]
L'idée est d'autoriser la sortie, ma d'éviter les "saloperies" en mettant un contrôle parental à la sortie.
Voila donc ce qui reste à faire :
- upload du /etc et du /root de experience
- upload du www de experience, mise en conf dans cvs
- déplacement du script cvsweb dans une partie avec htaccess
- images avec proxy ntop par apache
- upload et mise en conf de /www/moinmoin de experience
- vpn, bind avec 192.168.0.1, changer le nameservice sur gandi
- mise en conf des sources qui trainent,
- créa d'une archive dédiée svn, remplacer /svn par archivemount (sur l'archive) par autofs, exclure du tar global /var/svn
- créa d'une archive dédiée svn, remplacer /svn par archivemount (sur l'archive) par autofs, exclure du tar global /var/svn
- installation d'un jail, branchement sur le ldap
http://julp.developpez.com/freebsd/authentification-ldap/
http://arthurdejong.org/cvsd/faq.html#authresponse
- mise en conf du jail dans cvs, branche pour cvsroot, export pour cvsroot
http://arthurdejong.org/cvsd/faq.html#authresponse
- mise en conf du jail dans cvs, branche pour cvsroot, export pour cvsroot
- mise en place d'un jail pour ftp , branchement sur le ldap, ajout du plug munin, ajout du scan clamav du /jail/ftp/home
- mise en place de fs zippé pour repo cvs, repo svn et pages webs et moinmoin avec archivemount (automount pour svn)
- mise en place d'un x distant, install de vnc avec proxy apache
- mise en place de chroot 1
- mise en place de chroot 2
- mise en place de chroot 3
Voila ce qui est fait :
- script de creation d'un tar dans /backup, ajout au cron
- install de cvs
- mise en conf de /etc, ajout au cron de la création d'une archive dédiée
-install de munin
- install de denyhost, install plug munin
- apache avec modwsgi
- install de cvsweb
- install de ntop et proxy par apache (partiel)
- install de moinmoin
- configuration de apache avec modwsgi
- install de clamav
- installation d'un kerberos et d'un ldap
- installation de svn, connexion sur ldap, install de websvn
Plus de gestion de projet
En allant sur la page dimitri.bouwyn.free.fr/ppprod, je me suis aperçu que ma gestion de projet avait disparu. En essayant de réactiver la page free de ppprod, ce provider me dit qu'il a tout supprimé et que les données ne sont pas récupérables.
Il va donc faloir refaire cette partie.
Je vais voir si j'ai une archive quelque part de ce site, mais je suis pessimiste.
Il semble que j'ai trouvé un truc : dotproject + ( mantis + svn )+ postnuke, le tout pluggé sur de l'autentification ldap
mardi, mai 25, 2010
jeudi, mai 13, 2010
Suite au problème sur experience que je ne peux réparer, je passe à un serveur dédié.
- install de moinmoin
http://wiki.debian.org/HelpOnInstalling/BasicInstallation
https://help.ubuntu.com/9.04/serverguide/C/moinmoin.html
=> upload et mise en conf de /www/moinmoin (pas fait)
- configuration de apache
http://wiki.debian.org/HelpOnInstalling/ApacheWithModWSGI
- install de clamav
http://www.debianadmin.com/clamav-installation-and-configuration.html
=> cron du fresh, scan du /www/http et /www/moin
- mise en place de bind
http://wiki.debian.org/fr/Bind9
ATTENTION : le 192.168.0.1 ne pourra etre mis en place que quand le VPN sera fait
alors : on pourra changer le nameservice sur gandi (pas fait)
en attendant bind prend le reseau sivit
- installation d'un ldap (comme référence à la réplication locale)
http://mailman.mit.edu/pipermail/kerberos/2009-March/014685.html
Sur ce serveur, je vais installer les services suivants :
- faire un script de creation d'un tar dans /backup (renommage archive puis complet dimanche, update sinon, exclude /backup), le rajouter au cron
- install de cvs (et pserver)
=> mise en conf de /etc et /var (http://www.ird.fr/us191/spip.php?article1)
=> upload du /etc et du /root de experience
=> exclure /var/cvs du tar, rajouter au cron la création d'une archive dédiée
- install de denyhost
- apache avec modwsgi
=> upload du www de experience (pas fait), mise en conf dans cvs
mise en place du plug munin : http://muninexchange.projects.linpro.no/?search=&cid=1&os[5]=on&pid=371
- install de cvsweb
déplacement du script dans une partie avec htacces (pas fait)
- install de ntop et proxy par apache
- install de moinmoin
http://wiki.debian.org/HelpOnInstalling/BasicInstallation
https://help.ubuntu.com/9.04/serverguide/C/moinmoin.html
=> upload et mise en conf de /www/moinmoin (pas fait)
- configuration de apache
http://wiki.debian.org/HelpOnInstalling/ApacheWithModWSGI
- install de clamav
http://www.debianadmin.com/clamav-installation-and-configuration.html
=> cron du fresh, scan du /www/http et /www/moin
- mise en place de bind
http://wiki.debian.org/fr/Bind9
ATTENTION : le 192.168.0.1 ne pourra etre mis en place que quand le VPN sera fait
alors : on pourra changer le nameservice sur gandi (pas fait)
en attendant bind prend le reseau sivit
- installation d'un ldap (comme référence à la réplication locale)
http://mailman.mit.edu/pipermail/kerberos/2009-March/014685.html
http://www.linuxquestions.org/questions/linux-server-73/openldap-setup-invalid-credentials-error-49-a-798807/
https://help.ubuntu.com/9.04/serverguide/C/kerberos-ldap.html
http://techpubs.spinlocksolutions.com/dklar/kerberos.html
http://techpubs.spinlocksolutions.com/dklar/ldap.html
http://www.debian-administration.org/article/OpenLDAP_installation_on_Debian
mise en place du plug munin : http://muninexchange.projects.linpro.no/?search=&cid=11&os[5]=on
( réplication locale sur centos5 )
http://articles.mongueurs.net/magazines/linuxmag66.html
http://www.openldap.org/doc/admin22/syncrepl.html
http://julp.developpez.com/freebsd/replicat-ldap/
- installation de svn
http://hikage.developpez.com/linux/tutoriels/subversion/?page=page_2
http://wiki.freaks-unidos.net/Apache2%20SSL%20and%20Subversion%20in%20Debian
- connexion sur ldap
http://www.vogelweith.com/debian_server/09_subversion.php
http://wiki.osuosl.org/display/LNX/Subversion+SVN+and++LDAP+and+Webdav
http://www.jejik.com/articles/2007/06/apache_and_subversion_authentication_with_microsoft_active_directory/
http://blogs.open.collab.net/svn/2007/03/subversion_ldap.html
https://help.ubuntu.com/9.04/serverguide/C/kerberos-ldap.html
http://techpubs.spinlocksolutions.com/dklar/kerberos.html
http://techpubs.spinlocksolutions.com/dklar/ldap.html
http://www.debian-administration.org/article/OpenLDAP_installation_on_Debian
mise en place du plug munin : http://muninexchange.projects.linpro.no/?search=&cid=11&os[5]=on
( réplication locale sur centos5 )
http://articles.mongueurs.net/magazines/linuxmag66.html
http://www.openldap.org/doc/admin22/syncrepl.html
http://julp.developpez.com/freebsd/replicat-ldap/
- installation de svn
http://hikage.developpez.com/linux/tutoriels/subversion/?page=page_2
http://wiki.freaks-unidos.net/Apache2%20SSL%20and%20Subversion%20in%20Debian
- connexion sur ldap
http://www.vogelweith.com/debian_server/09_subversion.php
http://wiki.osuosl.org/display/LNX/Subversion+SVN+and++LDAP+and+Webdav
http://www.jejik.com/articles/2007/06/apache_and_subversion_authentication_with_microsoft_active_directory/
http://blogs.open.collab.net/svn/2007/03/subversion_ldap.html
-install de webSVN
http://9rivers.linkka.com/2010/04/08/setup-subversion-on-debian/
=> mise en conf des sources qui trainent, (pas fait)
=> ajout de la créa d'une archive dédiée svn dans cron (pas fait, remplacé par archivemount par autofs)
http://9rivers.linkka.com/2010/04/08/setup-subversion-on-debian/
=> mise en conf des sources qui trainent, (pas fait)
=> ajout de la créa d'une archive dédiée svn dans cron (pas fait, remplacé par archivemount par autofs)
, exclure du tar global /var/svn
- installation d'un jail (pour le relai tor) , branchement sur le ldap
https://trac.torproject.org/projects/tor/wiki/TheOnionRouter/TorInChroot
http://howto.landure.fr/gnu-linux/debian-4-0-etch/installer-un-chroot-sur-une-debian-4-0-etch
=> mise en conf du jail dans cvs
- checkout d'un jail pour tor, puis
- installation d'un relai tor (avec branchement sur le ldap) et priorisation minimum (torserver avec limits.conf)
http://tuxicoman.jesuislibre.net/2009/03/installer-tor-sur-debian.html
http://www.debianworld.org/systemes.et.reseaux?q=node/440
http://www.cyberciti.biz/faq/change-the-nice-value-of-a-process/
=> mise en conf du jail complet (dans un branche dédiée), vérification avec cvsweb
- installation d'un jail pour squid->privoxy->tor , branchement sur le ldap
- installation d'un client tor, de privoxy et de squid
http://www.christianschenk.org/blog/enhancing-your-privacy-using-squid-and-privoxy/
- installation de squid guard
http://www.trustonme.net/didactels/295.html
=> mise en conf du jail
plug munin : http://muninexchange.projects.linpro.no/?search=&cid=25&os[5]=on
- mise en place d'un jail pour ftp , branchement sur le ldap
http://www.debianhelp.co.uk/vsftpd.htm
http://www.linuxquestions.org/questions/linux-software-2/vsftpd-using-ldap-pam-authentication-issue-486781/
plug munin : http://muninexchange.projects.linpro.no/?search=&cid=10&os[5]=on&pid=226
=> ajout du scan clamav du /jail/ftp/home
- installation de postfix
http://elbacalow.free.fr/wiki/index.php?title=Installation_et_configuration_de_Postfix
munin : http://muninexchange.projects.linpro.no/?search=&cid=16&os[5]=on&pid=116 et http://muninexchange.projects.linpro.no/?search=&cid=50&os[5]=on
- mise en place de fs zippé pour repo cvs, repo svn et pages webs et moinmoin avec archivemount (automount pour svn)
http://talby.csu.umist.ac.uk/~rcs/_bits/archivemount_tar_and_cifs.html
- installation d'un jail (pour le relai tor) , branchement sur le ldap
https://trac.torproject.org/projects/tor/wiki/TheOnionRouter/TorInChroot
http://howto.landure.fr/gnu-linux/debian-4-0-etch/installer-un-chroot-sur-une-debian-4-0-etch
=> mise en conf du jail dans cvs
- checkout d'un jail pour tor, puis
- installation d'un relai tor (avec branchement sur le ldap) et priorisation minimum (torserver avec limits.conf)
http://tuxicoman.jesuislibre.net/2009/03/installer-tor-sur-debian.html
http://www.debianworld.org/systemes.et.reseaux?q=node/440
http://www.cyberciti.biz/faq/change-the-nice-value-of-a-process/
=> mise en conf du jail complet (dans un branche dédiée), vérification avec cvsweb
- installation d'un jail pour squid->privoxy->tor , branchement sur le ldap
- installation d'un client tor, de privoxy et de squid
http://www.christianschenk.org/blog/enhancing-your-privacy-using-squid-and-privoxy/
- installation de squid guard
http://www.trustonme.net/didactels/295.html
=> mise en conf du jail
plug munin : http://muninexchange.projects.linpro.no/?search=&cid=25&os[5]=on
- mise en place d'un jail pour ftp , branchement sur le ldap
http://www.debianhelp.co.uk/vsftpd.htm
http://www.linuxquestions.org/questions/linux-software-2/vsftpd-using-ldap-pam-authentication-issue-486781/
plug munin : http://muninexchange.projects.linpro.no/?search=&cid=10&os[5]=on&pid=226
=> ajout du scan clamav du /jail/ftp/home
- installation de postfix
http://elbacalow.free.fr/wiki/index.php?title=Installation_et_configuration_de_Postfix
munin : http://muninexchange.projects.linpro.no/?search=&cid=16&os[5]=on&pid=116 et http://muninexchange.projects.linpro.no/?search=&cid=50&os[5]=on
- mise en place de fs zippé pour repo cvs, repo svn et pages webs et moinmoin avec archivemount (automount pour svn)
http://talby.csu.umist.ac.uk/~rcs/_bits/archivemount_tar_and_cifs.html
- mise en place d'un x distant
http://www.crashdump.fr/debian/serveur-x-debian-distant-sur-mac-xdmcp-429/
http://www.crashdump.fr/tutoriels/serveur-x-distant-sur-mac-freenx-431/
ou install de vnc avec proxy apache
http://www.crashdump.fr/
http://www.crashdump.fr/
ou install de vnc avec proxy apache
sur les machine localisée : bind
Inscription à :
Articles (Atom)