summaryrefslogtreecommitdiffstats
path: root/doc/admin/software/introduction.rst
blob: 21cead06cd0e9e10449cf63a2a99bafdc5c6d9d9 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
.. _introduction:

Introduction
============
*OpenLMI Software* provider allows to query and manipulate software package
database on remote hosts. They utilize :abbr:`YUM (Yellowdog Updater
Modified)` which is a standard package manager for several *GNU/Linux*
distributions. They provide the subset of its functionality.

*RPM* database, repositories and the package manager itself are modeled with
*CIM* classes according to several *DMTF* profiles described
:ref:`later<dmtf_profiles>`. To make a query on database, install, update a
remove some *RPM* package means to trigger some operation on one or several
*CIM* classes. This page explains the mapping of mentioned objects to
corresponding classes.

.. figure:: pic/software-profile.svg
    :alt: OpenLMI Software class model
    :width: 800px

    This model shows classes representing various objects taking role in
    software management provided by *OpenLMI Software* provider.

Classes with the blue background belong to :ref:`software_inventory_profile`.
Classes painted yellow belong to :ref:`software_update_profile` that builds on
the former one. Classes painted red/pink are extensions not beloning to any
*DMTF* profile.

Mapping of objects to *CIM* classes
-----------------------------------
*RPM* package : :ref:`LMI_SoftwareIdentity<LMI-SoftwareIdentity>`
    Is represented by ``LMI_SoftwareIdentity``. It's identified by a single
    key property called
    :ref:`LMI_SoftwareIdentity.InstanceID<LMI-SoftwareIdentity-InstanceID>`.
    This is a composition of some *CIM* related prefix with package's *NEVRA*
    string. It's the similar string you may see, when listing package with
    ``rpm`` tool: ::

        $ rpm -qa 'openlmi-*' vim-enhanced
        openlmi-python-base-0.3.0_5_gf056906-2.fc21.noarch
        openlmi-providers-0.3.0_5_gf056906-2.fc21.x86_64
        openlmi-indicationmanager-libs-0.3.0_5_gf056906-2.fc21.x86_64
        openlmi-account-0.3.0_5_gf056906-2.fc21.x86_64
        openlmi-service-0.3.0_5_gf056906-2.fc21.x86_64
        vim-enhanced-7.4.027-2.fc20.x86_64
        openlmi-logicalfile-0.3.0_5_gf056906-2.fc21.x86_64
        openlmi-storage-0.6.0-2.fc20.noarch
        openlmi-python-providers-0.3.0_5_gf056906-2.fc21.noarch
        openlmi-providers-debuginfo-0.3.0_5_gf056906-2.fc21.x86_64
        openlmi-software-0.3.0_5_gf056906-2.fc21.noarch

    except for *Epoch* part, which is omitted by ``rpm`` tool but is
    required to be present in ``InstanceID`` by instrumenting provider.
    To get the expected output, the above command needs to be modified: ::

        $ rpm --qf '%{NAME}-%{EPOCH}:%{VERSION}-%{RELEASE}.%{ARCH}\n' -qa 'openlmi-*' | sed 's/(none)/0/'
        openlmi-python-base-0:0.3.0_5_gf056906-2.fc21.noarch
        openlmi-providers-0:0.3.0_5_gf056906-2.fc21.x86_64
        openlmi-indicationmanager-libs-0:0.3.0_5_gf056906-2.fc21.x86_64
        openlmi-account-0:0.3.0_5_gf056906-2.fc21.x86_64
        openlmi-service-0:0.3.0_5_gf056906-2.fc21.x86_64
        vim-enhanced-2:7.4.027-2.fc20.x86_64
        openlmi-logicalfile-0:0.3.0_5_gf056906-2.fc21.x86_64
        openlmi-storage-0:0.6.0-2.fc20.noarch
        openlmi-python-providers-0:0.3.0_5_gf056906-2.fc21.noarch
        openlmi-providers-debuginfo-0:0.3.0_5_gf056906-2.fc21.x86_64
        openlmi-software-0:0.3.0_5_gf056906-2.fc21.noarch

    Some *RPM* packages do not define *Epoch* part, which means its 0 although
    ``rpm`` returns ``(none)``.

    When installing, updating or removing package, we operate upon an
    instance or object path of this class.

    .. seealso::
        :ref:`identifying_software_identity`

Repository : :ref:`LMI_SoftwareIdentityResource<LMI-SoftwareIdentityResource>`
    Is represented by ``LMI_SoftwareIdentityResource``. What distinguishes
    particular repository from others on the same system is a 
    :ref:`LMI_SoftwareIdentityResource.Name<LMI-SoftwareIdentityResource-Name>`
    key property. It's the name of repository written in square brackets in
    repository config. Not the configuration file name, not the ``name``
    option, but a the name of section. See the example of ``OpenLMI Nightly``
    repository: ::

        $ cat /etc/yum.repos.d/openlmi-nightly.repo
        [openlmi-nightly]
        name=OpenLMI Nightly
        baseurl=http://openlmi-rnovacek.rhcloud.com/rpm/rawhide/
        gpgcheck=0
        enabled = 1

    The ``Name`` property of corresponding  *Software Identity Resource* will
    be ``openlmi-nightly``.

Installed file : :ref:`LMI_SoftwareIdentityFileCheck<LMI-SoftwareIdentityFileCheck>`
    Is represented by ``LMI_SoftwareIdentityFileCheck``. Represents a
    verification check of particular file installed by *RPM* package. It contains
    attributes being checked, like:
    
        * ``User ID``, ``Group ID``
        * ``Checksum``
        * ``Link Target``
        * ``File Mode`` and others

    Each is present twice. One property represents the current value of
    installed file and the other the value stored in *RPM* package, that the
    file should have. The later properties have ``Original`` suffix. So for
    example: 
        
        * :ref:`UserID<LMI-SoftwareIdentityFileCheck-UserID>` vs
          :ref:`UserIDOriginal<LMI-SoftwareIdentityFileCheck-UserIDOriginal>` 
        * :ref:`FileChecksum<LMI-SoftwareIdentityFileCheck-FileChecksum>` vs
          :ref:`FileChecksumOriginal<LMI-SoftwareIdentityFileCheck-FileChecksumOriginal>` 

    Mentioned attributes are compared when the package verification is done.
    Single file can also be easily checked. Either by running 
    :ref:`LMI_SoftwareIdentityFileCheck.Invoke()<LMI-SoftwareIdentityFileCheck-Invoke>`
    method on particular object path or by testing the
    :ref:`FailedFlags<LMI-SoftwareIdentityFileCheck-FailedFlags>` property for
    emptiness. If its empty, the file or directory passed the verification test.

*RPM* database : :ref:`LMI_SystemSoftwareCollection<LMI-SystemSoftwareCollection>`
    Is represented by ``LMI_SystemSoftwareCollection``. Administrator probably
    won't be interested in this class. The
    :ref:`LMI_MemberOfSoftwareCollection<LMI-MemberOfSoftwareCollection>`
    association class associates this collection with available and installed
    *Software Identities*. It can not be enumerated --- due to the same reason
    as in case of :ref:`LMI_SoftwareIdentity<LMI-SoftwareIdentity>` (see the
    explanation in :ref:`package_searching`).

*YUM* package manager : :ref:`LMI_SoftwareInstallationService<LMI-SoftwareInstallationService>`
    Is represented by ``LMI_SoftwareInstallationService``. Allows to query the
    database, install, update, verify and remove *RPM* packages. All of this can
    be achieved by invocations of its methods:

        :ref:`FindIdentity()<LMI-SoftwareInstallationService-FindIdentity>`
            Allows to query the database for matching packages.

        :ref:`InstallFromSoftwareIdentity()<LMI-SoftwareInstallationService-InstallFromSoftwareIdentity>`
            Allows to install, update or remove *RPM* package represented by an
            instance of *Software Identity*.

        :ref:`InstallFromURI()<LMI-SoftwareInstallationService-InstallFromURI>`
            Allows to install or update *RPM* package located with particular
            URI string.

        :ref:`VerifyInstalledIdentity()<LMI-SoftwareInstallationService-VerifyInstalledIdentity>`.
            Runs a verification check on given *Software Identity*.

    .. seealso::
        Examples on using above methods:

            * :ref:`package_installation`
            * :ref:`package_update`
            * :ref:`package_removal`
            * :ref:`package_verification`