Si un fichier manifest n'est pas validé, comme cela peut être le cas après sa modification, exécutez l'utilitaire ManifestServ dans un mode détaillé pour trouver l'erreur.
L'utilitaire ManifestServ, /usr/bin/ManifestServ, sans aucun argument affiche l'usage suivant :
ManifestServ Usage: /bin/ManifestServ [-d] [-h|-?] [-s] [-t] [-v] [-f <validation_file_base> ] [-o <out_manifest.xml file> ] <manifest.xml file> where: -d: turn on socket debug output (valid when -s also specified) -f <validation_file_base>: give basename for schema and defval files Defaults to basename of manifest (name less .xml suffix) when not provided -h or -?: print this message -o <out_manifest.xml file>: write resulting XML after defaults and validation processing -t: save temporary file Temp file is "/tmp/<manifest_basename>_temp_<pid> -v: verbose defaults/validation output -s: start socket server for use by ManifestRead |
Le constructeur de distribution valide le fichier manifest par rapport à un schéma XML et un fichier manifest par défaut. ManifestServ vous permet d'effectuer une validation manuelle, en utilisant un mode détaillé qui affiche l'emplacement des problèmes.
L'exemple suivant présente un cas dans lequel le fichier manifest n'est pas validé par rapport au schéma. Le message en gras ci-après indique une erreur de validation du schéma.
# distro_const build my_distro.xml /usr/share/distro_const/DC-manifest.defval.xml validates /tmp/all_lang_slim_cd_x86_temp_7861.xml:350: element pair: Relax-NG validity error : Element pair failed to validate attributes /tmp/my_distro_temp_7861.xml fails to validate validate_vs_schema: Validator terminated with status 3 validate_vs_schema: Validator terminated abnormally Error validating manifest against schema /usr/share/distro_const/DC-manifest.rng # |
Exécutez ManifestServ, /usr/bin/ManifestServ en spécifiant l'option -t afin d'enregistrer le fichier temporaire, et l'option -v pour obtenir une sortie détaillée contenant le numéro de ligne de l'erreur.
# ManifestServ -f /usr/share/distro_const/DC-manifest -t -v manifest_file |
ManifestServ -f /usr/share/distro_const/DC-manifest -t -v my_distro.xml /usr/share/distro_const/DC-manifest.defval.xml validates Checking defaults for name Checking defaults for distro_constr_params/distro_constr_flags/stop_on_error Checking defaults for distro_constr_params/pkg_repo_default_authority/main/url ... ... (omitted content) ... ... /tmp/my_distro_temp_7870.xml:350: element pair: Relax-NG validity error : Element pair failed to validate attributes /tmp/all_lang_slim_cd_x86_temp_7870.xml fails to validate validate_vs_schema: Validator terminated with status 3 validate_vs_schema: Validator terminated abnormally Error validating manifest against schema /usr/share/distro_const/DC-manifest.rng Error running Manifest Server schema_validate: Schema validation failed for DC manifest /tmp/my_distro_temp_7870.xml |
Le fichier temporaire sera nommé vers la fin de la sortie. Dans l'exemple ci-dessus, le fichier est /tmp/my_distro_temp_7870.xml. Selon les messages d'erreur en gras, ouvrez ce fichier et recherchez le problème à la ligne 350. Dans cet exemple, la ligne 350 ressemble à ceci :
<key_value_pairs> <pair value='/usr/share/distro_const/slim_cd/slimcd_iso.sort' key='iso_sort'/> <pair VaLuE='myvalue' key='mykey'/> </key_value_pairs> |
L'attribut VaLuE est incorrect. Dans cet exemple artificiel, value devrait être en minuscules, comme dans la ligne juste au-dessus. Les messages de la deuxième à la dernière ligne indiquent que la validation du schéma a échoué. Le schéma utilisé pour la validation du constructeur de distribution est /usr/share/distro_const/DC-manifest.xml. Le schéma indique que les seuls attributs pour <pair> sont <value> et <key>, pas <VaLuE>.
Une validation sémantique est également réalisée. La validation sémantique contrôle le contenu à la recherche d'erreurs de "signification" et de contexte, et ne contrôle pas uniquement la syntaxe. Par exemple, les scripts de finalisation répertoriés dans un fichier manifest peuvent être validés pour confirmer qu'ils sont des fichiers exécutables.
L'exemple suivant illustre un cas où le fichier manifest ne passe pas la validation sémantique.
# distro_const build -l my_distro_sem.xml /usr/share/distro_const/DC-manifest.defval.xml validates /usr/share/distro_const/grub_setup.py either doesn't exist or is not an executable file validate_node: Content "/usr/share/distro_const/grub_setup.py" at img_params/output_image/finalizer/script/name did not validate Error validating manifest tree content |
La validation sémantique utilise des fonctions afin de mener à bien la validation. Ces fonctions impriment des messages d'erreur expliquant pourquoi le fichier manifest a échoué à la validation. Dans ce cas, le fichier /usr/share/distro_const/grub_setup.py est absent et le message d'erreur indique directement ce problème. Dans ce cas, grub_setup.py doit être restauré, ou, le cas échéant, la référence à ce fichier doit être supprimée du fichier manifest.
Vous pouvez toujours exécuter ManifestServ avec l'option -v pour obtenir plus de détails sur la validation sémantique. Toutefois, si elle est spécifiée, l'option de commande -v indiquera simplement l'échec parmi de nombreuses réussites, ce qui peut donner une sortie plus difficile à lire.
Une fois la validation et d'autres traitements préalables terminés, ManifestServ demande les données à vider et vérifier. Cette étape est plus utile pour tester le processus utilisant les données que les données elles-mêmes, dans la mesure où les données sont parfaitement visibles dans le fichier manifest même.