Amarettino e cappuccino

Brise fraîche
Une table sous l’ombre
D’un tilleul fleuri qui s’étire.

Inspiration — senteur de l’été approchant

Croooc
Note caramélisée envahissante
Poursuivie
Par un cœur doux-amer

Expiration — l'amandine prend sa place

Une tasse approche des lèvres
Pschhhh
Déchirement feutré d’une mousse lactée
Sliiiirp
Suave et aérien d’abord
Prolongé par l’âpreté arrondie d’un cacao — hmmm

Résonance du baiser de Saronno…

Bonne journée :-)

Haïku – La Lune Rousse

Il s’agit là de mon tout premier essai d’écrirture d’un haïku.

Écho Silencieux

Nuit silencieuse —
La Lune est là, distante,
La regardes-tu ?

Un haïku est un poème japonais court qui en 3 vers de 5-7-5 syllabes exprime un instant, une émotion ou une scène. J’aimais bien ce premier essai qui sort un peu du genre traditionnel en interpellant directement le lecteur par une question. Mais par la suite, alors que j’essayais de le traduire en allemand, je me suis rendu compte que les termes utilisés étaient trop simples et crus. En reprenant le champ lexical de ce thème et l’émotion que j’avais perçue, j’ai écrit deux nouvelles versions qui me plaisent beaucoup mieux. Chacune d’entre elles présente une touche d’originalité qui ne respecte donc pas strictement les règles du haïku, mais qui ne dénature pas l’idée de ce type de poème.

Je ne suis pas français pour rien après tout ;-)

Une lune rousse
Déchire l’obscurité —
Bruissement d’une pensée.

Voici le deuxième :

Nuit feutrée — frisson !
La lune m’éclabousse
d’un lointain murmure.

Les amateurs de Prévert feront peut-être le lien avec l’un de ses poèmes (indice : une orange et un prisonnier).

Cueille le jour présent sans te soucier du lendemain

Le titre de ce billet de blog est la traduction du vers latin « carpe diem, quam minimum credula postero ». Il s’associe parfaitement avec le thème de mon escapade à Münster. Alors je suis allé cueillir les bleuets de ma pensée.

Prendre conscience de ce que l’on vit, c’est d’abord ralentir, observer et écouter. C’est ouvrir ses sens sur le présent, cet instant fugitif. Les Allemands parlent d’Achtsamkeit : une attention simple, vigilante. Il s’agit de consciemment prendre une photo de ses sens et de l’explorer. La marche l’incarne très bien : on regarde vraiment où l’on met les pieds, on écoute sa respiration, on hume l’air, on laisse les détails du chemin remonter – on devient spectateur attentif d’une odeur d’herbe coupée, d’un parfum de fleur de sureau, de trilles d’un mignon roi de l’hiver perché sur une clôture, ou de la lumière qui change au passage d’un nuage. Cette conscience de la musique de notre monde présent s’entretient admirablement dans le souffle régulier de la promenade.

Le rythme du pas peut alors devenir un trait de crayon ou un jet d’encre, les sens externes peuvent s’éteindre et nos sens internes s’activent. Les impressions ressenties pendant la marche consciente, les souvenirs, les formes, les odeurs peuvent maintenant guider notre main. Quand on trace un contour ou rédige quelques lignes, on se focalise : le cerveau met les notifications externes en sourdine et ouvre la porte à l’imaginaire ; en quelques minutes on peut voir un champ de blé différemment, sous une lumière crépusculaire. Concentration et créativité peuvent bien s’accorder : l’une tient la lampe, l’autre explore.

Dans les trois cas – marcher, dessiner, écrire – l’idée est la même : cultiver un regard frais et disponible, changer son point de vue, commencer une nouvelle exploration, itérer. C’est un exercice modeste, mais au combien précieux. Essayez : sortez pour dix minutes, croquez un paysage, ou griffonnez trois vers en haïku. Vous verrez, votre point de vue n’a pas besoin de système de navigation pour se déplacer.

Voici un haïku (poème court japonais à l’origine) composé d’après les photos ci-dessus et avec l’impression que ce moment m’a fait ressentir.

Blés jaunes dorés —
Un bleuet perdu éclate,
Une note espiègle.

Fin de l’escapade dans le Münsterland

Hier n’était pas la meilleure journée pour profiter du parc naturel de Rieselfelder Münster : il faisait très chaud, sans nuage ni beaucoup d’arbres. Mais c’était très joli et j’y retournerais avec plaisir.

Je suis donc reparti sur la route en direction de la maison. Il faisait très chaud pour faire du vélo, il faut donc s’hydrater régulièrement et j’avais bêtement oublié de prendre de la crème solaire. Ces derniers temps, il faisait frais et il fallait naviguer entre les nuages de pluie. Bref, j’ai légèrement rougi au niveau du nez et dans la nuque, et à mon arrivée, je ne me sentais pas au mieux.

Je n’ai pris que peu de photos sur le retour, car le chemin était le même qu’à l’aller, et je n’ai fait des pauses que pour m’hydrater. Voici tout de même quelques souvenirs jolis glanés le long de mon chemin, dont notamment un bouchon sur la piste cyclable !

Aujourd'hui 88,84 km à vélo

À la découverte des Rieselfelder Münster

Un Rieselfeld est un lit filtrant ou champ d’épuration. Le mot allemand est très poétique, car il fait référence au ruissellement léger de l’eau dans de vastes champs. C’est une jolie métaphore du temps qui passe, lentement et patiemment. Parfait pour clôturer mon petit périple. Vous vous demandez sûrement si je n’aurais pas pèté un câble :-D car où diable trouver le calme et la ressource dans un lieu de traitement des eaux usées !

Ce site a été transformé en zone naturelle protégée vers 1978. À l’origine, il s’agissait d’une lande qui a été transformée au début du XXe siècle pour filtrer les eaux usées. Mais depuis, elle ne sert plus à cet usage et la nature y a repris ses droits. Ici, le calme règne, les nombreux oiseaux chantent et les insectes vrombissent de plaisir. Un petit paradis du ruissellement lent du temps.

Münster et le lac Aasee

Aujourd’hui, je suis allé à la découverte du lac Aasee que j’ai croisé hier sur ma route.

En voyant les angéliques sur le bord du lac, j’ai eu envie de dessiner. Je débute encore en dessin, mais j’aime bien ce premier essai.

Prendre le temps – voyage à Münster

J’ai décidé de prendre le temps. Le travail, la vie de famille, une maison, des activités, etc. font partie de ma vie quotidienne, et il arrive souvent que l’on se laisse emporter par le tumulte des flots sans arriver à aller dans la direction que l’on souhaite. On navigue alors pour éviter de s’échoir.

Chi va piano, va sano e lontano.

Celui qui sait prendre le temps ira sûrement et longtemps, dit un dicton. C’est pourquoi j’ai décidé de partir pour un court voyage de trois jours à Münster en Rhénanie-du-Nord-Westphalie. Trois jours pour penser, dessiner, écrire et découvrir.

Bien sûr, je n’ai pas pris la voiture pour venir ici, mais bien évidemment le vélo. Soixante-deux kilomètres le long de canaux, de forêts et de champs. J’ai eu de la chance, car il faisait parfaitement beau, avec un petit 20 °C, ce qui est idéal pour le vélo.

Voici une petite galerie de photos le long de la route.

Writing and other thoughts

I am at a new crossroad in my life where I am aspiring to take a new direction. I am still passionate and eager to learn about new technologies, programming, etc. But I have other interests, some old some new, which I want to explore and maybe share.

I have started to learn about calligraphy and even if I am at the very beginning and just exercising, it is reviving some older and buried activities such as writing. I usually write in French, my mother tongue. So there might be more French posts in the future here.

I am not yet sure if I will write regularly. And perhaps, I don’t want to publish anything. It’s more for myself than for anyone.

As for the thoughts, I am appalled by the current situations where intolerance, racism, stupidity and egoism are growing. I am for more diversity in our society, culture, workplace and life; we don’t have a planet B, we need to protect it; I want more tolerance, the fact that we are all so different, think different is just amazing and interesting, we should be opened to others whatever their looks, beliefs or choices. I stopped using Twitter when it was acquired by this mad man and after the election in the US last year, I deleted my account. I have been demonstrating last year and this year for more diversity and tolerance, and will continue doing this. I am passing on these values to my kids.

How to make a Docker container read-only

There are many ways to harden a Docker container, one is to make the container layer read-only.

This might be a marginal improvement to security, first your application should not run as root or has special privileges (e.g. CAP_DAC_OVERRIDE), so there is limited risk that an attacker exploiting a vulnerability of your application can modify sensitive applications. However, if you install your application within a Dockerfile as the application user (e.g. using bundle install) make the base layer read-only might protect it from unwanted modification.

I also like the idea of an immutable base layer and clearly identifying the writing data and if they should be persisted or not. I also relate that to security, because the better you know the behaviour of an application, the better you can adapt a confinement for it.

Setting the base layer read-only is somewhat challenging. Setting a container image to read-only is simple, there is a --read-only flag to the docker run command. But identifying which data is written by the containerised application can be a challenge One task is thus to identify all written data and defining of they should be persisted in a volume or not persisted. In the latter case, one could then use a tmpfs volume or a local volume (in a Swarm cluster).

We are going to use Docker layering approach to identify the written data. How to check the difference varies depending on the storage backend and they are too numerous for me to list each cases, I might complete the article in the future but today I will show how to use the BTRFS and Overlay2 backend.

What I am going to explain is based on the current implementation of the Docker storage backend as described in their respective guides. Each guide explains how the backend works, and by extracting that information I could find a way to compare the layers.

Continue reading “How to make a Docker container read-only”

Revisiting getting docker-compose on Raspberry Pi (ARM) the easy way

Whale

Two years ago I was publishing a post to build docker-compose on an ARM machine. Nowadays, you can find docker-compose on PyPI. However, if you intent to run docker-compose on a platform without Python dependencies, you might still be interested in my guide which generates an ELF binary executable.

My previous guide has worked well until release 1.22.0 after which the Dockerfile.armhf (which was merged) has been upgraded to match the changes for the X86-64 platform but broke my build instructions. The builds seems to work and generate an executable but it fails to run due to missing dependencies:

+ dist/docker-compose-Linux-armv7l version
[446] Failed to execute script docker-compose
Traceback (most recent call last):
File "bin/docker-compose", line 5, in
from compose.cli.main import main
File "/code/.tox/py36/lib/python3.6/site-packages/PyInstaller/loader/pyimod03_importers.py", line 627, in exec_module
exec(bytecode, module.dict)
File "compose/cli/main.py", line 13, in
from distutils.spawn import find_executable
ModuleNotFoundError: No module named 'distutils'

I have not found the root-cause of the problem as I am not familiar with tox, but it looks like a configuration problem of that tool. So I decided to simply use Python3 built-in virtualenv.

As in my previous guide, you need to clone the repository and choose a branch. You can take the release branch or a specific version branch (e.g. bump-1.23.2).

$ git clone https://github.com/docker/compose.git
$ cd compose
$ git checkout bump-1.23.2

The two next shell commands should modify the original build script to use virtualenv and to add the missing dependencies (which are correctly installed in the tox environment but would be missing in ours).

$ sed -i -e 's:^VENV=/code/.tox/py36:VENV=/code/.venv; python3 -m venv $VENV:' script/build/linux-entrypoint
$ sed -i -e '/requirements-build.txt/ i $VENV/bin/pip install -q -r requirements.txt' script/build/linux-entrypoint

Now you can follow the exact same steps as in the previous guide. In summary:

$ docker build -t docker-compose:armhf -f Dockerfile.armhf .
$ docker run --rm --entrypoint="script/build/linux-entrypoint" -v $(pwd)/dist:/code/dist -v $(pwd)/.git:/code/.git "docker-compose:armhf"
$ sudo cp dist/docker-compose-Linux-armv7l /usr/local/bin/docker-compose
$ sudo chown root:root /usr/local/bin/docker-compose
$ sudo chmod 0755 /usr/local/bin/docker-compose
$ docker-compose version
docker-compose version 1.23.2, build 1110ad01
docker-py version: 3.6.0
CPython version: 3.6.8
OpenSSL version: OpenSSL 1.1.0j 20 Nov 2018