Author

Matt

Browsing

La dernière version du serveur mail Dovecot nécessite quelques petits changements par rapport à la version antérieure.

Erreurs SASL

Voici ce que l’on peut lire dans les logs:

postfix/smtps/smtpd: warning: SASL: Connect to private/auth failed: Connection refused
postfix/smtps/smtpd: fatal: no SASL authentication mechanisms
postfix/master: warning: process /usr/lib/postfix/sbin/smtpd pid 635413 exit status 1
postfix/master: warning: /usr/lib/postfix/sbin/smtpd: bad command startup -- throttling

Solution: il faut éditer /etc/dovecot/conf.d/10-master.conf:

nano /etc/dovecot/conf.d/10-master.conf

et ajouter ce bloc de directives à la fin du bloc service auth:

service auth {
  # ... Previous config blocks
 
  # auth-master
  unix_listener auth-master {
    mode = 0660
    user = vmail
    group = vmail
  }

}

Stats writer

Dovecot inclut maintenant un module de statistiques et donne une erreur si jamais il n’est pas défini dans la configuration. Voici le message d’erreur:

Error: net_connect_unix(/var/run/dovecot/stats-writer) failed: Permission denied))

Il faut donc le rajouter:

nano /etc/dovecot/conf.d/10-master.conf

et ajouter ce bloc à la toute fin du fichier:

# fix Error: net_connect_unix(/var/run/dovecot/stats-writer) failed: Permission denied))
service stats {
   unix_listener stats-writer {
     group = dovecot
     mode = 0660
     user =
   }
  }

Les paramètres SSL et Diffie-Hellman

La syntaxe de la directive Diffie-Hellman a changé. On crée maintenant un nouveau fichier dh.pem avec cette commande:

dd if=/var/lib/dovecot/ssl-parameters.dat bs=1 skip=88 | openssl dhparam -inform der > /etc/dovecot/dh.pem

On édite la configuration ssl de Dovecot:

nano /etc/dovecot/conf.d/10-ssl.conf

Voici ce que nous avions précédemment:

ssl_dh_parameters_length = 4096

et nous allons le remplacer par:

ssl_dh=</etc/dovecot/dh.pem

Note: il y a bien le caractère < après le signe =, ce n’est pas une faute de frappe.

Pendant que vous éditez le fichier, pensez à mettre à jour la directive des protocoles SSL: ssl_protocols devient ssl_min_protocol (attention, cela devient singulier et non pluriel comme précédemment!):

#ssl_protocols = !SSLv3
ssl_min_protocol = !SSLv3

Vérification de la configuration Dovecot

Vous pouvez vérifier la configuration Dovecot avec:

doveconf -n

Votre configuration s’affiche si tout va bien et vous donne les erreurs et comment les corriger dans le cas contraire.

Si tout va bien, il ne vous reste plus qu’à redémarrer les services:

service dovecot restart && service postfix restart

Et voilà, le serveur mail est de nouveau opérationnel.

Ces derniers jours, en me rendant dans la Google Search Console, je me suis rendu compte que j’avais quelques milliers d’articles qui étaient indexés par Google mais sans être présents dans aucune sitemap.

Il s’agit en fait des articles de tablatures de guitare: au lieu de publier un article pour chaque tablatures, le site crée à la volée un article WordPress qui contient la tablature en question. C’est très efficace mais cela ne permet évidemment pas de les ajouter au fichier sitemap par défaut.

Si vous avez ce genre de configuration – ou si vous avez d’autres liens à soumettre à Google, voici ce que j’ai utilisé cette semaine.

État des lieux

On commence par se connecter à la Search Console pour se rendre dans Coverage > Valid > Indexed, not submitted in sitemap.

Voici un petit graphique qui montre les 1658 pages au 26 juillet et après soumission de la première sitemap – 1000 liens, car cela semble être la limite de l’export de la Search console, un premier résultat positif:

Export de la liste des articles

Tout en haut de la page, cliquez sur le bouton Export et sélectionnez Download CSV:

Cela lance le téléchargement d’un fichier zip. Décompressez l’archive et ouvrez le fichier Table.csv dans votre tableur préféré.

Nous mettons nos compétences au service de vos besoins

Stratégie

Nous étudions le parcours de votre site et vos besoins pour vous fournir une solution à long-terme, qui correspond à votre vision.

Développement

Vous souhaitez ajouter de nouvelles fonctionnalités à votre site ou boutique? Nous pouvons coder la solution!

Performance

Votre site doit être rapide et optimisé sur tous supports afin de convertir vos visiteurs. Nous pouvons auditer votre site et vous proposer la solution adaptée.

Hébergement

Vos projets ont besoin d’un hébergement de qualité, c’est la fondation de votre site web et elle doit être solide car c’est sur elle que tout repose.

Maintenance

Votre site a besoin d’une maintenance régulière afin de toujours utiliser la dernière mouture du code et rester sécurisé face aux menaces.

Assistance

Vous avez besoin d’aide ponctuelle? Pas de problème, nous sommes à votre écoute pour vous dépanner rapidement.

Il m’arrive très souvent d’utiliser une connexion Orange (depuis une Livebox 4) lorsque je suis chez mes parents.

Le problème est que la Livebox possède ses propres serveurs DNS intégrés et qu’ils sont menteurs, c’est-à-dire qu’ils obéissent à des règles de filtrage et de blocage décidés par l’opérateur (ou par des décisions de justice qui concernent tous les opérateurs).

Dans le cas d’Orange, les requêtes sont automatiquement redirigées vers votre machine locale, sur localhost. Comme j’utilise mon serveur Local tourne en quasi-permanence sur ma machine, cela me donne une belle erreur 502, comme vous pouvez le voir sur cette image:

MacOS : changer les serveurs DNS pour éviter les DNS menteurs de votre box photo
Lorsque votre les DNS intégrés à votre box vous mentent, il est temps de changer!

Nous avions déjà abordé le changement des serveurs DNS de notre Freebox mais il est un peu plus délicat de demander à vos hôtes de pouvoir changer les réglages de leur box… il y a une solution bien plus simple que de trifouiller au fond des entrailles du routeur fruitier : il suffit d’ajouter de nouveaux serveurs de noms sur votre machine, directement dans les options de votre connexion réseau.

Modification des serveurs de noms sous MacOS

Sous MacOS, il suffit de se rendre dans Préférences Systèmes > Réseau > Avancé :

Ce soir, on lance la mise à jour du serveur: nous passons notre version d’Ubuntu Server de Bionic Beaver (18.04 LTS) à Focal Fossa (20.04 LTS).

On commence par les précautions d’usage: faire ses sauvegardes et vérifier qu’elles sont bien intègres avant de commencer la mise à jour. C’est votre bouée en cas de soucis!

Étape 1: avoir l’installation d’Ubuntu actuelle à jour

Assurez-vous d’avoir une installation à jour avant de commencer:

apt update && apt dist-upgrade

On reboot ensuite pour appliquer les changements:

shutdown -r now

Étape 2: installation de screen et ouverture du port 1022 pour SSH

Comme nous allons lancer la mise à jour via un terminal SSH, il est possible que pour une raison ou un autre la connexion soit coupée. Cela arrive et cela peut être vraiment tendu à certaines étapes de la mise à jour (kernel anyone?).

Pour prévenir cela, on vérifie que screen est bien installé:

apt install screen

On peut lancer une session screen avec:

screen

et si la connexion SSH est interrompue lors de la mise à jour, on peut se raccrocher à la session de mise à jour avec la commande:

screen -Dr

Ensuite, au niveau du pare-feu, on ouvre le port 1022. C’est via ce port que l’on pourra reprendre la MAJ en cas de pépin. Suivant la configuration du serveur, on peut utiliser iptables:

iptables -I INPUT -p tcp --dport 1022 -j ACCEPT

ou alors ufw:

ufw allow 1022

Étape 3: installation des sources de mises à jour

Normalement, ces paquets sont installés d’office mais cela ne coûte rien de vérifier qu’ils sont bien présents avant de lancer toute commande:

apt install update-manager-core ubuntu-release-upgrader-core

On vérifie dans le fichier /etc/update-manager/release-upgrades que la variable Prompt et bien égale à LTS pour n’installer que les versions Long Time Support:

cat /etc/update-manager/release-upgrades

...
Prompt=LTS

Étape 4: lancement de l’installation

Vous avez bien fait vos sauvegardes? C’est parti, on lance la procédure de mise à jour:

do-release-upgrade -d

Il y a plusieurs écrans d’avertissement concernant SSH:

[...]
Continue running under SSH? 

This session appears to be running under ssh. It is not recommended 
to perform a upgrade over ssh currently because in case of failure it 
is harder to recover. 

If you continue, an additional ssh daemon will be started at port 
'1022'. 
Do you want to continue? 

Continue [yN] Y

On a bien ouvert le port 1022 donc validez. Vous tombez sur un autre écran qui vous informe que certains services auront besoin d’être redémarrés. Choisissez Yes pour que les services soient redémarrés automatiquement, sans intervention de votre part.

L’installation a pris entre 30 et 40 minutes sur le serveur. A la fin, on nous demande de rebooter le serveur pour appliquer tous les changements (avec mise à jour majeure du kernel):

[...]
System upgrade is complete.
Restart required.

To finish the upgrade, a restart is required.

If you select 'y' the system will be restarted.

Continue [yN] Y

Et voilà, après redémarrage de la machine, tous nos services sont opérationnels.

Dernière étape: réactivation des sources de dépôts pour notre nouvelle version d’Ubuntu

La mise à jour désactive les sources de dépôts qui se trouvent dans le dossier /etc/apt/sources.list.d/. Il faut donc éditer les fichiers et, dans notre cas, remplacer bionic par focal.

Quelques copiés/collés plus tard, nous pouvons nous assurer que tout est vraiment à jour avec un ultime:

apt update && apt upgrade 

Vérification de la version du serveur:

lsb_release -a

Résultats:

No LSB modules are available.
Distributor ID:	Ubuntu
Description:	Ubuntu 20.04 LTS
Release:	20.04
Codename:	focal

Mise à jour réussie, en moins d’une heure.

Sur un serveur hébergé en Chine continentale, j’ai eu la surprise de ne pas être en mesure de mettre à jour wp-cli:

wp cli update

Error: Failed to get url 'https://api.github.com/repos/wp-cli/wp-cli/releases?per_page=100': cURL error 7: Failed to connect to api.github.com port 443: Connection refused.

Visiblement, certaines adresses sont injoignables, notamment lorsqu’elles utilisent le port 443 (https).

Evidemment, on peut télécharger wp-cli manuellement et le réinstaller mais si vous souhaitez une solution plus rapide, voilà comment j’ai procédé.

Première solution: édition de /etc/hosts

1. On récupère l’adresse IP de l’adresse api.github.com:

curl --ipv4 -v https://api.github.com

Résultat: 13.250.94.254 port 443

2. On édite le fichier /etc/hosts du serveur:

nano /etc/hosts

3. On y ajoute l’adresse IP correspondante à api.github.com:

13.250.94.254 api.github.com

Et voilà, le téléchargement depuis github est de nouveau accessible.

Deuxième solution: utiliser le drapeau –ipv4

S’il s’agit d’un téléchargement simple, par exemple pour installer wp-clipour la première fois, il suffit d’indiquer le drapeau --ipv4 dans votre commande curl:

curl --ipv4 -v -O https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli.phar

chmod +x wp-cli.phar
mv wp-cli.phar /usr/local/bin/wp

Troisième solution: configurer curl avec –ipv4

Histoire de ne pas avoir à éditer le fichier /etc/host pour chaque site distant, autant configurer curl pour utiliser IPv4 par défaut:

echo '--ipv4' >> ~/.curlrc

Notons que la configuration de ce VPS est très particulière, je n’ai jamais eu à faire ce genre de manipulation sur les autres serveurs dont je m’occupe. C’est très probablement dû au fait qu’il ne doit pas avoir IPv6 configuré. Au passage, le filtrage du Great Firewall of China rend également chaque opération/commande assez délicate.

J’ai récemment joué avec l’API de YouTube pour pouvoir récupérer diverses informations sur les vidéos afin d’ajouter au site les données structurées idoines.

Il se trouve qu’en local, lorsque l’on utilise file_get_contents(), on peut obtenir une erreur de ce type lorsque le serveur n’est pas configuré avec le bundle de certificats OpenSSL:

Warning: file_get_contents(): SSL operation failed with code 1. OpenSSL Error messages: error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed in ...php on line 2

Warning: file_get_contents(): Failed to enable crypto in ...php on line 2

Warning: file_get_contents(https://........f=json): failed to open stream: operation failed in ...php on line 2

Si cela vous arrive, plusieurs solutions s’offrent à vous.

Méthode 1: configuration de PHP côté machine/serveur

1. Vérifiez qu’OpenSSL est bien installé sur votre machine (il devrait l’être sur le serveur!).

2. Ajoutez cette ligne à la configuration de PHP, dans votre php.ini:

openssl.cafile=/usr/local/etc/openssl/cert.pem

3. Redémarrez le service PHP.

Méthode 2 : une fonction qui utilise curl au lieu de file_get_contents()

Au lieu de m’embêter à configurer OpenSSL ou à toucher à PHP dans un conteneur docker (Local), il se trouve que l’on peut réécrire la fonction file_get_contents() avec une fonction maison qui utilise curl.

Voici la fonction en question:

/*
Custom CURL function that mimicks file_get_contents()
@returns false if no content is fetched
Matt Biscay (https://mattbiscay.com)
*/
function sky_curl_get_file_contents( $URL ){
	$c = curl_init();
	curl_setopt( $c, CURLOPT_RETURNTRANSFER, 1 );
	curl_setopt( $c, CURLOPT_URL, $URL );
	$contents = curl_exec( $c );
	curl_close( $c );
	if( $contents ) :
		return $contents;
	else:
		return false;
	endif;
}

La fonction retourne false si la requête échoue, ce qui est très utile pour éviter de faire des appels à des valeurs d’un tableau qui n’existe pas. On peut alors réfléchir à un autre moyen de peupler les champs de données structurées (mais c’est un sujet à aborder une autre fois).

Filmed and recorded live at the Nassau Coliseum, Long Island in August 1988 during the ‘Momentary Lapse Of Reason’ World Tour.

In December 2019 Pink Floyd released The Later Years box set. It features newly re-edited version of the ‘Delicate Sound Of Thunder’ video with newly remixed audio as one of the main features. But unfortunately it wasn’t expanded to the full setlist concert. Several originally omitted tracks presented there on the bonus Blu-Ray/DVD disc. Also two instrumental compositions remained in shortened form. Unfortunately, footage of another two tracks from the setlist weren’t included at all for unknown reasons. I present the expanded edition of this beautiful concert video with all available footage in the right place.

This edition expands official 2019 version by 17 minutes.

  1. Shine On You Crazy Diamond [00:00:00]
  2. Signs of Life [00:12:16]
  3. Learning to Fly [00:16:34]
  4. Yet Another Movie [00:21:48]
  5. Round And Around [00:28:08]
  6. A New Machine (part 1) [00:28:42]
  7. Terminal Frost [00:30:17]
  8. A New Machine (part 2) [00:36:33]
  9. Sorrow [00:37:11]
  10. The Dogs Of War *
  11. On The Turning Away [00:47:36]
  12. One Of These Days [00:56:40]
  13. Time [01:02:57]
  14. On The Run [01:08:18]
  15. The Great Gig In The Sky [01:11:49]
  16. Wish You Were Here [01:16:34]
  17. Us And Them [01:21:25]
  18. Money [01:29:01]
  19. Comfortably Numb *
  20. One Slip [01:37:28]
  21. Run Like Hell [01:43:34]
  22. Terminal Frost (credits) [01:52:42]

Expanded by CMI in January 2020.

Total running time: 2 hours 12 minutes 20 seconds
Unfortunately ‘The Dogs Of War’ and ‘Comfortably Numb’ were excluded by YouTube policy.

Details:
The source for this project is Blu-Ray 1080p with 24/96 audio.

  1. ‘Signs Of Life’ expanded to its original length using footage from Screen Film.
  2. ‘Yet Another Movie’ / ‘Round And Around’ / ‘A New Machine’ (part 1) / Terminal Frost / A New Machine (part 2) segment placed in the original order of the set.
  3. Small re-edit in ‘The Dogs Of War’ before 1st verse using footage from Screen Film.
  4. ‘On The Run’ expanded to its original length using footage from Screen Film.
  5. Syncronisation is corrected for 3 final drum hits in ‘Money’.

Aujourd’hui, on importe la base de données d’un site existant dans la nouvelle version de Local Lightning, estampillée 5.4.1.

D’habitude, je lance Adminer > Import, je sélectionne mon fichier de base de données et boom, la base est importée. Mais aujourd’hui, rien ne se passe comme prévu: Adminer mouline, mouline, perd la moitié du design de sa page et n’importe pas la base.

SSH à la rescousse

Je me dis qu’on aura peut-être plus de chance depuis la console SSH. Dans Local, faites un clic droit sur le site > Open Site Shell. Une fenêtre de terminal apparaît alors.

Utilisation de WP-CLI

On commence d’abord par la méthode wp-cli. On copie notre fichier adminer.sql sous /app/public et on lance la commande suivante:

wp db import ./adminer.sql

Résultat:

ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)

Cela commence bien. La version 5 de Local utilise MySQL 8 donc certaines choses ne sont peut-être pas tout à fait au point. Comme il n’y a pas de socket mysql dans /tmp/mysql.sock, nous allons manuellement spécifier notre socket MySQL dans notre commande. Local nous donne l’adresse du socket dans l’onglet Database:

wp db import ./adminer.sql --socket="/Users/matt/Library/Application Support/Local/run/rvrb6Ce-Z/mysql/mysqld.sock"

Résultat:
ERROR 1067 (42000) at line 23841 in file: './adminer.sql': Invalid default value for 'comment_date'

La bonne nouvelle, c’est que l’on peut se connecter à la base de données MySQL. Mais tiens donc, nous sommes déjà tombés sur cette erreur Invalid default value for comment_date !

Configuration de MySQL

Pour régler le problème sous Local, la marche à suivre diffère un peu de ce que nous avions lancé sur notre serveur puisqu’il n’y a pas une mais deux variables de configuration de mysqld à modifier.

On se connecte au serveur mysql:

mysql -u root -proot

Commençons par voir ce que les variables sql_mode contiennent:

SELECT @@GLOBAL.sql_mode; SELECT @@SESSION.sql_mode; 

Résultat:

+------------------------------------------------------------------------------------------+
| @@GLOBAL.sql_mode                                                                        |
+------------------------------------------------------------------------------------------+
| ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION |
+------------------------------------------------------------------------------------------+
1 row in set (0,00 sec)

+------------------------------------------------------------------------------------------+
| @@SESSION.sql_mode                                                                       |
+------------------------------------------------------------------------------------------+
| ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION |
+------------------------------------------------------------------------------------------+

Le problème est, comme la dernière fois, la présence de ces deux instructions: NO_ZERO_IN_DATE,NO_ZERO_DATE.

On enlève donc ces deux instructions de nos deux directives:

SET @@GLOBAL.sql_mode="ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION";
SET @@SESSION.sql_mode="ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION";

Voilà ce que nous obtenons au final:

+------------------------------------------------------------------------------------------+
| @@GLOBAL.sql_mode                                                                        |
+------------------------------------------------------------------------------------------+
| ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION |
+------------------------------------------------------------------------------------------+
1 row in set (0,00 sec)

+------------------------------------------------------------------------------------------+
| @@SESSION.sql_mode                                                                       |
+------------------------------------------------------------------------------------------+
| ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION |
+------------------------------------------------------------------------------------------+
1 row in set (0,00 sec)

On peut désormais importer notre fichier SQL:

mysql -u root -proot local < ./adminer.sql 

Hop l’import de la base de données se passe maintenant sans aucun problème.

45 ans après le “Live At Pompeii” de Pink Floyd dans le légendaire amphithéâtre romain, Davig Gilmour est revenu pour deux spectacles spectaculaires en juillet 2016, dans le cadre de sa tournée pour l’album Rattle That Lock.

Les performances étaient les tout premiers concerts de rock pour un public dans l’amphithéâtre romain en pierre, et, pendant deux nuits seulement, la foule de 2600 personnes se tenait exactement là où les gladiateurs auraient combattu au premier siècle de notre ère.

Natasha Sultana, de son nom de scène Tash Sultana, nait le 15 juin 1995 à Melbourne et est un(e) auteure-compositrice-interprète et musicienne multi-instrumentriste Australienne, d’un père originaire de Malte et d’une mère australienne. À l’âge de trois ans, son grand-père lui offre sa première guitare.

Tash Sultana subit l’influence d’artistes néo-soul tels que Erykah Badu, D’Angelo, Lauryn Hill mais également rock comme Jimi Hendrix, Pink Floyd, Fleetwood Mac ou encore Led Zeppelin, ou Bob Marley et Amy Winehouse.

Sultana se produit en solo sur scène, pieds nus et enregistre ses instruments au fur et à mesure grâce aux pédales d’effets: c’est la technique du looping. Autodidacte, Sultana joue d’une vingtaine d’instruments dont la guitare (basse, électrique, folk), la mandoline, le piano, la trompette et le saxophone.

Voici Tash Sultana lors de l’un des Tiny Desk Concert organisé par NPR:

C’est très dub planant, vraiment à part.

Spelling error report

The following text will be sent to our editors: