Postfix : résoudre l'erreur SASL

Postfix : résoudre l’erreur “fatal: www-data(33): message file too big”

postfix-logo

En regardant le fichier log /var/log/mail.err, je me suis aperçu que WordPress ne m’envoyait plus les sauvegardes hebdomadaires de la base de données.

Voici les messages d’erreur des logs :

Aug  6 20:07:31 mail postfix/sendmail[6460]: fatal: www-data(33): message file too big
Aug 13 20:07:36 mail postfix/sendmail[2033]: fatal: www-data(33): message file too big
Aug 20 20:07:33 mail postfix/sendmail[30622]: fatal: www-data(33): message file too big
Aug 27 20:07:29 mail postfix/sendmail[16390]: fatal: www-data(33): message file too big

Après une rapide enquête, il se trouve que ma base de données fait plus de 8 Mo, ce qui dépasse la configuration par défaut de Postfix.

Augmenter la limite de poids des messages sous Postfix

Il nous faut donc relever la limite de poids des messages. Pour cela, il suffit d’éditer le fichier de configuration Postfix :

nano /etc/postfix/main.cf

et d’ajouter cette ligne à la fin du fichier :

message_size_limit = 51200000

Cela nous permet d’envoyer jusqu’à 50 Mo. Attention, il faut que la taille de message_size_limit soit inférieure à la taille de la boîte mail, virtual_mailbox_limit. Sur mon serveur, j’ai désactivé cette dernière :

virtual_mailbox_limit = 0

Il ne vous reste plus qu’à relancer Postfix :

/etc/init.d/postfix restart

Et voilà!

hourglass

Serveur dédié : optimiser toutes les images JPG et PNG avec OptiPNG et JpegOptim

Je classe volontairement cet article dans la série Serveur dédié, étant donné que nous allons utiliser la ligne de commande exclusivement. Si vous souhaitez faire la même chose sur votre machine personnelle, il vous suffit d’utiliser Trimage (qui en plus possède une GUI).

hourglass

Si vous possédez un site, blog ou une galerie d’images, il peut être très intéressant d’optimiser toutes vos images d’un seul coup et ce, de manière lossless : chargement plus rapide des pages et moindre consommation de bande passante.

Sous Linux, il existe plusieurs programmes pour le faire. Personnellement, j’ai choisi OptiPNG (pour optimiser les PNG) et JpegOptim (pour optimiser les JPG).

L’installation et la compression de vos répertoires d’images prend à peine quelques minutes.

Installation d’OptiPNG et JpegOptim

On installe nos deux paquets :

apt-get install jpegoptim optipngCode language: JavaScript (javascript)

et on RTFM :

man jpegoptim

et

man optipng

Optimisation des JPG

On navigue dans notre répertoire images et on fait une estimation des gains. Avant de commencer, vérifiez que vous avez la dernière version de jpegoptim et installez manuellement la dernière version des dépôts Sid.

Commençons par les JPG :

jpegoptim -n -t *.jpgCode language: CSS (css)

-n permet de simuler l’optimisation.
-t permet de calculer l’espace gagné

Résultat :

Average compression (2730 files): 0.95% (452k)Code language: CSS (css)

Cela peut sembler peu mais je compresse toutes mes images avant de les mettre sur le web. Visiblement, quelques unes sont passées au travers du filet !

Lire la suite

Encoder une vidéo H.264 : utiliser qt-faststart pour la lecture progressive photo

Encoder une vidéo H.264 : utiliser qt-faststart pour la lecture progressive

Dernièrement, j’ai eu l’occasion de jouer avec l’intégration d’un lecteur vidéo en HTML5 pour jouer des vidéos encodées en H.264 (format .MP4) pour un client.

Il se trouve qu’aucune vidéo ne se lançait directement : le lecteur chargeait le fichier entièrement (plus de 60 Mo) avant de daigner jouer la vidéo.

h264-logo

La solution est toute simple : de la même manière que l’on peut créer un fichier JPG progressif (qui se charge de haut en bas, sans attendre le chargement total du fichier), il est possible de commencer à lire une vidéo sans que cette dernière soit totalement chargée, grâce à qt-faststart.

qt-faststart

qt-faststart  est un outil inclus avec FFmpeg qui ré-arrange un fichier H.264 de manière à ce que le “moov atom” soit devant les données, ce qui facilite la lecture sans attendre le chargement complet.

Si votre fichier MP4 est déjà créé, lancez la commande ainsi :

qt-faststart source_file.mp4 destination_file.mp4Code language: CSS (css)

Si vous souhaitez créer un fichier avec l’option faststart nativement, lancez l’encodage FFmpeg avec l’option :

-movflags +faststart 

Et voilà! Les vidéos streament proprement, avec une lecture progressive, sans attendre que le fichier complet soit téléchargé.

Serveur dédié : activer X11 forwarding pour SSH photo

Serveur dédié : activer X11 forwarding pour SSH

x11

Si jamais vous avez besoin que votre serveur dédié vous renvoie une image ou quoi que ce soit de graphique via SSH, vous aurez très certainement besoin d’avoir l’X11 Forwarding activé.

Il ne l’est pas par défaut donc si vous obtenez l’erreur suivante:

X11 forwarding request failed on channel 0 

alors il vous faut paramétrer l’option dans la configuration SSH du serveur.

Etape 1 : installer xauth

Sur le serveur et sur le client, xauth doit être installé. Il ne l’est pas sur notre serveur Debian, donc on l’installe :

apt-get install xauthCode language: JavaScript (javascript)

Etape 2 : vérifier que X11 forwarding est activé dans SSH

Sur le serveur, on édite la configuration du daemon SSH :

nano /etc/ssh/sshd_config

Et on vérifie qu’on a bien ForwardX11 est bien à yes :

AllowTcpForwarding yes
X11Forwarding yes
X11DisplayOffset 10
X11UseLocalhost yes
AddressFamily inet

et sur le client, on édite aussi la configuration SSH :

nano /etc/ssh/ssh_config

avec :

ForwardAgent yes
ForwardX11 yes
ForwardX11Trusted yes

Lire la suite

PHP : résoudre l'erreur

PHP : résoudre l’erreur “Creating default object from empty value”

php-logo

Suite à la mise à jour de PHP, mon fichier d’erreurs du site a commencé à afficher le message suivant :

PHP Warning: Creating default object from empty value in /wp-content/themes/skyminds/functions.php on line 1213

La ligne en question correspond à :

$posts[0]->comment_status = 'closed';Code language: PHP (php)

Le problème réside dans le fait que $posts n’est pas explicitement défini et comme les versions récentes de PHP tournent maintenant avec le mode E-STRICT par défaut, on obtient une erreur. Il existe deux solutions – soit mettre :

$posts = new stdClass();Code language: PHP (php)

s’il sagit d’un objet, soit mettre :

$posts = array();Code language: PHP (php)

s’il s’agit d’une associative array, juste avant la ligne de code incriminée. Dans mon cas, l’array() est la bonne solution.

Serveur dédié : mise à jour vers Debian 7 Wheezy photo

Serveur dédié : mise à jour vers Debian 7 Wheezy

debian-wheezy

Hier soir, j’ai mis le serveur à jour : nous passons de Debian 6 (“Squeeze”) à Debian 7 (“Wheezy”) – vous l’aurez remarqué : chez Debian, les versions portent le nom de personnages de Toy Story :)

Histoire de garder une trace de ce que je fais, voici les étapes que j’ai suivies.

Contrairement aux versions précédentes, Debian recommande d’utiliser apt-get au lieu d’aptitude. Donc acte dans ce tutoriel.

Etape 1 : s’assurer que le système est à jour

On vérifie que notre Squeeze est à jour :

apt-get update && apt-get upgradeCode language: JavaScript (javascript)

Etape 2 : installer les nouveaux dépôts

Pour voir vos dépôts existants :

cat /etc/apt/sources.listCode language: PHP (php)

Résultat :

deb http://mirror.ovh.net/debian/ squeeze main contrib
deb-src http://mirror.ovh.net/debian/ squeeze main contrib

deb http://security.debian.org/ squeeze/updates main contrib
deb-src http://security.debian.org/ squeeze/updates main contrib

# Webmin
deb http://download.webmin.com/download/repository/  sarge contrib

# varnish
deb http://repo.varnish-cache.org/debian/ squeeze varnish-3.0

# mod security
deb  squeeze-backports main 

# dotdeb updated LAMP servers
deb http://packages.dotdeb.org squeeze all
deb-src http://packages.dotdeb.org squeeze allCode language: PHP (php)

Il faut remplacer toutes les occurrences de squeeze en wheezy. On peut le faire avec cette commande :

sed -i 's/squeeze/wheezy/g' /etc/apt/sources.listCode language: PHP (php)

Evidemment, il y a un piège : le dépôt des backports a changé de nom et d’adresse. Il se trouve désormais ici :

deb http://ftp.debian.org/debian/ wheezy-backports mainCode language: JavaScript (javascript)

Après modification, voici donc notre sources.list :

deb http://mirror.ovh.net/debian/ wheezy main contrib
deb-src http://mirror.ovh.net/debian/ wheezy main contrib

deb http://security.debian.org/ wheezy/updates main contrib
deb-src http://security.debian.org/ wheezy/updates main contrib

# Webmin
deb http://download.webmin.com/download/repository/  sarge contrib

# varnish
deb http://repo.varnish-cache.org/debian/ wheezy varnish-3.0

# mod security
deb http://ftp.debian.org/debian/ wheezy-backports main

# dotdeb updated LAMP servers
deb http://packages.dotdeb.org wheezy all
deb-src http://packages.dotdeb.org wheezy allCode language: PHP (php)

Etape 3 : lancement de la mise à jour partielle

Mise à jour des fichiers :

apt-get updateCode language: JavaScript (javascript)

Aucune erreur. On continue avec la mise à jour minimale des paquets :

apt-get upgradeCode language: JavaScript (javascript)

Lire la suite

WordPress : des images qui ont perdu leur chemin photo

WordPress : des images qui ont perdu leur chemin

Problème : chemin erroné pour certaines images

lost-sign

En allant faire un tour sur Google Search Console, je me suis aperçu qu’il y a avait des erreurs sur la page Si je pouvais (vraiment) choisir ma voiture… et effectivement, les images ne s’affichaient pas!

Après vérification, il se trouve que le chemin des images était totalement inexistant : c’était un mélange d’URL publique et de chemin privé, donc aucun moyen que les images d’affichent comme il faut avec le chemin privé. Et bien sûr, on ne peut pas éditer le chemin des fichiers depuis WordPress.

Solution : MySQL

En faisant une petite requête sur la table postmeta, je me suis aperçu que ce n’était pas le seul article touché. J’ai donc purement et simplement supprimé le chemin privé dans la table, via une requête SQL :

Query:

UPDATE wp_postmeta SET meta_value = replace(meta_value, '/home/public_html/images/', '') WHERE meta_key='_wp_attached_file';Code language: JavaScript (javascript)

Résultat : 173 rows affected.

Ah oui quand même, 173 enregistrements affectés, cela fait quand même quelques dizaines d’articles sur lesquels les images ne s’affichaient pas. Je n’ai aucune explication à ce phénomène, d’autant que certains de ces articles ont plusieurs années. Sûrement une mauvaise configuration de ma part à un moment donné, je suppose.

Enfin, tout cela pour dire que garder un oeil sur GWT, cela peut être utile pour débugger aussi.

Serveur dédié : installation d'Apache, PHP, MySQL et Webmin photo

Serveur dédié : des paquets LAMP à jour sous Debian

Problème : des paquets vieillots

Lorsque votre serveur tourne sous Debian, les paquets sont éprouvés mais souvent datés. Ils tournent bien mais on ne peut pas vraiment bénéficier des versions les plus actuelles pour Apache, MySQL ou PHP par exemple.

La solution : ajouter un nouveau dépôt pour LAMP

La solution est tout simple, il suffit d’ajouter un nouveau dépôt, Dotdeb, qui permet de mettre à jour les paquets libmemcached, mysql, nginx, percona-toolkit, php5, php5-pecl, pinba-engine, redis, ruby-passenger, zabbix.

On édite donc notre liste :

nano /etc/apt/sources.listCode language: PHP (php)

et on ajoute les dépôts de Dotdeb, qui sont maintenus à jour par Guillaume Plessis :

deb http://packages.dotdeb.org stable all
deb-src http://packages.dotdeb.org stable allCode language: JavaScript (javascript)

et enfin, on ajoute la clé GPG :

wget http://www.dotdeb.org/dotdeb.gpg
cat dotdeb.gpg | apt-key add -Code language: JavaScript (javascript)

La mise à jour se fait comme d’habitude :

apt update && apt upgrade

Lire la suite

Pour les gamers de l'extrême :  Ultimate Battlefield 3 Simulator photo

Pour les gamers de l’extrême : Ultimate Battlefield 3 Simulator

Voici un résumé du reportage du Gadget Show, une émission diffusée sur Channel 5 au Royaume-Uni, sur la construction d’un simulateur de jeu pour un FPS :

Ce simulateur, unique en son genre, transforme le jeu Battlefield 3 en réalité : vous pouvez bouger, viser, tirer et être touché, immergé dans un environnement à 360 degrés.

Le simulateur vous permet de contrôler les mouvements du personnage avec votre corps grâce au tapis à bille multi-directionnel.

Il y a également le dôme de projection Igloo Vision, 12 marqueurs de paintball qui permettent au joueur, en temps réel, de ressentir les coups de l’ennemi, un système d’arme sans fil, des lumières d’ambiance LED et une caméra Kinect hackée pour l’occasion.

Impressionnant comme système. Cela me rappelle la veste pour ressentir les impacts de balles. Pour un fan de FPS, ce doit être le pied total.

dropbox

Dropbox : accédez à vos fichiers n’importe où

Dropbox ou la synchronisation des fichiers sur de multiples supports

Dropbox fait partie de ces outils que j’utilise quotidiennement et qui me facilite la vie.

Ce logiciel de stockage de données en ligne vous permet de synchroniser des fichiers et dossiers entre votre ordinateur et un serveur de Dropbox.

Vous pourrez ensuite consulter ces fichiers et dossiers depuis n’importe quel ordinateur, tablette ou smartphone.

Pour moi, par exemple, cela m’évite d’avoir à me promener avec ma clé USB. Mes fichiers sont sur mon ordinateur, synchronisés et je peux y avoir accès dans n’importe quelle salle de classe pourvu que j’ai accès à internet.

Pareil sur mon téléphone (en 5G) ou ma tablette (en wifi). Extrêmement pratique.

Installer Dropbox

Commencer par créer un compte sur le site de Dropbox.

Vous pouvez ouvrir un compte gratuit qui vous donne droit à 2 Go de stockage sur le site, extensibles à 18 Go grâce au parrainage (2 Go + 16 Go). Si vous avez besoin de plus d’espace, cela sera payant.

Après inscription sur le site et installation du logiciel, un nouveau dossier “Dropbox” est créé dans votre répertoire utilisateur.

C’est dans ce répertoire que vous devez mettre tous les fichiers et dossiers que vous voulez synchroniser.

Dès que vous placez un fichier dans ce répertoire, il est automatiquement uploadé sur votre compte sur le site de Dropbox.

Grandement recommandé. Inscrivez-vous ici et gagnez 500 Mo supplémentaires.

Serveur dédié : création d'une seedbox avec Transmission photo

Serveur dédié : création d’une seedbox avec Transmission

transmission-icon

Aujourd’hui, on apprend comment monter une seedbox sur un serveur dédié avec Transmission.

Une seedbox est un serveur privé dédié au téléchargement et à l’émission de fichiers, utilisant le protocole BitTorrent, connecté à des réseaux à très haut débit symétrique, souvent à 100 MBits/s et plus.

Les fichiers sont envoyés à la Seedbox par les autres utilisateurs du réseau BitTorrent, et de là ils peuvent être récupérés depuis un ordinateur personnel, à la vitesse maximale de sa connexion (ADSL, fibre optique, 3G…) et ceci par les protocoles FTP, HTTP, SFTP, rsync, SSH.

Etape 1 : installation de Transmission

Sur le serveur, dans le terminal, on installe Transmission :

apt-get install transmission-daemonCode language: JavaScript (javascript)

Le serveur se lance dès l’installation, on l’arrête :

/etc/init.d/transmission-daemon stop

Etape 2 : configurer Transmission

On édite sa configuration :

nano /etc/transmission-daemon/settings.json

Eléments à modifier selon votre configuration :

  • “download-dir”: “/home/files”,
  • “incomplete-dir”: “/home/files/tmp”,
  • “rpc-password”: “votre-mot-de-passe”,
  • “rpc-username”: “votre-login”,
  • “rpc-whitelist”: “254.254.254.254”,

Le mot de passe est hashé au redémarrage du serveur, vous pouvez le rentrer en clair.

Le serveur tourne par défaut sur le port 51413 et le webadmin sur le port 9091. Pensez à whitelister votre adresse IP.

Lire la suite

pagespeed-99-201301

Performance du site : PageSpeed à 99%

Ah, ce moment magique durant lequel tu constates que ta note PageSpeed monte à 99%, via GTmetrix :

pagespeed-99-201301

C’est beau, sachant qu’au niveau CSS, c’est la barre WordPress du haut qui génère l’overhead.

Prochaine étape : mettre les fichiers statiques sur un sous-domaine cookieless.