Comment servir des pintes de Guinness "over Internet" ;) Reprise/Fork d'un très ancien code d'un pilier de f.m.b.l : http://tnemeth.free.fr/projets/guinness-server.html
Go to file
2025-10-05 11:23:45 +11:00
picoles fix: use extern mutex and COPT -fPIE -Wno-error. Add Dockerfile 2025-10-05 10:50:44 +11:00
.gitignore client compiled :) 2020-03-28 11:56:49 +01:00
boucle-de-make.txt initial import 2020-03-28 09:11:11 +01:00
broadcast.c WIP: missing picoles dir 2025-10-05 10:32:35 +11:00
broadcast.h first flow of .h, one main() compilng 2020-03-28 09:57:02 +01:00
clients.c asciification du code source 2020-04-14 23:41:07 +02:00
clients.h first flow of .h, one main() compilng 2020-03-28 09:57:02 +01:00
commands.c asciification du code source 2020-04-14 23:41:07 +02:00
commands.h asciification du code source 2020-04-14 23:41:07 +02:00
config.h first flow of .h, one main() compilng 2020-03-28 09:57:02 +01:00
defines.h asciification du code source 2020-04-14 23:41:07 +02:00
Dockerfile fix: missing CMD in Dockerfile 2025-10-05 11:07:10 +11:00
drinks.c asciification du code source 2020-04-14 23:41:07 +02:00
drinks.h first flow of .h, one main() compilng 2020-03-28 09:57:02 +01:00
guinness.c asciification du code source 2020-04-14 23:41:07 +02:00
guinness.h client compiled :) 2020-03-28 11:56:49 +01:00
guinnessd.c WIP: missing picoles dir 2025-10-05 10:32:35 +11:00
guinnessd.h WIP: missing picoles dir 2025-10-05 10:32:35 +11:00
lists.c server is running, expect more bugs 2020-03-28 10:59:41 +01:00
lists.h first flow of .h, one main() compilng 2020-03-28 09:57:02 +01:00
Makefile WIP: missing picoles dir 2025-10-05 10:32:35 +11:00
Makefile.boucle initial import 2020-03-28 09:11:11 +01:00
Makefile.docker WIP: missing picoles dir 2025-10-05 10:32:35 +11:00
pint.h added pint.h needed by drinks.c 2020-03-28 10:53:42 +01:00
printlog.c asciification du code source 2020-04-14 23:41:07 +02:00
printlog.h asciification du code source 2020-04-14 23:41:07 +02:00
README.md fix+doc: fix missing CMD directive in dockerfile + updated doc 2025-10-05 11:23:45 +11:00
tools.c asciification du code source 2020-04-14 23:41:07 +02:00
tools.h asciification du code source 2020-04-14 23:41:07 +02:00
xmem.c asciification du code source 2020-04-14 23:41:07 +02:00
xmem.h asciification du code source 2020-04-14 23:41:07 +02:00

Guinness Server

Official Website of Guinnessd

Origine :

La version d'origine a un gros souci : le Makefile tourne désepérement en boucle ! J'ai donc décidé, pour occuper mes longues journées de retraite sanitaire, de sortir la disqueuse et de tenter de trouver le bug. Et ça ne va pas être simple, le Makefile d'origine est très convolué...

Par la suite, j'ai l'intention d'y apporter quelques modifications que je trouverais à mon gout. Elles seront décrites plus bas dans la page.

Méthodologie :

Pour commencer, je vais utiliser un mélange de rache et de poudre verte, additionné d'un peu de jus de citron pour le goût : importer les fichiers un à un jusqu'à ce que ça marche. Et par la suite, remttre les choses au clair.

Première étape : tenter de compiler le main() du serveur. Oké, il demande un certain nombre de .h, que je m'empresse de lui fournir à partir de l'original. C'est au moment où il me demande le config.h que j'allume la disqueuse, je n'ai qu'un config.h.in sous la main. Qu'à cela ne tienne, kraftons vite ce fichier manquant à la main.

Voilà finalement, avec cette méthode (que je n'hésite à appeler le goutte-à-goutte), j'ai reconstitué un Makefile qui fonctionne et compile le client et le serveur.

Résultat :

Et voilà une session typique de remote-picole :

tth@lubitel:~/Devel/GuinnessServer$ ./guinnessd 
guinnessd: Sat 28 Mar 2020 15:21:35 - Impossible d'ouvrir le repertoire [/var/tmp/drinks.d]
guinnessd: Sat 28 Mar 2020 15:21:35 - Boissons disponibles :
guinnessd: Sat 28 Mar 2020 15:21:35 - 0 : guinness
guinnessd: Sat 28 Mar 2020 15:21:35 - Serveur en attente de connexions (port 1664)...
guinnessd: Sat 28 Mar 2020 15:22:18 - Connexion acceptee...
guinnessd: Sat 28 Mar 2020 15:22:18 - Connexion entrante : 127.0.0.1 localhost
guinnessd: Sat 28 Mar 2020 15:22:18 - Ports (loc/dist)   : 1664 / 47647
guinnessd: Sat 28 Mar 2020 15:22:18 - Utilisateur        : [tth]
guinnessd: Sat 28 Mar 2020 15:22:18 - Boisson preferee   : [guinness]
guinnessd: Sat 28 Mar 2020 15:22:18 - Message de logout  : [Bye bye...]
guinnessd: Sat 28 Mar 2020 15:22:18 - Date de connexion  : [Sat 28 Mar 2020 15:22:18]
guinnessd: Sat 28 Mar 2020 15:22:19 - Broadcast pour [tth] : MESSAGE
guinnessd: Sat 28 Mar 2020 15:22:19 -    de [---] : tth a rejoint le serveur de Guinness.

« Ah, c'est l'heure d'aller boire une bière, et comme il ne faut jamais boire le ventre vide, je vais manger une Guinness avant. »

tth@lubitel:~/Devel/GuinnessServer$ ./guinness -u tth
Serveur     : [127.0.0.1]       Port    : [1664]
Utilisateur : [tth]             Boisson : [guinness]    Logout : [Bye bye...]
Pr<50>fixe     : [/]
-+- Connexion acceptee. -+-

Bienvenue sur le serveur de Guinness.
> <---> tth a rejoint le serveur de Guinness.
> /1
       .____,ooo____.
  ,d#MMMMMMMMMMMMMMMMMM#o.
 |MMMMMMMMMMMMMMMMMMMMMMMM
 |MMMMMMMMMMMMMMMMMMMMMMMM
 |MMMMMMMMMMMMMMMMMMH#*#**
 |M'"""""""""""""'`
 |M.
 `ML
  HP        ##o#
  |L        TMP]
   M  .      *&'    .   `
   |, |dL.?-\.~b   \:^  |
   `|   ` `  ' ``      ,
    H                  `
    |.
    `|                 |
     M                ,'
     |                |
     |,               |
     ||               |
     J'               |
     M.               J|
     HM\\           -':|
     `"=+\&#HMH#*??v/''
          `""""`""
> 

Modifications

  • ajouter une variable d'environnement DRINKS_DIR pour spécifier l'emplacement de la réserve de picole.
  • modifier la gestion des fichiers de picole afin d'avoir une description succinte dans le listing du bar.

Conteneur

Le serveur BaaS (Beverage as a Service) est dorénavant disponible sous forme de conteneur.

Génération de l'image

Création de l'image guinnessd:latest

make -f Makefile.docker build

Utilisation du conteneur

  • Le service écoute sur le port 1664.
  • Le bar se situe dans /usr/local/share/picoles et est déjà approvionné. il est donc possible d'en faire un volume Docker.
docker run --rm -p 1664:1664 guinnessd:latest

Docker Swarm

Ma préférence allant à l'utilisation de Docker via les Docker Swarm, vous touverez ci-dessous un fichier de stack

version: 3.9
service:
  guinnessd:
    image: guinnessd:latest
    logging:
      driver: journald
      options:
        tag: "docker: guinnessd"
    ports:
      - target: 1664
        published: 1664
        mode: host
    deploy:
      endpoint_mode: dnsrr
      mode: replicated
      replicas: 1 # Multipliez les barmen en ajoutant des réplicas :-)