Hellfest ’12 : secondes annonces

Je dois dire que j’etais peu chaud lors des premieres annonces, le line-up etait un peu leger mais c’est souvent le cas lors de la premiere vague. Les secondes annonces sont tombees vendredi soir et j’ai vu quelques noms qui m’ont fait du bien : Machine Head, Amon Amarth, Brujeria, L’esprit du Clan, Devil Driver, Madball, Walls of Jericho

Il reste encore une vague avant la fin complete des annonces, mais cela predit deja un bon cru je pense. Je suis etonne de pas voir Cavalera cette annee, il aime pourtant bien passer avec un groupe different par an :)

A bientot pour la troisieme vague.

Graphite et Nginx

Cela fait un moment que je travaille sur Graphite et je ne suis vraiment pas fan d’apache. Cela m’a pris un peu de temps mais j’ai finalement reussi a installer et configurer supervisor avec uwsgi et nginx. J’ai installe graphite 0.9.9 depuis les sources. Cette installation est basee sur une Debian stable. Commencons par le commencement et installons quelques paquets : apt-get install python-dev libxml2-dev build-essential python-django-tagging. Decompactez ensuite carbon, whisper et graphite-web dans cet ordre et installez les (le repertoire par default est /opt/graphite).

Recuperez ensuite uwsgi et decompactez le et executez ce qui suit :

wget http://projects.unbit.it/downloads/uwsgi-0.9.9.2.tar.gz
tar xf uwsgi-0.9.9.2.tar.gz 
cd uwsgi-0.9.9.2
make -f Makefile.Py26 
cp uwsgi /usr/local/bin/
cp nginx/uwsgi_params /etc/nginx/

Maintenant que tout ce petit monde est installe, on peux passer a la configuration de supervisor (apt-get install supervisor). Creez un fichier qui s’appelle : /etc/supervisor/conf.d/uwsgi.conf et copiez le contenu ci-dessous dedans. Pour redemarrer supervisor, je conseille un stop/start. Restart ne marche pas correctement pour moi.

[program:uwsgi]
command=/usr/local/bin/uwsgi
  --module 'django.core.handlers.wsgi:WSGIHandler()'
  --socket 127.0.0.1:3031
  --chdir /opt/graphite/webapp
  --processes 1
  --master
  --harakiri 120
  --max-requests 5000
  --pythonpath "['/opt/graphite/webapp'] + sys.path"
directory=/opt/graphite/webapp
environment=DJANGO_SETTINGS_MODULE='graphite.settings'
user=www-data
autostart=true
autorestart=true
stdout_logfile=/var/log/nginx/uwsgi.log
redirect_stderr=true
stopsignal=QUIT

Il vous faut a present configurer nginx, cet exemple considere que j’utilise le repertoire graphite au sein d’un host virtuel, si vous voulez utiliser /, il vous faudra modifier. Voila ma config complete :

server {
        listen 80;
        listen [::]:80; # use this only if using IPv6
        client_max_body_size    4M;
        server_name  graphite.frlinux.net;
        root   /var/www/stats;
        access_log  /var/log/nginx/stats.access.log;
        error_log  /var/log/nginx/stats.error.log;

        location / {
        }
       location /graphite/ {
                gzip off;
                include uwsgi_params;
                uwsgi_pass      127.0.0.1:3031;
        }
       location /content {
                alias /opt/graphite/webapp/graphite/content;
                gzip off;
                include uwsgi_params;
                uwsgi_pass      127.0.0.1:3031;
        }
       location /dashboard {
                alias /opt/graphite/webapp/graphite/dashboard;
                gzip off;
                include uwsgi_params;
                uwsgi_pass      127.0.0.1:3031;
        }
       location /metrics {
                alias /opt/graphite/webapp/graphite/metrics;
                gzip off;
                include uwsgi_params;
                uwsgi_pass      127.0.0.1:3031;
        }
       location /render {
                alias /opt/graphite/webapp/graphite/render;
                gzip off;
                include uwsgi_params;
                uwsgi_pass      127.0.0.1:3031;
        }
       location /browser {
                alias /opt/graphite/webapp/graphite/browser;
                gzip off;
                include uwsgi_params;
                uwsgi_pass      127.0.0.1:3031;
        }
       location /composer {
                alias /opt/graphite/webapp/graphite/composer;
                gzip off;
                include uwsgi_params;
                uwsgi_pass      127.0.0.1:3031;
        }
}

Et voila, il ne vous reste plus qu’a pointer votre navigateur vers : http://site.example.com/graphite et cela devrait vous presenter vos donnees. Il vous faudra egalement securiser votre installation mais ce n’est pas le but de cet article.

cgit sur nginx

Un ami m’a recemment recommande de jouer avec une interface plus convi que gitweb, j’ai nomme cgit. Il vous faudra recuperer le source et le compiler. Je presume que vous utilisez /var/www/ comme racine de votre serveur webet que fcgiwrap est deja configure correctement. Voila ce que j’ai rajoute dans ma configuration :

       location /cgit/ {
		index cgit.cgi;
		include fastcgi_params;
                gzip off;

               if ($uri ~ "/cgit/cgit.cgi") {
                        fastcgi_pass unix:/var/run/fcgiwrap.socket;
                }

        }

Il vous faudra ensuite creer un repertoire s’appellant /var/www/cgit dans lequel vous copierez le binaire cgit ainsi que cgit.css et cgit.png. Il vous faut aussi creer un fichier /etc/cgitrc qui contiendra votre configuration locale ainsi que vous projets. Le miens ressemble a ca :

root=/var/cache/git
repo.url=tripwire
repo.desc=Tripwire
repo.path=/var/cache/git/tripwire/.git

Redemarrez/rechargez votre service nginx et hop, c’est pret !

Quagga et BGP

On m’a recemment rappelle l’existence de Quagga qui est une solution OpenSource de routeur supportant RIP/OSPF/BGP/ISIS et peux se connecter gentillement aux routeurs Cisco/Juniper. Ayant travaille un peu avec BGP sur des routeurs Cisco/Juniper, je me suis dit que ce serait amusant d’essayer Quagga.

BON GROS AVERTISSEMENT: Cet exemple ne prends en compte aucune securite, si vous comptez deployer dans la vie reelle, je suggere un peu plus de lecture auparavant.

Mon exemple ici est compose de deux machines virtuelles sous Debian Squeeze avec tous les derniers patches et quagga installe par apt. La topologie est simple, j’utilise deux interfaces reseau, eth0 sur les deux machine en bridge et la seconde attachee directement a la VM. Ma topologie est :

  • VM #1: isis – eth0 – 192.168.0.50/255.255.255.0 – eth1 – 10.10.0.1/255.255.0.0
  • VM #2: osiris – eth0 – 192.168.0.52/255.255.255.0 – eth1 – 10.20.0.1/255.255.0.0

En premier, il vous faudra activer IP forward : sysctl -w net.ipv4.ip_forward=1. Vous pouvez editer le fichier /etc/sysctl.conf. Ensuite, vous devez creer les fichiers de configuration pour Quagga. Editez la premiere VM et ajoutez le contenu suivant dans ce fichier : /etc/quagga/Quagga.conf:

log stdout
!
password awesome_pass
enable password awesome_pass
!
router bgp 7675
 bgp router-id 192.168.0.50
 network 10.10.0.0/16 route-map v4-bgp
 neighbor 192.168.0.52 remote-as 7676
!
route-map v4-bgp permit 10
 set originator-id 192.168.0.50
 set community 7675:1 additive
 set extcommunity rt 7675:1
 set aggregator as 7676 192.168.0.52
 set as-path prepend 192.168.0.52
 set atomic-aggregate
 set metric 20
!
line vty
!

Editez /etc/quagga/zebra.conf et ajoutez :

hostname isis
password awesome_password
enable password awesome_password
interface eth1

Editez ensuite /etc/quagga/daemons.conf et activez zebra et bgpd en YES. Redemarrez ensuite le service: service quagga restart.

Editez le second routeur en commencant par ce fichier : /etc/quagga/Quagga.conf:

log stdout
!
password awesome_pass
enable password awesome_pass
!
router bgp 7676
 bgp router-id 192.168.0.52
 network 10.20.0.0/16 route-map v4-bgp
 neighbor 192.168.0.50 remote-as 7675
!
route-map v4-bgp permit 10
 set aggregator as 7675 192.168.0.50
 set atomic-aggregate 
 set community 7676:1 additive
 set extcommunity rt 7676:1
 set metric 20
 set originator-id 192.168.0.52
!
line vty

Editez aussi /etc/quagga/zebra.conf et ajoutez :

hostname osiris
password awesome_password
enable password awesome_password
interface eth1

Redemarrez ensuite le service du routeur. Il ne reste plus qu’a tester le tout, depuis isis, nous allons verifier la connexion vers osiris, tapez vtysh pour utiliser la ligne de commande du routeur.

Nous verifions en premier BGP, la seconde ligne next-hop 192.168.0.52 veux dire que nous obtenons des routes de l’autre routeur.

isis# sh ip bgp
BGP table version is 0, local router ID is 192.168.0.50
Status codes: s suppressed, d damped, h history, * valid, > best, i - internal,
              r RIB-failure, S Stale, R Removed
Origin codes: i - IGP, e - EGP, ? - incomplete
   Network          Next Hop            Metric LocPrf Weight Path
*> 10.10.0.0/16     0.0.0.0                 20         32768 i
*> 10.20.0.0/16     192.168.0.52            20             0 7676 i
Total number of prefixes 2

En second, nous verifions le routeur voisin, si cette commande mentionne un hote foreign, ils se parlent correctement.

isis# sh ip bgp neigh
BGP neighbor is 192.168.0.52, remote AS 7676, local AS 7675, external link
  BGP version 4, remote router ID 192.168.0.52
  BGP state = Established, up for 01:35:05
  Last read 09:31:26, hold time is 180, keepalive interval is 60 seconds
  Neighbor capabilities:
    4 Byte AS: advertised and received
    Route refresh: advertised and received(old & new)
    Address family IPv4 Unicast: advertised and received
  Message statistics:
    Inq depth is 0
    Outq depth is 0
                         Sent       Rcvd
    Opens:                  2          0
    Notifications:          0          0
    Updates:                1          1
    Keepalives:            97         96
    Route Refresh:          0          0
    Capability:             0          0
    Total:                100         97
  Minimum time between advertisement runs is 30 seconds
 For address family: IPv4 Unicast
  Community attribute sent to this neighbor(both)
  1 accepted prefixes
  Connections established 1; dropped 0
  Last reset never
Local host: 192.168.0.50, Local port: 179
Foreign host: 192.168.0.52, Foreign port: 36249
Nexthop: 192.168.0.50
BGP connection: non shared network
Read thread: on  Write thread: off

Vous pouvez enfin verifier votre connexion, cela demontre que les routeurs sont connectes, si vous voyez Active au lieu d’Establised, quelque chose ne marche pas correctement.

# check the connection
isis# sh ip bgp sum
BGP router identifier 192.168.0.50, local AS number 7675
RIB entries 3, using 288 bytes of memory
Peers 1, using 4560 bytes of memory
Neighbor        V    AS MsgRcvd MsgSent   TblVer  InQ OutQ Up/Down  State/PfxRcd
192.168.0.52    4  7676      98     101        0    0    0 01:36:52        1
Total number of neighbors 1

Un ping depuis le premier routeur pour confirmer que tout marche :

isis# ping 10.20.0.1
PING 10.20.0.1 (10.20.0.1) 56(84) bytes of data.
64 bytes from 10.20.0.1: icmp_req=1 ttl=64 time=0.255 ms
64 bytes from 10.20.0.1: icmp_req=2 ttl=64 time=0.241 ms
64 bytes from 10.20.0.1: icmp_req=3 ttl=64 time=0.217 ms
64 bytes from 10.20.0.1: icmp_req=4 ttl=64 time=0.301 ms
^C
--- 10.20.0.1 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 2998ms
rtt min/avg/max/mdev = 0.217/0.253/0.301/0.034 ms

C’est tout pour le moment, je ferais bientot une mise a jour avec IPv6.

OpenVPN sur le SGS2 grace a Cyanogen 7.1

J’ai joue avec cette installation hier et je me suis dit que j’allais partager tout ca. Je voulais tester les fonctionalites de Cyanogen avec OpenVPN sur mon Samsung Galaxy S2, j’ai pour cela utilise un serveur Debian (possedant une adresse publique). La premiere etape est bien sur d’installer OpenVPN sur le serveur et de le configurer. Une fois cette etape effectuee, vous pouvez executer les commandes suivantes, qui vous permettront de creer un lien symbolique vers le repertoire easy-rsa, puis de creer le CA et les certificats.

ln -s /usr/share/doc/openvpn/examples/easy-rsa/1.0 easy-rsa
cd easy-rsa
source ./vars 
./clean-all 
./build-ca 
./build-dh 
./build-key-server yourserver

Une fois tout cela termie, tout en verifiant que vous n’avez eu aucune erreur, vous pouvez creer le certificat pour votre premier client, tout en restant dans le meme repertoire, il suffit de taper : ./build-key-pkcs12 cm7. Dans cet exemple, cm7 est le nom que j’ai choisi.

Voici la configuration qui marche pour mon serveur OpenVPN, editez /etc/openvpn/server.conf. J’ai choisi TCP car il est plus efficace a maintenir une connexion lorsque vous etes en GPRS.

proto tcp
port 8443
dev tun
ca /etc/openvpn/easy-rsa/keys/ca.crt
cert /etc/openvpn/easy-rsa/keys/yourserver.crt
key /etc/openvpn/easy-rsa/keys/yourserver.key
dh /etc/openvpn/easy-rsa/keys/dh1024.pem
ifconfig-pool-persist ipp.txt
server 192.168.6.0 255.255.255.0 
keepalive 10 120
persist-key
persist-tun
status /var/log/openvpn-status.log
verb 3
mssfix 1200 
tun-mtu 1200

L’etape interessante consiste ici a installer le certificat p12 que vous avez genere pour votre client, Cyanogen a bien une page sur le sujet mais ils ne detaillent pas ce point. Il vous faut copier le fichier p12 sur la racine de votre sdcard, Puis allez dans Settings/Location and Security/Storage Credentials/Install from SD Card. Une fois que vous avez selectionne le certificat, tapez le mot de passe utilise pendant la generation, vous pouvez ensuite selectionner un autre mot de passe pour le garder en securite.

Il ne vous reste alors qu’a parametrer votre client OpenVPN, allez dans Settings/Wireless & Networks/VPN Settings/Add VPN, puis definissez le nom du serveur, son IP puis les certificats, qui sont les memes pour CA et utilisateur. Allez ensuite dans la configuration avancee pour changer le port et le mode vers TCP. Un point interessant, cela n’a pas marche tant que je n’ai pas redemarre le telephone. Fix de merde mais bon…

Il ne vous reste qu’a redemarrer le serveur puis verifier les logs.