novembre 2011 Archives

29-11-2011 14:47

Xcache, accelerateur de PHP

Je vous reviens pour vous parler d'un outil que j'ai ajouté sur mon serveur. Je n'ai pas encore suffisamment de retour pour voir concrétement son efficacité, mais s'il est aussi efficace qu'il le prétend, il fera partie des indispensables.

Xcache est un accélerateur PHP, également appelé cache Opcode. Selon le site, il optimise les performances en supprimant le temps de compilation des scripts PHP en mettant en cache l'état compilé des scripts PHP dans la RAM et utilise la version compilée directement à partir de la RAM. Cela permettra d'accroître le taux de temps de génération de page jusqu' à 5 fois car il optimise également de nombreux autres aspects de scripts php et réduit la charge serveur.

Bon, ça me parait appétissant et j'ai lu sur ce billet que ça semble efficace. Comme Maikan héberge pas mal de blogs Wordpress, je me dis que ça vaut le coup de tenter le truc.

ALors l'installation sur Frugalware est toujours aussi simple car Xcache est dans les dépots.

  pacman -S xcache

Il faut ensuite parcourir le fichier de configuration. Contrairement à ce que dit l'article cité plus haut, celui ci n'est pas dans /etc/php5/conf.d/xcache.ini. En lisant la documentation du paquet (merci au passage à Pingax de me l'avoir indiqué), il faut faire une manipulation pour intégrer la configuration de Xcache dans son /etc/php.ini

  cat /usr/share/doc/xcache-1.3.2/xcache.ini >> /etc/php.ini

Au final, je n'ai pas énormément modifié la configuration. Au fil des tests, j'aurais peut-etre quelques réglages à faire, on verra. J'ai juste modifié la façon de charger l'extension xcache.so, qui était de base installé comme zend extension et que j'ai préféré charger comme une extension normale.

J'ai également ajouté un compte admin avec un mot de passe pour profiter de l'interface web. À ce sujet, j'ai suivi le principe d'alias du tutoriel mais je n'avais pas accès, surement à cause d'un problème de droit. Comme je n'aime pas trop le principe de lier le contenu de /usr/share sur mon serveur, j'ai juste copier le contenu de /usr/share/xcache/admin/ dans un dossier de mon serveur web et tout est impeccable. Après les modifications, il faut bien sur relancer lighttpd.

  systemctl restart lighttpd.service

Alors, il reste à voir si Xcache va changer la vie des visiteurs. Pour le test, vous pouvez visiter les blogs de Drine, Dirreve et Bob, ce sont tous des Wordpress. Sinon, peupleloup.info tourne sous Spip et devrait profiter également de Xcache.

Bonne journée à vous _o/


Posté par botchchikii | permalien | dans : frugalware, planet-libre

27-11-2011 18:51

Logrotate : faites tourner vos logs

Après quelques ennuis hier soir sur le serveur, j'ai du éplucher les logs… Ce qui m'a fait un peu halluciner en listant /var/log/ car certains fichiers sont monstrueux en taille ! syslog, et debug faisaient plus du giga chacun. Un fichier de cette taille ne peut donc pas décemment etre lu sans planter, il a fallu remédier à cela. De plus, l'espace disque s'en ressent fortement.

J'avais eu connaissance de logrotate il y a quelque temps, mais je n'avais pas pris le temps de le mettre en place. C'est donc le moment.

Pour l'installation, il suffit sur Frugalware de faire un petit pacman -S logrotate. Le fichier de configuration se trouve dans /etc/logrotate.conf et un dossier /etc/logrotate.d est crée.

Suite à mes recherches sur le net, j'ai trouvé quelques liens intéressants que je vous livre au fil de ce billet. J'ai personnellement modifié le fichier de configuration en pompant allégrement sur ce billet :

  ## logrotate.conf (logrotate)
  #
  # Par FHH le 30 / 08 / 2009
  #
  # Description
  #       Fichier de configuration de logrotate.
  #
   
  # Les logs sont compréssé avant rotation :
  compress
  # Fréquence de rotation par défaut :
  weekly
  # La rotation est effectuée, par défaut, même si le fichier est vide afin de faciliter 
  # les recherches dans les logs au jour le jour
  ifempty
  # Par défaut, une rotation par semaine est effectuée. 52 semaines par an, nous conservons donc
  # une profondeur de 52 semaines, ça laisse un an de log.
  rotate 52
  # En parallèle, si une archive est agée de plus de 52 semaines, elle est détruite :
  maxage 52
  # Envois par mail du fichier sur le point d'expirer.
  maillast
  # Le fichier sur le point d'expirer est envoyé à l'adresse définie ici.
  mail root@wolf.am
  # Si l'un des journaux décrit est manquant, aucune erreur n'est remontée.
  missingok
  # Insertion de la date dans l'archivage des journaux.
  dateext
  # Lors de l'archivage de plusieurs fichiers de logues, les scripts pre et post rotate sont 
  # exécuté une fois par fichier. L'option "sharedscripts" fixe l'exécution de ces scripts à
  # une seule fois.
  sharedscripts
  # Lors d'une rotation, un fichier de remplacement est créé avec les droits 0640 appartenant à 
  # root et au groupe root.
  create 0640 root root
  # Toutes les archives sont stockées dans /var/log/archives.
  olddir /mnt/backup2/log
  # Inclusion des scripts propres aux logs.
  include /etc/logrotate.d

Le fichier est suffisamment commenté pour comprendre comment il fonctionne. Une option qui est importante pour moi est de sauvegarder les rotations sur mon disque dur externe avec la fonction olddir. Ces paramètres généraux peuvent etre surchargés par les règles spécifiques à chaque log.

En effet, le plus important maintenant est de créer les régles, que l'on placera dans le répertoire /etc/logrotate.d. Un fichier par règle, que l'on nommera par le service affecté.

Lighttpd

  /var/log/lighttpd/*.log {
      notifempty
      olddir /mnt/backup2/log/lighttpd
      create 640 nobody nobody
      postrotate
          systemctl restart lighttpd.service > /dev/null
      endscript
  }

Prosody

  /var/log/prosody/*.log {
      notifempty
      olddir /mnt/backup2/log/prosody
      postrotate
          systemctl restart prosody.service > /dev/null
      endscript
  }

Syslog

Ce fichier est normalement déjà présent et permet de faire une rotation des logs les plus volumineux.

  /var/log/cron /var/log/debug /var/log/maillog /var/log/messages /var/log/secure /var/log/spooler /var/log/syslog {
      compress
      rotate 4
      postrotate
  	/bin/kill -HUP `cat /var/run/syslogd.pid 2>/dev/null` 2>/dev/null || true
      endscript
  }

Fail2ban

  /var/log/fail2ban.log {
      notifempty
  }

Vsftpd

  /var/log/vsftpd.log {
      notifempty
      postrotate
          systemctl restart vsftpd.service > /dev/null
      endscript
  }

Log des sites hébergés

Pour chaque domaine géré par lighttpd, je fais une rotation des logs également.

  /mnt/backup1/log/lighttpd/peupleloup.info/*.log {
      notifempty
      olddir /mnt/backup2/log/lighttpd/peupleloup.info
      create 640 nobody nobody
      postrotate
          systemctl restart lighttpd.service > /dev/null
      endscript
  }

Test et Mise en place du Cron

Avant de valider tout ça, il vaut mieux tester ce que ça donne, comme le conseille Marius.

  logrotate -d /etc/logrotate.conf

J'ai ensuite lancé logrotate en mode forcé pour me libérer de tous ces logs si volumineux avec un `` logrotate -f``. Ce qui m'a permis de gagner plus de 3go sur / !

Normalement, Frugalware fait tout le boulot à l'installation, et vous devriez avoir dans /etc/cron.daily/ un fichier nommé logrotate, contenant la commande pour lancer cet outil :

  #!/bin/sh
  
  /usr/sbin/logrotate /etc/logrotate.conf

Et voilà, bonne journée. Si je suis motivé, je vous parlerais de l'installation de Fail2ban et Denyhosts, pour bannir les méchantes Ip qui viennent pourrir votre serveur \o/


Posté par botchchikii | permalien | dans : frugalware, planet-libre

23-11-2011 10:59

Mettre des balises sans se fouler avec Sed

Encore une petite astuce qui m'a bien été utile ce matin. Je devais mettre en ligne le compte-rendu de l'assemblée générale de Peuple Loup et c'est toujours un souci pour retranscrire la discussion, qui s'est déroulée sur Jabber.

La solution la plus simple est d'entourer un bloc de discussion par la balise <pre>, ce qui permet de conserver les sauts de ligne notamment. Ce n'est pas la solution la plus propre ni la plus élégante : une discussion n'étant pas du code, idéalement c'est la balise <blockquote> qui devrait etre utilisée…

Seulement voilà, rajouter <blockquote> blablabla blablabla </blockquote> à chaque ligne, c'est comment dire… pas possible…

ALors je me suis satisfait du compromis pre pendant un long moment. Jusqu'à ce matin où je faisais le tour de peupleloup.org après une grosse mise à jour de Pluxml. Toutes les retranscriptions des assemblées générales balisées en pre débordent du thème… um peu comme cet article là. Avouez que ça le fait moyen…

J'ai bidouillé un peu le css, rajouté des overflow:auto; mais rien n'y fait, je ne sais pas pourquoi mais il veut déborder :/

Alors bon, autant faire ça bien et mettre les balises qui conviennent à ce genre de retranscription, mais pas question de rajouter à la main ces balises. Je sais que c'est possible de rajouter du texte dans un fichier, notamment avec la commande Sed. En cherchant sur le net, je trouve de quoi travailler avec ce tutoriel.

Alors, imaginons que vous avez un fichier avec toutes les lignes à baliser, que nous appelerons quote.txt et qui ressemble à ça :

    [21:58:46] mickael: La parole est à vous si vous souhaitez avoir des précisions ou des questions  
    [21:58:52] Bob: bon, une question concernant les DVD ?
    [21:59:08] mickael: oui ?
    [21:59:24] Bob: combien a coûté un DVD ? j'ai peut être une idée
    [21:59:35] mickael: 5€ le tout
    [21:59:41] Bob: prix d'achats de tout
    [22:00:04] mickael: http://peupleloup.info/peuple-loup-propose-son-dvd
    [22:00:19] mickael: oui, dvd+boitier+impression+transport

Nous allons commencer par rajouter la balise </blockquote> à la fin de chaque ligne. La modification sera enregistrée dans le fichier quote2.txt.

  sed -e 's/.*/& <\/blockquote>/' quote.xhtml > quote2.txt

À noter qu'il est nécessaire d'échapper le / à l'intérieur de la balise par un \ devant. Le résultat donne :

  [21:58:46] mickael: La parole est à vous si vous souhaitez avoir des précisions ou des questions  </blockquote>
    [21:58:52] Bob: bon, une question concernant les DVD ? </blockquote>
    [21:59:08] mickael: oui ? </blockquote>
    [21:59:24] Bob: combien a coûté un DVD ? j'ai peut être une idée </blockquote>
    [21:59:35] mickael: 5€ le tout </blockquote>
    [21:59:41] Bob: prix d'achats de tout </blockquote>
    [22:00:04] mickael: http://peupleloup.info/peuple-loup-propose-son-dvd </blockquote>
    [22:00:19] mickael: oui, dvd+boitier+impression+transport </blockquote>

Nous allons maintenant ajouter la balise <blockquote> en début de chaque ligne. Nous agissons sur le fichier ``quote2.txt et le fichier modifié sera nommé quote3.txt.

  sed -e  's/.*/<blockquote> &/' quote2.txt > quote3.txt

Ce qui donne donc le résultat final :

  <blockquote> [21:58:46] mickael: La parole est à vous si vous souhaitez avoir des précisions ou des questions  </blockquote>
  <blockquote>   [21:58:52] Bob: bon, une question concernant les DVD ? </blockquote>
  <blockquote>   [21:59:08] mickael: oui ? </blockquote>
  <blockquote>   [21:59:24] Bob: combien a coûté un DVD ? j'ai peut être une idée </blockquote>
  <blockquote>   [21:59:35] mickael: 5€ le tout </blockquote>
  <blockquote>   [21:59:41] Bob: prix d'achats de tout </blockquote>
  <blockquote>   [22:00:04] mickael: http://peupleloup.info/peuple-loup-propose-son-dvd </blockquote>
  <blockquote>   [22:00:19] mickael: oui, dvd+boitier+impression+transport </blockquote>

Il suffit ensuite de faire un petit xclip -i quote3.txt pour ensuit le coller dans l'article sur Pluxml. Et le résultat est plus convaincant qu'une balise pre, plus facile à placer mais source de pas mal d'autres contraintes.

Bonne journée à vous _o/


Posté par botchchikii | permalien | dans : vim

18-11-2011 15:35

Halte aux alias de noob !

Il vous est surement arrivé d'avoir ces messages frustrants lorsque vous utilisez les commandes cp, rm et mv en console :

  cp : voulez-vous écraser « /mnt/backup1/www/forum.peupleloup.info/include//db/config.php » ?
  sure you want to delete all the files in /srv/www/forum.peupleloup.info/include/db/upgrade [yn]?

Cette demande de confirmation, juste énervante sur un fichier, est injouable lorsqu'elle concerne une masse de fichiers (il n'y a pas l'option « All » qui permet de valider pour l'ensemble des fichiers).

En fait, ce comportement correspond à l'option "-i" ou "--interactive" des commandes concernées. Et c'est une sécurité anti-noob, pour donner une seconde chance avant de faire des choses regrettables…

Si vous assumez vos commandes, alors il est temps de bloquer la solution anti-noob en éditant le fichier /etc/profile et de commenter les trois lignes suivantes qui définissent ces fameux alias :

  # Aliases for newbies:
  alias rm='rm -i'
  alias cp='cp -i'
  alias mv='mv -i'

Voilà, c'est une astuce que j'avais réalisé sur mon desktop, mais je me suis rendu compte que je ne l'avais pas fait sur le serveur. J'en profite donc pour le notifier sur ce blog, comme petit pense-bete, c'est toujours bon à prendre.

Bonne journée _o/


Posté par botchchikii | permalien | dans : frugalware

03-11-2011 11:32

Wolf.am passe en Frugalware 1.5 stable

Après 194 jours d'uptime, il était temps de mettre à jour le serveur. Non pas qu'il faisait sentir des signes de faiblesses mais au bout d'un moment, faut y passer !

Avant de mettre à jour, j'ai décidé de passer en version stable, alors que j'étais branché sur la version Current de Frugalware. Pourquoi ce choix ?

  • Vu la moyenne des uptimes de ce serveur, la branche Current n'apporte rien : en 6 mois, tout a changé sur cette distribution très réactive et je n'ai ni le temps ni l'envie de faire des mises à jours plus fréquentes.
  • Le délai de 6 mois entre les versions stables me va donc très bien. un tutoriel de mise à jour est présent à chaque changement de version, ce qui me donne de bonnes indications. Il existe un tutoriel équivalent pour la version Current, mais c'est plus flou pour moi, car Current par essence est en évolution perpétuelle.
  • Il y a des changements majeurs en ce moment et je préfère attendre et laisser les autres tester \o/

Que dire sur cette mise à jour ? Comme d'habitude, tout s'est parfaitement passé <img src="../../moods/smilies/smiley.gif" alt=":)" /> Au niveau des changements :

  • Kernel 2.6.39
  • mysql 5.5.14
  • Prosody 0.8.2
  • lighttpd 1.4.28
  • phpmyadmin 3.4.7
  • iptables 1.4.11
  • vim 7.3
  • openssh 5.8p2

Seul petit souci, j'utilise ufw pour gérer Iptables et il semble ne pas apprécier les mises à jour de ce dernier. J'ai donc du remettre à 0 les règles et les recréer. C'était déjà arrivé la dernière fois. Ce n'est pas très long, mais cela peut amener des complications car au redémarrage, plus rien ne passe et donc l'accès en SSH est refusé… Il faut donc etre physiquement près du serveur pour l'opération.

Voilà, prochaine mise à jour et prochain redémarrage pour la Frugalware 1.6, nommée Fermus. Comme le dit Drine : En root pour 200 jours !!

Bonne journée à vous _o/


Posté par botchchikii | permalien | dans : frugalware