Zwindler's Reflection https://blog.zwindler.fr Ma vie parmi les lol-cats || je mine des bitcoins dans mon dressing Thu, 16 Jan 2020 13:21:29 +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 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
[Hack-It-N 2019] Ciel ! Mon Kubernetes mine des bitcoins https://blog.zwindler.fr/2019/12/10/hack-it-n-2019-ciel-mon-kubernetes-mine-des-bitcoins/ https://blog.zwindler.fr/2019/12/10/hack-it-n-2019-ciel-mon-kubernetes-mine-des-bitcoins/#comments Tue, 10 Dec 2019 12:30:00 +0000 https://blog.zwindler.fr/?p=5269 Cet article [Hack-It-N 2019] Ciel ! Mon Kubernetes mine des bitcoins est apparu en premier sur Zwindler's Reflection.

]]>

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

Le 10 décembre, je serai à Hack-It-N 2019 voir le lien de la conférence. Cette conférence cybersécurité se déroule à 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 je suis speaker ;-)

Pour la première fois, je serai speaker à Hack-It-N, avec un talk sur la sécurité dans Kubernetes à 14h20

Le pitch

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.

Les slides

Comme à mon habitude, les slides sont disponibles quelques minutes avant le talk, histoire que vous puissiez suivre sur votre machine ou votre smartphone si vous voulez.

Ça se passe ici : https://blog.zwindler.fr/talks/hackitn-ciel-mon-kube-mine-bitcoins

Note

Petite nouveauté, les slides sont dispos au format HTML, généré avec marp.

Pour la petit histoire, depuis quelques mois je suis sous Linux au bureau. J’ai énormément gagné en productivité (j’en parlerai) mais il restait un souci. Libre Office, c’est vraiment pas top pour les présentations types PowerPoint (pas merci Microsoft pour les formats fermés…).

Et MARP, c’est vraiment super chouette et ça remplace totalement ma façon de préparer des réunions ou des conférences. Je ne manquerai pas de faire un article dessus (et hop un article de plus).

Cet article [Hack-It-N 2019] Ciel ! Mon Kubernetes mine des bitcoins est apparu en premier sur Zwindler's Reflection.

]]>
https://blog.zwindler.fr/2019/12/10/hack-it-n-2019-ciel-mon-kubernetes-mine-des-bitcoins/feed/ 1 5269
[Humeur]Ces gens qui amènent leur bébé au bureau pour poster leurs aventures sur LinkedIn https://blog.zwindler.fr/2019/11/26/humeurces-gens-qui-amenent-leur-bebe-au-bureau-pour-poster-leurs-aventures-sur-linkedin/ https://blog.zwindler.fr/2019/11/26/humeurces-gens-qui-amenent-leur-bebe-au-bureau-pour-poster-leurs-aventures-sur-linkedin/#comments Tue, 26 Nov 2019 07:14:15 +0000 https://blog.zwindler.fr/?p=5211 Billet d'humeur sur ces gens qui amènent leur bébé au bureau pour poster ensuite leurs aventures sur LinkedIn

Cet article [Humeur]Ces gens qui amènent leur bébé au bureau pour poster leurs aventures sur LinkedIn est apparu en premier sur Zwindler's Reflection.

]]>

Comme tout le monde, j’ai ma vision de la vie. Parfois, j’ai du mal à comprendre la vision des autres.

Je rage un bon coup, puis je me rappelle qu’on est tous différents, je me dis que c’est juste parce que je suis un jeune imbécile ou au contraire déjà un vieux réac, je rigole de moi-même et je passe à autre chose.

Mais depuis peu, il y a un truc que je capte pas, mais alors pas du tout.

"Je suis profondément choqué !"

LinkedIn, on y trouve de tout. Et des fois c’est vraiment la lie de l’humanité. Pire que Facebook ou Twitter.

Ce n’est pas pour rien que le compte Disruptive Humans of LinkedIn compte autant d’abonné. LinkedIn, malgré toutes les qualités que je lui trouve, c’est parfois un puit sans fond d’imbécilités.

Du grand classique sur LinkedIn…

Ca fait quelques fois, depuis moins d’un an je dirais, que je vois passer des posts de papas, fiers comme des coqs, avec leur bébé au travail. Note: Je ne parle pas d’un enfant, mais bien de bébés (<1ans).

Ici, c’est un papa qui n’a "pas de solution pour garder son enfant l’été, et qui est trop content d’avoir un patron compréhensif qui lui permet d’amener son bébé au travail"

Là, un papa qui appelle son manager pour lui dire qu’il ne viendra pas, car son fils est malade. Qu’à cela ne tienne lui rétorque son Manager 4.0 "Mais ramène le au bureau ! Ca nous fera de l’animation !" (Verbatim). Et de surenchérir le post d’un "merci chef tu es le meilleur des chefs". Et les patrons de congratuler leur bon soldat, assurément un papa 4.0 modèle.

Mais qu’est-ce que ça peut faire ?

Je vais volontairement passer sur le fait que je suis totalement opposé à l’exposition des enfants, surtout si petits, aux réseaux sociaux (je vous renvoie au point "vieux reac/jeune imbécile"). C’est hors sujet ici. Car franchement je suis scié par tout le reste.

Mais dans quel monde vivent ces gens ?

A quel moment, tu te dis que ça va être une bonne idée d’amener pendant tout le mois de juillet ton bébé au bureau ?

Que tu vas laisser sécher comme un raisin sec dans son transat, posé au dessus de ton bureau en trophée (car oui, c’est ça la photo mise en avant par l’auteur). A quel moment un parent peut trouver ça désirable, voire même ne serait ce qu’acceptable, comme solution ?

Et le deuxième exemple… que dire ! Un enfant malade, qui a besoin de calme, de repos et d’amour pour récupérer… l’amener au bureau, sur l’idée du patron, parce que ça va faire "de l’animation" ?

Pourquoi ? C’est une bête de foire ton gamin quand il a 38.5 ?

Et une fois que tu y seras, tu crois que tu vas avoir la tête à bosser ?

Non non non non ! Surtout ne répond pas, j’ai trop peur que tu me répondes "oui".

C’est pas facile d’être parent

C’est pas facile d’être président

François Hollande, quand il était encore président

Alors je veux bien essayer d’être compréhensif. Peut-être que ces personnes n’avaient vraiment aucune autre solution ?

Avoir un enfant, c’est compliqué et ça demande parfois des sacrifices. Et parfois, il faut trouver une solution, même si elle n’est pas optimale.

Mais pitié, n’en faites pas un post sur LinkedIn !

Ne faites pas comme si c’était un modèle de modernité à suivre !

Aussi bien vous, employés, que vous, "gentils patrons" qui les poussent ou les autorisent à ce genre d’actions débiles.

Et le pire dans tout ça.

Le pire dans tout ça, c’est que personne sur le réseau social ne trouve rien à y redire.

Les gens likent, applaudissent des deux mains, commentent pour porter aux nues ces papas résolument modernes (sic). Les rares commentaires négatifs sont juste des gens qui râlent que l’employé risque de ne pas bien travailler.

Et pour l’enfant ? Rien ? Personne ?

Du coup, j’en viens à me demander s’il n’y a que moi qui trouve ça anormal, même malsain. Je dois être bizarre…

Mais, franchement, là, ça me dépasse.

Sources

Bonus DHoL "Bienvenue dans mon réseau"

Cet article [Humeur]Ces gens qui amènent leur bébé au bureau pour poster leurs aventures sur LinkedIn est apparu en premier sur Zwindler's Reflection.

]]>
https://blog.zwindler.fr/2019/11/26/humeurces-gens-qui-amenent-leur-bebe-au-bureau-pour-poster-leurs-aventures-sur-linkedin/feed/ 2 5211
Changement de provider, mon hyperviseur sur un dédié Hetzner https://blog.zwindler.fr/2019/11/19/changement-de-provider-mon-hyperviseur-sur-un-dedie-hetzner/ https://blog.zwindler.fr/2019/11/19/changement-de-provider-mon-hyperviseur-sur-un-dedie-hetzner/#comments Tue, 19 Nov 2019 07:30:00 +0000 https://blog.zwindler.fr/?p=5225 Suite à des soucis avec le support de OneProvider, j'ai décidé de migrer une partie de mes serveurs vers le provider Hetzner

Cet article Changement de provider, mon hyperviseur sur un dédié Hetzner est apparu en premier sur Zwindler's Reflection.

]]>

Au revoir OneProvider, bonjour Hetzner

Certains d’entre vous m’ont peut être vu me plaindre de OneProvider et plus particulièrement le support avec qui j’ai eu plusieurs accrochages (Spoiler, j’ai migré vers Hetzner).

Sans rentrer dans les détails (j’ai échangé avec certains d’entre vous sur le sujet), après cette déconvenue, j’ai donc cherché une alternative pour héberger mes machines.

Les prérequis étaient d’avoir :

  • une machine physique
  • avec suffisamment de RAM (minimum 8 Go, 16 c’est mieux)
  • idéalement, une gestion des réseaux virtuels entre machines du provider (type RPN ou vRack)
  • si possible pas un ATOM en CPU (le souci de l’ATOM, c’est que c’est tellement faiblard que ça pénalise les IO)
  • si possible du VT-x (je n’en ai pas besoin d’en l’absolu, je vais surtout du LXC, mais ça peut dépanner)
  • si possible du SSD parce que c’est quand même cool
  • si possible 2 disques pour avoir du RAID ou que je puisse me faire un équivalent (ZFS/ZRAID)
  • un prix pas trop élevé (genre pas OVH) car j’ai été mal habitué avec les prix agressifs de OneProvider (oui je sais, je l’ai payé avec le support)

L’état du marché

Chez OneProvider, j’avais tout ça pour environ 20-25 euros / mois, à l’exception du réseaux privé virtuel entre machine.

Autant dire qu’on est très loin du premier prix de chez OVH (>60€/mois TTC). Si on descend en gamme chez OVH, on perd le réseau privé virtuel entre machines (vRack) en passant chez SoYouStart et pourtant on est toujours à plus de 42€ / mois TTC. Toujours 2 fois plus cher que OneProvider :-/.

Il faut descendre encore de gamme et passer chez Kimsufi pour trouver des prix comparables dans mes critères (et toujours pas de réseau privé virtuel), avec de vieux CPU et surtout un réseau bridé au 100 Mbps (ce qui est pénible pour les transferts de gros fichiers, les réplications de VMs et les sauvegardes).

J’avais aussi jeté un œil côté Online.net, qui eux proposent sur certaines machines identiques à celles que j’avais avec EN PLUS le graal, un réseau privé virtuel entre dédiés (RPN).

Ces deux configs me disaient vraiment quelque chose… et pour cause ! OneProvider les revends en marque blanche.

Donc c’est exactement les mêmes machines que celle que j’ai pu avoir dans le passé, mais avec le RPN en plus, et un peu plus cher (beaucoup plus cher même).

Ce qui est dommage ici, c’est que le RPN ne soit pas disponible sur les machines un peu plus petites (mon PRA n’est pas aussi gros, juste de quoi faire tourner le blog en cas de gros crash).

Vient alors Hetzner

Ça fait pas mal de fois que je voyais circuler le nom. Des bloggeurs et d’autres confrères en disaient beaucoup de bien, et j’ai voulu aller voir. La première chose intéressante est que Hetzner, comme OVH et Online, propose bien un service de type réseau privé virtuel entre vos serveurs !

Plus de puissance chez Hetzner !

Par contre, quand j’ai vu les machines… au début je me suis dis que ça allait pas le faire…

Voilà leur machine "bas de gamme" :

Pour à peine plus que le moins cher des SoYouStart (un vieux Xeon E3 v2 4c/4t avec 16Go de RAM et 2 HDD), vous avez un tout nouveau Ryzen 5 6c/12t, 64 Go de RAM et un RAID de 2 SSD NVMe de 512 Go.

Bon clairement on était hors budget mais ils avaient piqué ma curiosité avec leurs config fofolles.

Et je suis donc tombé en fouillant un peu sur leur "server auction", qui est ni plus ni moins que les serveurs de leurs anciennes gammes qu’ils louent à nouveau. Et là c’était déjà plus proche de mon besoin.

Pour un peu plus de 30€/mois soit 50% plus que mon serveur précédent, mais comparable au prix Online, j’ai un i7-4770, 32 Go de RAM et 2 disques "Entreprise". Soit beaucoup mieux que la machine chez Online.

Quitte à changer, j’ai donc tenté Hetzner et commandé un serveur.

C’est puissant mais… qu’est ce que c’est moche

Bon, l’UI n’est pas follement attrayante. C’est… spartiate.

Dans le menu "Servers", vous avez une bête liste de vos serveurs avec le numéro de commande, un hostname (une fois que vous l’aurez setté) et un ID (peu parlant). Bof pratique, surtout au début ou si vous en avez beaucoup.

Et quand on sélectionne un serveur, ce n’est malheureusement guère mieux. Les informations importantes éclatées dans un nombre incalculable de menus.

Bref, côté expérience utilisateur, on repassera. Cependant, tout ce qu’il faut pour bien administrer son serveur est là. On finira par s’y retrouver avec un peu d’habitude…

Installation de l’hyperviseur

Pour installer notre serveur, on peut utiliser l’interface web pour installer un Debian, ou passer par l’image de rescue.

J’ai préféré utiliser la 2ème solution, car elle est immédiatement disponible à la livraison du serveur, avec votre clé SSH.

On arrive sur un login on ne peut plus classique, avec un résumé des caractéristiques de vos serveurs.

Point intéressant, il existe un binaire installimage sur l’OS rescue de Hetzner. Il permet, comme son nom l’indique, d’installer une image.

Comme j’utilise Proxmox VE comme hyperviseur, j’ai donc installé une Debian 10 :

Une fois l’image de base choisie, vous allez arriver à un éditeur de texte. Il va vous permettre de configurer de manière plus fine votre installation. Je trouve cette méthode assez originale. Ça change des interfaces webs pas toujours stables vous demandant la taille de vos partitions pour finalement planter dès que vous demandez un truc non standard.

Ici tout a très bien marché, j’ai configuré le hostname, ainsi qu’un RAID soft et un partitionnement LVM.

Là encore, je suis navré qu’on tombe dans le cliché, mais si ce n’est pas "joli" ni "user friendly", au moins c’est efficace.

Passer de Debian 10 à Proxmox VE 6

Une fois validé, l’image Debian 10 a été copié extrêmement rapidement (une ou deux minutes). Forcément, c’est une "minimal". Mais bon c’est quand même agréable d’avoir son serveur "up and running" en moins d’une demie heure entre la commande et la fin de l’installation.

Reste donc à installer PVE 6 sur notre dédié Hetzner. Sans trop de surprise, j’ai réutilisé mon playbook Ansible qui configure de A à Z la Debian pour en faire un Proxmox. Pour ceux qui l’ont loupé, c’est par ici que ça se passe.

J’ai juste eu un petit souci lors de l’installation. La debian étant minimale, je n’avais même pas python d’installé. C’est gênant quand on fait du Ansible !

cat inventory_hetzner.yml
all:
  children:
    proxmoxve:
      hosts:
        <fqdn_hyperviser>:

ansible proxmoxve -i inventory_hetzner.yml -u root -m ping
<fqdn_hyperviser> | FAILED! => {
    "changed": false,
    "module_stderr": "Shared connection to <fqdn_hyperviser> closed.\r\n",
    "module_stdout": "/bin/sh: 1: /usr/bin/python: not found\r\n",
    "msg": "MODULE FAILURE",
    "rc": 127
}

Heureusement j’avais déjà eu le souci dans un autre contexte. J’ai donc écris un playbook supplémentaire (dispo sur le Github) pour installer les prérequis manquants.

ansible-playbook -i inventory_hetzner.yml -u root proxmox_python_firstinstall.yml
ansible-playbook -i inventory_hetzner.yml -u root proxmox_prerequisites.yml

Et en quelques minutes, mon Proxmox VE était opérationnel sur Hetzner !

Cet article Changement de provider, mon hyperviseur sur un dédié Hetzner est apparu en premier sur Zwindler's Reflection.

]]>
https://blog.zwindler.fr/2019/11/19/changement-de-provider-mon-hyperviseur-sur-un-dedie-hetzner/feed/ 21 5225
[Updated] Le support de ma conf’ Logiciel Libre à BDX I/O 2019 https://blog.zwindler.fr/2019/11/15/le-support-de-ma-conf-logiciel-libre-a-bdx-i-o-2019/ https://blog.zwindler.fr/2019/11/15/le-support-de-ma-conf-logiciel-libre-a-bdx-i-o-2019/#respond Fri, 15 Nov 2019 09:00:00 +0000 https://blog.zwindler.fr/?p=5234 Les slides de mon talk à BDX I/O 2019 : le (logiciel) libre a-t-il de beaux jours devant lui ?

Cet article [Updated] Le support de ma conf’ Logiciel Libre à BDX I/O 2019 est apparu en premier sur Zwindler's Reflection.

]]>
Normalement, j’ai suffisamment communiqué pour que ça ne soit une surprise pour personne, je suis speaker aujourd’hui à BDX I/O 2019. Une nouvelle fois, je vais donc pouvoir venir vous parler d’un sujet qui me tient à cœur, le logiciel libre et l’open source.

[Updated] La vidéo

L’organisation a DEJA mis à disposition les vidéos des talks sur Youtube ! Un grand bravo à eux

[Updated] Un sketchnote du talk

Mon ex-collègue Ane (@ane_naiz) a eu la gentillesse de faire un sketchnote de ma conférence. C’est tellement chouette que je vous le partage !!

Un énorme merci à elle

Le pitch

Comme vous pouvez le voir sur ce superbe montage, je serai donc à 10h15 en Amphi B pour vous parler Logiciel Libre et Open Source, avec le pitch suivant :

– De barbus dans un garage jusqu’à l’ère du « tout sur Github », comment sommes-nous passés de « Linux est un cancer » à « Microsoft <3 Linux » ?
– Aujourd’hui, peut-on encore maintenir du code individuellement sans « Mettre en danger des millions d’innocents » ?
– Faire de l’open source fait-il de vous un ZADiste ?
Tant de sujets d’actualité (et d’autres) qui seront traités avec un regard, bien entendu, totalement objectif et impartial (ou pas !).

Comme à mon habitude dans ce genre de cas, je vous met un tout petit peu avant de passer mes slides à dispositions, si jamais vous voulez suivre sur votre écran (et/ou suivre les liens que j’ai ajouté en source, car je source tout ce dont je parle ;-p).

Le support

J’espère sincèrement que ça vous plaira, et surtout, prenez le temps de voter, ça permettra à l’orga de BDX I/O 2019 de savoir s’il faut me sélectionner à nouveau l’an prochain ou pas ;-)

Cet article [Updated] Le support de ma conf’ Logiciel Libre à BDX I/O 2019 est apparu en premier sur Zwindler's Reflection.

]]>
https://blog.zwindler.fr/2019/11/15/le-support-de-ma-conf-logiciel-libre-a-bdx-i-o-2019/feed/ 0 5234