Le but de ce billet n’est pas de vous faire l’éloge mérité du serveur HTTP Caddy, mais juste de vous expliquer comment le compiler.

Pour la petite histoire Matthew Holt l’auteur/créateur de Caddy à dernièrement changé le mode de distribution et la licence du binaire pour essayer de gagner quelques sousous avec sa création. Et vous savez quoi ?

Il a bien raison !!

C’est juste dommage qu’il soit obligé d’en arriver à imposer le paiement d’une licence. Je veux dire par là qu’il serait peut être temps que “les gens”© JLM2017, réalisent que l’open-source, si c’est bon pour le Karma, ça ne rempli pas l’assiette des gosses et qu’il n’est donc pas interdit de donner en retour.

Bref… revenons à Caddy et à sa compilation, car si la distribution et la licence du binaire ont changés, Caddy est toujours un projet open-source, que vous pouvez utiliser comme bon vous semble.

Dans ce tuto je vais donc vous expliquer comment compiler Caddy avec le plugin IP Filter. Je vais le faire sur mon poste de travail sous Ubuntu 16.04

Installation de Go

Caddy est codé en Go, la première chose à faire c’est donc d’installer Go, vous pouvez le faire via votre gestionnaire de packages (apt, yum, brew,…), ou en utilisant les installateurs fournis sur la page de téléchargement du site où pour les plus poilu d’entre vous, depuis les sources.

Dites, maintenant que vous avez Go installé, ce serait ballot de passez pas à coté de l’opportunité d’apprendre un nouveau langage… ;)

Récupération du code source de Caddy

Vous allez avoir besoin de git, si vous ne l’avez pas sur votre machine, c’est le moment de l’installer.

Puis on “go get” les sources de Caddy:

go get github.com/mholt/caddy/caddy

Récupération du code source du plugin

Dans mon cas je n’ai qu’un plugin, si vous voulez en ajouter plusieurs il vous suffit de répéter cette étape.

go get github.com/pyed/ipfilter

Modification des sources de Caddy pour activer le plugin

Pour activer un plugin, il suffit de l’importer dans Caddy. Ca se passe dans le fichier $GOPATH/src/github.com/mholt/caddy/blob/master/caddy/caddymain/run.go

Donc on édite le fichier pour y coller notre/nos import(s) de plugin(s)

nano $GOPATH/src/github.com/mholt/caddy/caddy/caddymain/run.go

Vous verrez à la fin des la section d’import la ligne // This is where other plugins get plugged in (imported) et bien figurez vous que l’on va mettre nos directives d’import de plugins sous cette ligne. C’est fooouuuuu non ?!

Dans mon cas ça ressemble donc à:

_ "github.com/mholt/caddy/caddyhttp"

"github.com/mholt/caddy/caddytls"
// This is where other plugins get plugged in (imported)
_ "github.com/pyed/ipfilter"

Compilation de Caddy

Attention, accrochez vous on arrive au point le plus délicat de l’opération. Vous êtes prêt ? Vos chakras sont bien ouverts ? On respire un grand coup et…c’est parti !

cd $GOPATH/src/github.com/mholt/caddy/caddy 
go build -o /tmp/caddy

Et voila c’est tout, votre binaire est compilé et est disponible ici: /tmp/caddy

Je rappelle que si Caddy doit tourner sous un autre OS et/ou système que la machine qui vous sert à le compiler, il vous suffit d’indiquer la cible lors du go build. Par exemple si vous voulez faire tourner Caddy sur votre Raspberry Pi, il vous suffit de de le compiler avec les options suivantes:

env GOOS=linux GOARCH=arm go build -o /tmp/caddy

Voila c’est tout pour aujourd’hui.

A plus les puces, bisous les loulous.