Makefile, maintenance d’un site internet statique
Cet article à pour objet la création et la maintenance d’un site internet statique à partir d’un fichier Makefile
. Cet exécutable convertira des fichiers, écrits au format markdown
, en langage html
. Une liste des pages sera aussi créée.
📝 Note : Ce site internet s’appuie d’ailleurs sur cette base.
Installation du programme markdown
.
sudo apt update && sudo apt install markdown -y
Structure des dossiers et des fichers
bin #dossier contenant les scripts shell
html #dossier contenant les pages html
media #dossier contenant les images, entre autre
modele #dossier contenant les modèles html
favicon.ico
index.html
Makefile
style.css
Le fichier Makefile
## Extentions à traiter
.SUFFIXES: .md .html
## Convertisseur à utiliser
TOHTML = markdown
## Traitement des fichiers md à convertir en html :
# "$@" correspond au fichier que l'on veut obtenir (page.html)
# "$<" au fichier source (page.md)
.md.html:
@echo "$< -> $@"
@cat modele/en-tete.html > $@
@${TOHTML} < $< >> $@
@cat modele/pied-de-page.html >> $@
@bin/titre.sh $@
## Répertoire contenant les fichiers markdown sources
SRCDIR = /html/
## liste d'exclusion de fichiers
LIST = *.html
## Recherche des fichiers markdown
# "!=" permet de remplir la variable "SRC".
# find ${SRCDIR} -type f -name \*.md" permet de lister tous les fichiers "md" dans le dossier html.
# "-a ! -path ${LIST}" : permet d'exclure des fichiers.
# "-a ! -path ${SRCDIR}" : permet d'exclure des dossiers.
# "| sort" : permet de trier la liste dans l'ordre alphabétique.
SRC != find ${SRCDIR} -type f -name \*.md \
-a ! -path ${LIST} \
-a ! -path ${SRCDIR}/archive/\* \
| sort
## Variable qui contient la liste de tous les fichiers que l'on veut obtenir
HTML = ${SRC:.md=.html}
## instruction pour le traitement de la liste précédente
all :${HTML}
## localisation du fichier contenant la liste des pages
LIST = ${SRCDIR}/index.md
HTMLLIST = ${LIST:.md=.html}
## Génération de la liste
${LIST}: ${SRC}
@echo "$@"
@bin/liste.sh ${SRC} > $@
## Génération de la page html
all: md html
md: ${LIST}
html: ${HTMLLIST} ${HTML}
Création de deux fichiers html
dans le répertoire modele
Le fichier en-tete.html
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<!--<link rel="stylesheet" href="/style.css" />-->
<!--<link rel="icon" type="image/x-icon" href="/favicon.ico" />-->
<title>
</title>
</head>
<body>
Le fichier pied-de-page.html
</body>
</html>
Les scripts shell
Le script bin/liste.sh
Script permettant de générer une liste des pages html
sous la forme <a href="">titre</a>
dont le titre sera <h1>Liste</h1>
:
#!/bin/sh
printf '%s\n\n' "# Liste"
for l in $@
do
TITLE="$(grep -m1 "#" "${l}" | sed 's/^# //')"
if [ -n "${TITLE}" ]; then
md="$(printf "%s" ${l} | cut -d'/' -f2- )"
name="$(basename ${md} .md)"
echo="$(echo "html/"${name}".html")"
printf '[%s](/%s)\n\n' "${TITLE}" "${echo}"
fi
done
Le script bin/titre.sh
Ajoute un titre après la balise <title>
située dans l’entête de la page html
, ligne correspondant au titre <h1>
trouvé :
#!/bin/sh
DEFAULT=" "
TITLE="$(grep -m1 "<h1>" "${1}"| \
sed -n -e 's/.*<h1>\(.*\)<\/h1>.*/\1/p')"
test -z "${TITLE}" && TITLE="${DEFAULT}"
sed -i "/<title>/a\\
${TITLE}" "${1}"
Rendre les fichiers de script exécutables
chmod +x *
Lancement de l’opération de maintenance.
make
📝 Note : Il est possible de créer un script pour lancer
make
sans avoir à se positionner à chaque fois dans le dossier racine du site.
#!/bin/bash
/var/www/make &> /dev/null
📝 Note : Il peut être utile de créer un script permettant de supprimer tous les fichiers
html
ainsi créés. Ainsi que les fichiersindex.md
qui peuvent créer une ligne morte dans la liste.
#!/bin/bash
find /var/www/html/ -type f -name *.html -delete
find /var/www/html/ -type f -name index.md -delete
🔗 Source: https://si3t.ch/..