Substitution de noms de fichiers

TerminalVoici le cinquième volet de mon cours d’introduction au shell Bash. La dernière fois, nous avons vu en détail la navigation dans les répertoires. Aujourd’hui, nous abordons la substitution de noms de fichiers.

De nombreuses commandes prennent des noms de fichiers en argument. Ces derniers peuvent être cités littéralement ou être spécifiés de manière plus générique. Le shell propose un certain nombre de caractères spéciaux qui permettent de fabriquer des expressions utilisées comme modèles de noms de fichiers.

Le caractère *

Le caractère * représente une suite de caractères quelconques. Pour commencer, créer une série de fichiers.

$ touch f12 f1.i FICa fic.c fic.s monscript.pl MONSCRIPT.pl ours.c

Afficher tous les noms de fichier se terminant par .c.

$ ls *.c
fic.c ours.c

Afficher tous les noms de fichier commençant par la lettre f.

$ ls f*
f12 f1.i fic.c fic.s

Le caractère ?

Le caractère ? représente un caractère quelconque. Là encore, on essaiera d’illustrer par l’exemple.

Afficher tous les noms de fichier ayant une extension composée d’un seul caractère.

$ ls *.?
f1.i fic.c fic.s ours.c

Afficher tous les noms de fichier composés de quatre caractères.

$ ls ????
f1.i FICa

Les crochets [ ]

Les crochets [ ] permettent de spécifier la liste des caractères que l’on attend à une position bien précise dans le nom du fichier. Il est également possible d’utiliser les notions d’intervalle et de négation.

Les exemples cités ci-dessous peuvent produire des résultats surprenants en fonction des variables d’environnement. Le cas échéant, on devra modifier une paire de ces variables.

$ LANG=C
$ LC_COLLATE=C

Pour chacun des exemples, une alternative est donnée qui fonctionne parfaitement pour des variables d’environnement LANG et LC_COLLATE différentes, par exemple fr_FR.utf8.

Fichiers dont le nom commence par f ou o et se termine par le caractère . suivi d’une minuscule.

$ ls [fo]*.[a-z]
f1.i fic.c fic.s ours.c

Alternativement…

$ ls [fo]*.[[:lower:]]
f1.i fic.c fic.s ours.c

Fichiers dont le nom comporte en deuxième caractère une majuscule ou un chiffre ou la lettre i. Les deux premiers caractères seront suivis d’une chaîne quelconque.

$ ls ?[A-Z0-9i]*
FICa MONSCRIPT.pl f1.i f12 fic.c fic.s

Alternativement…

$ ls ?[[:upper:]0-9i]*
f12 f1.i FICa fic.c fic.s MONSCRIPT.pl

Il est également possible d’exprimer la négation de tous les caractères spécifiés à l’intérieur d’une paire de crochets. Ceci se fait en plaçant un ! en première position à l’intérieur de celle-ci.

Noms de fichier ne commençant pas par une minuscule.

$ ls [!a-z]*
FICa MONSCRIPT.pl

Alternativement…

$ ls [![:lower:]]*
FICa MONSCRIPT.pl

Noms de fichier ne commençant pas par une majuscule.

$ ls [!A-Z]*
f1.i f12 fic.c fic.s monscript.pl ours.c

Alternativement…

$ ls [![:upper:]]*
f12 f1.i fic.c fic.s monscript.pl ours.c

Supprimer tous les fichiers dont le nom se termine par .c ou par .s.

$ rm -i *.c *.s
rm : supprimer fichier « fic.c » ? o
rm : supprimer fichier « ours.c » ? o
rm : supprimer fichier « fic.s » ? o

Les fichiers cachés dans la pratique

Un cas spécial mérite d’être mentionné, celui des fichiers cachés. Si l’on applique la substitution des noms de fichiers à cette catégorie de fichiers, on risque d’obtenir des résultats surprenants. Là encore, on va préférer un cas pratique à la théorie.

Créez une série de six fichiers fic1, fic2, fic3, .fic1, .fic2 et .fic3 dans un répertoire vide. Voici la manière la plus rapide de faire ceci.

$ touch {,.}fic{1,2,3}
$ ls -a
.  ..  .fic1  .fic2  .fic3  fic1  fic2  fic3

Si l’on essaie d’afficher uniquement les fichiers cachés à l’aide d’un caractère de substitution, on risque d’être quelque peu surpris par le résultat. Essayez pour voir.

$ ls .*

Au vu de la manière dont le shell traite les caractères de substitution, la séquence .* englobe également le répertoire parent .. qui s’affiche donc de manière apparemment intempestive.

La solution consiste ici à utiliser l’option -d conjointement avec les autres critères.

$ ls -d .*
.  ..  .fic1  .fic2  .fic3
$ ls -d .f*
.fic1  .fic2  .fic3

Une solution alternative consiste à exclure le répertoire parent comme ceci.

$ ls .[!.]*
.fic1  .fic2  .fic3

Documentation

  • Christine Deffaix-Rémy – Programmation shell sous Unix/Linux, pp. 32 – 34
  • Carl Albing – Bash Cookbook, pp. 10 – 12

Lire la suite : Expressions complexes

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

Naviguer dans les répertoires

TerminalVoici le quatrième volet de mon cours d’introduction au shell Bash. La dernière fois, nous avons vu l’affichage à l’écran. Aujourd’hui, nous abordons certains aspects de la navigation dans l’arborescence des répertoires.

Le caractère ~

Le caractère ~ (tilde) représente le répertoire d’accueil de l’utilisateur courant.

$ whoami
kikinovak
$ cd ~
$ pwd
/home/kikinovak
$ ls ~/ISO
CentOS  Debian  Mageia  Neon  PopOS  Slax  SolydK  Ubuntu

Si le caractère ~ est immédiatement suivi d’un mot, ce dernier est considéré comme un nom d’utilisateur.

# pwd
/root
# cd ~microlinux
# pwd
/home/microlinux

La commande interne cd

La commande cd sans argument permet à l’utilisateur de revenir dans son répertoire d’accueil.

$ cd
$ pwd
/home/kikinovak

Comme nous venons de le voir, on peut effectuer la même opération en utilisant le caractère ~, qui représente le répertoire d’accueil de l’utilisateur courant.

$ cd ~
$ pwd
/home/kikinovak

L’option - permet de revenir dans le répertoire précédent.

$ pwd
/home/kikinovak
$ cd /tmp/
$ pwd
/tmp
$ cd -
/home/kikinovak
$ pwd
/home/kikinovak

Gérer une pile de répertoires avec pushd et popd

La commande cd avec l’option - est très pratique pour revenir dans le répertoire précédent. Or, il peut s’avérer pratique d’empiler les chemins pour les réutiliser par la suite. Dans ce cas, on utilisera les commandes pushd, popd et dirs pour gérer les piles de répertoire, comme le montre l’exemple suivant.

$ pwd
/home/kikinovak
$ pushd /tmp/
/tmp ~
$ pushd /var/log/
/var/log /tmp ~
$ pushd /usr/bin/
/usr/bin /var/log /tmp ~
$ dirs
/usr/bin /var/log /tmp ~
$ popd
/var/log /tmp ~
$ popd
/tmp ~
$ popd
~
$ pwd
/home/kikinovak

Chaque invocation de pushd ajoute un chemin à la pile de répertoires. En contrepartie, popd enlève un chemin à cette pile et revient dans le répertoire précédent sur la pile. Quant à la commande dirs, elle sert tout simplement à afficher la pile.

Documentation

  • Christine Deffaix-Rémy – Programmation shell sous Unix/Linux, pp. 30 – 31
  • Cameron Newham – Learning the Bash shell, pp. 7 – 10
  • Carl Albing – Bash Cookbook, pp. 453 – 455

Lire la suite : Substitution de noms de fichiers

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

L’affichage à l’écran

TerminalVoici le troisième volet de mon cours d’introduction au shell Bash. La dernière fois, nous avons vu les commandes internes et externes. Aujourd’hui, nous abordons les différentes manières d’afficher des informations à l’écran.

La commande echo

La commande interne echo permet de réaliser des affichages à l’écran.

$ echo Yatahongaga !
Yatahongaga !

Ce qui suit la commande echo est considéré comme un argument ou une série d’arguments. L’affichage sera donc traité en conséquence.

$ echo Du   texte   avec   des   espaces
Du texte avec des espaces

Pour préserver l’espacement, il faudra utiliser des guillemets ou des apostrophes.

$ echo "Du   texte   avec   des   espaces"
Du   texte   avec   des   espaces
$ echo 'Du   texte   avec   des   espaces'
Du   texte   avec   des   espaces

La commande echo du shell Bash doit être utilisée avec l’option -e pour que l’interprétation des caractères d’échappement ait lieu. Pour plus de détails, voir man echo.

Le caractère \n

Le caractère \n sert à provoquer un saut de ligne.

$ echo -e "Première ligne\nDeuxième ligne\nTroisième ligne"
Première ligne
Deuxième ligne
Troisième ligne

On peut également utiliser des apostrophes au lieu des guillemets.

$ echo -e 'Première ligne\nDeuxième ligne\nTroisième ligne'
Première ligne
Deuxième ligne
Troisième ligne

Le caractère \c

Le caractère \c sert à éliminer le saut de ligne naturel de la commande echo. Il doit se situer impérativement en dernière position de l’argument de echo, juste avant le guillemet fermant. L’option -e est indispensable pour l’interprétation du caractère d’échappement \c.

$ echo "Première ligne" ; echo "Deuxième ligne"
Première ligne
Deuxième ligne
$ echo -e "Première ligne\c" ; echo -e "Deuxième ligne\c"
Première ligneDeuxième ligne $

Alternativement, l’option -n peut remplacer le caractère \c.

$ echo -n "Première ligne" ; echo -n "Deuxième ligne"
Première ligneDeuxième ligne $

Le caractère \t

Le caractère \t permet d’afficher une tabulation.

$ echo -e "|\tTab 1\tTab 2\tTab 3\tTab 4\t|"
|    Tab 1    Tab 2    Tab 3    Tab 4    |

Pour aller plus loin

À partir du moment où l’on souhaite contrôler davantage le formatage de l’affichage du shell, on utilisera la commande printf. Nous l’aborderons plus loin, étant donné qu’elle est un peu “pointue” à manipuler. Pour l’instant, nous allons faire avec les moyens de bord et utiliser echo avec la poignée d’options de mise en forme que nous venons de voir.

Documentation

  • Christine Deffaix-Rémy – Programmation shell sous Unix/Linux, pp. 27 – 30
  • Carl Albing – Bash Cookbook, pp. 28 – 33

Lire la suite : Naviguer dans les répertoires

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

Commandes internes et externes

TerminalVoici le deuxième volet de mon cours d’introduction au shell Bash. Après avoir vu l’historique du shell, nous abordons aujourd’hui la différence entre les commandes externes et les commandes internes.

Une commande Linux appartient à l’une des deux catégories suivantes.

  1. commandes externes
  2. commandes internes

Les commandes externes

Une commande externe est un fichier localisé dans l’arborescence. Par exemple, lorsqu’un utilisateur lance la commande ls, le shell demande au noyau Linux de charger en mémoire le fichier /bin/ls.

Sont considérées comme commandes externes les fichiers possédant l’un des formats suivants.

  • fichiers au format binaire exécutable
  • fichiers au format texte représentant un script de commandes

La commande file donne une indication sur le type de données contenues dans un fichier. L’argument de la commande file est un nom de fichier exprimé en relatif ou en absolu. Voici deux exemples.

La commande ls est un fichier au format binaire exécutable.

$ file /usr/bin/ls
/usr/bin/ls: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), 
dynamically linked (uses shared libs), for GNU/Linux 2.6.32, 
BuildID[sha1]=3d705971a4c4544545cb78fd890d27bf792af6d4, stripped

La commande gettext.sh est un script shell.

$ file /usr/bin/gettext.sh
/usr/bin/gettext.sh: POSIX shell script, ASCII text executable

Les commandes internes

Une commande interne est intégrée au processus shell. Elle ne correspond donc en aucun cas à un fichier sur le disque.

La commande type indique si une commande possède une implémentation interne. Elle prend en argument le nom d’une commande. Si cette dernière n’est pas interne, elle est recherchée dans les répertoires cités dans PATH. Voici deux exemples.

La commande cd est une commande interne.

$ type cd
cd est une primitive du shell

La commande ls est une commande externe.

$ type -a ls
ls est un alias vers « ls --color=auto »
ls est /usr/bin/ls
ls est /bin/ls

Ici on invoque l’option -a pour afficher les infos sur l’ensemble des exécutables nommés ls. Pour plus d’infos, voir man bash.

Implémentation interne et externe

Certaines commandes ont une implémentation interne et une implémentation externe. Dans ce cas, la commande interne est lancée en priorité. L’exécution d’une commande interne est plus rapide que l’exécution d’une commande externe.

La commande pwd est une commande interne au shell.

$ type pwd
pwd est une primitive du shell

Elle possède également une implémentation externe.

$ type -a pwd
pwd est une primitive du shell
pwd est /usr/bin/pwd
pwd est /bin/pwd

C’est la commande interne qui est exécutée en priorité.

$ pwd
/home/kikinovak

Pour forcer l’exécution de la commande externe, il faut indiquer explicitement l’emplacement de la commande, en absolu ou en relatif.

$ /usr/bin/pwd 
/home/kikinovak
$ cd /usr/bin/
$ ./pwd 
/usr/bin

Documentation

  • Christine Deffaix-Rémy – Programmation shell sous Unix/Linux, pp. 23 – 26
  • Carl Albing – Bash Cookbook, pp. 13 – 14

Lire la suite : L’affichage à l’écran

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

Abonnez-vous à la newsletter de Microlinux

La newsletter de Microlinux est une publication épisodique qui vous parle de l’actualité numérique en général et celle de Microlinux en particulier, dans un langage accessible à tous. Et oui, c’est gratuit. Abonnez-vous ici.

Newsletter

Publié dans Divers | Marqué avec | Laisser un commentaire

Qu’est-ce que le shell ?

TerminalComme la plupart des administrateurs Linux, j’ai appris à me servir du shell Bash “sur le tas”, en lisant de la documentation et des tutos, en recopiant des scripts shell et en les adaptant à ma sauce, avec une bonne dose de tentative et échec. Au fil des années, j’ai rédigé une floppée de scripts Bash, sans avoir jamais appris de manière formelle à le faire. Depuis quelque temps, je me suis dit que ça serait peut-être une bonne idée de mettre un peu d’ordre dans tout ça. On va donc tenter d’expliquer le shell Bash aux débutants, en commençant par le début, en mettant un pied devant l’autre et en terminant par la fin. Suivez le guide, et on verra ce que ça donne en cours de route.

Définition du shell

Le shell est un programme ayant pour fonction d’assurer l’interface entre l’utilisateur et le système Linux. C’est un interpréteur de commandes. Autrement dit, c’est quelque chose qui vous permet de communiquer avec l’ordinateur par le biais du clavier et de l’écran. Le shell est donc la partie du système qui vous permet de saisir des commandes.

Si vous savez invoquer des commandes dans un shell, vous êtes capable d’écrire un script shell (ou script Bash, puisque nous parlons ici du shell Bash). Un script shell, c’est tout simplement une série de commandes écrites dans un fichier. Le shell lit les commandes depuis le fichier comme si vous les invoquiez directement dans un terminal.

Il y donc deux manières d’utiliser Bash :

  • comme interface utilisateur ;
  • comme environnement de programmation.

Plusieurs shells sont disponibles sur les plates-formes Linux.

Caractéristiques du shell

Les interpréteurs de commandes disponibles en environnement Unix et Linux ont en commun les fonctionnalités suivantes.

  • Ils proposent un jeu de caractères spéciaux permettant de déclencher des actions particulières.
  • Ils possèdent des commandes internes et des mots clés parmi lesquels certains sont utilisés pour faire de la programmation.
  • Ils utilisent des fichiers d’initialisation permettant à un utilisateur de paramétrer son environnement de travail.

Chaque shell propose ses propres caractères spéciaux, commandes internes, mots clés et fichiers de paramétrage. Heureusement, les interpréteurs les plus utilisés actuellement dérivent tous du shell Bourne et ont, par conséquent, un certain nombre de fonctionnalités en commun.

Historique du shell

Le shell qui est considéré comme le plus ancien est le Bourne Shell (sh). Il a été écrit dans les années 1970 par Steve Bourne aux laboratoires AT&T. Outre sa capacité à lancer des commandes, il offre des fonctionnalités de programmation. Le Bourne Shell est un shell ancien qui est de moins en moins utilisé sur les plates-formes Unix.

Durant la même période, Bill Joy invente le C-Shell (csh), incompatible avec le Bourne Shell, mais qui offre des fonctionnalités supplémentaires telles que l’historique des commandes, le contrôle des tâches ou la possibilité de créer des alias de commandes. Ces trois aspects seront repris plus tard dans le Korn Shell. Le C-Shell est peu utilisé dans le monde Unix.

En 1983, David Korn reprend le Bourne Shell et l’enrichit. Ce nouvel interpréteur prendra le nom de Korn Shell (ksh). Il sera de plus en plus employé et deviendra un standard de fait. Le ksh88 (version datant de 1988) est, avec le Bourne Again Shell, le shell le plus utilisé actuellement. Il a servi de base à la normalisation POSIX du shell.

En 1993, une nouvelle version du Korn Shell voit le jour (ksh93). Celle-ci présente une compatibilité arrière avec le ksh88, à quelques exceptions près. Le ksh93 est disponible sur certaines versions Unix récentes comme Solaris et AIX.

La Free Software Foundation propose le Bourne Again Shell (bash). Bash est censé être le shell standard des systèmes GNU. Le jeu de mots qui constitue son nom est un hommage à Steven Bourne. Bash est conforme à la norme POSIX à laquelle il a ajouté quelques extensions. Ce shell est l’interpréteur fourni en standard sur les systèmes Linux. Il est également disponible en standard ou en téléchargement sur les systèmes Unix.

Scripts de démarrage

Sur certaines plates-formes, les scripts de démarrage sont interprétés par un Bourne Shell. Si l’on souhaite modifier ces scripts ou créer de nouveaux scripts de démarrage, il faut dans ce cas se restreindre à la syntaxe Bourne Shell. De manière plus générale, il faut utiliser la syntaxe qui correspond au shell qui interprète les scripts de démarrage.

Autres scripts

Dans les cas les plus fréquents – scripts de traitement exécutés en mode de fonctionnement Unix normal – le développeur choisira soit le shell Bash, soit le Korn Shell 88 ou 93, selon le shell disponible sur sa plate-forme. En ce qui nous concerne, nous nous concentrerons sur le shell Bash.

Documentation

  • Christine Deffaix-Rémy – Programmation shell sous Unix/Linux, pp. 19 – 22
  • Brian Ward – How Linux Works, p. 249
  • Cameron Newham – Learning the Bash shell, pp. 1 – 5
  • Carl Albing – Bash Cookbook, pp. 1 – 4

Lire la suite : Commandes internes et externes

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

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

centos-logo

Cet 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 KDE. 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.

Note importante : l’article initialement publié en été 2017 a été entièrement revu et corrigé. La procédure de post-installation est maintenant bien plus simple, étant donné qu’elle est à peu près entièrement scriptée.

CentOS 7 KDE

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

  • L’environnement de bureau KDE est préconfiguré de manière intuitive.
  • Une panoplie d’applications populaires est installée pour toutes les tâches courantes.
  • Certaines applications “usines à gaz” sont remplacées par des équivalents légers.
  • 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

Pour l’installation d’un poste de travail, on choisira le DVD. CentOS 7-1708 correspond à Red Hat Enterprise Linux 7.4.

  • CentOS-7-x86_64-DVD-1708.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é.

# dd if=CentOS-7-x86_64-DVD-1708.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 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 KDE Plasma Workspaces, mais sans cocher les options supplémentaires comme Applications KDE, Applications Internet, etc.

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.

Accord de licence

CentOS affiche un dialogue d’acceptation de licence au démarrage initial du système depuis la version 7. Dans les versions antérieures à CentOS 7-1611 (RHEL 7.3), la logique de ce dialogue était quelque peu déroutante. Voici ce qu’il faut faire, dans l’ordre.

  1. Appuyer sur [1] pour afficher la licence.
  2. Appuyer sur [2] pour accepter la licence.
  3. Appuyer sur [C] pour continuer le démarrage initial.
  4. Appuyer sur [C] une deuxième fois pour confirmer le tout.

CentOS 7-1611 a corrigé ce problème et affiche désormais un dialogue en mode graphique où il suffit de cocher J’accepte le contrat de licence.

Synchronisation de la grappe RAID

Sur une station de travail installée en RAID 1, la synchronisation initiale d’une grappe RAID peut être assez longue. L’astuce suivante permet d’accélérer le processus de façon significative.

# echo 50000 > /proc/sys/dev/raid/speed_limit_min

Chargeur de démarrage

Sur une station de travail munie de deux disques durs configurés en RAID 1, il faudra installer le chargeur de démarrage manuellement sur le MBR de chaque disque. En cas de défaillance d’un disque, on pourra toujours démarrer sur l’autre disque.

# grub2-install /dev/sda
# grub2-install /dev/sdb

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

Lancer le script de post-installation

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

# cd centos-7-desktop-kde
# ./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.

  • Effectuer la mise à jour initiale du système.
  • 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.
  • Configurer les dépôts de paquets tiers : EPEL, Nux, Adobe, etc.
  • Installer une panoplie d’outils en ligne de commande.
  • Supprimer les applications 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 KDE
  • 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 ADLS à 20 Mbit/s, et ça a mouliné près d’une demi-heure. 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

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.

# 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

Configurer le réseau sur un portable

Sur un ordinateur portable, on utilisera le NetworkManager et l’applet correspondant kde-plasma-networkmanagement. 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

Désactiver le pare-feu

Sur un poste de travail, un pare-feu n’a pas beaucoup de sens à partir du moment où l’on pense à désactiver les services inutiles.

Arrêter le pare-feu.

# systemctl stop firewalld

Supprimer le démon correspondant.

# yum remove firewalld

Régler les problèmes relatifs à SELinux

Au bout d’un certain temps d’utilisation, une série d’alertes SELinux s’accumulent.

# sealert -a /var/log/audit/audit.log

La première alerte concerne /usr/libexec/colord.

SElinux is preventing /usr/libexec/colord from read access
on the file hwdb.bin.

Il suffit de suivre les recommandations du système pour régler le problème.

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

La deuxième alerte affiche un problème avec /usr/bin/loginctl.

SELinux is preventing /usr/bin/loginctl from read access 
on the file system.journal.

Là aussi, on va suivre la démarche préconisée.

# ausearch -c 'systemd-loginct' --raw | audit2allow \
  -M my-systemdloginct
# semodule -i my-systemdloginct.pp

Enfin, le bloqueur de publicités uBlock Origin semble poser problème.

SELinux is preventing /usr/lib64/firefox/plugin-container from read 
access on the file /home/kikinovak/.../uBlock0@raymondhill.net.xpi.

Là aussi, on va autoriser le plugin en suivant les recommandations du système.

# restorecon -v /home/kikinovak/.../uBlock0@raymondhill.net.xpi
# setsebool -P unconfined_mozilla_plugin_transition 0

Maintenance

Le script menus.sh situé dans le même répertoire que postinstall.sh se charge de personnaliser les entrées du menu KDE, pour les remplacer par quelque chose de plus lisible, avec des traductions un peu plus appropriées. Lors d’une mise à jour, certaines entrées de menu peuvent être écrasées par les fichiers par défaut. Il suffit de relancer le script pour rétablir les entrées correctes.

# cd /root/centos-7-desktop-kde
# ./menus.sh
Publié dans CentOS, Documentation Microlinux | Marqué avec , , | 3 commentaires

Gérer les Additions Invité sous CentOS dans VirtualBox

VirtualBoxSi l’on a installé CentOS comme système invité VirtualBox, la résolution du bureau est trop réduite pour pouvoir travailler correctement. La configuration d’une meilleure résolution passe par l’installation des Additions Invité (Guest Additions) dans la machine virtuelle.

Pour la suite des opérations, il vaut mieux passer en mode console. Cela nous évitera de nous tirer dans le pied avec un environnement graphique qui disparaît au beau milieu de l’installation.

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

Installer les paquets prérequis pour la compilation des drivers. Le paquet dkms est fourni par le dépôt EPEL.

# yum install gcc kernel-devel dkms

Avant de lancer la construction des Additions Invité, vérifier que les paquets du kernel correspondent tous. Dans le doute, faire une mise à jour du système.

Insérer l’image CD des Additions Invité (Périphériques > Insérer l’image CD des Additions Invité dans le menu principal de Virtualbox) et lancer la compilation.

# mount /dev/cdrom /mnt
# cd /mnt
# ./VBoxLinuxAdditions.run

Une fois que la construction des drivers s’est déroulée correctement, on peut redémarrer en mode graphique.

# systemctl set-default graphical.target
# systemctl reboot

Notez que dans le passé, SELinux a pu causer des problèmes avec l’affichage 3D. Il semblerait que ces soucis aient été résolus depuis quelque temps.

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

Démarrer le service RNGD sous CentOS

RNGDSur un système Linux, certaines applications ont besoin d’entropie pour gérer le chiffrement. Sans trop rentrer dans les détails, c’est ce qui caractérise le degré de désorganisation ou d’imprédictibilité du contenu en information d’un système. Sous CentOS, cette entropie est fournie par le service RNGD (Random Number Generator Daemon).

J’ai installé CentOS 7 sur pas mal de machines depuis sa sortie, et je constate que sur certains systèmes, RNGD ne démarre pas comme prévu. À en juger par les blogs divers et variés sur la toile, je ne suis pas le seul à avoir ce problème.

Voici une installation fraîche de CentOS 7 sur un de mes serveurs. Apparemment, tous les services du système n’ont pas démarré comme prévu.

# systemctl status
● amandine
  State: degraded
   Jobs: 0 queued
 Failed: 1 units
 ...

Afficher le service fautif.

# systemctl --failed
  UNIT         LOAD   ACTIVE SUB    DESCRIPTION
● rngd.service loaded failed failed Hardware RNG 
  Entropy Gatherer Daemon

Dans sa configuration par défaut, RNGD se base sur un périphérique /dev/hwrandom qui n’existe pas sur notre machine. Pour corriger ce comportement, il faut éditer le fichier de configuration du service.

# /usr/lib/systemd/system/rngd.service
[Unit]
Description=Hardware RNG Entropy Gatherer Daemon

[Service]
ExecStart=/sbin/rngd -f -r /dev/urandom

[Install]
WantedBy=multi-user.target

Recharger la configuration.

# systemctl daemon-reload

Démarrer le service et vérifier son statut.

# systemctl start rngd
# systemctl status rngd
● rngd.service - Hardware RNG Entropy Gatherer Daemon
   Loaded: loaded (/usr/lib/systemd/system/rngd.service; ...

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

Gérer les playlists avec Audacious, VLC et K3B

PlaylistJe fais encore partie de la “vieille” génération qui a l’habitude de graver des compils audio sur CD pour les écouter sur la chaîne hi-fi ou sur poste radio antédiluvien de ma voiture. La gravure de playlists sous Linux est assez aisée, à condition toutefois d’utiliser les applications intégrées entre elles par défaut, c’est-à-dire le couple Amarok et K3B sous KDE ou Rhythmbox et Brasero sous GNOME. Or, dès qu’on sort des sentiers battus, ça se complique un peu.

Sur ma station de travail, j’utilise CentOS 7 avec un environnement de bureau KDE et une série d’applications légères. En l’occurrence, j’ai une préférence marquée pour le lecteur audio Audacious, qui offre juste les fonctionnalités qu’il faut sans tout le fatras inutile que l’on trouve habituellement dans les “usines à gaz” comme Amarok ou Clementine.

Audacious

L’enregistrement d’une playlist sous Audacious passe par l’entrée de menu Liste de lecture > Exporter.

Audacious

Audacious propose toute une série de formats de playlists au choix dans le sélecteur de types de fichiers. J’opte pour le format M3U.

Audacious

Malheureusement, lorsque j’ouvre K3B et que je crée un projet audio pour importer ma playlist, l’application ne semble pas gérer ce fichier.

K3B Playlist

L’expérience peut être répétée avec tous les formats de playlists proposés par Audacious, comme ASXv3, AUDPL, PLS ou XSPF. Il semble bien qu’aucun ne soit géré par K3B. C’est à ce moment précis que l’on commence sérieusement à détester la confusion babylonienne de certains formats de fichiers.

Après quelques recherches sur Google, j’ai appris qu’il y avait apparemment différents formats M3U. Un peu comme ce personnage dans Molière qui disait qu’il y avait fagots et fagots. Ma foi.

Pour lire les vidéos, j’utilise normalement MPlayer en ligne de commande. Étant donné que je ne peux pas infliger ça à mes clients, j’installe également VLC. Or, VLC fait également office de lecteur audio. Je tente donc l’expérience suivante.

Je lance VLC et j’ouvre ma playlist via l’entrée de menu Média > Ouvrir un fichier.

VLC

Mon fichier M3U généré avec Audacious se présente comme ceci dans VLC. Les morceaux individuels sont reconnus et lus correctement, même s’ils s’affichent sans les méta-informations dans la fenêtre de VLC.

VLC

Sans modifier quoi que ce soit, j’enregistre cette playlist via l’entrée de menu Média > Enregistrer la liste de lecture. Je choisis le même nom et le même format de fichiers M3U.

VLC

Comme il faut s’y attendre, VLC me demande de confirmer l’écrasement du fichier.

VLC

À partir de là, je peux ouvrir K3B, créer un projet audio et importer ma playlist sans problèmes.

K3B

Comment expliquer ce comportement curieux ? Jetons donc un coup d’oeil au fichier M3U tel qu’il a été généré par Audacious. Je me suis permis de couper les lignes à rallonge.

$ cat Hybrid\ Best\ Of\ CD1.m3u 
file:///.../04%20-%20Disappear%20Here.mp3
file:///.../04%20-%20Hybrid%20-%20Falling%20Down.mp3
file:///.../03%20-%20I%20Know.mp3
...

.Et voici le “même” fichier tel qu’il est généré par VLC.

$ cat Hybrid\ Best\ Of\ CD1.m3u
#EXTM3U
.../04 - Disappear Here.mp3
.../04 - Hybrid - Falling Down.mp3
.../03 - I Know.mp3
...

Pour résoudre ce dilemme, il suffirait donc de demander aux développeurs d’Audacious d’inclure la gestion du format M3U étendu… ou alors de suggérer aux développeurs de K3B de bien vouloir gérer le format M3U simple. Apparemment, ça a déjà été fait à plusieurs reprises. En attendant, on peut toujours s’en sortir avec la bidouille décrite ci-dessus.

Mise à jour 2 janvier 2018 : Un grand merci à Monsieur André Ray qui vient de proposer une solution ultra-simple, tellement évidente qu’on ne la trouvait pas. Lorsqu’on confectionne une playlist avec Audacious et qu’on souhaite la graver avec K3B, il suffit de faire ceci.

  1. Lancer Audacious.
  2. Lancer K3B.
  3. Créer un projet audio dans K3B.
  4. Sélectionner tous les fichiers de la playlist dans Audacious.
  5. Faire un glisser-déposer vers le projet audio de K3B.

Playlist Audacious K3B

 

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