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

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

Bash : réparer les tables MySQL en cas de crash photo

Bash : réparer les tables MySQL en cas de crash

Bash Il arrive que parfois une table SQL soit complètement plantée, ce qui peut bloquer l’accès à la base de données et donc l’accès au site.

Pour éviter cela, j’ai écrit un petit script bash qui me permet de stopper le serveur MySQL, procéder à la réparation de toutes les tables de toutes les bases de données puis relancer le serveur MySQL, Apache et Varnish.

#!/bin/sh
# MySQL Auto-Repair
# Written by Matt - skyminds.net

# stop the MySQL server
/etc/init.d/mysql stop

# check for errors
myisamchk /var/lib/mysql/*/*.MYI

# ask permission to repair
read -p "Repair tables ? (y/n)" -n 1 -r
if [[ $REPLY =~ ^[Yy]$ ]]
then
	# repair everything
	myisamchk -r /var/lib/mysql/*/*.MYI

	# restart servers
	/etc/init.d/mysql restart
	/etc/init.d/apache2 restart
	/etc/init.d/varnish restart
else
	/etc/init.d/mysql restart
fi

C’est le genre de petit fichier bash à garder au frais sur le serveur, facile à lancer en SSH depuis n’importe quel terminal en cas de besoin.

jQuery : sélectionner un élément dont l'ID ou la classe commence ou finit par une chaîne photo 1

jQuery : script utilisant la fonction toggle pour afficher ou cacher un bloc HTML

jquery

Il y a quelques mois, je me suis amusé à transformer mon script javascript maison qui me permet d’afficher certaines zones de textes sur le site, notamment dans les articles de la catégorie Music/Séries.

Étant donné que jQuery est présent sur toutes les pages du site, j’ai adapté le script pour qu’il utilise jQuery. Cela fera aussi une librairie maison de moins à maintenir (et à charger).

Important : si vous voulez gérer plusieurs blocs, utilisez le script JQuery toggle pour afficher et cacher de multiples blocs HTML

Un script Javascript répondant à des besoins précis

J’écris pas mal de code afin de répondre à mes besoins sur le site, le but étant de me simplifier la vie au maximum.

Dans certains articles, il existe des zones de textes qui ne sont pas tout public et qui nécessitent une authentification préalable à leur lecture. La zone de texte doit apparaître lorsque l’on clique sur un des liens présents dans l’article.

Démo

Pour voir ce script en action, il suffit de cliquer sur ce lien.

Ce texte apparaît et disparaît grâce à un script javascript
écrit pour jQuery et qui utilise la fonction toggle().

Lire la suite

PHP : solution pour l'erreur "preg_match(): Compilation failed: invalid range in character class" photo

PHP : résoudre l’erreur “function eregi() is deprecated”

php logo

Il vous est peut-être déjà arrivé de tomber sur ce message d’avertissement :

Function eregi() is deprecated.

En fait, “deprecated” signifie que les versions récentes de PHP considèrent cette fonction comme obsolète, c’est un peu comme si la fonction ereg() n’existait plus.

Par conséquent, mieux vaut dorénavant utiliser la fonction preg_match qui a pris sa place.

La fonction ereg() ou eregi() est donc remplacée par la fonction preg_match() depuis PHP 5.3 :

$is_image = eregi( "jpg|gif",$file_type );Code language: PHP (php)

devient donc :

$is_image = preg_match( “~jpg|gif~i”,$file_type );Code language: PHP (php)

Voici la liste des fonctions devenues obsolètes sous PHP 5.3 :

call_user_method() (use call_user_func() instead)
call_user_method_array() (use call_user_func_array() instead)
define_syslog_variables()
dl()
ereg() (use preg_match() instead)
ereg_replace() (use preg_replace() instead)
eregi() (use preg_match() with the ‘i’ modifier instead)
eregi_replace() (use preg_replace() with the ‘i’ modifier instead)
set_magic_quotes_runtime() and its alias, magic_quotes_runtime()
session_register() (use the $_SESSION superglobal instead)
session_unregister() (use the $_SESSION superglobal instead)
session_is_registered() (use the $_SESSION superglobal instead)
set_socket_blocking() (use stream_set_blocking() instead)
split() (use preg_split() instead)
spliti() (use preg_split() with the ‘i’ modifier instead)
sql_regcase()
mysql_db_query() (use mysql_select_db() and mysql_query() instead)
mysql_escape_string() (use mysql_real_escape_string() instead)
Passing locale category names as strings is now deprecated. Use the LC_* family of constants instead.
The is_dst parameter to mktime(). Use the new timezone handling functions instead.Code language: JavaScript (javascript)
HTML5 : corriger l'erreur "The frameborder attribute on the iframe element is obsolete. Use CSS instead." photo

WordPress : valider le code oEmbed Youtube en HTML5

Le problème : le code des vidéos n’est pas valide en HTML5

Maintenant que nous avons mis à jour le code des oEmbed Youtube, nous allons rendre le code de l’iframe valide. Voici ce que le code oEmbed de WordPress donne par défaut avec un lien Youtube :

<iframe src="https://www.youtube.com/embed/Gvh2Zo7UL6E" width="660" height="371" frameborder="0" allowfullscreen="allowfullscreen"></iframe>Code language: HTML, XML (xml)

Résultat:

Or le petit problème, c’est que tout cela n’est pas vraiment valide au niveau W3C et je commence à me lasser de voir ces erreurs de validation sur toutes les pages du site avec des vidéos :

Erreur 1 : Attribute allowfullscreen not allowed on element iframe at this point.
Erreur 2 : The frameborder attribute on the iframe element is obsolete. Use CSS instead.Code language: JavaScript (javascript)

La solution : filtrer le rendu oEmbed de WordPress pour purifier le code

HTML5 logo

Voici donc la solution que j’ai mise en place sur le site : je filtre le code oEmbed de WordPress de manière à retirer le tag allowfullscreen qui n’a rien à faire là et à supprimer l’attribut frameborder, que je remplace par un style="border: none".

Éditez le fichier functions.php de votre thème et ajoutez-y cette fonction:

<?php
/*
|-----------------------------------------------------------------------
| Sky oEmbed Filter by Matt - www.skyminds.net
|-----------------------------------------------------------------------
|
| The sky_oembed_filter() function attempts to validate WordPress 
| video oEmbeds for HTML5.
| $return is the normal HTML that the oEmbed process would return. 
| $data is the data received from the oEmbed call, in an object format. 
| $url is the original URL being queried for oEmbed info. 
|
*/
add_filter('oembed_dataparse', 'sky_oembed_filter', 90, 3 );
function sky_oembed_filter( $return, $data, $url ) {
 	$return = str_replace('frameborder="0" allowfullscreen', 'style="border: none"', $return);
	return $return;
}Code language: HTML, XML (xml)

Notez que WordPress cache les résultats oEmbed dans la table postmeta donc après avoir installé ce code et si vous voulez vérifier que cela fonctionne, éditez un article pour que le postmeta se mette à jour.

Voilà, vos pages avec vidéos YouTube devraient maintenant être valides.

Linux : résoudre l'erreur "failed to execute /lib/udev/socket:@/org/freedesktop/hal/udev_event" photo

Linux : joindre plusieurs fichiers avec cat

linux logo

Si vous avez besoin de joindre (ou concaténer) plusieurs fichiers qui ont été nommés en ordre alphabétique, comme par exemple file0001.dat, file0002.dat, file0003.dat…. file1000.dat, une commande s’impose sous Linux : cat.

Dans un terminal, vous pouvez juste lancer cat comme ceci pour rassembler tous vos fichiers en un seul :

cat file*.dat >all_files.datCode language: CSS (css)

C’est une commande système, il n’y a rien à installer et c’est plutôt pratique.

HTML5 : corriger l'erreur "The frameborder attribute on the iframe element is obsolete. Use CSS instead." photo

HTML5 : résoudre l’erreur “keyword publisher is not registered” (validateur W3C)

HTML5 logo

Sur votre site ou blog, vous avez peut-être ajouté le widget ou bouton +1 de Google+, le réseau social de Google. Or le petit problème, c’est que le code fourni empêche la bonne validation du document.

Voici le code fourni par Google :

<a title="Google+" href="https://plus.google.com/114535411372700844744" rel="publisher nofollow">Google+</a>Code language: HTML, XML (xml)

et voici l’erreur renvoyée par le validateur W3C :

Keyword publisher is not registered

HTML5 étant toujours en cours de réalisation, les valeurs de la balise rel sont assez restreintes et on ne peut pas mettre tout ce que l’on veut sans déclencher l’erreur.

La solution est toute simple : il faut ajouter la valeur du rel en argument dans le lien, comme ceci :

<a title="Google+" href="https://plus.google.com/114535411372700844744?rel=publisher" rel="nofollow">Google+</a>Code language: HTML, XML (xml)

Et voilà, plus d’erreur lors de la validation.

Linux Mint : mettre à jour le noyau linux avec le kernel liquorix photo

Installer wine sous Linux Mint Debian Edition

lmde J’ai réinstallé Linux Mint Debian Edition aka LMDE sur mon portable et j’en suis extrêmement satisfait, cela tourne très bien et c’est d’une stabilité remarquable.

Par contre, avec la nouvelle version (12.04), qui vient de sortir il y a quelques mois, il ne semble plus possible d’installer wine avec les dépôts par défaut.

Solution : ajouter un nouveau dépôt

Dans le terminal, en root, tapez :

echo 'deb http://boisson.homeip.net/debian/ squeeze wine' >> /etc/apt/sources.list

ensuite, on met à jour les dépôts :

apt-get update

et on installe wine :

apt-get install wine

Et hop, une version plutôt récente de wine (1.5.x) est installée.

Réinitialiser le mot de passe root de MySQL ou MariaDB sous Debian photo

MySQL : changer le mot de passe de l’utilisateur root

icon mysql

J’ai installé la mise à jour Ubuntu 12.04 Precise Pengolin il y a quelques semaines (et je n’aurais pas dû, ma machine laggue comme ce n’est pas permis) et au moment de lancer SAM Broadcaster, un message d’erreur apparaît comme quoi il ne peut se connecter à la base MySQL.

sudo service mysql restart

Résultat :

stop: Unknown instance: 
start: Job failed to startCode language: HTTP (http)

Autre message d’erreur :

/usr/bin/mysqladmin: connect to server at 'localhost' failed
error: 'Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)'Code language: JavaScript (javascript)

Etrange, je n’avais rien modifié.

Voici donc en quelques étapes comment changer le mot de passe MySQL de l’utilisateur root lorsqu’on l’a oublié ou qu’il faut le changer sans connaitre l’ancien.

Toutes ces commandes sont à exécuter en tant qu’utilisateur root donc :

sudo -i

Je vous propose deux méthodes : la première méthode s’adresse aux barbus qui veulent mettre les mains dans le cambouis, la seconde à ceux qui veulent faire ça en 2 commandes.

Méthode 1 (mode cambouis)

Etape 1 : arrêt du service mysql

/etc/init.d/mysql stop

Résultat :

Stopping MySQL database server: mysqld.

Etape 2 : lancement du serveur MySQL sans mot de passe

mysqld_safe --skip-grant-tables &

Résultat :

[1] 5025
mysqld_safe Logging to syslog.
mysqld_safe Starting mysqld daemon with databases from /var/lib/mysql
Code language: JavaScript (javascript)

Lire la suite

WordPress : récupérer la liste emails des membres et commentateurs photo

WordPress : nettoyage de la base de données

wordpress_icon_blue Avec le temps, les mises à jour successives et l’installation de différents plugins, la base de données de WordPress a tendance à prendre du poids, ce qui nuit aux performances. Voici donc comment lui faire bénéficier d’un petit régime.

N’oubliez pas de faire une sauvegarde de votre base de données avant de lancer ces requêtes. Backup now.

Nettoyage de wp_postmeta

Avant optimisation, ma table wp-postmeta faisait 12 403 enregistrements.

DELETE FROM wp_postmeta WHERE meta_key = '_edit_lock';
DELETE FROM wp_postmeta WHERE meta_key = '_edit_last';
DELETE FROM wp_postmeta WHERE meta_key = '_wp_old_slug';

Maintenant : 12 240.

Nettoyage de wp_commentmeta

On supprime tout ce qu’Akismet nous a mis dans la table wp_commentmeta :

DELETE FROM wp_commentmeta WHERE meta_key LIKE '%akismet%';

et on supprime toutes les entrées qui n’ont aucune relation avec wp_comments :

DELETE FROM wp_commentmeta WHERE comment_id NOT IN (SELECT comment_id FROM wp_comments);

Nettoyage de wp_options

Passage de 880 enregistrements à 476. WordPress crée ces entrées automatiquement et les purge occasionnellement, autant l’aider un peu.

DELETE FROM wp_options WHERE option_name LIKE '_site_transient_browser_%';
DELETE FROM wp_options WHERE option_name LIKE '_site_transient_timeout_browser_%';
DELETE FROM wp_options WHERE option_name LIKE '_transient_%';

Lire la suite

PHP: résoudre l'erreur "file_get_contents(): SSL operation failed with code 1" photo

PHP : résoudre l’erreur “assigning the return value of new by reference is deprecated”

Si, lors d’une journée de débuggage PHP, vous tombez sur l’erreur suivante :

Deprecated: Assigning the return value of new by reference is deprecated in  on line 12 Code language: JavaScript (javascript)

pas de panique, c’est extrêmement simple à résoudre. Vous avez probablement une ligne dans ce goût-là :

$data =& new Structured_Info();Code language: PHP (php)

Or, depuis PHP5, le passage par réference est systématique sur new, donc il suffit d’enlever le ‘&’ et d’écrire :

$data = new Structured_Info();Code language: PHP (php)

Tout simplement.