PROJET AUTOBLOG


Planet-Libre

source: Planet-Libre

⇐ retour index

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

lundi 17 décembre 2018 à 00:01

Pour la 50è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

Paul Ezvan : Conversion de type avec PostgreSQL

dimanche 16 décembre 2018 à 19:00

Tous les jours je reçois un message d'erreur généré par le script cron de mon logiciel de webmail Roundcube:

ERROR: [7] ERROR:  operator does not exist: boolean = integer
LINE 1: DELETE FROM "contactgroups" WHERE "del" = 1 AND "changed" < ...
                                                ^
HINT:  No operator matches the given name and argument type(s). You might need to
 add explicit type casts. (SQL Query: DELETE FROM "contactgroups" WHERE "del" = 1
  AND "changed" < '2018-12-04 00:00:00')

Il semble que l'erreur soit causée par une incompatibilité entre le schéma de la base de données et la requête SQL utilisée par le script de nettoyage.

Pour administrer mes bases de données PostgreSQL simplement j'utilise le logiciel web phpPgAdmin. En observant le schéma de la table contactgroups je note que le type de la colonne del est boolean. C'est incompatible avec la requête DELETE FROM "contactgroups" WHERE "del" = 1 car del devrait être un nombre entier (un int). PostreSQL est tâtillon avec les types, et ne convertit pas un entier en booléen implicitement, ce qui cause l'erreur.

J'avais importé cette base depuis MySQL vers PostgreSQL, ce qui a pu causer quelques incohérences avec la schéma attendu par Roundcube. Je vérifie que c'est le cas en comparant avec le schéma fourni par Roundcube pour créer une base :

CREATE TABLE contactgroups (
    contactgroup_id integer DEFAULT nextval('contactgroups_seq'::text) PRIMARY KEY,
    user_id integer NOT NULL
        REFERENCES users(user_id) ON DELETE CASCADE ON UPDATE CASCADE,
    changed timestamp with time zone DEFAULT now() NOT NULL,
    del smallint NOT NULL DEFAULT 0,
    name varchar(128) NOT NULL DEFAULT ''
);

En effet dans ce schéma la colonne del est de type smallint. Je vais donc modifier le schéma de la table pour utiliser le type smallint à la place de boolean à l'aide du client psql.

roundcube=> ALTER TABLE "public"."contactgroups" ALTER COLUMN "del" TYPE smallint;
ERROR:  column "del" cannot be cast automatically to type smallint
ASTUCE : You might need to specify "USING del::smallint".

Malheureusement la conversion échoue ! En effet PostgreSQL ne sait pas comment convertir un booléen en entier.

On peut donc lui indiquer:

roundcube=> ALTER TABLE "public"."contactgroups"
roundcube-> ALTER COLUMN "del" TYPE smallint
roundcube-> USING CASE WHEN del=FALSE then 0
roundcube-> WHEN del=TRUE then 1
roundcube-> else NULL
roundcube-> END;
ERROR:  default for column "del" cannot be cast automatically to type smallint

Nouvelle erreur ! Cette fois c'est la valeur par défaut du champ, configurée à FALSE, qui ne peut pas être convertie. Le plus simple est de supprimer la valeur par défaut, effectuer la conversion, puis rajouter une valeur par défaut.

roundcube=> ALTER TABLE "public"."contactgroups" ALTER COLUMN "del" DROP DEFAULT;
ALTER TABLE
roundcube=> ALTER TABLE "public"."contactgroups"                                 
ALTER COLUMN "del" TYPE smallint          
USING CASE WHEN del=FALSE then 0
WHEN del=TRUE then 1
else NULL
END;
ALTER TABLE
roundcube=> ALTER TABLE "public"."contactgroups" ALTER COLUMN "del" SET DEFAULT 0;
ALTER TABLE

Et voilà, pas de problème cette fois !

Modifier le schéma d'une base de données peut amener à se soucier de nombreuses subtilités. Ces opérations sont délicates et il vaut mieux toujours tester avant de réaliser ce type d'opération en production.

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

Morot : Mémo openssl

vendredi 14 décembre 2018 à 22:45

Création :

Générer une clé privée :

openssl genrsa -out key.pem 2048

Générer un CSR à partir d’une clé existante :

openssl req -out csr.csr -key key.pem -new

Générer une nouvelle clé et un CSR :

openssl req -out csr.csr -new -newkey rsa:2048 -nodes -keyout key.pem

Générer un certificat auto-signé :

openssl req -x509 -sha256 -nodes -newkey rsa:2048 -keyout key.pem -out certificate.crt -days 365

Générer un CSR sur la base d’un certificat et d’une clé existants :

openssl x509 -x509toreq -in certificate.crt -signkey key.pem -out csr.csr

Retirer la pass-phrase d’une clé privée :

openssl rsa -in key.pem -out newkey.pem

Informations sur un certificat :

Obtenir la date d’expiration :

openssl x509 -noout -in certificate.crt -dates

Obtenir le signataire d’un certificat :

openssl x509 -noout -in certificate.crt  -issuer

Vérification des certificats :

Vérifier qu’une clé privée et un CSR correspondent :

openssl rsa -noout -modulus -in key.pem | openssl md5
openssl req -noout -modulus -in csr.txt | openssl md5

Vérifier qu’une clé privée et un certificat correspondent :

openssl x509 -noout -modulus -in cert.crt | openssl md5
openssl rsa -noout -modulus -in key.pem | openssl md5

Vérifier un CSR :

openssl req -text -noout -verify -in csr.csr

Vérifier une clé privée :

openssl rsa -in key.pem -check

Vérifier un certificat :

openssl x509 -in certificate.crt -text -noout

Vérifier un certificat PKCS12 :

openssl pkcs12 -info -in store.p12

Tester une connexion à un serveur :

Vérifier une connexion et la chaîne de confiance sur un port TCP :

openssl s_client -connect host:443

Vérifier la prise en charge de SSLv2, SSLv3, TLS1.0, TLS1.1 et TLS1.2 :

openssl s_client -connect host:443 -ssl2
openssl s_client -connect host:443 –ssl3
openssl s_client -connect host:443 –tls1
openssl s_client -connect host:443 –tls1_1
openssl s_client -connect host:443 –tls1_2

Vérifier la prise en charge d’un algorithme de chiffrement sur un serveur (openssl ciphers) :

openssl s_client -cipher 'ECDHE-ECDSA-AES256-SHA' -connect host:443

Conversions :

Convertir un PEM en DER :

openssl x509 -outform der -in certificate.crt -out certificate.der

Convertir un DER en PEM :

openssl x509 -inform der -in certificate.der -out certificate.pem

Conversion PEM en PKCS12 :

openssl pkcs12 -export -inkey  key.pem -in certificate.crt -name SuperCertificat -out store.p12

Conversion PKCS12 en PEM :

openssl pkcs12 -in store.p12 -out store.pem -nodes

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

Cenwen : Me Gamer and Linux User = Impossible Mission ? Not exactly. Part 6

vendredi 14 décembre 2018 à 00:06

Dans le dernier opus, nous traitions des périphériques tel que les casques sans toutefois avoir parler des jeux proprement dis. Et que dire de l’actualité de ces derniers jours. Et comme d’habitude, de fil en aiguilles, on se rend compte que l’éco-système est bien plus riche qu’on le croyais. En effet, si je vous dis GGKBDD ou Epic Games ou Steam ou encore Cougar. Et bien d’autres encore. A quoi pensez-vous  ? La réponse maintenant. 

Avant de commencer, une nouvelle importante pour tous les utilisateurs des dernières cartes graphiques AMD Radeon RX590 sorties mi-Novembre. Bien que du code les concernant avait été inclus dans le noyau en Septembre dernier, les développeurs Linux d’AMD ont eu la désagréable surprise d’avoir un bogue empêchant le fonctionnement tout court de ces cartes quelque soit le pilote graphique utilisé. Ceci était due à une modification du BIOS de ces cartes sur la ligne d’assemblage. Si la découverte du bogue a été presque immédiate dès la sortie, sa correction a demandé plus de temps et vient d’être annoncé ce . Ces patches pour l’AMDGPU seront inclus dans le noyau en cours (le 4.20) et une demande pour le noyau 4.19 a été émise. C’est donc une grande nouvelle pour les possesseurs de ces cartes graphiques.

Pour la petite info toute fraîche, AMD a envoyé toute une série de nouveau PCI ID concernant les Vegas 20 (0X66A4) et 10 (0X6869, 0X686A0X686B0X686D0X686E0X686F) à inclure dans le driver Linux. Cela ne signifie pas forcément que 7 nouvelles cartes vont sortir l’année prochaine mais en tout cas, il y aura de la nouveauté de ce côté. Nous en serons plus lors du CES à las Vegas mais des rumeurs non confirmées annoncent 3 nouvelles cartes qui vont venir concurrencer les best-off de Nvidia.

Le clavier Cougar 700K est un clavier mécanique avec une structure en aluminium et des switches mécanique MX, des Leds et des touches spéciales gaming. Au début de l’année, un nouveau driver HID a été inclus dans le Kernel 4.19 pour supporter le Cougar 500K de la marque. Dans le cycle en cours (Kernel 4.21), ce driver a été mis à jour afin de supporter toutes les fonctionnalités du 700K.

Peter Hutterer de Red Hat a créé GGKBDD en tant que daemon générique pour les claviers Gaming pour les systèmes Linux.
Ne vous emballez pas trop vite pour l’instant, il s’agit plus d’une ébauche de validation d’un concept qu’un programme/librairie fonctionnel. Même le nom est temporaire. Mais, si cela se confirme, cela sera vraiment très intéressant. Après, c’est en Python3. L’utilisation de ce langage (contrairement à du C ou du C++) touchera plus de monde qui soit susceptible de participer et donc de développer ce projet en quelque chose de concret rapidement.
A quand la même chose pour les souris, les casques,… ?

Un petit mot sur ce développeur de Red Had, Peter Hutterer. Ce nom ne vous est peut-être pas inconnu. En effet, ce talentueux développeur, spécialiste de « l’input » est l’auteur de nombreuses librairies pour piloter nos périphériques d’entrée dont nous tirons partie tous les jours. Libwacon, Tuhi, libratbag, libevdev, libinput, openRazer, … ont, entre autre, bénéficié de ses talents. La liste des projets sur lesquels il a travaillé est longue. Impressionnant.

Une autre nouvelle très importante: Epics Games a officiellement lancé leur nouveau « Game Store » (magasin en ligne) en tant qu’alternative à celui de Steam. Jusqu’à présent, le magasin existant ne supportait que Windows et MacOS. Courant 2019, il supportera aussi Android et les autres plateformes ouvertes (donc nous). Avec 12% du marché des jeux, l’arrivée de ce nouvel acteur va ouvrir de nouvelles perspectives pour nous autres Linuxiens Gamers.

Puisque nous parlons magasin en ligne de jeux, il serait inconcevable de ma part de parler de Steam et de son Steam Store. Depuis l’arrivée de Windows 8, Valve  a fait de gros efforts pour porter son Steam Store sous Linux. D’ailleurs, voici une liste du nombre de jeux tournant nativement sous Linux. Et je n’ai pas parlé des projets tel que Wine ou bien Playonlinux. Mais nous y reviendrons dans un instant avec un autre projet de Steam: Proton.

Puisque nous parlons des magasins de Jeux sous Linux, il serait indécent de ma part de ne pas mentionner de Lutris, Desura semble être un projet mort. Il faut aussi citer deux autres sites recensent l’actualité des jeux : Le bottin des Jeux Linux (3700 jeux) et GamingOnLinux.

Gnome Twitch est un client Linux pour la plateforme de streaming et de vidéos en ligne des joueurs enregistrant leurs parties de jeux : Twitch. Noter cependant qu’il n’a pas été mis à jour depuis 2 ans.

Sous Manjaro, vous l’installez de la manière suivante:

sudo pacman -S gnome-twitch

Voici une autre solution pour ceux qui ne veulent pas utiliser Gnome-twitch : Orion. Ce logiciel en QML/QT offre non seulement un client Twitch pour le bureau mais celui-ci offre en plus la VOD et le tchat et bien autres choses aussi.

Si vous voulez l’installer, vous avez à votre disposition la version stable mais aussi, pour les plus intrépides la version de développement disponibles sur AUR. Comme d’habitude, voici les commandes magiques:

yaourt -S orion

yaourt -S orion-git

Après Orion, voici une autre découverte faite cette semaine : Moonlight. Il s’agit d’une implémentation open source de NVidia GameStream.  Attention, cette version est une réécriture du programme en QT. L’ancienne version était elle, en Java.

Si vous voulez l’installer, vous avez à votre disposition la version stable mais aussi, pour les plus intrépides la version de développement disponibles sur AUR. Faites très attention pour prendre la bonne version. Comme d’habitude, voici les commandes magiques:

yaourt -S moonlight-qt

yaourt -S moonlight-qt-git

Voici maintenant deux logiciels indispensables pour jouer sous Linux comme nos collègues Windowsiens. Commençons par le premier: Mumble

Logiciel destiné plus particulièrement aux joueurs de tout poil mais pas que, Mumble est un logiciel libre performant de communications vocale (VOIP=Voices Over Internet Protocol) qui a la différence de son concurrent non libre Teamspeak utilise non seulement le serveur de son OSS, mais aussi Alsa et PulseAudio. Si vous êtes un gamer, c’est LE LOGICIEL A AVOIR lors de vos parties de jeux. Il se connecte à un serveur Murmur au protocole ouvert utilisant une répartition distribuée.  Chacun peut donc créer, si besoin est, son propre serveur.

Sous Manjaro, vous les installez de la manière suivante:

sudo pacman -S mumble murmur

Si vous désirez les versions de développement et bien plus encore, celles-ci sont disponibles sur AUR. Une simple recherche de type mumble dans votre gestionnaire de paquets graphiques vous en montrera toute l’étendue. Amusez-vous bien.

Passons maintenant à notre deuxième logiciel et quel logiciel car il offre la possibilité de profitez des jeux Windows de telle manière qu’on en oublierait que l’on se trouve sous Linux. Valve la société derrière la plateforme de jeux en ligne Steam a crée Proton le bien nommé.Sortie pendant les grandes vacances de cette année, on pourrait croire que la nouvelle aurait pu passée inaperçu. Que nenni. Ce nouvel outil est en train de révolutionner le Gaming pour Nous.Intégré à Steam, Proton est une version optimisée de Wine  afin de faciliter l’installation des jeux sous Linux, y compris ceux conçus pour Windows. Et ce n’est pas rien. Pour cela, il inclus deux autres outils: DXKV et vkd3d. Ce sont deux émulateurs DX11 et DX12 basé sur Vulkan le remplaçant de OpenGL.

La base de donnée ProtonDB (à garder dans vos marques pages et à consulter régulièrement) dont vous voyez une capture écran juste au-dessus recense la compatibilité des jeux à l’aide d’un code couleur et d’une appellation liée à celui-ci.Au bas de l’échelle, nous avons le rouge (Borked) pour un jeu ne fonctionnant pas du tout. Puis, nous passons en bronze (Bronze+) pour un jeu ayant des bogues majeurs, en argent (Silver+) pour un jeu jouable mais avec quelques anomalies. Ensuite, nous avons gold (Gold+) pour une jeu fonctionnant avec quelques réglages et enfin nous avons platinium (Platinium+) pour un jeu fonctionnant sans aucun réglage. A ce jour, 3131 jeux fonctionnent avec près de 23500 rapports écris sur 5718 jeux testés. C’est énorme.Chaque jeu dispose de son rapport réalisé par les utilisateurs testeurs. Outre les commentaires de ceux-ci, sont notamment préciser des informations importantes tel que la distribution utilisée, le noyau, les pilotes graphiques,… Pour les plus accros, cette base de données fournit aussi des données très utiles à cet endroit. Pour chaque catégorie de compatibilité, on y retrouve en effet :

Et bien d’autres informations.Et comme tout projet libre, vous pouvez contribuer ici.Vous pouvez installer Proton et Steam sans aucun problème sous Manjaro car ils sont disponibles dans les dépôts officiels de la distribution et sur AUR. Tout dépendra de vos attentes. En attendant, pour ma part, ce sera:

sudo pacman -S steam-manjaro steam-devices && yaourt -S proton steam-fonts

Nous voici à la fin de sixième partie. Qui m’aurait dis l’année dernière (quand m’est venue l’idée de faire un article sur les périphériques gaming/Hardware) et sa division cette année en plusieurs parties (initialement 2) qu’il serait si grand, si étendue, si riche. Enfin, c’est ainsi. Après tout, le monde informatique évolue vite et les logiciels libres aussi. Et quand des sociétés s’y mettent, cela va encore plus vite. Amusez-vous bien.

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

genma : Borg Checker, petit script Python sans prétention

mercredi 12 décembre 2018 à 09:00

Prérequis :
- Avoir déjà utilisé Borg
- Connaître Python, ou a minima savoir lire du code

Rôle de ce bout de code

L'objectif est de savoir si les sauvegardes lancées la nuit, reposant sur un script Borg, se sont bien passées. Pour cela, nous partons du principe que si une commande borg c'est bien lancée, dans la liste des sauvegardes renvoyées par Borg, on aura une sauvegarde portant le bon nom (le nom incluant la date du jour). Le nom de chaque sauvegarde est donc l'élément discriminant et est de la forme Documents_AAAA-MM-DD-HH:MM:SS. Exemple Documents_2018-10-31-10:10:10

Le script répond à notre besoin, à savoir éviter de faire un "borg list" sur X répertoires et nous renvoyer un OK quand on a une sauvegarde avec la bonne date, KO si il n'y a pas de sauvegarde ayant la date du jour et il indique le nombre de jours entre la dernière sauvegarde et la date du jour.

Pourquoi en Python et pas en bash ?

J'avais commencé à former mon Pandawan au Shell et nous aurions pu faire un script équivalent en shell. Mais je voulais aussi le former à des notions de programmation objet, lui montrer que l'on pouvait faire aussi des choses en Python et dérouiller mon propre Python. D'où le choix de ce langage.

Attention, nous ne sommes pas des spécialistes Python, nous savons juste faire des bouts de scripts & codes que nous saurons relire et améliorer dans plusieurs mois. Le but n'était pas de faire un code optimisé ultra efficace mais de faire quelque chose de lisible et réutilisable et maintenable, compréhensible par la première personne qui sait lire un peu de code.

Le code

[SauvegardeBorg]
Documents_Dossier_A = /Backup/Documents/Dossier_A/
Documents_Dossier_B = /Backup/Documents/Dossier_B/
Documents_Dossier_C = /Backup/Documents/Dossier_C/
#!/usr/bin/python
# -*-coding:Utf-8 -*
import configparser
import sys
import os.path
import datetime

#===========================================================
# SCRIPT DE VALIDATION DES DIFFERENTES SAUVEGARDES
#==========================================================

#"------------------------------------------------------------
# Initialisation des chemins
# On a un fichier avec
# * en clef : la sauvegarde à valider
# * en valeur : le chemin dans lequel on vérifie la sauvegarde
# via le check de borg list avec une sauvegarde borg à la date du jour
config = configparser.ConfigParser()
config.optionxform = str
config.read('./Config.ini')
configsauvegardeBorg = config['SauvegardeBorg']

def fctCheckBorg():
print("==========================================")
print(" CHECK DES SAUVEGARDES BORG")
print("==========================================")

from datetime import datetime
# Lecture de tous les éléments de BorgBackupPath
for key,value in config.items('SauvegardeBorg'):
try:
borgCommand="borg list "+ value
sortie = os.popen(borgCommand).read()
tabBorgList = sortie.split("\\n")
number=len(tabBorgList) -2
# La ligne est de la forme
# Documents_2018-10-31-10:10:10 Wed, 2018-10-31 10:10:10 [b576a0703b7144be76afd2e2]
# On coupe pour trouver la date
lastBackupDate = tabBorgList[number].split(",")[1].split("[")[0].split(" ")[1]
# Conversion du String en Date
lastBackupDateToDate = datetime.strptime(lastBackupDate,'%Y-%M-%d')
# Récupération de la date du jour au bon format
now=datetime.strptime(datetime.now().strftime('%Y-%M-%d'),'%Y-%M-%d')
# Calcul du delta
delta = now - lastBackupDateToDate
if (delta.days == 0):
print(key, ": statut OK. Nombre de jours depuis la dernière sauvegarde : ", str(delta.days))
else:
print(key, ": statut KO. Nombre de jours depuis la dernière sauvegarde :", str(delta.days))
except Exception as e:
print("Erreur rencontree : ")
print(str(e))
continue
print("\\n")
return 0;

Exemple de résultat d'exécution

Le script se lance via

python3 BorgChecker.py

Résultat de l'exécution quand on a bien une sauvegarde qui s'est déroulée sur la nuit

Documents_Dossier_A : statut OK. Nombre de jours depuis la dernière sauvegarde : 0.
Documents_Dossier_B : statut OK. Nombre de jours depuis la dernière sauvegarde : 0.

Résultat de l'exécution quand on a bien une erreur (et le nombre de jours permet de détecter que le script ne tourne plus depuis X jours par exemple).

Documents_Dossier_C : statut KO. Nombre de jours depuis la dernière sauvegarde : 3.

Ainsi on sait que pour le dossier A et B, on a bien une sauvegarde. Pour le dossier C, il y a eu une erreur (vu que l'on a un K0) et il faudra donc aller analyser pour en savoir plus (coupure de réseau, lock qui a empêché la bonne exécution de Borg...)

Conclusion

Le code source et l'ensemble de cet article sont en licence CC BY SA, faites en ce que vous voulez. Si ça peut vous être utile, tant mieux ;)

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