Maniatux's Blog

Welcome to the internet

Blog

Migration du serveur sous FreeBSD 9.2

Rédigé par Xavier - - Aucun commentaire

EDIT : Oui je sais, FreeBSD 10 vient de sortir, je suis d'ailleurs l'un des auteurs de cette dépêche sur Linuxfr. Mais quand j'ai commencé à migrer mon serveur, c'était encore la 9.2 qui était stable. Et avec les jails et les ports je préfère éviter de tourner sur les versions non stables...

Puisque mon serveur perso n'est pas critique (je peux me permettre une coupure d'une journée) j'en profite changer l'OS assez souvent, en quête de la perle rare ou tout simplement pour apprendre de nouvelles choses. Actuellement mon serveur ne sert que pour Jabber et la messagerie, mais à terme j'aimerai récupérer l'hébergement de mon blog (web). Or je souhaite séparer la partie web et messagerie pour la sécurité. Pour cela plusieurs solutions :

  • Utiliser 2 serveurs : très consommateur en énergie et prend plus de place.
  • Utilisez Linux + KVM (virtualisation) : incompatible avec mon serveur (Atom 32 bits).
  • Utiliser Linux + LXC ou Linux + OpenVZ : LXC déjà exploré j'ai envie d'autre chose.
  • Utiliser FreeBSD + Jails : Ouais !!!

Schéma cible

Compilation vs packages binaires

Bien que mon serveur soit de faible puissance, j'ai choisi de compiler moi-même les ports. Pourquoi ? Simplement parce que les packages binaires sont trop basiques et n'incluent pas les options sont j'ai besoin. Exemple : pour le serveur web, j'avais besoin du support fpm pour php. Or le seul moyen pour avoir cela c'est de compiler soi-même le paquet php55 et activer l'option fpm. Avec le package binaire officiel, pas de fpm.

Hôte : TARDIS

L'hôte est FreeBSD 9.2 i386 installé en UFS, avec les rôles d'hôte pour les jails et serveur DNS (named). Pour l'instant uniquement du cache, on verra ultérieurement s'il y a besoin de déclarer des zones. Named est installé dans le système de base, donc aucune manipulation particulière à faire à part l'activer dans le rc.conf et commenter la petite ligne dans /var/named/etc/namedb/named.conf qui spécifie qu'il ne faut écouter qu'en 127.0.0.1. Pour gérer mes jails, j'utilise ezjail, un outil de fainéant qui permet non seulement de tout gérer très facilement, mais en plus de générer un template avec des montages dynamiques.

root@TARDIS:~ # jls

   JID  IP Address      Hostname                      Path

     1  192.168.0.4     xmpp                          /usr/jails/xmpp

     2  192.168.0.3     www                           /usr/jails/www

     3  192.168.0.2     mail                          /usr/jails/mail

Pour que toutes mes nouvelles jail utilisent le bon serveur DNS, il faut éditer le fichier /usr/jails/newjail/etc/resolv.conf et ajouter l'IP qui va bien.

Jail : mail

La jail mail est destinée à recevoir, stocker, envoyer des mails. J'utilise un backend sqlite que j'ai mis en place en suivant ce tutoriel très complet (légère adaptation à faire pour utiliser sqlite à la place de mysql). Il faut commencer par installer dovecot2 en activant le support sqlite. Puis on installe Postfix en activant aussi le support sqlite mais également l'authentification SASL via dovecot. Je voulais que mon serveur de messagerie puisse gérer plusieurs domaines, d'où mon choix d'une structure plus complexe avec un backend sql.

Lorsqu'un mail est reçu, il est traité par Postfix qui vérifie dans la base sqlite si le domaine existe bien. Si oui il le transmet alors à Dovecot qui va se charger de le stocker à l'emplacement qui va bien. Lorsqu'un utilisateur veut envoyer un mail, il le soumet à Postfix (submission 587) qui demande à Dovecot si l'utilisateur est authentifié. Tous les échanges sont sécurisés en STARTTLS.

Jail : www

La jail www est destinée à faire office de serveur web. Pour l'installation de php, il faut compiler php55 avec le support de fpm, mais aussi php55-extensions qui permet de supporter session, gd (requis par pluxml), et d'autres si besoin.

C'est sur cette jail que mon blog (maniatux.fr) sera bientôt rapatrié. L'adresse e-mail de contact sera elle rapatriée sur la jail précédente (mail) car comme je l'ai indiqué, je peux gérer plusieurs domaines. Pluxml étant très léger et sans base de données, le serveur devrait tenir.

Jail : xmpp

La jail xmpp est destinée à faire office de serveur Jabber. J'utilise une fois de plus Prosody, que j'ai couplé avec sqlite pour le stockage des comptes (je n'aime pas le stockage en clair dans /var/lib/prosody qui est utilisé par défaut). La mise en place a été assez compliquée car en cas d'erreur, Prosody refuse de démarrer mais n'indique pas pourquoi. J'ai du spécifier un emplacement pour les logs et mettre les bons droits dessus (chown -R prosody:wheel) afin d'avoir un debug. En fait il n'arrivait pas à écrire le pid. Pour pouvoir utiliser sqlite il faut installer le port luadbi avec l'option sqlite. Après avoir un peu bataillé, ça marche.

Charge système

root@TARDIS:~ # df -h

Filesystem             Size    Used   Avail Capacity  Mounted on

/dev/ada0p2            140G    2.5G    126G     2%    /

devfs                  1.0k    1.0k      0B   100%    /dev

devfs                  1.0k    1.0k      0B   100%    /var/named/dev

/usr/jails/basejail    140G    2.5G    126G     2%    /usr/jails/xmpp/basejail

devfs                  1.0k    1.0k      0B   100%    /usr/jails/xmpp/dev

fdescfs                1.0k    1.0k      0B   100%    /usr/jails/xmpp/dev/fd

procfs                 4.0k    4.0k      0B   100%    /usr/jails/xmpp/proc

/usr/jails/basejail    140G    2.5G    126G     2%    /usr/jails/www/basejail

devfs                  1.0k    1.0k      0B   100%    /usr/jails/www/dev

fdescfs                1.0k    1.0k      0B   100%    /usr/jails/www/dev/fd

procfs                 4.0k    4.0k      0B   100%    /usr/jails/www/proc

/usr/jails/basejail    140G    2.5G    126G     2%    /usr/jails/mail/basejail

devfs                  1.0k    1.0k      0B   100%    /usr/jails/mail/dev

fdescfs                1.0k    1.0k      0B   100%    /usr/jails/mail/dev/fd

procfs                 4.0k    4.0k      0B   100%    /usr/jails/mail/proc

L'espace disque utilisé est de 2,5GB, sachant que l'on compte le système de base, le template, et l'arbre de ports. C'est assez intéressant. Voyons maintenant la charge CPU et mémoire :

last pid: 12938;  load averages:  0.00,  0.00,  0.00    up 0+22:54:08  13:14:23

48 processes:  1 running, 47 sleeping

CPU:  1.1% user,  0.0% nice,  1.5% system,  0.2% interrupt, 97.2% idle

Mem: 55M Active, 216M Inact, 113M Wired, 69M Buf, 589M Free

Swap: 4096M Total, 4096M Free

En gros même avec 3 VPS le système est très peu sollicité : 55Mo de mémoire utilisé, et CPU à 3% de charge.

Supervision

Pour assurer la supervision j'utilise tout simplement logwatch. C'est un script qui génère un rapport et envoie régulièrement un mail qui indique l'espace disque, les connexions ssh, les tentatives infructueuses d'accès à certain services. Logwatch peut être installé à partir de /usr/ports/sysutils/logwatch. Ensuite il faut spécifier Output = mail dans le logwatch.conf et ajouter un cron (@daily /usr/local/sbin/logwatch.pl).

On peut soit installer logwatch sur l'hôte uniquement, soit le mettre sur chaque jail. J'ai choisi la deuxième option pour avoir plus de détails.

Sur le serveur mail, c'est Postfix qui est utilisé pour l'envoi du rapport. Par contre sur les autres jail, j'ai laissé sendmail. Il faut éditer le fichier /etc/mail/freebsd.mc puis spécifier :

define(`SMART_HOST', `192.168.0.2')

Sauvegarder puis entrer :

m4 /etc/mail/freebsd.mc > /etc/mail/freebsd.cf

Sendmail va ensuite utiliser notre relay. Pas besoin de l'activer dans le rc.conf car il ne fonctionne pas comme un daemon dans ce cas là.

Sauvegarde

Pour les sauvegardes on parle beaucoup de bacula ou rsync. Dans mon cas j'ai choisi de faire plus simple car : 1) bacula est adapté pour les grosses infra avec plusieurs serveurs et du stockage dédié 2) rsync nécessite un support de stockage distant que je n'ai pas (mon NAS ne tourne pas 24/24). Donc je me contente d'un simple script sh :)

#!/bin/sh

tar -zcvf /root/"sauvegarde-`date -v-1d +%B-%Y`".tar.gz \

/etc \

/var/named/etc \

/usr/jails/mail/etc \

/usr/jails/mail/home \

/usr/jails/mail/usr/local/etc \

/usr/jails/www/etc \

/usr/jails/www/home \

/usr/jails/www/usr/local/etc \

/usr/jails/xmpp/etc \

/usr/jails/xmpp/home \

/usr/jails/xmpp/usr/local/etc

Et dans crontab -e :

@monthly /root/sauvegarde.sh

Le 1er du mois à minuit le script sera exécuté, et dans son nom il sera indiqué le mois (précédent). Ainsi une sauvegarde exécutée le 1er Fevrier 2014 sera nommée January-2014.tar.gz si tout se passe bien.

Je n'ai pas de bases de données dont pas besoin d'arrêter les jail avant la sauvegarde. Je sauvegarde les /etc qui contiennent la configuration et les /home qui contiennent les données. Pas besoin du reste.

Note : ezjail-admin permet de sauvegarder les jails, mais je ne l'utilise pas en raison de deux inconvénients majeurs : 1) ça sauvegarde tout incluant l'arbre des ports, ce qui est long et inutile 2) ça nécessite d'arrêter la jail, et je n'ai pas envie d'avoir des interruptions de service à chaque sauvegarde, on est pas sur Windows Server.

Conclusion

FreeBSD ça envoie du rêve, c'est très puissant, ezjail-admin est un outil qui m'a fait franchir le pas. On gère ses jails avec une facilité déconcertante. Je suis volontairement resté vague sur cet article, car le but était de présenter un retour d'expérience, et non un tutoriel qui aurait été de toutes manières trop long. Si vous vous lancez dans l'aventure et souhaitez obtenir mes fichiers de configuration ou des explications, n'hésitez pas !

Transfert de domaine chez OVH... ou pas

Rédigé par Xavier - - Aucun commentaire

Je paye actuellement pour un abonnement "Plus" chez NoIP qui me permet d'avoir un nom de domaine court et pas un sous-domaine. Jusque là tout va bien, car mis à part le prix (50€/an) le service est excellent, et le support est très réactif et efficace.

Étant donné que mon serveur est maintenant en IP fixe, je n'ai plus vraiment de raisons de rester chez NoIP (dont la particularité est de disposer d'un système de mise à jour pour les IP dynamiques), j'ai donc souscrit un contrat chez OVH, bien moins cher, et demandé le transfert du domaine. NoIP m'a fourni très rapidement mon code d'autorisation de transfert, que j'ai à mon tour envoyé à OVH. La prise en compte du transfert m'a immédiatement été confirmé.

Au passage j'ai beaucoup de mal à m'y retrouver dans les interfaces d'administration d'OVH. Je dis bien "les", car il y a le manager v3, le manager v5, et une sorte de manager v4,5 sur lequel je tombe parfois. Ce n'est vraiment pas une bonne idée. Une seule interface devrait exister.

Episode 1 : Transfert du domaine

Mais au bout de 3 jours, rien. Le domaine est toujours chez NoIP, rien n'apparait dans mon espace client chez OVH. Je créé donc un ticket au service commercial en indiquant que mon domaine va bientôt expirer et que je ne souhaite pas le perdre. Pas de réponse de OVH. C'est ce qui est arrivé au bout de 2 jours, le domaine a expiré : plus de messagerie, plus de jabber. Je retourne donc sur mon ticket de support chez OVH et clique sur le bouton "Prévenir un responsable". J'indique que c'est la cata car mon nom de domaine est désactivé. Réponse :

- Veuillez nous excuser pour le délai de réponse Merci de renouveler le domaine chez votre prestataire et vous patientez 46 jours pour relancer le transfert

Queuah ? Je dois renouveler mon abonnement chez NoIP (50€) parce qu'OVH ne l'a pas transféré à temps et n'a pas donné signe de vie ? Il se trouve que je n'ai pas le choix, alors je paye. NoIP a été réactif l'a remis en route dans l'heure.

Episode 2 : Remboursement

J'envoie un nouveau message à OVH en leur demandant de me rembourser le contrat que j'ai souscrit chez eux, puisqu'ils n'ont pas transféré le nom de domaine à temps et m'ont obligé à rester chez NoIP. Réponse :

Veuillez nous excuser pour le délai de réponse. Si nous annulons le transfert du domaine XXXXX.org, il n'y aura pas de remboursement. Lorsque le transfert est refusé pour quelque raison que ce soit (hormis une erreur d'OVH) le prix du transfert ne peut vous être remboursé. Cela correspond, à notre intervention dans le transfert, le lancement de la demande.

Donc en gros je paye pour un contrat sans aucun service puisqu'il n'y a pas de domaine. La somme engagée (une dizaine d'euros) ne vaut pas la peine de dépenser plus d'énergie à demander un remboursement, d'autant que les conditions de vente me donnent probablement tort.

Episode 3 : Conclusion

Je suis reparti pour 1 an chez NoIP, ce qui n'est peut-être pas si mal que ça au final, car cet hébergeur américain est plus soucieux de ses clients que l'hébergeur français. Je suis toujours client OVH pour l'ADSL et pour mon blog, mais je ne leur confierai plus de gestion de domaines.

Classé dans : Blog - Mots clés : aucun

En panne

Rédigé par Xavier - - Aucun commentaire

J'ai subit une méchante panne électrique vers 1h du matin, et le service n'a été rétabli que vers 20 heures. Problème dans un câble sous-terrain, suite à un court-circuit du aux infiltrations d'eau... nous avons maintenant des branchements temporaires en fil volants.

Mais l'accès à internet ne fonctionne plus, il est probable que les lignes téléphoniques aient également pris un coup. Je n'ai pas encore réussi à joindre Orange, ce que je peux comprendre vu la période de pointe. Je me connecte actuellement en 3G via mon smartphone (partage de connexion avec le PC).

Bref mon serveur est injoignable, je ne peux plus recevoir de mail, ou me connecter à Jabber. Vu que l'incident est amené à durer je vais m'orienter vers la location d'un serveur dédié low cost et migrer mes services.

A bientôt.

Classé dans : Blog - Mots clés : aucun

Maniatux 7

Rédigé par Xavier - - Aucun commentaire

C'est la mode

Sur le web il y a des modes pour le look des sites, ceux qui avaient un accès à internet il y a quinze ans ne me contrediront pas. Dans les débuts la mode était de construire des choses carrées basées sur des tableaux. Puis, avec l'arrivée du CSS, nous avons pu faire des thèmes plus soignés avec des bordures arrondis, des motifs alluminium brossé, des logos partout, des éléments flotants/redimmensionables, des animations.... mais voici qu'aujourd'hui la mode revient aux choses carrées et épurées !

La nouvelle charte graphique de mon blog, estampillée Maniatux 7, s'inspire de cette mode des carrés tout en gardant cette philosophie de simplification au travers de la suppression de bon nombre de "widgets" (catégories, derniers commentaires...). La priorité doit être donnée à l'information utile, et il faut également penser aux petits écrans sur lesquels certaines choses seraient de toutes manières inexploitables. La fonction de recherche remplace les catégories, et les liens RSS du haut remplacent les widget derniers commentaires et derniers articles.

Touche pas à mes visiteurs

Vous remarquerez également le nouveau "logo" ainsi que le slogan, qui présentent ce que je pense des réseaux sociaux, qui ont posé leurs griffes et leurs tentacules partout, pour aggriper les gens qui n'y sont même pas inscrits et accumuler toujours plus de données personnelles. Mon blog est garanti 0%, ce qui permettra à votre Ghostery de se reposer un peu. Vous ne trouverez pas de page constellée de petits logos G+, F, t, comme on en voit partout. Seulement du HTTP bien standard, lisible sans inscription de manière publique.

Télécharger les sources

Faites-en bon usage !

Classé dans : Blog - Mots clés : aucun

Maniatux 6.0 est là

Rédigé par Xavier - - Aucun commentaire

Voici donc la version 6.0 du look de Maniatux ! Cette fois, le mot clé est simplicité. Le contenu est mis en valeur pour un meilleur confort de lecture, et le reste a été supprimé ou replacé. Je suis parti du principe qu'on se moque un peu du tri par catégorie, des favoris, et de plein d'autres choses, beaucoup lisent à partir d'un agrégateur RSS d'ailleurs.

Nouveautés

  • Le blog ne demande plus que 800px de largeur (au lieu de 940)
  • Les articles sont plus larges
  • La sidebar a disparu
  • La police des articles est à empattement (serif)
  • Les favoris sont maintenant dans le footer
  • Page contact + licence + philosophie => Page informations

Compatibilité

Les polices à empattement risquent de ne pas bien rendre sur certains systèmes anciens qui n'incluent pas d'anticrénelage : Windows XP ou même Linux + Chrome. Mais rien de critique non plus. La compatibilité a été testée avec les navigateurs suivants :

  • Firefox 8 : OK
  • Chrome 16 : les polices rendent mal sur Linux
  • Opera : OK
  • IE9 : OK

Sources du thème

Le thème est sous licence BSD, vous pouvez faire ce que vous voulez du code, sans clause de paternité, de copyleft, etc.

Classé dans : Blog - Mots clés : aucun