Abonnez-vous à la Gazette de Microlinux

La Gazette de MicrolinuxLa Gazette de Microlinux, c’est le nouveau bulletin d’information (ou newsletter) de Microlinux. Cette publication épisodique vous parle de Linux et des logiciels libres en général et de l’actualité numérique en particulier.

Au fil des années, mes clients m’ont posé tout un tas de questions sur Linux et les logiciels libres. Je tente d’y répondre de manière digeste dans la Gazette de Microlinux, en choisissant une question bien précise par publication, dans un langage accessible à tous, sans pour autant exclure les informaticiens chevronnés.

Les abonnées à la Gazette pourront donc en apprendre un peu plus sur l’histoire de Linux, les virus, la sécurité informatique, la compatibilité avec les formats de fichiers de Windows, la transparence, la pérennité, les logiciels espions, la facilité d’utilisation et tout un tas d’autres sujets.

De temps en temps, je saisis au vol un sujet d’actualité comme l’obsolescence programmée, les malwares ou les nouvelles lois sur la protection des données personnelles, en essayant d’expliquer au grand public de quoi il s’agit, et en donnant des pistes pour éviter les problèmes.

Pour vous abonner à la Gazette de Microlinux, c’est très simple. Il suffit de fournir votre adresse e-mail en bas de la fenêtre du navigateur et de cliquer sur le bouton Je m’abonne.

Formulaire

Enfin, notez qu’en tant qu’administrateur de plusieurs serveurs de mail, je déteste les spammeurs autant que vous. Sachez donc que le jour où vous souhaitez vous désabonner de la Gazette, il vous suffira de cliquer sur le lien Se désabonner inclus dans chaque publication, et vous n’en entendrez plus parler.

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

Data Dock : Halte au massacre – Lettre ouverte à Emmanuel Macron

Monsieur le Président de la République,

Permettez tout d’abord que je vous tende ma carte de visite. Je m’appelle Nicolas Kovacs, je suis autrichien, j’ai cinquante ans, et je vis en France depuis 1991. Installé dans un petit village du Gard, j’ai créé mon entreprise de services informatiques Microlinux en 2009.

Emmanuel Macron - RévolutionLors des dernières élections présidentielles dont vous êtes sorti vainqueur, j’ai acheté votre livre Révolution – C’est notre combat pour la France. J’ai lu et relu attentivement cet ouvrage, crayon en main. En tant qu’entrepreneur, certains points de votre programme m’interpellaient, notamment ceux ayant trait à la formation professionnelle. Voici un des passages que j’ai relevés. Il se trouve à la page 255, dans le chapitre Rendre le pouvoir à ceux qui font.

Être efficace, c’est en finir avec le bavardage législatif. […] Ce vieux réflexe français, qui consiste à faire de tout sujet une affaire de règle ou de droit, est devenu insupportable.

Si je me permets de m’adresser à vous aujourd’hui, c’est au sujet d’un de ces bavardages législatifs, la création du Data Dock dans le cadre de la réforme de la formation professionnelle. Cette réforme consistait peu ou prou à rendre caduque toute formation qui n’était pas certifiante. Étant donné qu’il s’agissait là de près de 90% des formations existantes, il en résultait que des milliers de formateurs indépendants en France ont dû mettre la clé sous la porte. Je me permets d’affirmer que cette réforme est une usine à gaz bureaucratique qui a pour conséquence de faire couler la plupart des entreprises de formation. Elle aura au moins le mérite d’assurer un poste à tous les fonctionnaires qu’il a fallu embaucher pour gérer la montagne de paperasse administrative ainsi engendrée.

Data DockMonsieur le Président, j’ai une suggestion très concrète à vous soumettre. De grâce, réformez ou supprimez le Data Dock. Cette mesure ne coûterait rien à l’État, et elle simplifierait la vie aux milliers de formateurs indépendants de France et de Navarre. En passant, elle permettrait à votre gouvernement de supprimer des postes de fonctionnaires. Vous pourriez ainsi réinvestir cet argent en renforçant les moyens de ceux qui sont effectivement indispensables pour faire fonctionner ce beau pays, comme les soignants, les fonctionnaires de police et de justice, les enseignants, etc.

Logo MicrolinuxJe me permets un instant de revenir sur mon parcours de micro-entrepreneur. En 2008, alors que je rencontrais des difficultés à trouver du travail dans une région notoirement sinistrée par le chômage, l’idée de créer mon propre emploi a commencé à germer progressivement dans un coin de ma tête. Créer une entreprise informatique spécialisée dans le logiciel libre (Linux), et qui installerait aux professionnels et aux collectivités locales de la région des réseaux informatiques ultra-sécurisés et ultra-stables, à coût réduit. Ce qui a été déterminant pour moi, c’était le statut d’auto-entrepreneur (au temps où celui-ci ne s’appelait pas encore “micro-entrepreneur”) nouvellement instauré par le gouvernement de l’époque, notamment la simplification des démarches administratives par rapport aux statuts classiques trop contraignants pour tout créateur d’entreprise de taille modeste. Mon entreprise informatique Microlinux a été créée le 3 août 2009. Un grand pas pour moi, un petit pas pour l’humanité.

Nicolas Kovacs

Ces premières années “d’amorçage de pompe”, j’ai travaillé sept jours sur sept, soixante-dix heures par semaine en moyenne, j’ai fait une croix sur les jours de repos, et si je n’ai pas jeté l’éponge, c’est que je dois beaucoup à ma ténacité habituelle. Aux alentours de 2013, ces efforts ont commencé petit à petit à porter leurs fruits, et j’ai pu considérer sans fausse modestie que mon entreprise était un succès, pour plusieurs raisons.

  • L’entreprise existait encore et n’avait pas fait faillite.
  • Une fois payées les charges, j’arrivais à payer mon loyer et mes factures et à remplir le frigidaire. Je ne pouvais rien économiser, certes. Mais c’était déjà pas mal.
  • J’étais mon propre patron, et je faisais un travail qui me passionnait.
  • Petit à petit, j’arrivais même à me libérer une journée le weekend pour aller faire une randonnée ou un peu d’escalade.

FormationDepuis sa création, Microlinux est également organisme de formation professionnelle. Avant la réforme, la formation continue constituait une part significative de mon activité, environ un tiers, avec des variations selon les années. Je suis également auteur d’une série d’ouvrages informatiques pour l’éditeur Eyrolles (le plus grand éditeur d’ouvrages techniques en France). Mes stagiaires, jusque-là, étaient le plus souvent des salariés d’associations ou de PME de la région, qui mettaient à profit leur DIF (Droit Individuel à la Formation) pour suivre une formation en Administration Linux.

Compte Personnel de FormationL’instauration du Data Dock a mis un terme au bon déroulement des formations existantes, en venant mettre des bâtons dans les roues d’honnêtes entrepreneurs indépendants. La nouveauté, c’est que le DIF (Droit Individuel à la Formation) ne s’appelait plus DIF mais CPF (Compte Personnel de Formation). En soi, le Compte Personnel de Formation n’était pas une mauvaise idée, puisqu’il était désormais possible de cumuler les heures de formation d’année en année, et même de contrat en contrat.

Malheureusement, en pratique, toutes ces heures cumulées ne servaient plus à rien pour la plupart des organismes de formation, étant donné que toutes les formations devaient désormais être obligatoirement certifiantes. Le gouvernement de François Hollande avait certes cherché à supprimer des formations qu’il considérait comme trop récréatives, comme les cours de poterie ou les stages de relaxation. Le problème, c’est qu’il a par là même vidé l’eau du bain avec l’enfant, puisque les formations non certifiantes – c’est-à-dire l’écrasante majorité des formations en France – sont ainsi toutes passées à la trappe. Dans le secteur numérique, par exemple, ce sont toutes les formations autour du référencement, des blogs professionnels, de la retouche d’images, les formations pratiques autour de Photoshop, de la suite Adobe, d’AutoCAD, les formations bureautiques autour des suites Office, ou encore les formations d’administration des réseaux informatiques, des serveurs en général et de Linux en particulier, etc. Tout cela a été balayé par le tsunami ravageur de la réforme du Data Dock. Des milliers de formateurs indépendants ont dû se résoudre à fermer boutique à cause de cette réforme, étant donné que toutes ces formations ne sont désormais plus prises en compte dans le cadre du CPF et que pratiquement aucun stagiaire n’a les moyens de les financer intégralement. Mon entreprise survit tant bien que mal depuis cette réforme, étant donné que je ne peux actuellement plus dispenser de formations.

CertificatPermettez-moi une métaphore gastronomique. C’est un peu comme si l’État annonçait haut et fort sa détermination à lutter contre le chômage dans le milieu de la restauration en obligeant tous les restaurateurs, les cuisiniers de cantine et les pizzaïolos de France et de Navarre à arborer une étoile Michelin pour pouvoir exercer leur profession. Les détracteurs rétorqueraient que la recherche de la qualité constitue une incitation louable pour les professionnels. La pratique montrerait qu’une telle réforme profiterait avant tout aux restaurants trois étoiles. Ou alors, pour revenir à nos moutons, aux grandes entreprises de formation établies, qui ont l’habitude de payer leurs formateurs au lance-pierres. J’en sais quelque chose, pour avoir moi-même enseigné dans de telles conditions. Il y a comme une odeur de lobbying dans l’air.

CriseAvant cette réforme, près de 800.000 formations par an étaient prises en charge dans le cadre du DIF. L’année suivant la réforme, on est passé à un total de 86.000 formations par an (Source : http://www.cpformation.com). Je ne vois que deux interprétations possibles. Soit les français ont subitement besoin de dix fois moins de formations. Soit l’État a tout simplement détruit le secteur de la formation indépendante.

Formulaire en ligneCe démantèlement semble aller de pair avec une dématérialisation de ses services administratifs, confrontant les usagers à une expérience de déshumanisation totale. Les portails Web mis en place constituent ainsi un amalgame déplaisant de rigueur administrative et de flou artistique. Des pages web au visuel certes agréable, mais dont le contenu suit une logique de navigation pour le moins erratique. Des sites entiers dépourvus de la moindre rubrique d’aide, sans la moindre adresse de contact, sans le moindre numéro de téléphone. Par-ci par-là, des liens vers des documents PDF sans le moindre commentaire. Les documents officiels étant, quant à eux, le plus souvent rédigés non pas en français, mais en hexagonal.

Don QuichotteAlors non, je n’ai pas les moyens d’embaucher une équipe pour se pencher plusieurs semaines durant sur les innombrables formalités de certification de mes formations. Je ne suis pas Don Quichotte, je n’ai pas de temps à perdre à me battre contre les moulins à vent de l’administration française, ni sauter à travers les cerceaux en feu qu’elle me tend. Il y a des jours où je me demande si je ne vais pas tout bonnement faire couler mon entreprise et revenir à la case départ en me mettant au chômage. J’aurais enfin le temps de bouquiner, de faire de l’escalade trois ou quatre fois par semaine, ou de découvrir les nombreux parcours VTT de la région. Peut-être m’inscrire à un cours de poterie ou un stage de relaxation.

ExtincteurFin janvier, j’ai été contacté pour effectuer une formation Administration Serveurs Linux pour une entreprise parisienne. Malheureusement, je n’ai pas pu dispenser cette formation. Non pas que je n’aie pas les compétences, mais tout simplement parce que mon inscription au Data Dock n’a été validée qu’à 50%, et ce malgré le fait que je m’y sois consacré plus d’un mois, à l’exclusion de toute autre activité. Pour vous donner un exemple parmi d’autres, je n’ai pas le droit de former des gens dans une salle de formation à Paris parce que mon bureau à Montpezat dans le Gard ne comporte pas d’extincteurs. Ce texte est déjà bien long, et il risque de l’être beaucoup plus encore si je commence à énumérer toutes les aberrations bureaucratiques auxquelles on se retrouve confronté lorsqu’on essaie de s’inscrire au Data Dock.

Monsieur le Président, je vous invite à repenser la formation professionnelle en simplifiant ou en supprimant le Data Dock. Cette mesure permettrait de préserver et/ou de (re)créer des dizaines de milliers d’emplois dans ce secteur d’activité.

Salutations citoyennes,

Nicolas Kovacs

Publié dans Divers | Marqué avec | 15 commentaires

Marketing automatisé avec MailChimp

Logo MailchimpCes derniers temps, j’ai publié une série d’articles sur la plate-forme de publipostage PHPList. C’est une solution de marketing libre et gratuite, qui fonctionne très bien et que l’on peut héberger soi-même sur son serveur dédié. Or, je suis actuellement en train de confectionner un site de vente en ligne pour un client, qui souhaite utiliser une solution basée sur OptimizePress, un plug-in propriétaire de vente en ligne pour WordPress. Ce plug-in offre à son tour une intégration avec une série de plate-formes de publipostage comme Aweber ou MailChimp, mais PHPList ne fait malheureusement pas partie des plate-formes officiellement supportées. On peut certes adapter du code fait maison, mais après quelques journées assez frustrantes de tentatives et d’échecs, j’ai décidé de ne pas réinventer la roue et de partir sur quelque chose qui est déjà bien intégré d’office.

L’offre gratuite de MailChimp est très intéressante pour des petites entreprises. Elle permet d’envoyer jusqu’à 12.000 e-mails par mois à une liste pouvant contenir jusqu’à 2.000 abonnés.

Il va sans dire qu’il s’agit là de gens qui vous ont explicitement donné votre accord pour l’envoi d’un bulletin d’informations. Dans le cas contraire, sachez tout simplement que tout envoi de courrier publicitaire non sollicité est considéré comme du spam. Et tout le monde déteste les spammeurs.

MailChimp

Dans cet article, je vais décrire pas à pas la prise en main de MailChimp, en vue de configurer un envoi automatique de quatre e-mails initiaux à une liste d’abonnés. MailChimp est une sacrée “usine à gaz”, et la prise en main peut être un peu déroutante pour celui ou celle qui n’a jamais travaillé avec ce genre d’outil.

Notez au passage que la liste La Gazette de Microlinux citée en exemple existe réellement, mais elle est hébergée sur mon propre serveur et tourne avec PHPList. Je n’ai pas voulu me servir de la liste de mon client pour des raisons évidentes de confidentialité.

Créer une liste

Une fois que nous avons créé un compte et que nous nous sommes connectés à MailChimp, nous devons créer une liste. Dans le menu principal de MailChimp, cliquez sur Create List.

MailChimp

Je fournis les coordonnées du siège social de mon entreprise.

MailChimp

J’active l’option Enable double opt-in, qui permet de procéder à la vérification de la validité d’une adresse e-mail. Cette option m’évite de me retrouver avec une liste contenant des adresses non valides. Je fais de même pour les Notifications, qui me permettront de surveiller en temps réel l’activité de ma liste. Il ne me reste plus qu’à confirmer la création de ma liste en cliquant sur Save.

MailChimp

Ajouter des abonnés

Dans un premier temps, je vais laisser de côté la création des formulaires d’abonnement, et je vais ajouter les premiers contacts manuellement. Les formulaires d’abonnement seront traités dans un article à part, étant donné qu’ils seront intégrés à OptimizePress.

Dans le menu principal de ma liste, je me rends dans Add contacts > Add a subscriber et j’ajoute un abonné en spécifiant son adresse e-mail et son nom. N’oubliez pas de cocher la case qui spécifie que vous avez le droit d’envoyer des e-mails à cette personne. Songez à ce que je vous ai dit sur le spam un peu plus haut.

MailChimp

Une fois que j’ai fourni quelques abonnés à ma liste, voici comment les choses se présentent. Pour l’exemple j’ai mis en place une liste avec mes propres avatars.

MailChimp

Rédiger un gabarit d’e-mail

La prochaine étape consiste à confectionner un gabarit pour nos futurs e-mails. Dans le menu principal de MailChimp tout en haut de la page, aller dans Templates > Create Template.

MailChimp offre toute une panoplie de gabarits au choix. Nous allons faire simple et opter pour Simple Text. L’appellation est quelque peu trompeuse, car l’envoi de messages avec MailChimp ne se fait jamais au format texte simple, ce qui serait conforme à la netiquette. Les bulletins d’information contiennent toujours une mise en forme HTML, qu’on le veuille ou non. Dans ce cas, le moindre mal consiste donc à opter pour un gabarit qui n’est pas encombré par des logos d’entreprise, des images, des liens vers des réseaux sociaux et autres fantaisies tout juste aptes à faire monter le score de nos missives dans SpamAssassin.

MailChimp

Dans la configuration par défaut, un message est normalement constitué de trois parties distinctes.

  • l’en-tête (header)
  • le corps du message (body)
  • le pied de page (footer)

Ces trois zones distinctes apparaissent bien au survol de la souris.

MailChimp

L’en-tête du message

Lorsqu’on survole l’en-tête prédéfini et que l’on clique sur l’icône d’édition symbolisée par un crayon, le texte apparaît dans la colonne de droite, ce qui permet de le modifier.

Le titre par défaut est en style heading 1. J’ai ajouté deux informations supplémentaires juste en-dessous.

  • la date
  • un lien externe cliquable pour afficher le message dans un navigateur

MailChimp propose des merge tags pour afficher du contenu dynamique. Il s’agit là de variables pour toutes sortes d’infos. Voici la liste complète de toutes ces variables.

La date actuelle peut être représentée à l’aide de la variable *|DATE:d/m/y|*. Juste à côté de la date, j’ai inséré la mention Lire cet e-mail dans votre navigateur avec un lien vers la variable *|ARCHIVE|*. Pour terminer, j’ai inséré une ligne horizontale qui permet de clairement séparer l’en-tête du corps du message. Puisqu’on utilise le HTML, autant en profiter un petit peu.

MailChimp

Le corps du message

Passons à la deuxième section, censée contenir le corps du message. Pour ma part, je supprime l’intégralité du contenu prédéfini pour le remplacer par un gros paragraphe de lorem ipsum. Pour ceux qui ne savent pas ce que c’est, il s’agit là d’un texte en faux latin inventé par les typographes, et qui est censé ne pas attirer l’attention sur un quelconque contenu. J’insère ma signature en-dessous de ce texte “bidon”.

MailChimp

Le pied de page

La dernière section de notre message est soumise à une série de réglementations. En effet, MailChimp impose une série d’éléments obligatoires dans cette section, pour des raisons légales et pour lutter contre le spam. Au minimum, le pied de page devra comprendre une description de la lettre d’information, un lien vers la page qui permet de se désabonner, ainsi qu’un message discret du sponsor dans le cadre de l’offre gratuite.

Le pied de page proposé par défaut est un sacré morceau, et c’est aussi la partie où j’ai le plus expérimenté. En effet, si vous réduisez cette partie en omettant certains éléments, il peut arriver que MailChimp ne soit pas d’accord avec vos choix et vous recolle toute la tartine en fin de message, ce qui est passablement moche à voir. Après pas mal de tentatives et d’échecs, je vous propose donc un compromis potable qui fonctionne très bien.

Je commence par insérer une ligne horizontale qui permet de bien délimiter cette section.

La variable *|LIST:DESCRIPTION|* sera remplacée par la description de la liste fournie plus haut, c’est-à-dire quelque chose comme Vous recevez cet e-mail parce que vous êtes abonné à la Gazette de Microlinux.

On pourrait très bien ajouter l’adresse grâce à *|HTML:LIST_ADDRESS_HTML|*. Le problème, c’est que Mailchimp en fait tout un pâté avec une série de retours à la ligne, et qui n’est franchement pas beau à voir.

La solution consiste ici à écrire l’adresse à la main, sur une ligne, avec les champs séparés par des points · en guise de séparateurs. La ligne complète ressemble donc à quelque chose comme ceci.

*|LIST:DESCRIPTION|* Cette publication est rédigée par Microlinux · 7, place de l’église · 30730 Montpezat · France

Je note ici que c’est le Courrier du Hacker qui m’a fourni l’idée. Un grand merci à Carl Chenet, qui utilise également MailChimp pour son excellente publication.

Le pied de page doit obligatoirement comporter une option pour se désinscrire, et c’est la variable *|UNSUB|* qui pointe vers la page d’inscription. On peut donc ajouter quelque chose comme Si vous souhaitez vous désabonner, cliquez ici avec un lien vers la variable en question.

Enfin, on veillera à conserver toute la partie finale *|IF:REWARDS|* *|HTML:REWARDS|* *|END:IF|*.

MailChimp

Note importante : Si jamais vous vous tirez dans le pied en expérimentant avec le pied de page et que vous souhaitez revenir en arrière, vous pouvez très bien le faire. Pour repartir sur des bases saines, il suffit de supprimer le pied de page, puis de sélectionner la boîte Footer dans le volet droit et d’effectuer un glisser-déposer vers le champ du pied de page dans le volet gauche.

Une fois que vous avez terminé la rédaction du gabarit, cliquez sur Save & Exit en bas à droite et choisissez un nom pour votre modèle de lettre d’abonnement.

MailChimp

Mettre en place une campagne automatisée

Dans le menu principal de MailChimp, rendez-vous dans la partie Campaigns, repérée la partie qui concerne les envois automatisés (automated welcome email) et cliquez sur Try It Out.

MailChimp

Le message de bienvenue s’affiche avec la mise en page par défaut. Repérez le bouton Setup tout en bas de la page et cliquez dessus.

MailChimp

Le nom de l’e-mail (Name your email) apparaîtra tel quel dans la liste des messages à envoyer. Renseignez ensuite le sujet du message (Email subject). En temps normal, les coordonnées de l’expéditeur (From name et From email address) sont déjà correctement remplies. Pour ma part, je ne m’occupe pas du champ Preview text, et je le laisse tel quel. Cliquez sur Next pour passer à la suite.

MailChimp

Je souhaite utiliser le gabarit défini plus haut pour mon message de bienvenue. Je clique sur Saved Templates et je sélectionne mon gabarit personnalisé.

MailChimp

Une fois que j’ai confirmé mon choix en cliquant sur Change Template, je peux rédiger mon message à partir du gabarit personnalisé.

MailChimpUne fois que j’ai terminé la rédaction de mon message, je clique sur Save & Continue. Dans la configuration par défaut, le message initial est envoyé un jour après qu’un prospect s’est abonné à la liste, ce qui me va très bien.

MailChimp

Partant de là, je clique sur Add Email et sur Design Email pour ajouter le message subséquent. La rédaction s’effectue exactement comme pour le message initial, et je peux ajouter autant de messages que je veux. Notez que ce deuxième message sera envoyé à un jour d’intervalle par rapport au message précédent.

MailChimp

Une fois qu’on a terminé de rédiger toute la séquence de messages, cliquer sur Next en bas à droite pour passer à la suite.

MailChimp

MailChimp affiche un récapitulatif de la campagne. Pour la démarrer, cliquer sur Start Workflow en bas à droite.

MailChimp

La campagne est désormais active, et les messages sont envoyés au rythme de un par jour à tous les abonnés de la liste.

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

Marketing automatisé avec PHPList

Drip MarketingUn de mes clients m’a commandé une solution de marketing automatisé ou drip marketing, autrement dit “marketing goutte à goutte”. Cette technique est décrite en détail dans le livre Dotcom Secrets de Russell Brunson. Nous n’allons pas rentrer dans les arcanes du marketing en ligne. Cet article se concentrera uniquement sur la mise en place technique des solutions énoncées dans ce livre grâce à la plate-forme de publipostage PHPList. Nous avons déjà décrit en détail l’installation de PHPList sur un serveur dédié et la configuration initiale de l’application. Aujourd’hui, nous allons traiter l’envoi automatique de messages prédéfinis grâce au plug-in Autoresponder.

Concrètement, nous disposons d’une série de cinq e-mails prédéfinis que nous souhaitons envoyer automatiquement à chaque prospect qui rejoint notre newsletter, à raison d’un e-mail par jour. Une fois que ce cycle initial est complété, le prospect en question est automatiquement inscrit à la liste des clients réguliers.

Dans un premier temps, nous allons devoir automatiser le traitement de la file d’attente de PHPList. Puis, nous allons installer les plug-ins tiers Common et Autoresponder. Enfin, nous allons voir en détail la mise en place des messages prédéfinis et la configuration de l’envoi automatique.

Automatiser le traitement de la file d’attente

Dans la configuration par défaut de PHPList, la file d’attente des campagnes est censée être gérée manuellement. Une fois qu’on a rédigé une campagne et qu’on l’a mise en file d’attente pour l’envoi, il faut lancer le traitement en appuyant sur le bouton correspondant.

PHPList

Cette procédure peut être automatisée à l’aide de Cron.

Dans un premier temps, nous allons éditer un script /usr/local/sbin/phplist pour gérer toutes les commandes de PHPList. Un modèle pour ce fichier se trouve dans le répertoire bin de l’archive de PHPList.

#!/bin/bash
/usr/bin/php /var/www/microlinux-site/html/lists/admin/index.php \
  -c /var/www/microlinux-site/html/lists/config/config.php $*

Note importante : si l’on dispose de plusieurs installations concurrentes de PHPList sur le serveur, il faudra renommer ce fichier en conséquence, par exemple /usr/local/sbin/microlinux-phplist, /usr/local/sbin/slackbox-phplist, /usr/local/sbin/test-phplist, etc.

Quelques explications en vrac :

  • #!/bin/bash : le shell que nous utilisons, en l’occurrence Bash.
  • /usr/bin/php : le chemin complet vers l’interpréteur de commandes PHP. Le paquet php-cli doit être installé.
  • /var/www/microlinux-site/html/lists/admin/index.php : le chemin complet vers le fichier index.php dans le répertoire admin de notre installation de PHPList.
  • /var/www/microlinux-site/html/lists/config/config.php : le chemin complet vers notre fichier de configuration config.php.

Rendre le fichier exécutable.

# chmod 0755 /usr/local/bin/phplist

À partir de là, PHPList peut être géré en ligne de commande. Voici un exemple.

# phplist -p processqueue
phpList version 3.3.1 (c) 2000-2018 phpList Ltd
phpList - Recently sent : 0
phpList - Débuté [0,0091560000] (109)
phpList - Envoi en lots de 1,000 messages [0,0002970000] (110)
phpList - Etape du script d'exécution: 6 [0,0006680000] (114)
phpList - Terminé, il n'y avait rien à faire [0,0002530000] (115)
phpList - Terminé, Tout a été exécuté [0,0008890000] (121)

Désormais, nous pouvons donc définir des tâches automatiques, comme par exemple la gestion de la file d’attente de PHPList toutes les cinq minutes.

# crontab -l
...
# Process PHPList queue
0-59/5 * * * * /usr/local/sbin/phplist -p processqueue

Note importante : pour une tâche automatique moins bavarde, on prendra soin d’ajouter une redirection vers /dev/null en fin de ligne.

On peut même ajouter ceci à la fin du fichier config/config.php pour renseigner PHPList sur la présence d’une tâche automatique.

// Queue processing
define ("MANUALLY_PROCESS_QUEUE",0);

Nous constatons que le bouton de traitement ne s’affiche plus lorsqu’on met une campagne en file d’attente. Il est remplacé par un autre bouton qui permet d’afficher la progression du traitement, et c’est tout.

PHPList

Installer le plug-in Common

La prochaine étape consiste à installer le plug-in Common, une dépendance du plug-in Autoresponder.

Il existe plusieurs manières d’installer des plug-ins tiers pour PHPList. Les développeurs des plug-ins conseillent de passer par l’interface de gestion des plug-ins de PHPList, à laquelle on accède par le biais de l’entrée de menu Config > Greffons. Avant de faire ceci, nous devons modifier les permissions de notre installation afin de permettre au serveur web d’écrire dans le répertoire admin/plugins.

# cd admin
# chown -R microlinux:apache plugins
# find plugins -type d -exec chmod 0770 {} \;
# find plugins -type f -exec chmod 0660 {} \;

À partir de là, on peut ouvrir la page de gestion des plug-ins via Config > Greffons et fournir l’URL du plug-in Common.

  • https://github.com/bramley/phplist-plugin-common/archive/master.zip

PHPList

Une fois qu’on a installé et activé le plug-in, vérifier s’il s’affiche bien comme ceci.

PHPList

Installer le plug-in Autoresponder

L’installation du plug-in Autoresponder s’effectue de manière similaire. Revenons dans l’interface de gestion des plugins Config > Greffons et fournissons l’URL du plug-in.

  • https://github.com/bramley/phplist-plugin-autoresponder/archive/master.zip

PHPList

Là aussi, il faudra explicitement activer le plug-in.

PHPList

Rédiger un message prédéfini

La rédaction d’un message prédéfini se déroule comme pour un message normal.

  1. Dans le menu principal de PHPList, passer par Campagne > Envoyer une campagne.
  2. Rédiger le message.
  3. Définir le format d’envoi texte simple.
  4. Laisser tels quels les réglages de la section Envoi planifié.
  5. Sélectionner la liste à laquelle on souhaite diffuser la campagne.
  6. Au lieu de Mettre le message en file d’attente, on va le Sauvegarder en tant que brouillon.

PHPList

Une fois que le message est enregistré, ouvrir Campagnes > Manage Autoresponders dans le menu principal.

  1. Ajouter un message automatique en cliquant sur Add.
  2. Fournir une description, par exemple Message J+1.
  3. Dans le menu déroulant Select the draft message to send, choisir le message qu’on vient de rédiger.
  4. Le menu déroulant Select a delay permet de définir le délai d’envoi à partir du moment où un prospect a rejoint la liste. Ici, on choisira 1 day ou un délai nettement plus court comme 10 minutes si l’on souhaite tester le plug-in sans avoir à tourner les pouces pendant quelques jours.
  5. Le bouton Actions nous permet d’ajouter un prospect à une autre liste. Nous n’allons rien faire pour l’instant, mais cette fonctionnalité nous sera utile lors de la rédaction du dernier message de la séquence.
  6. Ne touchez pas à la case Only send to new users et laissez-la cochée, sous peine de spammer l’intégralité de votre liste et chasser vos prospects vers le nirvana numérique. À en juger d’après le forum de PHPList, pas mal de gens se sont tirés dans le pied et on perdu des clients en masse avec cette option.
  7. Confirmez en cliquant sur Add Autoresponder.

PHPList

Rédigez les autres messages comme vous l’avez fait pour ce message initial, en prenant soin à chaque fois de l’enregistrer en tant que brouillon avant de l’ajouter aux envois automatiques.

Au total, nous devons obtenir quelque chose comme ceci. Une séquence de cinq messages envoyés quotidiennement à partir de l’inscription du prospect. Notez que lorsque la séquence se termine, le prospect est ajouté automatiquement à la liste des destinataires réguliers (nommée Seinfeld dans l’exemple).

PHPList

Documentation

 

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

Prise en main et configuration de PHPList

Logo PHPListDans un précédent article, nous avons vu l’installation de la plate-forme de publipostage PHPList. Cet article se concentrait sur l’aspect purement technique de la mise en place de l’application. Or, il reste encore pas mal de choses à configurer avant de pouvoir réellement utiliser PHPList en production, comme la création d’une liste, l’importation des utilisateurs initiaux et surtout la rédaction des nombreux messages de transactions, les gabarits de mails, etc.

PHPList accueil

Retour à la case départ

Lorsqu’on expérimente avec PHPList, il arrive assez fréquemment qu’on se tire dans le pied et qu’on ne s’y retrouve plus du tout dans la myriade d’options de configuration. Dans certains cas de figure, l’approche la plus saine consiste à revenir à la case départ. Ce n’est pas la peine de tout supprimer en passant par une réinstallation complète.

PHPList offre la possibilité de revenir à la case départ, via l’entrée de menu Système > Initialiser la base de données. L’interface nous affiche un avertissement en rouge parce que les tables existent déjà. Dans ce cas, il suffit de cliquer sur Forcer l’initialisation tout en bas de la page, ce qui supprimera toutes les données existantes. Ensuite, il faut se déconnecter en cliquant sur Logout et repasser par la procédure d’initialisation de la base de données en fournissant le nom, l’entreprise et l’adresse mail et en choisissant un mot de passe de connexion pour l’administrateur. Pour finir, cliquer une deuxième fois sur Logout.

Créer une liste

L’entrée de menu Abonnés > Liste des abonnés affiche les listes existantes. Dans la configuration par défaut, PHPList comporte deux listes test et newsletter. On va commencer par supprimer ces deux listes en cliquant sur la petite icône symbolisant une corbeille juste en-dessous de chacune d’elles.

Ensuite, cliquer sur Ajouter une liste et renseigner les données de base.

  • Nom de la liste : La Gazette de Microlinux
  • Liste publique : oui (cocher la case)
  • Description de la liste : 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.

Importer des abonnés

Maintenant que la liste est créée, on peut importer quelques abonnés. Un simple clic sur Ajouter quelques abonnés permet de les ajouter à la main.

Si l’on dispose d’un fichier CSV avec une liste d’adresses électroniques, on peut passer par l’entrée de menu Abonnés > Importer des adresses électroniques.

  1. Dans la fenêtre des méthodes d’importation, on choisira l’option Importer en envoyant un fichier CSV avec des adresses électroniques et informations supplémentaires.
  2. Cliquer sur Parcourir et choisir le fichier CSV, garder les valeurs par défaut pour les options d’importation et cliquer sur Importer.
  3. Vérifier le résultat de l’opération et cliquer sur Confirmer l’importation.
  4. Revenir dans Abonnés > Liste des abonnés, cliquer sur le nom de la liste et vérifier si les adresses ont bien été ajoutées.

PHPList

Créer une page d’abonnement

La prochaine étape consiste à créer une page d’abonnement. On passera par l’entrée de menu Config > Pages d’abonnement > Ajouter une nouvelle page d’abonnement.

L’interface de création des pages d’abonnement comporte de très (!) nombreuses options, et il est facile de s’y perdre. Avant toute chose, on va noter que cette page est organisée en quatre grandes sections que l’on peut déplier et replier à sa guise.

PHPList

Mettons un pied devant l’autre et commençons par la section Informations Générales.

  • Titre : S’abonner à la Gazette de Microlinux
  • Fichier de langue à utiliser : french
  • Introduction :

<h3>La Gazette de Microlinux</h3>

<p>Une publication épisodique qui vous parle de l&apos;actualité numérique en général et celle de Microlinux en particulier, dans un langage accessible à tous. Et oui, c&apos;est gratuit.</p>

<p>&nbsp;</p>

  • En-tête personnalisé :

<h1 id=”logo”><a href=”https://www.microlinux.fr” title=”Visitez le site web de Microlinux”>[ORGANISATION_NAME]</a></h1>

  • Pied de page : laisser tel quel.
  • Page qui s’affiche après inscription :

<h3>Merci de vous être abonné à la Gazette de Microlinux.</h3>
<p>Votre adresse e-mail a été ajoutée à notre système. Vous recevrez un message avec une demande de confirmation pour votre adhésion. Assurez-vous de cliquer sur le lien dans ce message pour confirmer votre inscription.</p>

<p>&nbsp;</p>

  • Texte à afficher lors de la réussite de l’inscription par une requête AJAX :

<h3>Vous avez été abonné à la Gazette de Microlinux.</h3>
<p>Vous allez recevoir un courrier pour confirmer votre inscription. Assurez-vous de cliquer sur le lien dans ce message pour confirmer votre inscription.</p>

<p>&nbsp;</p>

  • Texte sur le bouton à cliquer : Abonnez-vous à la Gazette de Microlinux
  • Message au format HTML : cocher l’option Ne pas offrir de choix, mettre au format texte par défaut.

PHPList

Maintenant qu’on a rempli cette première section, on peut déjà enregistrer les modifications, revenir à la page d’édition, replier la section Informations Générales et passer à la section Messages de transaction. Cette section fournit le contenu de trois types de messages.

  • Le message que les utilisateurs reçoivent lorsqu’ils s’inscrivent.
  • Le message qu’ils reçoivent lorsqu’ils confirment leur inscription.
  • Enfin, le message qui s’affiche lorsqu’ils annulent leur inscription.

Commençons par le message que les utilisateurs reçoivent lorsqu’ils s’inscrivent.

  • Sujet : Demande de confirmation
  • Message :

Bienvenue (ou presque) à la Gazette de Microlinux…

Vous recevez cet e-mail parce que quelqu’un – vous, on l’espère – a inscrit votre adresse électronique. Si cela est correct, veuillez confirmer votre inscription en cliquant sur le lien suivant. Notez que sans cette confirmation, vous ne serez pas inscrit :

[CONFIRMATIONURL]

S’il s’agit d’une erreur, vous n’avez rien à faire, il vous suffit de supprimer ce message.

Un gentil bonjour de la garrigue gardoise.

Nicolas Kovacs, rédacteur de la Gazette de Microlinux

Ensuite, passons au message que les utilisateurs reçoivent lorsqu’ils confirment leur inscription.

  • Sujet : Bienvenue à la Gazette de Microlinux
  • Message :

Bienvenue à la Gazette de Microlinux. Votre adresse e-mail a été ajoutée à la liste d’envoi de notre bulletin d’information.

Un gentil bonjour de la garrigue gardoise.

Nicolas Kovacs, rédacteur de la Gazette de Microlinux


Si vous ne souhaitez plus recevoir cette publication, il vous suffit de vous rendre à l’adresse suivante :

[UNSUBSCRIBEURL]

Enfin, configurons le message que les utilisateurs reçoivent lorsqu’ils annulent leur inscription.

  • Sujet : À une prochaine…
  • Message :

Vous recevez ce message parce que vous vous êtes désabonné(e) de la Gazette de Microlinux.

Vous ne recevrez plus aucun message en provenance de notre liste.

Si jamais vous changez d’avis, vous pouvez vous réinscrire ici :

[SUBSCRIBEURL]

Merci & au revoir

Nicolas Kovacs, rédacteur de la Gazette de Microlinux

PHPList

Nous n’allons pas toucher à la section Sélectionnez les attributs à utiliser, étant donné que nous n’avons pas à gérer de listes complexes.

Enfin, dans la section Sélectionnez les listes à proposer, il ne reste plus qu’à cocher la liste que nous venons de créer.

PHPList

Configurer le pied de page des e-mails

Le pied de page se configure via l’entrée de menu Config > Réglages, dans la section Campaign Settings.

  • Pied de page par défaut pour l’envoi d’une campagne :

Vous recevez cet e-mail parce que vous êtes actuellement abonné à la Gazette de Microlinux.

Pour transférer ce message, cliquez ici :

[FORWARDURL]

Pour vous désabonner, cliquez ici :

[UNSUBSCRIBEURL]

  • Pied de page utilisé lorsqu’un message a été transféré :


Cette lettre d’information de la Gazette de Microlinux vous a été transférée par [FORWARDEDBY]. Si vous souhaitez vous abonner à cette publication, vous pouvez le faire ici :

[SUBSCRIBEURL]

Si vous ne souhaitez recevoir aucun message – même transféré – de la Gazette de Microlinux, il vous suffit de cliquer ici :

[BLACKLISTURL]

L’espace entre le corps du message et le pied de page est assez important. Pour corriger ce défaut, on peut éditer le fichier admin/sendemaillib.php. Avant de faire cela, on va faire une copie de sauvegarde.

# cd admin
# cp sendemaillib.php sendemaillib.php.orig

Repérer la ligne suivante, aux alentours de la ligne 350.

$textmessage .= "\n\n".$text['footer'];

Ici, on peut très bien supprimer les deux retours chariot forcés comme ceci.

$textmessage .= "".$text['footer'];

Dans la configuration par défaut, chaque message arbore la mention Powered by PHPList, www.phplist.com dans son pied de page. Si l’on souhaite modifier ce message du sponsor voire le supprimer pour de bon, il faudra repérer la ligne suivante, aux alentours de la ligne 210 et éditer le contenu de la variable $text['signature'] à sa guise.

$text['signature'] = "\n\n- Powered by phpList --\n\n";

Doublons et autres redondances

La configuration de PHPList contient une redondance pour le moins curieuse dans la section Config > Réglages > Transactional Settings. Les messages que les utilisateurs sont censés recevoir lorsqu’ils s’inscrivent, lorsqu’ils confirment leur inscription ou lorsqu’ils se désinscrivent y figurent également. Or, nous les avons déjà définis plus haut, lorsque nous avons créé la page d’abonnement.

Si quelqu’un a une explication pour cette inconsistance manifeste, je suis preneur.

Notez que la publication citée en exemple existe réellement. Si vous souhaitez vous abonner à la Gazette de Microlinux, vous pouvez le faire ici.

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

Hébergement Xibo sous CentOS

Logo XiboUn de mes clients est une société publicitaire de Nîmes spécialisée dans l’affichage dynamique. Il s’agit là d’une forme d’affichage électronique présentant des vidéos publicitaires sur des écrans plasma dans les salles d’attente des médecins, dans les gares, les aéroports, etc.

Xibo est une solution Open Source d’affichage dynamique, contrôlée par une interface web centralisée, et qui permet de diffuser des contenus multimédia sur une série de postes clients. L’application permet de créer l’équivalent d’une chaîne de télévision avec une administration simple du contenu et de la durée d’affichage.

Cet article décrit l’installation de Xibo sur un serveur dédié tournant sous CentOS 7.

Prérequis

Les postes clients se connectent au serveur sur le port 9505 en TCP. Il faut donc songer à ouvrir ce port dans le pare-feu.

Configuration de SELinux

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

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

# setsebool -P httpd_can_sendmail on

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

# setsebool -P httpd_unified on

Installation des modules PHP

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

  • php56w-gd
  • php56w-mcrypt
  • php56w-soap
  • php56w-xml

Installer ces modules avec Yum et relancer Apache.

Configuration de PHP

La configuration par défaut de PHP ne permet pas de traiter des fichiers un peu plus volumineux. Il faut donc l’adapter en conséquence en éditant /etc/php.ini.

...
max_execution_time = 120
...
memory_limit = 128M
...
post_max_size = 128M
...
upload_max_filesize = 128M
...

Configuration de l’hôte virtuel

La configuration de l’hôte virtuel autorise les directives placées dans le fichier .htaccess à la racine de l’installation. Voici les options préconisées par la documentation officielle de Xibo.

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

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

# https://xibo.slackbox.fr
<VirtualHost _default_:443>
  Header always set Strict-Transport-Security \
    "max-age=63072000; includeSubDomains"
  ServerAdmin info@microlinux.fr
  DocumentRoot "/var/www/slackbox-xibo/web"
  <Directory "/var/www/slackbox-xibo/web">
    AllowOverride All
    Options Indexes FollowSymLinks MultiViews
    Order allow,deny
    Allow from all
    Require all granted
  </Directory>
  ServerName xibo.slackbox.fr:443
  SSLEngine on
  SSLCertificateFile /etc/letsencrypt/chemin/vers/cert.pem
  SSLCertificateKeyFile /etc/letsencrypt/chemin/vers/privkey.pem
  SSLCertificateChainFile /etc/letsencrypt/chemin/vers/fullchain.pem
  BrowserMatch "MSIE [2-5]" \
    nokeepalive ssl-unclean-shutdown \
    downgrade-1.0 force-response-1.0
  ErrorLog logs/xibo.slackbox.fr-error_log
  CustomLog logs/xibo.slackbox.fr-access_log common
</VirtualHost>

Téléchargement

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

# mkdir -p /root/webapps/xibo

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

# cd /root/webapps/xibo
# links https://github.com/xibosignage/xibo-cms/releases

Xibo propose essentiellement deux méthodes d’installation :

  • classique sur un serveur web
  • via une image Docker

Les développeurs de Xibo conseillent d’utiliser l’image Docker, probablement au vu d’une poignée de prérequis quelque peu exotiques. Nous allons tout de même passer par l’installation classique et récupérer l’archive correspondante, en l’occurrence xibo-cms-1.8.5.tar.gz.

Installation de ZeroMQ

ZeroMQ est une bibliothèque de messagerie asynchrone haute performance, destinée à être utilisée dans des applications distribuées ou concurrentes. Sous CentOS, elle est fournie par le dépôt EPEL.

# yum install zeromq zeromq-devel

L’extension PHP correspondante n’est pas disponible dans les dépôts de paquets. Nous allons donc plonger les mains dans le cambouis et la construire nous-mêmes.

# cd /usr/src
# git clone https://github.com/mkoppanen/php-zmq
# yum install php56w-devel
# cd php-zmq
# phpize
# ./configure
# make
# make test
# make install

L’extension s’installe vers /usr/lib64/php/modules/zmq.so. Pour l’utiliser, il va falloir créer un fichier /etc/php.d/20-zmq.ini et l’éditer comme ceci.

; Enable ZeroMQ extension
extension=zmq.so

Installation de Xibo

Créer la base de données.

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

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

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

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

MariaDB [(none)]> quit;
Bye

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

# cd /var/www
# tar xvzf /root/webapps/xibo/xibo-cms-1.8.5.tar.gz

Renommer le répertoire résultant.

# mv xibo-cms-1.8.5 slackbox-xibo

La documentation officielle ne mentionne pas les permissions de l’application, et les développeurs ne fournissent que des indications très vagues quant aux droits d’accès. L’approche pragmatique consiste ici à attribuer “à la louche” les fichiers de l’application au processus qui fait tourner le serveur. Une fois que Xibo est installé, on pourra restreindre ces droits d’accès trop permissifs.

# chown -R apache:apache slackbox-xibo
# chown microlinux:microlinux slackbox-xibo

À partir de là, on peut ouvrir l’URL de Xibo dans un navigateur web.

Installation Xibo

L’installateur inclut un script de vérification pour les nombreux prérequis.

Installation Xibo

Dans l’écran de configuration de la base de données, sélectionner l’onglet Existing et fournir les paramètres de connexion à la base.

Installation Xibo

Définir un utilisateur avec les droits d’administration.

Installation Xibo

La prochaine étape consiste à renseigner le chemin complet du répertoire library, qui contiendra les vidéos. La clef serveur est un code généré de manière aléatoire. Ce code est accessible dans l’application, et il est possible de le personnaliser.

Installation Xibo

L’installateur m’a affiché l’erreur suivante, dûe à la présence d’un répertoire temp à l’intérieur du répertoire library.

Installation Xibo

Pour résoudre le problème, il suffit de supprimer le répertoire en question et de relancer cette étape de l’installation.

# rmdir /var/www/slackbox-xibo/library/temp

À présent, on peut se connecter à l’application.

Installation Xibo

Voilà comment se présente la page d’accueil de l’interface.

Installation Xibo

Configuration de XMR

XMR (Xibo Message Relay) est la partie de l’application qui se charge d’envoyer les messages publicitaires depuis le serveur vers les postes clients. XMR est fourni dans le répertoire vendor/bin de Xibo et requiert un fichier de configuration config.json.

On va donc créer vendor/bin/config.json et éditer ce fichier en renseignant l’adresse IP du serveur, comme ceci.

{
  "listenOn": "tcp://localhost:50001",
  "pubOn": ["tcp://163.172.xxx.yyy:9505"],
  "debug": false
}

Configuration de XTR

XTR (Xibo Task Runner) est le planificateur de tâches de l’application. Les tâches typiques comprennent la maintenance, les alertes mail ou l’archivage. Concrètement, les tâches sont lancées par le script PHP bin/xtr.php, lui-même géré par CRON.

# crontab -l
...
# Xibo
0-59/5 * * * * /usr/bin/php /var/www/slackbox-xibo/bin/xtr.php

 

 

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

Résoudre les problèmes de validation avec Certbot

CertificatSur mes serveurs publics tournant sous CentOS, j’utilise Certbot pour obtenir les certficats Let’s Encrypt nécessaires pour mes hébergements sécurisés. Or, depuis le 9 janvier 2018, la méthode de validation TLS-SNI-01 a été désactivée suite à la découverte d’une faille de sécurité. On peut certes encore l’utiliser pour renouveler des certificats existants, mais toute tentative de génération d’un nouveau certificat renvoie un message d’erreur.

La manière la plus simple de résoudre le problème consiste à mettre à jour Certbot vers la version 0.21 et de basculer vers la méthode de validation HTTP-01.

À ce jour, le dépôt EPEL ne fournit que la version 0.20. Pour éviter de tourner les pouces en attendant, on va suivre la méthode préconisée par la communauté Let’s Encrypt, et on va remplacer le paquet certbot par certbot-auto.

Dans un premier temps, on va supprimer le paquet certbot avec ses nombreuses dépendances Python.

# yum autoremove certbot

Ensuite, on va récupérer le client certbot-auto.

# cd /usr/local/sbin
# wget -c https://dl.eff.org/certbot-auto
# chmod 0700 certbot-auto

Le client certbot-auto accepte les mêmes arguments que certbot. Pour la génération et le renouvellement de mes certificats, j’utilise un script mkcert.sh. Dans ce script, je vais procéder à deux modifications.

  • Je remplace la commande certbot par certbot-auto.
  • La méthode de validation tls-sni-01 est remplacée par la méthode http.

Concrètement, voici à quoi cela ressemble dans le script.

certbot-auto certonly \
  --non-interactive \
  --email info@microlinux.fr \
  --preferred-challenges http \
  --standalone \
  --agree-tos \
  --renew-by-default \
  --webroot-path /var/www/microlinux-site \
  -d microlinux.fr -d www.microlinux.fr \
  --webroot-path /var/www/microlinux-blog \
  -d blog.microlinux.fr \
  --webroot-path /var/www/microlinux-mail \
  -d mail.microlinux.fr \
  --webroot-path /var/www/microlinux-owncloud \
  -d cloud.microlinux.fr \
  ...

Lors de la première invocation, certbot-auto se charge d’installer automatiquement toutes les dépendances nécessaires pour son bon fonctionnement.

Creating virtual environment...
Installing Python packages...
Installation succeeded.
Saving debug log to /var/log/letsencrypt/letsencrypt.log
Plugins selected: Authenticator standalone, Installer None
Renewing an existing certificate
Performing the following challenges:
http-01 challenge for microlinux.fr
http-01 challenge for www.microlinux.fr
http-01 challenge for blog.microlinux.fr
http-01 challenge for mail.microlinux.fr
http-01 challenge for cloud.microlinux.fr
...

Notre problème de validation est désormais résolu. Notons au passage que certbot-auto vérifie la présence éventuelle d’une nouvelle version et gère automatiquement la mise à jour.

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

Poste de travail CentOS 7 + Xfce “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 Xfce. 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é fin 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.

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

Xfce CentOS

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 Xfce est améliorée de manière significative.
  • Plank, Whiskermenu et Caja rendent le bureau bien 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 CD minimal, mais rien n’empêche d’utiliser le DVD.

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

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

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

# dd if=CentOS-7-x86_64-Minimal-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 /boot/efi de 100 MiB sur les systèmes EFI
  • une partition swap, équivalent à la RAM disponible
  • une partition principale, formatée en ext4

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

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

Partition /boot

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

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

Partition EFI

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

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

Partition swap

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

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

Partition principale

La partition principale occupera tout l’espace disque restant.

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

Choix des paquets

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

Utilisateur initial

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

Configuration provisoire du réseau

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

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

Récupérer le script de post-installation

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

# yum install git

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

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

Lancer le script de post-installation

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

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

  • Activer la gestion des Delta RPM.
  • 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.
  • Installer le serveur graphique X Window.
  • Installer l’environnement de bureau Xfce.
  • Supprimer une poignée de 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 Xfce
  • 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.
  • Basculer en mode graphique au démarrage.

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

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

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 network-manager-applet, qu’il faudra installer.

# yum install network-manager-applet

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

# systemctl status NetworkManager

 

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

Les redirections

TerminalVoici le septième volet de mon cours d’introduction au shell Bash. La dernière fois, nous avons vu les expressions complexes. Aujourd’hui, nous abordons les redirections, qui sont couramment utilisées dans les commandes Unix.

Les redirections permettent…

  • de récupérer le résultat d’une ou plusieurs commandes dans un fichier ;
  • de faire lire un fichier à une commande.

Entrée et sorties standard des processus

Les processus Unix ont, par défaut, leur fichier terminal ouvert trois fois, sous trois descripteurs de fichiers différents : 0, 1 et 2.

Entrée standard

Le descripteur de fichier 0 est également nommé “entrée standard du processus”. Les processus qui attendent des informations de la part de l’utilisateur déclenchent une requête de lecture sur le descripteur 0. Si ce dernier est associé au terminal, cela se matérialise pour l’utilisateur par une demande de saisie au clavier.

Sortie standard

Le descripteur de fichier 1 est également nommé “sortie standard du processus”. Par convention, un processus qui souhaite envoyer un message résultat à l’utilisateur doit le faire transiter via le descripteur 1. Si ce dernier est associé au terminal, ce qui est le cas par défaut, cela se matérialise pour l’utilisateur par un affichage à l’écran.

Sortie d’erreur standard

Le descripteur de fichier 2 est également nommé “sortie d’erreur standard du processus”. Par convention, un processus qui souhaite envoyer un message d’erreur à l’utilisateur doit le faire transiter via le descripteur 2. Si ce dernier est associé au terminal, ce qui est le cas par défaut, cela se matérialise pour l’utilisateur par un affichage à l’écran.

Redirection des sorties en écriture

La redirection des sorties en écriture permet d’envoyer les affichages liés à un descripteur particulier non plus sur le terminal, mais dans un fichier.

$ commande 1> fichier

Cette commande peut s’écrire plus simplement.

$ commande > fichier

Voici un exemple.

$ touch fichier{1,2,3}
$ ls fichier?
fichier1 fichier2 fichier3
$ ls fichier? > liste
$ cat liste
fichier1
fichier2
fichier3

Si le fichier n’existe pas, il est créé. S’il existe déjà, il est écrasé.

La double redirection permet de concaténer les messages résultant d’une commande au contenu d’un fichier déjà existant.

$ commande 1>> fichier

Là encore, la commande peut s’écrire plus simplement.

$ commande >> fichier

Si le fichier n’existe pas, il est créé. S’il existe déjà, il est ouvert en mode ajout.

Dans l’exemple suivant, on va ajouter la date à la fin du fichier liste créé précédemment.

$ date
ven. janv. 12 15:47:59 CET 2018
$ date >> liste
$ cat liste
fichier1
fichier2
fichier3
ven. janv. 12 15:48:22 CET 2018

La redirection de la sortie d’erreur standard permet de récupérer les messages d’erreur dans un fichier. Les résultats restent à l’écran.

$ commande 2> fichier

Voici un exemple.

$ find / -name passwd 2> erreur
/usr/share/bash-completion/completions/passwd
/usr/bin/passwd
/etc/passwd
/etc/pam.d/passwd
/sys/fs/selinux/class/passwd
/sys/fs/selinux/class/passwd/perms/passwd
$ cat erreur
find: ‘/var/cache/httpd’: Permission non accordée
find: ‘/var/cache/ldconfig’: Permission non accordée
find: ‘/var/cache/cups’: Permission non accordée
...

Là encore, la double redirection de la sortie d’erreur standard permet de concaténer les messages d’erreur d’une commande au contenu d’un fichier existant.

$ commande 2>> fichier

Dans l’exemple suivant, on va concaténer les messages d’erreur de la commande invalide ls -z à la fin du fichier erreur.

$ ls -z
ls : option invalide -- 'z'
Saisissez « ls --help » pour plus d'informations.
$ ls -z 2>> erreur
$ cat erreur
find: ‘/var/cache/httpd’: Permission non accordée
find: ‘/var/cache/ldconfig’: Permission non accordée
find: ‘/var/cache/cups’: Permission non accordée
...
find: ‘/proc/27895/map_files’: Permission non accordée
find: ‘/proc/27895/fdinfo’: Permission non accordée
find: ‘/proc/27895/ns’: Permission non accordée
ls : option invalide -- 'z'
Saisissez « ls --help » pour plus d'informations.

Il est possible de rediriger plusieurs descripteurs sur une même ligne de commande.

$ commande 1> fichier_a 2> fichier_b

Ou encore.

$ commande 2> fichier_b 1> fichier_a

Reprenons l’exemple de tout à l’heure.

$ find / -name passwd 1> resultat 2> erreur
$ cat resultat
/usr/share/bash-completion/completions/passwd
/usr/bin/passwd
/etc/passwd
/etc/pam.d/passwd
/sys/fs/selinux/class/passwd
/sys/fs/selinux/class/passwd/perms/passwd
$ head -n 3 erreur
find: ‘/var/cache/httpd’: Permission non accordée
find: ‘/var/cache/ldconfig’: Permission non accordée
find: ‘/var/cache/cups’: Permission non accordée

L’option noclobber du shell permet de se protéger d’un écrasement involontaire de fichier. Elle est désactivée par défaut.

$ set -o noclobber
$ date > resultat
bash: resultat : impossible d'écraser le fichier existant

Pour forcer l’écrasement il faudra utiliser le symbole de redirection >|.

$ date >| resultat
$ cat resultat
ven. janv. 12 16:02:42 CET 2018

Et voici comment on réactive l’écrasement des fichiers.

$ set +o noclobber

Toutes les plates-formes Unix possèdent un fichier spécial nommé /dev/null qui permet de faire disparaître les affichages. Ce fichier est géré comme un périphérique et n’a pas de notion de contenu. On peut donc considérer qu’il est toujours vide.

$ find / -name passwd 1> resultat 2> /dev/null

Redirection de l’entrée standard

La redirection de l’entrée standard concerne les commandes qui utilisent le descripteur 0, autrement dit celles qui déclenchent une saisie au clavier.

$ commande 0< fichier_message

Cette commande peut s’écrire plus simplement.

$ commande < fichier_message

Dans l’exemple qui suit, on va envoyer un mail à l’utilisateur glagaffe.

$ mail glagaffe
Subject: RDV
Rendez-vous au resto à 13h.
Nico
.
EOT

Pour mettre l’exemple ci-dessus en pratique, il faut que l’utilisateur glagaffe existe et que le serveur mail soit configuré pour la machine locale. Sur un système CentOS, on pourra faire ceci.

# useradd -c "Gaston Lagaffe" glagaffe
# passwd lagaffe
# yum install postfix mailx mutt
# systemctl start postfix

Et pour lire le mail, on pourra s’y prendre comme ceci.

$ su - glagaffe
$ mutt

La commande mail lit l’entrée standard jusqu’à la saisie d’un point . sur une ligne. Les données saisies seront envoyées dans la boîte aux lettres de l’utilisateur glagaffe.

Si l’on souhaite faire lire à la commande mail non plus le clavier mais le contenu d’un fichier, il suffit de connecter le descripteur 0 sur le fichier désiré.

$ cat message
RDV au resto à 13h.
Nico
$ mail -s "RDV" glagaffe < message

Redirections avancées

Pour envoyer la sortie standard et la sortie d’erreur standard dans le même fichier, il faut employer une syntaxe particulière.

$ commande 1> fichier 2>&1

Ou encore…

$ commande 2> fichier 1>&2

Au quotidien, on utilisera plutôt la syntaxe suivante.

$ commande > fichier 2>&1

Reprenons l’exemple de tout à l’heure.

$ find / -name passwd > resultat 2>&1
$ cat resultat
...
/usr/bin/passwd
find: ‘/boot/lost+found’: Permission non accordée
find: ‘/boot/grub2’: Permission non accordée
find: ‘/root’: Permission non accordée

La double redirection en lecture est principalement utilisée dans les scripts shell. Elle permet de connecter l’entrée standard d’une commande sur une portion du script.

$ commande <<ETIQUETTE
données
données
données
ETIQUETTE

Le symbole placé à la suite des caractères << est une déclaration d’étiquette. Elle sera utilisée pour marquer la fin des données à lire. Les lignes insérées entre les deux mots ETIQUETTE seront envoyées sur l’entrée standard de la commande.

Voici un exemple.

$ mail -s "RDV" glagaffe <<FIN
> Rendez-vous au resto à 13h.
> Nico
> FIN

Notez que les étiquettes doivent être immédiatement suivies d’un retour à la ligne.

Rediriger la sortie de la commande ls

Vous avez peut-être essayé de rediriger le résultat de la commande ls comme ceci.

$ ls /etc > config.txt

Le résultat de l’opération est quelque peu inattendu.

$ cat config.txt
adjtime
aliases
aliases.db
alternatives
anacrontab
asound.conf
...

La différence entre les affichages respectifs tient au fait que les développeurs de l’outil ls se sont dit qu’avec un affichage à l’écran, vous préfériez probablement une vue en colonnes, alors que pour une redirection, un affichage avec un élément par ligne serait préférable.

Si l’on souhaite préserver les colonnes dans la redirection, il faut donc l’expliciter à l’aide de l’option -C.

$ ls -C /etc > config.txt
$ cat config.txt
adjtime                  init.d                    qemu-ga
aliases                  inittab                   rc0.d
aliases.db               inputrc                   rc1.d
alternatives             iproute2                  rc2.d
...

En contrepartie, pour être sûr d’obtenir un affichage avec un élément par ligne, on pourra utiliser l’option -1.

$ ls -1 /etc > config.txt

Connecter deux programmes

Dans l’exemple suivant, on prend le résultat d’une commande pour le fournir à une autre commande. Dans un premier temps, on écrit la liste en vrac de tous les paquets du système dans un fichier.

$ rpm -qa > rpms_vrac.txt

Cette liste peut être classée par ordre alphabétique grâce à la commande sort.

$ sort < rpms_vrac.txt

Enfin, le résultat de cette dernière commande peut à son tour être écrit dans un fichier.

$ sort < rpms_vrac.txt > rpms.txt

Voilà ce que ça donne.

$ head rpms.txt
acl-2.2.51-12.el7.x86_64
aic94xx-firmware-30-6.el7.noarch
alsa-firmware-1.0.28-2.el7.noarch
alsa-lib-1.1.3-3.el7.x86_64
alsa-tools-firmware-1.1.0-1.el7.x86_64
audit-2.7.6-3.el7.x86_64
audit-libs-2.7.6-3.el7.x86_64
authconfig-6.2.8-30.el7.x86_64
basesystem-10.0-7.el7.centos.noarch
bash-4.2.46-28.el7.x86_64

Notons que ce genre d’opération s’effectuera plutôt avec des tubes, que nous aborderons dans la prochaine leçon.

Enregistrer une séquence de commandes

Le caractère spécial ; du shell permet d’écrire plusieurs commandes sur une même ligne. Les commandes sont exécutées séquentiellement.

$ date ; pwd ; ls
sam. janv. 13 08:23:43 CET 2018
/home/kikinovak
config.txt message resultat rpms.txt rpms_vrac.txt

Si l’on cherche à enregistrer le résultat de cette séquence, on n’obtient pas le résultat escompté.

$ date ; pwd ; ls > sequence.txt
sam. janv. 13 08:24:50 CET 2018
/home/kikinovak

Les deux premières commandes affichent leur résultat à l’écran, et seule la dernière est redirigée.

La solution consiste ici à utiliser une paire d’accolades {...} pour regrouper les commandes.

$ { date ; pwd ; ls ; } > sequence.txt

Notez bien le caractère ; après la dernière commande.

Documentation

  • Christine Deffaix-Rémy – Programmation shell sous Unix/Linux, pp. 38 – 55
  • Cameron Newham – Learning the Bash shell, pp. 14 – 16
  • Carl Albing – Bash Cookbook – pp. 33 – 44

La suite au prochain numéro.

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

Expressions complexes

TerminalVoici le sixième volet de mon cours d’introduction au shell Bash. La dernière fois, nous avons vu la substitution de noms de fichiers. Aujourd’hui, nous abordons les expressions complexes (extended pattern matching dans la documentation anglophone).

Prérequis

Pour utiliser les expressions complexes en Bash, il faut préalablement activer l’option extglob avec la commande suivante.

$ shopt -s extglob

Créer une série de fichiers que nous utiliserons dans les exemples suivants.

$ touch fic fic866866.log fic866.log fic868.log readme.txt \
  fic866866866.log fic866868.log fic867.log fic.log typescript

L’expression ?(…)

L’expression ?(expression) sera présente 0 ou 1 fois.

Fichiers dont le nom commence par fic suivi de 0 ou 1 occurrence de 866, suivi de .log.

$ ls fic?(866).log
fic866.log fic.log

L’expression *(…)

L’expression *(expression) sera présente entre 0 et n fois.

Fichiers dont le nom commence par fic, suivi de 0 à n occurrence(s) de 866, suivi de .log.

$ ls fic*(866).log
fic866866866.log fic866866.log fic866.log fic.log

L’expression +(…)

L’expression +(expression) sera présente entre 1 et n fois.

Fichiers dont le nom commence par fic, suivi d’au moins une occurrence de 866, suivi de .log.

$ ls fic+(866).log
fic866866866.log fic866866.log fic866.log

L’expression @(…)

L’expression @(expression) sera présente exactement 1 fois.

Fichiers dont le nom commence par fic, suivi exactement d’une occurrence de 866, suivi de .log.

$ ls fic@(866).log
fic866.log

L’expression !(…)

L’expression !(expression) ne sera pas présente.

Fichiers dont le nom commence par fic, suivi d’une expression qui n’est pas la chaîne 866, suivi de .log.

$ ls fic!(866).log
fic866866866.log fic866866.log fic866868.log fic867.log fic868.log
fic.log

Fichiers dont le nom ne commence pas par fic.

$ ls !(fic*)
readme.txt typescript

Alternatives

Une barre verticale | à l’intérieur d’une expression complexe prend le sens de “ou bien”.

Fichiers dont le nom commence par fic, suivi de 866 ou 867, suivi de .log.

$ ls fic@(866|867).log
fic866.log fic867.log

Fichiers dont le nom commence par fic, suivi de 1 à n occurrence(s) de 866 ou 868, suivi de .log.

$ ls fic+(866|868).log
fic866866866.log fic866866.log fic866868.log fic866.log fic868.log

Documentation

  • Christine Deffaix-Rémy – Programmation shell sous Unix/Linux, pp. 34 – 37
  • Cameron Newham – Learning the Bash shell, p. 99
  • Carl Albing – Bash Cookbook, p. 122

Lire la suite : Les redirections

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