Filtrer les spams avec SpamAssassin et Postfix sous CentOS

Filtrage Anti-SPAMParfois le matin, en lançant Thunderbird, je me demande à quoi ressemblerait le monde si le courrier électronique n’existait pas. Toutes ces missives que je ne lirais pas. La supplique du fils d’un célèbre dictateur africain qui m’invite à dissimuler son trésor dans ma penderie, moyennant une modeste contribution initiale de ma part. Un courrier personnel de Bill Gates pour m’annoncer que j’ai gagné le jackpot de la loterie annuelle Microsoft avec une demande de confirmation pour savoir si l’adresse électronique de l’heureux gagnant est bien valide. Une exhortation à augmenter la taille de mon attribut viril afin de satisfaire ma partenaire frustrée par les dimensions ridicules dudit membre. Une fausse lettre d’amour de Britney Spears, accompagnée d’une bombe à retardement numérique censée détruire mon système. Nous vivons une époque formidable.

100 milliards de spams par jour

En janvier 2004, Bill Gates avait annoncé solennellement que “le problème du spam sera résolu d’ici 2006, car les ingénieurs Microsoft sont en train d’étudier la question”. En 2017, soit treize ans après cette prophétie optimiste, près de 100 milliards (!) de courriers non sollicités sont envoyés quotidiennement sur tous les réseaux de la planète, au grand dam des utilisateurs excédés par ce tsunami numérique.

En attendant que les ingénieurs Microsoft restent penchés sur la question, on peut déjà utiliser quelques solutions anti-spam qui fonctionnent. Dans un précédent article, j’avais détaillé le blocage d’un ou plusieurs domaines avec Postfix pour se débarrasser des spammeurs les plus virulents. Aujourd’hui, nous allons continuer notre luttre contre le spam avec SpamAssassin.

SpamAssassinSpamAssassin est un programme écrit en Perl qui agit au niveau du serveur mail. Il fait passer un certain nombre de tests à tous les messages. Ensuite, un score est attribué à chaque message en fonction du résultat de ces tests. Si le score dépasse un certain seuil, le message est considéré comme spam et marqué comme tel dans l’en-tête. Il suffit alors de créer un filtre correspondant dans le client de messagerie. Dans la pratique quotidienne, le filtrage est assez efficace. SpamAssassin permet d’éliminer un pourcentage significatif de spams sans pour autant envoyer les messages légitimes au nirvana numérique.

Prérequis

Dans l’exemple ci-dessous, nous allons installer SpamAssassin sur un serveur dédié tournant sous CentOS 7, et disposant d’un serveur mail IMAP avec Postfix et Dovecot.

Pour la durée de l’installation et des premiers tests de filtrage de spams, nous allons basculer SELinux en mode permissif pour éviter de nous retrouver confrontés à des blocages mystérieux.

# setenforce 0

Installation

SpamAssassin est fourni par les dépôts officiels.

# yum install spamassassin

On notera que l’application dépend d’une quantité importante de modules Perl.

Configuration de SpamAssassin

Éditer /etc/mail/spamassassin/local.cf comme ceci.

required_hits 5
report_safe 0
required_score 5
rewrite_header Subject [SPAM]

Quelques mots sur les options utilisées.

  • required_hits définit le seuil du filtrage. Un paramétrage à 5 est généralement considéré comme efficace pour une PME. Plus ce chiffre est réduit, plus le filtrage sera agressif. Si vous êtes un labo d’analyes et que vous recevez régulièrement des mails qui tentent de vous vendre des produits pharmaceutiques, vous avez intérêt à définir un score plus élevé, 8 par exemple.
  • report_safe décide si le message en question doit être supprimé (1) ou redirigé vers la boîte de réception avec une réécriture de l’en-tête (0).
  • required_score définit le score pour tous les messages envoyés au domaine, en allant du message légitime (0) au spam résolument pourri (5). Si nous abaissons ce score à 3, cela nous permettrait certes d’éliminer un plus grand nombre de courriers non sollicités. En revanche, on augmenterait la probabilité d’avoir des faux positifs, c’est-à-dire des messages légitimes identifiés comme spams.
  • rewrite_header se charge de réécrire l’en-tête du message. En l’occurrence, la chaîne de caractères [SPAM] est ajoutée au sujet du message.

La prochaine étape consiste à ajouter l’utilisateur système spamd et le groupe système correspondant.

# groupadd spamd
# useradd -c "SpamAssassin User" -g spamd -s /bin/false \
  -d /var/log/spamassassin spamd

Définir les permissions du répertoire système de SpamAssassin.

# chown spamd:spamd /var/log/spamassassin

Activer et démarrer le service.

# systemctl enable spamassassin
# systemctl start spamassassin

Mettre à jour les règles de SpamAssassin.

# sa-update

Configuration de Postfix

Éditer /etc/postfix/master.cf. Ajouter une option tout en haut du fichier.

smtp    inet  n      -      n      -      -      smtpd
  -o content_filter=spamassassin

Ensuite, ajouter ceci tout à la fin du fichier.

spamassassin unix - n n - - pipe flags=R user=spamd 
  argv=/usr/bin/spamc -e /usr/sbin/sendmail 
  -oi -f ${sender} ${recipient}

Redémarrer Postfix.

# systemctl restart postfix

Premier test

Envoyer un mail depuis un compte externe. Le sujet peut être librement choisi. Dans le corps du message, copier/coller la chaîne de caractères suivante.

XJS*C4JDBQADN1.NSBN3*2IDNEN*GTUBE-STANDARD-ANTI-UBE-TEST-EMAIL*C.34X

Si tout s’est bien passé, la boîte de réception contient un message marqué [SPAM].

Test SpamAssassin

L’opération de filtrage est enregistrée comme ceci.

# journalctl | grep "identified spam"
Oct 06 12:11:26 sd-48011.dedibox.fr spamd[44922]: spamd: identified 
spam (18.5/5.0) for spamd:1002 in 1.3 seconds, 17666 bytes.

Mise à jour automatique des règles

Éditer un petit script shell pour la mise à jour des règles et le redémarrage du service.

#!/bin/bash
#
# update-spamassassin.sh

/usr/bin/sa-update
/usr/bin/systemctl restart spamassassin

Ranger ce script dans /usr/local/sbin et définir des permissions appropriées.

# chmod 0700 /usr/local/sbin/update-spamassassin.sh

Ensuite, définir une tâche automatique pour la mise à jour quotidienne.

# crontab -e
...
# Mettre à jour les règles pour SpamAssassin tous les jours à 1h00
00 01 * * * /usr/local/sbin/update-spamassassin.sh

Configuration de Thunderbird

Une méthode efficace pour séparer le bon grain de l’ivraie, c’est de définir un filtre dans Thunderbird. Ouvrir l’interface de définition des filtres dans Outils > Filtres de messages et créer un nouveau filtre comme ceci, par exemple.

Filtre Thunderbird

Dorénavant, les spams sont automatiquement redirigés vers le dossier correspondant, et il ne reste plus que quelques faux négatifs que l’on pourra trier manuellement dans la boîte de réception.

Spams Thunderbird

SpamAssassin et SELinux

Les premières tentatives de débogage avec SELinux peuvent mener à des résultats quelque peu déroutants. Voici ce que j’ai obtenu.

# sealert -a /var/log/audit/audit.log
*****  Plugin catchall (100. confidence) suggests   *****
If you believe that perl should be allowed create access on the
.spamassassin directory by default.
Then you should report this as a bug.
You can generate a local policy module to allow this access.
Do allow this access for now by executing:
# ausearch -c '7370616D64206368696C64' --raw | audit2allow -M
my-7370616D64206368696C64
# semodule -i my-7370616D64206368696C64.pp

Le hic, c’est que la paire de commandes sugérée ici ne mène à rien.

# ausearch -c '7370616D64206368696C64' --raw | \
> audit2allow -M my-7370616D64206368696C64
Nothing to do

Une recherche Google m’a montré que je n’étais visiblement pas le seul à être confronté au problème. Et puis j’ai fini par tomber sur la solution dans la page de manuel spamd_selinux(8). Il suffisait de trouver le booléen qui va bien.

# setsebool -P spamd_enable_home_dirs 1

Par la suite, SELinux a causé un autre problème avec Spamassassin.

*****  Plugin catchall (100. confidence) suggests   *****
If you believe that perl should be allowed read access on the 
user_prefs file by default. Then you should report this as a bug.
You can generate a local policy module to allow this access.

Ici, Spamassassin n’arrive pas à accéder à /var/log/spamassassin/.spamassassin. Les fichiers de ce répertoire ont un contexte SELinux var_log_t.

En temps normal, Spamassassin est capable d’écrire dans /var/lib/spamassassin. On va donc prendre le contexte de ce répertoire (spamd_var_lib_t) et l’appliquer à /var/log/spamassassin.

# semanage fcontext -a -t spamd_var_lib_t \
  '/var/log/spamassassin(/.*)?'
# restorecon -Rv /var/log/spamassassin/

À partir de là, plus rien à signaler.

# getenforce
Enforcing
# sealert -a /var/log/audit/audit.log
100% done
found 0 alerts in /var/log/audit/audit.log
Publié dans CentOS, Documentation Microlinux | Marqué avec , , , , | Laisser un commentaire

Hébergement OwnCloud sous CentOS

OwnCloudCet article décrit l’installation et la maintenance d’un serveur OwnCloud sur un serveur dédié tournant sous CentOS 7. OwnCloud est une plateforme de stockage et de partage de fichiers et d’applications en ligne. C’est une alternative à Dropbox, lequel est basé sur un Cloud public. Dans OwnCloud, le stockage de données se fait au sein de l’infrastructure de l’entreprise, et les accès sont soumis à la politique de sécurité informatique de celle-ci.

OwnCloud vous permet de partager certains fichiers et répertoires de votre ordinateur en les synchronisant avec le serveur OwnCloud. Il suffit de définir le ou les répertoires partagés. Leur contenu est immédiatement synchronisé avec le serveur ainsi qu’avec tous les postes clients que vous définissez, que ceux-ci tournent sous Microsoft Windows, sous Mac OS X ou sous Linux. OwnCloud fonctionne également avec les smartphones et les tablettes.

OwnCloud

Prérequis

Configuration de SELinux

Étant donné que nous installons OwnCloud en-dessous de /var/www, tous les fichiers nouvellement créés seront correctement étiquetés httpd_sys_content_t. Rien à signaler de ce côté-là.

OwnCloud doit pouvoir envoyer des mails via Postfix, ce qu’il faut explicitement autoriser.

# setsebool -P httpd_can_sendmail on

Apache possède les droits d’écriture sur une partie de l’arborescence /var/www/slackbox-owncloud/html. Ces droits d’écriture seront définis par le biais des permissions Unix classiques, mais il faut également le spécifier du côté de SELinux.

# setsebool -P httpd_unified on

Enfin, si l’on souhaite configurer le verrouillage transactionnel des fichiers avec Redis, il faut que OwnCloud puisse se connecter au serveur Redis.

# setsebool -P httpd_can_network_connect on

Installation des modules PHP

En dehors d’une installation minimale de PHP 5.6 avec php56w-mysql, OwnCloud requiert également les modules PHP suivants.

  • php56w-gd
  • php56w-intl
  • php56w-mbstring
  • php56w-mcrypt
  • php56w-process
  • php56w-xml

Installer ces modules avec Yum et relancer Apache.

# yum install php56w-gd php56w-intl php56w-mbstring php56w-mcrypt \
  php56w-process php56w-xml
# systemctl restart httpd

Configuration de l’hôte virtuel

La configuration de l’hôte virtuel autorise les directives placées dans le fichier .htaccess à la racine de l’installation. Le module WebDAV doit être désactivé, étant donné qu’OwnCloud utilise son propre serveur DAV interne SabreDAV. Voici à quoi cela ressemble sur ma machine de test.

# /etc/httpd/conf.d/20-cloud.slackbox.fr.conf

# http://cloud.slackbox.fr -> https://cloud.slackbox.fr
<VirtualHost *:80>
  ServerName cloud.slackbox.fr
  Redirect / https://cloud.slackbox.fr
</VirtualHost>

# https://cloud.slackbox.fr
<VirtualHost _default_:443>
  Header always set Strict-Transport-Security \
    "max-age=63072000; includeSubDomains"
  ServerAdmin info@microlinux.fr
  DocumentRoot "/var/www/slackbox-owncloud/html"
  <Directory "/var/www/slackbox-owncloud/html">
    Options +FollowSymlinks
    AllowOverride All
    <IfModule mod_dav.c>
      Dav off
    </IfModule>
  </Directory>
  ServerName cloud.slackbox.fr:443
  SSLEngine on
  SSLCertificateFile /etc/letsencrypt/chemin/vers/cert.pem
  SSLCertificateKeyFile /etc/letsencrypt/chemin/vers/privkey.pem
  SSLCertificateChainFile /etc/letsencrypt/chemin/vers/fullchain.pem
  BrowserMatch "MSIE [2-5]" \
    nokeepalive ssl-unclean-shutdown \
    downgrade-1.0 force-response-1.0
  ErrorLog logs/cloud.slackbox.fr-error_log
  CustomLog logs/cloud.slackbox.fr-access_log common
</VirtualHost>

Téléchargement

Créer un répertoire de téléchargement approprié pour ranger OwnCloud.

# mkdir -p /root/webapps/owncloud

Télécharger OwnCloud.

# cd /root/webapps/owncloud
# wget -c \
  https://download.owncloud.org/community/owncloud-10.0.3.tar.bz2

Installation

Créer la base de données.

# mysql -u root -p
Enter password: ********
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 5
Server version: 5.5.52-MariaDB MariaDB Server

MariaDB [(none)]> create database `slackbox-owncloud`;
Query OK, 1 row affected (0.02 sec)

MariaDB [(none)]> grant all on `slackbox-owncloud`.* 
    -> to slackboxuser@localhost 
    -> identified by '********';
Query OK, 0 rows affected (0.00 sec)

MariaDB [(none)]> flush privileges;
Query OK, 0 rows affected (0.00 sec)

MariaDB [(none)]> quit;
Bye

L’hôte virtuel se situera dans /var/www/slackbox-owncloud/html. Créer le répertoire parent, décompresser l’archive téléchargée à l’intérieur de ce répertoire et renommer le répertoire owncloud résultant en html.

# cd /var/www
# mkdir slackbox-owncloud
# cd slackbox-owncloud
# tar xjf /root/webapps/owncloud/owncloud-10.0.3.tar.bz2
# ls
owncloud
# mv owncloud html

La définition des permissions est quelque peu fastidieuse. Pour nous faciliter la tâche, OwnCloud a publié un petit script shell sur son site, qu’il suffit d’adapter à nos besoins. Le répertoire themes semble avoir disparu lors du passage de la version 9 à la version 10. Dans le doute, nous allons confier sa création au script.

#!/bin/bash
# 
# set-owncloud-permissions.sh

ocpath='/var/www/slackbox-owncloud/html'
htuser='apache'
htgroup='apache' 
rootuser='microlinux'

printf "Creating possible missing Directories\n"
mkdir -p $ocpath/data
mkdir -p $ocpath/assets
mkdir -p $ocpath/updater
mkdir -p $ocpath/themes

printf "chmod Files and Directories\n"
find ${ocpath}/ -type f -print0 | xargs -0 chmod 0640
find ${ocpath}/ -type d -print0 | xargs -0 chmod 0750

printf "chown Directories\n"
chown -R ${rootuser}:${htgroup} ${ocpath}/
chown -R ${htuser}:${htgroup} ${ocpath}/apps/
chown -R ${htuser}:${htgroup} ${ocpath}/assets/
chown -R ${htuser}:${htgroup} ${ocpath}/config/
chown -R ${htuser}:${htgroup} ${ocpath}/data/
chown -R ${htuser}:${htgroup} ${ocpath}/themes/
chown -R ${htuser}:${htgroup} ${ocpath}/updater/

chmod +x ${ocpath}/occ

printf "chmod/chown .htaccess\n"
if [ -f ${ocpath}/.htaccess ]
 then
  chmod 0644 ${ocpath}/.htaccess
  chown ${rootuser}:${htgroup} ${ocpath}/.htaccess
fi
if [ -f ${ocpath}/data/.htaccess ]
 then
  chmod 0644 ${ocpath}/data/.htaccess
  chown ${rootuser}:${htgroup} ${ocpath}/data/.htaccess
fi

Ranger ce script dans un endroit approprié avant de l’exécuter. Les permissions du répertoire parent /var/www/slackbox-owncloud devront être définies manuellement.

# cd /var/www
# chown microlinux:microlinux slackbox-owncloud
# chmod 0755 slackbox-owncloud 
# cd /usr/local/sbin
# chmod 0700 set-owncloud-permissions.sh
# ./set-owncloud-permissions.sh
Creating possible missing Directories
chmod Files and Directories
chown Directories
chmod/chown .htaccess

À présent, ouvrir l’assistant d’installation dans l’interface web d’OwnCloud.

OwnCloud Installation

  1. Définir un compte administrateur.
  2. Choisir MySQL/MariaDB comme serveur de bases de données.
  3. Renseigner les paramètres de connexion à la base, en précisant le port 3306.
  4. Cliquer sur Terminer l’installation.

À présent, on peut se connecter à OwnCloud avec l’identifiant et le mot de passe de l’administrateur que l’on vient de définir.

OwnCloud Installation

Lors de la première connexion, OwnCloud affiche une info sur les clients pour les différentes plateformes.

OwnCloud Installation

Une fois qu’on a fermé la fenêtre d’infos, voilà comment se présente la configuration par défaut, avec une poignée de documents et d’images qui font office de démo.

OwnCloud Installation

Mises à jour

La page Administration (ou Paramètres > Administration) affiche la version actuellement utilisée de OwnCloud. Elle permet également d’effectuer une mise à jour de l’application.

Avant de démarrer cette opération, la meilleure façon de procéder consiste à attribuer “à la louche” les droits d’écriture du serveur web sur notre application, étant donné que les permissions que nous avons définies lors de l’installation sont plutôt restrictives et empêchent la mise à jour dans l’état.

# cd /var/www/slackbox-owncloud
# chown -R apache:apache html/
# find html/ -type d -exec chmod 0755 {} \;
# find html/ -type f -exec chmod 0644 {} \;

Sur une machine de production, c’est une bonne idée de remplacer le canal de mise à jour stable par production. Dans l’exemple ci-dessous, on part d’une installation Owncloud 8.2.11, et on effectue la mise à jour vers la version 9.0.10.

Mise à jour OwnCloud

Cliquer sur Mettre à jour, la mise à jour automatique démarre.

Mise à jour OwnCloud

Une fois que les fichiers de l’application ont été mis à jour, il faut mettre à niveau la base de données. Cliquer sur Exécuter.

Mise à jour OwnCloud

Confirmer en cliquant sur Démarrer la mise à jour. Notez que l’application Contacts a été intégré à la panoplie d’applications officielles depuis la version 9.0.

Mise à jour OwnCloud

La mise à niveau de la base de la base de données s’effectue assez rapidement. Au bout de l’opération, il suffit de recharger la page dans le navigateur.

Mise à jour OwnCloud

En fonction du canal de mises à jour choisi, la version utilisée sera considérée comme étant la dernière en date ou non.

Mise à jour OwnCloud

Si l’on repasse le canal de mises à jour de production à stable, l’interface de mises à jour nous propose une nouvelle mise à jour.

Depuis la version 9.0, c’est l’application Updater qui gère les mises à jour. L’apparence a changé, le fonctionnement reste le même.

Mise à jour OwnCloud

Au bout de l’opération, il faudra rafraîchir la page et se reconnecter. Si l’on a opté pour le canal de mises à jour stable, on pourra éventuellement procéder à une mise à jour subséquente.

https://blog.microlinux.fr/wordpress-centos/

Une fois que la mise à jour est terminée, restaurer les permissions correctes.

# cd /usr/local/sbin/
# ./set-owncloud-permissions.sh

Résoudre les problèmes et améliorer les performances

Sur un serveur de test, j’ai effectué une série de mises à jour successives depuis OwnCloud 8.2.11 vers les versions 9.0.10, 9.1.6 et 10.0.3. Au bout de l’opération, la page des Paramètres m’affiche les messages d’erreur suivants.

Debug OwnCloud

Problèmes liés à l’intégrité de fichiers

Depuis la version 10, OwnCloud vérifie l’intégrité de tous les fichiers, pour éviter les problèmes issus de fichiers corrompus. La mise à jour de la version 9.1.6 vers la version 10.0.3 m’affiche justement un problème d’intégrité de fichiers.

Debug OwnCloud

Un clic sur Liste des fichiers invalides m’affiche ceci.

Debug OwnCloud

Dans ce cas, il suffit de restituer le fichier manquant CHANGELOG.md depuis l’archive téléchargée, en attribuant les permissions qui vont bien.

# cd /root/webapps/owncloud
# tar xjf owncloud-10.0.3.tar.bz2
# cd owncloud/
# cp CHANGELOG.md /var/www/slackbox-owncloud/html/
# cd /var/www/slackbox-owncloud/html
# chown microlinux:apache CHANGELOG.md
# chmod 0640 CHANGELOG.md

Un clic sur Relancer, et le problème est résolu.

Configurer le cache de la mémoire

Le prochain avertissement est bénin et concerne une possible amélioration des performances de notre installation.

Debug OwnCloud

Installer le cache APCu.

# yum install php56w-pecl-apcu

Redémarrer Apache.

# systemctl restart httpd

Éditer conf/config.php et ajouter l’option suivante.

...
'logtimezone' => 'UTC',
'memcache.local' => '\OC\Memcache\APCu',
'installed' => true,
'maintenance' => false,
...

Configurer le verrouillage transactionnel de fichiers

Le prochain message d’erreur concerne le verrouillage transactionnel des fichiers.

Debug OwnCloud

Installer le serveur Redis et le module PHP correspondant.

# yum install redis php56w-pecl-redis

Activer et démarrer le serveur Redis.

# systemctl enable redis
# systemctl start redis

Redémarrer Apache.

# systemctl restart httpd

Éditer conf/config.php et ajouter la stance suivante.

...
'logtimezone' => 'UTC',
'memcache.local' => '\OC\Memcache\APCu',
'memcache.locking' => '\OC\Memcache\Redis',
'redis' => [
  'host' => 'localhost',
  'port' => 6379,
  ],
'installed' => true,
'maintenance' => false,
...

Utiliser les tâches planifiées du système

Le dernier avertissement consiste les tâches planifiées.

Debug OwnCloud

Là encore, nous pouvons améliorer les performances de notre installation, en utilisant les tâches planifiées du système.

Éditer une tâche automatisée qui lance cron.php toutes les 15 minutes.

# crontab -u apache -e
*/15 * * * * /usr/bin/php -f /var/www/slackbox-owncloud/html/cron.php

À partir de là, notre installation fonctionne parfaitement.

Debug OwnCloud

Documentation

Pour plus de détails, voir l’excellent manuel rédigé par Carla Schroder.

Publié dans CentOS, Documentation Microlinux | Marqué avec , , | Laisser un commentaire

Hébergement Dolibarr sous CentOS

Logo DolibarrCet article décrit l’installation et la maintenance de Dolibarr sur un serveur dédié tournant sous CentOS 7. Dolibarr est un ERP/CRM (Enterprise Resource Planing & Customer Relationship Management) libre qui permet aux entreprises, aux associations ou aux micro-entrepreneurs, de gérer une activité professionnelle ou associative : contacts, factures, commandes, stocks, agenda, etc.

La procédure d’installation présentée ici comporte quelques améliorations par rapport à la documentation officielle, notamment en termes de sécurité.

Dolibarr Microlinux

Prérequis

Configuration de l’hôte virtuel

La configuration de l’hôte virtuel respecte la nomenclature choisie par les développeurs de Dolibarr, notamment htdocs pour la racine du serveur. Voici à quoi cela ressemble sur ma machine de test.

# /etc/httpd/conf.d/20-gestion.slackbox.fr.conf

# http://gestion.slackbox.fr -> https://gestion.slackbox.fr
<VirtualHost *:80>
  ServerName gestion.slackbox.fr
  Redirect / https://gestion.slackbox.fr
</VirtualHost>

# https://gestion.slackbox.fr
<VirtualHost _default_:443>
  Header always set Strict-Transport-Security \
    "max-age=63072000; includeSubDomains"
  ServerAdmin info@microlinux.fr
  DocumentRoot "/var/www/slackbox-dolibarr/htdocs"
  ServerName gestion.slackbox.fr:443
  SSLEngine on
  SSLCertificateFile /etc/letsencrypt/chemin/vers/cert.pem
  SSLCertificateKeyFile /etc/letsencrypt/chemin/vers/privkey.pem
  SSLCertificateChainFile /etc/letsencrypt/chemin/vers/fullchain.pem
  BrowserMatch "MSIE [2-5]" \
    nokeepalive ssl-unclean-shutdown \
    downgrade-1.0 force-response-1.0
  ErrorLog logs/gestion.slackbox.fr-error_log
  CustomLog logs/gestion.slackbox.fr-access_log common
</VirtualHost>

Configuration de SELinux

Étant donné que nous installons Dolibarr en-dessous de /var/www, tous les fichiers nouvellement créés seront correctement étiquetés httpd_sys_content_t. Rien à signaler de ce côté-là.

Dolibarr doit pouvoir envoyer des mails via Postfix, ce qu’il faut explicitement autoriser.

# setsebool -P httpd_can_sendmail on

Apache possède les droits d’écriture sur le répertoire documents ainsi que sur le fichier htdocs/conf/conf.php. Ces droits d’écriture seront définis par le biais des permissions Unix classiques, mais il faut également le spécifier du côté de SELinux.

# setsebool -P httpd_unified on

Notons au passage que la documentation officielle attribue à la louche les droits d’écriture d’Apache et ne fait aucune mention de l’autorisation d’envoi de mails.

Téléchargement

Créer un répertoire de téléchargement approprié pour ranger Dolibarr.

# mkdir -p /root/webapps/dolibarr

Avant de démarrer Links, vérifier la version du navigateur.

# links -version
ELinks 0.12pre6

Il s’agit d’une ancienne version, fournie par le paquet elinks. Nous allons la remplacer par une version plus récente, qui supporte les connexions SSL.

# yum remove elinks
# yum install links

Cette fois-ci, nous disposons bien de la bonne version.

# links -version
Links 2.13

Lancer Links depuis le répertoire de téléchargement.

# cd /root/webapps/dolibarr
# links https://www.dolibarr.fr

Suivre les liens Téléchargements > Espace téléchargement Sourceforge > Files > Dolibarr ERP-CRM > 5.0.6 > dolibarr-5.0.6.tgz > direct link > Enregistrer > OK.

Installation

Créer la base de données.

# mysql -u root -p
Enter password: ********
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 5
Server version: 5.5.52-MariaDB MariaDB Server

MariaDB [(none)]> create database `slackbox-dolibarr`;
Query OK, 1 row affected (0.02 sec)

MariaDB [(none)]> grant all on `slackbox-dolibarr`.* 
    -> to slackboxuser@localhost 
    -> identified by '********';
Query OK, 0 rows affected (0.00 sec)

MariaDB [(none)]> flush privileges;
Query OK, 0 rows affected (0.00 sec)

MariaDB [(none)]> quit;
Bye

Décompresser l’archive téléchargée à la racine des hôtes virtuels.

# cd /var/www/
# tar xzf /root/webapps/dolibarr/dolibarr-5.0.6.tgz

Renommer en fonction de l’hébergement.

# mv dolibarr-5.0.6 slackbox-dolibarr

La documentation officielle préconise l’attribution de l’ensemble des fichiers à l’utilisateur et au groupe système auquel appartient le processus httpd, ce qui est quelque peu aberrant en termes de sécurité. Nous allons donc attribuer ces fichiers à l’utilisateur “commun mortel” microlinux et au groupe correspondant, en limitant les droits d’écriture d’Apache aux fichiers et aux répertoires pour lesquels cela est strictement nécessaire.

# chown -R microlinux:microlinux slackbox-dolibarr/
# find slackbox-dolibarr/ -type d -exec chmod 0755 {} \;
# find slackbox-dolibarr/ -type f -exec chmod 0644 {} \;

Créer un fichier de configuration vide.

# cd slackbox-dolibarr/
# touch htdocs/conf/conf.php

Définir les permissions de ce fichier.

# chown microlinux:apache htdocs/conf/conf.php
# chmod 0660 htdocs/conf/conf.php

Créer le répertoire qui servira aux documents générés ou stockés par Dolibarr. Pour des raisons de sécurité évidentes, il se situe à l’extérieur de l’arborescence du site.

# mkdir documents

Définir les permissions de ce répertoire.

# chown -R microlinux:apache documents
# chmod 0770 documents/

Pointer le navigateur sur l’URL de l’application et suivre les instructions de l’installateur. Je ne fournis pas ici d’instructions détaillées, je relève juste sommairement les étapes de l’installation.

  1. Sélectionner la langue (French).
  2. Vérifier si tous les prérequis techniques sont remplis.
  3. Vérifier les chemins d’accès vers le site et les documents.
  4. Cocher Forcer les connexions sécurisées (HTTPS).
  5. Saisir l’identifiant et le mot de passe de l’utilisateur MySQL.
  6. Définir un identifiant et un mot de passe pour l’utilisateur Dolibarr.

Une fois l’installation terminée, on peut la verrouiller comme ceci.

# cd /var/www/slackbox-dolibarr/documents/
# touch install.lock
# chmod 0440 install.lock

À ce stade, Apache n’a plus besoin d’écrire dans le fichier htdocs/conf/conf.php.

# cd /var/www/slackbox-dolibarr/htdocs/conf/
# chown microlinux:microlinux conf.php
# chmod 0644 conf.php

Accéder à l’interface d’administration et procéder à la configuration de base. Saisir au minimum le nom de la société et le pays où elle est implantée, et activer les modules dont on a besoin. Voici comment se présente notre application.

Dolibarr Accueil

Mise à jour

Dans l’exemple qui suit, nous effectuons la mise à jour d’une installation existante de Dolibarr 3.9.1 vers la versions 5.0.6. Cette mise à jour peut s’effectuer directement, c’est-à-dire sans passer par toutes les versions intermédiaires 3.9.2, 3.9.3, 4.0.0, etc.

Supprimer le fichier documents/install.lock.

# cd /var/www/slackbox-dolibarr/documents/
# rm install.lock

Décompresser la nouvelle archive de Dolibarr à la racine des hôtes virtuels.

# cd /var/www/
# tar xzf /root/webapps/dolibarr/dolibarr-5.0.6.tgz

Recopier les nouveaux fichiers dans le répertoire /var/www/dolibarr-5.0.6 vers le répertoire contenant l’ancienne version de Dolibarr. Ceci a pour effet de remplacer les anciens fichiers par les nouveaux, tout en conservant les fichiers qui sont spécifiques à l’installation, comme le fichier conf.php, le contenu du répertoire documents ou encore les modules complémentaires installés. Au cas où la commande cp comporte un alias vers cp -i, il faudra provisoirement le désactiver.

# alias cp
alias cp='cp -i'
# unalias cp
# cp -Rf dolibarr-5.0.6/* slackbox-dolibarr/
# alias cp='cp -i'

À partir de là, on pourra supprimer l’arborescence initiale.

# rm -rf dolibarr-5.0.6/

Redéfinir les droits d’accès.

# chown -R microlinux:microlinux slackbox-dolibarr/
# find slackbox-dolibarr/ -type d -exec chmod 0755 {} \;
# find slackbox-dolibarr/ -type f -exec chmod 0644 {} \;
# cd slackbox-dolibarr/
# chown -R microlinux:apache documents/
# find documents/ -type d -exec chmod 0770 {} \;
# find documents/ -type f -exec chmod 0660 {} \;

Pointer le navigateur sur la page d’installation, dans le sous-répertoire install.

  • https://chemin_vers_dolibarr/install/

Choisir Mise à jour dans le menu proposé, en respectant les versions intermédiaires, et lancer les étapes de migration successives. L’interface de mise à jour affichera un avertissement relatif à l’échec de la suppression d’une série de fichiers. Il suffira de les supprimer manuellement.

# cd /var/www/slackbox-dolibarr/htdocs
# rm -f compta/facture/class/api_invoice.class.php
# rm -f commande/class/api_commande.class.php
# rm -f product/class/api_product.class.php
# rm -f societe/class/api_contact.class.php
# rm -f societe/class/api_thirdparty.class.php

Une fois la mise à jour terminée, verrouiller le répertoire d’installation.

# cd /var/www/slackbox-dolibarr/documents
# touch install.lock
# chmod 0440 install.lock

Installer le module Multi-société

Créer un répertoire custom qui contiendra les modules tiers.

# mkdir htdocs/custom

Éditer le fichier htdocs/conf/conf.php et définir le chemin vers les modules.
Il suffira éventuellement de décommenter les deux lignes correspondantes.

$dolibarr_main_url_root='http://myserver';
$dolibarr_main_document_root='/path/of/dolibarr/htdocs';
$dolibarr_main_url_root_alt='http://myserver/custom';
$dolibarr_main_document_root_alt='/path/of/dolibarr/htdocs/custom';
...

Décompresser le module.

# unzip module_multicompany_3.4.0.zip

Déplacer l’arborescence résultante vers l’endroit approprié.

# mv multicompany/ chemin_vers_dolibarr/htdocs/custom/

Régler les droits d’accès.

# chown -R microlinux:microlinux chemin_vers_dolibarr/htdocs/custom/

Élargir la colonne des libellés

Lorsqu’on affiche la liste des Produits ou des Services, la colonne Libellé n’est pas assez large pour afficher certains produits dont la dénomination est plus longue. Pour remédier à cela, on peut aller dans htdocs/product et éditer le fichier list.php, en remplaçant la valeur maximale 40 par une valeur supérieure, comme ceci par exemple.

// Label
if (! empty($arrayfields['p.label']['checked']))
{
print '<td>'.dol_trunc($objp->label,60).'</td>';
}

Logo Tiko OutdoorLorsqu’on inclut un logo de société, il faut faire attention au format de fichier utilisé. Sur une installation fraîche de Dolibarr, j’ai eu toute une série de bugs et de plantages bizarres, avec des fonctionnalités basiques comme la génération de devis et de factures qui ne marchaient plus et me renvoyaient des pages blanches. Un coup d’oeil dans les logs d’Apache m’a montré une erreur pour le moins surprenante.

PHP Fatal error: Allowed memory size of 134217728 bytes exhausted 

Après recherche dans le forum de Dolibarr, j’ai vérifié le logo de l’entreprise. Effectivement, il s’agissait d’un fichier PNG qui faisait plus de 6.000 x 2000 pixels, et c’est l’opération de redimensionnement du logo qui faisait systématiquement planter l’application. La solution consiste donc simplement à utiliser un logo de taille raisonnable et de préférer le format de fichier JPG.

Publié dans CentOS, Documentation Microlinux | Marqué avec , | Laisser un commentaire

Convertir un système Linux existant en RAID 1

RAIDLorsque j’installe une station de travail Linux, j’utilise assez régulièrement le RAID 1 logiciel pour la redondance du stockage. Les distributions de type serveur comme CentOS, Ubuntu Serveur ou Debian proposent généralement ce type de fonctionnalité dans l’installateur. Sur le matériel récent, j’ai un faible pour la distribution KDE neon, un mix assez épuré d’un bureau KDE en rolling release sur une base stable d’Ubuntu LTS. Malheureusement, l’installateur de cette distribution n’offre pas la possibilité de configurer les disques en grappe RAID. Du coup j’ai profité d’un long weekend pluvieux pour expérimenter. Voici donc un tutoriel complet sur la configuration d’un RAID 1 logiciel sur une installation classique.

KDE neon RAID 1

Nettoyage des disques et installation initiale

Le DVD d’installation de KDE neon offre deux options au démarrage.

  1. LiveCD
  2. Installation

Je démarre sur l’option LiveCD (Try without installing) pour pouvoir effectuer quelques manipulations préliminaires.

Dans ma session Live, j’active le compte root pour m’éviter d’invoquer sudo à tire-larigot.

$ sudo passwd root

La machine est munie de deux disques durs sda et sdb. Les disques sont identiques, ce qui nous facilitera le travail.

# fdisk -l /dev/sd?
Disk /dev/sda: 931.5 GiB, 1000204886016 bytes, 1953525168 sectors
...
Disk /dev/sdb: 931.5 GiB, 1000204886016 bytes, 1953525168 sectors
...

Avant de lancer l’installateur, c’est une bonne idée de faire un brin de ménage sur les disques pour partir sur des bases saines. Dans mon cas précis, je dois d’abord supprimer les vestiges d’une ancienne grappe RAID. Je vais me servir de l’utilitaire mdadm, qui ne figure pas sur le LiveCD.

# apt-get update && apt-get install mdadm

Une fois que j’ai identifié mes partitions, j’invoque mdadm comme ceci.

# mdadm --zero-superblock /dev/sda1
# mdadm --zero-superblock /dev/sda5
# mdadm --zero-superblock /dev/sdb1
# mdadm --zero-superblock /dev/sdb5

Notons que je me suis retrouve confronté à deux messages d’erreur pour les partitions /dev/sda5 et /dev/sdb5.

mdadm: Couldn't open /dev/sda5 for write - not zeroing
mdadm: Couldn't open /dev/sdb5 for write - not zeroing

Pour des raisons mystérieuses, l’installateur semble avoir décidé d’activer toutes les partitions swap existantes. Je les ai donc désactivées comme ceci avant de réinvoquer mdadm --zero-superblock.

# swapoff /dev/sda5
# swapoff /dev/sdb5

Une fois que j’ai supprimé toutes les traces des précédentes grappes RAID, j’efface le contenu du MBR des deux disques. Pour ma part, j’aime bien utiliser gdisk pour ce genre d’opération.

# gdisk /dev/sda
GPT fdisk (gdisk) version 1.0.1
...
Command (? for help): x
Expert command (? for help): z
About to wipe out GPT on /dev/sda. Proceed? (Y/N): y
GPT data structures destroyed! You may now partition the disk 
using fdisk or other utilities.
Blank out MBR? (Y/N): y

Je procède de même pour /dev/sdb.

À partir de là, je peux lancer l’installateur graphique. Je ne vais pas rentrer dans les détails de la procédure d’installation, à plus forte raison qu’elle est triviale. J’installe le système sur le disque sda, en acceptant le schéma de partitionnement automatique par défaut.

KDE neon partitionnement

Préparation de la grappe RAID

Après le redémarrage initial, j’active le compte root comme je l’avais fait sur le LiveCD.

$ sudo passwd root

Pareillement, je récupère l’outil mdadm, qui ne fait pas partie d’une installation standard.

# apt-get update && apt-get install mdadm

Le schéma de partitionnement par défaut est simpliste.

  • une partition principale /dev/sda1 formatée en ext4
  • une partition d’échange /dev/sda5

Mon disque sdb n’est pas encore partitionné. Étant donné qu’il est parfaitement identique à mon disque sda, je vais pouvoir utiliser l’outil sfdisk pour cloner le schéma de partitionnement du disque sda.

# sfdisk -d /dev/sda | sfdisk /dev/sdb

On constate que le disque sdb est partitionné exactement comme sda.

Partitionnement

La prochaine étape consiste à modifier les types de partitions pour sdb. Lancer fdisk ou cfdisk et définir le type FD (Linux RAID autodetect) pour /dev/sdb1 et /dev/sdb5.

RAID

Voici – à peu de choses près – ce que nous devons obtenir au final.

RAID

Une fois que les types de partitions sont correctement définis, nous pouvons créer la grappe RAID. Dans un premier temps, il s’agira d’une grappe incomplète, configurée à l’aide de l’option missing.

# modprobe raid1
# mdadm --create /dev/md1 --level=1 --raid-disks=2 --metadata=0.90 \
  missing /dev/sdb1
mdadm: array /dev/md1 started.
# mdadm --create /dev/md5 --level=1 --raid-disks=2 --metadata=0.90 \
  missing /dev/sdb5
mdadm: array /dev/md5 started.

Affichons l’état de cette grappe.

# cat /proc/mdstat 
Personalities : [raid1] 
md5 : active raid1 sdb5[1]
      7820224 blocks [2/1] [_U]
      
md1 : active raid1 sdb1[1]
      968939456 blocks [2/1] [_U]
      bitmap: 0/8 pages [0KB], 65536KB chunk

Pour formater cette grappe, nous utiliserons les mêmes systèmes de fichiers que ceux en vigueur sur le disque sda.

# mkfs.ext4 /dev/md1
# mkswap /dev/md5

Écrire une configuration provisoire dans /etc/mdadm/mdadm.conf. On conservera l’original pour plus tard, lorsqu’on ajoutera le disque sda à la grappe.

# cp /etc/mdadm/mdadm.conf /etc/mdadm/mdadm.conf.orig
# mdadm --examine --scan >> /etc/mdadm/mdadm.conf

Créer un point de montage pour la grappe /dev/md1 et monter cette grappe.

# mkdir /mnt/md1
# mount /dev/md1 /mnt/md1

Copier l’intégralité du système de fichiers de notre installation vers le deuxième disque.

# cp -dpRx / /mnt/md1/

Les options utilisées méritent quelques explications.

  • -d préserve les liens symbolique sans les suivre
  • -p préserve l’horodatage et les permissions
  • -R effectue une copie récursive
  • -x reste sur le même système de fichiers

La prochaine étape consiste à éditer le fichier /etc/fstab de notre montage, en l’occurrence /mnt/md1/etc/fstab. Les entrées respectives de /dev/sda1 et /dev/sda5 (ou plus exactement les UUID correspondants) devront être remplacés par /dev/md1 et /dev/md5.

# /etc/fstab
#              
# / was on /dev/sda1 during installation
/dev/md1  /     ext4     errors=remount-ro  0       1
# swap was on /dev/sda5 during installation
/dev/md5  none  swap     sw                 0       0

Modifier le chargeur de démarrage

À présent, il va falloir configurer GRUB pour qu’il démarre sur la grappe. Le fichier /etc/grub.d/40_custom nous servira de modèle, faute de mieux. La nomenclature 09_raid1 s’explique par le fait que les fichiers sont traités en ordre alphanumérique, et que notre configuration provisoire est censée précéder celle du fichier 10_linux.

# cd /etc/grub.d
# cp 40_custom 09_raid1

Éditer 09_raid1 pour démarrer sur la grappe RAID.

#!/bin/sh
exec tail -n +3 $0
# This file provides an easy way to add custom
# menu entries.  Simply type the menu entries you
# want to add after this comment.  Be careful not
# to change the 'exec tail' line above.
menuentry 'KDE neon RAID 1' \
  --class ubuntu --class gnu-linux --class gnu --class os { 
    recordfail 
    insmod mdraid09 
    insmod mdraid1x 
    insmod ext2 
    set root='(md/md1)' 
    linux /boot/vmlinuz-4.10.0-38-generic root=/dev/md1 ro quiet 
    initrd /boot/initrd.img-4.10.0-38-generic 
}

Là aussi, quelques explications sur les options utilisées, qui sont le fruit d’une série de tentatives et d’échecs dont je vous passe les détails.

  • Les modules de GRUB sont rangés dans /boot/grub/i386-pc.
  • Le module mdraid09 fournit le support RAID de base.
  • Le module mdraid1x fournit le support RAID 1.
  • Le module ext2 permet d’accéder aux systèmes de fichiers EXT2 et dérivés.
  • Pour trouver le nom md/md1 de ma grappe, il a fallu que je fasse un redémarrage initial et que j’appuie sur C à l’invite de GRUB pour accéder à la console interactive du chargeur de démarrage. Ensuite, la commande ls m’a affiché les systèmes de fichiers théoriquement accessibles dans la nomenclature biscornue de GRUB.
  • Pour le reste, on indique l’emplacement du kernel et du disque mémoire initial, avec les options de démarrage qui vont bien.

Mettre à jour la configuration de GRUB. Si tout se passe bien, on doit voir quelque chose comme ceci.

# update-grub
Generating grub configuration file ...
Found theme: /boot/grub/themes/breeze/theme.txt
Found linux image: /boot/vmlinuz-4.10.0-38-generic
Found initrd image: /boot/initrd.img-4.10.0-38-generic
Found memtest86+ image: /boot/memtest86+.elf
Found memtest86+ image: /boot/memtest86+.bin
done

Copier le fichier de configuration personnalisé de GRUB vers le deuxième disque.

# cp /etc/grub.d/09_raid1 /mnt/md1/etc/grub.d/

Mettre à jour le disque mémoire initial. L’option -u force simplement la mise à jour d’un fichier existant.

# update-initramfs -u
update-initramfs: Generating /boot/initrd.img-4.10.0-38-generic

Copier le disque mémoire mis à jour vers le deuxième disque.

# cp /boot/initrd.img-4.10.0-38-generic /mnt/md1/boot/

Installer GRUB sur les deux disques, ce qui lui permettra ultérieurement, en cas de défaillance d’un disque, de démarrer sur l’autre.

# grub-install /dev/sda
Installing for i386-pc platform.
Installation finished. No error reported.
# grub-install /dev/sdb
Installing for i386-pc platform.
Installation finished. No error reported.

Il ne reste plus qu’à croiser les doigts et à redémarrer.

# reboot

Redémarrage initial

Une fois qu’on a redémarré, on vérifie qu’on est bien sur la moitié de grappe RAID.

# mount | grep md1
/dev/md1 on / type ext4 (rw,relatime,errors=remount-ro,data=ordered)

Maintenant que le disque sdb est actif, nous allons pouvoir définir les types de partitions corrects pour le disque sda, comme nous l’avons fait plus haut. Lancez fdisk ou cfdisk et changez le type des partitions /dev/sda1 et /dev/sda5 en FD (Linux RAID autodetect). Pour être sûr, vérifiez si le schéma de partitionnement des deux disques est absolument identique.

RAID

À partir de là, je peux compléter ma grappe RAID en ajoutant le disque sda comme ceci.

# mdadm --add /dev/md1 /dev/sda1
mdadm: added /dev/sda1
# mdadm --add /dev/md5 /dev/sda5
mdadm: added /dev/sda5

La commande watch cat /proc/mdstat me permet de surveiller l’état de la synchronisation des disques. Suivant la taille des disques et la puissance de la machine, il va falloir patienter un petit moment.

RAID

Une fois que la synchronisation est terminée, on peut remettre à jour la configuration du chargeur de démarrage.

# update-grub

Remettre à jour le disque mémoire initial.

# update-initramfs -u

Redémarrer une dernière fois.

# reboot

Si tout s’est bien passé. on peut supprimer /etc/grub.d/09_raid1 et passer par la configuration automatique de GRUB.

Publié dans Documentation Microlinux | Marqué avec , , , , | 2 commentaires

Comment devenir un client de l’enfer ?

Clients From HellLe site américain Clients From Hell recense de façon humoristique – mais néanmoins véridique – les pires insanités qu’un client peut vous dire ou faire, dans la même lignée que Vie De Merde. Le site vous dévoile donc des citations et échanges divers et variés au-delà du bien et du mal, issues de clients de l’infographie et du Web. Exemple :

1 000 dollars, c’est très cher vous savez. On veut seulement un site Internet basique avec nos contenus actuels, et un formulaire de contact. Sans oublier une gestion CMS : nous voulons éditer et ajouter nous-mêmes du contenu. Et la galerie d’image, nous souhaiterions quelque chose de sobre et d’animé. Le header devrait également être animé. Et notre logo nous paraît vieux, pouvez-vous le refaire ? Le prix idéal serait 300 dollars pour le tout, ca devrait être plus que suffisant.

Au fil des années, mon entreprise Microlinux a eu droit à son lot de clients de l’enfer. Pas beaucoup, j’ai pu les compter sur les doigts d’une main. Si vous souhaitez entrer au Panthéon des clients de l’enfer de Microlinux, voici quelques conseils utiles tirés de mon vécu quotidien.

  • Discutez le bien-fondé de toutes les décisions techniques relatives à la configuration de votre réseau, surtout si vous n’avez aucune connaissance en informatique.
  • Demandez l’établissement d’un devis, ignorez-le et réitérez l’établissement de ce même devis à intervalles réguliers.
  • Évitez de signer le devis et exigez que l’on fasse exactement le contraire de ce qui y est indiqué.
  • Lorsque je dois passer trois jours dans vos locaux pour mettre en place votre réseau informatique, évitez à tout prix de me proposer un café ou un verre d’eau.
  • Vos employés mangent tous à la cantine le midi ? N’hésitez pas à m’envoyer à la boulangerie du village voisin, qui doit vendre des sandwichs.
  • Une panne dans votre réseau ? Débranchez tout, puis recablez tout au hasard. Demandez éventuellement au cousin Gérard ou au technicien Orange pour qu’il vous file un coup de main.
  • À partir du moment où plus rien ne fonctionne, n’hésitez pas à m’appeler, en prenant soin d’exprimer votre mécontentement à tout moment de l’échange.
  • Évitez toute précision inutile dans la description d’une panne. « Googol a disparu », c’est déjà beaucoup trop précis.
  • Demandez à ce que je vous forme en deux heures à l’administration d’un serveur Linux.
  • Payez toutes vos factures avec trois mois de retard.
  • Etc.
Publié dans Divers | Marqué avec | 3 commentaires

Installation de CentOS 7 sur un MacBook Pro

Think LinuxCet article décrit l’installation d’un poste de travail CentOS 7 sur un MacBook Pro, en remplacement du système propriétaire Mac OS X de chez Apple. Dans un précédent article, j’avais décrit en détail l’installation de la distribution Ubuntu 16.04 LTS sur un MacBook. Une première tentative d’installation de CentOS 7 s’était soldée par un échec. J’ai expérimenté un peu plus, et voici donc tout ce qu’il faut savoir pour installer et configurer ma distribution préférée sur ce genre de matériel. En termes d’environnement graphique, j’opte pour ma variante personnalisée du bureau Xfce. La procédure d’installation est décrite en détail ici. Le présent article se penchera uniquement sur les particularités du hardware de chez Apple.

La configuration du matériel n’est pas une opération triviale et nécessite de plonger les mains dans le cambouis, surtout pour les deux cartes réseau et la carte graphique. En revanche, on se retrouve au final avec un poste de travail Linux qui fonctionne très proprement sur du matériel tout aussi propre.

MacBook Pro

Démarrage

La machine dispose d’un lecteur optique, je peux donc utiliser le DVD d’installation de CentOS confectionné depuis le fichier CentOS-7-x86_64-DVD-1708.iso. Il faut insérer le DVD machine allumée, éteindre, appuyer sur la touche C et allumer en même temps, ce qui fait démarrer sur le DVD.

Les machines de chez Apple utilisent normalement un BIOS EFI, mais apparemment, l’installation fonctionne également en mode traditionnel (legacy). Côté BIOS, c’est un peu une boîte noire. Le démarrage en mode EFI ou traditionnel me semble quelque peu erratique et aléatoire, et c’est finalement une question de tentative et d’échec avec une bonne dose d’obstination.

Réseau

La section Réseau de l’installateur n’affiche ni carte filaire, ni carte wifi. Aucun périphérique réseau disponible. Il va falloir se retrousser les manches.

Partitionnement

J’opte pour un partitionnement classique.

  • une partition /boot de 500 Mo formatée en ext2
  • une partition swap de 4 Go
  • une partition principale de 145 Go formatée en ext4

À partir de là, j’installe un système minimal, sans serveur graphique ni environnement de bureau.

Configurer la carte réseau filaire

Au premier redémarrage, la première impression se confirme. Aucune carte réseau disponible.

[root@macbook-pro ~]# ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue 
   state UNKNOWN qlen 1
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever

La solution pour configurer une carte réseau non reconnue, c’est d’installer un noyau plus récent et voir ce que ça donne. La meilleure adresse pour ce genre de chose, c’est le dépôt de paquets elrepo-kernel, qui fournit pas moins de deux familles de kernels plus récents.

  • la famille kernel-lt avec le dernier noyau LTS
  • la famille kernel-ml avec le dernier noyau stable

Sur ma station de travail, je télécharge les deux kernels directement depuis un site miroir du dépôt ELRepo. Voici les deux kernels.

  • kernel-lt-4.4.90-1.el7.elrepo.x86_64.rpm
  • kernel-ml-4.13.5-1.el7.elrepo.x86_64.rpm

Je les copie sur un disque dur externe pour les transférer sur le MacBook, et je les installe comme ceci.

# yum localinstall kernel-lt-* kernel-ml-*

Dans la mesure du possible, je préfère utiliser le kernel LTS. Je fais donc un premier essai en redémarrant sur ce kernel (4.4.90) en premier. Apparemment notre problème de carte réseau filaire est résolu. Nous disposons dorénavant d’une nouvelle interface réseau enp0s10.

[root@macbook-pro ~]# ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue 
   state UNKNOWN qlen 1
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: enp0s10: <BROADCAST,MULTICAST,UP,LOWER_UP> 
   mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 00:25:4b:ca:37:ec brd ff:ff:ff:ff:ff:ff
inet 192.168.2.121/24 brd 192.168.2.255 scope global dynamic enp0s10
valid_lft 86300sec preferred_lft 86300sec
inet6 fe80::9052:632d:db85:8711/64 scope link
valid_lft forever preferred_lft forever

Je décide de garder ce kernel, et j’en profite pour faire un peu de ménage.

# yum remove kernel-ml-*
# yum remove kernel-3.10.0-693.el7
# yum remove kernel-tools-*

Je vérifie si tout est bien propre et qu’il n’y a pas de résidus d’autres versions.

# rpm -qa | grep kernel
kernel-lt-4.4.90-1.el7.elrepo.x86_64

À partir de là, je suis la procédure d’installation habituelle. La prochaine étape consistera à configurer la carte graphique.

Configurer la carte graphique

La carte graphique de ce MacBook est une NVidia GeForce 9400.

# lspci | grep -i vga
02:00.0 VGA compatible controller: NVIDIA Corporation C79
[GeForce 9400M] (rev b1)

Le pilote libre nouveau fonctionne de manière acceptable. Je vais quand-même le remplacer par le pilote propriétaire nvidia, qui est bien plus performant.

Pour commencer, j’installe ce qu’il faut pour la compilation.

# yum --enablerepo=elrepo-kernel install gcc

Cette dernière commande installe automatiquement la dépendance kernel-lt-headers pour le noyau installé.

Il nous faudra également installer les sources du noyau.

# yum --enablerepo=elrepo-kernel install kernel-lt-devel

Je me rends sur le site de NVidia et je cherche le driver qui va bien.

Pilote NVidia

Je télécharge le pilote.

Pilote NVidia

Pour les détails de l’installation de ce pilote, on pourra jeter un oeil sur cet article.

Configurer la carte wifi

La carte wifi de notre MacBook est une infâme Broadcom BCM4322.

# lspci | grep -i network
03:00.0 Network controller: Broadcom Limited BCM4322 802.11a/b/g/n 
Wireless LAN Controller (rev 01)

Là aussi, il va falloir construire le driver propriétaire fourni par le fabricant. Nous disposons déjà des outils de construction. Il ne nous reste plus qu’à aller sur le site de Broadcom.

Chercher “linux sta 64-bit” depuis la page d’accueil.

Broadcom

Voici le driver qu’il nous faut.

Broadcom

L’archive de ce constructeur respecte une nomenclature pour le moins folklorique.

  • hybrid-v35_64-nodebug-pcoem-6_30_223_271.tar.gz

Je télécharge ce fichier et je le range en un endroit approprié, par exemple /root/broadcom.

Créer un emplacement pour construire le driver, décompresser l’archive et lancer la compilation.

# mkdir -pv /usr/local/src/hybrid-wl
mkdir: création du répertoire « /usr/local/src/hybrid-wl »
# cd /usr/local/src/hybrid-wl/
# tar xvzf /root/broadcom/hybrid-*.tar.gz
# make -C /lib/modules/$(uname -r)/build/ M=$(pwd)

Le module résultant pèse 8.5 Mo.

# ls -lh wl.ko
-rw-r--r--. 1 root root 8,5M 7 oct. 12:12 wl.ko

On peut réduire la taille quelque peu.

# strip --strip-debug wl.ko
# ls -lh wl.ko
-rw-r--r--. 1 root root 7,2M 7 oct. 12:14 wl.ko

Installer manuellement le module vers un endroit approprié.

# cp -vi wl.ko /lib/modules/$(uname -r)/extra/
« wl.ko » -> « /lib/modules/4.4.90-1.el7.elrepo.x86_64/extra/wl.ko »

Mettre à jour l’arbre des dépendances entre les modules.

# depmod $(uname -r)

Charger le module à la main.

# modprobe wl

Avant de pouvoir utiliser notre carte, nous devons encore blacklister une série de modules qui risquent d’entrer en conflit. Ouvrir /etc/modprobe.d/blacklist.conf et ajouter les lignes suivantes.

blacklist bcm43xx
blacklist b43
blacklist b43legacy
blacklist bcma
blacklist brcmsmac
blacklist ssb
blacklist ndiswrapper

Au prochain redémarrage de la machine, nous disposons d’une nouvelle interface réseau sans fil wlp3s0.

# ifconfig -a
...
wlp3s0: flags=4099<UP,BROADCAST,MULTICAST>  mtu 1500
        ether 22:b4:ca:ea:ae:89  txqueuelen 1000  (Ethernet)
...

Une fois qu’on a installé le paquet network-manager-applet, la gestion du réseau se fait de manière complètement transparente.

MacBook Pro NetworkManager

Support de la webcam

La webcam incorporée est un modèle Apple iSight.

# lsusb
...
Bus 001 Device 003: ID 05ac:8507 Apple, Inc. Built-in iSight

À ce stade, on est presque agréablement surpris par le support “out of the box” de ce périphérique.

Webcam iSight

Support de la carte son

La carte son est une NVidia MCP79 High Definition Audio.

# lspci | grep -i audio
00:08.0 Audio device: NVIDIA Corporation MCP79 High Definition 
Audio (rev b1)

Ce modèle est également supporté dans la configuration par défaut et ne nécessite aucune intervention de notre part.

Support du touchpad et de la souris

Le touchpad fonctionne sans problèmes, mais il manque la possibilité d’effectuer un clic droit. C’est tout à fait normal, vu que Steve Jobs trouvait ça cool de ne pas pouvoir afficher un menu contextuel dans une application. Au lieu de ça, on a droit à une émulation du clic droit en utilisant deux ou trois doigts, et qui engendre rapidement une furieuse envie de balancer le MacBook dans le geyser le plus proche.

La meilleure solution consiste ici à brancher une souris filaire classique de type PC au port USB pour dépasser cette limitation saugrenue.

Publié dans CentOS, Documentation Microlinux | Marqué avec , , , | 2 commentaires

Installation de KDE neon sur un portable Asus X751S

KDE neonUn ami m’a récemment confié l’ordinateur portable de sa compagne pour le passer de Windows à Linux. C’est un Asus X751S, doté d’une carte mère Intel Atom. Une première tentative d’installer un poste de travail CentOS 7 a lamentablement échoué, même en utilisant un kernel récent du dépôt ELRepo. Pour ce genre de matériel exotique, la seule solution viable passe par l’utilisation d’une distribution bleeding edge. Mon choix s’est porté sur KDE neon, un mélange assez sympathique de rolling release sur base d’une Ubuntu LTS 16.04.

Installation KDE neon

Confection du support d’installation

Télécharger l’ISO de la User Edition.

L’ISO est hybride et peut s’écrire directement sur une clé USB.

# dd if=neon-userltsedition-20171108-0018-amd64.iso of=/dev/sdc

Configuration du BIOS

Le portable était initialement livré avec Windows 8 dessus, ce qui veut dire que tout est verrouillé à la sauce Microsoft.

Étant donné que Windows 8 est le genre de système qui refuse de s’éteindre pour de bon, il faut d’abord appuyer avec insistance sur le bouton Off pendant au moins dix secondes. Ensuite, l’accès au BIOS se fait de manière classique par la touche F2.

Dans un premier temps, je charge la configuration par défaut via Restore Defaults > Load Optimized Defaults > Yes.

Dans l’onglet Boot, je définis Boot Option #1 > UEFI: USB DISK 2.0 PMAP. Quant à Boot Option #2, je remplace Windows Boot Manager par Disabled.

Je me débarrasse ensuite de l’infâme Secure Boot de Microsoft. Dans l’onglet Security > Secure Boot Menu, je passe Secure Boot Control à Disabled.

Enfin, j’enregistre les modification du BIOS : Save Changes & Exit.

Installation

KDE neon utilise l’installateur d’Ubuntu, et la procédure d’installation est triviale. Une fois qu’on a démarré le système Live, cliquer sur l’icône Install neon userlts sur le Bureau.

Installation KDE neon

  1. Sélectionner la langue : Français.
  2. Cocher Télécharger les mises à jour pendant l’installation de neon.
  3. Cocher Installer les logiciels tiers pour le matériel graphique et le Wifi, Flash, MP3 et autres supports.
  4. Opter pour le partitionnement assisté – utiliser un disque entier.
  5. Définir le fuseau horaire.
  6. Choisir la disposition du clavier.
  7. Saisir le nom et l’identifiant correspondant, choisir un mot de passe  et définir un nom d’hôte pour la machine.

Redémarrage initial

Après le premier redémarrage, on se retrouve dans une version très épurée et très propre de KDE, une base saine pour pouvoir configurer un poste de travail aux petits oignons.

KDE neon

Après avoir arrangé l’aspect du Terminal (thème solarisé, police Monospace 11), j’active le compte root.

$ sudo passwd root

Curieusement, SSH n’est pas installé par défaut.

# apt-get install openssh-server

Configuration initiale de KDE

La configuration de KDE est assez potable telle quelle, mis à part le fond d’écran aux couleurs criardes. Je modifie juste quelques menus détails.

  • Dans les Effets de Bureau, j’active les Fenêtres en gélatine, un effet que je trouve assez réussi.
  • Je remplace le simple clic de la souris par un double clic pour ouvrir les fichiers et les dossiers.
  • Pour le thème du pointeur, j’opte pour Brise neigeuse.
  • Je change la disposition du bureau par Vue de dossier, et je supprime les deux icônes ~/Bureau/Home.desktop et ~/Bureau/Trash.desktop.
  • J’agrandis la taille par défaut des icônes dans Dolphin.
  • J’augmente l’intervalle de verrouillage de l’écran de 5 à 30 minutes.

Installer une panoplie d’applications

Pour l’instant, l’installation de KDE est réduite au strict minimum. À première vue, on dispose de Firefox, Dolphin, Konsole, VLC, Okular, Gwenview, KWalletManager et KSysGuard, et c’est tout.

Internet & Réseau

La prochaine étape consiste donc à installer une panoplie cohérente d’applications. Pour faire ça de manière organisée, on va procéder catégorie par catégorie, et on va commencer par les applications Internet et Réseau.

  • Un bloqueur de pubs pour Mozilla Firefox
  • Le client mail Mozilla Thunderbird
  • Le client de messagerie instantanée Pidgin
  • Le client BitTorrent Transmission
  • Le client FTP/SFTP Filezilla
  • Le client de stockage réseau Dropbox

Une remarque en passant. Autant j’aime bien KDE et je l’utilise au quotidien sur ma station de travail, autant j’évite certaines applications de type “usine à gaz” comme KMail, Kopete ou KTorrent. Je préfère les remplacer par des équivalents GTK plus légers comme Thunderbird, Pidgin ou Transmission.

Installer un bloqueur de pubs pour Mozilla-Firefox :

# apt-get install xul-ext-ublock-origin

Note : le bloqueur de pubs semble être rendu obsolète par les versions plus récentes de Firefox. Il faut passer par l’installateur de la section Modules de Firefox.

Installer Mozilla Thunderbird :

# apt-get install thunderbird thunderbird-locale-fr

Quelques paquets optionnels pour Thunderbird :

  • enigmail pour chiffrer les mails
  • xul-ext-lightning pour le calendrier

Installer Pidgin :

# apt-get install pidgin pidgin-plugin-pack

Installer Transmission :

# apt-get install transmission-gtk

Installer Filezilla :

# apt-get install filezilla

L’ajout de Dropbox se fait depuis un dépôt tiers. Éditer un fichier /etc/apt/sources.list.d/dropbox.list comme ceci.

deb http://linux.dropbox.com/ubuntu xenial main

Note : Dropbox, c’est mal, je suis au courant. Lorsqu’un client me demande de l’installer, je le fais, mais je prends soin d’expliquer les risques liés notamment à la confidentialité des données.

Récupérer la clé d’authentification du projet.

# apt-key adv --keyserver pgp.mit.edu --recv-keys 5044912E

Recharger la liste des paquets et installer Dropbox.

# apt-get update
# apt-get install dropbox

Bureautique

Dans le rayon Bureautique, nous installerons les applications suivantes.

  • La suite bureautique LibreOffice intégrée à KDE
  • Un jeu complet de polices Microsoft
  • La visionneuse PDF Evince en supplément d’Okular

Installer LibreOffice avec l’intégration KDE :

# apt-get install libreoffice libreoffice-kde libreoffice-l10n-fr

Définir un jeu d’icônes plus lisible : Outils > Options > Affichage > Style et taille d’icônes > Elementary (Grand)

Installer un jeu de polices Microsoft :

# apt-get install ttf-mscorefonts-installer

L’installateur affiche quelques avertissements sans conséquence, visiblement parce que la commande n’a pas été invoquée via sudo. Ne pas oublier d’accepter la licence pour les polices téléchargées.

Ubuntu ne fournit aucun paquet pour installer les polices Vista comme Calibri ou Cambria, nécessaires pour afficher correctement les documents confectionnés avec les versions récentes de Microsoft Office. En revanche, on trouve une série de scripts en ligne pour extraire ces polices depuis PowerPoint Viewer.

Voici un script qui fonctionne parfaitement :

Récupérer le script, installer la dépendance fontforge et rendre le script exécutable avant de le lancer.

# apt-get install fontforge
# chmod +x ttf-vista-fonts-installer.sh
# ./ttf-vista-fonts-installer.sh

Les documents PDF sont déjà gérés par Okular. J’installe Evince en plus, parce qu’il gère mieux certains PDF générés par les portails en ligne de l’administration française.

# apt-get install evince

Graphisme

Une panoplie raisonnablement complète d’applications graphiques peut ressembler à ceci.

  • L’application GIMP avec une série de plugins pratiques
  • Le gestionnaire de photos Digikam
  • L’application de DAO LibreCAD
  • L’application de PAO Scribus
  • Le logiciel de dessin vectoriel Inkscape
  • Le logiciel d’acquisition d’images Skanlite

Installer GIMP :

# apt-get install gimp gimp-data-extras gimp-help-fr gimp-lensfun \
  gimp-ufraw pandora

Installer Digikam :

# apt-get install digikam digikam-doc

Note : j’ai tenté d’installer KSnapshot, ce qui s’est soldé par une erreur, étant donné que l’utilitaire de capture d’écran de KDE 5, c’est Spectacle (paquet kde-spectacle), qui est déjà installé. Il n’apparaît pas dans le menu, mais on peut l’invoquer par la touche ImprÉcran.

Installer LibreCAD :

# apt-get install librecad

Installer Scribus :

# apt-get install scribus scribus-doc

Installer Inkscape :

# apt-get install inkscape

Installer Skanlite :

# apt-get install skanlite

Multimédia

Dans le domaine Multimédia, nous disposons déjà de VLC et d’une série de codecs et de plug-ins. Voici les applications que nous allons installer en plus.

  • Le lecteur de musique simple Audacious
  • Le lecteur vidéo MPlayer en version sans interface graphique
  • L’éditeur audio Audacity
  • L’encodeur vidéo HandBrake
  • L’extracteur audio Asunder
  • L’éditeur vidéo Openshot
  • Le transcodeur vidéo WinFF
  • Le logiciel de gravure K3B

Installer Audacious :

# apt-get install audacious

Installer MPlayer sans interface graphique :

# apt-get install mplayer

Installer Audacity :

# apt-get install audacity

Installer HandBrake :

# apt-get install handbrake

Installer Asunder :

# apt-get install asunder

Installer Openshot :

# apt-get install openshot

Installer WinFF :

# apt-get install winff-qt

Installer K3B :

# apt-get install k3b k3b-i18n k3b-extrathemes normalize-audio sox

Touches finales

Le fond d’écran par défaut n’est probablement pas au goût de tout le monde. On va donc installer un jeu de fonds d’écran.

# apt-get install kdewallpapers

Supprimer les paquets inutiles.

# apt-get autoremove fontforge
Publié dans Documentation Microlinux | Marqué avec , , | 4 commentaires

Gérer les mises à jour WordPress avec WP-CLI

Mises à jour WordPressDans notre article détaillé sur l’hébergement de WordPress, nous avons vu que ce moteur de CMS constitue une cible de prédilection des attaques malveillantes, au vu de la popularité de l’application. Il est donc crucial de garder son installation à jour pour éviter de se faire pirater son installation. Certes, WordPress est théoriquement capable d’effectuer des mises à jour automatiques, mais cette façon de procéder nécessiterait l’ouverture des droits d’accès en écriture du serveur Web sur l’ensemble de l’installation, ce qui constitue un risque de sécurité. Reste la procédure manuelle décrite ici, qui s’avère quelque peu pénible. Si vous avez comme moi un certain nombre d’installations WordPress sur différents serveurs à gérer, cela devient vite pénible.

C’est là où WP-CLI va nous faciliter la tâche, en nous permettant une gestion automatisée des mises à jour tout en respectant une sécurisation maximale de notre installation. WP-CLI est une interface en ligne de commande qui permet de gérer une ou plusieurs installations WordPress sur un serveur, sans avoir recours à une interface graphique. Les fonctionnalités de WP-CLI sont nombreuses, mais nous n’allons pas toutes les aborder. Nous nous contenterons d’utiliser cet outil pour la maintenance de WordPress et de tout ce qui va avec, c’est-à-dire les extensions et les thèmes.

Installation de WP-CLI

Je me connecte à mon serveur en tant qu’utilisateur microlinux. Cet utilisateur est propriétaire des installations WordPress sur la machine. Je veille à ce qu’il fasse partie du groupe wheel pour avoir accès à la commande sudo.

$ groups
microlinux wheel

Télécharger le fichier wp-cli.phar sur le site du projet WP-CLI avec wget ou curl. La variable DOWNLOAD m’évite juste d’avoir une ligne à rallonge.

$ DOWNLOAD=https://raw.githubusercontent.com
$ wget -c $DOWNLOAD/wp-cli/builds/gh-pages/phar/wp-cli.phar

Vérifier que tout fonctionne.

$ php wp-cli.phar --info
PHP binary:     /usr/bin/php
PHP version:    5.6.32
php.ini used:   /etc/php.ini
WP-CLI root dir:        phar://wp-cli.phar
WP-CLI vendor dir:      phar://wp-cli.phar/vendor
WP_CLI phar path:       /home/microlinux
WP-CLI packages dir:
WP-CLI global config:
WP-CLI project config:
WP-CLI version: 1.4.1

Pour utiliser WP-CLI à partir de la ligne de commande en tapant wp, on va rendre le fichier exécutable tout en le déplaçant vers un endroit approprié quelque part dans le PATH et en le renommant.

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

Maintenance de WP-CLI

WP-CLI peut gérer lui-même ses propres mises à jour. L’option check-update affiche les mises à jour disponibles.

$ wp cli check-update
Success: WP-CLI is at the latest version.

Pour des raisons évidentes, la mise à jour ne pourra pas s’effectuer en tant qu’utilisateur du commun des mortels.

$ wp cli update
Error: /usr/local/bin is not writable by current user.

Dans ce cas, il faudra invoquer la commande avec sudo et en spécifiant le chemin complet.

$ sudo /usr/local/bin/wp cli update
You have version 1.4.0. Would you like to update to 1.4.1? [y/n] y
Downloading from https://github.com/wp-cli/.../wp-cli-1.4.1.phar...
md5 hash verified: df26444df533a0fb9a0159036ae2773b
New version works. Proceeding to replace.
Success: Updated WP-CLI to 1.4.1.

Mises à jour WordPress manuelles avec WP-CLI

WP-CLI devra être invoqué depuis la racine du site WordPress.

$ cd /var/www/microlinux-site/html/

Vérifier s’il y a une mise à jour.

$ wp core check-update
+---------+--------+-----------------------------------+
| version | update | package_url                       |
+---------+--------+-----------------------------------+
| 4.9.1   | minor  | https://<url>/wordpress-4.9.1.zip |
+---------+--------+-----------------------------------+

Récupérer et installer la mise à jour.

$ wp core update
Updating to version 4.9.1 (fr_FR)...
Téléchargement de la mise à jour depuis 
https://downloads.wordpress.org/release/fr_FR/wordpress-4.9.1.zip...
Décompression de la mise à jour...
Success: WordPress updated successfully.

Avant de procéder avec les extensions, il faudra éventuellement régler un problème de permissions. Le répertoire wp-content appartient certes à l’utilisateur microlinux et au groupe apache. En revanche, les extensions ajoutées depuis le tableau de bord WordPress appartiennent à l’utilisateur apache et au groupe apache et ne sont donc plus accessibles au simple utilisateur microlinux. Il va falloir rectifier le tir comme ceci.

$ sudo chown -R microlinux:apache wp-content/
$ sudo find wp-content/ -type d -exec chmod 0775 {} \;
$ sudo find wp-content/ -type f -exec chmod 0664 {} \;

Afficher la liste des extensions.

$ wp plugin list
+---------+----------+-----------+---------+
| name    | status   | update    | version |
+---------+----------+-----------+---------+
| akismet | active   | available | 3.3.2   |
| hello   | inactive | none      | 1.6     |
+---------+----------+-----------+---------+

Mettre à jour l’ensemble des extensions.

$ wp plugin update --all
...
+---------+-------------+-------------+---------+
| name    | old_version | new_version | status  |
+---------+-------------+-------------+---------+
| akismet | 3.3.2       | 4.0.1       | Updated |
+---------+-------------+-------------+---------+
Success: Updated 1 of 1 plugins.

On procèdera de même pour les thèmes. Dans un premier temps, afficher l’état des thèmes installés.

$ wp theme status
3 installed themes:
 UI twentyfifteen   1.8
 UA twentyseventeen 1.3
 UI twentysixteen   1.3

Legend: I = Inactive, A = Active, U = Update Available

Mettre à jour l’ensemble des thèmes installés.

$ wp theme update --all
...
+-----------------+-------------+-------------+---------+
| name            | old_version | new_version | status  |
+-----------------+-------------+-------------+---------+
| twentyfifteen   | 1.8         | 1.9         | Updated |
| twentyseventeen | 1.3         | 1.4         | Updated |
| twentysixteen   | 1.3         | 1.4         | Updated |
+-----------------+-------------+-------------+---------+
Success: Updated 3 of 3 themes.

Scripter la procédure

Une fois que tout fonctionne comme prévu, nous pouvons scripter la procédure. Voici un exemple de script shell qui identifie les installations existantes de WordPress sur le serveur et se charge de la définition correcte des permissions ainsi que de la mise en jour de tous les composants.

#!/bin/bash
#
# wordpress-update.sh
#
# Mise à jour automatique de toutes les installations WordPress
#
# (c) Nicolas Kovacs <info@microlinux.fr>

# WP-CLI doit être installé
WP='/usr/local/bin/wp'

# Apache
HTUSER='apache'
HTGROUP='apache'

# Utilisateur normal
WPUSER='microlinux'
WPGROUP='microlinux'

# Racine du serveur Web
WPROOT='/var/www'

# Identifier les installations WordPress 
WPDIRS=$(dirname $(find $WPROOT -type f -name 'wp-config.php'))

for WPDIR in $WPDIRS; do
  echo
  echo "---------- $WPDIR ----------"
  echo
  cd $WPDIR
  # Définir les permissions correctes
  chown -R $WPUSER:$WPGROUP $WPDIR
  find $WPDIR -type d -exec chmod 0755 {} \;
  find $WPDIR -type f -exec chmod 0644 {} \;
  chown -R $WPUSER:$HTGROUP $WPDIR/wp-content
  find $WPDIR/wp-content -type d -exec chmod 0775 {} \;
  find $WPDIR/wp-content -type f -exec chmod 0664 {} \;
  # Mettre à jour le moteur WordPress
  su -c "$WP core update" $WPUSER
  # Mettre à jour les extensions
  su -c "$WP plugin update --all" $WPUSER
  # Mettre à jour les thèmes
  su -c "$WP theme update --all" $WPUSER
done

echo
 
exit 0

Mise à jour quotidienne automatique

Il ne nous reste plus qu’à définir un lancement automatique de la mise à jour sur notre serveur. On pourra définir une tâche programmée comme ceci, par exemple.

# crontab -e
# Mettre à jour WordPress tous les jours à 4h30
30 4 * * * /usr/local/sbin/wordpress-update.sh 1> /dev/null

 

Publié dans Documentation Microlinux, Hébergement | Marqué avec , , | Laisser un commentaire

Si Linux m’était conté

screencastLa webradio Poli Sons m’avait invité au printemps 2015 pour raconter l’histoire d’Unix, de GNU et de Linux, d’une manière accessible aux non-informaticiens. Au lieu d’en faire un cours magistral plus ou moins barbant, je m’étais pointé les mains dans les poches pour traiter le sujet de manière plus spontanée, à la manière d’un conteur arabe, et montrer aux auditeurs profanes comme Monsieur et Madame Michu qu’il y a bien une vie avant – et après – Windows.

Ces émissions ont malheureusement été perdues suite à une série de contretemps informatiques. Ou c’est ce que je croyais, car un auditeur a eu la riche idée d’archiver ces émissions sur son propre serveur, en les éditant au passage. Un grand merci à lui.

Émission n° 1 (14’32”)

  • Les années 1950 à 1970
  • De la préhistoire de l’informatique au premier système d’exploitation portable
  • Qu’est-ce qu’un système d’exploitation?
  • L’informatique avant Microsoft et Apple

Émission n° 2 (25’13”)

  • Les années 1970 et 1980
  • La fin de l’âge d’or d’Unix
  • L’arrivée des PC et le projet GNU de Richard Stallman
  • La création de la Free Software Foundation

Émission n° 3 (20’35”)

  • Les années 1990 à 1992
  • Linus Torvalds et le noyau Linux
  • Un “vrai” Unix sur un ordinateur personnel
  • Les toutes premières versions de Linux
  • Qu’est-ce qu’un logiciel libre ?

Émission n° 4 (25’02”)

  • Les années 1992 au début des années 2000
  • Les premières distributions : Slackware, Red Hat, Debian
  • La branche BSD

Émission n° 5 (32’07”)

  • Quelle est la meilleure distribution Linux ?
  • Pourquoi autant de distributions ?
  • Linux en entreprise

Note : Par la suite, je me suis basé sur cette série d’émissions pour rédiger le premier chapitre de mon ouvrage Débuter avec Linux, publié chez Eyrolles. Ce chapitre est disponible en PDF téléchargeable.

Publié dans Divers | Marqué avec , | 2 commentaires

Mettre en place un serveur Dnsmasq sous CentOS

Logo DnsmasqCette page décrit la configuration d’un serveur Dnsmasq sous CentOS et Red Hat Enterprise Linux. Dnsmasq est un serveur léger qui fournit les services DHCP et DNS pour des réseaux locaux, même de taille importante. Il est extrêmement facile à configurer, et l’on pourra l’utiliser pour remplacer DHCPD et Bind. Ce dernier n’est pas très adapté pour les DNS de réseaux locaux, notamment à cause de sa syntaxe farfelue.

Prérequis

Ouvrir les ports suivants dans le pare-feu.

  • 53 en TCP et UDP (requêtes DNS)
  • 67 et 68 en UDP (requêtes DHCP)

Le fichier /etc/hosts du serveur local doit comporter au moins les deux lignes suivantes.

# /etc/hosts
127.0.0.1     localhost.localdomain localhost
192.168.3.1   amandine.sandbox.lan  amandine

C’est surtout la deuxième ligne qui est d’une importance capitale. Elle fait correspondre le nom de la machine locale avec l’adresse IP dans le réseau local.

Installation

Vérifier si Dnsmasq est installé.

# rpm -qa | grep dnsmasq          (RHEL 5)
dnsmasq-2.45-1.1.el5_3

# rpm -qa | grep dnsmasq          (RHEL 6)
dnsmasq-2.48-17.el6.i686
dnsmasq-utils-2.48-17.el6.i686

# rpm -qa | grep dnsmasq          (RHEL 7)
dnsmasq-utils-2.66-12.el7.x86_64
dnsmasq-2.66-12.el7.x86_64

Configuration de base

La configuration de Dnsmasq s’effectue par le biais du fichier de configuration /etc/dnsmasq.conf. Le fichier fourni par défaut comporte près de 600 lignes de commentaires et sert également de documentation. On pourrait très bien activer l’une ou l’autre option en la décommentant. Dans le cas présent, il vaut mieux effectuer une copie de sauvegarde et commencer par un fichier vide.

# cd /etc
# mv dnsmasq.conf dnsmasq.conf.orig
# touch dnsmasq.conf

Éditer une configuration minimale.

# /etc/dnsmasq.conf
domain-needed
bogus-priv
interface=enp3s1                             
dhcp-range=192.168.3.100,192.168.3.200,24h
local=/sandbox.lan/
domain=sandbox.lan
expand-hosts
server=192.168.2.1
  • Les deux premières options domain-needed et bogus-priv évitent que Dnsmasq ne relaie les noms d’hôtes locaux à un ou plusieurs serveurs DNS en amont.
  • L’option interface spécifie l’interface réseau que l’on souhaite utiliser.
  • L’option dhcp-range définit la plage d’adresses dynamiques utilisée parle serveur DHCP. Dans le cas présent, les adresses attribuées auront une durée de validité de 24 heures. Passé ce délai, elles devront être renouvelées par les clients.
  • L’option local indique que les réponses aux requêtes pour le domaine spécifié doivent être fournies directement par Dnsmasq, et non pas par un serveur DNS en amont.
  • L’option domain attribue le nom de domaine spécifié aux clients. Pour des raisons évidentes, il doit coïncider avec le domaine défini dans l’option local.
  • L’option expand-hosts concerne les requêtes DNS sans le domaine et se charge d’ajouter celui-ci automatiquement. Concrètement, lorsqu’on essaie d’envoyer un ping sur bernadette, Dnsmasq retournera automatiquement l’adresse IP de bernadette.sandbox.lan.
  • L’option server spécifie l’adresse IP d’un ou plusieurs serveurs DNS en amont.

Démarrage et utilisation

Activer Dnsmasq.

# chkconfig dnsmasq on                  (RHEL 5/6)
# systemctl enable dnsmasq              (RHEL 7)

Gérer le lancement et l’arrêt.

# service dnsmasq start                 (RHEL 5/6)
# systemctl start|stop|restart dnsmasq  (RHEL 7)

Attribuer des adresses statiques

On pourra attribuer une adresse IP et un nom d’hôte fixe en fonction de l’adresse MAC des interfaces réseau respectives, en ajoutant une série d’entrées comme ceci.

# /etc/dnsmasq.conf
...
dhcp-host=00:1E:C9:43:A7:BF,bernadette,192.168.3.2
dhcp-host=00:1D:09:15:4A:D8,raymonde,192.168.3.3
...

On choisira les adresses IP en-dehors de la plage d’adresses dynamiques.

Si l’on souhaite attribuer une adresse IP et un nom d’hôte fixe à un portable que l’on connecte aussi bien par le wifi que par une connexion filaire, on peut utiliser la syntaxe suivante.

# /etc/dnsmasq.conf
...
dhcp-host=44:1E:A1:E6:FA:93,E4:D5:3D:BD:EA:05,buzz,192.168.3.6
dhcp-host=00:27:19:F1:BC:3A,00:19:E0:83:3A:C1,bebette,192.168.3.7
...

Ajouter des hôtes statiques

L’ajout d’hôtes statiques est extrêmement simple avec Dnsmasq. Il suffit d’ajouter l’entrée correspondante dans le fichier /etc/hosts du serveur, et celui-ci se chargera de relayer l’info.

# /etc/hosts 
...
192.168.3.254   wifi
...

Relancer Dnsmasq pour prendre en compte les modifications.

# service dnsmasq restart    (RHEL 5/6)
# systemctl restart dnsmasq  (RHEL 7)

On peut également ajouter un raccourci pour une adresse IP externe.

# /etc/hosts
...
88.191.189.120  dedibox
...

Si le serveur héberge une série de sites web sous formes d’hôtes virtuels, on peut ajouter les entrées correspondantes comme ceci.

# /etc/hosts 
...
192.168.3.1   mirror.amandine.sandbox.lan mirror.amandine
192.168.3.1   cmsms.amandine.sandbox.lan cmsms.amandine
...

Résolution des noms d’hôtes

Les postes clients sur le réseau utilisent les informations sur les noms d’hôtes fournies par Dnsmasq. Pour que le serveur lui-même puisse les prendre en compte aussi, il faudra éditer /etc/resolv.conf comme ceci.

# /etc/resolv.conf
nameserver 127.0.0.1

Vérifions.

[root@amandine:~] # host bernadette
bernadette has address 192.168.3.2
[root@amandine:~] # host raymonde
raymonde has address 192.168.3.3

Afficher en direct l’attribution des baux DHCP

Sur le serveur, on peut suivre en direct l’attribution des baux DHCP en affichant en continu le journal /var/log/messages.

# tail -f /var/log/messages
... DHCPREQUEST(enp3s1) 192.168.3.2 00:1e:c9:43:a7:bf
... DHCPACK(enp3s1) 192.168.3.2 00:1e:c9:43:a7:bf bernadette
... DHCPREQUEST(enp3s1) 192.168.3.3 00:1d:09:15:4a:d8
... DHCPACK(enp3s1) 192.168.3.3 00:1d:09:15:4a:d8 raymonde
Publié dans CentOS, Documentation Microlinux | Marqué avec , , , , | Laisser un commentaire