Template syntax
Updated 5 Novembre 2026
Un modèle est un fichier de configuration ordinaire. Sa première ligne peut être un enregistrement de contrôleparamètres (format=…, path=…), conditions (ac_install_merge==on) et les substitutions dans les valeurs (#-variable-#).
# Calculate format=samba name=smb.conf path=/etc [parameters] [conditions && conditions]
Vous pouvez répartir l'en-tête du modèle sur plusieurs lignes : si la première commence par # Calculate et se termine par un seul \, la ligne suivante est considérée comme sa continuation. Une continuation sans # est appliquée, une ligne de continuation qui commence par # conduit à Gabarit incorrect, et deux \ d'affilée cassent l'analyse.
L'enregistrement de contrôle n'est pas obligatoire. Sans en-tête, le modèle est traité comme un fichier "brut"
L'enregistrement de contrôle n'est pas obligatoire. Sans en-tête, le modèle est traité comme un fichier "brut" : il réécrit entièrement la cible (format=raw, par conséquent append=replace), et le chemin est pris de la position courante - depuis la racine du dépôt, en prolongeant les répertoires situés plus haut dans l'arborescence des modèles. Conséquence pratique : si vous placez un fichier sans en-tête dans un sous-répertoire, son nom se retrouve dans le chemin du résultat, et la variable d'action doit figurer dans l'en-tête de l'élément de premier niveau - sinon le sous-arbre sera ignoré sans aucun message. niveau - sinon le sous-arbre sera ignoré sans aucun message.
si vous placez un fichier sans en-tête dans un sous-répertoire, son nom se retrouve dans le chemin du résultat, et la variable d'action doit figurer dans l'en-tête de l'élément de premier niveau - sinon le sous-arbre sera ignoré sans aucun message. niveau - sinon le sous-arbre sera ignoré sans aucun message.Paramètres de l'en-tête du fichier
| paramètre | valeur |
|---|---|
| format= | format du fichier de configuration : kde, samba, openrc, procmail, xml_xfce, json, patch, diff, kernel, dconf, world, contents, sqlite, backgrounds, plasma et autres. Sans lui, le format est raw. Liste et différences → |
| comment= | caractère de commentaire du fichier cible (#, ;, --) ; la valeur spéciale xml/XML active les paires <!-- --> |
| append= | la méthode d'ajout : join, before, after, replace, remove, skip, patch, clear |
| path= | le répertoire où se trouvera le fichier de configuration |
| name= | nom du fichier de configuration (par défaut, le nom du fichier du modèle) |
| link= | le fichier dont est tiré le texte du modèle (le modèle lui-même n'est pas lu) ; avec symbolic, la cible du lien symbolique créé |
| symbolic | créer un lien symbolique vers le fichier de link= |
| mirror | fusionner seulement si le fichier de configuration existe ; s'il est donné par link= et qu'un tel fichier n'existe pas, le fichier de destination est supprimé |
| force | supprimer le fichier existant avant l'écriture (activé automatiquement avec symbolic) |
| protected | ne pas supprimer le fichier lorsque le paquet auquel le modèle est associé est supprimé |
| chmod= | droits d'accès du résultat |
| chown= | propriétaire et groupe ( |
| autoupdate | après la fusion, transférer le fichier de configuration modifié dans le système sans dispatch-conf |
| run= | l'interpréteur qui exécute le résultat immédiatement après le traitement du modèle |
| exec= | identique, mais le script est mis en file d'attente après tous les modèles habituels |
| env= | module de variables (install, desktop, update, …) ; si le module n'est pas disponible, le modèle est omis |
| module= | nom du module de modèles |
| merge= | à la fin, configurer les paquets listés (sys-apps/openrc,sys-boot/grub) |
| postmerge= | identique, mais après pkg_postinst() lors de la compilation du paquet |
| rebuild= | abaisser la version du paquet pour qu'il soit reconstruit lors de la mise à jour du système |
| restart=, start=, stop= | redémarrer/démarrer/arrêter les services séparés par des virgules |
| multiline, dotall | modes des expressions régulières ; lus uniquement par le format patch |
| stretch, convert, dconf | paramètres des formats backgrounds et dconf |
Un paramètre invalide dans l'en-tête est une erreur : l'utilitaire affiche paramètre d'en-tête incorrect : '<name>' et ignore le modèle.
Paramètres de l'en-tête du répertoire
Le répertoire de modèles est décrit par un fichier .calculate_directory qu'il contient. L'ensemble de paramètres est différent et nettement plus court :
append=, path=, name=, link= (copie le contenu du répertoire), chmod=, chown=, mirror, subvolume (créé comme sous-volume btrfs), autoupdate, env=, module=, merge=, postmerge=, rebuild=, restart=, start=, stop=.
Il n'y a ici ni format=, comment=, symbolic, protected, force, run=, exec=, multiline, dotall - ils concernent le fichier.
Pour un répertoire, les valeurs autorisées sont append=join|remove|skip|clear, et link= ne se combine qu'avec append=join ou append=replace.
Un répertoire sans .calculate_directory n'est pas une erreur
.calculate_directory
# Calculate append=skip
Sinon un répertoire superflu apparaîtra dans le système (vous pouvez le vérifier à l'avance par une fusion hors ligne).
Valeurs par défaut qu'il est utile de connaître
Si l'en-tête n'a pas d'append=, il est choisi selon le format :
patchet les formats "exécutables" (diff,dconf,contents,sqlite,backgrounds) →patch; de plus, pour eux append= doit êtrepatch: toute autre valeur sera rejetée par l'utilitaire avec le messageOption incorrecte 'append=<value>' dans le modèle <file>;- tout autre format →
join(les deux fichiers sont fusionnés) ; raw,bin→replace(le fichier est écrit en entier).
Par défaut, name= est pris du nom du fichier du modèle, path= du répertoire parent du modèle ou hérité de .calculate_directory.
Variables et fonctions
La valeur d'une variable est substituée par #-name-#, celle d'un autre module par #-module.name-# :
HOSTNAME="#-os_net_hostname-#" Modes "#-install.os_install_x11_resolution-#"
Les fonctions s'écrivent de la même façon, mais avec des parenthèses d'arguments - elles sont obligatoires même sans argumentsle moteur les distingue à la présence de (). Les fonctions de condition sont souvent nécessaires :
pkg(cat/pkg),merge(cat/pkg),mergepkg(cat/pkg)- à propos d'un paquet installé ou en cours de configuration.mergepkg()signifie "c'est exactement ce paquet qui est configuré" et "le paquet est installé" : la version est prise de la base /var/db/pkg. Si la liste des paquets en cours de configuration est vide,merge()renvoie vrai ;exists(path[,root])- indique si un fichier ou un répertoire existe ; au lieu de1il renvoie le type (f,d,l, …), donc la condition s'écrit habituellementexists(/etc/x)!=;ini(section.key)- lit une variable de la pile ini.env ;grep(file, regular expression)- la première correspondance issue du fichier ;cut(number[separator[string]])- un fragment de chaîne ; par défaut le séparateur est-, et la chaîne est prise de cl_pass_file - le nom du fichier de modèle en cours de traitement (pour un répertoire, son nom). Les champs sont numérotés à partir de zéro :cut(0,-,a-b-c)→a,cut(1,-,a-b-c)→b,cut(2,-,a-b-c)→c; un numéro au-delà de la fin de la chaîne donne une valeur vide, un numéro négatif - une erreur de modèle (cut(-1,-,a-b-c)interrompt le modèle avecErreur dans le gabarit) ;in(variable,values…),groups(groups…),ls(directory,pattern),env(module.variable),case(type,variable),list(variable,index),sum(),push()/pop()(une pile entre les modèles).
Vous pouvez créer et modifier des variables de fonctions à l'intérieur d'un modèle ; leur portée est le modèle courant, et via push()/pop() une valeur est transmise à un autre.
Conditions dans l'en-tête
Les conditions viennent après les paramètres sur la même ligne. Opérateurs : >, <, ==, !=, >=, <=, et pour les versions aussi <> (hors de l'intervalle) et =>, <= (bornes de l'intervalle, données séparées par des virgules).
- plusieurs conditions séparées par une espace sont combinées par "ET" ;
- liens explicites :
&&("ET"),||("OU"), "ET" est prioritaire ; - une partie droite vide (
!=,==) signifie "la valeur n'est pas vide" / "la valeur est vide".
# Calculate cl_ver>=3.5 os_linux_shortname==CLDX||os_linux_shortname==CLD
Cela se lit comme "version ≥ 3.5 et (CLDX ou CLD)".
La partie gauche d'une condition peut être un appel de fonction sans délimiteurs : exists(/etc/f)==, ini(x.y)!=off, checkdev(wan0)!=.
Blocs conditionnels dans le corps
Un bloc de texte est substitué si la condition est vraie. Il commence par #?condition# en début de ligne et se termine par #name_of_the_first_condition_variable# :
#?os_locale_language==ru&&pkg(media-gfx/cldx-themes)!=# current_theme calculate_ru #os_locale_language#
À l'intérieur du bloc, comme partout ailleurs, les substitutions #-…-# sont disponibles ; les variables sont calculées avant les fonctions, donc vous pouvez passer une #-variable-# comme argument d'une fonction.
Modifier, ajouter et supprimer des entrées
La méthode dépend du format, mais l'ensemble de base des préfixes de noms est le suivant :
key=value- définir une valeur (l'ajouter si la clé n'existait pas) ;!key=- supprimer la clé ; fonctionne dans tous les formats de type ini (samba,kde,openrc,procmail,postfix, …) ;+key=value- ajouter une valeur à une liste partagée (samba,ldap) ;-key=valuesignifie formellement "remplacer", mais aucune action ne se cache derrière signifie formellement "remplacer", mais aucune action ne se cache derrière : le code n'attribue pas d'action au préfixe-key=valuesignifie formellement "remplacer", mais aucune action ne se cache derrière signifie formellement "remplacer", mais aucune action ne se cache derrière : le code n'attribue pas d'action au préfixe-, et le comportement se réduit à une écriture ordinaire. Danskde, c'est pire :+//-au niveau de la clé ne sont pas reconnus du tout et restent au niveau de la clé ne sont pas reconnus du tout et restent dans le nom, donc , donc+key=créera un paramètre nommé créera un paramètre nommé+key, qui ne correspondra jamais à , qui ne correspondra jamais àkey. Dans . Danskde, supprimez uniquement avec , supprimez uniquement avec!..+//-au niveau de la clé ne sont pas reconnus du tout et restent au niveau de la clé ne sont pas reconnus du tout et restent dans le nom, donc , donc+key=créera un paramètre nommé créera un paramètre nommé+key, qui ne correspondra jamais à , qui ne correspondra jamais àkey. Dans . Danskde, supprimez uniquement avec , supprimez uniquement avec!..
Au niveau de la section, ! avant un nom de groupe le supprime, - le remplace entièrement.
Voir aussi
- Formats des fichiers de configuration - pourquoi le comportement des préfixes dépend du format.
- Variables de modèles - env=, calculate.env, ini.env,
cl-variable. - Syntaxe sur le site - une version archivée avec une liste de fonctions plus longue.