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 , | 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

Afficher le contenu d’un répertoire en temps réel

RafraîchirCet article est consacré à un problème agaçant et que j’ai vu apparaître de manière plus ou moins aléatoire sur toutes sortes de distributions Linux, indépendamment de l’environnement de bureau utilisé. Prenons un cas de figure concret pour décrire le problème en question.

  1. J’ouvre un navigateur de fichiers comme Dolphin, Thunar, Caja, etc.
  2. Je télécharge une archive compressée vers le répertoire courant.
  3. À première vue, le nouveau fichier n’apparaît pas dans la liste.
  4. J’appuie sur F5 pour rafraîchir l’affichage, et j’aperçois mon fichier.
  5. J’extrais l’archive vers le répertoire courant.
  6. Même problème, le contenu de l’archive n’apparaît pas.
  7. J’appuie encore sur F5 pour rafraîchir l’affichage, et le problème est réglé.

Thunar Archive

Certes, le problème n’est pas très grave en soi, puisqu’il suffit de rafraîchir manuellement l’affichage du répertoire pour accéder aux nouveaux fichiers. Mais en termes d’usabilité, ce n’est pas un comportement optimal. Sans oublier le fait que j’installe des postes de travail Linux à mes clients, et cela m’est arrivé plus d’une fois qu’un client m’appelle pour m’expliquer qu’il ne trouve pas le fichier qu’il vient pourtant de télécharger.

Après investigation, ce comportement est lié à inotify, un mécanisme du noyau Linux qui fournit des notifications concernant le système de fichiers. Je ne vais pas rentrer dans les détails techniques inquiétants et me concentrer sur l’essentiel. La valeur max_user_watches définit la limite système du nombre de fichiers dont on surveille les changements en temps réel. Sur les systèmes Red Hat Enterprise Linux et CentOS, cette valeur est trop basse.

# cat /proc/sys/fs/inotify/max_user_watches
8192

On peut déjà essayer d’augmenter cette valeur “à chaud”.

# sysctl fs.inotify.max_user_watches = 524288
# sysctl -p

Voyons si cela a réglé mon problème d’affichage.

  1. J’ouvre le navigateur de fichiers Thunar.
  2. Je télécharge une archive compressée vers le répertoire courant.
  3. Le fichier s’affiche en temps réel.
  4. J’extrais l’archive vers le répertoire courant.
  5. Le répertoire résultant s’affiche directement.
  6. Mon problème est résolu.

À partir de là, je peux rendre la modification persistante en créant un fichier /etc/sysctl.d/inotify.conf et en l’éditant comme ceci.

# Monitor directories for change
fs.inotify.max_user_watches = 524288

Un grand merci à Liam O’Toole sur la liste de diffusion de CentOS pour son aide précieuse.

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

Serveur de messagerie XMPP avec Prosody sous CentOS 7

ProsodyXMPP est un protocole de communication utilisé notamment pour la messagerie instantanée. Outre le fait d’être libre, il repose sur une architecture décentralisée. Le réseau Jabber utilise ce protocole, et on peut s’inscrire sur un des nombreux serveurs publics pour pouvoir communiquer sur ce service. La meilleure solution consiste évidemment à monter nous-mêmes notre propre serveur XMPP. De cette manière, nous sommes sûrs que nos données nous appartiennent.

Dans cet article, je décris en détail l’installation et la configuration d’un serveur de messagerie XMPP avec Prosody sur un serveur dédié tournant sous CentOS 7. L’accent est mis sur la sécurité, avec des communications chiffrées entre les clients et le serveur.

Prérequis

Il nous faut tout d’abord un domaine valide, comme par exemple xmpp.microlinux.fr, ainsi qu’un certificat SSL/TLS pour ce domaine.

Prosody utilise le port 5222 en TCP dans la configuration par défaut. Il faut donc songer à ouvrir ce port dans le pare-feu.

En ce qui concerne SELinux, il n’y a rien de particulier à signaler, et nous pouvons allègrement rester en mode renforcé sans avoir à redouter des blocages mystérieux.

Installation de Prosody

Prosody ne fait pas partie des paquets officiels des distributions Red Hat Enterprise Linux et CentOS. En revanche, il est fourni par le dépôt EPEL.

# yum install prosody

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

# grep prosody /etc/passwd
prosody:x:995:992:Prosody XMPP Server:/var/lib/prosody:/sbin/nologin
# grep prosody /etc/group
prosody:x:992:

Configuration de Prosody

Les certificats installés sur la machine appartiennent à l’utilisateur root et au groupe certs. Pour plus de détails sur les certificats et les permissions, on pourra lire cet article.

# ls -l /etc/letsencrypt/live/
total 4
drwxr-xr-x. 2 root certs 4096 Jul 12 13:16 microlinux.fr

Nous allons permettre à l’utilisateur système prosody d’accéder aux certificats en l’ajoutant au groupe certs.

# usermod -a -G certs prosody

Prosody se configure par le biais du fichier de configuration /etc/prosody/prosody.cfg.lua et des fichiers *.cfg.lua rangés dans /etc/prosody/conf.d. Avant toute chose, on va effectuer une copie de sauvegarde de prosody.cfg.lua.

# cd /etc/prosody
# cp prosody.cfg.lua prosody.cfg.lua.orig

Le fichier fourni par défaut est quasiment prêt à l’emploi. Dans les directives globales, je vais spécifier l’utilisation de l’IPv4 tout en désactivant l’IPv6 grâce à la directive interfaces.

-- This is a (by default, empty) list of accounts that are admins
-- for the server.
admins = { }

-- Activer l'IPv4 et désactiver l'IPv6
interfaces = { "*" }

Les hôtes virtuels de Prosody fonctionnent en principe comme ceux du serveur Web Apache. Théoriquement, rien ne nous empêcherait de les définir dans le fichier de configuration principal. Pour plus de clarté, il vaut mieux les ranger individuellement dans le répertoire /etc/prosody/conf.d. Dans la configuration par défaut, deux hôtes virtuels sont configurés pour l’exemple, et nous allons les supprimer.

# cd /etc/prosody/conf.d/
# ls
example.com.cfg.lua localhost.cfg.lua
# rm example.com.cfg.lua localhost.cfg.lua

Ensuite, je crée un fichier /etc/prosody/conf.d/xmpp.microlinux.fr.cfg.lua que j’édite comme ceci.

-- /etc/prosody/conf.d/xmpp.microlinux.fr.cfg.lua

VirtualHost "xmpp.microlinux.fr"
enabled = true
ssl = {
  key = "/etc/letsencrypt/live/microlinux.fr/privkey.pem";
  certificate = "/etc/letsencrypt/live/microlinux.fr/fullchain.pem";
}

Mise en service de Prosody

Maintenant que Prosody est configuré, je peux démarrer le service correspondant.

# systemctl enable prosody
# systemctl start prosody

Apparemment, tout semble bien se passer.

# cat /var/log/prosody/prosody.log 
... Hello and welcome to Prosody version 0.10.2
... Prosody is using the select backend for connection handling
... Activated service 'c2s' on [*]:5222
... Activated service 'legacy_ssl' on no ports
... Activated service 's2s' on [*]:5269
... Prosody is about to detach from the console, disabling 
    further console output
... Successfully daemonized to PID 23024

Gérer les utilisateurs

La commande prosodyctl gère la création et la suppression des utilisateurs.

L’option adduser permet d’ajouter un utilisateur.

# prosodyctl adduser kikinovak@xmpp.microlinux.fr
Enter new password: **********
Retype new password: **********

La suppression d’un utilisateur s’effectue avec l’option deluser.

# prosodyctl deluser troll@xmpp.microlinux.fr

Les utilisateurs sont stockés dans l’arborescence /var/lib/prosody, dans un répertoire correspondant au domaine.

# ls -1 /var/lib/prosody/xmpp%2emicrolinux%2efr/accounts/
adebuf.dat
fbanester.dat
fteyssier.dat
jmortreux.dat
kikinovak.dat

Enfin, l’option passwd permet de modifier le mot de passe d’un utilisateur.

# prosodyctl passwd jmortreux@xmpp.slackbox.fr

Configurer le client de messagerie Pidgin

Il existe une quantité impressionnante de clients de messagerie instantanée capables de gérer le protocole XMPP. Pour ma part, j’utilise Pidgin depuis sa sortie en 2007. Voici ce qu’il faut faire pour configurer un compte sur ce client.

Une fois qu’on a lancé l’assistant de création de compte, on commence par l’onglet Essentiel.

  • Choisir le protocole XMPP dans le menu déroulant Protocole.
  • Renseigner l’utilisateur (par exemple kikinovak ou jmortreux).
  • Renseigner le domaine (par exemple xmpp.microlinux.fr).
  • Laisser vide le champ Ressource.
  • Fournir le mot de passe et cocher la case Mémoriser le mot de passe.
  • Définir un Alias local (facultatif).
  • Ajouter une icône pour le compte (facultatif).

Configuration Pidgin

Ensuite, on passe à l’onglet Avancé.

  • Vérifier si la Sécurité de la connexion nécessite le chiffrement.
  • Vérifier le Port de connexion 5222.
  • Définir le Serveur de connexion, par exemple xmpp.microlinux.fr.
  • Garder le Proxy de transfert de fichiers proxy.eu.jabber.org.
  • Laisser vide le champ URL BOSH.
  • Laisser cochée la case Afficher les frimousses personnalisées.

Configuration Pidgin

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

Migrer vers MATE sous CentOS 7 (1)

MATE logoIl y a quelque temps, j’ai découvert l’environnement de bureau MATE, et j’en suis assez ravi. C’est un bureau Linux léger et sans histoires, qui a repris le concept de GNOME 2.32 comme point de départ pour apporter des améliorations par petites touches incrémentales et sans grands bouleversements. En un mot, c’est la solution idéale pour tous ceux qui ont une préférence marquée pour les paradigmes de bureau classiques et non disruptifs.

Dans un précédent article, j’ai décrit l’élagage d’un système CentOS existant en vue d’une migration vers un autre environnement de bureau, par exemple. Il s’avère que dans certains cas, cette approche n’est pas très pratique. À titre d’exemple, ma machine principale est une station de travail tournant sous CentOS 7 avec le bureau KDE, et qui fait tourner un serveur web pour héberger en local une poignée de sites que je développe. Une opération d’élagage sur ce système me supprimerait mon serveur web, mes paquets PHP et mon serveur de bases de données, ce qui nécessiterait que je repêche mes configurations dans une forêt de fichiers .rpmsave. J’ai donc décidé de m’y prendre autrement pour passer cette machine de KDE à MATE.

En termes de matériel, il s’agit d’une station de travail HP Elite équipée d’une vieille carte graphique NVidia GT 210 et d’un double moniteur. La particularité à retenir pour cette machine, c’est que les pilotes NVidia fournis par le dépôt ELRepo ne fonctionnent pas, et j’ai donc dû mettre à jour le noyau et installer le pilote fourni par le constructeur, comme c’est décrit dans cet article. Avant toute chose, je récupère la dernière version en date du pilote pour ma carte, étant donné que la suite des opérations se déroulera en mode console.

# lspci | grep -i vga
01:00.0 VGA compatible controller: NVIDIA Corporation GT218 
[GeForce 210] (rev a2)
# ls /root/nvidia/
NVIDIA-Linux-x86_64-340.106.run NVIDIA-Linux-x86_64-340.107.run

Étant donné que je m’apprête à supprimer l’environnement de bureau dans lequel je travaille, je prends soin de travailler en mode console.

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

La machine a été installée depuis un DVD de CentOS, en sélectionnant le groupe de paquets KDE Plasma Workspaces. Curieusement, l’info ne se reflète pas dans les groupes de paquets.

# yum group list
Modules complémentaires chargés : fastestmirror, langpacks, ...
Aucun fichier de groupe n'est installé.

Qu’à cela ne tienne, je vais donc attaquer le remplacement de mon bureau de manière empirique, en supprimant d’abord une série de dépendances vitales de l’environnement graphique.

Je pars d’une installation qui compte près de deux mille paquets.

# rpm -qa | wc -l
1998

Je commence par supprimer “à la louche” mon bureau KDE. Notez que j’utilise l’option autoremove au lieu d’un simple remove. Cette option se charge de supprimer  les dépendances orphelines des paquets supprimés.

# yum autoremove kdelibs-common

Notez que je n’utilise pas l’option de confirmation automatique -y. Je prends soin de vérifier soigneusement les paquets supprimés avant de confirmer manuellement.

Au bout de l’opération, il ne reste plus grand-chose de mon environnement de bureau.

# rpm -qa | grep ^kde
kde-settings-pulseaudio-19-23.7.el7.centos.noarch
kde-wallpapers-4.10.5-2.el7.noarch
kde-filesystem-4-47.el7.x86_64
kdegraphics-strigi-analyzer-4.10.5-3.el7.x86_64
kdeartwork-wallpapers-4.10.5-4.el7.noarch
kde-l10n-4.10.5-2.el7.noarch
kde-settings-19-23.7.el7.centos.noarch
# yum autoremove kde*

Je supprime la bibliothèque graphique Qt ainsi que tout ce qui en dépend. Notez au passage que certaines applications ainsi que leurs dépendances devront être réinstallées par la suite. Notre souci actuel consiste à faire le ménage pour partir sur des bases saines, sans pour autant supprimer une série de paquets vitaux sur la machine.

# yum autoremove qt

Le gestionnaire de connexion GDM – utilisé à la place de KDM ou SDDM si l’on opte pour KDE – est un autre poids lourd des systèmes RHEL/CentOS. Nous lui préférons LightDM, et nous allons donc le supprimer ainsi que tout le fatras dont il dépend.

# yum autoremove gdm

Enfin, la suppression de la bibliothèque graphique libX11-common nous permet de jeter par-dessus bord tout ce qui ressemble à une application graphique sur la machine, pour ne garder que ce qui tourne en mode console.

# yum autoremove libX11-common

Le moment est venu de mettre à jour notre système réduit, si ce n’est déjà fait.

# yum update
# yum --enablerepo=elrepo-kernel update

Avant de redémarrer, on va s’assurer de disposer de tous les paquets nécessaires pour un système fonctionnel.

# yum group install "Core"

On croise les doigts et on redémarre.

# reboot

Éventuellement, on peut effectuer un petit état des lieux.

# rpm -qa | sort | less

Les profils KDE ne sont plus nécessaires.

# rm -rf /usr/share/kde4
# cd /etc/skel
# rm -rf .kde/ .local/ .winff/ .gtkcdlabelrc

On peut également faire le ménage dans les configurations.

# su - kikinovak
$ rm -rf .cache .config .kde .local .winff \
  .gtkcdlabelrc .gtkrc-2.0-kde4
$ exit

Je désactive les dépôts de paquets tiers pour les reconfigurer proprement un peu plus loin. Notez que la suppression du paquet epel-release entraîne automatiquement la suppression de nux-dextop-release.

# yum remove epel-release elrepo-release adobe-release
# rm -f /etc/yum.repos.d/*.rpmsave

À présent, je remplace mon script d’installation KDE par celui de MATE, et je le lance.

# cd
# rm -rf centos-7-desktop-kde
# git clone https://github.com/kikinovak/centos-7-desktop-mate
# cd centos-7-desktop-mate
# ./postinstall.sh

Une fois que MATE est installé, je récupère manuellement le profil pour mon utilisateur existant.

# cd /etc/skel
# cp -Rv .config/ .gtkcdlabelrc /home/kikinovak
# cd /home/kikinovak
# chown -R kikinovak:kikinovak .config/ .gtkcdlabelrc

Il ne me reste plus qu’à réinstaller proprement mon pilote NVidia. Avant d’attaquer ça, je fais un peu de ménage dans mes kernels.

# package-cleanup --oldkernels --count=1
# rm -rf /lib/modules/4.4.138-1.el7.elrepo.x86_64/

J’installe le pilote NVidia manuellement, je redémarre en mode console et je lance un premier test.

# systemctl isolate graphical.target

Une fois que je suis satisfait du résultat, je définis le démarrage en mode graphique.

# systemctl set-default graphical.target

L’état actuel du bureau est assez propre, et l’opération a réussi. Je vais passer les jours à venir à arrondir les angles et peaufiner plein de petits détails.

Migration MATE

 

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

Élaguer une installation de CentOS 7

Élaguer CentOS 7Lorsqu’on installe CentOS à partir du DVD minimal – ou lorsqu’on sélectionne un profil minimal avec le DVD d’installation classique – on obtient un système réduit au minimum syndical. Évidemment, on est loin du minimalisme que l’on trouve dans des distributions comme Alpine Linux, mais le principe est le même. Le système de base peut être vu comme une pâte à crêpes, et ensuite, on installe les ingrédients dont on a besoin. Dans la configuration par défaut, un système CentOS 7 est constitué de quelque 300 paquets et occupe un peu plus d’un gigaoctet d’espace disque.

Dans certains cas de figure, il peut être souhaitable de revenir à cette configuration de départ sans pour autant passer par une réinstallation complète du système. Voici deux exemples pratiques de la vie quotidienne.

  • Lorsque j’installe un serveur dédié de la gamme Dedibox de chez Online et que j’opte pour un système CentOS, je ne pars pas d’une installation minimale. Les administrateurs de chez Online ont décidé d’installer une panoplie complète d’outils en ligne de commande, et ce souci de cohérence est parfaitement compréhensible. Mais un grand nombre de ces outils ne me sert à rien, et je préfère installer ma propre sélection en partant du minimum syndical.
  • Sur les postes de travail, je me base sur l’environnement de bureau MATE, installé à partir d’un système minimal et du serveur graphique X Window. Or, j’ai encore tout un parc de machines que j’ai dotées d’un bureau basé sur KDE ou sur Xfce. La désinstallation manuelle de ces bureaux est une tâche extrêmement fastidieuse, et un simple yum group remove laisse pas mal de résidus sur le disque. Là encore, il est donc préférable de repasser par la case départ sans pour autant réinstaller l’intégralité du système.

J’ai donc rédigé un script shell elaguer.sh qui se charge de supprimer tous les paquets qui ne font pas partie du système de base à proprement parler.

#!/bin/bash
#
# elaguer.sh
#
# Ce script désinstalle tous les paquets présents sur un système 
# CentOS 7 qui ne font pas partie du système minimal. 
# À manier avec précaution, donc.
# 
# (c) Niki Kovacs, 2018

CWD=$(pwd)
TMP=/tmp

PKGLIST=$TMP/pkglist
PKGINFO=$TMP/pkg_base

# Créer la liste des paquets installés sur le système
rpm -qa --queryformat '%{NAME}\n' | sort > $PKGLIST 

# Créer une variable correspondant à cette liste
PAQUETS=$(egrep -v '(^\#)|(^\s+$)' $PKGLIST)

# Faire le ménage
rm -rf $PKGLIST $PKGINFO
mkdir $PKGINFO
unset SUPPRIMER

# Créer une base de données rudimentaire 
echo
echo ":: Création de la base de données..."
echo
sleep 3
MINIMAL=$(egrep -v '(^\#)|(^\s+$)' $CWD/minimal.txt)
for PAQUET in $MINIMAL; do
  printf "."
  touch $PKGINFO/$PAQUET
done

echo

# Vérifier pour chaque paquet s'il fait partie du système minimal
echo
echo ":: Création de la liste des paquets à supprimer..."
echo
sleep 3
for PAQUET in $PAQUETS; do
  if [ -r $PKGINFO/$PAQUET ]; then
    continue
  else
    printf "."
    SUPPRIMER="$SUPPRIMER $PAQUET"
  fi
done

echo
echo

# Supprimer tous les paquets qui ne font pas partie du système 
# de base
if [[ ! -z $SUPPRIMER ]]; then
  yum -y remove $SUPPRIMER
fi

# Réinstaller les paquets de base
yum -y install $MINIMAL

# Encore un peu de ménage
rm -rf $PKGLIST $PKGINFO

exit 0

Le script se sert de la liste de paquets minimal.txt qui a été établie auparavant sur une installation minimale fraîche, moyennant la commande suivante.

# rpm -qa --queryformat '%{NAME}\n' | sort > minimal.txt

Le script elaguer.sh est disponible dans mon dépôt Github, que l’on peut récupérer dans un endroit approprié du système, par exemple /root.

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

Avant de faire quoi que ce soit, on va s’assurer de ne pas tourner en mode graphique.

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

Ensuite, on va exécuter le script.

# cd centos-7-strip
# ./elaguer.sh

Le gestionnaire de paquets Yum présente une petite incohérence au niveau de la gestion des groupes de paquets. En effet, si l’on a installé un groupe de paquets avec la commande yum group install, la commande yum group list affichera toujours le groupe comme installé, même si les paquets qui le constituent ne sont plus présents sur le système. Ajoutons à cela le fait que – pour des raisons mystérieuses – certains groupes sont cachés (hidden) depuis CentOS 7, et la confusion est totale. Il faut donc rectifier le tir à la main. Voici un exemple pratique qui permettra de mieux comprendre la gestion des groupes de paquets.

Prenons une machine sur laquelle je viens d’exécuter le script elaguer.sh, et qui se retrouve donc réduite au minimum syndical.

# rpm -qa | wc -l
307

J’affiche la liste des groupes de paquets.

# yum group list | less
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
Available Environment Groups:
   Minimal Install
   Compute Node
   Infrastructure Server
   File and Print Server
   Basic Web Server
   Virtualization Host
   Server with GUI
   GNOME Desktop
   KDE Plasma Workspaces
   Development and Creative Workstation
Available Groups:
   Compatibility Libraries
   Console Internet Tools
   Development Tools
   Graphical Administration Tools
   Legacy UNIX Compatibility
   Scientific Support
   Security Tools
   Smart Card Support
   System Administration Tools
   System Management
Done

À première vue, aucun groupe de paquets n’est installé. J’essaie encore, en ajoutant l’option hidden.

# yum group list hidden | less
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
Available Environment Groups:
   Minimal Install
   Compute Node
   Infrastructure Server
   File and Print Server
   Basic Web Server
   Virtualization Host
   Server with GUI
   GNOME Desktop
   KDE Plasma Workspaces
   Development and Creative Workstation
Installed Groups:
   Base
   Fonts
   Web Server
   X Window System
Available Groups:
   Additional Development
   Anaconda Tools
   Backup Client
   Backup Server
   ...

Je note les groupes marqués comme installés, et je corrige leur statut manuellement.

# yum group mark remove "Base" "Fonts" "Web Server" \
  "X Window System"
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
Marked remove: Base,Fonts,Web Server,X Window System

Il ne me reste plus qu’à faire une dernière vérification.

# yum group list hidden | less

Indépendamment de la configuration initiale, je me retrouve à présent avec une installation minimale de CentOS, que je peux reconfigurer à ma guise.

Publié dans CentOS, Documentation Microlinux | Laisser un commentaire

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

Logo CentOSCet article décrit pas à pas et de manière détaillée l’installation d’un poste de travail léger de qualité entreprise basé sur CentOS 7 et l’environnement de bureau MATE. 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 MATE, on pourra lire cet article.

Bureau MATE

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 MATE est améliorée de manière significative.
  • Le lanceur d’applications Plank rend le bureau plus fonctionnel.
  • 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 DVD minimal, mais rien n’empêche d’utiliser le DVD standard.

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

Graver 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 câblé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 la version 7 de CentOS. 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 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 EFI

Sur les systèmes UEFI, il faut d’abord 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 /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 ou plus.
  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 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.

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-mate

Lancer le script de post-installation

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

# cd centos-7-desktop-mate
# ./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.
  • 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 du système.
  • 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 MATE.
  • Supprimer les paquets inutiles.
  • Supprimer les polices TrueType exotiques qui encombrent les menus.
  • Installer une panoplie cohérente d’applications supplémentaires.
  • Personnaliser les entrées du menu MATE.
  • 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.

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 ADSL à 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.

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

Basculer en mode graphique

Le script de post-installation ne se charge pas de basculer automatiquement en mode graphique. L’administrateur pourra donc gérer sereinement la configuration de la carte graphique.

La configuration de l’affichage dépasse l’objet de cet article, mais si vous avez une carte NVidia, jetez un oeil sur cet article.

# systemctl set-default graphical.target

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.

# systemctl stop NetworkManager
# yum remove NetworkManager

Voici un exemple de configuration simple.

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

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

Remarque : Nous pouvons nous permettre de supprimer NetworkManager puisque nous utilisons le gestionnaire de connexion LightDM. Depuis RHEL/CentOS 7.5, NetworkManager est une dépendance du gestionnaire de connexion GDM. Si vous utilisez GDM et que vous tentez de vous débarrasser de NetworkManager, vous risquez de vider l’eau du bain avec l’enfant. On y verra éventuellement un argument de plus pour préférer une configuration plus légère et plus saine.

Configurer le réseau sur un portable

Sur un ordinateur portable, on gardera le NetworkManager et l’applet correspondant 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

 

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