Le compteur Linky débarque chez Microlinux

Courrier refus Linky Microlinux

Publié dans Divers | Marqué avec | 6 commentaires

Migrer vers GNOME sous CentOS

GNOMECes dernières semaines, je me suis plus ou moins réconcilié avec le bureau GNOME, que je trouve plutôt bien ficelé et assez propre dans la version qui est livrée avec CentOS. Du coup, j’ai décidé de migrer petit à petit toutes mes installations existantes vers ce bureau. Les premières réactions des utilisateurs sont assez positives. Pour m’éviter de repartir de zéro pour chaque installation, j’ai élaboré une combine qui supprime uniquement la couche graphique du système sans toucher à tout le reste. La migration s’effectue donc “à chaud”, avec les données des utilisateurs en place.

Cet article décrit la migration depuis un bureau Xfce. Le même principe est également applicable de manière similaire pour les installations basées sur KDE.

Dans un premier temps, on va basculer en mode console.

# systemctl set-default multi-user.target
# systemctl isolate multi-user.target

Les groupes de paquets sont plus faciles à gérer en anglais.

# LANG=en_US.utf8 && export LANG

La principale astuce consiste à supprimer le paquet libX11-common ainsi que toutes les dépendances orphelines qui en résultent.

# yum autoremove libX11-common

Une particularité du gestionnaire de paquets yum, c’est qu’un groupe de paquets dont on supprime manuellement les composants est toujours marqué comme installé.

# yum group list hidden | less
...
Installed Groups:
  X Window System
  Xfce
Available Groups:
  Additional Development
  Anaconda Tools
  Backup Client
  Backup Server
  Base
...

Ici, il faut rectifier le tir à la main et marquer les groupes de paquets comme étant supprimés.

# yum group mark remove "Xfce"
# yum group mark remove "X Window System"

Je réinstalle explicitement le groupe de paquets Core pour me retrouver avec un système de base cohérent et récupérer une poignée de paquets essentiels.

# yum group install "Core"

À partir de là, je peux suivre la procédure d’installation du bureau GNOME décrite en détail dans cet article.

# yum install git
# git clone https://github.com/kikinovak/centos-7-desktop-gnome
# cd centos-7-desktop-gnome
# ./postinstall.sh

La prochaine étape consiste à remplacer les profils par défaut des utilisateurs par ceux que j’ai confectionnés pour GNOME. Étant donné que dans notre lycée local, j’ai une bonne centaine d’utilisateurs dans la salle info, je vais m’acquitter de cette tâche par un petit script.

#!/bin/bash

if [ ! -d /etc/skel/.config/dconf ]; then
  echo
  echo ":: Les profils par défaut ne sont pas installés."
  echo
  exit 1
fi

echo

for UTILISATEUR in $(ls /home); do
  echo ":: Mise à jour du profil de l'utilisateur $UTILISATEUR."
  rm -rf /home/$UTILISATEUR/.config/dconf
  cp -R /etc/skel/.config/dconf /home/$UTILISATEUR/.config/
  cp /etc/skel/.config/mimeapps.list /home/$UTILISATEUR/.config/
  cp /etc/skel/.gtkcdlabelrc /home/$UTILISATEUR/
  chown -R $UTILISATEUR:$UTILISATEUR /home/$UTILISATEUR/.config
  chown $UTILISATEUR:$UTILISATEUR /home/$UTILISATEUR/.gtkcdlabelrc
done

echo

exit 0

Il ne me reste plus qu’à tester mon nouvel environnement graphique.

# systemctl isolate graphical.target

Si tout se passe bien, je peux démarrer en mode graphique par défaut.

# systemctl set-default graphical.target

GNOME

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

Hébergement GEPI sous CentOS

GEPIGEPI (Gestion des Élèves par Internet) est une solution efficace de gestion et de suivi des résultats scolaires pour les établissements scolaires du second degré. Déployée sur un serveur, l’application est accessible via une connexion Internet sécurisée par tous les acteurs de l’établissement : administrateurs, enseignants, élèves et parents d’élèves.

De la saisie des résultats de chaque évaluation par les professeurs à l’impression des bulletins en passant par la préparation des conseils de classe, GEPI est un outil facile et souple d’accès, même pour les utilisateurs réfractaires à l’utilisation de l’outil informatique.

Depuis 2013, je maintiens l’installation de GEPI pour le lycée Scholae à Saint-Hippolyte-du-Fort. L’application est utilisée quotidiennement par la direction, les enseignants, les élèves et les parents d’élèves, pour gérer les notes, les bulletins, les cahiers de textes, les devoirs à faire, les absences, les retards, etc. Le site de mon entreprise fournit une page qui présente les principales fonctionnalités de GEPI, rédigée dans un langage accessible aux non-informaticiens.

Cet article se concentre principalement sur les aspects techniques de GEPI comme les les procédures d’installation, de sécurisation et de mise à jour. Il s’adresse aux administrateurs ayant un minimum d’expérience.

Prérequis

Configuration de SELinux

Étant donné que nous installons GEPI 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à.

GEPI 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 série de répertoires de l’installation. 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

Téléchargement

GEPI peut être récupéré directement sur le serveur grâce au navigateur Links.

$ mkdir -pv webapps/gepi
mkdir: created directory ‘webapps’
mkdir: created directory ‘webapps/gepi’
$ cd webapps/gepi/
$ links https://gepi.mutualibre.org

Suivre le lien Télécharger et récupérer la dernière version stable.

  • gepi-1.7.3-bc28235.tar.gz

Configuration de l’hôte virtuel

Une fois que la structure de répertoires est en place, on peut définir l’hôte virtuel dans la configuration d’Apache.

# /etc/httpd/conf.d/10-gepi.slackbox.fr.conf

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

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

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-gepi`;
Query OK, 1 row affected (0.02 sec)

MariaDB [(none)]> grant all on `slackbox-gepi`.* 
    -> to gepiuser@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

GEPI sera installé en-dessous de l’arborescence /var/www/slackbox-gepi. La racine à proprement parler de l’hébergement se situera dans slackbox-gepi/html.

$ sudo mkdir -v /var/www/slackbox-gepi
mkdir: created directory ‘/var/www/slackbox-gepi’
$ sudo chown microlinux:microlinux /var/www/slackbox-gepi/
$ cd /var/www/slackbox-gepi/
$ tar xzf ~/webapps/gepi/gepi-1.7.3-bc28235.tar.gz
$ ls
gepi-1.7.3
$ mv gepi-1.7.3/ html

La plupart des articles de blog et autres tutos sur l’installation de GEPI sont assez généreux avec les droits d’accès de l’installation. L’ensemble des fichiers est attribué à l’utilisateur système qui fait tourner le serveur web (apache ou www-data), avec des droits d’écriture sur la totalité des fichiers et des répertoires.

Nous allons procéder différemment, en attribuant l’installation à l’utilisateur “commun mortel” microlinux. Les droits d’écriture seront attribués uniquement là où cela est strictement nécessaire. Pour les permissions, nous suivons les recommandations officielles adaptées à notre installation. Étant donné qu’il s’agit là d’une tâche quelque peu fastidieuse – qu’il faudra répéter à chaque mise à jour – j’ai écrit un petit script shell pour automatiser tout cela.

#!/bin/bash
# 
# set-gepi-permissions.sh
#
# Définition des permissions d'une installation GEPI

gepipath="/var/www/slackbox-gepi"
gepiroot="${gepipath}/html"
gepiuser="microlinux"
gepigroup="microlinux"
htuser="apache"
htgroup="apache"
writedirs="documents \
           images    \
           secure    \
           photos    \
           backup    \
           temp      \
           mod_ooo   \
           mod_notanet"

printf "Définition des permissions de GEPI...\n"
find ${gepipath}/ -type d -print0 | xargs -0 chmod 0755
find ${gepipath}/ -type f -print0 | xargs -0 chmod 0644
chown -R ${gepiuser}:${gepigroup} ${gepipath}/
for writedir in ${writedirs}; do
  chown -R ${gepiuser}:${htgroup} ${gepiroot}/${writedir}
  find ${gepiroot}/${writedir} -type d -print0 | xargs -0 chmod 0775
  find ${gepiroot}/${writedir} -type f -print0 | xargs -0 chmod 0664
done
chown ${gepiuser}:${htgroup} ${gepiroot}/style_screen_ajout.css*
chmod 0664 ${gepiroot}/style_screen_ajout.css*

exit 0

À partir de là, on peut ouvrir l’URL de GEPI dans un navigateur et cliquer sur Installer la base MySQL.

Installation GEPI

Ici, il suffit de renseigner l’utilisateur MySQL et le mot de passe de connexion.

Installation GEPI

La prochaine étape consiste à sélectionner la base de données créée un peu plus haut.

Installation GEPI

L’installation est terminée. À partir de là, on peut se connecter à l’interface d’administration de GEPI avec l’identifiant admin et le mot de passe azerty. Pour des raisons évidentes, GEPI vous demande de changer ce mot de passe trivial à la première connexion.

Installation GEPI

Mise à jour

Une installation existante de GEPI peut être mise à jour “à chaud” vers la dernière version stable. Dans l’exemple, nous partons d’une installation existante de GEPI dans la version 1.6.8, et nous allons la mettre à jour vers la version 1.7.3, la dernière en date lors de la rédaction de cet article.

La mise à jour des fichiers de GEPI peut s’effectuer par simple écrasement. Pour la définition des permissions, on utilisera le script shell qu’on a utilisé un peu plus haut lors de l’installation.

$ cd /var/www/slackbox-gepi/
$ tar xvzf ~/webapps/gepi/gepi-1.7.3-bc28235.tar.gz
$ ls
gepi-1.7.3 html
$ alias cp
alias cp='cp -i'
$ unalias cp
$ cp -R gepi-1.7.3/* html/
$ alias cp='cp -i'
$ sudo /usr/local/sbin/set-gepi-permissions.sh
[sudo] password for microlinux:
Définition des permissions de GEPI...

À partir de là, on peut ouvrir une session et cliquer sur Mettre à jour pour effectuer une mise à jour de la base de données.

Mise à jour GEPI

Voilà ce qu’on obtient si tout s’est bien passé.

Mise à jour GEPI

Nous utilisons désormais la dernière version de GEPI.

Mise à jour GEPI

Liens

Publié dans CentOS, Documentation Microlinux | Marqué avec , | Un commentaire

Intégrer le moniteur système Conky à GNOME

ConkyConky est un moniteur système hautement configurable qui permet d’afficher une série d’informations sur le système en fond d’écran, ce qui permet de garder l’oeil sur la charge des processeurs, l’utilisation de la mémoire, des interfaces réseau et des disques durs, le détail des processus et beaucoup d’autres informations encore.

Conky doit être lancé explicitement au démarrage du bureau. Dans l’environnement de bureau GNOME, c’est l’outil de personnalisation GNOME Tweak Tool qui permet de faire ceci, dans l’onglet Applications au démarrage. Malheureusement, on ne peut y ajouter que des applications qui disposent déjà d’une entrée dans le menu Applications. L’interface n’offre pas la possibilité de spécifier manuellement le chemin vers l’application à démarrer.

Pour contourner cette limitation, il suffit de créer manuellement une entrée correspondante dans le répertoire ~/.config/autostart. Sur mon ordinateur portable, j’ai créé un fichier ~/.config/autostart/conky.desktop qui ressemble à ceci.

[Desktop Entry]
Name=Conky
Comment=Moniteur système
Exec=conky &
Terminal=false
Type=Application
Icon=gnome-monitor
Categories=System;
StartupNotify=false

À partir de là, Conky dispose de sa propre entrée dans la liste des applications qu’il faut lancer automatiquement au démarrage du bureau.

Conky

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

Poste de travail CentOS 7 + GNOME “aux petits oignons”

Logo CentOSCet article décrit pas à pas et de manière détaillée l’installation d’un poste de travail de qualité entreprise basé sur CentOS 7 et l’environnement de bureau GNOME. Pour plus de détails, lire la documentation officielle. CentOS 7 est officiellement supporté jusqu’au 30 juin 2024. On choisira cette branche sur du matériel raisonnablement récent qui supporte un OS 64-bits. L’installateur de CentOS 7 requiert au moins 1 Go de RAM. Sur une machine disposant de moins de mémoire vive ou dotée d’un processeur 32-bits, on pourra opter pour CentOS 6.

Pour en savoir plus sur la configuration de GNOME, on pourra lire cet article.

GNOME

Le poste de travail présenté ici offre une série d’améliorations par rapport à un poste de travail CentOS standard.

  • L’esthétique de l’environnement GNOME est améliorée de manière significative.
  • Une panoplie d’applications populaires est installée pour toutes les tâches courantes.
  • Les codecs et plug-ins multimédia permettent de gérer les contenus audio et vidéo.
  • Les polices TrueType offrent une meilleure interopérabilité avec l’univers Microsoft.
  • Infinality permet d’obtenir un affichage aussi net que sur les systèmes de chez Apple.

Support d’installation

On choisira le CD minimal, mais rien n’empêche d’utiliser le DVD.

  • CentOS-7-x86_64-Minimal-1804.iso
  • CentOS-7-x86_64-DVD-1804.iso

Graver le CD ou le DVD à partir de l’ISO téléchargé.

Sur les machines dépourvues de lecteur optique, il faudra confectionner une clé USB d’installation. L’image ISO est hybride et peut s’écrire directement sur une clé USB.

# dd if=CentOS-7-x86_64-Minimal-1804.iso of=/dev/sdX

Démarrage

Débrancher clés USB, disques externes et autres périphériques amovibles. Autrement l’installateur les proposera au formatage.

Sur un ordinateur portable, il vaut mieux passer par une connexion cablée le temps de l’installation. La connexion wifi sera réglée en mode graphique par NetworkManager une fois que le bureau sera installé.

Langue et clavier

Dans l’écran de bienvenue, sélectionner la langue (Français) et la localisation (Français – France). La disposition du clavier sera définie par le biais de l’écran principal de l’installateur.

Interfaces réseau

Le réseau n’est pas activé par défaut, il faut donc songer à l’activer explicitement.

Les noms des interfaces réseau ont changé avec cette nouvelle version. Désormais, on n’a plus affaire à eth0, eth1, eth2, wlan0, etc. Le nouveau schéma de nommage est moins arbitraire et offre davantage de consistance en se basant sur l’emplacement physique de la carte dans la machine.

  • enp2s0
  • enp3s0
  • enp3s1
  • etc.

Date et heure

Vérifier si le fuseau horaire (Europe/Paris) est correctement configuré. Éventuellement, activer Heure du réseau et vérifier les serveurs NTP.

Désactivation de Kdump

Kdump est un mécanisme de capture lors du plantage d’un noyau. Il peut être désactivé.

Partitionnement manuel

L’outil de partitionnement graphique de CentOS n’est pas très intuitif. Voici un exemple de schéma de partitionnement courant.

  • une partition /boot de 500 MiB, formatée en ext2
  • une partition /boot/efi de 100 MiB sur les systèmes EFI
  • une partition swap, équivalent à la RAM disponible
  • une partition principale, formatée en ext4

Sur une station de travail munie de deux disques durs, on choisira le RAID 1.

  1. Cliquer sur Destination de l’installation.
  2. Vérifier si le ou les disques durs sont bien sélectionnés.
  3. Cocher Je vais configurer le partitionnement et cliquer sur Terminé.
  4. Dans le menu déroulant, sélectionner Partition standard au lieu de LVM.

Partition /boot

La taille de la partition /boot sera relativement réduite. Il faudra veiller à ne pas laisser s’entasser les vieux kernels sous peine de la remplir assez rapidement.

  1. Cliquer sur le bouton “+” pour créer un nouveau point de montage.
  2. Créer le point de montage /boot avec une capacité de 500 MiB.
  3. Définir le type de périphérique standard ou RAID 1.
  4. Choisir le système de fichiers ext2 et l’étiquette boot.
  5. Confirmer Mise à jour des paramètres.

Partition EFI

Sur les systèmes UEFI, il faut créer un point de montage /boot/efi pour une partition de type EFI, au début du disque.

  1. Cliquer sur le bouton “+” pour créer un point de montage.
  2. Créer le point de montage /boot/efi et spécifier une taille de 100 MiB.
  3. Définir le type de périphérique standard.
  4. Choisir le système de fichiers EFI System Partition et l’étiquette efi.
  5. Confirmer Mise à jour des paramètres.

Partition swap

Dans certains cas, la partition swap pourra être reléguée à la fin du disque par l’installateur pour une utilisation optimale.

  1. Cliquer sur le bouton “+” pour créer un autre point de montage.
  2. Créer le point de montage swap en spécifiant sa capacité en GiB.
  3. Définir le type de périphérique standard ou RAID 1.
  4. Choisir l’étiquette swap.
  5. Confirmer Mise à jour des paramètres.

Partition principale

La partition principale occupera tout l’espace disque restant.

  1. Cliquer sur le bouton “+” pour créer un dernier point de montage.
  2. Créer le point de montage / sans spécifier la capacité souhaitée.
  3. Définir le type de périphérique standard ou RAID 1.
  4. Choisir le système de fichiers ext4 et l’étiquette root.
  5. Confirmer Mise à jour des paramètres, puis Terminé.

Choix des paquets

Dans l’écran de sélection des logiciels du DVD, on optera pour le groupe de paquets Installation minimale proposé par défaut. Le CD minimal ne laisse pas le choix de toute façon.

Utilisateur initial

Créer un utilisateur provisoire install. Éventuellement, cocher l’option Faire de cet utilisateur un administrateur pour l’ajouter au groupe wheel et lui permettre d’utiliser sudo. Cet utilisateur sera supprimé une fois l’installation terminée.

Configuration provisoire du réseau

L’installation par défaut ne fournit pas la commande ifconfig, qui fait partie du paquet net-tools. Dans un premier temps, il faudra afficher la configuration réseau en utilisant la commande ip fournie par le paquet iproute2.

# ip address
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN 
 ...
2: enp2s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 
   qdisc mq state UP qlen 1000
 link/ether 2c:27:d7:15:54:a1 brd ff:ff:ff:ff:ff:ff
 inet 192.168.1.2/24 brd 192.168.1.255 scope global dynamic enp2s0
 ...
3: enp3s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 
 ...
# ip route
default via 192.168.1.1 dev enp2s0

Récupérer le script de post-installation

L’utilitaire git ne fait pas partie d’une installation par défaut. Il va donc falloir l’installer.

# yum install git

Ensuite, récupérer le contenu de mon dépôt Github.

# cd
# git clone https://github.com/kikinovak/centos-7-desktop-gnome

Lancer le script de post-installation

Le répertoire centos-7-desktop-gnome contient un script postinstall.sh. Lancer ce script.

# cd centos-7-desktop-gnome
# ./postinstall.sh

L’affichage du script est assez laconique. Pour en savoir un peu plus sur le détail et la progression des opérations, on peut ouvrir un deuxième terminal et afficher le fichier journal “à chaud”, comme ceci.

# tail -f /tmp/postinstall.log

Le script se charge automatiquement des opérations suivantes.

  • Basculer SELinux en mode permissif.
  • Désactiver l’IPv6.
  • Configurer l’affichage en temps réel.
  • Personnaliser le shell Bash pour root et les utilisateurs.
  • Personnaliser la configuration de Vim.
  • Configurer les dépôts de paquets officiels de manière prioritaire.
  • Activer la gestion des Delta RPM.
  • Effectuer la mise à jour initiale.
  • Configurer les dépôts de paquets tiers : EPEL, Nux, Adobe, etc.
  • Installer une panoplie d’outils en ligne de commande.
  • Installer le serveur graphique X Window.
  • Installer l’environnement de bureau GNOME.
  • Installer une panoplie cohérente d’applications supplémentaires.
  • Personnaliser les entrées du menu GNOME.
  • Installer le profil par défaut des nouveaux utilisateurs.
  • Installer une panoplie de polices TrueType avec le rendu Infinality.
  • Installer une collection de fonds d’écran.
  • Personnaliser le gestionnaire de connexion GDM.

Remarque importante : SELinux est basculé en mode permissif de manière temporaire afin de permettre à l’administrateur de résoudre manuellement les éventuels blocages avant de rebasculer en mode renforcé.

Pour vous donner un ordre d’idée, j’ai testé le script sur une paire de vieux Dell Optiplex avec un processeur double coeur, 4 gigaoctets de RAM et une connexion ADLS à 20 Mbit/s, et ça a mouliné près de 40 minutes. Vous avez donc largement le temps de boire un ou deux cafés en attendant que ça défile.

Basculer en mode graphique

Le script ne se charge pas de basculer automatiquement en mode graphique. L’administrateur pourra donc sereinement gérer la configuration de la carte graphique, installer d’éventuels pilotes propriétaires, etc.

Un premier test de l’affichage graphique pourra être effectué comme ceci.

# systemctl isolate graphical.target

Une fois que tout fonctionne correctement, on pourra démarrer en mode graphique par défaut.

# systemctl set-default graphical.target

Créer un ou plusieurs utilisateurs

Une fois que le script est arrivé à terme, on peut créer un nouvel utilisateur. Si vous souhaitez qu’il puisse utiliser sudo, ajoutez-le au groupe wheel.

# useradd -c "Nicolas Kovacs" kikinovak
# passwd kikinovak
# usermod -a -G wheel kikinovak

Redémarrez le PC, connectez-vous et supprimez l’utilisateur install provisoire.

# userdel -r install

Configurer le réseau sur un poste de travail

Dans la configuration par défaut, le réseau est géré par NetworkManager, qui est pratique sur un portable, mais ne sert pas à grand-chose sur un poste de travail ou une station de travail. Notons au passage que contrairement à ce qui se dit dans des blogs un peu partout sur le Web, NetworkManager n’est pas nécessaire pour la gestion du réseau. C’est juste une couche d’abstraction et de complexité supplémentaire, et dont on peut aisément se passer.

Avant la sortie de CentOS 7.5, il était tout à fait possible de désactiver le service NetworkManager (systemctl disable NetworkManager) voire même de supprimer le paquet correspondant (yum remove NetworkManager) pour configurer les choses de manière traditionnelle.

Or, depuis la version 7.5, les choses ont changé quelque peu. D’une part, le gestionnaire de connexion GDM dépend désormais de NetworkManager. D’autre part, la désactivation du service nous gratifie d’un avertissement au démarrage. Pour configurer le réseau de manière traditionnelle, on va donc simplement laisser le service en l’état et éditer le fichier correspondant à notre carte réseau comme ceci par exemple.

# /etc/sysconfig/network-scripts/ifcfg-enp2s0
DEVICE=enp2s0
TYPE=Ethernet
ONBOOT=yes
BOOTPROTO=dhcp
NM_CONTROLLED=no

Si l’on gère les noms d’hôtes de manière centralisée avec Dnsmasq, il faut supprimer les occurrences correspondantes dans /etc/hosts.

# /etc/hosts
127.0.0.1 localhost.localdomain localhost

Le fichier /etc/hostname devra juste contenir ceci.

localhost

Configurer le réseau sur un portable

Sur un ordinateur portable, on utilisera le NetworkManager et l’applet correspondant network-manager-applet, qu’il faudra installer.

# yum install network-manager-applet

Pour éviter les conflits, il vaut mieux supprimer les fichiers ifcfg-<interface> dans /etc/sysconfig/network-scripts et garder uniquement ifcfg-lo. Ensuite, il suffit de vérifier si NetworkManager est actif.

# systemctl status NetworkManager

GNOME

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

Peaufiner la configuration de GNOME sous CentOS

GNOMECet article décrit le peaufinage de l’environnement de bureau GNOME sur un poste de travail tournant sous CentOS. GNOME est le bureau par défaut proposé par Red Hat et CentOS, mais son apparence par défaut est quelque peu terne. Je me propose donc de rendre la configuration plus attrayante, afin d’obtenir un outil de travail qui donne  envie de travailler avec.

Pour la procédure d’installation détaillé, on pourra consulter cet article.

GNOME

À la redécouverte de GNOME

Ma relation avec GNOME est un peu compliquée. J’ai successivement utilisé GNOME 2.8 sous CentOS 4, GNOME 2.16 sous CentOS 5 et GNOME 2.28 sous CentOS 6. Je peux affirmer que je connaissais très bien ce bureau, dans la mesure où j’avais même écrit une série de scripts de compilation pour une version allégée tournant sous Slackware.

confusionMon premier contact avec GNOME 3 a été un désastre. Si je me souviens bien, c’était un CD de Fedora 15 avec GNOME 3.0. Je l’ai installé sur une machine de test, et je me suis retrouvé “comme le boeuf devant la nouvelle porte de l’étable”, comme on dit dans mon Autriche natale. L’expérience utilisateur a été lamentable, et j’ai un vague souvenir que même les opérations les plus élémentaires comme fermer la session ou éteindre la machine me posaient un problème. Je me sentais comme la proverbiale Madame Michu devant un bureau Windows 8. Le CD d’installation a carrément fini à la poubelle, et depuis ce jour, je m’étais juré de ne plus jamais toucher de près ou de loin à un bureau GNOME. À en juger d’après ce qui se disait dans les forums et sur les mailings lists, je n’étais pas le seul.

Et puis les années ont passé, et j’ai utilisé tout sauf GNOME, c’est-à-dire KDE, Xfce et MATE. La semaine dernière, j’ai expérimenté avec l’intégration de Compiz et Xfce. Je venais d’installer CentOS 7 sur mon nouveau petit portable 12″ Dell Latitude, et j’aurais bien voulu intégrer Compiz pour obtenir un effet d’exposé des fenêtres avec la souris. Le résultat, c’était un après-midi d’arrachage de cheveux, parce que visiblement Compiz et Xfce n’arrivaient pas à se mettre d’accord sur le nombre de bureaux virtuels et se tiraient mutuellement dans les pattes.

Sur une de mes machines de test, j’avais une installation standard de CentOS 7 avec un bureau GNOME 3.22. Elle semblait me faire de l’oeil, et j’ai donc commencé à jouer un peu avec cette installation. J’ai même parcouru l’excellente documentation en ligne, et au bout d’une demi-heure, je me suis dit que c’était probablement ce qu’il me fallait. J’ai donc sorti mon carnet de notes, et j’ai passé deux journées entières à expérimenter avec GNOME sous CentOS. Pour anticiper un peu sur la conclusion, ça tourne désormais sur mon portable, et j’adore travailler avec. C’est peut-être comme dans la vie, où les meilleures amitiés – et même les amours – passent par une phase d’antipathie initiale. Allez donc comprendre.

GNOME sans l’évier de la cuisine

robinetL’installation par défaut de GNOME sous CentOS 7 comporte déjà toute une panoplie d’applications et d’assistants de configuration, même lorsqu’on n’a pas coché les groupes de paquets Applications Internet et autres. Lors de la première connexion à la session, on a droit à un assistant de connexion aux comptes Google et autres, et une fois qu’on est passé par tout ça, on a droit à un tutoriel vidéo GNOME qui vous saute à la figure, littéralement. Bref, c’est ce que les anglophones appellent une kitchen sink install, l’équivalent de ce que l’on obtient lorsqu’on installe l’évier de la cuisine sur notre machine.

On va donc tenter une approche plus minimale, et on va partir d’une installation qui comporte le serveur graphique X Window, et c’est tout. Le bureau GNOME est normalement fourni par le groupe de paquets GNOME Desktop. L’installation de ce groupe récupère pas moins de 750 paquets avec un poids total de 550 Mo. Au lieu de cela, nous allons simplement faire ceci.

# yum install gnome-classic-session gnome-terminal xdg-user-dirs

Cette dernière commande récupère 140 paquets avec un poids de 60 Mo, et nous nous retrouvons avec un bureau GNOME réduit à son minimum syndical.

# systemctl set-default graphical.target

La session GNOME Classic, c’est un mode particulier de l’environnement GNOME destiné à tous ceux pour qui le GNOME Shell brut de décoffrage constitue une expérience trop disruptive, et qui préfèrent un paradigme de bureau plus traditionnel, avec un menu Applications, un accès direct aux Emplacements divers et variés du système, etc.

GNOME

Installer le thème GTK Arc

L’interface arbore le thème Adwaita par défaut, qui se présente de manière plus ou moins acceptable. J’ai expérimenté avec une série de thèmes GTK, et à mon humble avis, le thème Arc offre de loin le meilleur rendu. Il est fourni par le dépôt EPEL.

# yum install arc-theme

La nouvelle politique de GNOME depuis la version 3.0, celle pour laquelle les développeurs ont dû essuyer pas mal de critiques, c’est l’absence de toute possibilité de personnalisation, du moins dans la configuration par défaut. On a beau aller chercher dans les Paramètres, on reste quelque peu surpris par l’absence d’options pour le peaufinage de l’interface.

Toute personnalisation passe en effet par le GNOME Tweak Tool, qu’il faut donc installer au préalable.

# yum install gnome-tweak-tool

Une fois qu’il est installé, on peut lancer GNOME Tweak Took par le biais de l’entrée de menu Outil de personnalisation. Le thème GTK Arc pourra être défini dans l’onglet Apparence.

GNOME Arc

Installer le jeu d’icônes Elementary-Xfce

Le jeu d’icônes Elementary a été développé initialement pour Elementary OS, une distribution originale à l’esthétique extrêmement réussie. Malheureusement, les mainteneurs du jeu d’icônes initial ont décidé de “simplifier” la panoplie des icônes disponible, et il en résultait des jeux d’icônes incomplets. Elementary-Xfce est un fork du projet initial, qui vise à maintenir un jeu d’icônes complet pour Xfce. Malgré ce que son nom peut suggérer, il fonctionne également très bien sur d’autres environnements de bureau comme GNOME, MATE, Cinnamon ou Unity.

Sous CentOS, Elementary-Xfce est fourni par le dépôt Nux-Dextop.

# yum install elementary-xfce-icon-theme

Le jeu d’icônes Elementary-Xfce sera également défini dans l’onglet Apparence de l’Outil de personnalisation.

GNOME Elementary Xfce

Avec le nouveau thème GTK et le jeu d’icônes, notre interface est déjà bien plus présentable. À titre d’exemple, voici le navigateur de fichiers Nautilus.

GNOME Nautilus

Modifier le pointeur de la souris

Le pointeur noir par défaut est un peu terne et pas très visible. Nous allons installer et configurer un thème plus visible et plus agréable à l’oeil.

# yum install bluecurve-cursor-theme

Là encore, on passera par l’onglet Apparence de l’Outil de personnalisation, en définissant le thème Bluecurve-inverse pour le Curseur.

GNOME Bluecurve Inverse

Arranger l’aspect du bureau

Dans la configuration par défaut, le bureau arbore un accès rapide vers les fichiers et la corbeille. En ce qui me concerne, je trouve que ces icônes ne servent pas à grand-chose, à plus forte raison que l’on dispose déjà du menu Emplacements. En contrepartie, j’aime bien que mon bureau me montre des icônes pour les périphériques montés comme les clés USB, les disques durs externes, les caméras GoPro, etc.

Une fois que j’ai activé la gestion des Icônes sur le bureau dans l’Outil de personnalisation, je prends soin de décocher Dossier personnel, Serveurs réseau et Corbeille, tout en gardant Volumes montés.

Le fond d’écran est en mode Zoom dans la configuration par défaut, ce qui fait que le logo de CentOS est légèrement tronqué sur les écrans 4:3. Pour corriger cela, je passe le mode d’affichage à Stretched (étiré) pour l’arrière-plan aussi bien que pour l’écran de verrouillage.

GNOME Bureau

Configurer le verrouillage de l’écran

L’intervalle par défaut pour la mise en veille et le verrouillage de l’écran est de 5 minutes, ce qui est un peu court. On va donc ouvrir les Paramètres à l’onglet Énergie et passer cet intervalle à 15 minutes, en notant au passage que les développeurs ne nous laissent pas trop le choix pour la durée.

GNOME

Une fois qu’on a fait ça, on va ouvrir l’onglet Notifications et désactiver les Notifications sur l’écran de verrouillage. Lors de mes tests, j’ai eu l’occasion de découvrir un bug assez prohibitif qui gelait l’écran de verrouillage lorsqu’une notification s’affichait par-dessus. Cette configuration nous permettra donc d’éviter ce cas de figure gênant.

GNOME

Configurer le terminal graphique

Étant donné que je passe la moitié de mon temps dans un terminal – voire une flopée de terminaux ouverts en même temps – j’apporterai un soin particulier à rendre son utilisation le plus agréable possible.

Je lance GNOME Terminal et l’ouvre Édition > Préférences du profil. Je donne un nom (Microlinux) à mon profil. J’augmente la taille par défaut de mon terminal à l’ouverture à 105 colonnes sur 38 lignes. Je désactive le bip du terminal pour pouvoir travailler sereinement. Et je définis Monaco 12 comme police personnalisée par défaut. Non, ce n’est pas une police TrueType libre. Je l’ai cannibalisée sur une installation de Mac OS X. Oui, je sais, c’est pas bien.

GNOME Terminal

La prochaine étape consiste à configurer les jeux de Couleurs dans l’onglet correspondant. Ici, je définis les deux palettes respectives Solarizé sombre et Tango. J’active la transparence de l’arrière-plan, et je la règle à 10% environ. Nous aurons l’occasion d’y revenir un peu plus loin.

GNOME Terminal

La barre de défilement ne me sert pas à grand-chose dans mon terminal, étant donné que je me sers exclusivement des raccourcis clavier pour faire défiler l’affichage. Je la désactive donc en conséquence.

GNOME Terminal

L’éditeur dconf me permet de peaufiner davantage la configuration de mon terminal.

# yum install dconf-editor

Je lance l’éditeur dconf, et j’ouvre la section org > gnome > terminal > legacy. Le booléen confirm-close me permet de désactiver la confirmation avant la fermeture du terminal.

GNOME Terminal

Enfin, c’est ici que je peux définir la transparence de l’arrière-plan avec plus de précision. On notera encore l’organisation quelque peu chaotique des options de configuration.

GNOME Terminal

Au final, voilà notre terminal graphique dans sa nouvelle configuration.

GNOME Terminal

Installer une panoplie d’applications

Dans l’état actuel des choses, mon bureau n’est pas très fonctionnel, étant donné qu’il est juste composé d’un gestionnaire de fichiers et d’un terminal graphique. Je vais donc installer une série d’applications. Voici ma sélection de favoris.

  • Internet & réseau : Mozilla Firefox, Chromium, Mozilla Thunderbird, Pidgin, Filezilla, Vinagre, client OwnCloud
  • Bureautique : LibreOffice, Evince, PDFChain, panoplie raisonnablement complète de polices TrueType
  • Graphisme : Eye Of Gnome, Gthumb, GIMP, GNOME Screenshot, Inkscape, LibreCAD, Scribus, Simple Scan, Gtkcdlabel
  • Multimédia : Audacious, VLC, MPlayer, Asunder, HandBrake, Openshot, Audacity, WinFF, panoplie raisonnablement complète de codecs et de plugins
  • Accessoires : Brasero, CherryTree, Conky, Gedit, GNOME Calculator, File Roller, Recoll, documentation GNOME

Je ne rentre pas dans les détails et le peaufinage de chacun de ces composants. Cela fera prochainement l’objet d’un article à part.

Cela fait longtemps que j’ai pris l’habitude de personnaliser les entrées de menu de mes postes de travail tournant sous Linux, dans le but de les rendre plus intuitives pour mes utilisateurs. Je dispose pour cela d’un petit script menus.sh qui remplace les fichiers *.desktop dans /usr/share/applications par des versions personnalisées. Voilà à quoi ressemble ce script dans sa version actuelle.

#!/bin/bash
#
# menus.sh
#
# Ce script remplace les entrées de menu GNOME par défaut par une 
# panoplie d'entrées de menu personnalisées.
# 
# (c) Niki Kovacs, 2018

CWD=$(pwd)
ENTRIESDIR=$CWD/config/menus
ENTRIES=`ls $ENTRIESDIR` 
MENUDIRS="/usr/share/applications"

echo 
echo ":: Configuration des catégories de menu."
cat $ENTRIESDIR/gnome-applications.menu.custom > \
  /etc/xdg/menus/gnome-applications.menu

for MENUDIR in $MENUDIRS; do
  for ENTRY in $ENTRIES; do
    if [ -r $MENUDIR/$ENTRY ]; then
      echo ":: Configuration de l'entrée de menu $ENTRY."
      cat $ENTRIESDIR/$ENTRY > $MENUDIR/$ENTRY
    fi
  done
done

# L'entrée de menu pour OpenJDK est une cible mouvante
OPENJDK=$(find /usr/share/applications -name 'java*jdk*.desktop')
if [ ! -z "$OPENJDK" ]; then
  if ! grep -q "NoDisplay" "$OPENJDK" ; then
    echo "NoDisplay=true" >> $OPENJDK
          echo ":: Configuration de l'entrée $(basename $OPENJDK)."
  fi
fi

J’exécute ce script de temps en temps, notamment lorsqu’une mise à jour vient écraser l’entrée de menu personnalisée.

La particularité de GNOME, c’est que certaines applications disposent d’une entrée dans le fichier /etc/xdg/menus/gnome-applications.menu. Si l’on souhaite personnaliser ces entrées, il faudra supprimer la mention correspondante dans ce fichier.

J’en ai profité au passage pour apporter un peu plus de cohérence dans l’organisation des catégories de menu pour éviter le flou artistique et les redondances dans des catégories comme Accessoires, Utilitaires, Outils système et Autres.

La personnalisation des menus sera abordée plus en détail dans mon prochain article.

Les dimensions du menu Applications sont apparemment codées en dur. Or, à partir du moment où l’on dispose d’une certaine quantité d’applications dans une catégorie, la longueur de la liste déborde sur la hauteur du menu, qui affiche désormais un curseur interne pas très esthétique. La solution idéale consisterait donc à augmenter la taille du menu.

Étant donné qu’il s’agit d’une extension, je suis allé regarder dans /usr/share/gnome-shell/extensions. Le répertoire au nom barbare apps-menu@gnome-shell-extensions.gcampax.github.com contient les fichiers qui définissent le menu Applications, notamment le fichier extension.js. Jetons un oeil dans ce fichier, vers la ligne 30.

const MENU_HEIGHT_OFFSET = 132;

J’ai expérimenté un peu, et j’ai augmenté cette valeur de 132 à 200. Notez qu’il est nécessaire de fermer la session et de se reconnecter pour que les modifications prennent effet.

Il en va de même pour la largeur du menu Applications. Certaines applications ont des noms relativement longs dans la traduction française, comme par exemple le Visionneur de documents Evince. Dans l’aspect par défaut du menu, l’entrée de menu se retrouve tronquée à “Visionneur de doc…“, ce qui n’est pas très esthétique.

Pour élargir le menu un tout petit peu, il faudra regarder vers la fin du fichier extension.js, aux alentours de la ligne 690.

this.mainBox.style=('width: 35em;');

Il suffit d’augmenter cette valeur légèrement à 37em pour que les noms des applications s’affichent en entier.

Voici comment se présente dorénavant le menu Applications revu et corrigé.

GNOME menu Applications

Afficher les répertoires avant les fichiers

Dans la configuration par défaut, Nautilus affiche tout le contenu d’un répertoire par ordre alphabétique sans faire la distinction entre les répertoires et les fichiers, ce qui est quelque peu déroutant.

Ce comportement peut être corrigé dans l’éditeur dconf, dans la section org > gtk > settings > file-chooser. Le booléen sort-directories-first permet d’afficher les répertoires en premier.

Nautilus répertoires

Création du profil par défaut

GNOME enregistre tous les réglages individuels dans ~/.config/dconf/user. Il suffit de copier cette arborescence vers /etc/skel avant de créer un nouvel utilisateur.

# tree -a /etc/skel/.config/
/etc/skel/.config/
└── dconf
    └── user

Conclusion

Nous arrivons au bout de la personnalisation du bureau GNOME. Le résultat est un environnement de bureau fonctionnel et esthétique.

GNOME

Certaines fonctionnalités – comme ici l’exposé des fenêtres avec un geste de la souris – sont aussi pratiques au quotidien que jolies à voir.

GNOME

 

 

 

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

Ma propre webradio avec MPD et Icecast (3)

WebradioVoici le troisième article consacré à la mise en place d’une webradio avec MPD et Icecast. Dans notre précédent article, nous avons décrit la mise en oeuvre d’un serveur de flux audio sur un serveur dédié. Aujourd’hui, nous allons rendre notre webradio plus fonctionnelle.

Travailler en ligne de commande

Évidemment, rien ne m’empêche de transférer mes fichiers audio vers mon serveur et d’y établir mes playlists. Dans ce cas, tout se passerait en ligne de commande.

  • rsync ou scp pour transférer les fichiers
  • chown et chmod pour définir les permissions qui vont bien
  • ncmpcpp pour définir les playlists

Après avoir expérimenté un peu, j’ai trouvé une solution plus pratique pour gérer le contenu à proprement parler.

MPD pour le commun des mortels

Le serveur MPD permet de tourner avec les droits d’un utilisateur du commun des mortels. Je vais donc installer MPD pour mon utilisateur kikinovak local.

Le contenu de la radio sera stocké dans ~/Webradio/music et ~/Webradio/playlists.

Ensuite, je crée un utilisateur kikinovak sur le serveur dédié, et je reconfigure MPD pour qu’il tourne avec les droits de cet utilisateur.

Il ne me reste plus qu’à rédiger un petit script qui me permette de synchroniser le contenu de l’arborescence ~/Webradio locale et distante, et le tour est joué.

Installer et configurer MPD sur ma station de travail

Sur ma station de travail locale, je crée l’arborescence de ma webradio.

$ mkdir -pv ~/Webradio/{music,playlists}
mkdir: création du répertoire « /home/kikinovak/Webradio »
mkdir: création du répertoire « /home/kikinovak/Webradio/music »
mkdir: création du répertoire « /home/kikinovak/Webradio/playlists »

J’installe le serveur MPD et le client qui va avec.

# yum install mpd ncmpcpp

Après avoir sauvegardé le fichier de configuration d’origine, j’édite /etc/mpd.conf comme ceci.

music_directory    "/home/kikinovak/Webradio/music"
playlist_directory "/home/kikinovak/Webradio/playlists"
db_file            "/home/kikinovak/Webradio/mpd.db"
log_file           "/var/log/mpd/mpd.log"
state_file         "/home/kikinovak/Webradio/mpdstate"
user               "kikinovak"
group              "kikinovak"

Je configure la sortie audio comme ceci.

audio_output {
  type          "alsa"
  name          "My ALSA Device"
  device        "hw:0,0"    # optional
  mixer_type    "hardware"  # optional
  mixer_device  "default"   # optional
  mixer_control "PCM"       # optional
  mixer_index   "0"         # optional
}
...
# audio_output {
#   type    "pulse"
#   name    "My Pulse Output"
#   server  "remote_server"   # optional
#   sink    "remote_server_sink"  # optional
#}

Débogage de SELinux

Lorsqu’on fait tourner MPD en tant qu’utilisateur simple, SELinux affiche toute une série d’alertes qu’il est nécessaire de corriger. Voici en gros ce que j’ai dû faire.

Problème n° 1 :

SELinux is preventing /usr/bin/mpd from search access on the 
directory /home/kikinovak.

Solution :

# setsebool -P mpd_enable_homedirs 1

Problème n° 2 :

SELinux is preventing /usr/bin/mpd from search access on the 
directory Webradio.

Solution :

# ausearch -c 'mpd' --raw | audit2allow -M my-mpd
# semodule -i my-mpd.pp

Problème n° 3 :

SELinux is preventing /usr/bin/pulseaudio from read access on the 
directory /home/kikinovak.

Solution :

# ausearch -c 'pulseaudio' --raw | audit2allow -M my-pulseaudio
# semodule -i my-pulseaudio.pp

À partir de là, tout semble rentré dans l’ordre.

# sealert -a /var/log/audit/audit.log
100% done
found 0 alerts in /var/log/audit/audit.log

Reconfigurer MPD sur le serveur dédié

À présent, je crée un utilisateur kikinovak sur le serveur, je définis les répertoires ~/Webradio/music et ~/Webradio playlists, je reconfigure MPD comme je l’ai fait sur ma station de travail, mais en conservant ma sortie audio de type shout redirigé vers Icecast.

music_directory    "/home/kikinovak/Webradio/music"
playlist_directory "/home/kikinovak/Webradio/playlists"
db_file            "/home/kikinovak/Webradio/mpd.db"
log_file           "/var/log/mpd/mpd.log"
state_file         "/home/kikinovak/Webradio/mpdstate"
user               "kikinovak"
group              "kikinovak"

Là aussi, je devrai procéder à une série d’ajustements avec SELinux. Pour plus de détails, on pourra lire cet article.

Synchroniser les fichiers locaux avec le serveur dédié

Mon utilisateur kikinovak devra être capable de se connecter par clé SSH au serveur dédié. Une fois que c’est fait, il ne me reste plus qu’à écrire un petit script qui me permet de synchroniser mon arborescence locale avec celle du serveur dédié. Voici à quoi cela peut ressembler.

#!/bin/bash
# 
# Script pour synchroniser Radio Novak avec le serveur

HOST=alphajet.microlinux.fr
MPDDIR=/home/kikinovak/Webradio

ping -c 1 $HOST >/dev/null 2>&1 ||
  {
    echo "L'hôte distant n'est pas joignable"
    exit
  }

echo 
echo ":: Transfert des fichiers audio..."
echo 
rsync -av --delete $MPDDIR/music/ $HOST:/$MPDDIR/music/

echo 
echo ":: Transfert des playlists..."
echo 
rsync -av --delete /$MPDDIR/playlists/ $HOST:/$MPDDIR/playlists/

Radio Novak

Depuis quelques jours, ma petite webradio tourne non-stop, avec quelque chose comme 30 heures de compils qui passent en boucle.

Vous pouvez utiliser n’importe quel lecteur audio digne de ce nom pour ouvrir le flux. Avec VLC par exemple, ouvrez Média > Ouvrir un flux réseau et saisissez l’URL suivante.

http://www.radionovak.com:8000/radionovak.ogg

VLC Icecast

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

Ma propre webradio avec MPD et Icecast (2)

WebradioDans mon précédent article, j’ai décrit l’installation d’une webradio dans mon réseau local, dans le but de prendre en main les différents composants. Aujourd’hui, je vais installer le tout sur une machine publique, à savoir un serveur Dedibox de chez Online. En passant, j’en ai profité pour faire pointer le domaine radionovak.com vers un de mes serveurs de production.

Configurer le pare-feu

Mon installation locale utilisait le port 8000 en TCP pour les connexions en HTTP. Sur ma machine publique, je vais également ouvrir le port 8001 en TCP pour les connexions en HTTPS.

# iptables -A INPUT -p tcp -i eth0 --dport 8000:8001 -j ACCEPT

Installer le serveur de sons

J’installe le serveur de sons Pulseaudio.

# yum install pulseaudio pulseaudio-utils

Notez que je n’installe pas alsamixer, puisque cela n’aurait pas de sens. Le serveur est dépourvu de carte son (lspci | grep audio), et de toute façon, il est installé dans un datacenter à 800 kilomètres de chez moi, je ne peux donc pas brancher mes écouteurs dessus.

Installer MPD et Icecast

Je configure le dépôt de paquets Nux-Dextop et j’installe “à la louche” les paquets nécessaires.

# yum install mpd ncmpcpp icecast

Importer les fichiers audio

Je range mes fichiers audio et mes playlists dans l’arborescence /var/lib/mpd en définissant les permissions qui vont bien.

# cd /var/lib/mpd
# chown -R mpd:mpd music/ playlists/
# find . -type d -exec chmod 0755 {} \;
# find . -type f -exec chmod 0644 {} \;

Configurer MPD et Icecast

J’effectue une copie de sauvegarde de la configuration par défaut des serveurs MPD et Icecast.

# cd /etc
# cp mpd.conf mpd.conf.orig
# cp icecast.xml icecast.xml.orig

J’édite /etc/mpd.conf pour définir le flux audio.

audio_output {
  type        "shout"
  encoding    "ogg"     
  name        "Radio Novak"
  host        "localhost"
  port        "8000"
  mount       "/radionovak.ogg"
  password    "mot_de_passe"
  bitrate     "128"
  format      "44100:16:1"
  protocol    "icecast2"
  user        "source"    
  description "The Supersexy Swinging Sound Of Kiki Novak"
  url         "http://www.radionovak.com"
  genre       "mixed"
  public      "yes"
  timeout     "2"     
  mixer_type  "software"
}

Cette configuration se reflète dans /etc/icecast.xml.

<icecast>
  <location>Radio Novak</location>
  <admin>info@microlinux.fr</admin>
  <limits>
    <clients>100</clients>
    <sources>2</sources>
    <threadpool>5</threadpool>
    <queue-size>524288</queue-size>
    <client-timeout>30</client-timeout>
    <header-timeout>15</header-timeout>
    <source-timeout>10</source-timeout>
    <burst-on-connect>1</burst-on-connect>
  </limits>

  <authentication>
    <!-- Sources log in with username 'source' -->
    <source-password>mot_de_passe</source-password>
    <!-- Relays log in username 'relay' -->
    <relay-password>mot_de_passe</relay-password>

    <!-- Admin logs in with the username given below -->
    <admin-user>admin</admin-user>
    <admin-password>mot_de_passe</admin-password>
  </authentication>

  <hostname>www.radionovak.com</hostname>

  <!-- You may have multiple <listener> elements -->
  <listen-socket>
    <port>8000</port>
    <bind-address>127.0.0.1</bind-address>
  </listen-socket>

Activer et démarrer les services

J’active les services au démarrage.

# systemctl enable icecast mpd

Je démarre les services dans un ordre cohérent.

# systemctl start icecast mpd

Je lance le client ncmpcpp, j’ajoute des morceaux à la playlist et je démarre la lecture.

Lire le flux audio avec VLC

À présent, je peux lancer VLC sur ma station de travail et tenter d’ouvrir le flux réseau.

VLC Icecast

Ça fonctionne ! Un grand pas pour moi, un petit pas pour l’humanité. J’en profite pour aller boire un café et réfléchir aux peaufinages divers et variés pour améliorer mon installation.

SELinux et MPD

SELinux affiche une erreur bénigne qui est manifestement le fruit d’un cafouillage dans l’emplacement des fichiers de configuration de MPD.

# sealert -a /var/log/audit/audit.log
If you believe that mpd should be allowed getattr access 
on the .config directory by default.

Le problème persiste même si l’on suit les suggestions fournies dans l’avertissement. En effet, il s’agit d’un bug dans la politique SELinux par défaut, qui est décrit ici et ici.

Configurer une connexion sécurisée pour Icecast

Étant donné que le serveur Icecast affiche une interface web avec un accès administrateur, on va configurer une connexion sécurisée pour éviter que les identifiants de connexion et les mots de passe transitent en clair.

Mes certificats LetsEncrypt sont rangés en-dessous de l’arborescence /etc/letsencrypt/live et appartiennent à l’utilisateur root et au groupe certs. Pour plus de détails, on pourra jeter un oeil ici. Quoi qu’il en soit, l’utilisateur système icecast doit pouvoir accéder au certificat. On va donc l’ajouter au groupe système certs.

# usermod -a -G certs icecast

J’ai tenté de configurer une connexion SSL en suivant la documentation du serveur Icecast, mais sans succès. Et j’ai fini par comprendre que l’application avait manifestement un problème avec le format du certificat fullchain.pem. J’ai donc tenté la bidouille suivante, qui consiste tout simplement à concaténer le certificat et la clé privée en un seul fichier.

# cd /etc/letsencrypt/live/radionovak.com
# cat cert.pem privkey.pem > icecast.pem
# chown root:certs icecast.pem
# chmod 0640 icecast.pem

J’édite /etc/icecast.xml en indiquant le chemin vers le certificat dans la section <paths>.

<paths>
  <!-- basedir is only used if chroot is enabled -->
  <basedir>/usr/share/icecast</basedir>

  <!-- Note that if <chroot> is turned on below, these paths must 
  both be relative to the new root, not the original root -->
  <logdir>/var/log/icecast</logdir>
  <webroot>/usr/share/icecast/web</webroot>
  <adminroot>/usr/share/icecast/admin</adminroot>
  <pidfile>/var/run/icecast/icecast.pid</pidfile>
  <ssl-certificate>/chemin/vers/icecast.pem</ssl-certificate>
  <alias source="/" dest="/status.xsl"/>
</paths>

Ensuite, j’ajoute une deuxième stance <listen-socket>.

<!-- You may have multiple <listener> elements -->
  <listen-socket>
  <port>8000</port>
</listen-socket>
<listen-socket>
  <port>8001</port>
  <ssl>1</ssl>
</listen-socket>

Au redémarrage du serveur Icecast, je me retrouve confronté à une autre erreur due à SELinux. En langage tam-tam, SELinux a un problème avec Icecast qui tente d’ouvrir une connexion sur le port 8001.

# sealert -a /var/log/audit/audit.log
If you believe that icecast should be allowed name_bind access 
on the port 8001 tcp_socket by default.

Ici, je suis les recommandations données dans l’avertissement pour résoudre le problème.

# ausearch -c 'icecast' --raw | audit2allow -M my-icecast
# semodule -i my-icecast.pp

Je vérifie si le fichier /var/log/icecast/error.log contient bien quelque chose comme ceci.

INFO connection/get_ssl_certificate SSL certificate found at
/etc/letsencrypt/live/radionovak.com/icecast.pem
INFO connection/get_ssl_certificate SSL using ciphers
ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM
...

À partir de là, je peux ouvrir une connexion sécurisée à l’interface d’administration du serveur Icecast.

Icecast SSL

L’installation est donc d’ores et déjà fonctionnelle. Vous pouvez utiliser n’importe quel lecteur audio digne de ce nom comme Audacious ou VLC pour lire le flux audio à l’adresse suivante.

http://www.radionovak.com:8000/radionovak.ogg

Je vous invite même à le faire, car ça me permettra de voir en direct comment le serveur digère les montées en charge.

Un gentil bonjour de votre DJ dans la garrigue.

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

Ma propre webradio avec MPD et Icecast (1)

WebradioC’est l’été, il fait chaud, les clients sont à peu près tous partis en vacances et le téléphone ne sonne que très rarement. Entre les sorties baignade à la rivière et les plans escalade à la falaise, il me reste quand-même du temps et de l’inspiration. Du coup j’en profite pour écrire ma documentation sur la configuration d’une webradio sous Linux. Voici donc le premier article dans la série, qui décrit la mise en place et le débogage d’un serveur de flux audio dans mon réseau local.

The Joy Of Mix

BASF audioMa première compil audio remonte à 1978, si mon souvenir est bon. Une cassette audio BASF orange vif qui conciliait Amanda Lear, Giorgio Moroder, Abba, Queen et Kiss. Pas forcément les morceaux qui passaient à la radio. Plutôt les perles dénichées entre les tubes.

Quarante ans et quelques centaines de compils plus tard, mes goûts musicaux ont pu connaître quelques révolutions coperniciennes. Le principe de la compil n’a pas bougé pour autant. Mettre un pied devant l’autre et un morceau après l’autre, et voir où ça nous mène.

Seulement, voilà. Mes potes et moi, on est des vieux de la vieille, du genre qui gravent les compils sur les CD. Et avec tous les amis qui m’ont demandé au fil des années de bien vouloir leur graver la toute dernière, je me suis parfois retrouvé à copier les CD à une cadence susceptible d’inspirer le respect à la mafia albanaise. Il fallait donc trouver une solution.

Étant donné que j’administre quelques serveurs dédiés dans des datacenters, j’ai eu l’idée de mettre en ligne mes compils sous forme de flux audio publiquement accessible, et de baptiser le tout Radio Novak. Je précise que c’est là un projet que j’entreprends uniquement pour le fun.

Les ingrédients

Mes serveurs tournent tous exclusivement sous CentOS 7. En termes d’ingrédients, voici les composants dont je vais me servir.

  • MPD (Music Player Daemon) est un lecteur audio qui utilise une architecture client-serveur.
  • Ncmpcpp est un client en ligne de commande qui permet d’accéder à MPD.
  • Icecast est un serveur de diffusion de flux.

Un peu de méthode

La mise en place d’un tel serveur de streaming n’est pas forcément une tâche triviale, mais ce n’est pas non plus la mer à boire. Il suffit d’être un peu méthodique dans son approche, et c’est exactement ce que nous allons faire. Je ne vais donc pas me lancer allègrement dans l’installation et la configuration de tous ces composants sur un de mes serveurs de production. Au lieu de cela, je vais d’abord prendre en main chacun des composants sur un PC local qui fait office de serveur de test dans mon bureau.

Du son pour le serveur

La machine amandine.microlinux.lan est dotée d’une installation minimale de CentOS 7, sans interface graphique. La première chose qu’on va faire, c’est la rendre capable de jouer des fichiers audio.

# yum install pulseaudio pulseaudio-utils alsa-utils

Le plus simple ici, c’est de redémarrer le serveur pour que tout ça se mette en place. Mon approche se veut avant tout pratique et pragmatique. Je vous fais donc grâce de tous les détails déconcertants de Pulseaudio et d’ALSA.

Je branche mes écouteurs sur le serveur et j’ouvre la console de mixage.

# alsamixer

Alsamixer

Je règle le volume des canaux de sortie en évitant les distorsions, et en vérifiant bien que les sorties en question ne soient pas désactivées (M comme Mute). Pour basculer entre les états Muet et Activé, il faut utiliser respectivement les touches [,] et [>]. En passant, je me dis que le gars qui a défini les raccourcis clavier de cette application ferait bien de fumer autre chose que la moquette.

Le paquet alsa-utils fournit une série de fichiers audio qui permettent de tester le bon fonctionnement de la carte son de la machine.

# aplay /usr/share/sounds/alsa/*.wav

Si tout se passe bien, on entend une voix féminine impassible qui égrène “Front Center, Front Left, Front Right, Rear Center, Rear Left“, etc.

Installation de MPD

Maintenant que j’ai du son sur mon système, je peux installer le premier composant de mon serveur de flux, à savoir MPD. La distribution CentOS ne fournit pas ce paquet, le dépôt tiers EPEL non plus, mais on le trouve dans le dépôt Nux-Dextop. Une fois qu’on a configuré et activé ce dépôt, il suffit d’installer MPD comme ceci.

# yum install mpd

L’installation du paquet crée un utilisateur système mpd et un groupe système mpd correspondant.

# grep mpd /etc/passwd
mpd:x:996:991:Music Player Daemon:/var/lib/mpd:/sbin/nologin
# grep mpd /etc/group
audio:x:63:mpd
mpd:x:991:

Mise en service de MPD

Avant de démarrer le serveur MPD, on va basculer SELinux en mode permissif. Nous verrons tout de suite pourquoi.

# setenforce 0

Ensuite, on active et démarre le service.

# systemctl enable mpd
# systemctl start mpd

Voyons ce que donne ce premier lancement avec la configuration par défaut.

# cat /var/log/mpd/mpd.log
Aug 03 13:21 : errno: Failed to open /var/lib/mpd/mpdstate:
No such file or directory

Le fichier mpdstate est censé nous renseigner sur l’état de MPD, par exemple après un redémarrage de la machine. L’astuce consiste ici tout simplement à redémarrer le service pour créer le fichier en question.

# systemctl restart mpd
# ls /var/lib/mpd/
mpd.db mpdstate music playlists

Le fichier /etc/mpd.conf fournit la configuration du serveur. Avant d’aller plus loin, on va effectuer une copie de sauvegarde de ce fichier.

# cd /etc/
# cp mpd.conf mpd.conf.orig

La configuration par défaut est déjà raisonnablement fonctionnelle.

# /etc/mpd.conf
music_directory "/var/lib/mpd/music"
playlist_directory "/var/lib/mpd/playlists"
/var/lib/mpd/mpd.db
log_file "/var/log/mpd/mpd.log"
...

Importer les fichiers audio

À présent, on va fournir une collection de fichiers audio au serveur, qu’on va ranger dans le répertoire /var/lib/mpd/music. Si l’on dispose d’une collection correspondante de playlists, elles devront être rangées dans /var/lib/mpd/playlists. Attention à bien définir les permissions adaptées.

# cd /var/lib/mpd
# chown -R mpd:mpd music/ playlists/
# find . -type d -exec chmod 0755 {} \;
# find . -type f -exec chmod 0644 {} \;

Un client pour se connecter à MPD

Le serveur est donc en train de tourner, et la prochaine étape consiste à installer un client qui nous permette de nous y connecter. Mon choix se porte sur ncmpcpp, une réécriture en C++ du vénérable client en ligne de commande ncmpc. Ce client est également fourni par le dépôt de paquets Nux-Dextop.

# yum install ncmpcpp

Je n’ai pas forcément besoin des droits root pour invoquer le client et me connecter au serveur.

$ ncmpcpp

ncmpcpp

Le client ncmpcpp est un outil puissant avec une myriade de fonctionnalités… et de raccourcis clavier correspondants. C’est assez facile de s’y perdre. Dans un premier temps, on va donc voir comment on peut simplement survivre en utilisant cette application.

  1. Rafraîchir la base de données de MPD : [U]
  2. Afficher le navigateur de fichiers : [3]
  3. Naviguer avec les touches fléchées et la touche [Entrée] sur [..]
  4. Ajouter un fichier à la playlist avec la touche [Entrée]
  5. Ajouter plusieurs fichiers à la playlist
  6. Afficher la playlist en cours : [2]
  7. Basculer entre les modes d’affichage dans la playlist : [P]

Si tout se passe bien, on devrait déjà avoir du son dans les écouteurs. Apparemment, tout fonctionne. Avant d’aller plus loin, on va éliminer une source de frustration potentielle.

Débogage de SELinux

Les touches [-] et [+] servent respectivement à diminuer et à augmenter le volume sonore. Et lorsqu’on les actionne une première fois, on s’aperçoit que le son disparaît. MPD s’est mis en pause, et pas moyen de le redémarrer. Ici encore, je vous fais grâce des détails exaspérants. C’est tout simplement SELinux qui vient troubler la fête, en nous empêchant de modifier le volume audio.

# sealert -a /var/log/audit/audit.log
SELinux is preventing /usr/bin/pulseaudio from execute access 
on the file /var/lib/mpd/orcexec.4rKUnC (deleted).

Suivons la suggestion qui nous est fournie dans le message d’erreur.

# ausearch -c 'alsa-sink-AD198' --raw
# semodule -i my-alsasinkAD198.pp

Relançons ncmpcpp et essayons de modifier le volume sonore avec les touches [-] et [+]. Cette fois-ci, l’opération se fait sans problèmes. Le souci avec SELinux est réglé.

Installation du serveur Icecast

Le serveur de flux audio Icecast est la dernière brique nécessaire pour notre test local. Le paquet icecast est fourni par le dépôt de paquets EPEL.

# yum install icecast

L’installation du paquet crée un utilisateur système icecast et un groupe système icecast correspondant.

Le serveur Icecast se configure par le biais du fichier /etc/icecast.xml. Là encore, on va effectuer une copie de sauvegarde avant de modifier quoi que ce soit.

# cd /etc/
# cp icecast.xml icecast.xml.orig

Tant qu’on y pense, on va ouvrir le port 8000 en TCP dans le pare-feu pour permettre aux clients de se connecter au service de flux audio.

Connecter MPD et Icecast

À présent, il va falloir connecter MPD et Icecast. Pour ce faire, on va éditer /etc/mpd.conf et ajouter une stance dans la section Audio Output. Le fichier contient déjà un exemple commenté, que j’adapte à mes besoins.

# /etc/mpd.conf
...
audio_output {
  type        "shout"
  encoding    "ogg"   
  name        "My Shout Stream"
  host        "localhost"
  port        "8000"
  mount       "/mpd.ogg"
  password    "mot_de_passe"
  bitrate     "128"
  format      "44100:16:1"
  protocol    "icecast2"    
  user        "source"    
  description "My Stream Description" 
  url         "http://amandine.microlinux.lan"  
  genre       "mixed"     
  public      "no"      
  timeout     "2"     
  mixer_type  "software"    
}

Maintenant, je passe à la configuration correspondante du serveur Icecast. MPD se connecte à Icecast par le biais de l’utilisateur source et du mot de passe défini dans /etc/mpd.conf. Ces données doivent être reflétées dans /etc/icecast.xml, dans la section portant sur l’authentification.

  <authentication>
    <!-- Sources log in with username 'source' -->
    <source-password>mot_de_passe</source-password>
    <!-- Relays log in username 'relay' -->
    <relay-password>mot_de_passe</relay-password>
  
    <!-- Admin logs in with the username given below -->
    <admin-user>admin</admin-user>
    <admin-password>mot_de_passe</admin-password>
  </authentication>

Dans la configuration par défaut, Icecast permet uniquement aux clients sur la machine locale de se connecter. Il faut donc impérativement commenter ou supprimer la directive bind-address pour autoriser les connexions en provenance d’autres machines du réseau local.

  <listen-socket>
    <port>8000</port>
    <bind-address>127.0.0.1</bind-address>
    <!-- <shoutcast-mount>/stream</shoutcast-mount> -->
  </listen-socket>

Au tout début du fichier /etc/icecast.xml, on va ajouter les deux directives <location> et <admin> qui identifient le serveur.

<icecast>
  <location>Test local Radio Novak</location>
  <admin>info@microlinux.fr></admin>
  <limits>
    <clients>100</clients>
    <sources>2</sources>
    <threadpool>5</threadpool>
    <queue-size>524288</queue-size>
    <client-timeout>30</client-timeout>
    <header-timeout>15</header-timeout>
    <source-timeout>10</source-timeout>

Enfin, la directive <hostname> fournira le nom d’hôte du serveur de flux.

  <hostname>amandine.microlinux.lan</hostname>

Il ne reste plus qu’à activer et (re)lancer les services dans un ordre cohérent.

# systemctl stop mpd
# systemctl enable icecast
# systemctl start icecast
# systemctl start mpd

Lire le flux audio avec VLC et Audacious

Dorénavant, je peux essayer de me connecter au flux audio depuis une machine locale. Sur ma station de travail, j’essaie d’abord de me connecter avec VLC. Dans le menu principal de VLC, j’ouvre Média > Ouvrir un flux réseau et je fournis l’URL de mon flux, en l’occurrence http://amandine.microlinux.lan:8000/mpd.ogg.

VLC Icecast

De manière similaire, je peux lire mon flux audio avec Audacious. Dans le menu principal de l’application, j’ouvre Fichier > Lire une URL et je fournis l’adresse de mon flux.

Audacious Icecast

Mon premier test en local a été concluant. Dans mon prochain article, je décrirai l’installation et la configuration du serveur MPD/Icecast sur une machine publique.

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

Redimensionner des images par lots

Redimensionner des images par lotsTous ceux qui manipulent des photos avec leur ordinateur connaissent certainement le problème suivant. Vous venez d’importer un lot de photos depuis votre appareil numérique. Les appareils modernes offrent tous des résolutions de plus en plus impressionnantes, et vous vous retrouvez avec une collection de photos dont chacune pèse une bonne dizaine de mégaoctets, avec une résolution du genre 5184×3456 pixels.

Vous aimeriez bien réduire ces images pour les envoyer à la famille ou pour les publier sur votre blog. Vous ouvrez la première image avec GIMP, vous ouvrez successivement les menus Image > Échelle et taille de l’image, vous manipulez l’interface de redimensionnement, vous exportez votre image redimensionnée en l’écrasant et vous quittez GIMP en abandonnant les modifications. Pas très pratique, tout cela, et assez exaspérant lorsque l’opération doit être répétée un certain nombre de fois.

Sous Linux, la solution la plus courante pour redimensionner des images par lots consiste à utiliser ImageMagick, le couteau suisse de la manipulation d’images. Malheureusement, il ne s’utilise qu’en ligne de commande, et la plupart de mes clients restent quelque peu frileux face à l’utilisation de cet outil.

J’ai donc expérimenté un peu, et j’ai trouvé une solution relativement simple qui utilise l’outil de redimensionnement de la visionneuse d’images gThumb.

Voici un répertoire avec une collection de photos fraîchement importées. Notez la taille relativement importante de chaque image.

Redimensionner des images par lots

Je sélectionne l’ensemble des photos avec le raccourci Ctrl+A et j’effectue un clic droit sur la sélection. Dans le menu contextuel, je choisis d’ouvrir les fichiers avec la Visionneuse d’images, en l’occurrence gThumb.

Redimensionner des images par lots

Les fichiers sélectionnés s’affichent en tant que Catalogue dans gThumb.

Redimensionner des images par lots

Là encore, je sélectionne l’ensemble des fichiers. Je peux utiliser la souris pour ce faire, ou alors le même raccourci Ctrl+A.

Redimensionner des images par lots

Tout en gardant ma sélection, j’ouvre l’outil de redimensionnement de gThumb.

Redimensionner des images par lots

Dans la fenêtre de redimensionnement, je choisis un taux de réduction pour mes images en prenant soin de conserver les proportions, et je clique sur Exécuter.

Redimensionner des images par lots

Le redimensionnement commence et me propose par défaut l’écrasement du fichier existant. Ce dialogue apparaît pour chaque photo. Si l’on souhaite redimensionner l’ensemble de la sélection “à la louche”, il suffit de choisir l’option Écraser tous les fichiers.

Redimensionner des images par lots

Au final, j’aurai mis quelques secondes seulement pour redimensionner l’ensemble de mes photos importées.

Redimensionner des images par lots

 

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