Attention ceci est mon brouillon avant de faire une belle documentation sur Docker (il y a à boire et à manger). Sachant que celui-ci c’est 100% échec 🙁 .
Cette fois je vais m’attaquer au logs, et pour ce faire je vais monter un container faisant uniquement du syslog. Voici l’architecture cible que je veux :
Je vais partir sur un ubuntu pour faire plus simple.
[root@localhost ~]# cat Dockerfile FROM ubuntu:14.04 RUN apt-get update -q RUN apt-get install rsyslog CMD rsyslogd -n VOLUME /dev VOLUME /var/log [root@localhost ~]# docker build -t syslog . Sending build context to Docker daemon 132.1 kB Step 1 : FROM ubuntu:14.04 14.04: Pulling from library/ubuntu 759d6771041e: Pull complete 8836b825667b: Pull complete c2f5e51744e6: Pull complete a3ed95caeb02: Pull complete Digest: sha256:28fd745dfe0a5f6e716437969c4927c2b4e44c13ce4230205e990608048edb6d Status: Downloaded newer image for ubuntu:14.04 ---> b72889fa879c Step 2 : RUN apt-get update -q ---> Running in 2463796467f8 Ign http://archive.ubuntu.com trusty InRelease Get:1 http://archive.ubuntu.com trusty-updates InRelease [65.9 kB] Get:2 http://archive.ubuntu.com trusty-security InRelease [65.9 kB] Hit http://archive.ubuntu.com trusty Release.gpg Hit http://archive.ubuntu.com trusty Release Get:3 http://archive.ubuntu.com trusty-updates/main Sources [344 kB] Get:4 http://archive.ubuntu.com trusty-updates/restricted Sources [5217 B] Get:5 http://archive.ubuntu.com trusty-updates/universe Sources [193 kB] Get:6 http://archive.ubuntu.com trusty-updates/main amd64 Packages [948 kB] Get:7 http://archive.ubuntu.com trusty-updates/restricted amd64 Packages [23.5 kB] Get:8 http://archive.ubuntu.com trusty-updates/universe amd64 Packages [463 kB] Get:9 http://archive.ubuntu.com trusty-security/main Sources [141 kB] Get:10 http://archive.ubuntu.com trusty-security/restricted Sources [3920 B] Get:11 http://archive.ubuntu.com trusty-security/universe Sources [40.9 kB] Get:12 http://archive.ubuntu.com trusty-security/main amd64 Packages [570 kB] Get:13 http://archive.ubuntu.com trusty-security/restricted amd64 Packages [20.2 kB] Get:14 http://archive.ubuntu.com trusty-security/universe amd64 Packages [165 kB] Get:15 http://archive.ubuntu.com trusty/main Sources [1335 kB] Get:16 http://archive.ubuntu.com trusty/restricted Sources [5335 B] Get:17 http://archive.ubuntu.com trusty/universe Sources [7926 kB] Get:18 http://archive.ubuntu.com trusty/main amd64 Packages [1743 kB] Get:19 http://archive.ubuntu.com trusty/restricted amd64 Packages [16.0 kB] Get:20 http://archive.ubuntu.com trusty/universe amd64 Packages [7589 kB] Fetched 21.7 MB in 2min 26s (148 kB/s) Reading package lists... ---> 11e4b9b06a05 Removing intermediate container 2463796467f8 Step 3 : RUN apt-get install rsyslog ---> Running in e16959050268 Reading package lists... Building dependency tree... Reading state information... rsyslog is already the newest version. 0 upgraded, 0 newly installed, 0 to remove and 5 not upgraded. ---> ec6b5ccfe8c0 Removing intermediate container e16959050268 Step 4 : CMD rsyslogd -n ---> Running in 79e4a4eb00ff ---> 8ec0c5bb60d0 Removing intermediate container 79e4a4eb00ff Step 5 : VOLUME /dev ---> Running in 347f8c6ade7e ---> 6420e9f77fba Removing intermediate container 347f8c6ade7e Step 6 : VOLUME /var/log ---> Running in de699807136f ---> be5bde4d6a85 Removing intermediate container de699807136f Successfully built be5bde4d6a85 [root@localhost ~]# docker run --name syslog -d -v /tmp/syslogdev:/dev syslog 867a66d50ef7e8445955fe782592b628249ebeb6dfa80049e84a63d858ae2f54 docker: Error response from daemon: Container command '/bin/sh' not found or does not exist.. [root@localhost ~]# cat Dockerfile FROM ubuntu:14.04 RUN apt-get update -q RUN apt-get install rsyslog RUN ln -snf /bin/bash /bin/sh CMD rsyslogd -n VOLUME /dev VOLUME /var/log [root@localhost ~]# docker build -t syslog2 . Sending build context to Docker daemon 132.1 kB Step 1 : FROM ubuntu:14.04 ---> b72889fa879c Step 2 : RUN apt-get update -q ---> Using cache ---> 11e4b9b06a05 Step 3 : RUN apt-get install rsyslog ---> Using cache ---> ec6b5ccfe8c0 Step 4 : RUN ln -snf /bin/bash /bin/sh ---> Running in 0fd64938ee85 ---> 2c174cff7707 Removing intermediate container 0fd64938ee85 Step 5 : CMD rsyslogd -n ---> Running in 5fc415eaf75a ---> 16390b94ad90 Removing intermediate container 5fc415eaf75a Step 6 : VOLUME /dev ---> Running in 308f5e2d6f4e ---> ed81f91fcda0 Removing intermediate container 308f5e2d6f4e Step 7 : VOLUME /var/log ---> Running in 4daa6d206e65 ---> 0bf88dc8c124 Removing intermediate container 4daa6d206e65 Successfully built 0bf88dc8c124 [root@localhost ~]# docker run --name syslog2 -d -v /tmp/syslogdev:/dev syslog2 1cd650a2bc99db13cea2561d25c68f4f5906110eb7659b62fe70cbb217ab1e4c docker: Error response from daemon: Container command '/bin/sh' not found or does not exist..
Finalement je vais garder Fédora 😉 Misère. Ou alors je vais prendre une image minimale sur GitHub :
[root@localhost ~]# docker run -d -p 127.0.0.1:514:514/udp -v /var/log/syslog-ng:/var/log/syslog-ng --name syslog-ng bobrik/syslog-ng Unable to find image 'bobrik/syslog-ng:latest' locally latest: Pulling from bobrik/syslog-ng c862d82a67a2: Pull complete 41325d62a122: Pull complete b986d6a20615: Pull complete c91b20352765: Pull complete a3ed95caeb02: Pull complete Digest: sha256:c4067389b0e3846438a22856c731158b5ce35bdee691756c48feb4e557240597 Status: Downloaded newer image for bobrik/syslog-ng:latest 698b673be5ac4f0b0b1d2f0c7b8e040b44f183c55171b946a9e592dba439fe49
Ensuite on va modifier la configuration de HAproxy pour envoyer les logs dans ce container.
J’aurais pu utiliser d’autres techniques mais j’aime bien savoir que tous les logs sont au même endroit. Cela permet de recouper plus facilement les informations. Par exemple en faisant des liens :
RUN ln -sf /dev/stdout /var/log/nginx/access.log RUN ln -sf /dev/stderr /var/log/nginx/error.log
Mais je préfère l’idée du container à logs. On sais que c’est uniquement que lui qui va grossir et plus d’avoir des recoupements simplifiés.
Avec la configuration modifié cela donne :
[root@localhost ~]# cat haproxy.cfg global maxconn 400 defaults log syslog-ng global mode tcp option tcplog option dontlognull retries 4 maxconn 200 timeout connect 5000 timeout client 50000 timeout server 50000 frontend http-in bind *:80 log syslog-ng local0 default_backend serveur backend serveur mode tcp balance roundrobin server server1 my-server4-1:80 server server2 my-server4-2:80 server server3 my-server4-3:80 server server4 my-server4-4:80 [root@localhost ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 698b673be5ac bobrik/syslog-ng "/usr/sbin/syslog-ng " 3 minutes ago Up 3 minutes 514/tcp, 127.0.0.1:514->514/udp syslog-ng 78f6bc54152e my-server4 "/sbin/server4" 6 hours ago Up 6 hours 0.0.0.0:8083->80/tcp my-server4-4 fce6865343f1 my-server4 "/sbin/server4" 6 hours ago Up 6 hours 0.0.0.0:8082->80/tcp my-server4-3 a75937eb980d my-server4 "/sbin/server4" 6 hours ago Up 6 hours 0.0.0.0:8081->80/tcp my-server4-2 eacf3e4bc897 my-server4 "/sbin/server4" 6 hours ago Up 6 hours 0.0.0.0:8080->80/tcp my-server4-1 2fc533c55725 postgres "/docker-entrypoint.s" 16 hours ago Up 16 hours 0.0.0.0:5432->5432/tcp postgres2 [root@localhost ~]# docker run -d --link my-server4-1 --link my-server4-2 --link my-server4-3 --link my-server4-4 --link syslog-ng -p 80:80 --name mon-haproxy-v16 my-haproxy-v15 ebbe54ce6794f7075f9a43c30903f508c2200098ccd2f530b7925c131e94e56e [root@localhost ~]# telnet 127.0.0.1 80 Trying 127.0.0.1... Connected to 127.0.0.1. Escape character is '^]'. HELLO IP eth0 QUIT Connection closed by foreign host. [root@localhost ~]# docker logs 698b673be5ac [root@localhost ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES ebbe54ce6794 my-haproxy-v15 "/docker-entrypoint.s" About a minute ago Up About a minute 0.0.0.0:80->80/tcp mon-haproxy-v16 698b673be5ac bobrik/syslog-ng "/usr/sbin/syslog-ng " 5 minutes ago Up 5 minutes 514/tcp, 127.0.0.1:514->514/udp syslog-ng 78f6bc54152e my-server4 "/sbin/server4" 6 hours ago Up 6 hours 0.0.0.0:8083->80/tcp my-server4-4 fce6865343f1 my-server4 "/sbin/server4" 6 hours ago Up 6 hours 0.0.0.0:8082->80/tcp my-server4-3 a75937eb980d my-server4 "/sbin/server4" 6 hours ago Up 6 hours 0.0.0.0:8081->80/tcp my-server4-2 eacf3e4bc897 my-server4 "/sbin/server4" 6 hours ago Up 6 hours 0.0.0.0:8080->80/tcp my-server4-1 2fc533c55725 postgres "/docker-entrypoint.s" 16 hours ago Up 16 hours 0.0.0.0:5432->5432/tcp postgres2 [root@localhost ~]# docker logs ebbe54ce6794 haproxy-systemd-wrapper: executing /usr/local/sbin/haproxy -p /run/haproxy.pid -f /usr/local/etc/haproxy/haproxy.cfg -Ds
Je vais essayer sur un autre port …
[root@localhost ~]# docker stop syslog-ng syslog-ng [root@localhost ~]# docker rm syslog-ng syslog-ng [root@localhost ~]# docker run -d -p 127.0.0.1:514:515/udp -v /var/log/syslog-ng:/var/log/syslog-ng --name syslog-ng bobrik/syslog-ng 6307a2a148b1323c5cddc2f4acb14b0e667e63fd3f98e85bd6a35bad358a551d [root@localhost ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 6307a2a148b1 bobrik/syslog-ng "/usr/sbin/syslog-ng " 22 seconds ago Up 21 seconds 514/tcp, 514/udp, 127.0.0.1:514->515/udp syslog-ng ebbe54ce6794 my-haproxy-v15 "/docker-entrypoint.s" 9 minutes ago Up 9 minutes 0.0.0.0:80->80/tcp mon-haproxy-v16 78f6bc54152e my-server4 "/sbin/server4" 6 hours ago Up 6 hours 0.0.0.0:8083->80/tcp my-server4-4 fce6865343f1 my-server4 "/sbin/server4" 6 hours ago Up 6 hours 0.0.0.0:8082->80/tcp my-server4-3 a75937eb980d my-server4 "/sbin/server4" 6 hours ago Up 6 hours 0.0.0.0:8081->80/tcp my-server4-2 eacf3e4bc897 my-server4 "/sbin/server4" 6 hours ago Up 6 hours 0.0.0.0:8080->80/tcp my-server4-1 2fc533c55725 postgres "/docker-entrypoint.s" 16 hours ago Up 16 hours 0.0.0.0:5432->5432/tcp postgres2 [root@localhost ~]# docker logs 6307a2a148b1 [root@localhost ~]# logger -n 127.0.0.1 -P 516 -p auth.notice "Mon message" -s -d
Je n’ai toujours rien dans le dossier /var/log/syslog-ng/. Même sans redirection de port je n’ai pas de logs :
[root@localhost ~]# docker run -d -v /var/log/syslog-ng:/var/log/syslog-ng --name syslog-ng bobrik/syslog-ng 6b798602b6610a4046129ccae1338358da8ea27334dbab37fa8ca606f1fc0d4a [root@localhost ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 6b798602b661 bobrik/syslog-ng "/usr/sbin/syslog-ng " 4 seconds ago Up 3 seconds 514/tcp, 514/udp syslog-ng ebbe54ce6794 my-haproxy-v15 "/docker-entrypoint.s" 17 minutes ago Up 17 minutes 0.0.0.0:80->80/tcp mon-haproxy-v16 78f6bc54152e my-server4 "/sbin/server4" 6 hours ago Up 6 hours 0.0.0.0:8083->80/tcp my-server4-4 fce6865343f1 my-server4 "/sbin/server4" 6 hours ago Up 6 hours 0.0.0.0:8082->80/tcp my-server4-3 a75937eb980d my-server4 "/sbin/server4" 6 hours ago Up 6 hours 0.0.0.0:8081->80/tcp my-server4-2 eacf3e4bc897 my-server4 "/sbin/server4" 6 hours ago Up 6 hours 0.0.0.0:8080->80/tcp my-server4-1 2fc533c55725 postgres "/docker-entrypoint.s" 16 hours ago Up 16 hours 0.0.0.0:5432->5432/tcp postgres2 [root@localhost ~]# docker exec -t syslog-ng tail -f /var/log/syslog-ng/* tail: can't open '/var/log/syslog-ng/*': No such file or directory tail: no files
Je pense que cela ne va pas être trivial. J’ai pu lire un article « 6 million ways to log in docker« . J’ai du en tester 10 sans succès … La communauté Docker c’est la modestie avant tout 😉 .
Je vais essayer avec rsyslog.
[root@localhost ~]# docker run -d -v /tmp:/var/log/syslog -p 127.0.0.1:5514:514/udp --name rsyslog voxxit/rsyslog Unable to find image 'voxxit/rsyslog:latest' locally latest: Pulling from voxxit/rsyslog 6d6a6a7dae29: Pull complete 117d78ae6306: Pull complete de74d1b16221: Pull complete 8c510761e859: Pull complete Digest: sha256:2a874ed2f56e5854714ce68ef905f5e1c428aed92cf92e19e8c925d5faf4f277 Status: Downloaded newer image for voxxit/rsyslog:latest 44f6508471599f22cbbaae8464d9925878300198c32aca388a4eaf27bb89c655
Dans un premier temps je vais essayer d’envoyer vers le syslog local.
[root@localhost ~]# docker run -d --link my-server4-1 --link my-server4-2 --link my-server4-3 --link my-server4-4 --log-driver=syslog --log-opt syslog-address=udp://127.0.0.1:514 --log-opt syslog-facility=daemon --log-opt syslog-tag=mon-haproxy -p 80:80 --name mon-haproxy-v16 my-haproxy-v15 3aa83e6ee91344caafa858d637810a01546dd9aee330383c0d66379ecdfc0126 [root@localhost ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 3aa83e6ee913 my-haproxy-v15 "/docker-entrypoint.s" 5 seconds ago Up 4 seconds 0.0.0.0:80->80/tcp mon-haproxy-v16 78f6bc54152e my-server4 "/sbin/server4" 7 hours ago Up 7 hours 0.0.0.0:8083->80/tcp my-server4-4 fce6865343f1 my-server4 "/sbin/server4" 7 hours ago Up 7 hours 0.0.0.0:8082->80/tcp my-server4-3 a75937eb980d my-server4 "/sbin/server4" 7 hours ago Up 7 hours 0.0.0.0:8081->80/tcp my-server4-2 eacf3e4bc897 my-server4 "/sbin/server4" 7 hours ago Up 7 hours 0.0.0.0:8080->80/tcp my-server4-1 2fc533c55725 postgres "/docker-entrypoint.s" 17 hours ago Up 17 hours 0.0.0.0:5432->5432/tcp postgres2 [root@localhost ~]# telnet 127.0.0.1 80 Trying 127.0.0.1... Connected to 127.0.0.1. Escape character is '^]'. HELLO IP eth0 QUIT Connection closed by foreign host. [root@localhost ~]# tail -f /var/log/messages Apr 15 14:17:01 localhost NetworkManager[554]: (docker0): bridge port vethd376d33 was attached Apr 15 14:17:01 localhost NetworkManager[554]: (vethd376d33): enslaved to docker0 Apr 15 14:17:01 localhost kernel: eth0: renamed from vethd8906f7 Apr 15 14:17:01 localhost kernel: IPv6: ADDRCONF(NETDEV_CHANGE): vethd376d33: link becomes ready Apr 15 14:17:01 localhost kernel: docker0: port 6(vethd376d33) entered forwarding state Apr 15 14:17:01 localhost kernel: docker0: port 6(vethd376d33) entered forwarding state Apr 15 14:17:01 localhost NetworkManager[554]: (vethd8906f7): failed to disable userspace IPv6LL address handling Apr 15 14:17:01 localhost NetworkManager[554]: (vethd376d33): link connected Apr 15 14:17:01 localhost docker: time="2016-04-15T14:17:01.191761817+01:00" level=warning msg="Using log tag from deprecated log-opt 'syslog-tag'. Please use: --log-opt tag=\"mon-haproxy\"" Apr 15 14:17:16 localhost kernel: docker0: port 6(vethd376d33) entered forwarding state [root@localhost ~]# docker stop mon-haproxy-v16 mon-haproxy-v16 [root@localhost ~]# docker rm mon-haproxy-v16 mon-haproxy-v16 [root@localhost ~]# docker run -d --link my-server4-1 --link my-server4-2 --link my-server4-3 --link my-server4-4 --log-driver=syslog --log-opt syslog-address=udp://127.0.0.1:514 --log-opt syslog-facility=daemon -p 80:80 --name mon-haproxy-v16 my-haproxy-v15 123df78c2db1ec010b9348049ae58519cf5f656a6a433c27e8a6b966bd57ed67 [root@localhost ~]# telnet 127.0.0.1 80 Trying 127.0.0.1... Connected to 127.0.0.1. Escape character is '^]'. HELLO QUIT Connection closed by foreign host. [root@localhost ~]# telnet 127.0.0.1 80 Trying 127.0.0.1... Connected to 127.0.0.1. Escape character is '^]'. HELLO QUIT Connection closed by foreign host. [root@localhost ~]# tail -f /var/log/messages Apr 15 14:19:44 localhost NetworkManager[554]: (veth36cbbad): new Veth device (carrier: OFF, driver: 'veth', ifindex: 337) Apr 15 14:19:44 localhost NetworkManager[554]: (docker0): bridge port veth36cbbad was attached Apr 15 14:19:44 localhost NetworkManager[554]: (veth36cbbad): enslaved to docker0 Apr 15 14:19:44 localhost kernel: eth0: renamed from veth5611685 Apr 15 14:19:44 localhost NetworkManager[554]: (veth5611685): failed to disable userspace IPv6LL address handling Apr 15 14:19:44 localhost NetworkManager[554]: (veth36cbbad): link connected Apr 15 14:19:44 localhost kernel: IPv6: ADDRCONF(NETDEV_CHANGE): veth36cbbad: link becomes ready Apr 15 14:19:44 localhost kernel: docker0: port 6(veth36cbbad) entered forwarding state Apr 15 14:19:44 localhost kernel: docker0: port 6(veth36cbbad) entered forwarding state Apr 15 14:19:59 localhost kernel: docker0: port 6(veth36cbbad) entered forwarding state
Aie j’ai oublié de refaire le build …
[root@localhost ~]# cat haproxy.cfg global maxconn 400 defaults log 127.0.0.1 local0 mode tcp option tcplog option dontlognull retries 4 maxconn 200 timeout connect 5000 timeout client 50000 timeout server 50000 frontend http-in bind *:80 log 127.0.0.1 local0 default_backend serveur backend serveur mode tcp balance roundrobin server server1 my-server4-1:80 server server2 my-server4-2:80 server server3 my-server4-3:80 server server4 my-server4-4:80 [root@localhost ~]# docker build -t my-haproxy-v15 . Sending build context to Docker daemon 132.1 kB Step 1 : FROM haproxy:1.5 ---> 011e001101c0 Step 2 : COPY ./haproxy.cfg /usr/local/etc/haproxy/haproxy.cfg ---> 3579ba8e9e3c Removing intermediate container 37aab30df069 Step 3 : EXPOSE 80 ---> Running in 2e94185ce8bd ---> 824e19a4591a Removing intermediate container 2e94185ce8bd Successfully built 824e19a4591a
J’ai aussi essayé :
[root@localhost ~]# cat haproxy.cfg global maxconn 400 defaults log 127.0.0.1 local0 log 127.0.0.1 local1 notice mode tcp option tcplog option dontlognull retries 4 maxconn 200 timeout connect 5000 timeout client 50000 timeout server 50000 frontend http-in bind *:80 default_backend serveur backend serveur mode tcp balance roundrobin server server1 my-server4-1:80 server server2 my-server4-2:80 server server3 my-server4-3:80 server server4 my-server4-4:80
Et dernièrement :
[root@localhost ~]# cat haproxy.cfg global maxconn 400 defaults log 127.0.0.1 local0 log 127.0.0.1 local1 notice log 127.0.0.1 local5 debug mode tcp option tcplog option dontlognull retries 4 maxconn 200 timeout connect 5000 timeout client 50000 timeout server 50000 frontend http-in bind *:80 default_backend serveur backend serveur mode tcp balance roundrobin server server1 my-server4-1:80 server server2 my-server4-2:80 server server3 my-server4-3:80 server server4 my-server4-4:80
Sans succès… mais je me suis rendu compte que rsyslog n’écoutais pas en local, j’ai donc modifié la configuration dans : /etc/rsyslog.conf.
# Provides UDP syslog reception $ModLoad imudp $UDPServerRun 514 # Save boot messages also to boot.log local7.* /var/log/boot.log # Ajout local1.* /var/log/docker-1.log local5.* /var/log/docker-5.log [root@localhost ~]# systemctl restart rsyslog.service [root@localhost ~]# telnet 127.0.0.1 80 Trying 127.0.0.1... Connected to 127.0.0.1. Escape character is '^]'. HELLO QUIT Connection closed by foreign host. [root@localhost ~]# tail -f /var/log/ anaconda/ btmp dmesg.old lastlog ppp/ syslog-ng/ wpa_supplicant.log audit/ cron firewalld maillog secure tallylog wtmp boot.log dmesg grubby messages spooler tuned/ yum.log [root@localhost ~]# tail -f /var/log/messages Apr 15 14:44:13 localhost rsyslogd: [origin software="rsyslogd" swVersion="7.4.7" x-pid="17977" x-info="http://www.rsyslog.com"] exiting on signal 15. Apr 15 14:44:13 localhost rsyslogd: [origin software="rsyslogd" swVersion="7.4.7" x-pid="17996" x-info="http://www.rsyslog.com"] start Apr 15 14:44:13 localhost systemd: Stopping System Logging Service... Apr 15 14:44:13 localhost systemd: Starting System Logging Service... Apr 15 14:44:13 localhost systemd: Started System Logging Service.
Mon dernier test :
[root@localhost ~]# cat haproxy.cfg global maxconn 400 defaults log 127.0.0.1 local5 debug mode tcp retries 4 maxconn 200 timeout connect 5000 timeout client 50000 timeout server 50000 frontend http-in bind *:80 default_backend serveur backend serveur mode tcp balance roundrobin server server1 my-server4-1:80 server server2 my-server4-2:80 server server3 my-server4-3:80 server server4 my-server4-4:80 ... [root@localhost ~]# docker run -d --link my-server4-1 --link my-server4-2 --link my-server4-3 --link my-server4-4 --log-driver=syslog --log-opt syslog-address=udp://127.0.0.1:514 --log-opt tag=haproxy -p 80:80 --name mon-haproxy-v16 my-haproxy-v15 86bbca2ce9cdb141a286a96b79ecbd350abb171a2b35280d509ef19b82b11504
Misère.