JavaScript is required to for searching.
Ignorer les liens de navigation
Quitter l'aperu
Pages de manuel d'Image Packaging System     Oracle Solaris 11 Information Library (Français)
search filter icon
search icon

Informations document

Préface

Commandes utilisateur

packagemanager(1)

pkg(1)

pkgdepend(1)

pkgdiff(1)

pkgfmt(1)

pkglint(1)

pkgmerge(1)

pkgmogrify(1)

pkgrecv(1)

pkgrepo(1)

pkgsend(1)

pkgsign(1)

pm-updatemanager(1)

Commandes d'administration système

Normes, environnements et macros

pkgmogrify

- Transmogrifeur de manifeste Image Packaging System

Synopsis

/usr/bin/pkgmogrify [-vi] [-I includedir ...]
    [-D macro=value ...] [-O outputfile]
    [-P printfile] [inputfile ...]

Description

Lors de l'édition de manifestes de package, pkgmogrify simplifie les transformations normales nécessaires à l'automatisation de la génération de logiciel et de la publication de package.

pkgmogrify fournit les éléments suivants :

Options

Les options suivantes sont prises en charge :

-D name= value

Définit name comme une macro, avec la valeur value. Les macros s'affichent dans le fichier d'entrée au format $(macro). La substitution est répétée jusqu'à ce qu'il n'y ait plus de traductions trouvées. Voici des idiomes courants :

  • Elimination de lignes d'un manifeste sur d'autres architectures à l'aide d'une balise spécifique à une architecture au début de la ligne :

    $(sparc_ONLY)file ...

    Lors du traitement de l'architecture SPARC, cette macro est une chaîne vide. Lors du traitement d'autres architectures, cette macro doit être définie sur # sur la ligne de commande, ce qui élimine cette action dans le manifeste sur l'architecture actuelle.

  • Indication spécifique à la plate-forme des parties des noms de chemins, telles que le nom du répertoire de l'architecture 64 bits pour des exécutables et des bibliothèques :

    file NOHASH path=usr/bin/$(ARCH64)/cputrack ...

    Ces macros doivent être définies sur la valeur souhaitée dans la ligne de commande. Il n'y a aucune valeur de macro prédéfinie.

-I include_directory

Ajoute le répertoire spécifié au chemin de recherche pour les deux fichiers spécifiés sur la ligne de commande et les directives include intégrées.

-O outputfile

Ecrit la sortie de manifeste dans le fichier spécifié. Le fichier n'est pas écrit si une erreur se produit ou si une directive de transformation entraîne une opération d'abandon. Par défaut, la sortie de manifeste est écrite dans stdout.

-P printfile

Consigne les messages de sortie résultant des opérations d'impression de directive de transformation dans le fichier spécifié. Le fichier n'est pas écrit si une erreur se produit ou si une directive de transformation entraîne une opération d'abandon. Par défaut, la sortie d'impression est écrite dans stdout.

-i

Ignore les directives include dans les fichiers. Seuls les fichiers spécifiés sur la ligne de commande (ou stdin) sont traités.

-v

Rédige des commentaires dans le manifeste de sortie montrant l'effet des transformations. Ces informations sont utiles à des fins de débogage.

--help ou -?

Affiche un message d'utilisation.

Directives intégrées

Deux types de directives sont pris en charge dans les fichiers manifestes : les directives include et les directives transform.

Les directives include se présentent sous la forme suivante :

<include file>

Cette directive pousse pkgmogrify à rechercher un fichier nommé file tout d'abord dans le répertoire en cours, puis dans les répertoires indiqués avec l'option -I. Si le fichier est trouvé, le contenu du fichier est inséré dans le manifeste à l'endroit où la directive est détectée. S'il n'est pas trouvé, pkgmogrify s'arrête et un message d'erreur s'affiche.

Les directives transform se présentent sous la forme suivante :

<transform matching-criteria -> operation>

Ces directives sont cumulées jusqu'à ce que toutes les entrées soient lues en mémoire, puis appliquées aux actions dans l'ordre dans lequel elles ont été détectées.

Les critères de correspondance se présentent sous la forme suivante :

[action-type ... ] [attribute=<value-regexp> ...]

Un des types d'action spécifié doit correspondre. Tous les attributs spécifiés doivent correspondre. La syntaxe d'expression régulière utilisée est celle de Python. Pour plus d'informations sur la syntaxe d'expression régulière Python, utilisez la commande pydoc re ou reportez-vous à une documentation complète à l'adresse suivante : http://docs.python.org/dev/howto/regex.html. L'expression régulière est ancrée au début, mais pas à la fin. Par conséquent, une expression régulière correspondant à des fichiers par leur extension doit inclure .* au début et $ à la fin.

Plusieurs critères peuvent être spécifiés en les séparant par des espaces.

Les opérations suivantes sont disponibles :

add

Ajoute une valeur à un attribut. Cette opération prend deux arguments. Le premier argument est le nom de l'attribut et le second est la valeur.

default

Définit la valeur d'un attribut s'il n'existe pas encore. Cette opération prend les deux mêmes arguments que l'opération add.

delete

Supprime des valeurs d'attribut. Cette opération prend deux arguments. Le premier argument est le nom de l'attribut. Le second argument est une expression régulière correspondant aux valeurs d'attribut supprimées. Contrairement à l'expression régulière utilisée pour correspondre à une action, cette expression n'est pas ancrée.

drop

Annule cette action.

edit

Modifie un attribut de l'action. Cette opération prend trois arguments. Le premier argument est le nom de l'attribut et le deuxième est une expression régulière correspondant à la valeur de l'attribut. Le troisième argument est la chaîne de remplacement qui se substitue à la partie de la valeur correspondant à l'expression régulière. Contrairement à l'expression régulière utilisée pour correspondre à une action, cette expression n'est pas ancrée. Des références arrière d'expressions régulières normales, sous la forme \1, \2, et ainsi de suite, sont disponibles dans la chaîne de remplacement si des groupes sont définis dans l'expression régulière.

emit

Emet une ligne dans le flux de sortie du manifeste. Il doit s'agir d'une chaîne d'action valide, vide (ce qui se traduit par une ligne vierge) ou un commentaire (un # suivi d'un texte arbitraire).

exit

Arrête le traitement du manifeste. Aucun manifeste n'est produit et aucune opération print n'est appliquée. Si l'un des arguments est fourni, il doit s'agir d'un entier, et est utilisé en tant que code de sortie. La valeur par défaut est 0. Si deux arguments sont fournis, le premier est le code de sortie et le second est un message à imprimer dans stderr.

print

Imprime un message dans le fichier de sortie spécifié avec -P.

set

Définit la valeur d'un attribut. Cette opération prend les deux mêmes arguments que l'opération add.

Toutes les opérations, à l'exception de delete et drop prennent des arguments, pouvant être facultatifs, dont le contenu va dans le flux de sortie. Ces chaînes peuvent contenir trois types différents de jetons spéciaux qui permettent à la sortie de contenir des informations qui ne sont pas basées sur une transformation fixe de chaque action.

Le premier type de substitution permet à l'opération de faire référence aux valeurs d'attributs de l'action en cours en plaçant le nom de l'attribut à l'intérieur des parenthèses suivant un signe de pourcentage. Par exemple, %(alias) fait référence à la valeur de l'action de l'attribut alias.

Il existent plusieurs attributs synthétiques. Deux sont uniques à pkgmogrify :

Trois attributs synthétiques sont similaires à ceux utilisés dans pkg(1) :

Si l'attribut dont la valeur est demandée n'existe pas, pkgmogrify s'arrête et un message d'erreur s'affiche. Pour empêcher que sortie avec erreur, faites suivre le nom de l'attribut par ;notfound= et une valeur de remplacement à la place de la valeur de l'attribut. Par exemple, %(alias;notfound='no alias') imprime la valeur de l'attribut alias si elle existe, et imprime no alias dans le cas contraire.

Si l'attribut dont la valeur est demandée est multivalué, chaque valeur est imprimée, séparée par des espaces. Tout comme le jeton notfound, les jetons prefix, suffix et sep peuvent être utilisés pour modifier ce comportement. La chaîne indiquée par prefix est ajoutée au début de chaque valeur, la chaîne indiquée par suffix est ajoutée à chaque valeur, et sep est placé entre le suffixe d'une valeur et le préfixe de la suivante.

Tout comme les attributs d'action, les directives pkgmogrify peuvent référencer des attributs de package à l'aide d'accolades au lieu de parenthèses : %{pkg.fmri}. A l'endroit où la directive transform est appliquée, l'attribut doit avoir été défini dans une action set ou il est considéré comme notfound, comme décrit plus haut. Lorsque le traitement a atteint la fin du fichier manifeste décrivant le package, les attributs sont effacés pour le package suivant.

Cela est utile non seulement pour référencer les attributs de package comme s'ils étaient des attributs d'action, mais également pour faire les correspondre, et même temporairement les modifier. C'est pour cela qu'un nom d'action synthétique, pkg, est disponible (uniquement dans le contexte de pkgmogrify) à l'utilisation dans ces situations.

Quand pkgmogrify a terminé la lecture d'un manifeste spécifié sur la ligne de commande et que ce manifeste a défini un attribut de package pkg.fmri, pkgmogrify crée cette action pkg synthétique, dont les attributs sont les attributs du package. Une directive <transform> peut ensuite correspondre sur cette action, tout comme n'importe quel autre type d'action.

Les opérations effectuées sur une action pkg sont spéciales car elles ont lieu uniquement dans la mémoire et n'affectent pas directement le manifeste émis. Par exemple, essayer de définir un attribut sur une action pkg par l'intermédiaire des opérations add, default ou set opérations n'entraîne pas l'ajout d'une action set au manifeste, bien qu'elle soit disponible pour d'autres directives <transform> auxquelles correspondre. Toute tentative d'opération emit sur une action pkg provoque une erreur. Pour ajouter un attribut de package, utilisez plutôt emit sur une action set.

Le troisième type de substitution est une référence arrière. Cette substitution n'est pas comme celles utilisables dans les opérations edit, mais est une référence à des groupes répertoriés dans la correspondance de transformation dans la partie de gauche de la ->. Ceux-ci sont indiqués par %<1>, %<2>, et ainsi de suite, dans l'ordre indiqué dans la zone de critères de correspondance.

L'ordre de traitement est le suivant :

  1. Les lignes sont lues à partir des fichiers d'entrée.

  2. Les macros sont appliquées.

  3. Les directives <include ...> et <transform> sont traitées, ce qui entraîne la découverte et la lecture de fichiers supplémentaires.

  4. Une fois que toutes les entrées ont été accumulées, chaque ligne dans l'entrée est convertie en actions et toutes les transformations sont appliquées.

  5. Une fois le traitement terminé et réussi, la sortie est écrite.

Exemples

Exemple 1 Ajout de balises aux manifestes SMF

Ajoutez des balises aux manifestes SMF afin qu'ils soient importés lorsque le package est installé sur un système actif.

<transform file path=(var|lib)/svc/manifest/.*\.xml -> \
    add restart_fmri svc:/system/manifest-import:default>

Exemple 2 Déplacement de fichiers

Déplacez des fichiers de usr/sfw/bin vers usr/bin.

<transform file -> edit path usr/sfw/bin usr/bin>

Exemple 3 Spécification d'une initialisation nécessaire

Ajoutez les balises reboot-needed aux fichiers sous /kernel qui ne sont pas des fichiers .conf. Notez que cet exemple s'appuie sur l'application des transformations à chaque action dans l'ordre indiqué dans les fichiers d'entrée.

<transform file path=kernel/.* -> set reboot-needed true>
<transform file path=kernel/.*\.conf -> delete reboot-needed .*>

Il est également possible de le faire avec une unique règle de transformation avec des expressions régulières.

Exemple 4 Conversion d'attribut FMRI en action depend

Convertissez l'attribut de package pkg.fmri en action depend pour faire partie d'une incorporation.

<transform set name=pkg.fmri -> \
    emit depend type=incorporate fmri=%(value)>
<transform set name=pkg.fmri -> drop>

Exemple 5 Impression d'une liste de numéros de bogue

Imprimez une liste séparée par des virgules de numéros de bogue cités et préfixés.

set name=bugs value=12345 value=54321 value=13579 value=97531
<transform set name=bugs -> \
    print %(value;sep=",";prefix="bug='";suffix="'")>

Exemple 6 Autorisation d'attributs manquants

Imprimez un message en toute sécurité même lorsqu'un attribut est manquant.

<transform driver -> print Found aliases: %(alias;notfound=<none>)>

Exemple 7 Définition de valeurs par défaut

Définissez les valeurs par défaut de propriétaire, de groupe et d'autorisation.

<transform file dir -> default owner root>
<transform file dir -> default group bin>
<transform file -> default mode 0444>
<transform dir -> default mode 0755>

Exemple 8 Ajout de dépendances à des packages qui ne sont pas marqués comme obsolètes

Pour n'importe quel package qui n'est pas marqué comme obsolète, ajoutez une dépendance sur l'incorporation pour la consolidation qui fournit le package. Cet ensemble de transformations doit se produire après la lecture du manifeste ou la dépendance sera toujours émise. Etant donné que la modification d'une action pkg n'a aucun effet permanent, il n'est pas nécessaire de nettoyer les attributs correspondant à pkg.obsolete=false.

<transform pkg -> default pkg.obsolete false>
<transform pkg pkg.obsolete=false -> emit depend \
    fmri=consolidation/$(CONS)/$(CONS)-incorporation type=require>

Exemple 9 Sortie et impression d'un message lorsqu'une erreur est détectée

Sortie en erreur avec un message lorsqu'un attribut obsolète est découvert dans un manifeste.

<transform file dir link hardlink opensolaris.zone=.* -> \
    exit 1 The opensolaris.zone attribute is obsolete.>

Exemple 10 Définition de la facette de paramètres régionaux appropriée

Définissez la facette de paramètres régionaux appropriée pour le nom de chemin considéré.

<transform dir file link hardlink path=.*/locale/([^/]+).* -> \
    default facet.locale.%<1> true>

État de sortie

Les valeurs de sortie renvoyées sont les suivantes :

0

Tout a fonctionné.

1

Quelque chose de mauvais mais prévu s'est passé.

2

Des options de ligne de commande incorrectes ont été spécifiées.

99

Erreur de traitement inattendue.

Fichiers

/usr/share/pkg/transforms

Ce répertoire contient des fichiers avec des transformations utiles pour définir des facettes, des actionneurs et autres attributs.

Attributs

Reportez-vous à attributes(5) pour obtenir la description des attributs suivants :

TYPE D'ATTRIBUT
VALEUR DE L'ATTRIBUT
Disponibilité
package/pkg
Stabilité de l'interface
Non validé

Voir aussi

pkg(1), pkg(5)

http://hub.opensolaris.org/bin/view/Project+pkg/