Tags

arm64 blacklistd bluetooth cu dns dovecot envsubst filter freebsd ipfw lets_encrypt opensmtpd shell ssl template tls unbound

Powered by

blOg
maRkdown
awK
shEll

09/12/2021

[ envsubst template ]

202112090700 envsubst template

envsubst, le templating du shell

envsubst est une commande que j'ai découvert sur le tard et je le regrette. Le script suivant montre un exemple d'utilisation:

$ cat -n pouet.sh ; echo ; ./pouet.sh | cat -n
 1  #!/bin/sh
 2
 3  set -eu
 4
 5  set -a
 6  FOO=foo
 7  BAR=bar
 8  set +a
 9  BAZ=baz
10
11  echo 'FOO: ${FOO} BAR: $BAR BAZ: ${BAZ}' | envsubst
12  echo 'FOO: ${FOO} BAR: $BAR BAZ: ${BAZ}' | envsubst '$FOO $BAZ'
13  echo "FOO: ${FOO} BAR: $BAR BAZ: ${BAZ}"
 1  FOO: foo BAR: bar BAZ: 
 2  FOO: foo BAR: ${BAR} BAZ: 
 3  FOO: foo BAR: bar BAZ: baz

On observe:

Un moteur de blog

Quelques fichiers suffisent pour générer un site statique:

$ envsubst < top.htm > .fichier.html
$ envsubst < fichier.md | markdown2html >> .fichier.html
$ envsubst < bottom.htm >> .fichier.html
$ mv .fichier.html fichier.html

Le moteur de ce blog utilise une (légère) déclinaison du code ci-dessus.

Des fichiers de configuration

J'apprécie Xen et le fichier de configuration d'une "machine virtuelle" (aka domU) ressemble à

name     = "al30"
maxvcpus = 1
memory   = 1024
kernel   = "/xen/vmlinuz-virt"
ramdisk  = "/xen/initramfs-virt"
vif      = [ 'bridge=br40' ]

# run
extra = "root=/dev/xvda3 modules=ext4 console=hvc0"
disk  = [ 'format=raw, vdev=xvda, access=w, target=/xen/al30.img' ]
type  = "pvh"
# run

# install
#extra = "modules=modules=loop,squashfs console=hvc0"
#disk  = [ 'format=raw, vdev=xvdc, access=r, devtype=cdrom, target=/xen/alpine-virt-3.14.3-x86_64.iso', 'format=raw, vdev=xvda, access=w, target=/xen/al30.img' ]
#type  = "pv"
# install

Plutôt que de jouer avec des lignes commentées, je fais un template:

# [${GENERATED_ON}] ${GENERATED_PATH}> ${GENERATED_BY} @${GENERATED_AT}

maxvcpus = 1
memory   = 1024
kernel   = "/xen/vmlinuz-virt"
ramdisk  = "/xen/initramfs-virt"
vif      = [ 'bridge=br40' ]

name  = "${XEN_NAME}"
type  = "${XEN_TYPE}"
extra = "${XEN_EXTRA} console=hvc0"
disk  = [ ${XEN_DISK} ]

Un script enrobe le tout, génère les variables suivant le mode run/install et se termine par:

...
WORKDIR=$(mktemp -d)
envsubst < ${tmpl} > ${WORKDIR}/xl.cfg
cd ${WORKDIR}

${AS_ROOT} xl create xl.cfg $@

Je l'utilise comme suit:

# mode install avec la console xen (-- -c)
$ ./domU -i al30.cfg -- -c
# mode normal
$ ./domU al30.cfg

al30.cfg définit le template et le nom du domU.

La documentation

Commentaires: https://github.com/bsdsx/blog_posts/issues/12


Lien vers ce billet