Planet Libre

Guillaume Vaillant : LDAP: déléguer l'authentificaiton à SASL

Suite du dernier artcile… 2 ans après. Pour plein de raison, je ne veux pas gérer les mots de passe de mes utilisateurs directement via le LDAP. Il existe des outils graphiques (comme ApacheDirectoryStudio) pour manipuler vite/bien/facilement un LDAP si on est allergique au LDIF, mais si on peut faire plus simple, et en limitant les intéractions avec les utilisateurs pour des problèmes idiots («j’ai oublié mon mot de passe suite à ma cuite d’hier soir»)…

Gravatar de Guillaume Vaillant
Original post of Guillaume Vaillant.Votez pour ce billet sur Planet Libre.

Morot : Mettre en forme du texte sous Bash

A chaque fois que je cherche à mettre du texte en forme pour mettre en valeur l’affichage de mes scripts sous bash je perds du temps retrouver mes petits. J’ai donc fini par faire ce petit script qui créé une palette facilitant le choix de la mise en forme.

Voici la sortie :

\\Users\\Julien\\Desktop\\bash-color-style-picker.png

Et pour le code :

#!/bin/bash

#man 4 console_codes

echo "### Colorisation ###"
for bg in {40..47} {100..107} 49 ; do
for fg in {30..37} {90..97} 39 ; do
echo -ne "\\e[${bg};${fg}m ${bg};${fg}\\e[${bg};${fg}m\\e[0m\\c"
done
echo ""
done
echo ""
echo "### Formattage ###"
echo ""
echo -e "\\e[0mNormal"
echo -e "\\e[1mGras\\e[0m"
echo -e "\\e[2mFaible\\e[0m"
echo -e "\\e[4mSouligné\\e[0m"
echo -e "\\e[5mClignotant\\e[0m"
echo -e "\\e[7mCouleurs inversées\\e[0m"
echo -e "\\e[8mMasqué\\e[0m"

exit 0

Gravatar de Morot
Original post of Morot.Votez pour ce billet sur Planet Libre.

Articles similaires

Full Circle Magazine FR : Bonne année !

Pour fêter le nouvel an, voici le numéro 140 du FCM en français ! Comme d'habitude, vous pouvez le télécharger ou le visionner sur notre page NUMÉROS ou le récupérer directement en cliquant sur l'image de couverture ci-dessous.

issue140fr.png

Vous n'avez jamais entendu parler de MilkyTracker ? C'est un programme musical dont le titre pourrait se traduire par PisteurLaiteux et avec lequel vous pouvez dessiner (oui, vous avez bien lu) votre propre musique !

Vous voulez essayer un hyperviseur ou, au moins apprendre ce que c'est ? En fait, comme vous verrez, l'Hyperviseur LXD est disponible dans les dépôts d'Ubuntu - le récupérer est aussi facile qu'un petit apt-get install.

Maintenant, en 2019, vous commencez à vous poser des questions sur les résultats du sondage FCM de 2018 ? Pas d'inquiétude, les réponses sont détaillées dans ce numéro.

Enfin, si un vrai jeu sous Python vous tente, vous serez emballé par la description de Unvisible, un jeu de cartes et de dés. En plus, comme il est écrit en Python, ceux qui connaissent bien le langage peuvent transformer le jeu - qui n'est pas terminé - à souhait...

Vous y trouverez tout cela et bien plus encore... Nous vous en souhaitons bonne lecture !

Ont participé à la traduction et la relecture du N° 140 : d52fr, qui, en plus, a créé le PDF avec Scribus - un grand merci, d52fr ! - et moi-même, AE

Gravatar de Full Circle Magazine FR
Original post of Full Circle Magazine FR.Votez pour ce billet sur Planet Libre.

Articles similaires

Miamondo : Un environnement de bureau tout en Python (acte II : le fond d’écran)

Bonjour, Après le premier épisode où je vous avais présenté le menu principal, me voici de retour! Et cette fois-ci, j'ai dans mon baluchon,  trois scripts qui génèrent : un fond d'écran avec une image fixe ou bien un fond d'écran choisi au hasard dans un répertoire et remplacé par un nouveau fond d'écran à... Lire la Suite →

Gravatar de Miamondo
Original post of Miamondo.Votez pour ce billet sur Planet Libre.

Articles similaires

genma : Secure-delete

Il y a quelques années, j'avais écrit un billet sur la commande Shred
Shred - effacer définitivement un fichier.

Mais cette commande ne permet que d'effacer des données de type ficher sur un disque dur mécanique. Pour aller plus loin, il existe un outil plus complet, secure-delete qui s'installe facilement

sudo apt-get install secure-delete

Et qui une fois installé apporte les commandes suivantes dans la ligne de commande (un terminal shell) :

-srm : Cette commande est utilisée pour supprimer des fichiers et des répertoires de votre disque dur. Un équivalent de Shred
-smem : un outil qui nettoie en toute sécurité la mémoire de l'ordinateur (RAM), qui peut contenir l'état des programmes en cours d'exécution ainsi que des données de programme sensibles, même après la mise hors tension de l'ordinateur. (pour contrer les attaques de type Cold boot).
-sfill : Efface toutes les données de l'espace libre sur votre disque. Pour s'assurer qu'il n'y a plus de fichiers récupérables sur le disque / la partition via des outils comme Photorec / TestDisk
-sswap : Efface toutes les données de la partition de swap.

On retrouvera toutes ces commandes sur un tutoriel en anglais Permanently Delete Files on Linux with Secure-Delete

A noter que le shred ne marche que pour des disques durs mécaniques (à plateau), les SSD étant à base de cellules, à part réduire prématurément la durée de vie du disque, l'effacement via écrire et écrire à différents endroits / différentes cellules et non effacer toujours le même espace comme c'est le cas d'un disque dur à l'ancienne. La solution pour les SSD est le chiffrement intégral du disque avec protection par phrase de passe pour protéger les données (qui sont vue comme du blob aléatoire si on ne déchiffre pas).

Et pour faire l'inverse, à savoir retrouver des données sur un disque dur, on pourra utiliser des outils comme TestDisk/Photorec ou
une distribution Linux spécialisée dans le forensic, Deft (analyse post-mortem, un peu ce que fait l'expert judiciaire Zythom)

Gravatar de genma
Original post of genma.Votez pour ce billet sur Planet Libre.

dada : Nextcloud, PHP-FPM, Nginx et Kubernetes




Ma première installation de Nextcloud dans Kubernetes était basée sur l'image Docker contenant Apache2. Aucun souci notable au niveau de la synchro des agendas, des fichiers ou encore des contacts. Par contre, la génération des miniatures des photos s'est révélée être un drame : Apache s'emballait et entraînait le nœud sur lequel il tournait avec lui, dans la tombe. Il me fallait une solution, j'ai donc décidé de changer de conteneur et de prendre celui basé sur PHP-FPM.
Un pod avec deux conteneursOn entend souvent la rumeur racontant qu'un pod ne contient qu'un conteneur. C'est souvent vrai, mais c'est aussi faux. Dans l'exemple qui va suivre, le pod gérant Nextcloud contiendra le conteneur officiel de Nextcloud et un conteneur Nginx.ContextePour suivre, sachez que mon cluster, celui grâce auquel vous lisez ces quelques lignes, gère son système de fichier avec Rook, dont j'ai déjà parlé ici. Mes nœuds sont chez Hetzner, ce sont des CX21, du cloud public donc, et mes services sont exposés en NodePort derrière un Nginx configuré en LoadBalancer. Maintenant que vous savez ça, on peut y aller.
Le DeploymentOn va commencer par balancer le Yaml qui marche :
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nextcloud-deployment
spec:
  selector:
    matchLabels:
      app: nextcloud
  replicas: 1
  template:
    metadata:
      labels:
        app: nextcloud
    spec:
      containers:
      - name: nginx
        image: nginx:1.15
        ports:
        - containerPort: 80
        volumeMounts:
        - name: nginx-config
          mountPath: /etc/nginx/nginx.conf
          subPath: nginx.conf
        - name: pv-nextcloud
          mountPath: /var/www/html
        lifecycle:
          postStart:
            exec:
             command: ["bin/sh", "-c", "mkdir -p /var/www/html"]
      - name: nextcloud
        image: nextcloud:14.0-fpm
        ports:
        - containerPort: 9000
        volumeMounts:
        - name: pv-nextcloud
          mountPath: /var/www/html
        resources:
          limits:
            cpu: "1"
      volumes:
      - name : nginx-config
        configMap:
           name: nginx-config
      - name: pv-nextcloud
        flexVolume:
          driver: ceph.rook.io/rook
          fsType: ceph
          options:
            fsName: myfs
            clusterNamespace: rook-ceph
            path: /nextcloud2

Il n'y a pas le Service associé pour la simple et bonne raison que chacun fait comme il le veut. Si vous êtes chez DigitalOcean, OVH ou chez un des GAFAM qui propose du k8s, vous aurez un LoadBalancer qui va bien. Si vous êtes comme moi, vous êtes réduit à faire du NodePort.

Ce qu'il faut comprendreVous remarquerez qu'il y a deux conteneurs : Nginx et Nextcloud-FPM. Nginx écoute sur le port 80 et va router le trafic à travers vers le port 9000 du conteneur de Nextcloud.
Nginx      - name: nginx
        image: nginx:1.15
        ports:
        - containerPort: 80
        volumeMounts:
        - name: nginx-config
          mountPath: /etc/nginx/nginx.conf
          subPath: nginx.conf
        - name: pv-nextcloud
          mountPath: /var/www/html
        lifecycle:
          postStart:
            exec:
             command: ["bin/sh", "-c", "mkdir -p /var/www/html"]On va faire gober à Nginx deux points de montage : sa configuration et les sources de Nextcloud. Sans les sources de l'application, Nginx ne pourra pas avoir accès aux fichiers PHP, et ne servira donc à rien. On va donc prendre le point de montage originalement dédié à Nextcloud pour le monter une deuxième fois dans un deuxième conteneur, celui de Nginx.
LifecycleRemarquez la présence de la section lifecycle, elle permet d’exécuter ce que vous voulez au démarrage du conteneur. Quand j'apprenais à me servir de ce couple, je ne comprenais pas pourquoi Nginx ne voulait pas correctement fonctionner. J'ai passé du temps à comprendre que le conteneur Nginx et le conteneur Nextcloud n'avait pas le même docRoot :
  • Nginx : /srv/html
  • Nextcloud : /var/www/html
Comprenez que les requêtes Nginx allaient cherchez des fichiers dans /srv/html/blabla.php quand Nextcloud annonçait la présence de ses sources dans /var/www/html/blabla.php. Le bordel.
C'est là que je n'ai trouvé pas idiot l'idée de créer le chemin manquant au démarrage du pod avec un postStart. Du coup, j'avais Nginx et Nextcloud au diapason. Il est sans doute possible de configurer Nginx pour surcharger son docRoot, mais c'était l'occasion de jouer avec des commandes en amont de la création d'un conteneur.
Les deux points de montageOn a donc un point de montage pour les sources de Nextcloud :        - name: pv-nextcloud
          mountPath: /var/www/htmlEt un point de montage pour la configuration de Nginx :        - name: nginx-config
          mountPath: /etc/nginx/nginx.conf
          subPath: nginx.conf
Là aussi, j'ai perdu un peu de temps avant de comprendre qu'il fallait balancer toute la configuration de Nginx et pas seulement ce que j'ai l'habitude de mettre dans les sites-enabled. C'est du moins à faire quand on écrase le nginx.conf du pod. En y réfléchissant, c'est sans doute plus simple de modifier le point montage pour n'ajouter qu'un fichier dans le fameux sites-enabled.

Pour gérer la configuration de Nginx, je passe par une ConfigMap :kind: ConfigMap
apiVersion: v1
metadata:
  name: nginx-config
data:
  nginx.conf: |
    worker_processes  1;

    error_log  /var/log/nginx/error.log warn;
    pid        /var/run/nginx.pid;

    events {
        worker_connections  1024;
    }

    http {
        include       /etc/nginx/mime.types;
        default_type  application/octet-stream;

        log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                          '$status $body_bytes_sent "$http_referer" '
                          '"$http_user_agent" "$http_x_forwarded_for"';

        access_log  /var/log/nginx/access.log  main;

        sendfile        on;
        #tcp_nopush     on;

        keepalive_timeout  65;

        #gzip  on;

        server {
            listen 80;

            add_header X-Content-Type-Options nosniff;
            add_header X-XSS-Protection "1; mode=block";
            add_header X-Robots-Tag none;
            add_header X-Download-Options noopen;
            add_header X-Permitted-Cross-Domain-Policies none;
            add_header Referrer-Policy no-referrer;

            root /var/www/html;

            location = /robots.txt {
                allow all;
                log_not_found off;
                access_log off;
            }

            location = /.well-known/carddav {
                return 301 $scheme://$host/remote.php/dav;
            }
            location = /.well-known/caldav {
                return 301 $scheme://$host/remote.php/dav;
            }

            # set max upload size
            client_max_body_size 10G;
            fastcgi_buffers 64 4K;

            # Enable gzip but do not remove ETag headers
            gzip on;
            gzip_vary on;
            gzip_comp_level 4;
            gzip_min_length 256;
            gzip_proxied expired no-cache no-store private no_last_modified no_etag auth;
            gzip_types application/atom+xml application/javascript application/json application/ld+json application/manifest+json application/rss+xml application/vnd.geo+json application/vnd.ms-fontobject application/x-font-ttf application/x-web-app-manifest+json application/xhtml+xml application/xml font/opentype image/bmp image/svg+xml image/x-icon text/cache-manifest text/css text/plain text/vcard text/vnd.rim.location.xloc text/vtt text/x-component text/x-cross-domain-policy;

            location / {
                rewrite ^ /index.php$request_uri;
            }

            location ~ ^/(?:build|tests|config|lib|3rdparty|templates|data)/ {
                deny all;
            }
            location ~ ^/(?:\\.|autotest|occ|issue|indie|db_|console) {
                deny all;
            }

            location ~ ^/(?:index|remote|public|cron|core/ajax/update|status|ocs/v[12]|updater/.+|ocs-provider/.+)\\.php(?:$|/) {
                fastcgi_split_path_info ^(.+\\.php)(/.*)$;
                include fastcgi_params;
                fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
                fastcgi_param PATH_INFO $fastcgi_path_info;
                # fastcgi_param HTTPS on;
                #Avoid sending the security headers twice
                fastcgi_param modHeadersAvailable true;
                fastcgi_param front_controller_active true;
                fastcgi_pass 127.0.0.1:9000;
                fastcgi_intercept_errors on;
                fastcgi_request_buffering off;
            }

            location ~ ^/(?:updater|ocs-provider)(?:$|/) {
                try_files $uri/ =404;
                index index.php;
            }

            # Adding the cache control header for js and css files
            # Make sure it is BELOW the PHP block
            location ~ \\.(?:css|js|woff|svg|gif)$ {
                try_files $uri /index.php$request_uri;
                add_header Cache-Control "public, max-age=15778463";
                add_header X-Content-Type-Options nosniff;
                add_header X-XSS-Protection "1; mode=block";
                add_header X-Robots-Tag none;
                add_header X-Download-Options noopen;
                add_header X-Permitted-Cross-Domain-Policies none;
                add_header Referrer-Policy no-referrer;

                # Optional: Don't log access to assets
                access_log off;
            }

            location ~ \\.(?:png|html|ttf|ico|jpg|jpeg)$ {
                try_files $uri /index.php$request_uri;
                # Optional: Don't log access to other assets
                access_log off;
            }
        }

    }Eh oui, il y a tout dedans. Ça déforme l'affichage de ce billet, m'enfin. C'est une configuration Nginx classique.
On peut quand même s'arrêter sur la configuration du fastcgi_pass : il tape sur le 127.0.0.1 et le port 9000 du conteneur Nextcloud. Je n'ai pas encore gratté pour comprendre le pourquoi du comment mais je suppose que les deux conteneurs tournant dans le réseau du pod, ils se comportent comme deux services dans une seule et même machine. À confirmer.
On apply tout çaAttention ! Avant de balancer le Deployment, balancez le yaml de la ConfigMap. Sans ça, Nginx ne chargera pas votre configuration !dada@k8smaster1:~$ kubectl apply -f configmap.yaml
dada@k8smaster1:~$ kubectl apply -f nextcloud.yamlSi tout se passe bien, vous devriez pouvoir voir ça :dada@k8smaster1:~$ kubectl get pods
nextcloud-deployment-d6cbb8446-87ckf   2/2     Running   0          15hRemarquez que Kubernetes vous montre bien qu'il y a deux conteneurs dans ce pod : 2/2.
Pour aller plus loinJe ne parle pas des vérifications de l'état des conteneurs. Il faudrait placer des sondes liveness et readness pour parfaitement vérifier l'état des conteneurs. Sans ça, si l'un des services tombe, Kubernetes ne sera pas forcément en mesure de le détecter et de relancer le pod.Il est aussi possible, pour respecter le concept de micro-service, de ne pas concaténer deux conteneurs dans un seul pod mais de faire un pod par conteneur et des services associés. Ça demande plus de travail pour un résultat qui, dans mon cas, n'apporte pas grand chose.

Gravatar de dada
Original post of dada.Votez pour ce billet sur Planet Libre.

Journal du hacker : Liens intéressants Journal du hacker semaine #2

Pour la seconde semaine de l'année 2019, voici 14 liens intéressants que vous avez peut-être ratés, relayés par le Journal du hacker, votre source d’informations pour le Logiciel Libre francophone !

Pour ne plus rater aucun article de la communauté francophone, voici :

De plus le site web du Journal du hacker est « adaptatif (responsive) ». N’hésitez pas à le consulter depuis votre smartphone ou votre tablette !

Le Journal du hacker fonctionne de manière collaborative, grâce à la participation de ses membres. Rejoignez-nous pour proposer vos contenus à partager avec la communauté du Logiciel Libre francophone et faire connaître vos projets !

Et vous ? Qu’avez-vous pensé de ces articles ? N’hésitez pas à réagir directement dans les commentaires de l’article sur le Journal du hacker ou bien dans les commentaires de ce billet :)

Gravatar de Journal du hacker
Original post of Journal du hacker.Votez pour ce billet sur Planet Libre.

Articles similaires

Renault : Appel à rejoindre Borsalinux-fr

L'association

Logo.png

Borsalinux-fr est l'association qui gère la promotion de Fedora dans l'espace francophone. Nous constatons depuis quelques années une baisse progressive des membres à jour de cotisation et de volontaires pour prendre en main les activités dévolues à l'association.

Nous lançons donc un appel à nous rejoindre afin de nous aider.

L'association est en effet propriétaire du site officiel de la communauté francophone de Fedora, organise des évènements promotionnels comme les Rencontres Fedora régulièrement et participe à l'ensemble des évènements majeurs concernant le libre à travers la France principalement.

Pourquoi nous lançons cet appel ?

Nous constatons depuis 2012 ou 2013 une baisse progressive du nombre d'adhérents et en particulier de membres actifs au sein de l'association voire même de la communauté francophone dans son ensemble. Nous atteignons aujourd'hui une phase critique où l'activité est portée essentiellement par une poignée de personnes. Et certaines personnes actives aujourd'hui souhaitent baisser le rythme pour s'impliquer dans d'autres projets au sein de Fedora comme ailleurs.

Ainsi il devient difficile de maintenir notre activité dans de bonnes conditions. Ce qui nuit à notre visibilité d'une part, mais aussi à l'attractivité du projet auprès des francophones d'autres part.

Activités possibles

Dans l'ensemble, les besoins les plus urgents sont au niveau de l'association où le renouvellement des membres dans le conseil d'administration est nécessaire. La traduction est aussi un domaine qui commence à être à l'arrêt. Et nous souhaitons aussi un élargissement de notre ancrage local. Actuellement les évènements de l'axe Bruxelles - Paris - Lyon - Nice sont assez bien couverts. En dehors nous avons des difficultés croissantes à envoyer quelqu'un sur place dans de bonnes conditions comme au Capitole du Libre à Toulouse ou aux RMLL suivant sa localisation.

Si vous aimez Fedora, et que vous souhaitez que notre action perdure, vous pouvez :

  • Adhérer à l'association : les cotisations nous aident à produire des goodies, à nous déplacer pour les évènements, à payer le matériel ;
  • Postuler à un poste du Conseil d'Administration, en particulier pour la présidence, le secrétariat et la trésorerie ;
  • Participer à la traduction, sur le forum, sur les listes de diffusion, à la réfection de la documentation, représenter l'association sur différents évènements francophones ;
  • Concevoir des goodies ;
  • Organiser des évènements type Rencontres Fedora dans votre ville.

Nous serions ravis de vous accueillir et de vous aider dans vos démarches. Toute contribution, même minime, est appréciée.

Si vous souhaitez avoir un aperçu de notre activité, vous pouvez participer à nos réunions hebdomadaires chaque lundi soir à 20h30 (heure de Paris) sur IRC (canal #fedora-meeting-1 sur Freenode).

Vous souhaitez nous aider ?

N'hésitez pas à nous contacter pour nous faire part de vos idées et de ce que vous souhaitez faire.

Par ailleurs le samedi 9 février 2019 à 14h à Paris (dans les locaux de la Fondation des Droits de l'Homme), l'Assemblée Générale Ordinaire procèdera au renouvellement du Conseil d'Administration et du Bureau de l'association. C'est l'occasion de se présenter et d'intégrer le fonctionnement de l'association ! C'est vraiment le moment idéal pour se tenir au courant de ce qui se passe et de présenter ses idées. Si vous ne pouvez pas venir sur place, n'hésitez pas à nous contacter avant pour nous communiquer vos idées et votre participation à la communauté francophone.

Gravatar de Renault
Original post of Renault.Votez pour ce billet sur Planet Libre.

Articles similaires

La vache libre : Installer Archlinux pour ne pas rater sa vie

Je reconnais que le titre de ce billet est un brin putaclic, mais je sais que vous ne m’en tiendrez sans doute pas rigueur. Ayant installé une Archlinux il y a quelques jours, j’ai eu envie de vous parler de cette expérience afin de pourquoi pas vous conseiller d’en faire autant. Outre l’aspect purement technique de cette installation (que je n’évoquerai pas ou très peu ici), je pense qu’arrivé à un certain stade de votre parcours sous GNU/Linux cette étape est franchement nécessaire. Alors vous allez me dire à quoi bon se casser la tête avec un truc pareil alors qu’en quelques clics je peux faire en faire autant avec une distribution grand public? Vous avez raison et si vous le pensez vraiment c’est que ce billet n’est pas pour vous. Vous êtes sous GNU/linux, ce que vous avez vous va très bien, ça tourne, c’est beau et l’aspect technique ne vous intéresse pas. Soit. Il n’y a rien de mal à ça dans la mesure où vous avez déjà fait le choix le plus important, à savoir tourner sous GNU/Linux. Je vous en félicite. Pour les autres, ceux qui aimeraient aller plus loin mais qui hésitent encore car ils ont lu partout que c’était difficile, je dirais que vous ne devriez plus attendre. Faites-le.

En ce qui me concerne par exemple, j’ai passé le cap des 10 ans en monoboot sous GNU/Linux et si je devais me catégoriser je dirais qu’à l’heure actuelle je ne suis qu’un utilisateur final. Certes j’ai des connaissances un peu avancées dans le sens où par exemple, je connais la différence entre un gestionnaire de fenêtres et un environnement de bureau. C’est peut-être évident mais ne rigolez-pas, certains utilisateurs pensent encore qu’il s’agit la même chose! Plus globalement encore quand on me parle d’un truc ou l’autre sous GNU/Linux je sais à peu près de quoi il s’agit, même si dans les faits je ne comprend pas toujours comment ça marche. En tant qu’utilisateur final d’ailleurs je m’en fiche un peu, car l’essentiel pour moi c’est que ça tourne! Je suis également assez avancé pour ne pas avoir peur d’entrer quelques lignes dans une console, même si là encore je ne comprends pas toujours ce que je fais ou plus exactement, ce qu’il se passe. Une fois encore je m’en fiche un peu, du moment que ça tourne et que cela me semble safe. Il ne s’agit pas non plus d’entrer n’importe quoi et de tout flinguer comme un âne.

Bref, vous l’avez compris je ne suis pas un crack. J’utilise GNU/Linux au quotidien, c’est génial, je m’en sort parfaitement et quelque part je pense être assez bon voir même très bon, puisque après tout j’y suis depuis dix ans et que je n’en ai pas bougé. Sauf que non, c’est pas aussi simple que ça. Si je suis bon ou plus exactement si j’ai l’impression de l’être, c’est que des milliers de développeurs, de reporteurs de bugs, de testeurs, de traducteurs, de rédacteurs de docs etc, travaillent dans l’ombre (souvent bénévolement) pour que ça tourne et surtout, pour que cela soit simple pour moi.

Le résultat de ce travail fait que quand vous prenez une distribution grand public aujourd’hui, il suffit de la télécharger, de la coller sur un support bootable et de lancer le bouzin. Passé cette étape vous êtes pris en main par tout un ensemble d’outils et de scripts, conçus dans le but de vous permettre de procéder à une installation propre en seulement quelques clics. Les installeurs vont vous guider pas à pas, les GUI vont vous éviter d’entrer tout un tas de lignes de commandes, les fichiers de configurations sont écrits et mis à la bonne place, tout est déjà bien empaqueté et globalement, vous n’aurez plus qu’à effectuer quelques petits réglages pour mettre tout ça à votre sauce. Le plus dur dans une installation finalement, c’est de ne pas oublier de boire son kawa avant qu’il ne refroidisse.

Tout ça c’est bien, mais le revers de la médaille c’est que vous pourrez passer 10 sous GNU/Linux sans finalement connaître ne serait-ce qu’un peu le système que vous utilisez au quotidien. En tant qu’utilisateur final ça me convient la plupart du temps, mais j’avoue que j’ai toujours un peu regretté de ne faire que survoler les choses et de ne pas en savoir plus. C’est là qu’installer Archlinux pris du sens pour moi, dans la mesure où il allait falloir mettre les pattes dans le cambouis.

Alors que ce soit clair je ne vais pas détailler ici les étapes de mes séances d’installation, car cela ne vous apporterais rien et que ce n’est pas l’objectif de ce billet. Pour vous la faire courte là-dessus j’ai utilisé une Vbox, j’ai procédé à une install BIOS, j’ai pris une vieille image i686 (et oui je suis encore en 32 bits) et globalement j’ai du recommencer à peu près une dizaine de fois sur environ une semaine, avant d’en arriver à quelque chose de potable et à une installation à peu près complète. 

Ce qui a été super intéressant en revanche, c’est qu’en installant cette distribution j’en ai appris plus sur GNU/Linux en une semaine, qu’en 10 ans d’utilisation quasi passive. En effet avant je connaissais des outils ou des commandes tel(le)s que chroot, pwd, cfdisk, mkfs, mount, fdisk, mkinitcpio mkswap, etc, mais je ne les avais réellement utilisé(e)s qu’au travers d’interfaces graphiques, sans parfois même m’en rendre compte et sans chercher vraiment à comprendre ce qu’elle faisaient. Le fait de devoir les entrer à la main a réellement mis en évidence ce qu’elles faisaient, pourquoi elles le faisaient et pourquoi à ce moment précis. Alors bien entendu il y a des étapes logiques! Personne à priori n’arrivera jamais à installer quoi que ce soit sur une partition non formatée, ou qui n’est pas montée correctement. De ce côté là je n’ai pas découvert le feu. Non. En revanche le simple fait de procéder manuellement à un partitionnement, à un formatage, à la création d’un swap et de monter tout ça sois-même en comprenant ce que l’on fait et ce qu’il se passe, et bien c’est super cool. Après tout il s’agit là des fondations de notre système non? Ce n’est donc pas rien que de savoir les poser à la patte.

J’en ai appris également beaucoup plus sur la structure de mon système. Sur son arborescence (même si cela peut varier d’une distribution à l’autre), sur les modules qui font fonctionner tel ou tel composant système ou hardware, sur quand et où les installer etc etc… J’ai aussi appris à savoir où trouver et comment éditer tel ou tel fichier de configuration avec nano, afin de faire par exemple des trucs aussi cons que de passer le clavier en français, gérer l’horloge ou choisir les miroirs de téléchargement les plus rapides. En gros j’ai appris une foule de petites choses vraiment super intéressantes et devoir chercher d’où venaient les erreurs que je faisait s’est avéré tout aussi instructif.

Maintenant je peux dire que je connais vraiment beaucoup mieux le système que j’utilise au quotidien et j’en suis très satisfait car cela me sera sans doute utile un jour où l’autre. Je reste cependant lucide. Je sais bien qu’Archlinux n’est pas un système fait pour moi à l’heure actuelle et je suis bien conscient qu’il ne s’agissait là que de la première marche. La plus facile. Dans les faits je suis encore bien incapable d’administrer une telle distribution au quotidien, car il ne faut pas se le cacher c’est à ce niveau que ce situe la vraie difficulté. En revanche désormais je le sais, avec un peu de travail je peux finir par y arriver. Je sais aussi que même si je m’arrête en route, j’en sortirai moins bête et mieux armé pour maîtriser mon système. Dans tous les cas cette installation ça a été que du bon et c’est pour cela que je vous incite à en faire autant.

Gardez toutefois à l’esprit que je ne vous dis pas de tout larguer et de vous coller sous Archlinux hein! Je parle bien d’installation et non d’utilisation. Lancez-vous sur une vieille bécane ou dans une Vbox et n’ayez pas peur car au final vous allez-voir, ce n’est pas si compliqué. Techniquement je dirais même que c’est trois fois rien, mais ça apporte beaucoup. 

Alors si ça vous avez l’impression d’avoir raté votre vie de GNU/Linuxien, vous pouvez vous lancer en vous appuyant sur l’excellent guide d’installation mis à disposition et maintenu par Tonton Fred. Celui-ci constitue une très bonne base pour commencer et devrait s’avérer suffisant pour que vous arriviez à finaliser votre installation sans trop de problèmes.

Si cela ne suffit pas vous pouvez également vous appuyer sur le wikiArch du site officiel francophone. Vous y trouverez tout le reste.

Amusez-vous bien et bonne install!

Gravatar de La vache libre
Original post of La vache libre.Votez pour ce billet sur Planet Libre.

Articles similaires

Simon Vieille : Courier-imap vers Dovecot : "Renaming not supported across conflicting directory permissions"

Il y a des années de ça, je me suis lancé dans l'aventure de l'hébergement à la maison avec notamment la gestion de mes mails. Dès le départ, je suis parti sur de la Debian GNU/Linux et j'ai installé les outils Postfix et Courier pour gérer les couches SMTP et IMAP.

Cette semaine, j'ai remplacé Courier par Dovecot qui est plus complet, plus simple à configurer et au cœur de beaucoup de documentations. J'avais également besoin d'intégrer Sieve pour gérer des règles de tri coté serveur.

Je ne détaillerai pas la procédure de migration car j'ai pioché dans pas mal d'articles. Globalement, tout s'est très bien passé et ça été transparent pour les quelques utilisateurs du serveur. Cependant, je me suis confronté à une erreur lorsque qu'ai voulu supprimer un dossier via mon client Thunderbird :

[CANNOT] Renaming not supported across conflicting directory permissions

Après quelques recherches, il s'avère que les répertoires Maildir des utilsateurs, générés avec la commande maildirmake ~/Maildir, ont un chmod 700 et que par défaut, lors de la création d'un répertoire, son chmod est 755. Dans la version 2.2.*, Dovecot vérifie que les chmod des dossiers correspondent pour valider la suppression et comme ce n'est pas le cas, cette erreur apparait.

Ainsi, quand un répertoire est créé dans l'arborescence de la boite mail, il ne peut plus être supprimé sans faire un chmod 700 ~/Maildir/.LeRepertoire. Pour résoudre le souci et faire en sorte que le chmod soit le bon, j'ai simplement joué avec les ACL. Pour chaque utilisateur hébergé, j'ai lancé cette commande :

$ setfacl -d --set u::rwx,g::-,o::- ~/Maildir/

Ainsi, lorsqu'un répertoire est créé dans ~/Maildir, son chmod est par défaut en 700 et je peux le supprimer via Dovecot au travers de mon client Thunderbird !

J'en ai également profité pour faire un wrapper sur le serveur :

#!/bin/sh maildirmake.dovecot "$1" setfacl -d --set u::rwx,g::-,o::- "$1"

Gravatar de Simon Vieille
Original post of Simon Vieille.Votez pour ce billet sur Planet Libre.

Articles similaires

blog-libre : openpyn, surcouche à OpenVPN pour NordVPN

J’ai pris un abonnement NordVPN de 2 ans fin décembre 2017. Il me sert principalement à télécharger et parfois à changer/masquer mon adresse IP réelle pour un besoin ou un autre. J’utilise toujours le même petit script pour contrôler la connexion VPN. J’ai constaté quelques soucis dans mon utilisation.

Des défauts à corriger

Voici l’alias que j’utilisais avant dans ~/.bash_aliases (vous pouvez le mettre directement dans ~/.bashrc).

alias vpn='(sudo openvpn --config $(find /etc/openvpn/ovpn_udp -type f | shuf -n 1) --auth-user-pass ~/.config/nordvpn_auth >/dev/null 2>&1 &); while ! ip a show dev tun0 up >/dev/null 2>&1; do sleep 0.5; done && ~/Scripts/myip.sh' --config $(find /etc/openvpn/ovpn_udp -type f | shuf -n 1) # Je prends un fichier de config au hasard dans le dossier /etc/openvpn/ovpn_udp --auth-user-pass ~/.config/nordvpn_auth # J'indique mes identifiants NordVPN dans le fichier ~/.config/nordvpn_auth (chmod 600) >/dev/null 2>&1 # Je redirige les flux de sortie standard et d'erreur vers /dev/null while ! ip a show dev tun0 up >/dev/null 2>&1; do sleep 0.5; done # Tant que l'interface tun0 (VPN) n'est pas up, on boucle && ~/Scripts/myip.sh # Dès que l'interface tun0 est up (&&) on lance le script myip.sh

Évidemment cet alias est le résultat de choix personnels : 1/ Je lance un fichier de config au hasard (donc je me connecte à un serveur random chez NordVPN) afin d’avoir une IP différente à chaque fois. Dans les faits j’ai bien une IP différente mais je me retrouve souvent avec une bande passante en download minable, je dois donc relancer 3-4 fois le VPN pour arriver à une vitesse de téléchargement convenable 2/ Parfois la connexion VPN ne se faisait pas, j’utilisais alors pko (alias pko='sudo pkill openvpn') pour tuer le VPN puis je relancais vpn. Je n’ai jamais creusé pourquoi (flemme) et puis j’envoie les flux de sortie et d’erreur vers /dev/null 3/ J’aurais pu affiner mon find pour lancer uniquement des connexions VPN us ou uk par exemple (mais ça ne garantit en rien que la vitesse de téléchargement soit correcte)

Le DNS leak (fuite DNS) est un autre gros morceau/problème, OpenVPN laisse fuiter les requêtes DNS. Concrètement votre VPN est up, vous surfez et votre adresse IP est différente de celle de votre domicile. Tout va bien ! Sauf que pour les requêtes DNS, vous interrogez le serveur DNS de votre fournisseur internet. C’est mieux expliqué ici (en Anglais), le schéma suivant me semble explicite (ISP = Internet Service Provider = Fournisseur d’accès à Internet = FAI).

openpyn pour vous servir

Au bout d’un moment le souci 1/ a commencé à me gonfler et je me suis mis en recherche d’une solution (je pensais initialement jeter un œil aux infos proposées par l’API de NordVPN comme la latence). Je suis tombé sur openpyn un petit programme Python3 en GPLv3 qui propose pas mal de choses mais pour NordVPN :

  • Choix automatique du « meilleur » serveur VPN basé sur la latence et l’encombrement du serveur notamment
  • Prévention du DNS leak
  • Création du service systemd si l’on souhaite que la connexion VPN soit lancée dès le démarrage
  • Kill switch (expérimental) afin de stopper toute connexion dès que la connexion VPN tombe pour éviter qu’on découvre notre adresse IP réelle
  • Téléchargement et mises à jour automatique des fichiers de config OpenVPN de NordVPN
  • Possibilité de choisir des serveurs spécifiques chez NordVPN (« Netflix » --netflix, « Peer To Peer » --p2p, « Dedicated IP » --dedicated, « Tor Over VPN » --tor, « Double VPN » --double, « Anti DDos » --anti-ddos)
  • Et d’autres features, précisons qu’il prend en charge les options OpenVPN (-o)

Après un pip3 install openpyn (éventuellement précédé de apt install openvpn unzip wget python3-setuptools python3-pip), on lance un openpyn --init qui va vous demander les identifiants de connexion à NordVPN et votre pays par défaut (si j’ai bien compris pour le service systemd, moi je m’en sers pas donc je m’en fous). Maintenant il suffit juste de openpyn uk pour qu’il se connecte au « meilleur » serveur VPN du Royaume-Uni (United Kingdom) par exemple. Voici la sortie.

openpyn uk According to NordVPN, Least Busy 10 Servers in UK With 'Load' Less Than 70 Which Support OPENVPN-UDP Are: [['uk464', 4], ['uk477', 4], ['uk862', 4], ['uk563', 5], ['uk569', 5], ['uk842', 5], ['uk859', 5], ['uk322', 6], ['uk441', 6], ['uk562', 6]] Pinging Server uk464 min/avg/max/mdev = [12, 12, 12, 0] Pinging Server uk477 min/avg/max/mdev = [11, 11, 12, 0] Pinging Server uk862 min/avg/max/mdev = [11, 11, 11, 0] Pinging Server uk563 min/avg/max/mdev = [9, 10, 11, 0] Pinging Server uk569 min/avg/max/mdev = [10, 10, 10, 0] Pinging Server uk842 min/avg/max/mdev = [10, 11, 13, 1] Pinging Server uk859 min/avg/max/mdev = [10, 11, 11, 0] Pinging Server uk322 min/avg/max/mdev = [10, 10, 11, 0] Pinging Server uk441 min/avg/max/mdev = [10, 10, 11, 0] Pinging Server uk562 min/avg/max/mdev = [9, 10, 10, 0] Top 10 Servers with Best Ping Are: ['uk563', 'uk569', 'uk322', 'uk441', 'uk562', 'uk477', 'uk862', 'uk859', 'uk842', 'uk464'] Out of the Best Available Servers, Chose uk563 2019-01-12 10:34:26 [SUCCESS] CONNECTING TO SERVER uk563 ON PORT udp 2019-01-12 10:34:26 [SUCCESS] Your OS 'linux' has systemd-resolve running, using it to update DNS Resolver Entries

Les logs openpyn se trouvent dans /var/log/openpyn. Les identifiants de connexion sont stockés dans /usr/local/lib/python3.6/dist-packages/openpyn/credentials.

Quelques tests et vérifications plus tard

Je suis en fibre 100M, j’étais satisfait à partir de 50M une fois la connexion VPN effectuée et mesurée avec mon petit script. Maintenant avec openpyn je tourne régulièrement à 90M, certes le changement d’IP n’est plus d’actualité mais il me suffit de lancer openpyn avec un autre pays si besoin. Concernant le point 2/ (parfois la connexion VPN ne se faisait pas), résolu. Je pense que c’est lié au fait que openpyn relance automatiquement une connexion VPN en cas d’erreurs, il gère également une sorte de failover si la connexion VPN s’arrête il passe au « meilleur » serveur suivant.

Deux sites de référence pour « vérifier » les fuites DNS et les infos vues par les sites que l’on visite : IPLEAK et DNS leak. Je vous conseille de tester un « avant » openpyn et un « après » pour confirmer que ça fonctionne et comprendre ce qui change. openpyn fait le job, OpenVPN seul non.

Afin d’être plus précis sur le DNS leak d’OpenVPN, il est possible de fixer les fuites DNS mais je résumerais en disant que c’est compliqué sur Linux. L’option block-outside-dns existe mais « Block DNS servers on other network adapters to prevent DNS leaks. This option prevents any application from accessing TCP or UDP port 53 except one inside the tunnel. It uses Windows Filtering Platform (WFP) and works on Windows Vista or later. This option is considered unknown on non-Windows platforms and unsupported on Windows XP, resulting in fatal error ». Beaucoup de solutions sont proposées sur le net, certaines avec iptables, d’autres en modifiant le fichier de config .ovpn, des scripts, utiliser votre propre serveur DNS… bref un peu de boulot à prévoir pour trier les bonnes solutions (et ensuite celles qui sont simples à mettre en œuvre par rapport à nos cas d’utilisation).

Config actuelle et prochaine étape

Mon alias dorénavant est alias vpn='(openpyn uk >/dev/null 2>&1 &); while ! ip a show dev tun0 up >/dev/null 2>&1; do sleep 0.5; done && ~/Scripts/myip.sh'.

Dans la sphère privée (pas pro), je considère que le couple OpenVPN + openpyn + NordVPN est ce qu’il y a de mieux actuellement (pour des usages comme le téléchargement, d’autres problèmatiques comme l’anonymat strict trouveront une solution avec Tor). Je vous rappelle que WireGuard est l’OpenVPN killer (ce que je confirme même si il ne fait pas « autant » de choses) mais qu’il est toujours en Work in Progress. Il devrait être intégré au noyau probablement cette année.

Oh tiens NordVPN bosse sur le support de WireGuard, quelle bonne idée ;)

Tcho les filles !

Gravatar de blog-libre
Original post of blog-libre.Votez pour ce billet sur Planet Libre.

genma : Vorta, interface graphique à Borg

Présentation de Vorta

Vorta est une interface graphique / un client du logiciel de sauvegarde Borg pour les postes de travail sous macOS X et différentes distributions GNU/Linux. Le but est donc d'intégrer BorgBackup à votre environnement de bureau

Dit autrement, Vorta est à Borg ce que GRsync est à Rsync : une interface graphique complète pour lancer graphiquement une sauvegarde avec Borg.

Le prérequis à son usage et bien évidemment d'avoir compris comment Borg marchait, pour savoir quels champs remplir et le pourquoi de tel ou tel option dans cette interface graphique. Le présent billet n'est ni un tutoriel sur Borg, ni un tutoriel sur Vorta. Je me contente de faire un retour d'expérience sur Vorta.

Le projet est disponible sur Github : https://github.com/borgbase/vorta

Dans la documentation il est indiqué qu'un simple

pip3 install vorta


suffit à l'installer.

Sur mon Ubuntu 18.04, j'ai rencontré des erreurs et il semble que les prérequis à l'installation soit de faire :


pip3 install PyQt5
pip3 install keyring==12.0.0 --force-reinstall

C'est donc encore en beta, la peinture n'est pas fraîche...

Quelques astuces

Pour le lancer, il faut le faire via la commande

vorta --foreground

car sinon aucun interface graphique n'apparaît à l'écran.

Quelques tests que j'ai fait

Par défaut, Vorta ne marche pas sur un répertoire Borg existant pour lequel on n'a pas de phrase de passe (pas de chiffrement de la sauvegarde) : le chiffrement est donc obligatoire en utilisant Vorta.

La création d'un nouveau dépôt depuis l'interface et les sauvegardes dans ce dernier marchent.

J'ai fait une comparaison de l'espace pris pour une même sauvegarde (de /home) avec une commande Borg manuelle versus une sauvegarde faite avec Vorta et on arrive à la même taille. Ce qui est parfaitement logique car on aura alors les mêmes options... Vorta n'est donc bien qu'une interface graphique à Borg.

Quelques captures d'écran ?

Une version en français ?

Comme indiqué dans l'issue ici https://github.com/borgbase/vorta/issues/99, les administrateurs systèmes ont la nécessité de parler anglais et cela ne pose pas de soucis que l'interface du logiciel soit en anglais. Par contre un logiciel conçu comme étant une interface graphique à Borg pour un usage bureautique a pour cible un plus large publique non forcément anglophone.

Pour l'instant, l'interface graphique est en anglais avec des chaînes de caractères codées en dur, mais comme l'interface graphique est en QT, elle doit pouvoir facilement être internationalisée et internationalisable. Je me suis proposé pour faire la version française (traduction des chaînes de caractères), vu que c'est du logiciel libre.

Gravatar de genma
Original post of genma.Votez pour ce billet sur Planet Libre.

Miamondo : Un environnement de bureau tout en Python (1ère partie : le menu principal)

Bonjour et bonne année 2019! Malgré toutes les incertitudes qui pèsent sur nos têtes, explosion de la bulle financière, écroulement de notre système économique, conflit nucléaire généralisé, emballement incontrôlable du climat, malgré toutes les horreurs auxquelles nous sommes confrontés quotidiennement, je pense en particulier à la destruction de la porte du ministère de Benjamin Griveaux... Lire la Suite →

Gravatar de Miamondo
Original post of Miamondo.Votez pour ce billet sur Planet Libre.

Articles similaires

genma : Rsync Checker petit script Python sans prétention

Après mon billet Borg Checker, petit script Python sans prétention, voici un autre billet d'un petit outil simple mais effiace, là encore en deux étapes.

Les besoins

Nous avons un Rsync qui se fait dans le sens "Machine distance" en source, "Machine locale" en cible, le tout à travers SSH, lancé avec sudo - pour avoir les droits root et donc aller où on veut et s'affranchir des problèmes de permission.

Nous aimerions valider que les commandes rsync exécutées sont valables /se sont bien déroulées / ne sont pas tombées en erreur. Sachant que nous avons un script shell global qui lance plusieurs scripts shells différents qui eux-même lancent plusieurs commandes Rsync au sein du même script.

SSH

Les connexions SSH se font depuis la machine Backup en tant que client du serveur SSH qui est sur la machine à sauvegarder.

La connexion se fait via une connexion par clef (la clef publique de la machine de sauvegarde, Backup, a été ajoutée sur la machine à sauvegarder.

Rsync avec Sudo à travers SSH

Pour pouvoir copier les fichiers en rsync avec sudo, sans avoir à saisir de mot de passe, il faut faire un sudo visudo ce qui va permettre d'éditer le fichier /etc/sudoers et d'autoriser le lancement de la commande sudo rsync sans avoir à saisir de mot de passe pour l'utilisateur désigné, ici Genma.

sudo visudo

On ajoute en bas de fichier la ligne

genma ALL= NOPASSWD:/usr/bin/rsync

Astuce pour enregister / quitter dans le cas où l'éditeur par défaut est VI :

:wq!

La sauvegarde via Rsync

Exemple de script lançant des commandes Rsync la nuit via une tâche Cron. On écrit des traces / des logs dans un fichier en local. Ce fichier de log permettra de valider l'exécution des commandes (cf section ultérieure dans le fichier).

#!/bin/bash

LOG=/Backup/Machine_distante_A/Sauvegarde_rsync_ssh_`date +%Y-%m-%d`.log

# Fonction qui permet d'écrire des logs dans le fichier de log
# Le texte en paramètre de la fonction sera écrit à la suite de la date et heure
Inlog()
{
echo `date +'%Y-%m-%d %H:%M:%S'`": $1" >> $LOG
}

# La variable "$?" contient le code de retour de la dernière opération.
# Ici c'est le code d'execution de la commande "rsync".
# "0" - la commande "rsync" s'executé correctement,
# Autre valeur en cas échéant, c'est que l'on a donc une erreur
check_rsync()
{
result_rsync=$(echo $?)
# La variable "result_rsync" recupere la valeur de "$?"
# Si "result_rsync" "0" alors il avait une erreur lors d'execution de la commande "rsync" et le script s'arrête
if [ "$result_rsync" == "0" ]; then
Inlog "$1 Rsync OK"
else
Inlog "$1 Rsync KO"
fi
}

Inlog "Début Rsync Machine_distante_A /var_www sur Serveur_Sauvegarde"
rsync -avz --rsync-path="sudo rsync" -e "ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null" --progress --ignore-existing genma@IP_Machine_Distante:/var/www /Backup/Machine_distante_A/var/www/
# Pour appeler la fonction de check du retour de la commande Rsync
check_rsync "Rsync Machine_distante_A /var_www sur Serveur_Sauvegarde"
Inlog "Fin Rsync Machine_distante_A /var_www sur Serveur_Sauvegarde"

Inlog "Début Rsync Machine_distante_A /data/sql sur Serveur_Sauvegarde"
rsync -avz --rsync-path="sudo rsync" -e "ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null" --progress --ignore-existing genma@IP_Machine_Distante:/Backup/mysql/ /Backup/Machine_distante_A/data/sql/
# Pour appeler la fonction de check du retour de la commande Rsync
check_rsync "Rsync Machine_distante_A /data/sql sur Serveur_Sauvegarde"
Inlog "Fin Rsync Machine_distante_A /data/sql sur Serveur_Sauvegarde"

Un peu de Python

Un peu comme on avait plusieurs commandes Borg lancées et qu'on vérifiait que chacune d'elles était correctes (cf Borg Checker, petit script Python sans prétention), on vérifiera que les différents scripts et les différentes commandes Rsync se sont déroulées sans soucis.

Le besoin est donc de savoir quelles sont les Rsync qui ont posés soucis pour ensuite traiter manuellement ces erreurs / cas particuliers.

Pour ce faire, la machine de sauvegarde lance un script Python (via une tâche cron à une heure bien postérieure à celles du déroulement des sauvegardes).

Dans ce script Python, on vérifie la présence du fichier de log à la date du jour : cela valide qu'au moins la commande Cron a bien lancé le script Shell contenant les commandes rsync. Le nom du fichier de log est standardisé (cf script Shell ci-dessus) et se trouve dns un dossier. Le fichier est récupéré via la dernière commande de rsync dans un dossier local du serveur.

Le fichier de log étant présent, on parcourt le fichier de logs à la recherche d'une ligne KO et on affiche la dite ligne si besoin. Cf le script Shell et sa fonction check_rsync() qui teste le retour de la commande rsync.

**Fichier Config.ini** : contient les chemins vers les fichiers de logs de chaque machine sauvegardée.

Un script de sauvegarde Shell contenant des commandes rsync génère un fichier de log par exécution, fichier de log ayant dans son nom la date du jour.

[FichiersLogsRsyncSsh]
Machine_distante_A = /Backup/Machine_distante_A/
Machine_distante_B = /Backup/Machine_distante_B/

**Fichier CheckRsyncSSH.py**

#!/usr/bin/python
# -*-coding:Utf-8 -*
import configparser
import sys
import os.path
import datetime

# Initialisation des chemins
# On a un fichier avec
# * en clef : la sauvegarde à valider
# * en valeur : le chemin dans lequel on vérifie la présence d'un fichier de log
config = configparser.ConfigParser()
config.optionxform = str
config.read('./Config.ini')
configRsync = config['FichiersLogsRsyncSsh']

# Code de la fonction
def fctFichierLogRsynsSSH():
print(" ")
print(--------------------------------------------")
print(" CHECK DES RSYNC QUOTIDIENS")
print(" via un check de présence des fichiers logs")
print("-------------------------------------------")

now = datetime.datetime.now().strftime('%Y-%m-%d')

# Vérification qu'on a bien un fichier de log à la date du jour
for key,value in config.items('FichiersLogsRsyncSsh'):
fichierAtrouver = key + "_" + now + ".log"
found = 0;
for fileName in os.listdir(value):
if (fichierAtrouver == fileName):
found = 1;
break;
if (found == 0):
print(key + ': statut ' + '\\x1b[6;31m' + 'KO' + '\\x1b[0m' + ' Fichier absent : ' + fichierAtrouver + "!!!")
if(found == 1):
print(key + ': statut ' + '\\x1b[6;32m' + 'OK' + '\\x1b[0m' ' Fichier trouvé : ' + fichierAtrouver);

# Vérification du contenu du fichier
chemin = value + fichierAtrouver
f = open(chemin,'r')
lignes = f.readlines()
f.close()
ligneKO = 0;
for ligne in lignes:
# est ce que la ligne contient un KO
# KO inscrit car le rsync a renvoyé une erreur (cf script Shell)
# si oui, la ligne est KO
if "KO" in ligne:
# On s'arrête au 1er KO, vu qu'on ira voir le fichier en détail du coup
ligneKO = 1;
break
if (ligneKO == 0):
print(key + ': statut ' + '\\x1b[6;32m' + 'OK' + '\\x1b[0m' + ' Tous les Rsync sont OK.')
if (ligneKO == 1):
print(key + ': statut ' + '\\x1b[6;31m' + 'KO' + '\\x1b[0m' ' Au moins un rsync contient un KO !!!')
print("La ligne concernée par un KO est : " +ligne)
ligneKO = 0;
found = 0;
print (" ")
return 0;

# Appel de la fonction principal
fctFichierLogRsynsSSH()

Pour le lancer le script :

python3 CheckRsyncSSH.py

Quel résultat ?

Si on lance le script manuellement, la sortie est donc sur la ligne de commande.

On aura donc un OK en vert ou un KO en rouge qui apparait dans le terminal ce qui permet de facilement distinguer / voir les lignes à analyser. Le Nom du fichier (et par conséquence de la sauvegarde) en échec apparaît. Il faut alors analyser ensuite plus finement en allant relancer le script global ou la commande rsync incriminée, en regardant les logs dans le terminal...

Gravatar de genma
Original post of genma.Votez pour ce billet sur Planet Libre.

Articles similaires

Journal du hacker : Liens intéressants Journal du hacker semaine #1

Pour la première semaine de l'année 2019, voici 10 liens intéressants que vous avez peut-être ratés, relayés par le Journal du hacker, votre source d’informations pour le Logiciel Libre francophone !

Pour ne plus rater aucun article de la communauté francophone, voici :

De plus le site web du Journal du hacker est « adaptatif (responsive) ». N’hésitez pas à le consulter depuis votre smartphone ou votre tablette !

Le Journal du hacker fonctionne de manière collaborative, grâce à la participation de ses membres. Rejoignez-nous pour proposer vos contenus à partager avec la communauté du Logiciel Libre francophone et faire connaître vos projets !

Et vous ? Qu’avez-vous pensé de ces articles ? N’hésitez pas à réagir directement dans les commentaires de l’article sur le Journal du hacker ou bien dans les commentaires de ce billet :)

Gravatar de Journal du hacker
Original post of Journal du hacker.Votez pour ce billet sur Planet Libre.

Articles similaires

Carl Chenet : Les meilleurs articles 2018 du Courrier du hacker

Quels sont les meilleurs articles relayés en 2018 par le Courrier du hacker, la newsletter hebdomadaire résumant l’actualité francophone du Logiciel Libre et Open Source ?

E-mail S'abonner

L’année 2018 a vu une publication de 52 numéros pour cette deuxième année d’existence. Le Courrier du hacker a atteint les 2000 abonnés et a multiplié ses moyens de diffusion en mettant en ligne ses archives et en ouvrant un compte Mastodon et Twitter.

Le compte Mastodon du Courrier du hacker

Pour ce classement, nous considérons les articles les plus consultés, un par numéro, classés par catégorie.

Pour rappel tous les articles proposés chaque semaine dans le Courrier du hacker sont tirés du Journal du hacker, l’agrégateur contributif de la communauté francophone du Logiciel Libre et Open Source.

Et sans plus attendre, voici les meilleurs articles relayés par le Courrier du hacker en 2018 !

Libertés individuelles Vie privée Web Firefox Développement Distributions Linux Gafam Administration système Auto-hébergement Sécurité Communauté Matériel Android Humour La démarche du Courrier du hacker

Le Courrier du hacker a été créé dans l’idée que la publication sous format de newsletter permettrait de prendre un peu de distance vis-à-vis de l’actualité.

En effet nous sommes aujourd’hui submergés de micro-événements et il devient de plus en plus difficile de prendre du recul par rapport à ce sentiment de manquer quelque chose. Se poser et être capable de lire des articles évoquant des problèmes récurrents d’ordre technique, de vie privée ou encore dans les communautés du Logiciel Libre devient précieux pour ne pas être formaté par une actualité que les principaux sites assènent lordement et répètent souvent en modifiant à peine leurs articles.

Un grand merci à la communauté du Logiciel Libre et Open Source francophone

Nous espérons continuer dans la même veine en 2019. Un grand grand merci à toute la blogosphère francophone du Logiciel Libre, que les auteurs soient des particuliers ou des professionnels, qui fait un travail formidable.

L’auteur

Carl Chenet est un acteur de la communauté du Logiciel Libre et Open Source francophone, fondateur du Journal du hacker, du Courrier du hacker et du site d’emploi LinuxJobs.fr. Il a écrit et maintient également de nombreux logiciels libres.

Me suivre sur les réseaux sociaux

N’hésitez pas à me suivre directement sur les différents sociaux pour suivre au jour le jour mes différentes projets dans le Logiciel Libre :

Gravatar de Carl Chenet
Original post of Carl Chenet.Votez pour ce billet sur Planet Libre.

Articles similaires

blog-libre : Mises à jour… vaste blague

Je considère Etcher comme la référence du moment pour préparer une clé USB bootable. J’ai remarqué qu’il n’y avait pas de mises à jour installées sur mon poste alors que des releases étaient publiées. Je suis allé faire un tour sur le GitHub du projet pour découvrir que le nom et le dépôt ont changé. J’ai mis à jour Mémo installation packages Xubuntu et Mémo suivre les mises à jour en conséquence.

Des gens très sérieux, très intelligents codent des outils, des logiciels, des systèmes d’exploitation sans même se demander si ils résolvent un problème/besoin ou si ils participent seulement à complexifier l’outil informatique. J’ai expliqué comment suivre les mises à jour de vos logiciels libres. Pas de solution fiable ni simple. Il faut aller se taper la récupération des flux RSS un par un quand ils existent… sinon il faut noter l’URL de chaque projet pour aller y faire un tour de temps en temps.

Dans l’article Fragmentation j’avais expliqué que « Faire les mises à jour », une des bases de la sécurité, était une bonne blague. Suivre les mises à jour des outils qu’on utilise, rester informés… autre vaste blague.

Nous sommes en 2019, on nous parle d’IA, nous n’avons toujours pas de solutions fiables et simples pour faire et suivre les mises à jour des outils qu’on utilise.

Gravatar de blog-libre
Original post of blog-libre.Votez pour ce billet sur Planet Libre.

Articles similaires

Nizar Kerkeni : TuniHack 4.0 – Data Driven Future

Logo TuniHack

Le « Open Source Software Club – OSSEC » de l’École Nationale des Sciences de l’Informatique – ENSI, a organisé, début décembre, la quatrième édition du hackathon TuniHack 4.0 sous le thème « Data Driven Future ». L’objectif de cette édition était d’encourager les participants à développer des applications qui exploitent les données disponibles pour une meilleure valorisation.

J’étais invité à ce hackathon comme conférencier et j’ai choisi de faire une présentation intitulée « Libre – OpenData – Tunisie ». J’ai entamé mon intervention par la présentation de la définition de ce qui est un Logiciel Libre et comment l’esprit du logiciel libre peut être généralisé pour couvrir toute œuvre numérique. Une œuvre qui peut être aussi une donnée ce qui permet d’avoir des données ouvertes ou OpenData. Par la suite j’ai présenté les différents projets et portails tunisiens où il est possible de récupérer des données ouvertes. Je vous laisse le soin de les découvrir dans ma présentation téléchargeable depuis les liens ci-dessous.

Télécharger ma présentation

Libroffice Impress Logo     PDF Download

share this

Gravatar de Nizar Kerkeni
Original post of Nizar Kerkeni.Votez pour ce billet sur Planet Libre.

Articles similaires

Journal du hacker : Liens intéressants Journal du hacker semaine #52

Pour la 52ème semaine de l'année 2018, voici 10 liens intéressants que vous avez peut-être ratés, relayés par le Journal du hacker, votre source d’informations pour le Logiciel Libre francophone !

Pour ne plus rater aucun article de la communauté francophone, voici :

De plus le site web du Journal du hacker est « adaptatif (responsive) ». N’hésitez pas à le consulter depuis votre smartphone ou votre tablette !

Le Journal du hacker fonctionne de manière collaborative, grâce à la participation de ses membres. Rejoignez-nous pour proposer vos contenus à partager avec la communauté du Logiciel Libre francophone et faire connaître vos projets !

Et vous ? Qu’avez-vous pensé de ces articles ? N’hésitez pas à réagir directement dans les commentaires de l’article sur le Journal du hacker ou bien dans les commentaires de ce billet :)

Gravatar de Journal du hacker
Original post of Journal du hacker.Votez pour ce billet sur Planet Libre.

Articles similaires

Pages