Zwindler's Reflection https://blog.zwindler.fr Ma vie parmi les lol-cats || je mine des bitcoins dans mon dressing Tue, 18 Feb 2020 13:26:16 +0000 fr-FR hourly 1 https://wordpress.org/?v=5.3.2 https://blog.zwindler.fr/wp-content/uploads/2017/03/nyanonimous_rond-150x150.png Zwindler's Reflection https://blog.zwindler.fr 32 32 126029280 Créer un VPN distribué avec Tinc https://blog.zwindler.fr/2020/02/17/creer-un-vpn-distribue-avec-tinc/ https://blog.zwindler.fr/2020/02/17/creer-un-vpn-distribue-avec-tinc/#comments Mon, 17 Feb 2020 07:30:00 +0000 https://blog.zwindler.fr/?p=4660 Tutoriel pas à pas pour monter un VPN multipoint (full mesh) avec Tinc

Cet article Créer un VPN distribué avec Tinc est apparu en premier sur Zwindler's Reflection.

]]>

Faire un VPN Tinc fullmesh sans monter un gros réseau IPSec

Un des gros problèmes que j’ai rapidement eu à régler lorsque j’ai voulu monter des clusters de serveurs Proxmox VE chez des providers de serveurs physiques, c’est la façon dont est gérée le clustering dans PVE.

Les concepteurs de PVE ne veulent pas que l’on monte des clusters sur Internet et mettent volontairement le plus de bâtons dans les roues pour vous empêcher de le faire. J’exagère à peine.

En version 5.x, PVE se basait sur la version 2 de corosync par multicast (bloqué par tous les providers) et qu’en v6.x, on nous bride en demandant explicitement un sous réseau LAN dédié, autant dire qu’on est pas aidé.

OpenVPN vs Tinc

Une solution que j’ai expérimenté est de monter un serveur OpenVPN sur un des serveurs et de connecter les autres dessus. J’ai d’ailleurs fait un tuto là dessus pour PVE.

Cette approche n’est pas optimale : si on a 2 machines, c’est bon, mais si on en a 3 ou plus, on se retrouve soit avec un SPOF, soit à devoir monter un maillage complexe de couples serveur-client. Au delà de 3, c’est pratiquement ingérable.

Au contraire, Tinc est un logiciel libre (GPLv2) permettant de monter des VPNs multipoints (full mesh routing) entre des machines sur Internet. Tinc est prévu pour notre cas d’usage !

le vrai logo de Tinc (la photo en haut du blog c’est Supercopter, of course)

On sécurise

Comme tout service "ouvert" sur Internet, il est évidemment nécessaire de faire du firewalling pour bloquer le trafic malveillant. Pour information, Tinc utilise le port 655 en TCP et UDP, que vous devrez donc ouvrir dans les deux sens entre l’ensemble de vos serveurs, mais bloquer pour le reste d’Internet.

A noter, ce n’est pas confirmé mais la page principale de Tinc indique qu’il est possible que ce logiciel (tout comme OpenVPN, Wireguard et IPSec) soit vulnérable à la CVE-2019-14899.

On l’installe et on le configure

On va devoir installer le package/binaire sur toutes les machines du VPN. Pas trop de soucis de ce côté, tinc est multiplateforme (Windows aussi) et est packagé dans de nombreuses distrib Linux. Sur les dépôts Debian, tinc est présent sans souci et j’imagine que ça sera le cas pour d’autres distribs aussi.

apt install tinc

Une fois installé, on peut créer notre VPN. Pour déclarer un VPN, il faut ajouter le nom de celui ci dans un fichier de configuration global :

echo "vpnzwindler" >> /etc/tinc/nets.boot

On créé ensuite un répertoire du même nom, contenant lui même un dossier hosts.

mkdir -p /etc/tinc/vpnzwindler/hosts

Dans ces dossiers, on va créer fichier de configuration, /etc/tinc/vpnzwindler/tinc.conf. Ce fichier va nous permettre de décrire le node courant et qui doit se connecter à qui.

Name = node01
AddressFamily = ipv4
Address = 1.1.1.1
Device = /dev/net/tun
Mode = switch
ConnectTo = node02
ConnectTo = node03
ConnectTo = node04
[...]

Dans les informations importantes, Name va être le nom (arbitraire) du node pour tout le VPN, Address représente l’adresse IP publique de votre node, et ConnectTo, la liste des autres Names des autres nodes.

A partir de là, on peut demander à tinc de nous générer des couples clé publique/clé privée pour tous nos serveurs. Sur tous les nodes du VPN, lancer :

echo -e '\n\n' | tincd -n vpnzwindler -K4096

Si tout se passe bien et que tous les fichiers de conf et dossiers ont été créés correctement, tinc devrait créer un couple clé privée/clé publique, puis créer un fichier /etc/tinc/vpnzwindler/hosts/node01 (sur celui dont le Name est node01).

Envoyez (par scp par exemple) l’ensemble des fichiers dans le dossier hosts sur tous les serveurs. Maintenant, tous les VPNs sauront quelle IP publique contacter et avec quel clé authentifier le trafic.

Autre méthode : tinc invite / tinc join

Une feature sympa de tinc, mais seulement en 1.1 (la dernière version), est la possibilité d’ajouter des nodes à un VPN existants via une simple commande tinc invite (voir la doc).

Je ne l’ai pas testée mais a priori tinc créé une URL qui permet d’inviter n’importe qui et de configurer son node avec un tinc join.

The whole URL is around 80 characters long and looks like this: server.example.org:12345/cW1NhLHS-1WPFlcFio8ztYHvewTTKYZp8BjEKg3vbMtDz7w4

Configuration du réseau de l’OS

Maintenant qu’on a tous les prérequis, on peut configurer l’aspect réseau de notre VPN. Ça dépend de votre distribution bien sûr (où dans le cas de PVE, si vous utilisez OpenVSwitch ou pas par exemple). Dans le cas d’une Debian récente, on va gérer tout ça avec ip.

Pour gérer cette partie, Tinc va vous demander de créer 2 scripts. Un tinc-up.sh et un tinc-down.sh, respectivement pour le démarrage et l’extinction de l’interface VPN.

cat /etc/tinc/vpnzwindler/tinc-up
#!/bin/bash
/sbin/ip link set vpnzwindler up
/sbin/ip addr add 10.0.0.1/24 dev vpnzwindler
/sbin/ip route add 10.0.0.0/24 dev vpnzwindler

cat /etc/tinc/vpnzwindler/tinc-down
#!/bin/bash
/sbin/ip link set vpnzwindler down

chmod +x tinc-*

Rien de bien compliqué ici, on demande au binaire ip de créer une interface vpnzwindler. Puis on lui affecte l’IP virtuelle 10.0.0.1 (notre node01). Enfin d’ajouter une route pour que tout le trafic du VPN passe par cette interface.

On le démarre

Dernière étape, on va demander à systemd de nous démarrer le vpn qu’on vient de créer dès le démarrage de la machine.

systemctl daemon-reload
systemctl enable tinc@vpnzwindler
systemctl start tinc@vpnzwindler

Et voilà !!! Vous avez maintenant un VPN multipoint simple et efficace !

root@node01 ~ # ping node02
PING node02 (10.0.0.2) 56(84) bytes of data.
64 bytes from node02 (10.0.0.2): icmp_seq=1 ttl=64 time=17.1 ms

Cet article Créer un VPN distribué avec Tinc est apparu en premier sur Zwindler's Reflection.

]]>
https://blog.zwindler.fr/2020/02/17/creer-un-vpn-distribue-avec-tinc/feed/ 4 4660
Redis, MongoDB, RabbitMQ, désactiver les Transparent Huge Pages https://blog.zwindler.fr/2020/02/10/redis-mongodb-rabbitmq-desactiver-les-transparent-huge-pages/ https://blog.zwindler.fr/2020/02/10/redis-mongodb-rabbitmq-desactiver-les-transparent-huge-pages/#comments Mon, 10 Feb 2020 07:30:00 +0000 https://blog.zwindler.fr/?p=2585 Explication de ce que sont les transparent Huge pages et surtout comment les désactiver sur vos serveurs Linux

Cet article Redis, MongoDB, RabbitMQ, désactiver les Transparent Huge Pages est apparu en premier sur Zwindler's Reflection.

]]>

Transparents Huge Pages

Les THP et moi, ça remonte à quelques années (i.e.n un brouillon qui traine depuis longtemps); Mais j’ai de nouveau eu besoin de toucher aux Transparent Huge Pages il y a peu donc c’est une bonne occasion de m’y remettre.

Redis, MongoDB, RabbitMQ, Kafka… Tout ces logiciels vous demandent, à l’installation ou dans la documentation, de désactiver ce paramètre système de vos serveurs Linux.

01-07-2020 03:46:32.730 +0000 WARN ulimit – ulimits: This instance is running on a machine that has kernel transparent huge pages enabled. This can significantly reduce performance and is against best practices. Turn off kernel transparent huge pages using the method that is most appropriate for your Linux distribution.

Même dmesg me dit de le désactiver :'(

Dans cet article, je vais vous montrer à quoi ça sert, mais surtout comment on va faire pour le désactiver (le plus proprement possible).

Mais au fait, c’est quoi ?

Avant de lui couper la chique, le mieux c’est quand même peut-être de savoir de quoi il s’agit avant de respecter les précos des éditeurs.

Note : Ca me fait penser à SELinux, la première chose qu’on nous demande de désactiver quand on installe un progiciel sur RHEL et qu’on connait au final assez mal…

Pour faire bref, la gestion de la mémoire par le CPU passe par une couche d’abstraction : la mémoire est découpée en pages de taille fixe (par défaut 4ko) et le CPU garde une table de conrrespondance de ces pages dans la MMU.

Pour des raisons de performance, il peut être intéressant, sur nos systèmes récents ayant beaucoup de RAM, d’avoir des pages plus grosses pour faciliter le travail du CPU (aka des "huge pages"). Cependant, il est nécessaire de modifier le code de l’application pour tirer parti des HugePages. Arrive alors une autre couche d’abstraction, les Transparent Huge Pages. Vous avez deviné, pour faire ça de manière transparente !

Je vous met en bas de l’article quelques liens pour comprendre en détail de quoi on parle.

Oneshot

Maintenant qu’on sait ce que c’est, on peut le désactiver en tout quiétude.

Déjà, on va commencer par vérifier l’état de notre OS, pour savoir un peu où on en est au niveau des THP. Pour ça, un simple cat de /sys/kernel/mm/transparent_hugepage/enabled nous donnera l’info :

cat /sys/kernel/mm/transparent_hugepage/enabled
[always] madvise never

Il existe 3 valeurs possibles pour ce paramètre : always, madvise et never. always et never sont simples à comprendre, et pour ce qui est de madvise, il s’agit d’un paramètre intermédiaire qui dit que par défaut, les THP sont désactivées, mais que les applications peuvent utiliser un appel "madvise" pour allouer des THP dans la zone mémoire réservée pour ça.

Ici, on va donc vouloir désactiver les THP totalement (donc never).

Pour se faire, on peut simplement utiliser la commande suivante :

echo never > /sys/kernel/mm/transparent_hugepage/enabled

Attention cependant, le paramètre ne sera pris en compte que jusqu’au prochain reboot.

Les méthodes classiques pour désactiver durablement les THP

A partir de là, on va vouloir le désactiver pour les prochains boots. On va donc devoir indiquer d’une manière ou d’une autre à l’OS qu’il faut désactiver ce paramètre, activé par défaut.

La plupart des logiciels vous conseillent de faire un service qui ne fait que ça et qui sera lancé au démarrage de votre machine (ex. vertica, couchbase, …).

Je suis pas fan, je trouve que modifier un paramètre au démarrage ne devrait pas se faire comme ça.

La façon la plus "propre" de le faire est probablement de modifier la configuration du bootloader (souvent GRUB). Si vous avez GRUB, c’est assez facile de le faire puisque c’est une option à ajouter dans le grub :

cat /etc/default/grub
[...]
GRUB_CMDLINE_LINUX_DEFAULT="console=tty1 console=ttyS0 earlyprintk=ttyS0 rootdelay=300"
GRUB_CMDLINE_LINUX=""
[...]

## APRES
cat /etc/default/grub
[...]
GRUB_CMDLINE_LINUX_DEFAULT="console=tty1 console=ttyS0 earlyprintk=ttyS0 rootdelay=300 transparent_hugepage=never"
GRUB_CMDLINE_LINUX=""

Cependant, cette méthode nécessite de reconstruire votre fichier grub (avec grub2-mkconfig) donc j’imagine que c’est pour cela que cette méthode n’est pas mise en avant.

Une méthode alternative pour désactiver les transparent Huge Pages

Si vous ne vous sentez pas de modifier votre bootloader et que vous n’aimez pas, comme moi, l’idée de faire un service pour faire un echo au boot, il reste une dernière possibilité.

apt install sysfsutils
echo "kernel/mm/transparent_hugepage/enabled = never" >> /etc/sysfs.conf
echo "never" >> /sys/kernel/mm/transparent_hugepage/enabled

L’avantage, c’est que, contrairement à la modif du GRUB, ça va être ultra simple du coup d’automatiser ça avec Ansible. Je vais pouvoir intégrer la modification dans mes playbooks d’installation des logiciels cités en début d’article !

---
- hosts: all
  become: yes
  tasks:
  - name: "Install sysfsutils"
    apt:
      name: "{{item}}"
      state: present
    loop:
    - sysfsutils
  - name: "Disable permanently Transparent Huge Pages"
    lineinfile:
      path: /etc/sysfs.conf
      line: kernel/mm/transparent_hugepage/enabled = never
  - name: "Disable THP for this boot"
    shell: "echo 'never' >> /sys/kernel/mm/transparent_hugepage/enabled"

Et voilà :D

Cet article Redis, MongoDB, RabbitMQ, désactiver les Transparent Huge Pages est apparu en premier sur Zwindler's Reflection.

]]>
https://blog.zwindler.fr/2020/02/10/redis-mongodb-rabbitmq-desactiver-les-transparent-huge-pages/feed/ 4 2585
Retour d’expérience : 1 an à 90% https://blog.zwindler.fr/2020/02/03/retour-dexperience-1-an-a-90/ https://blog.zwindler.fr/2020/02/03/retour-dexperience-1-an-a-90/#comments Mon, 03 Feb 2020 07:30:00 +0000 https://blog.zwindler.fr/?p=5357 Retour d'expérience sur mon passage à 90% pour garder ma fille : les conditions, le regard des autres, les activités

Cet article Retour d’expérience : 1 an à 90% est apparu en premier sur Zwindler's Reflection.

]]>

Quoi !? Tu travailles à 90% !

Aujourd’hui, pas de technique. Je vais vous faire un petit retour d’expérience sur la situation professionnelle et personnelle dans laquelle je suis depuis maintenant 1 an : travailler à temps partiel, à 90% pour être précis.

Même si ce n’est qu’un 90%, c’est un choix personnel qui a eu conséquences multiples, plus ou moins fortes, à la fois sur ma vie personnelle et professionnelle.

Pourquoi en parler ?

J’ai hésité un moment avant d’écrire cet article.

D’abord parce qu’il me concerne personnellement et que je n’ai pas forcément envie de parler publiquement de ma vie privée. Parallèlement à ça, j’imagine (et c’est bien normal), que ma vie ne vous intéresse pas plus que ça de toute façon ;-p.

En revanche, je pense que mon retour d’expérience sur ce que j’ai vécu peut en intéresser d’autres, qui auraient le même genre de projet de vie que moi. A ces gens-là, je peux raconter ce que j’y ai trouvé de bon, de moins bon, de franchement génial.

Pourquoi ne pas en parler ?

Parmi les autres freins qui m’ont longtemps fait hésiter à en parler, c’est le regard des autres. Je me suis longtemps demandé ce qu’on allait penser de moi, le jour où j’allais demander de passer de 100% à 90%.

Car on ne va pas se le cacher, on vit dans un monde professionnel encore bien conservateur. Parfois même rétrograde.

Pour illustrer mon propos, je vous invite à aller faire un tour sur LinkedIn, où le salarié (souvent un homme bizarrement) travaillant 70h / semaine est régulièrement glorifié. Autant vous dire que quand j’essaye de ramener ces gens-là à la réalité, je me prends régulièrement des "fainéants" ou autre noms d’oiseaux.

Cet « expert » en « remise en forme du retail » s’insurge qu’on parle des ponts à la TV. Comme si ça n’était jamais arrivé les années précédentes…

On pourrait se dire que ça se limite aux réseaux sociaux, bien sûr, mais cette ambiance du siècle dernier (ou celui d’avant encore), je l’ai aussi vécu IRL.

Pour la petite histoire :

Un jour, ayant eu envie de faire moi-même une galette des rois, le directeur de l’entreprise, abasourdi que ce soit moi qui fasse la cuisine, a fait le tour des employés présents pour leur faire des blagues machistes, sexistes, voire même limite homophobe sur moi. Ambiance.

Bref, dans ce genre de contextes où un bon salarié est un salarié – surtout si c’est un homme! – qui veut travailler toujours plus, au début, je n’étais pas sûr d’assumer le fait de vouloir moins travailler. Encore moins en parler ouvertement.

Mais d’ailleurs, pourquoi vouloir un contrat à 90% ?

Car peut être que c’est eux qui ont raison ? Que je suis effectivement un fainéant ? ;-p

Il y a un an et demi, je suis devenu papa.

Être papa, c’est une fierté, mais c’est surtout une responsabilité. Je n’imaginais pas une seule seconde un monde où je serai père, mais pas impliqué. Je VEUX passer du temps avec ma fille.

Note : C’est un choix personnel, que chacun est libre de partager ou pas. Pas de jugement de ma part.

Je vous passe volontairement la galère pour trouve un mode de garde (ceux qui n’y sont pas encore, vous allez voir, c’est fun). Après avoir cherché une crèche et finalement trouvé une nounou, on a fait un rapide calcul (naïf) : en la faisant garder 5 jours par semaine pendant 10h/jour (choix standard avec deux parents travaillant en horaires de bureau), notre fille allait plus vivre avec la nounou que nous (si on décompte la nuit). Et ça ne nous paraissait pas acceptable.

Nous avons donc décidé de faire garder notre fille un jour de moins pour passer plus de temps avec elle.

Comment faire ?

Ce qu’il faut savoir quand on est sur le point d’être jeune parent, c’est qu’il existe plusieurs dispositions dans la loi et ce n’est pas forcément facile de s’y retrouver. (Et comme vous le savez, j’aime bien parler du droit du travail)

La plus importante d’entre elle est le congé parental, qui permet à n’importe quel parent de réduire son activité professionnelle (voire de la stopper totalement). Il existe un guide sur service-public.fr plutôt bien fait pour voir les conditions et autres modalités.

Grosso modo, ce qu’il faut savoir c’est que :

  • Le congé est ouvert à tout salarié ayant au moins 1 an d’ancienneté dans l’entreprise à la naissance ou l’adoption de l’enfant.
  • La durée initiale du congé parental est de 1 an maximum (renouvelable généralement 2 fois)

Notre idée initiale était donc, que pour la première année, ma femme se mette à 80% les 6 premiers mois, pour garder notre fille le mercredi, puis qu’à ses 6 mois, je prenne le relais pendant 6 mois également.

Pourquoi cette alternance de 80% à 6 mois ?

Effectivement, ça peut paraître un peu étrange au premier abord. La raison est économique.

Je suis conscient que j’ai beaucoup de chance d’avoir un métier qui me permet d’envisager la possibilité de passer à temps partiel. Pour autant, accueillir un tout petit, c’est un changement important dans le budget d’une famille.

Parallèlement à ce que je viens de dire pour le congé parental, il existe plusieurs aides financières, chacune avec leurs conditions :

Un point intéressant est que PreParE et CMG peuvent se cumuler tant que l’activité pro est entre 50 et 80% (mais pas à 90%) et que la PreParE est versée jusqu’au 1 an de l’enfant dans la limite de 6 mois par parent.

De cette manière, en alternant 6 mois à 80% chacun lors de la première année de l’enfant, on peut donc bénéficier à la fois de la PreParE et de la CMG, ce qui permet de réduire un peu les charges de cette première année.

Giphy – The hangover

Note : Malheureusement, toute cette belle planification que nous avions faite s’est heurtée à la dure réalité de la loi. N’ayant pas 1 an d’ancienneté au moment de la naissance de ma fille, je n’ai pas pu bénéficier d’un congé parental (et donc des aides associées). Nous avons donc décidé de simultanément passer à temps partiel par avenant au contrat de travail (avec un mercredi sur deux chacun).

Comment ça a été accueilli ?

Je l’ai dit en introduction. C’était LA grande inquiétude que j’avais. Quand j’ai fais la demande de temps partiel, je ne savais pas à quoi m’attendre de la part de mon manager, de mes collègues, des RHs…

Au final, j’ai été très vite rassuré. Je ne sais pas si cette situation s’est généralisée, si les mentalités ont évolués, si je suis bien tombé, etc.

Les retours sur ma décision ont été extrêmement positifs. La plupart des gens ont été très compréhensifs :

  • A aucun moment je n’ai eu de remarque négative ou sexiste, dans un environnement très masculin
  • Mon manager (et son remplaçant) ainsi que les ressources humaines ont accepté mon choix avec bienveillance
  • Lorsque je leur en ai parlé, certains collègues et connaissances ont exprimé l’envie de faire pareil

C’est bête à dire peut être, mais c’est aussi ce genre de choses qui font que je suis bien au travail : être compris en tant qu’être humain, avec mes priorités, au-delà de la simple productivité brute.

Des études sur le temps au travail dans l’IT ?

En cherchant à en savoir plus, j’ai eu du mal à trouver des chiffres sur les temps partiels dans l’IT. Je n’ai trouvé que 2 études et malheureusement avec assez peu de répondants :

  • une de fin 2011 sur developper.com qui montrait que la majorité des salariés de l’IT bossaient plus que 40h/semaine, avec un taux de "temps partiel" extrêmement faible (2%)
  • l’étude faite en fin d’année par Okiwi, limités au bassin bordelais, qui montre une bien meilleure proportion sous les 35h/semaine (autour de 8%). Naïvement, je suis tenté de penser que le monde du travail évolue dans le bon sens, même si rien ne permet de s’assurer que le temps partiel correspond à une réelle volonté des salariés d’y être et pas une situation subie

Est ce que ça gêne l’organisation de l’équipe ?

C’était une autre question. Dans la mesure du possible, ma seconde priorité était quand même que ma décision impacte le moins possible mon équipe.

Dans la pratique, ça aurait été un peu plus compliqué si le plan initial du 80% avait pu aboutir, car je fais aussi des astreintes. Évidemment, je ne peux pas être d’astreinte en même temps que je suis de garde avec ma fille.

Au final, en 90% avec seulement un mercredi sur deux où je ne suis pas dispo, je n’impacte pas ni la rotation des astreintes, ni l’exploitation courante des infrastructures et des services que je gère. L’équipe est suffisamment multi-compétences pour répondre, au moins au premier niveau, à toutes les problématiques que je gère habituellement.

Qu’est ce que ça change dans mon travail ?

Concrètement, pas grand chose. Déjà, le fait que mon 90% soit organisé de la sorte implique qu’une semaine sur deux, je travaille normalement.

Ensuite, comme nous communiquons beaucoup par messagerie instantanée et par mail, il est très facile pour moi ou mes collègues de prévenir quand je ne suis pas disponible.

Pour ce qui est de mon travail en lui même, au-delà de la simple exploitation des services informatiques, il faut juste en tenir compte lorsqu’on planifie des deadlines.

Éventuellement, la seule petite difficulté que j’ai c’est lorsque je dois dépiler une tonne de mails et de slack le jeudi matin, car la plupart des mes collègues ont travaillés normalement le mercredi. De toute façon, la plupart ayant déjà été traités par quelqu’un d’autre.

M’occuper de ma famille

Parce que c’est finalement le but ! Avoir plus de temps pour profiter des miens.

Si jamais le doute persiste toujours, j’aimerai vous confirmer que ce jour où je ne travaille pas est tout sauf un jour de congés ! S’occuper seul, toute une journée, d’une petite d’un an et demi ce n’est vraiment pas reposant ;-p.

Il y a une vraie différence entre un week end (où on peut voir la famille, voir des amis, s’en occuper alternativement, …). Le mercredi, si vous ne faites rien, vous êtes seuls et ça peut devenir long.

Ce que j’en retire

Car au final, il ne faut pas oublier que je fais AUSSI ce 90% pour moi.

Passer du temps pour s’occuper de notre fille, "c’est notre projet".

J’ai vraiment l’impression de passer du temps avec elle. Le week end passe toujours très vite, il y a toujours beaucoup à faire… Et le soir, même en s’organisant pour être à la maison à 18h (ce qui n’est déjà pas très startup-nation), avec un dodo à 19h30, certes on rigole mais c’est vite fini. On profite, mais on ne prend pas le temps.

Ce mercredi sur 2, c’est du temps où je ne m’occupe QUE d’elle. C’est un temps entre elle et moi.

Récap’ de mon 90%

Voilà donc en résumé, après 1 an, ce que je pense de mon 90% :

  • c’est une baisse de revenus (10% de nos salaires) qui n’est pas neutre. Ma femme et moi avons la chance de pouvoir le faire mais nous sommes conscient que ce n’est pas le cas de tout le monde.
  • dans mon entourage, les gens ont plutôt bien compris notre choix. Certains ont même eu envie de le faire à leur tour.
  • dans mon entreprise, ce choix est très bien compris et accepté. Les mentalités changent et c’est bien !
  • il faut trouver des choses à faire pour profiter pleinement de cette journée en plus avec vos enfants. Moi qui suis plutôt introverti et casanier, il a fallut que je sorte de ma zone de confort mais c’est vraiment pour le mieux.
  • je me sens vraiment acteur de l’épanouissement de ma fille, ce qui était le but dès le départ.

Inutile de le dire, j’ai évidemment prolongé d’un an supplémentaire :-)

Si vous voulez discuter de ça avec moi, n’hésitez pas à laisser un commentaire, à me contacter sur Twitter ou m’écrire un e-mail.

Bonus

L’envie d’écrire cet article a été aussi inspirée par ce post de Fabien LAMARQUE, un indépendant sur Bordeaux, qui, pour d’autres raisons, a cherché lui aussi un autre équilibre vie pro/vie perso que le classique "5 jours par semaine".

Dans un tout autre genre, je vous conseille cet excellent sketch de Karim Duval "Élever son enfant en mode Start-up" qui me fait mourir de rire.

Source : https://www.youtube.com/watch?v=Ps3UNPLpmKc

Cet article Retour d’expérience : 1 an à 90% est apparu en premier sur Zwindler's Reflection.

]]>
https://blog.zwindler.fr/2020/02/03/retour-dexperience-1-an-a-90/feed/ 16 5357
Syntec : le cadre forfait 218 jours en 2020 https://blog.zwindler.fr/2020/01/27/syntec-le-cadre-forfait-218-jours-en-2020/ https://blog.zwindler.fr/2020/01/27/syntec-le-cadre-forfait-218-jours-en-2020/#comments Mon, 27 Jan 2020 07:30:00 +0000 https://blog.zwindler.fr/?p=5423 Pour bien comprendre le cadre au forfait en jours en Syntec, avec les minima pour 2020

Cet article Syntec : le cadre forfait 218 jours en 2020 est apparu en premier sur Zwindler's Reflection.

]]>

Le cadre au forfait en jours dans la convention collective Syntec

Ce n’est pas le premier article que j’écris sur le sujet du cadre au forfait jour en Syntec. En fait, j’en ai écris un autre, similaire, il y a un peu plus de 2 ans et qui est encore beaucoup lu et a suscité pas mal de commentaires.

Deux ans plus tard, il y a forcément quelques ajustements à faire, car la convention ET le cadre législatif ont bougés depuis (notamment les ordonnances Macron). De plus, l’article précédent ayant donné lieux à quelques vifs débats, il est également normal que j’intègre tout ça dans un article plus à jour.

Note : Cet article ne s’applique qu’à la convention collective Syntec. Les autres conventions ayant mis en place des forfaits jours reposent sur d’autres règles qui n’ont strictement rien à voir.

Mais d’abord, qu’est ce que c’est que le forfait jour ?

La première chose à savoir est que la notion de cadre au forfait en jours est un héritage moins connu de la fameuse loi travail de Martine Aubry des 35h en 2000 (dite Aubry 2). A l’époque, les organisations patronales avaient demandées à ce que les cadres les plus autonomes dans les entreprises puissent déroger aux 35h.

J’ai rencontré, par le biais de mes connaissances, le cas du "forfait jours" à plusieurs reprises, notamment mais pas seulement, dans des ESN/SSII, qui sont bien souvent en convention collective Syntec.

Souvent, ces entreprises entretenaient un certain flou artistique sur ce qu’était ce "forfait jours". Et comme les textes sont relativement indigestes et que la plupart des sites ne font que paraphraser LegiFrance, j’en ai fais un article pour essayer de vous l’expliquer avec les mots d’un salarié.

Ce que dit LegiFrance

Je viens de dire que c’était indigeste et je vais quand même avoir le culot vous mettre le texte de loi (disponible ici) pour qu’on soit bien d’accord.

Pour les cadres mentionnés à l’article L. 3121-38, la convention ou l’accord collectif de travail qui prévoit la conclusion de conventions de forfait en jours fixe le nombre de jours travaillés. Ce nombre ne peut dépasser le plafond de deux cent dix-huit jours.

Cette convention ou cet accord prévoit : 1° Les catégories de cadres intéressés au regard de leur autonomie dans l’organisation de leur emploi du temps ; 2° Les modalités de décompte des journées et des demi-journées travaillées et de prise des journées ou demi-journées de repos ; 3° Les conditions de contrôle de son application ; 4° Des modalités de suivi de l’organisation du travail des salariés concernés, de l’amplitude de leurs journées d’activité et de la charge de travail qui en résulte.

On apprend pas grand chose, mis à part que le cadre autonome doit être réellement autonome (thanks captain obvious) dans l’organisation de leur travail et qu’il travaille dans une limite de 218 jours, comptabilisés par demi-journées.

Tout le reste est renvoyé à la convention collective de l’employeur ou à un éventuel accord collectif.

Note: Vous verrez peut être mention de 217 jours sur certains sites : il s’agit de l’ancienne notation qui incluait à part le jour de solidarité.

Ce que nous dit la Syntec

Le moins qu’on puisse dire c’est que, pour le néophyte, il n’est pas simple de se retrouver dans la Syntec tant la convention collective est décousue.

Elle est découpée en plusieurs fichiers PDF distincts (trop facile pour faire un Ctrl-F !), avec d’un côté les Titres, de l’autres, les Annexes, les Avenants et les Accords. On peut trouver la majorité de ces fameux PDF ici.

En lisant l’accord du 22 juin 1999 (dont vous entendrez parfois parlé comme de "l’annexe 7", qui n’est pas visible sur le site mais qu’on peut encore retrouver, bien caché sur le site de syntec.fr), on apprend que la Syntec propose 3 types de contrats de travail, appelées modalités :

  • La modalité standard (1), qui est en fait une application classique des 35 heures.

  • La modalité dite de "réalisation de missions" (2), qui est assez souvent appliquée pour les ingénieurs en SSII/ESN car plus souple que les 35 heures. Il s’agit d’une adaptation des 35 heures dans lesquelles un contingent d’heures supplémentaires non rémunérées est inclus, à hauteur de 10% par semaine, contre une revalorisation des minima de 15% supérieure ET un salaire mensuel au moins égal au PMSS.

  • La modalité dite de "réalisation de missions avec autonomie complète" (3), qui est le vrai forfait en jours, généralement pour les cadres dirigeants.

Un point très important que je voudrais souligner tout de suite : il n’est pas rare que des ESN abusent du terme "forfait jours" en parlant en fait d’une modalité (2) de "réalisation de missions". Le piège est que cette modalité fait mention d’un "nombre de jours maximum travaillés dans l’année", ce qui laisse à penser que c’est un forfait jours.

Pour autant, il s’agit bien d’un forfait en heures et donc potentiellement générateur d’heures supplémentaires (si vous faites plus de 3,5h supp’ dans la semaine). Il y a d’ailleurs eu plusieurs jurisprudences à ce sujet, avec des rappels de salaires à la clés pour les salariés concernés (voir ce billet de blog).

Au cas où vous auriez encore un doute, il existe une notice détaillant les 2 types de forfaits qui existent (heures et jours) sur le site de travail-emploi.gouv.fr (et plus digeste que Legifrance !).

A partir de maintenant, je vais donc volontairement mettre de côté la modalité (2) puisque je vous ai expliqué que ce n’était en fait pas un forfait en jours.

Conditions pour bénéficier de la modalité (3)

On l’a vu un peu plus haut, le code du travail renvoie à la convention collective ou à un accord d’entreprise le soin d’organiser la majeure partie des modalités permettant de décider si une personne est éligible au forfait jours ou non.

Et justement, la Syntec a instauré un certain nombre de conditions et d’obligations pour l’employeur, en plus de ce que dit le code du Travail.

Pour pouvoir relever de ces modalités, les collaborateurs concernés doivent obligatoirement disposer de la plus large autonomie d’initiative […] Ils doivent donc

  • disposer d’une grande latitude dans leur organisation du travail et la gestion de leur temps
  • et doivent également bénéficier
    • de la position 3 de la convention collective (en général les positions 3.2 et 3.3 et dans certains cas 3.1)
    • ou avoir une rémunération annuelle supérieure à 2 fois le plafond annuel de la sécurité sociale
    • ou être mandataire social

Enfin, en plus des 3 règles énoncées ci dessus en terme de rémunération, les minima sont également majorés à 120 % pour les cadres en modalité (3) (un peu plus loin dans la convention).

En clair, quelles sont les conditions ?

Il y a donc plusieurs façons de vérifier si un salarié est éligible ou non au forfait jour dans un entreprise Syntec.

Autonomie

Le premier critère, pas seulement applicable à la Syntec, mais aussi dans le code du travail, est l’autonomie. On l’a vu au début de l’article, ce point est capital et les deux textes insistent lourdement là dessus.

  1. Les cadres qui disposent d’une autonomie dans l’organisation de leur emploi du temps et dont la nature des fonctions ne les conduit pas à suivre l’horaire collectif applicable au sein de l’atelier, du service ou de l’équipe auquel ils sont intégrés ;
  2. Les salariés dont la durée du temps de travail ne peut être prédéterminée et qui disposent d’une réelle autonomie dans l’organisation de leur emploi du temps pour l’exercice des responsabilités qui leur sont confiées.

Article L3121-43 du Code du travail

Cependant c’est aussi le plus subjectif ou soumis à interprétation, car il n’existe pas de définition légale de ce qu’est l’autonomie. Deux exemples me viennent à l’esprit :

  • Est ce qu’un ingénieur, piloté par un chef de projet, mais qui a toute latitude pour exécuter les tâches qu’on lui donne et dans l’ordre qu’il le souhaite, est considéré autonome ?
  • Est ce qu’un salarié dont les congés sont déterminés ou annulés par son supérieur hiérarchique peut être au forfait jours ?

Il n’y a rien d’extrêmement clair dans les jurisprudences, car c’est probablement assez rarement un cas de litige allant jusqu’aux prud’hommes et plus.

Classification

Ici en revanche, la Syntec est claire sur les règles d’éligibilité, il faut être cadre 3.1 au minimum. Selon la Syntec, impossible donc d’être au forfait jours si vous êtes en 2.3, SAUF à la très improbable exception que vous ayez une rémunération annuelle brute égale à 2 fois le PASS.

Pour autant, n’espérez pas réclamer à votre employeur 2x le PASS si vous êtes au forfait en jours, mais pas en position 3.1 ou plus. En Syntec, n’est pas cadre position 3.x qui veut. La convention fixe des critères stricts et objectifs de diplômes, d’âge, d’expérience et de responsabilité (cf Annexe 2).

Les jurisprudences ont plutôt tendance à annuler les forfaits jours plutôt qu’à accorder des rappels de salaires.

En effet, les magistrats ont estimés qu’il n’y avait pas lieu de rattraper les salaires de ces employés car ils ne répondaient pas aux critères permettant d’accéder à la position 3.1. Ils n’étaient donc pas éligibles au forfait jours (et donc au rappel de salaire consécutif), qui a été annulé. Je vous ai mis quelques arrêts en fin d’article.

Rémunération

Maintenant qu’on a bien en tête mes problématiques de classification, on peut s’intéresser aux minima. Depuis l’été dernier, les minima Syntec ont été réévalués (et le PMSS/PASS évolue tous les ans) :

Positions (coeff.) Valeur du point Salaires minimaux brut mensuels PMSS 2020
Modalité 1 (standard 100%) 2 (meilleur entre 115% et PMSS) 3 (meilleur entre 120% et 2xPMSS) 3428,00 €
1.1 (95) 20,88 1983,60 € 3428,00 € 2xPMSS 2017
1.2 (100) 20,88 2088,00 € 3428,00 € 6856,00 €
2.1 (105) 20,82 2186,10 € 3428,00 €
2.1 (115) 20,82 2394,30 € 3428,00 €
2.2 (130) 20,82 2706,60 € 3428,00 €
2.3 (150) 20,82 3123,00 € 3591,45 €
3.1 (170) 20,53 3490,10 € 4013,62 € 6856,00 €
3.2 (210) 20,53 4311,30 € 4958,00 € 6856,00 €
3.3 (270) 20,53 5543,10 € 6374,57 € 6856,00 €

Pour information, le PMSS 2020 se situe à 3428€. 2x le PASS correspond à une rémunération de 82272€ bruts annuels.

Cette somme, très importante, est sans commune mesure avec les salaires que perçoivent beaucoup de salariés, normalement couverts par la Syntec.

Aparté interprétation

Un point d’interprétation a conduit à de vifs débats sur le précédent article. Il s’agit de ma lecture de la phrase "doivent également bénéficier de la position 3 de la convention collective OU avoir une rémunération annuelle supérieure à 2 fois le plafond annuel de la sécurité sociale".

Plusieurs personnes ont soutenus l’idée que, si la personne est effectivement en position 3 (en 3.1 par exemple), alors la règle du "2x le PASS" ne s’applique pas.

Je ne suis pas juriste et ne saurais donc affirmer mon propos avec certitude. Cependant, de nombreuses pistes qui me laissent penser que j’ai raison :

  • Dans un texte juridique, tous les mots ont un sens. Et il se trouve qu’en français, le « ou » est inclusif, pas exclusif. Il faut donc le comprendre comme un "ET/OU" (ce qui est un affreux pléonasme) et pas "l’un ou l’autre", dans le cas d’un salarié position 3.x.
  • En France, la norme jusqu’à la loi travail, ça a toujours été « en cas de choix, c’est le meilleur des deux qui prévaut ». C’est particulièrement vrai pour les aspects "rémunération".
  • Des avocats ont conseillés à des dirigeants que je connais de faire « sauter » cette clause de 2xPASS par accord d’entreprise et ainsi éviter de payer trop cher les forfaits jours en position 2.x.
  • En raisonnant par l’absurde, si c’était un "ou" exclusif, on se retrouverait à avoir des salariés en position 2.x dont les minima seraient supérieurs à ceux de la position 3.x, ce qui évidemment impossible.

S’affranchir de la règle de 2xPASS

Si vous avez lu le petit aparté que j’écris juste au dessus, vous savez déjà qu’il est possible de déroger à la convention collective.

Certains employeurs proposent, par le biais d’un accord collectif d’entreprise signé par les syndicats, ou à défaut, par une majorité des employés par referendum de modifier ces deux conditions d’entrée en modalité (3).

Jusqu’aux ordonnances Macron, ces accords étaient carrément bordeline. Personnellement, je pense même qu’ils étaient illégaux, dans le sens où ils étaient moins disant en terme de minima, ce qui était interdit par l’article L2253-3

"En matière de salaires minima, […] un accord d’entreprise ou d’établissement ne peut comporter des clauses dérogeant à celles des conventions de branche […]"

Cependant, tout ça c’est maintenant de l’histoire ancienne puisque les ordonnances ont chamboulé tout ça :

Conformément au IV de l’article 16 de l’ordonnance n° 2017-1385 du 22 septembre 2017, pour l’application du présent article, les clauses des accords de branche, quelle que soit leur date de conclusion, cessent de produire leurs effets vis-à-vis des accords d’entreprise à compter du 1er janvier 2018.

Il est donc maintenant tout à fait légal (bien que totalement contraire à l’esprit de la Syntec) de tordre le bras aux salariés pour qu’ils acceptent de voter un accord d’entreprise autorisant l’annulation pure et simple des rares gardes fous présents dans leur convention collective ;-).

Conclusion

Voilà, maintenant vous savez tout sur les arcanes de la modalité (3) de la Syntec, qui organise la mise en place de forfaits en jours dans les entreprises du numérique.

Si vous voulez échanger sur le sujet, les commentaires sont ouverts !

Bonus : conséquences d’une hypothétique annulation du forfait en jours

Je l’ai déjà dit, on voit bien avec les arrêts des cours tendent plutôt à annuler les forfaits jours plutôt qu’accorder des rappels de salaires.

Pour autant, cela peut quand même avoir des conséquences pour l’employeur. En effet, une fois son forfait annulé, le salarié repasse dans les 35 heures (modalité 1 ou 2 selon ce qui se fait dans l’entreprise). Il peut donc demander un rappel de toutes les heures supplémentaires qu’il a effectué dans une limite de 3 ans.

On pourrait penser qu’elles ne peuvent pas être réclamées. Le cadre, précédemment réputé au forfait jour, ne peut pas justifier des heures supplémentaires qu’il aurait pu réalisé, puisqu’il n’est pas soumis au contrôle horaire.

Cependant, il s’avère que la jurisprudence ne demande pas aux salariés de fournir une preuve complexe. Par exemple, dans le cas d’une veilleuse de nuit qui réclamait des heures supplémentaires non payées suite à un licenciement, un simple décompte des heures supplémentaires réalisées noté sur un papier a été considéré comme suffisant. La encore j’ai aussi mis un exemple en fin d’article.

Charge à l’employeur d’apporter la preuve que l’employé n’a pas réalisé les heures supplémentaires qu’il prétend avoir faites. Et sans contrôle horaire, ça me parait compliqué à prouver.

Bonus : modalités supplémentaires

A noter, il existe également plusieurs obligations faites à l’employeur :

  • Le passage au forfait jour doit faire l’objet d’un avenant au contrat du cadre, qui par définition peut le refuser
  • Le cadre doit bénéficier de plusieurs entretiens annuels, notamment pour valider que sa charge de travail n’est pas importante, que les repos quotidiens et le repos hebdomadaires sont bien respectés, etc. La fréquence de ces entretiens est bi-annuelle depuis 2014

Jurisprudences utiles

A propos des salariés forfait jours qui ont demandé des rappels de salaires à 2x le PASS.

« qu’en statuant ainsi, alors qu’elle avait constaté que le salarié qui avait moins de six ans de pratique en qualité de cadre, ne pouvait être classé à la position 3.1, ce dont il se déduisait qu’il n’était pas susceptible de relever du régime du forfait jours qui lui avait été appliqué, la cour d’appel, qui n’a pas tiré les conséquences légales de ses constatations, a violé les textes susvisés. »

Cass. Soc.3 novembre 2011, n°10-14638 et 10-14637

« La cour d’appel, qui a constaté que le salarié ne rapportait pas la preuve de ce qu’il occupait réellement des fonctions correspondant à la position 3.1, a exactement décidé que le bénéfice d’une rémunération supérieure au double du plafond annuel de la sécurité sociale ou le classement à la position 3 de la classification des cadres constituent des critères possibles permettant de ranger un cadre parmi ceux définis à l’article 4 de l’accord du 22 juin 1999 en vue de lui appliquer un régime forfaitaire de durée du travail mais ne sauraient être interprétés comme une obligation d’assurer une telle rémunération ou une telle classification à un cadre n’entrant pas dans le champ d’application de cet article. »

Cass. Soc. 3 novembre 2011, n°10-20191

A propos du rappel des heures supplémentaires notées sur un papier

En cas de litige relatif à l’existence ou au nombre d’heures de travail accomplies, il appartient au salarié d’étayer sa demande par la production de tous éléments suffisamment précis pour permettre à l’employeur de répondre en apportant, le cas échéant, la preuve contraire. Dès lors doit être cassé l’arrêt qui pour rejeter une demande en paiement d’heures complémentaires retient que le salarié ne produit pas d’éléments de nature à étayer sa demande lorsqu’il verse aux débats un décompte établi au crayon, calculé mois par mois, sans autre explication ni indication complémentaire, alors que ce document permettait à l’employeur d’y répondre.

Cass. Soc 24 novembre 2010, n°09-40928

Cet article Syntec : le cadre forfait 218 jours en 2020 est apparu en premier sur Zwindler's Reflection.

]]>
https://blog.zwindler.fr/2020/01/27/syntec-le-cadre-forfait-218-jours-en-2020/feed/ 5 5423
kubectl tips and tricks n°2 https://blog.zwindler.fr/2020/01/20/kubectl-tips-and-tricks-n2/ https://blog.zwindler.fr/2020/01/20/kubectl-tips-and-tricks-n2/#respond Mon, 20 Jan 2020 07:30:00 +0000 https://blog.zwindler.fr/?p=5382 Ensemble de tips and tricks rarement mis en avant pour améliorer votre productivité sur Kubernetes avec kubectl

Cet article kubectl tips and tricks n°2 est apparu en premier sur Zwindler's Reflection.

]]>

kubectl

Comme vous pouvez le voir, il s’agit du 2ème article d’une série sur la productivité quand on est dans un environnement Kubernetes. Et qui dit productivité dit forcément ligne de commande, donc kubectl :trollface:!

Le premier article, si vous l’avez loupé, est toujours disponible ici : kubectl tips and tricks n°1. J’avais parlé du flag "wait", de comment relancer un Job ou un CronJob et de comment utiliser les selectors.

Et j’ai aussi écris un article sur kubectx et kubens qui pourrait vous plaire.

Normalement, les astuces que je vais vous montrer ici ne sont pas dans la plupart des tutos que j’ai pu trouver sur le net. Cet article se concentre tout particulièrement sur les Secrets de Kubernetes.

C’est parti pour du fun avec kubectl !

Encoder/décoder facilement en base64 les Secrets

Quelque chose qu’on a TOUT le temps à faire quand on manipule les objets de type Secrets dans Kubernetes, c’est d’afficher en clair les "secrets" contenus dans notre Secret (ou de les encoder).

Car, pour ceux qui ne le savent pas, les Secrets dans Kubernetes ne sont malheureusement pas très secrets, puisqu’il s’agit ni plus ni moins que des strings encodées en base64 (ce qui est donc TOUT sauf secure). A vrai dire, je me demande même pourquoi s’être embêter à les encoder tout court. La seule sécurité qu’on ajoute par rapport aux ConfigMaps, c’est simplement que la string n’est pas lisible par un humain qui passerait sa tête par dessus votre épaule.

Enfin bref, vous allez surement devoir encoder ou décoder des strings en base64 et c’est parfois un peu pénible. La méthode communément admise est simplement d’utiliser les binaires linux echo et base64.

echo "ma string" | base64
bWEgc3RyaW5nCg==

echo bWEgc3RyaW5nCg== | base64 -d
ma string

C’est relou à taper, mais c’est relativement trivial.

It’s a trap !

Sauf qu’il y a des pièges !

Le premier vous l’aurez à l’encodage. Dans mon premier exemple, la string est très courte. Et parfois, la taille compte.

echo "ma string très longue string pour montrer que ça va pas le faire" | base64
bWEgc3RyaW5nIHRyw6hzIGxvbmd1ZSBzdHJpbmcgcG91ciBtb250cmVyIHF1ZSDDp2EgdmEgcGFz
IGxlIGZhaXJlCg==

Ici, on se retrouve avec un saut de ligne dans notre string en sortie. Mais, si vous copiez collez ça dans votre YAML Kubernetes, vous allez vous prendre une bonne grosse erreur de syntaxe.

Le YAML ne sera valide que si vous mettez la string complète, sur une seule ligne.

echo "ma string très longue string pour montrer que ça va pas le faire" | base64 -w0
bWEgc3RyaW5nIHRyw6hzIGxvbmd1ZSBzdHJpbmcgcG91ciBtb250cmVyIHF1ZSDDp2EgdmEgcGFzIGxlIGZhaXJlCg==

Et c’est pas fini !

Le 2 ème piège est encore un souci de saut de ligne, mais dans la string en base64 cette fois.

En fait, c’est hyper traitre car vous n’allez pas le voir à l’écran de prime abord, mais il faut savoir que echo rajoute un saut de ligne à la fin de votre string. Le retour que vous avez eu en base64 contient donc un saut de ligne, qui sera quasiment systèmatiquement non souhaité lorsqu’on gère des Secrets.

La bonne commande n’est donc pas echo mais echo -n !

#Pas bien
echo "ma string" | base64
bWEgc3RyaW5nCg==

#Bien
echo -n "ma string" | base64 -w0
bWEgc3RyaW5n

Ok ça commence à devenir franchement pénible…

Pour décoder heureusement, c’est plus simple. La commande donnée au début suffit, même s’il sera plus safe de rajouter le "-n" au echo :

echo -n bWEgc3RyaW5n | base64 -d
ma string

Gagner quelques caractères

Comme je suis fainéant, j’ai cherché une astuce pour gagner quelques caractères à taper en moins. Il existe une solution, mais qui ne marche malheureusement que pour decode, puisque dans le cas de l’encodage on risquera d’ajouter un saut de ligne non souhaité :

echo bWEgc3RyaW5n | base64 -d

base64 -d <<< bWEgc3RyaW5n
ma string

On vient de s’économiser 3 caractères (waaaah) mais surtout un "|", bien plus pénible à faire sur un clavier azerty standard que 3 "<".

Je vous l’accorde, c’est pas foufou.

Un peu plus simple

Heureusement, mon collègue Julien (aka JUL, car il est fan de JUL, bien entendu) nous a écris un petit script pour nous faciliter la vie, donc je vous le partage :

dgermain:~$ cat > b64 <<EOF 
> #!/bin/bash
> echo -e "Base64 encoding.. \n"
> for arg in "\$@"; do
>   echo "\$arg :"
>   echo -n "\$arg" | base64
>   echo
> done
> EOF
dgermain:~$ cat > b64d <<EOF 
> #!/bin/bash
> echo -e "Base64 decoding.. \n"
> for arg in "\$@"; do
>   echo "\$arg :"
>   echo -n "\$arg" | base64 -d
>   echo
> done
> EOF
dgermain:~$ sudo cp b64* /usr/local/bin/

Vous pouvez maintenant invoquer directement b64 suivi d’un certain nombre de strings pour avoir leur valeur encodée, ou b64d suivi d’un certain nombre de string pour les décoder.

Dernière astuce et après j’arrête

Si jamais vous voulez à l’écran toutes les strings encodées en base64 dans un Secret Kubernetes en une seule étape, j’ai également trouvé ce oneliner pas piqué des hannetons sur Stackoverflow qui tire parti de la possibilité de faire des gotemplates directement dans kubectl :

kubectl get secret name-of-secret -o go-template='
{{range $k,$v := .data}}{{printf "%s: " $k}}{{if not $v}}{{$v}}{{else}}{{$v | base64decode}}{{end}}{{"\n"}}{{end}}'

Il faudra probablement que je fasse un article entier sur le go-templating avec kubectl car c’est juste ouf ce qu’on peut faire avec ;-)

Cet article kubectl tips and tricks n°2 est apparu en premier sur Zwindler's Reflection.

]]>
https://blog.zwindler.fr/2020/01/20/kubectl-tips-and-tricks-n2/feed/ 0 5382
Lancer AIDungeon 2 sur Ubuntu 18.04 https://blog.zwindler.fr/2020/01/13/lancer-aidungeon-2-sur-ubuntu-18-04/ https://blog.zwindler.fr/2020/01/13/lancer-aidungeon-2-sur-ubuntu-18-04/#respond Mon, 13 Jan 2020 07:15:00 +0000 https://blog.zwindler.fr/?p=5373 Tutoriel étape par étape pour héberger soit même le jeu AIDungeon 2 localement sur un serveur Ubuntu 18.04 vierge (et une grosse carte graphique NVidia)

Cet article Lancer AIDungeon 2 sur Ubuntu 18.04 est apparu en premier sur Zwindler's Reflection.

]]>

AIDungeon 2

Il y a quelques semaines, je suis tombé sur AIDungeon 2, un jeu hilarant qui mixe jeu d’aventure textuel, machine learning et de gros (GROS) GPUs NVidia.

Note: English speakers, I’ve released an english version of this tutorial here

AIDungeon2 is a first of its kind AI generated text adventure. Using a 1.5B parameter machine learning model called GPT-2 AIDungeon2 generates the story and results of your actions as you play in this virtual world.
Unlike virtually every other game in existence, you are not limited by the imagination of the developer in what you can do. Any thing you can express in language can be your action and the AI dungeon master will decide how the world responds to your actions.

https://www.aidungeon.io/

Si vous n’en avez pas encore entendu parler, il s’agit d’un projet de machine learning créé par Nick Walton. Il est basé sur le model GPT-2 d’OpenAI que vous avez peut être déjà croisé dans d’autre projets fun comme celui qui permet, à partir de quelques lignes de texte, d’écrire une suite : TalkTotransformer by Adam D King.

Et ça fait quoi ?

C’est là où le fun commence. Comme TalkToTransformer, à partir d’un texte de départ semi aléatoire, le modèle de machine learning commence à construire une nouvelle histoire, différente à chaque fois. Et ce sont vos actions et votre imagination qui vont diriger l’histoire dans un sens ou dans l’autre.

Je ne vais pas mentir, c’est encore loin d’être parfait. Le modèle a la facheuse tendance à tourner en rond, ou alors à oublier ce que les personnages viennent de faire, juste une ligne plus haut. Et ça peut un peu gâcher l’histoire.

Mais… si on met de côté ces petits soucis de jeunesse, ce qui est vraiment incroyable, ce sont les possibilités qui semblent vraiment illimités. C’est vraiment très impressionnant.

Au final, ce n’est pas tellement surprenant. La seule limite du modèle, c’est le savoir et le style d’écriture d’OpenAI, qui se base sur 40 Go de texte provenant d’Internet. C’est colossal !

Si jamais vous avez besoin d’exemples concrets, je vous invite à aller faire un tour sur le Twitter de Nick Walton ou alors sur le subreddit dédié à AIDungeon. Vous y trouverez tout type d’aventures hilarantes compilées par les joueurs.

In this example, my inputs are the 2 lines preceded by the « > » symbol, the machine did the rest

Ok c’est cool ! Quel est le problème ?

En fait, j’en ai déjà parlé.

Le jeu, qui n’est ni plus ni moins qu’un prompt et du texte qui s’affiche, est très probablement le jeu le plus gourmand en GPU que vous avez rencontré. Quelle délicieuse ironie ;).

En réalité, le jeu nécessite actuellement près de 9 Go de VRAM GPU et un très grand nombre de coeurs CUDA pour fonctionner. Cela écarte d’office toutes les cartes AMD, ainsi que presque toutes les cartes graphiques NVidia (hormis les plus chère, à + de 1000€).

Dommage.

La communauté

Heureusement, l’enthousiasme de la communauté pour ce jeu a motivé Nick Walton et son frère à trouver des solutions. Pendant le mois de décembre, ils ont tout plaqué (dont des exams) pour proposer une infrastructure sous AWS, ainsi qu’une application iOS, Android, et une application web pour que tout le monde puisse en profiter.

Seulement, vous vous en douter, faire tourner une infra aussi gourmande à un coût. Selon les dires de Nick, les instances AWS avec des cartes Tegra leur coutent autour de 65000 dollars par mois. Malgré le Patreon qu’ils ont ouvert et qui a permis de récolté 15000$, on est loin du compte.

Il est probable qu’à terme, le jeu ne soit plus gratuit. Du coup, si le jeu vous plait, je vous invite à aller voir leur Patreon !

Et maintenant ?

La troisième raison (au delà de la prouesse technique et du côté fun) pour laquelle je me suis intéressé au projet est que Nick l’a open sourcé, dès le début.

On peut donc imaginer, si on a suffisament de puissance sur sa machine, pouvoir le lancer soit même (et ça c’est cool).

Les sources sont disponibles sur le compte Github AIDungeons.

Mais à partir de là, je me suis dis que ça pourrait être sympa de lancer AIDungeon 2 sur une instance GPU d’un cloud provider lambda.

Donc j’ai décidé d’essayer ;-p.

Pour mon test, j’ai donc choisi de commander une instance virtuelle NC6 (6 vcpus, 56 GiB memory, Tegra K80) de chez Microsoft Azure avec un compte de test gratuit. Mais c’est évidemment applicable à n’importe quelle machine, physique ou chez un autre provider, que vous auriez à votre disposition. Il faut juste qu’elle soit équipée d’une GTX 1080 Ti, GTX 2080 Ti, GTX 2080ti super ou équivalent pro.

Ce type de machine coute, selon les datacenters (mais ça nous importe peu ici) environ 43 centime d’euro de l’heure. On peut même descendre à 0,21€ en utilisant des VMs préemptibles. Du coup, même sans avoir un compte d’essai, ça ne reviendra pas très cher si vous ne faites que l’essayer.

Sur ma NC6, j’ai déployé un basique Ubuntu 18.04 et c’est là que le tutoriel commence !

Note: En suivant à la lettre le tuto et en partant d’une Ubuntu 18.04 fraichement installée, vous devriez en avoir tout de même pour 30 à 45 minutes d’installation de packages et de prérequis.

Installer les mises à jour et les prérequis

La première chose à faire est évidemment de tout mettre à jour.

sudo apt-get update
sudo apt-get upgrade

Une fois que c’est fait, on passe aux packages systèmes dont on a besoin pour la suite :

sudo apt-get install git aria2 unzip python3-pip

L’enfer des dépendances

Et c’est la que le vrai fun commence (ou pas). Cette partie justifie quasiment à elle seule le tuto. AIDungeon utilise TensorFlow (la lib de machine learning) et les drivers NVidia et CUDA pour fonctionner correctement. Cependant, la blague, c’est que toutes les versions de chaque composants ne fonctionneront pas ensemble.

Pour démarrer AIDungeons, vous aller devoir explicitement installer tensorflow 1.15 (pas plus, pas moins). Et bien sûr tensorflow==1.15 nécessite spécifiquement cuda10.0 (pas cuda10.1 ni cuda10.2) et Python de la version 3.4 à la version 3.7!

Horreur…

Installer les drivers NVidia, Cuda et les modules de machine learning

Ajoutez les dépôts pour cuda10.0:

wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu1804/x86_64/cuda-repo-ubuntu1804_10.0.130-1_amd64.deb
sudo dpkg -i cuda-repo-ubuntu1804_10.0.130-1_amd64.deb
sudo apt-key adv --fetch-keys https://developer.download.nvidia.com/compute/cuda/repos/ubuntu1804/x86_64/7fa2af80.pub
sudo apt-get update

wget http://developer.download.nvidia.com/compute/machine-learning/repos/ubuntu1804/x86_64/nvidia-machine-learning-repo-ubuntu1804_1.0.0-1_amd64.deb
sudo apt install ./nvidia-machine-learning-repo-ubuntu1804_1.0.0-1_amd64.deb
sudo apt-get update

Maintenant, installer les drivers nvidia-driver, puis rebooter (c’est important) :

sudo apt-get install --no-install-recommends nvidia-driver-440 xserver-xorg-video-nvidia-440
sudo reboot

Après reboot, installer les libs pour cuda10.0

sudo apt-get install --no-install-recommends \
    cuda-10-0 cuda-runtime-10-0 cuda-demo-suite-10-0 cuda-drivers \
    libcudnn7=7.6.2.24-1+cuda10.0 libcudnn7-dev=7.6.2.24-1+cuda10.0

sudo apt-get install -y --no-install-recommends libnvinfer5=5.1.5-1+cuda10.0 \
    libnvinfer-dev=5.1.5-1+cuda10.0

Récupérer les sources

Téléchargez les sources depuis Github :

git clone https://github.com/AIDungeon/AIDungeon/
cd AIDungeon/

Installer python3, les dépendances via pip3

Et non, ce n’est toujours pas terminé. Maintenant qu’on a récupéré les sources, il est nécessaire d’installer tous les modules Python3 nécessaire à l’exécution du jeu.

Par défaut, Ubuntu 18.04 utilise toujours Python dans sa version 2 comme interpréteur Python par défaut. Or, vous le savez tous, Python 2 vient de tirer sa révérence ce 1er janvier.

De plus, pip, le package manager de Python, installé est une vieille version. Elle ne propose tensorflow que jusqu’à la 1.14 (voir l’annexe). La misère.

Et comme si ce n’était pas suffisant, ceux qui ont déjà essayé de mettre à jour pip depuis la version disponible dans le gestionnaire de paquet d’Ubuntu savent que c’est un bon moyen de tout casser.

On se retrouve très souvent avec l’erreur "pip ImportError: cannot import name ‘main’ after update" error message.

Pour passer outre cette difficulté, le plus simple est d’utiliser le script upgrading pip disponible sur la page officielle de pip.

curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py
sudo python3 get-pip.py

Installer AIDungeon, enfin !

Entre le moment où j’ai écris le draft de l’article il y a quelques semaines et aujourd’hui, le script d’installation a été amélioré et fonctionne mieux (il manquait une dépendance entre autre). Du coup, cette partie devrait se limiter à simplement exécuter 2 scripts. Cependant, au cas où, j’ai laissé les commandes que MOI j’ai du utiliser pour débloquer la situation.

sudo ./install.sh

Si ça ne fonctionne pas, vous pouvez installer les packages python comme ceci :

python3 -m pip install -r requirements.txt --user

Le script qui suit va télécharger le modèle de machine learning via un client torrent (au début, Nick s’est pris une facture bien salée à cause des coûts de téléchargement du modèle).

./download_model.sh
[...]
Status Legend:
(OK):download completed.
Download Complete!

Lancer AIDungeon 2

Bravo ! Vous pouvez enfin profiter du jeu

Si vous avez utilisé le script officiel (qui utilisez des venv Python), lancez les commandes suivantes :

source ./venv/bin/activate
./play.py

Sinon, vous pouvez vous passer de la partie venvs.

cd ~/AIDungeon/
python3 play.py

L’initialisation du jeu prennait quelques minutes mais c’est normal. A priori ce temps a été grandement réduit (on est passé de 5-10 minutes, c’était vraiment long, à 1 ou 2 max).

Bonus: Commandes utiles pour surveiller l’usage du GPU

Vous pouvez installer l’utilitaire gpustat pour vérifier que le GPU est bien utilisé par l’application

pip3 install gpustat --user
gpustat
gpustat -cp
aidungeon2           Mon Dec  9 13:22:24 2019  430.50
[0] Tesla K80        | 69'C,  17 % |     0 / 11441 MB |

Dans un genre plus simple, moins sexy, vous pouvez aussi tout simplement utiliser l’outil intégré avec le driver NVidia (mais c’est moche).

nvidia-smi --loop=1

Bonus: Vérifier que tensorflow trouve bien le GPU

Un des problèmes que j’ai eu au début était que je n’avais pas les bonnes libs. Les commandes qui suivent permettent de vérifier que tout fonctionne correctement côté tensorflow, et le cas échéant, vous afficher le message d’erreur :

python3

from __future__ import absolute_import, division, print_function, unicode_literals
import tensorflow as tf

print("Num GPUs Available: ", len(tf.config.experimental.list_physical_devices('GPU')))

Exemple d’une install qui marche

2019-12-10 16:25:39.714605: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library libcuda.so.1
2019-12-10 16:25:39.743758: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1618] Found device 0 with properties: 
name: Tesla K80 major: 3 minor: 7 memoryClockRate(GHz): 0.8235
pciBusID: 81c7:00:00.0
2019-12-10 16:25:39.744001: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library libcudart.so.10.0
[...]
2019-12-10 16:25:39.754396: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1746] Adding visible gpu devices: 0
Num GPUs Available:  1

Exemple d’une install qui ne marche pas :-(

[...]
Num GPUs Available:  0

Note : si vous n’avez pas de GPU (ou que les libs ou drivers sont mal installés) vous pourrez quand meme jouer au jeu, mais il sera extrêmement lent (1-2 minutes entre chaque réponse de votre part et le temps que le texte suivant s’affiche).

Bonus: Erreurs gsutil et tensorflow

Si vous avez oublié de mettre à jour pip, vous aurez cette erreur :

Collecting tensorflow==1.15 (from -r requirements.txt (line 6))
  Could not find a version that satisfies the requirement tensorflow==1.15 (from -r requirements.txt (line 6)) (from versions: 0.12.1, 1.0.0, 1.0.1, 1.1.0rc0, 1.1.0rc1, 1.1.0rc2, 1.1.0, 1.2.0rc0, 1.2.0rc1, 1.2.0rc2, 1.2.0, 1.2.1, 1.3.0rc0, 1.3.0rc1, 1.3.0rc2, 1.3.0, 1.4.0rc0, 1.4.0rc1, 1.4.0, 1.4.1, 1.5.0rc0, 1.5.0rc1, 1.5.0, 1.5.1, 1.6.0rc0, 1.6.0rc1, 1.6.0, 1.7.0rc0, 1.7.0rc1, 1.7.0, 1.7.1, 1.8.0rc0, 1.8.0rc1, 1.8.0, 1.9.0rc0, 1.9.0rc1, 1.9.0rc2, 1.9.0, 1.10.0rc0, 1.10.0rc1, 1.10.0, 1.10.1, 1.11.0rc0, 1.11.0rc1, 1.11.0rc2, 1.11.0, 1.12.0rc0, 1.12.0rc1, 1.12.0rc2, 1.12.0, 1.12.2, 1.12.3, 1.13.0rc0, 1.13.0rc1, 1.13.0rc2, 1.13.1, 1.13.2, 1.14.0rc0, 1.14.0rc1, 1.14.0, 2.0.0a0, 2.0.0b0, 2.0.0b1)
No matching distribution found for tensorflow==1.15 (from -r requirements.txt (line 6))

Cette erreur ne devrait plus apparaitre maintenant, mais si vous n’avez pas le module gsutil, voici la stacktrace que vous aurez en quittant le jeu (sans conséquence) :

> ^C
Traceback (most recent call last):
  File "play.py", line 211, in <module>
    play_aidungeon_2()
  File "play.py", line 97, in play_aidungeon_2
    action = input("> ")
KeyboardInterrupt
Exception ignored in: <bound method Story.__del__ of <story.story_manager.Story object at 0x7f797f4af0f0>>
Traceback (most recent call last):
  File "/home/zwindler/AIDungeon/story/story_manager.py", line 35, in __del__
    self.save_to_storage()
  File "/home/zwindler/AIDungeon/story/story_manager.py", line 131, in save_to_storage
    p = Popen(['gsutil', 'cp', file_name, 'gs://aidungeonstories'], stdout=FNULL, stderr=subprocess.STDOUT)
  File "/usr/lib/python3.6/subprocess.py", line 729, in __init__
    restore_signals, start_new_session)
  File "/usr/lib/python3.6/subprocess.py", line 1364, in _execute_child
    raise child_exception_type(errno_num, err_msg, err_filename)
FileNotFoundError: [Errno 2] No such file or directory: 'gsutil': 'gsutil'

Cet article Lancer AIDungeon 2 sur Ubuntu 18.04 est apparu en premier sur Zwindler's Reflection.

]]>
https://blog.zwindler.fr/2020/01/13/lancer-aidungeon-2-sur-ubuntu-18-04/feed/ 0 5373
Run AIDungeon 2 on Ubuntu 18.04 https://blog.zwindler.fr/2020/01/08/run-aidungeon-2-on-ubuntu-18-04/ https://blog.zwindler.fr/2020/01/08/run-aidungeon-2-on-ubuntu-18-04/#comments Wed, 08 Jan 2020 11:30:00 +0000 https://blog.zwindler.fr/?p=5363 Step by step tutorial to self host AIDungeon 2 locally on a Ubuntu 18.04 server with a big GPU card

Cet article Run AIDungeon 2 on Ubuntu 18.04 est apparu en premier sur Zwindler's Reflection.

]]>

AIDungeon 2

A few weeks ago, I stumbled upon AIDungeon 2, a hilarious project mixing Text based adventure, (heavy) machine learning and big (big BIG) CUDA GPUs.

AIDungeon2 is a first of its kind AI generated text adventure. Using a 1.5B parameter machine learning model called GPT-2 AIDungeon2 generates the story and results of your actions as you play in this virtual world.
Unlike virtually every other game in existence, you are not limited by the imagination of the developer in what you can do. Any thing you can express in language can be your action and the AI dungeon master will decide how the world responds to your actions.

https://www.aidungeon.io/

So, if you haven’t heard of it yet, it’s a machine learning project created by Nick Walton, a college student. It’s based on the GPT-2 text model from OpenAI that you may already seen in other fun projects and was trained to predict the next word using 40 GB of Internet text (you can also check TalkTotransformer by Adam D King).

So… What does it do ?

That’s where the fun begins. Like the TalkTotransformer generator, from a simple semi random generated background, the machine learning model builds the start of a new story, different every time. And your actions stear the story in one way or the other.

I won’t lie, it’s far from perfect. The model tends to run in circles, or forgets what the other caracters did just a line before, which can be really annoying.

But… aside from this, the possibilities seem to be limitless, and that’s REALLY impressive.

After all, that’s not really surprising. You’re only limited by the knowledge and writing style of 40 GB of Internet text! If you need examples, I invite you to take a look at Nick Walton’s twitter feed or AIDungeon subreddit to find out the most hilarious adventures the AIDungeon community came upon.

In this example, my inputs are the 2 lines preceded by the « > » symbol, the machine did the rest

What’s the catch ?

I’ve already said it.

That game is probably the most GPU intensive game you’ve run in your life. For a text based adventure, even that is already ironically fun.

The game requires nearly 9 GB of GPU VRAM and a lot of CUDA cores, ruling out all AMD cards and nearly every NVidia cards costing less than 1500$.

Bummer…

Community to the rescue

Hopefully, the community enthousiasm was so intense that Nick Walton and his brother have decided to drop everything else to improve it. During december, they built mobile Apps and now a web based one to play on every device.

Of course, these apps run on AWS servers featuring Tegra GPUs and cost around 65k$ a month in hosting. They have managed to raise nearly 15k$/month on their Patreon Account but there may come a day (probably very soon) where they won’t be able to provide free access for everyone.

So, after you read the article, if you like the game, don’t forget to support them!

So what now?

It also turns out that, Nick Walton published the game as an open source project. That’s where I became the most interested in this game, in fact. And you can find the sources on the Github AIDungeons project.

Starting from there, I asked myself:

Hey! Wouldn’t it be nice to run it on a cloud instance on a random cloud provider GPU powered VM?

So I decided to try it.

For my test, I chose to run AIDungeon on a NC6 virtual machine (6 vcpus, 56 GiB memory, Tegra K80) on Microsoft Azure on a free test account. This machine costs approximatly 0.43€ per hour (or even 0,21€ if you use preemtible VMs) so even if you don’t use a free credit, it won’t cost you too much.

Side note: Of course, if you have a GTX 1080 Ti, GTX 2080 Ti or GTX 2080ti super (or a K80), you can also run it on your own machine…

On my NC6, I deployed a Ubuntu 18.04.

And that’s where this tutorial begins ;-)

Side note: If you follow this guide and start on a fresh Ubuntu 18.04, the installation process should take 30 minutes to 45 minutes.

Install updates and prerequisites

Once connected on the machine, update and upgrade the OS.

sudo apt-get update
sudo apt-get upgrade

Then, install prerequisites packages for AI

sudo apt-get install git aria2 unzip python3-pip

Dependancy hellscape

Now, the real fun begins. AIDungeon uses TensorFlow and CUDA drivers to run. But here’s the catch: not every versions will work!

To run AIDungeons, you have to install specifically tensorflow 1.15 (no more, no less). And tensorflow==1.15 specifically requires cuda10.0 (not cuda10.1 nor cuda10.2) and Python 3.4 to 3.7!

The dependancy nightmare begins…

Install NVidia drivers and Cuda and machine learning modules

Add the cuda10.0 repos:

wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu1804/x86_64/cuda-repo-ubuntu1804_10.0.130-1_amd64.deb
sudo dpkg -i cuda-repo-ubuntu1804_10.0.130-1_amd64.deb
sudo apt-key adv --fetch-keys https://developer.download.nvidia.com/compute/cuda/repos/ubuntu1804/x86_64/7fa2af80.pub
sudo apt-get update

wget http://developer.download.nvidia.com/compute/machine-learning/repos/ubuntu1804/x86_64/nvidia-machine-learning-repo-ubuntu1804_1.0.0-1_amd64.deb
sudo apt install ./nvidia-machine-learning-repo-ubuntu1804_1.0.0-1_amd64.deb
sudo apt-get update

Now, we can install nvidia-driver, and reboot:

sudo apt-get install --no-install-recommends nvidia-driver-440 xserver-xorg-video-nvidia-440
sudo reboot

After reboot, install cuda10.0 libs

sudo apt-get install --no-install-recommends \
    cuda-10-0 cuda-runtime-10-0 cuda-demo-suite-10-0 cuda-drivers \
    libcudnn7=7.6.2.24-1+cuda10.0 libcudnn7-dev=7.6.2.24-1+cuda10.0

sudo apt-get install -y --no-install-recommends libnvinfer5=5.1.5-1+cuda10.0 \
    libnvinfer-dev=5.1.5-1+cuda10.0

Get the sources

Download the source from Github and hop-in in the directory:

git clone https://github.com/AIDungeon/AIDungeon/
cd AIDungeon/

Install python dependancies through pip

Sadly, installation time not yet over. Now that we have the python project on deck, we need to install the Python dependancies… By default, Ubuntu 18.04 still serves Python 2 as default Python interpreter, which is now deprecated since 1st january. Hopefully Python 3 is easily available (not like on CentOS 7).

Also, the pip (python package manager) installed should be updated as pip installed by Ubuntu is not compatible with tensorflow 1.15.

Upgrading pip in place can be tedious as this often lead to "pip ImportError: cannot import name ‘main’ after update" error message. To work around this, use the script given in upgrading pip official page and you should be fine.

curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py
sudo python3 get-pip.py

Install AIDungeon for good

Since I wrote the draft of the article a few weeks ago, there was a dependancy missing (gsutil) and the install script was not perfect. But now it seems to be working better and even uses venvs for a clean Python dependancies install.

sudo ./install.sh

If it doesn’t work, you can install it yourself with the following commands:

python3 -m pip install -r requirements.txt --user

The next script allows you to download the AIDungeon machine learning model through a torrent file (at first, Nick had a terrifying GDrive bill due to enormous egress traffic).

./download_model.sh
[...]
Status Legend:
(OK):download completed.
Download Complete!

Run AIDungeon 2

Finally, you can now sit back and enjoy the game!

If you used the install.sh script, use the following command (with venv):

source ./venv/bin/activate
./play.py

If not, skip the venv step:

cd ~/AIDungeon/
python3 play.py

The initialisation should take a few minutes (don’t panic, it’s "normal"), depending of your setup. In december, initialization took 5-10 minutes but there seem to have been optimisation now as it took only a minute or two last time I checked.

Bonus: Useful command to check GPU consumption

Install gpustat to check if GPU usage is working

pip3 install gpustat --user
gpustat
gpustat -cp
aidungeon2           Mon Dec  9 13:22:24 2019  430.50
[0] Tesla K80        | 69'C,  17 % |     0 / 11441 MB |

Or use integrated nvidia tool (a little crude)

nvidia-smi --loop=1

Bonus: Check that GPU is working with tensorflow

See Tensorflow GPU guide

python3

from __future__ import absolute_import, division, print_function, unicode_literals
import tensorflow as tf

print("Num GPUs Available: ", len(tf.config.experimental.list_physical_devices('GPU')))

Example working GPU setup

2019-12-10 16:25:39.714605: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library libcuda.so.1
2019-12-10 16:25:39.743758: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1618] Found device 0 with properties: 
name: Tesla K80 major: 3 minor: 7 memoryClockRate(GHz): 0.8235
pciBusID: 81c7:00:00.0
2019-12-10 16:25:39.744001: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library libcudart.so.10.0
[...]
2019-12-10 16:25:39.754396: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1746] Adding visible gpu devices: 0
Num GPUs Available:  1

Example of non working GPU setup

[...]
Num GPUs Available:  0

If you have this, game will be very slow (waiting 1-2 minutes between each answer) but will not crash. Check that Cuda and tensorFlow are proprely installed.

Bonus: gsutil and tensorflow errors

If you forgot or failed to upgrade pip, you will get this error :

Collecting tensorflow==1.15 (from -r requirements.txt (line 6))
  Could not find a version that satisfies the requirement tensorflow==1.15 (from -r requirements.txt (line 6)) (from versions: 0.12.1, 1.0.0, 1.0.1, 1.1.0rc0, 1.1.0rc1, 1.1.0rc2, 1.1.0, 1.2.0rc0, 1.2.0rc1, 1.2.0rc2, 1.2.0, 1.2.1, 1.3.0rc0, 1.3.0rc1, 1.3.0rc2, 1.3.0, 1.4.0rc0, 1.4.0rc1, 1.4.0, 1.4.1, 1.5.0rc0, 1.5.0rc1, 1.5.0, 1.5.1, 1.6.0rc0, 1.6.0rc1, 1.6.0, 1.7.0rc0, 1.7.0rc1, 1.7.0, 1.7.1, 1.8.0rc0, 1.8.0rc1, 1.8.0, 1.9.0rc0, 1.9.0rc1, 1.9.0rc2, 1.9.0, 1.10.0rc0, 1.10.0rc1, 1.10.0, 1.10.1, 1.11.0rc0, 1.11.0rc1, 1.11.0rc2, 1.11.0, 1.12.0rc0, 1.12.0rc1, 1.12.0rc2, 1.12.0, 1.12.2, 1.12.3, 1.13.0rc0, 1.13.0rc1, 1.13.0rc2, 1.13.1, 1.13.2, 1.14.0rc0, 1.14.0rc1, 1.14.0, 2.0.0a0, 2.0.0b0, 2.0.0b1)
No matching distribution found for tensorflow==1.15 (from -r requirements.txt (line 6))

You should not come across this anymore now, but if you get this error you should install gsutil python module to avoid stacktrace when saving / exiting

> ^C
Traceback (most recent call last):
  File "play.py", line 211, in <module>
    play_aidungeon_2()
  File "play.py", line 97, in play_aidungeon_2
    action = input("> ")
KeyboardInterrupt
Exception ignored in: <bound method Story.__del__ of <story.story_manager.Story object at 0x7f797f4af0f0>>
Traceback (most recent call last):
  File "/home/zwindler/AIDungeon/story/story_manager.py", line 35, in __del__
    self.save_to_storage()
  File "/home/zwindler/AIDungeon/story/story_manager.py", line 131, in save_to_storage
    p = Popen(['gsutil', 'cp', file_name, 'gs://aidungeonstories'], stdout=FNULL, stderr=subprocess.STDOUT)
  File "/usr/lib/python3.6/subprocess.py", line 729, in __init__
    restore_signals, start_new_session)
  File "/usr/lib/python3.6/subprocess.py", line 1364, in _execute_child
    raise child_exception_type(errno_num, err_msg, err_filename)
FileNotFoundError: [Errno 2] No such file or directory: 'gsutil': 'gsutil'

Cet article Run AIDungeon 2 on Ubuntu 18.04 est apparu en premier sur Zwindler's Reflection.

]]>
https://blog.zwindler.fr/2020/01/08/run-aidungeon-2-on-ubuntu-18-04/feed/ 1 5363
Proxmox VE + Prometheus = https://blog.zwindler.fr/2020/01/06/proxmox-ve-prometheus/ https://blog.zwindler.fr/2020/01/06/proxmox-ve-prometheus/#comments Mon, 06 Jan 2020 07:15:00 +0000 https://blog.zwindler.fr/?p=5290 Tutoriel d'installation d'un prometheus exporter permettant d'exposer les métriques de Proxmox VE et ainsi remonter des métriques dans un dashboard Grafana

Cet article Proxmox VE + Prometheus = <3 est apparu en premier sur Zwindler's Reflection.

]]>

Proxmox et Prometheus sont dans un bateau…

Si vous avez suivi le précédent article sur Prometheus et Grafana, vous m’avez peut être vu teaser cet article.

En effet, j’avais mis une capture d’écran d’un dashboard Grafana avec des métriques provenant de mon cluster Proxmox VE :

On fait du LXC à fond ici !

Petit récap’

Pour rappel, dans le tuto précédent, on avait installé le couple Grafana + Prometheus sur une machine virtuelle (ou physique peu importe), et pas dans un container (comme le préconise la plupart des billets de blogs que j’ai pu lire). Maintenant vous comprenez surement mieux pourquoi ;-).

Pour alimenter notre Prometheus, on va donc vouloir le donner à manger. Et quoi de mieux dans une infrastructure non containerisée que les métriques de l’hyperviseur ?

prometheus-pve-exporter

On est plutôt gâté avec Proxmox VE, car les métriques pertinentes sont assez nombreuses et surtout exposées par API.

S’il n’existe pas d’exporter officiel, il existe néanmoins des implémentations Open Source réalisées par de gentils contributeurs.

La plus utilisée semble être celle de znerol, qui a en plus l’avantage d’être la base utilisée dans un dashboard sur le site de Grafana (on y reviendra). Dans la mesure du possible, j’essaye de rester sur les implémentations les plus couramment utilisées. Sauf exception, ça permet d’éviter d’être le seul à avoir un bug. Je vous ai mis une autre implémentation dans les sources en bas d’article, que je n’ai pas testée.

Les sources et la documentation sont disponibles sur Github à l’adresse suivante : https://github.com/znerol/prometheus-pve-exporter

Prérequis

Dans tous les cas, on va devoir créer un utilisateur dans Proxmox VE, a qui on va autoriser l’accès aux métriques depuis l’API. C’est cet utilisateur qu’utilisera notre exporter pour se connecter à PVE, récupérer les métriques et enfin les exposer au format OpenMetrics.

Sur un des serveurs PVE du cluster :

  • créer un groupe
  • ajouter le rôle PVEAuditor au groupe
  • créer un utilisateur
  • lui ajouter le groupe, puis un mot de passe
pveum groupadd monitoring -comment 'Monitoring group'
pveum aclmod / -group monitoring -role PVEAuditor
pveum user add pve_exporter@pve
pveum usermod pve_exporter@pve -group monitoring
pveum passwd pve_exporter@pve

Installation de l’exporter

A partir de là, on peut installer l’exporter sur nos serveurs PVE. L’avantage du cet exporter c’est qu’il sait gérer le cluster. Je veux dire par là qu’avec un seul exporter vous allez pouvoir collecter l’ensemble des métriques de l’ensemble de vos machines du cluster (containers, VMs, stockage, hyperviseurs, …).

En théorie, il n’est donc nécessaire de l’installer que sur une machine. Pour autant, je vous conseille quand même d’installer un exporter par serveur. Dans les faits, cela vous évitera de perdre toute collecte de données de supervision en cas de panne du seul serveur portant l’exporter.

Sur vos serveurs PVE, lancer les commandes suivantes :

apt-get install python-pip
pip install prometheus-pve-exporter

Cette implémentation utilise le gestionnaire de paquet de Python, pip.

On va ensuite créer un fichier de configuration qui va contenir les informations de connexion à notre PVE :

mkdir -p /usr/share/pve_exporter/
cat > /usr/share/pve_exporter/pve_exporter.yml << EOF
default:
    user: pve_exporter@pve
    password: myawesomepassword
    verify_ssl: false
EOF

Note : remplacer myawesomepassword par un mot de passe vraiment cool.

Temporairement, vous pouvez lancer le binaire manuellement pour voir si ça fonctionne correctement :

/usr/local/bin/pve_exporter /usr/share/pve_exporter/pve_exporter.yml

Si tout s’est bien passé, on va maintenant créer un script de démarrage systemd pour que notre exporter se démarre tout seul avec l’hyperviseur :

cat > /etc/systemd/system/pve_exporter.service << EOF
[Unit]
Description=Proxmox VE Prometheus Exporter
After=network.target
Wants=network.target

[Service]
Restart=on-failure
WorkingDirectory=/usr/share/pve_exporter
ExecStart=/usr/local/bin/pve_exporter /usr/share/pve_exporter/pve_exporter.yml 9221 192.168.1.1

[Install]
WantedBy=multi-user.target
EOF

Note : remplacer 192.168.1.1 par l’adresse IP de votre serveur Proxmox VE (aussi accessible par votre serveur Prometheus)

systemctl daemon-reload
systemctl enable pve_exporter
systemctl start pve_exporter

La collecte

On a maintenant un endpoint au format OpenMetrics qui peut être collecté par Prometheus. Cool !!

Le but du jeu va être maintenant d’informer Prometheus qu’il doit scrapper notre exporter. On va faire ça en ajoutant la configuration suivante à notre serveur Prometheus (puis le redémarrer) :

vi /usr/share/prometheus/prometheus.yml 
[...]
scrape_configs:
[...]
  - job_name: 'pve'
    static_configs:
      - targets:
        - 192.168.1.1:9221  # Proxmox VE node with PVE exporter.
        - 192.168.1.2:9221  # Proxmox VE node with PVE exporter.
    metrics_path: /pve
    params:
      module: [default]

systemctl restart prometheus.service 

Note : remplacer les IPs par les adresses IP de vos exporters sur vos serveurs PVE.

Visualiser tout ça

Dernière étape avant d’aller prendre un café, afficher tout ça dans un dashboard. Là ça aurait pu être trivial mais j’ai du bidouiller (un tout petit peu).

Je l’ai dis au début de l’article, un des avantages de cet exporter, c’est que quelqu’un a pris la peine de faire un dashboard dans Grafana qui affiche déjà tout sans qu’on ait besoin de faire quoique ce soit.

On peut donc l’installer juste en copiant l’URL ou l’ID dans notre Grafana 10347

Trivial !

La seule petite difficulté, c’est que ce Dashboard gère mal le clustering. Plus particulièrement, il n’aime pas qu’un meme exporter remonte les données de plusieurs nodes, ce qui est dommage pour un cluster.

J’ai donc tweaké le Dashboard en y ajoutant une variable "node", permettant de sélectionner les métriques du node qu’on veut, et modifié les graphiques concernés en ajoutant un id="node/$node" dans la requête PromQL.

Vous avez maintenant un Dashboard qui remonte les métriques de vos serveurs, stockages, vms et containers dans Proxmox VE ! A vous l’observabilité !

Sources

Une autre implémentation : wakeful/pve_exporter

Cet article Proxmox VE + Prometheus = <3 est apparu en premier sur Zwindler's Reflection.

]]>
https://blog.zwindler.fr/2020/01/06/proxmox-ve-prometheus/feed/ 10 5290
Ça bouge pas mal sur le blog ! https://blog.zwindler.fr/2019/12/24/ca-bouge-pas-mal-sur-le-blog/ https://blog.zwindler.fr/2019/12/24/ca-bouge-pas-mal-sur-le-blog/#comments Tue, 24 Dec 2019 09:00:00 +0000 https://blog.zwindler.fr/?p=5298 Performance, vie privée, trackers, soutient, ça a pas mal bougé sur le blog !

Cet article Ça bouge pas mal sur le blog ! est apparu en premier sur Zwindler's Reflection.

]]>

D’habitude, j’attends un chiffre rond pour faire un article "récap" sur le blog. C’est d’ailleurs ce que j’avais fait pour le 100ème article, le 200ème et le 250ème article :

Mais je n’avais pas envie d’attendre les 10 ans pour parler des changements nombreux (et plus si récents) qui ont eu lieux sur le blog ces derniers mois.

Performance

D’abord, je l’avais dis lors de l’article du 250ème article, j’ai fait un gros travail sur la performance.

Et il y avait du boulot. Même avec du cache, certaines pages s’affichaient en plus de 5 secondes (réduit à 3 en enlevant des plugins inutiles). Totalement inacceptable pour le rendu de texte et d’images !

À l’époque, je pensais que la solution viendrait d’un moteur de blog statique (Hugo notamment, j’avais fait un test de migration, toujours dispo ici). Mais je n’ai jamais réussi à sauter le pas du tout statique.

WordPress a ses défauts mais a quand même l’avantage d’apporter toutes les features que vous voulez (c’est une partie du problème en même temps).

En fait, le problème majeur de perf de mon install venait… de la stack que j’avais choisi. En remplaçant simplement Apache et le vieux PHP par nginx/fpm et un PHP à jour, je suis passé de 3 à 1s d’affichage, ce qui me parait bien plus acceptable !

Vie privée sur le blog

Là, on arrive dans le gros du travail des derniers mois.

echo "Google Analytics" | sed "s/Google/Matomo/"

Lors de l’article du 250ème, j’avais également annoncé que j’allais réfléchir à comment être plus respectueux de la vie privée de mes lecteurs. C’est un choix militant, que j’assume.

La première étape (la plus simple) a été de supprimer Google Analytics. En vrai, j’utilisais assez peu Analytics, n’étant pas du tout aguerri dans le SEO. Pour garder un peu de stats, j’avais quand même en amont bossé sur Matomo (ex-Piwik).

Ce soft est excellent, et, à mon faible niveau, remplace en tout point un Google Analytics, à ceci près qu’il vous respecte, vous et votre vie privée.

Les données sont anonymisées par défaut, les utilisateurs ont une plus grande latitude sur les options pour ne pas être tracés, etc. Je n’ai pas encore tout paramétré mais ça me plait beaucoup plus que ces infos ne soient pas bêtement fournies à Google.

Fun fact : quasiment du jour au lendemain, mon nombre de visiteur a chuté de 20k+ à 15k pages vues mensuellement. Quelle part de coïncidence et/ou de trafic de bots mal comptés par WordPress expliquent cette chute, je ne saurai le dire. Je suis probablement parano…

AMP

La deuxième chose que j’ai faite a été de dégager AMP (Google Accelerated Mobile Pages), qui n’est en fait qu’un rendu statique et épuré pour le mobile.

En gros, quand vous postez un lien sur un réseau social, souvent c’est AMP qui prend le relais et CDN-ise vos pages pour les mobiles.

La plupart du temps, c’est relativement transparent, mais on m’a remonté à plusieurs reprises que le rendu était pourri (la faute à des plugins mal pris en charge par AMP).

Pourquoi les gens le mettent tous alors ? La réponse est similaire à la précédente :

Une meilleure visibilité sur les pages de résultats de Google

Google l’a dit ouvertement dans ce cas précis. Les sites qui ont activé AMP auront une meilleure place dans les résultats Google pour mobile.

OSEF. Aucune raison que je laisse ce truc qui marche mal sur mon site et qui donne mon trafic (et vos données) à Google.

Mailchimp

Pour gérer de manière un peu plus sexy la newsletter (et avoir des stats et un peu plus de contrôle sur les envois d’emails), j’ai utilisé le service tiers MailChimp. C’était cool mais là encore, pour des problématiques de trackers, j’ai préféré dégager la popup JS.

De toute façon, la newsletter est très peu active (quasiment plus de nouveaux inscris, alors que le flux RSS croit tout seul sans même que je ne le mette en avant…).

Reste encore un CSS que je dois tuner pour le dégager complètement mais ça devrait déjà être mieux en terme de privacy.

Google Adwords (et Amazon Partenaires)

Le plus gros des trackers (après Analytics), c’est la pub.

Décision radicale, j’ai donc supprimé totalement mon compte Google Adwords. Les liens vers Amazon devraient suivre dans les semaines qui viennent (mais ça ne concerne que quelques articles de toute façon).

Ça fait nécessairement un peu mal au budget annuel hosting serveurs physiques (qui était pour moitié absorbé par la pub). Mais là encore, c’est un choix militant.

Le 2ème effet positif de ce choix a été de réduire significativement les temps de chargement des pages (ainsi que le nombre de domaines tiers appelés) ! Grosso modo, sur les pages avec peu d’images, on passe de 1s à quelques 300-400 ms.

Champagne ! (enfin, plutôt mousseux vu le budget du blog).

Boutons de partage

Plusieurs news récentes ont confirmés que les boutons de partages de réseau sociaux rentraient bien dans le cadre du traitement des données de tiers pour le RGPD (responsabilité conjointe du gestionnaire du site).

Vous savez, ces petits boutons pour partager facilement sur vos RS préférés et qui comptent le nombre de likes.

Pour me mettre en conformité, j’ai donc supprimé tous les boutons de partages fournis par WordPress. Tout simplement.

[Edit]Merci Seboss666 pour l’astuce du code HTML tout bête, ça marche nickel. Les icônes sont crados, je ferai joli après la vacances[/Edit]

WordPress

Et oui ! WordPress est lui même un bon gros tracker. J’ai commencé par supprimer les liens courts de type wp.me (easy). Mais après, c’est plus dur…

Pour Jetpack et Gravatar, je vois encore mal comment je pourrais m’en passer. Pour ce qui est de Gravatar, il est très intégré à WordPress et Jetpack. Et Jetpack, il me fourni mon "bloc" pour écrire les articles en Markdown et Akismet, l’anti-spam des commentaires.

Retirer ces deux dernières fonctionnalités n’est pas envisageable une seule seconde et il faut que je trouve comment garder ces deux fonctions facilement (c’est à dire sans tout réécrire) avant de pouvoir désactiver Jetpack et Gravatar. Mais j’y travaille !

Les nouveautés

J’ai testé un nouveau thème, assez similaire au précédent, à ceci près qu’il :

  • gère nativement un colonne de contenu plus large, avec du texte plus gros
  • n’utilise pas les Google fonts (encore un tracker !)
  • mais est un peu moins sexy, surtout la page de garde (dommage)

J’ai également volontairement ajouté un widget (donc un potentiel tracker) vers StatusCake, un site web avec un free tier qui me permet de savoir quand mon site ou un de mes serveurs est down. Je trouve ça rigolo et vu comment ils sont petits je ne pense pas qu’ils vendent vos données. On verra.

Les perspectives pour le blog

On est pas ISO-fonctionnalité par rapport à avant le ménage, mais je pense que c’est pour le mieux. Les google fonts et AMP n’apportent rien. La mailing list est toujours là (mais il n’y a plus la pop-up) et les icônes de partage ont été remplacées par du HTML "sans tracker".

Pour ce qui est de l’acquisition de nouveaux lecteurs, je compte beaucoup plus sur le trafic apporté par la communauté Twitter/Masto (merci le Journal du Hacker) et LinkedIn (j’y suis assez actif), qui sont beaucoup plus souvent réellement intéressé par le contenu, plutôt qu’une recherche Google qui au final est refermée aussitôt.

Soutenir le blog

Vous l’avez compris, pour écrire les articles, j’ai besoin de serveurs (et notamment de machines physiques pour faire tourner des hyperviseurs et des softs qui demandent beaucoup de RAM) et ça c’est pas gratuit. Mais j’ai aussi besoin de motivation.

Je sais que certains d’entre vous aimeraient me soutenir dans ma démarche de partage de connaissance. Il y a plusieurs moyens de le faire :

  • D’abord, commentez mes posts, que ce soit pour donner un avis (positif ou négatif), des informations complémentaires (je ne suis pas experts dans tous les sujets, loin de là). C’est ultra motivant de pouvoir échanger avec vous.
  • Ensuite, n’hésitez pas à le partager si vous l’aimez.
  • De plus, si vous voulez vous lancer dans l’aventure du blogging mais que vous avez peur que ça vous prenne trop de temps, je le redis : j’héberge volontiers (en votre nom) des articles d’autres personnes. C’est déjà le cas pour M4vr0x et ventrachoux85.
  • Enfin, si vous voulez (je sais que ça arrive) me soutenir financièrement, j’ai mis en place deux moyens de paiements.

Pour un don ponctuel et "simple", j’ai un compte Paypal séparé pour le blog qui existe depuis quelques années et que vous pouvez utiliser.

Et plus récemment, j’ai ouvert un compte Tipeee.

https://fr.tipeee.com/le-blog-de-zwindler/

Tipeee est un service en ligne qui est surtout utilisé par les vidéastes et autres créateurs, qui ont de plus en plus de mal à monétiser leur création à cause de appétit toujours grandissant des plateformes (ou des ayants-droits c’est selon).

Je ne suis pas le seul à faire ça au sein de la communauté blog IT puisque l’ami Genma le fait déjà depuis des années ;-). Donc si l’envie vous en dit, ça sera avec grand plaisir (tout est expliqué sur le lien du Tipeee).

Cet article Ça bouge pas mal sur le blog ! est apparu en premier sur Zwindler's Reflection.

]]>
https://blog.zwindler.fr/2019/12/24/ca-bouge-pas-mal-sur-le-blog/feed/ 3 5298
Récap’ de Hack-It-N 2019 https://blog.zwindler.fr/2019/12/16/recap-de-hack-it-n-2019/ https://blog.zwindler.fr/2019/12/16/recap-de-hack-it-n-2019/#respond Mon, 16 Dec 2019 07:45:00 +0000 https://blog.zwindler.fr/?p=5279 Récapitulatif de la conférence cybersécurité Hack-It-N 2019 qui a eu lieu à l'ENSEIRB-MATMECA

Cet article Récap’ de Hack-It-N 2019 est apparu en premier sur Zwindler's Reflection.

]]>

Dernière conférence de l’année, Hack-It-N 2019 !!

Le 10 décembre, j’étais à Hack-It-N 2019 (voir le lien de la conférence), une conférence cybersécurité qui se déroulait à l’ENSEIRB-MATMECA.

Les thématiques de cyberdéfense et de cyberattaque sont au cœur des préoccupations, pour coller à la réalité technique et à l’actualité des menaces : hacking, cyber-espionnage, cyber-surveillance, etc. Venez découvrir les enjeux actuels de la cybersécurité, ainsi que les techniques offensives et défensives du moment !

Et il se trouve que j’étais aussi speaker pour cette édition ;-) Je vous laisse aller voir l’article dédié.

Introduction

La conférence a commencé par l’introduction de Laurent OUDOT, co-créateur et CTO de la société TEHTRIS (TEHTRIS est co-organisatrice d’Hack-It-N avec la promo RSR de l’ENSEIRB-MATMECA).

Laurent a entamé un rapide tour d’horizon de la cybersécurité cette année avec cette question :

Plein d’entreprises tombent en ce moment et tout le monde se demande pourquoi ?

D’après une étude Gartner : 80 % des entreprises US de plus de 5k employés n’ont pas d’EDR. Et pour les 20% restant, la plupart n’ont pas les options nécessaires pour coller au terrain ("le terrain commande").

Selon lui, aujourd’hui, les entreprises ont besoin de muscler leur arsenal pour ne pas être distancé par la guerre technologique menée par les cybercriminels/cyberactivistes.

Un petit clin d’œil appuyé à la solution éditée par TEHTRIS (un EDR justement).

Keynote

La Keynote d’introduction a été faites par Bernard BARBIER, un ancien du CEA qui est passé par la DGSE puis responsable cybersécurité chez Capgemini.

Bernard BARBIER a brossé de manière un peu plus exhaustive l’état de situation. Sans surprise, les menaces sont en hausses, tous les indicateurs sont dans le rouge et de plus en plus d’entreprises sont attaquées et victimes de cyber-attaques.

Selon lui, la France devient de plus en plus dépendante d’outils développés par des puissances étrangères. Peu d’outils mondialement connus viennent de France dans le domaine des cyber-armes.

Un constat alarmant surtout quand on sait que des cyberarmées déposent des charges malveillantes dans les infrastructures Françaises (gouvernement, OIV, …).

Face à cette professionnalisation des hackers (voire militarisation), il faut donc changer notre façon d’approcher le risque cyber et contre-attaquer dès que possible.

Table ronde

après la keynote, Hack-It-N a commencé par une table ronde. Elle a été animée par Marie Le Pargneux (BPCE).

Les 3 intervenants, Olivier Grall (ANSSI), Sébastien Yves Laurent (Prof Université Bordeaux Science Po), Didier Spella (Dirigeant de Mirat Di Neride), ont eu a répondre à des questions ou des thèmes d’ordres plus philosophiques

  • En quoi la cybercriminalité change notre mode de vie ?
  • Comment se structurer face aux enjeux de la cybersécurité ?
  • Conscience collective, comment on s’y prend ?
  • Intelligence artificielles éthiques, cybersécu éthiques

Les participants sont unanimes. Eux aussi pensent que la situation est inquiétante. Il y a, en France et en entreprise, une sous estimation du risque cyber par rapport aux autres risques. Là où dans le monde physique, les gens seraient vigilant ou porteraient plainte en cas d’attaque, il y a une certain nonchalance côté cyber. Les RSSI ne sont pas associés aux décisions des comités exécutifs.

Pourtant, sans qu’on s’en rende compte, on est finalement assez précurseur en France et en Europe sur les enjeux de cybersécurité, de sécurité des données, d’intelligence artificielle.

Le souci principal semble que les investisseurs "boudent" les startup Française et Européennes. Les sociétés privées veulent innover, mais l’investissement reste compliqué en cyber en France.

Living off the land

André Lenoir, consultant Cybersecurité chez TEHTRIS, nous a fait un présentation sur l’approche Living Off The Land, de plus en plus en vogue dans les cyberattaques d’entreprises.

Contrairement aux rootkits et aux attaques du kernel qui sont complexes à mettre en place, peu stables, et aux attaques fileless en mémoire, qui commencent à être détectées par les antivirus et les EDR, les attaques de types Living Off the land se basent sur l’ensemble des binaires inclus dans les distributions et qui peuvent servir à un attaquant.

Contrairement à ce qu’on pourrait penser, ces outils "dual use" sont extrêmement nombreux ! Pas moins d’une centaine dans un Windows de base (listés sur ce projet github).

De simple ping / telnet / netsh suffisent pour scanner et sniffer le réseau. Pour l’AD, net (group, view, use)… Et on peut faire de la remote execution, du rebond/pivot, …

Les deux gros avantages de cette approche sont que les outils sont déjà présent et que vous aurez moins de chance de vous faire détecter que si vous amenez vos outils, et ensuite ces outils ont des utilisations légitimes (administrateurs) et sont donc difficiles à bloquer (sans gêner l’administration normale des postes).

Parmi les solutions (pêle-mêle) pour limiter les risques de ce type d’attaques on a : Utiliser des EDR, limiter ce qui tourne sur le parc, bloquer logiciellement ce que les utilisateurs non privilégiés peuvent faire, utiliser AppLocker de MS, créer un domaine AD de type "Domain layered mode avec, faire des tiers sur l’infra", bloquer les outils sur les tiers faibles, bloquer le trafic est/ouest.

Bref, il y a du boulot !

Mass scanning the Internet for web vulnerabilities

Ce talk a permis à Nicolas Surribas de nous parler d’un outil qu’il développe (Wapiti) et d’une campagne de scanning massif d’Internet à la recherche de vulnérabilités sur les sites web dans le monde.

Wapiti permet de scanner des sites, extraire les URL et les formulaires, chercher les vulnérabilité, générer un rapport. Il s’utilise en CLI, est écrit en Python.

Les résultats positifs ont été postés sur le site OpenBugBounty, qui permet la "divulgation responsable" entre le chercheur et le propriétaire du site. 2126 sites ont ainsi été soumis, avec de nombreux contacts fructueux à la clé.

Deux points intéressants, pour obtenir sa liste de sites à scanner, Nicolas Surribas a utilisé 2 sources CertStream et CommonCrawl, qu’il a ensuite donné à manger à Wapiti par l’intermédiaire de RabbitMQ (bus de messages).

RabbitMQ + Python = <3, ça m’a fait sourire vu que je pratique les 2 quotidiennement

AIS GSM tracking, les naufrageurs 4.0

David Le Goff (un de mes mentors ;D) est un habitué de Hack-It-N. Il a d’ailleurs été présent en tant que speaker à toutes les éditions !

Cette fois ci, il revenait avec un projet sur les technos qu’utilisent les bateaux pour naviguer dans le monde. Car, on ne le sait pas toujours, mais les bateaux sont finalement de grands SCADA flottants connectés (par radio, GSM, Internet).

Et le moins qu’on puisse dire, c’est que la sécurité à bord laisse à désirer…

Ciel, mon Kubernetes mine des bitcoins

Juste après mon mentor, c’était donc à mon tour. Coïncidence amusante.

Je vous remet le pitch, vous comprendrez que je n’ai pas pris de notes pendant mon propre talk ;-)

A tort ou à raison, Kubernetes s’est imposé, en l’espace de 3 ans, comme un des nouveaux standards dans la gestion des architectures microservices modernes.

Cependant, cet outil complexe amène son lot de pièges dans lesquels les débutants ne manqueront pas de tomber… Et ce n’est pas l’apparente facilité apportée par les offres Kubernetes as a Service qui va arranger les choses !

Après un rapide tour de l’actualité sécurité autour de Kubernetes, Denis Germain vous donnera les clés pour éviter de nous faire voler (trop facilement) vos cycles CPU.

Vous pouvez retrouver les slides de ce talk pour Hack-It-N sur ce lien.

Entrainement à la cybersécurité

Bernard Roussely de Beware Cyberlabs, nous a ensuite présenté sa vision des problématiques de sensibilisation des individus, notamment en entreprise, à la cybersécurité.

Le constat reste une fois de plus que les employés manquent de bon sens, et que des formations, à différents niveaux, sont nécessaires pour corriger ça :

  • Sensibiliser les dirigeants et personnels non informaticiens
  • Former des spécialistes
  • Entrainer les personnes ayant des fonctions critiques
  • Préparer à la crise : tout le monde

Petite pique à l’attention de nos dirigeants :

Les parlementaires sont très mal protégés. Les dirigeants doivent montrer l’exemple.

Enfin, Bernard Roussely a conclu en insistant sur le fait que

  • la Sécurité ce n’est pas un Coût mais un Investissement
  • "l’ingénierie de sécurité", certes moins attrayante aux yeux des étudiants que le hacking, est une discipline autant voire plus importante dans les entreprises.

OWASP – Mobile Security Testing Guide

L’OWASP (Open Web Application Security Project) est une organisation a but non lucratif connue pour travailler à l’amélioration de la sécurité des applications Web (vous connaissez très probablement le Top Ten Project). Depuis quelques temps, il existe un guide de test dédié aux applications sur les terminaux mobiles.

Davy Douhine, consultant en cybersécurité chez Randorisec, a profité de ce talk pour nous faire un tour d’horizon des bonnes pratiques indiquées dans ce guide, ainsi que quelques exemples frappants d’applications ne respectant pas ces bonnes pratiques (avec des failles assez graves comme une vérification d’un PIN client-side only pour une application bancaire par exemple…).

Les slides sont disponibles ici.

Active Directory : Hack-it & Harden-it

Rémi Escourrou, auditeur chez Wavestone, a ensuite parlé d’Active Directory et à quel point cet outil était souvent simple à compromettre en entreprise. Dans la plupart des cas, l’auditeur fini par trouver un serveur non patché, puis avec diverses techniques à récupérer la main sur un contrôleur de domaine.

Le meilleur moyen de s’en prémunir est selon lui d’adopter la segmentation par tiers dans l’architecture des domaines Active Directory, tout en continuant à respecter les basiques (respect de l’hygiène de base, honeypots, …)

Rémi Escourrou nous a également donné quelques outils permettant d’auditer rapidement et visuellement les liens entre les objets dans l’AD (grouperer, Pingcastle, Bloodhound).

Il a enfin terminé par un bref tour de la nouvelle fonctionnalité AD => Azure AD avec un passage par un cloud hybride (A protéger comme le reste du tier 0).

Les slides sont disponibles ici

Security Operating Center en entreprise : Comment superviser ses périmètres et risques critiques

Cécilien Charlot, expert sécurité chez CGI, nous a enfin fait un retour d’expérience sur la mise en place d’un SOC.

Les SOC sont très couteux, et il est important, pour la réussite de cette mise en place, de sélectionner avec soin les événements et les alertes qui lui seront transférés.

Il a donc donné des pistes pour trouver les bons compromis entre événements génériques et événements spécifiques (métiers), flux critiques ou non, etc.

La valeur métier d’un événement peut se déterminer via une analyse de risques (risque brut vs risque résiduels après réduction)

Pour caractériser les scenarii de surveillance, ses conseils sont donc :

  • Prioriser (pour ne pas avoir trop d’événement)
  • faire le lien avec les risques
  • se rapprocher des métiers

La prochaine édition en décembre prochain

Lors de la fermeture de l’événement, Laurent OUDOT en a profité pour annoncer la date de la prochaine édition d’Hack-It-N de l’an prochain : ça sera le 12 décembre 2020, toujours à l’ENSEIRB-MATMECA.

Encore merci aux organisateurs de l’événement pour m’avoir fait confiance et pour cette édition plus que réussie !

A l’année prochaine :)

Cet article Récap’ de Hack-It-N 2019 est apparu en premier sur Zwindler's Reflection.

]]>
https://blog.zwindler.fr/2019/12/16/recap-de-hack-it-n-2019/feed/ 0 5279