src/modules/client/image.py
author Shawn Walker <shawn.walker@oracle.com>
Thu, 12 May 2011 19:11:16 -0700
changeset 2352 3c17f86cd994
parent 2350 34b168914d24
child 2355 9c0b9f996197
permissions -rw-r--r--
18105 api should support multiple repositories (origins) with different package data 18107 pkg search returns no results and fails if a publisher with no origins is present
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
1516
8c950a3b4171 10485 move pkg(5) to Python 2.6
Rich Burridge <rich.burridge@sun.com>
parents: 1507
diff changeset
     1
#!/usr/bin/python
19
c5d16aa074bf begin comments on Image object
"Stephen Hahn <sch@sun.com>"
parents:
diff changeset
     2
#
c5d16aa074bf begin comments on Image object
"Stephen Hahn <sch@sun.com>"
parents:
diff changeset
     3
# CDDL HEADER START
c5d16aa074bf begin comments on Image object
"Stephen Hahn <sch@sun.com>"
parents:
diff changeset
     4
#
c5d16aa074bf begin comments on Image object
"Stephen Hahn <sch@sun.com>"
parents:
diff changeset
     5
# The contents of this file are subject to the terms of the
c5d16aa074bf begin comments on Image object
"Stephen Hahn <sch@sun.com>"
parents:
diff changeset
     6
# Common Development and Distribution License (the "License").
c5d16aa074bf begin comments on Image object
"Stephen Hahn <sch@sun.com>"
parents:
diff changeset
     7
# You may not use this file except in compliance with the License.
c5d16aa074bf begin comments on Image object
"Stephen Hahn <sch@sun.com>"
parents:
diff changeset
     8
#
c5d16aa074bf begin comments on Image object
"Stephen Hahn <sch@sun.com>"
parents:
diff changeset
     9
# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
c5d16aa074bf begin comments on Image object
"Stephen Hahn <sch@sun.com>"
parents:
diff changeset
    10
# or http://www.opensolaris.org/os/licensing.
c5d16aa074bf begin comments on Image object
"Stephen Hahn <sch@sun.com>"
parents:
diff changeset
    11
# See the License for the specific language governing permissions
c5d16aa074bf begin comments on Image object
"Stephen Hahn <sch@sun.com>"
parents:
diff changeset
    12
# and limitations under the License.
c5d16aa074bf begin comments on Image object
"Stephen Hahn <sch@sun.com>"
parents:
diff changeset
    13
#
c5d16aa074bf begin comments on Image object
"Stephen Hahn <sch@sun.com>"
parents:
diff changeset
    14
# When distributing Covered Code, include this CDDL HEADER in each
c5d16aa074bf begin comments on Image object
"Stephen Hahn <sch@sun.com>"
parents:
diff changeset
    15
# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
c5d16aa074bf begin comments on Image object
"Stephen Hahn <sch@sun.com>"
parents:
diff changeset
    16
# If applicable, add the following below this CDDL HEADER, with the
c5d16aa074bf begin comments on Image object
"Stephen Hahn <sch@sun.com>"
parents:
diff changeset
    17
# fields enclosed by brackets "[]" replaced with your own identifying
c5d16aa074bf begin comments on Image object
"Stephen Hahn <sch@sun.com>"
parents:
diff changeset
    18
# information: Portions Copyright [yyyy] [name of copyright owner]
c5d16aa074bf begin comments on Image object
"Stephen Hahn <sch@sun.com>"
parents:
diff changeset
    19
#
c5d16aa074bf begin comments on Image object
"Stephen Hahn <sch@sun.com>"
parents:
diff changeset
    20
# CDDL HEADER END
c5d16aa074bf begin comments on Image object
"Stephen Hahn <sch@sun.com>"
parents:
diff changeset
    21
#
c5d16aa074bf begin comments on Image object
"Stephen Hahn <sch@sun.com>"
parents:
diff changeset
    22
926
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 922
diff changeset
    23
#
2183
21ae45e8dfcf 17581 There should be a way of removing a package as part of upgrade
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2178
diff changeset
    24
# Copyright (c) 2007, 2011, Oracle and/or its affiliates. All rights reserved.
926
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 922
diff changeset
    25
#
19
c5d16aa074bf begin comments on Image object
"Stephen Hahn <sch@sun.com>"
parents:
diff changeset
    26
2339
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2335
diff changeset
    27
import M2Crypto as m2
1771
0965309e1d22 14654 temporary download directory is created regardless of use and never removed
Danek Duvall <danek.duvall@sun.com>
parents: 1755
diff changeset
    28
import atexit
2219
60ad60f7592c 2152 standalone package support needed (on-disk format)
Shawn Walker <shawn.walker@oracle.com>
parents: 2205
diff changeset
    29
import copy
1549
cc81f5023603 13110 image catalog rebuild could be faster
Shawn Walker <srw@sun.com>
parents: 1538
diff changeset
    30
import datetime
161
e0322fe7842c Simplify and correct the package matching code.
Danek Duvall <danek.duvall@sun.com>
parents: 157
diff changeset
    31
import errno
26
ab188d4682d5 catalog processing begins
"Stephen Hahn <sch@sun.com>"
parents: 22
diff changeset
    32
import os
838
aafbe4737188 3245 need to support creation of multi-architecture (fat) packages
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 835
diff changeset
    33
import platform
aafbe4737188 3245 need to support creation of multi-architecture (fat) packages
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 835
diff changeset
    34
import shutil
2339
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2335
diff changeset
    35
import simplejson as json
1859
6e6e866921e7 529 client can traceback with EBUSY during action removal
Shawn Walker <shawn.walker@oracle.com>
parents: 1842
diff changeset
    36
import stat
838
aafbe4737188 3245 need to support creation of multi-architecture (fat) packages
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 835
diff changeset
    37
import tempfile
aafbe4737188 3245 need to support creation of multi-architecture (fat) packages
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 835
diff changeset
    38
import time
45
8a3f00dea14f catalog refresh; basic catalog listing; precise manifest pulls
Stephen Hahn <sch@sun.com>
parents: 39
diff changeset
    39
import urllib
479
de75c17238ff 2951 Client should check if its SSL certificates have expired
johansen <johansen@sun.com>
parents: 462
diff changeset
    40
1710
139720e2e756 1668 image locking needed to prevent race conditions
Shawn Walker <srw@sun.com>
parents: 1688
diff changeset
    41
from contextlib import contextmanager
1431
62b6033670e4 10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents: 1402
diff changeset
    42
from pkg.client import global_settings
62b6033670e4 10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents: 1402
diff changeset
    43
logger = global_settings.logger
62b6033670e4 10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents: 1402
diff changeset
    44
1755
8e1ed1373f93 9123 client traceback during install for bad file mode
Shawn Walker <srw@sun.com>
parents: 1736
diff changeset
    45
import pkg.actions
1352
5c92c9d342ef 11065 client v1 catalog support for v0 catalogs
Shawn Walker <srw@sun.com>
parents: 1328
diff changeset
    46
import pkg.catalog
2073
9fcacc9e5eaa 16998 transport should support publisher-specific write and read caches
Shawn Walker <shawn.walker@oracle.com>
parents: 2069
diff changeset
    47
import pkg.client.api_errors            as apx
2135
6eeb55920e13 3419 history command -- ability to specify dates or date ranges desired
Tim Foster <tim.s.foster@oracle.com>
parents: 2105
diff changeset
    48
import pkg.client.bootenv               as bootenv
1191
a48bee2a4b2e 305 http_proxy value needs more checking for valid url syntax
johansen <johansen@sun.com>
parents: 1158
diff changeset
    49
import pkg.client.history               as history
a48bee2a4b2e 305 http_proxy value needs more checking for valid url syntax
johansen <johansen@sun.com>
parents: 1158
diff changeset
    50
import pkg.client.imageconfig           as imageconfig
a48bee2a4b2e 305 http_proxy value needs more checking for valid url syntax
johansen <johansen@sun.com>
parents: 1158
diff changeset
    51
import pkg.client.imageplan             as imageplan
2339
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2335
diff changeset
    52
import pkg.client.linkedimage           as li
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2335
diff changeset
    53
import pkg.client.pkgdefs               as pkgdefs
1191
a48bee2a4b2e 305 http_proxy value needs more checking for valid url syntax
johansen <johansen@sun.com>
parents: 1158
diff changeset
    54
import pkg.client.pkgplan               as pkgplan
a48bee2a4b2e 305 http_proxy value needs more checking for valid url syntax
johansen <johansen@sun.com>
parents: 1158
diff changeset
    55
import pkg.client.progress              as progress
a48bee2a4b2e 305 http_proxy value needs more checking for valid url syntax
johansen <johansen@sun.com>
parents: 1158
diff changeset
    56
import pkg.client.publisher             as publisher
2026
d1b30615bc99 9196 pkg(5) should have support for cryptographic manifest signatures
Brock Pytlik <bpytlik@sun.com>
parents: 2003
diff changeset
    57
import pkg.client.sigpolicy             as sigpolicy
1977
1e2b423ee045 16565 transport module init exposes latent bug in packagemanager
johansen <johansen@opensolaris.org>
parents: 1974
diff changeset
    58
import pkg.client.transport.transport   as transport
2097
068cc63b4d6e 17055 image configuration should use pkg.config classes
Shawn Walker <shawn.walker@oracle.com>
parents: 2092
diff changeset
    59
import pkg.config                       as cfg
307
3a857fd8b787 787 optional dependencies are required
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 302
diff changeset
    60
import pkg.fmri
2043
852501e586d0 14615 image-update claims failure for un-aquired lock and still succeeds
johansen <johansen@opensolaris.org>
parents: 2035
diff changeset
    61
import pkg.lockfile                     as lockfile
1191
a48bee2a4b2e 305 http_proxy value needs more checking for valid url syntax
johansen <johansen@sun.com>
parents: 1158
diff changeset
    62
import pkg.manifest                     as manifest
a48bee2a4b2e 305 http_proxy value needs more checking for valid url syntax
johansen <johansen@sun.com>
parents: 1158
diff changeset
    63
import pkg.misc                         as misc
2028
b2c674e6ee28 16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents: 2026
diff changeset
    64
import pkg.nrlock
2339
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2335
diff changeset
    65
import pkg.pkgsubprocess                as subprocess
1191
a48bee2a4b2e 305 http_proxy value needs more checking for valid url syntax
johansen <johansen@sun.com>
parents: 1158
diff changeset
    66
import pkg.portable                     as portable
1352
5c92c9d342ef 11065 client v1 catalog support for v0 catalogs
Shawn Walker <srw@sun.com>
parents: 1328
diff changeset
    67
import pkg.server.catalog
2310
ce10607d5332 11684 desire option to not propagate certs to non-global zones
Brock Pytlik <brock.pytlik@oracle.com>
parents: 2293
diff changeset
    68
import pkg.smf                          as smf
539
7486304966c5 1449 pkg requires operational history
Shawn Walker <shawn.walker@sun.com>
parents: 537
diff changeset
    69
import pkg.version
104
ecfc64baf22e add naive configuration, naive global/preferred authorities, delete content
Stephen Hahn <sch@sun.com>
parents: 87
diff changeset
    70
1328
5c3747a4fe0a 9387 pkg fix should honor reboot-needed flag
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1288
diff changeset
    71
from pkg.client.debugvalues import DebugValues
926
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 922
diff changeset
    72
from pkg.client.imagetypes import IMG_USER, IMG_ENTIRE
2097
068cc63b4d6e 17055 image configuration should use pkg.config classes
Shawn Walker <shawn.walker@oracle.com>
parents: 2092
diff changeset
    73
from pkg.misc import EmptyI, EmptyDict
19
c5d16aa074bf begin comments on Image object
"Stephen Hahn <sch@sun.com>"
parents:
diff changeset
    74
26
ab188d4682d5 catalog processing begins
"Stephen Hahn <sch@sun.com>"
parents: 22
diff changeset
    75
img_user_prefix = ".org.opensolaris,pkg"
30
f06ad6cb4b3f stop using flavour terminology
Stephen Hahn <sch@sun.com>
parents: 29
diff changeset
    76
img_root_prefix = "var/pkg"
26
ab188d4682d5 catalog processing begins
"Stephen Hahn <sch@sun.com>"
parents: 22
diff changeset
    77
1352
5c92c9d342ef 11065 client v1 catalog support for v0 catalogs
Shawn Walker <srw@sun.com>
parents: 1328
diff changeset
    78
IMG_PUB_DIR = "publisher"
419
a38f1ed7cf76 1867 'pkg list' takes *WAY* too long
Danek Duvall <danek.duvall@sun.com>
parents: 418
diff changeset
    79
19
c5d16aa074bf begin comments on Image object
"Stephen Hahn <sch@sun.com>"
parents:
diff changeset
    80
class Image(object):
c5d16aa074bf begin comments on Image object
"Stephen Hahn <sch@sun.com>"
parents:
diff changeset
    81
        """An Image object is a directory tree containing the laid-down contents
c5d16aa074bf begin comments on Image object
"Stephen Hahn <sch@sun.com>"
parents:
diff changeset
    82
        of a self-consistent graph of Packages.
c5d16aa074bf begin comments on Image object
"Stephen Hahn <sch@sun.com>"
parents:
diff changeset
    83
c5d16aa074bf begin comments on Image object
"Stephen Hahn <sch@sun.com>"
parents:
diff changeset
    84
        An Image has a root path.
c5d16aa074bf begin comments on Image object
"Stephen Hahn <sch@sun.com>"
parents:
diff changeset
    85
c5d16aa074bf begin comments on Image object
"Stephen Hahn <sch@sun.com>"
parents:
diff changeset
    86
        An Image of type IMG_ENTIRE does not have a parent Image.  Other Image
c5d16aa074bf begin comments on Image object
"Stephen Hahn <sch@sun.com>"
parents:
diff changeset
    87
        types must have a parent Image.  The external state of the parent Image
c5d16aa074bf begin comments on Image object
"Stephen Hahn <sch@sun.com>"
parents:
diff changeset
    88
        must be accessible from the Image's context, or duplicated within the
c5d16aa074bf begin comments on Image object
"Stephen Hahn <sch@sun.com>"
parents:
diff changeset
    89
        Image (IMG_PARTIAL for zones, for instance).
c5d16aa074bf begin comments on Image object
"Stephen Hahn <sch@sun.com>"
parents:
diff changeset
    90
c5d16aa074bf begin comments on Image object
"Stephen Hahn <sch@sun.com>"
parents:
diff changeset
    91
        The parent of a user Image can be a partial Image.  The parent of a
c5d16aa074bf begin comments on Image object
"Stephen Hahn <sch@sun.com>"
parents:
diff changeset
    92
        partial Image must be an entire Image.
c5d16aa074bf begin comments on Image object
"Stephen Hahn <sch@sun.com>"
parents:
diff changeset
    93
c5d16aa074bf begin comments on Image object
"Stephen Hahn <sch@sun.com>"
parents:
diff changeset
    94
        An Image of type IMG_USER stores its external state at self.root +
26
ab188d4682d5 catalog processing begins
"Stephen Hahn <sch@sun.com>"
parents: 22
diff changeset
    95
        ".org.opensolaris,pkg".
19
c5d16aa074bf begin comments on Image object
"Stephen Hahn <sch@sun.com>"
parents:
diff changeset
    96
c5d16aa074bf begin comments on Image object
"Stephen Hahn <sch@sun.com>"
parents:
diff changeset
    97
        An Image of type IMG_ENTIRE or IMG_PARTIAL stores its external state at
c5d16aa074bf begin comments on Image object
"Stephen Hahn <sch@sun.com>"
parents:
diff changeset
    98
        self.root + "/var/pkg".
c5d16aa074bf begin comments on Image object
"Stephen Hahn <sch@sun.com>"
parents:
diff changeset
    99
26
ab188d4682d5 catalog processing begins
"Stephen Hahn <sch@sun.com>"
parents: 22
diff changeset
   100
        An Image needs to be able to have a different repository set than the
ab188d4682d5 catalog processing begins
"Stephen Hahn <sch@sun.com>"
parents: 22
diff changeset
   101
        system's root Image.
ab188d4682d5 catalog processing begins
"Stephen Hahn <sch@sun.com>"
parents: 22
diff changeset
   102
2144
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
   103
        For image format details, see section 5.3 of doc/on-disk-format.txt
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
   104
        in the pkg(5) gate.
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
   105
        """
26
ab188d4682d5 catalog processing begins
"Stephen Hahn <sch@sun.com>"
parents: 22
diff changeset
   106
1352
5c92c9d342ef 11065 client v1 catalog support for v0 catalogs
Shawn Walker <srw@sun.com>
parents: 1328
diff changeset
   107
        # Class constants
2144
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
   108
        CURRENT_VERSION = 4
1352
5c92c9d342ef 11065 client v1 catalog support for v0 catalogs
Shawn Walker <srw@sun.com>
parents: 1328
diff changeset
   109
        IMG_CATALOG_KNOWN = "known"
5c92c9d342ef 11065 client v1 catalog support for v0 catalogs
Shawn Walker <srw@sun.com>
parents: 1328
diff changeset
   110
        IMG_CATALOG_INSTALLED = "installed"
5c92c9d342ef 11065 client v1 catalog support for v0 catalogs
Shawn Walker <srw@sun.com>
parents: 1328
diff changeset
   111
2219
60ad60f7592c 2152 standalone package support needed (on-disk format)
Shawn Walker <shawn.walker@oracle.com>
parents: 2205
diff changeset
   112
        # This is a transitory state used for temporary package sources to
60ad60f7592c 2152 standalone package support needed (on-disk format)
Shawn Walker <shawn.walker@oracle.com>
parents: 2205
diff changeset
   113
        # indicate that the package entry should be removed if it does not
60ad60f7592c 2152 standalone package support needed (on-disk format)
Shawn Walker <shawn.walker@oracle.com>
parents: 2205
diff changeset
   114
        # also have PKG_STATE_INSTALLED.  This state must not be written
60ad60f7592c 2152 standalone package support needed (on-disk format)
Shawn Walker <shawn.walker@oracle.com>
parents: 2205
diff changeset
   115
        # to disk.
60ad60f7592c 2152 standalone package support needed (on-disk format)
Shawn Walker <shawn.walker@oracle.com>
parents: 2205
diff changeset
   116
        PKG_STATE_ALT_SOURCE = 99
60ad60f7592c 2152 standalone package support needed (on-disk format)
Shawn Walker <shawn.walker@oracle.com>
parents: 2205
diff changeset
   117
1369
e86145680c34 11359 catalog should offer lazy-load mechanism for action metadata
Shawn Walker <srw@sun.com>
parents: 1358
diff changeset
   118
        # Please note that the values of these PKG_STATE constants should not
e86145680c34 11359 catalog should offer lazy-load mechanism for action metadata
Shawn Walker <srw@sun.com>
parents: 1358
diff changeset
   119
        # be changed as it would invalidate existing catalog data stored in the
e86145680c34 11359 catalog should offer lazy-load mechanism for action metadata
Shawn Walker <srw@sun.com>
parents: 1358
diff changeset
   120
        # image.  This means that if a constant is removed, the values of the
e86145680c34 11359 catalog should offer lazy-load mechanism for action metadata
Shawn Walker <srw@sun.com>
parents: 1358
diff changeset
   121
        # other constants should not change, etc.
e86145680c34 11359 catalog should offer lazy-load mechanism for action metadata
Shawn Walker <srw@sun.com>
parents: 1358
diff changeset
   122
1352
5c92c9d342ef 11065 client v1 catalog support for v0 catalogs
Shawn Walker <srw@sun.com>
parents: 1328
diff changeset
   123
        # This state indicates that a package is present in a repository
5c92c9d342ef 11065 client v1 catalog support for v0 catalogs
Shawn Walker <srw@sun.com>
parents: 1328
diff changeset
   124
        # catalog.
5c92c9d342ef 11065 client v1 catalog support for v0 catalogs
Shawn Walker <srw@sun.com>
parents: 1328
diff changeset
   125
        PKG_STATE_KNOWN = 0
5c92c9d342ef 11065 client v1 catalog support for v0 catalogs
Shawn Walker <srw@sun.com>
parents: 1328
diff changeset
   126
5c92c9d342ef 11065 client v1 catalog support for v0 catalogs
Shawn Walker <srw@sun.com>
parents: 1328
diff changeset
   127
        # This is a transitory state used to indicate that a package is no
5c92c9d342ef 11065 client v1 catalog support for v0 catalogs
Shawn Walker <srw@sun.com>
parents: 1328
diff changeset
   128
        # longer present in a repository catalog; it is only used to clear
5c92c9d342ef 11065 client v1 catalog support for v0 catalogs
Shawn Walker <srw@sun.com>
parents: 1328
diff changeset
   129
        # PKG_STATE_KNOWN.
5c92c9d342ef 11065 client v1 catalog support for v0 catalogs
Shawn Walker <srw@sun.com>
parents: 1328
diff changeset
   130
        PKG_STATE_UNKNOWN = 1
5c92c9d342ef 11065 client v1 catalog support for v0 catalogs
Shawn Walker <srw@sun.com>
parents: 1328
diff changeset
   131
5c92c9d342ef 11065 client v1 catalog support for v0 catalogs
Shawn Walker <srw@sun.com>
parents: 1328
diff changeset
   132
        # This state indicates that a package is installed.
5c92c9d342ef 11065 client v1 catalog support for v0 catalogs
Shawn Walker <srw@sun.com>
parents: 1328
diff changeset
   133
        PKG_STATE_INSTALLED = 2
5c92c9d342ef 11065 client v1 catalog support for v0 catalogs
Shawn Walker <srw@sun.com>
parents: 1328
diff changeset
   134
5c92c9d342ef 11065 client v1 catalog support for v0 catalogs
Shawn Walker <srw@sun.com>
parents: 1328
diff changeset
   135
        # This is a transitory state used to indicate that a package is no
5c92c9d342ef 11065 client v1 catalog support for v0 catalogs
Shawn Walker <srw@sun.com>
parents: 1328
diff changeset
   136
        # longer installed; it is only used to clear PKG_STATE_INSTALLED.
5c92c9d342ef 11065 client v1 catalog support for v0 catalogs
Shawn Walker <srw@sun.com>
parents: 1328
diff changeset
   137
        PKG_STATE_UNINSTALLED = 3
5c92c9d342ef 11065 client v1 catalog support for v0 catalogs
Shawn Walker <srw@sun.com>
parents: 1328
diff changeset
   138
        PKG_STATE_UPGRADABLE = 4
5c92c9d342ef 11065 client v1 catalog support for v0 catalogs
Shawn Walker <srw@sun.com>
parents: 1328
diff changeset
   139
1369
e86145680c34 11359 catalog should offer lazy-load mechanism for action metadata
Shawn Walker <srw@sun.com>
parents: 1358
diff changeset
   140
        # These states are used to indicate the package's related catalog
e86145680c34 11359 catalog should offer lazy-load mechanism for action metadata
Shawn Walker <srw@sun.com>
parents: 1358
diff changeset
   141
        # version.  This is helpful to consumers of the catalog data so that
e86145680c34 11359 catalog should offer lazy-load mechanism for action metadata
Shawn Walker <srw@sun.com>
parents: 1358
diff changeset
   142
        # they can be aware of what metadata may not immediately available
e86145680c34 11359 catalog should offer lazy-load mechanism for action metadata
Shawn Walker <srw@sun.com>
parents: 1358
diff changeset
   143
        # (require manifest retrieval) based on the catalog version.
e86145680c34 11359 catalog should offer lazy-load mechanism for action metadata
Shawn Walker <srw@sun.com>
parents: 1358
diff changeset
   144
        PKG_STATE_V0 = 6
e86145680c34 11359 catalog should offer lazy-load mechanism for action metadata
Shawn Walker <srw@sun.com>
parents: 1358
diff changeset
   145
        PKG_STATE_V1 = 7
1352
5c92c9d342ef 11065 client v1 catalog support for v0 catalogs
Shawn Walker <srw@sun.com>
parents: 1328
diff changeset
   146
1461
fdf40c8c6765 820 Need a way to obsolete packages
Danek Duvall <danek.duvall@sun.com>
parents: 1449
diff changeset
   147
        PKG_STATE_OBSOLETE = 8
fdf40c8c6765 820 Need a way to obsolete packages
Danek Duvall <danek.duvall@sun.com>
parents: 1449
diff changeset
   148
        PKG_STATE_RENAMED = 9
fdf40c8c6765 820 Need a way to obsolete packages
Danek Duvall <danek.duvall@sun.com>
parents: 1449
diff changeset
   149
1970
60471574c487 16238 client api should ignore invalid and not yet supported packages
Shawn Walker <shawn.walker@oracle.com>
parents: 1895
diff changeset
   150
        # These states are used to indicate why a package was rejected and
60471574c487 16238 client api should ignore invalid and not yet supported packages
Shawn Walker <shawn.walker@oracle.com>
parents: 1895
diff changeset
   151
        # is not available for packaging operations.
60471574c487 16238 client api should ignore invalid and not yet supported packages
Shawn Walker <shawn.walker@oracle.com>
parents: 1895
diff changeset
   152
        PKG_STATE_UNSUPPORTED = 10      # Package contains invalid or
60471574c487 16238 client api should ignore invalid and not yet supported packages
Shawn Walker <shawn.walker@oracle.com>
parents: 1895
diff changeset
   153
                                        # unsupported metadata.
60471574c487 16238 client api should ignore invalid and not yet supported packages
Shawn Walker <shawn.walker@oracle.com>
parents: 1895
diff changeset
   154
1370
face1fe579ab 11400 image objects should always have a root
Brock Pytlik <bpytlik@sun.com>
parents: 1369
diff changeset
   155
        def __init__(self, root, user_provided_dir=False, progtrack=None,
2092
0ef66bf272d3 16852 pkg should look at its image for certs if active image lacks certs
Brock Pytlik <brock.pytlik@oracle.com>
parents: 2089
diff changeset
   156
            should_exist=True, imgtype=None, force=False,
2158
5a688b5b92a3 15864 inferring image location from current working directory can be harmful
Shawn Walker <shawn.walker@oracle.com>
parents: 2154
diff changeset
   157
            augment_ta_from_parent_image=True, allow_ondisk_upgrade=None,
2339
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2335
diff changeset
   158
            allow_ambiguous=False, props=misc.EmptyDict, cmdpath=None,
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2335
diff changeset
   159
            runid=-1):
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2335
diff changeset
   160
1370
face1fe579ab 11400 image objects should always have a root
Brock Pytlik <bpytlik@sun.com>
parents: 1369
diff changeset
   161
                if should_exist:
face1fe579ab 11400 image objects should always have a root
Brock Pytlik <bpytlik@sun.com>
parents: 1369
diff changeset
   162
                        assert(imgtype is None)
face1fe579ab 11400 image objects should always have a root
Brock Pytlik <bpytlik@sun.com>
parents: 1369
diff changeset
   163
                        assert(not force)
face1fe579ab 11400 image objects should always have a root
Brock Pytlik <bpytlik@sun.com>
parents: 1369
diff changeset
   164
                else:
face1fe579ab 11400 image objects should always have a root
Brock Pytlik <bpytlik@sun.com>
parents: 1369
diff changeset
   165
                        assert(imgtype is not None)
2144
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
   166
2219
60ad60f7592c 2152 standalone package support needed (on-disk format)
Shawn Walker <shawn.walker@oracle.com>
parents: 2205
diff changeset
   167
                # Alternate package sources.
60ad60f7592c 2152 standalone package support needed (on-disk format)
Shawn Walker <shawn.walker@oracle.com>
parents: 2205
diff changeset
   168
                self.__alt_pkg_pub_map = None
60ad60f7592c 2152 standalone package support needed (on-disk format)
Shawn Walker <shawn.walker@oracle.com>
parents: 2205
diff changeset
   169
                self.__alt_pubs = None
60ad60f7592c 2152 standalone package support needed (on-disk format)
Shawn Walker <shawn.walker@oracle.com>
parents: 2205
diff changeset
   170
                self.__alt_known_cat = None
60ad60f7592c 2152 standalone package support needed (on-disk format)
Shawn Walker <shawn.walker@oracle.com>
parents: 2205
diff changeset
   171
                self.__alt_pkg_sources_loaded = False
60ad60f7592c 2152 standalone package support needed (on-disk format)
Shawn Walker <shawn.walker@oracle.com>
parents: 2205
diff changeset
   172
2339
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2335
diff changeset
   173
                if (runid < 0):
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2335
diff changeset
   174
                        runid = os.getpid()
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2335
diff changeset
   175
                self.runid = runid
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2335
diff changeset
   176
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2335
diff changeset
   177
                # Determine identity of client executable if appropriate.
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2335
diff changeset
   178
                if cmdpath == None:
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2335
diff changeset
   179
                        cmdpath = misc.api_cmdpath()
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2335
diff changeset
   180
                self.cmdpath = cmdpath
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2335
diff changeset
   181
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2335
diff changeset
   182
                if self.cmdpath != None:
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2335
diff changeset
   183
                        self.__cmddir = os.path.dirname(cmdpath)
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2335
diff changeset
   184
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2335
diff changeset
   185
                # prevent brokeness in the test suite
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2335
diff changeset
   186
                if self.cmdpath and \
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2335
diff changeset
   187
                    "PKG_NO_RUNPY_CMDPATH" in os.environ and \
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2335
diff changeset
   188
                    self.cmdpath.endswith(os.sep + "run.py"):
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2335
diff changeset
   189
                        raise RuntimeError, """
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2335
diff changeset
   190
An Image object was allocated from within ipkg test suite and
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2335
diff changeset
   191
cmdpath was not explicitly overridden.  Please make sure to
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2335
diff changeset
   192
explicitly set cmdpath when allocating an Image object, or
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2335
diff changeset
   193
override cmdpath when allocating an Image object by setting PKG_CMDPATH
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2335
diff changeset
   194
in the environment or by setting simulate_cmdpath in DebugValues."""
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2335
diff changeset
   195
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2335
diff changeset
   196
                self.linked = None
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2335
diff changeset
   197
2144
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
   198
                # Indicates whether automatic image format upgrades of the
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
   199
                # on-disk format are allowed.
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
   200
                self.allow_ondisk_upgrade = allow_ondisk_upgrade
2158
5a688b5b92a3 15864 inferring image location from current working directory can be harmful
Shawn Walker <shawn.walker@oracle.com>
parents: 2154
diff changeset
   201
                self.allow_ambiguous = allow_ambiguous
1352
5c92c9d342ef 11065 client v1 catalog support for v0 catalogs
Shawn Walker <srw@sun.com>
parents: 1328
diff changeset
   202
                self.__upgraded = False
5c92c9d342ef 11065 client v1 catalog support for v0 catalogs
Shawn Walker <srw@sun.com>
parents: 1328
diff changeset
   203
2144
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
   204
                # Must happen after upgraded assignment.
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
   205
                self.__init_catalogs()
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
   206
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
   207
                self.attrs = { "Build-Release": "5.11" } # XXX real data needed
1710
139720e2e756 1668 image locking needed to prevent race conditions
Shawn Walker <srw@sun.com>
parents: 1688
diff changeset
   208
                self.blocking_locks = False
2097
068cc63b4d6e 17055 image configuration should use pkg.config classes
Shawn Walker <shawn.walker@oracle.com>
parents: 2092
diff changeset
   209
                self.cfg = None
1352
5c92c9d342ef 11065 client v1 catalog support for v0 catalogs
Shawn Walker <srw@sun.com>
parents: 1328
diff changeset
   210
                self.history = history.History()
2339
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2335
diff changeset
   211
                self.imageplan = None
1352
5c92c9d342ef 11065 client v1 catalog support for v0 catalogs
Shawn Walker <srw@sun.com>
parents: 1328
diff changeset
   212
                self.img_prefix = None
5c92c9d342ef 11065 client v1 catalog support for v0 catalogs
Shawn Walker <srw@sun.com>
parents: 1328
diff changeset
   213
                self.imgdir = None
5c92c9d342ef 11065 client v1 catalog support for v0 catalogs
Shawn Walker <srw@sun.com>
parents: 1328
diff changeset
   214
                self.index_dir = None
2339
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2335
diff changeset
   215
                self.plandir = None
1370
face1fe579ab 11400 image objects should always have a root
Brock Pytlik <bpytlik@sun.com>
parents: 1369
diff changeset
   216
                self.root = root
2144
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
   217
                self.version = -1
2073
9fcacc9e5eaa 16998 transport should support publisher-specific write and read caches
Shawn Walker <shawn.walker@oracle.com>
parents: 2069
diff changeset
   218
9fcacc9e5eaa 16998 transport should support publisher-specific write and read caches
Shawn Walker <shawn.walker@oracle.com>
parents: 2069
diff changeset
   219
                # Can have multiple read cache dirs...
2144
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
   220
                self.__read_cache_dirs = []
2073
9fcacc9e5eaa 16998 transport should support publisher-specific write and read caches
Shawn Walker <shawn.walker@oracle.com>
parents: 2069
diff changeset
   221
9fcacc9e5eaa 16998 transport should support publisher-specific write and read caches
Shawn Walker <shawn.walker@oracle.com>
parents: 2069
diff changeset
   222
                # ...but only one global write cache dir and incoming write dir.
9fcacc9e5eaa 16998 transport should support publisher-specific write and read caches
Shawn Walker <shawn.walker@oracle.com>
parents: 2069
diff changeset
   223
                self.__write_cache_dir = None
9fcacc9e5eaa 16998 transport should support publisher-specific write and read caches
Shawn Walker <shawn.walker@oracle.com>
parents: 2069
diff changeset
   224
                self.__user_cache_dir = None
9fcacc9e5eaa 16998 transport should support publisher-specific write and read caches
Shawn Walker <shawn.walker@oracle.com>
parents: 2069
diff changeset
   225
                self._incoming_cache_dir = None
9fcacc9e5eaa 16998 transport should support publisher-specific write and read caches
Shawn Walker <shawn.walker@oracle.com>
parents: 2069
diff changeset
   226
2148
5625d3707d5b 17424 zone cache usage needs adjustment for new image format
Shawn Walker <shawn.walker@oracle.com>
parents: 2144
diff changeset
   227
                # Set if write_cache is actually a tree like /var/pkg/publisher
5625d3707d5b 17424 zone cache usage needs adjustment for new image format
Shawn Walker <shawn.walker@oracle.com>
parents: 2144
diff changeset
   228
                # instead of a flat cache.
5625d3707d5b 17424 zone cache usage needs adjustment for new image format
Shawn Walker <shawn.walker@oracle.com>
parents: 2144
diff changeset
   229
                self.__write_cache_root = None
5625d3707d5b 17424 zone cache usage needs adjustment for new image format
Shawn Walker <shawn.walker@oracle.com>
parents: 2144
diff changeset
   230
1710
139720e2e756 1668 image locking needed to prevent race conditions
Shawn Walker <srw@sun.com>
parents: 1688
diff changeset
   231
                self.__lock = pkg.nrlock.NRLock()
2043
852501e586d0 14615 image-update claims failure for un-aquired lock and still succeeds
johansen <johansen@opensolaris.org>
parents: 2035
diff changeset
   232
                self.__lockfile = None
2026
d1b30615bc99 9196 pkg(5) should have support for cryptographic manifest signatures
Brock Pytlik <bpytlik@sun.com>
parents: 2003
diff changeset
   233
                self.__sig_policy = None
d1b30615bc99 9196 pkg(5) should have support for cryptographic manifest signatures
Brock Pytlik <bpytlik@sun.com>
parents: 2003
diff changeset
   234
                self.__trust_anchors = None
1370
face1fe579ab 11400 image objects should always have a root
Brock Pytlik <bpytlik@sun.com>
parents: 1369
diff changeset
   235
2105
212a253a462a 12530 pkg -R install doesn't update boot archive
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2097
diff changeset
   236
                # cache for presence of boot-archive
212a253a462a 12530 pkg -R install doesn't update boot archive
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2097
diff changeset
   237
                self.__boot_archive = None
212a253a462a 12530 pkg -R install doesn't update boot archive
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2097
diff changeset
   238
2003
16461c9acfee 1637 user action should be more robust against missing ftpusers file (and others)
Danek Duvall <danek.duvall@oracle.com>
parents: 1977
diff changeset
   239
                # When users and groups are added before their database files
16461c9acfee 1637 user action should be more robust against missing ftpusers file (and others)
Danek Duvall <danek.duvall@oracle.com>
parents: 1977
diff changeset
   240
                # have been installed, the actions store them temporarily in the
16461c9acfee 1637 user action should be more robust against missing ftpusers file (and others)
Danek Duvall <danek.duvall@oracle.com>
parents: 1977
diff changeset
   241
                # image, in these members.
16461c9acfee 1637 user action should be more robust against missing ftpusers file (and others)
Danek Duvall <danek.duvall@oracle.com>
parents: 1977
diff changeset
   242
                self._users = set()
16461c9acfee 1637 user action should be more robust against missing ftpusers file (and others)
Danek Duvall <danek.duvall@oracle.com>
parents: 1977
diff changeset
   243
                self._groups = set()
16461c9acfee 1637 user action should be more robust against missing ftpusers file (and others)
Danek Duvall <danek.duvall@oracle.com>
parents: 1977
diff changeset
   244
                self._usersbyname = {}
16461c9acfee 1637 user action should be more robust against missing ftpusers file (and others)
Danek Duvall <danek.duvall@oracle.com>
parents: 1977
diff changeset
   245
                self._groupsbyname = {}
16461c9acfee 1637 user action should be more robust against missing ftpusers file (and others)
Danek Duvall <danek.duvall@oracle.com>
parents: 1977
diff changeset
   246
2228
5319ee47781d 2774 new depend action behavior: follow if possible
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2219
diff changeset
   247
                # Set of pkg stems being avoided
5319ee47781d 2774 new depend action behavior: follow if possible
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2219
diff changeset
   248
                self.__avoid_set = None
5319ee47781d 2774 new depend action behavior: follow if possible
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2219
diff changeset
   249
                self.__avoid_set_altered = False
5319ee47781d 2774 new depend action behavior: follow if possible
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2219
diff changeset
   250
5319ee47781d 2774 new depend action behavior: follow if possible
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2219
diff changeset
   251
                # set of pkg stems subject to group
5319ee47781d 2774 new depend action behavior: follow if possible
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2219
diff changeset
   252
                # dependency but removed because obsolete
5319ee47781d 2774 new depend action behavior: follow if possible
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2219
diff changeset
   253
                self.__group_obsolete = None
5319ee47781d 2774 new depend action behavior: follow if possible
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2219
diff changeset
   254
2310
ce10607d5332 11684 desire option to not propagate certs to non-global zones
Brock Pytlik <brock.pytlik@oracle.com>
parents: 2293
diff changeset
   255
                self.__property_overrides = { "property": props }
ce10607d5332 11684 desire option to not propagate certs to non-global zones
Brock Pytlik <brock.pytlik@oracle.com>
parents: 2293
diff changeset
   256
1370
face1fe579ab 11400 image objects should always have a root
Brock Pytlik <bpytlik@sun.com>
parents: 1369
diff changeset
   257
                # Transport operations for this image
1974
6af683c5bde5 9203 pkgrecv should check for valid destination before beginning download
johansen <johansen@opensolaris.org>
parents: 1970
diff changeset
   258
                self.transport = transport.Transport(
6af683c5bde5 9203 pkgrecv should check for valid destination before beginning download
johansen <johansen@opensolaris.org>
parents: 1970
diff changeset
   259
                    transport.ImageTransportCfg(self))
1370
face1fe579ab 11400 image objects should always have a root
Brock Pytlik <bpytlik@sun.com>
parents: 1369
diff changeset
   260
2339
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2335
diff changeset
   261
                self.linked = li.LinkedImage(self)
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2335
diff changeset
   262
1370
face1fe579ab 11400 image objects should always have a root
Brock Pytlik <bpytlik@sun.com>
parents: 1369
diff changeset
   263
                if should_exist:
face1fe579ab 11400 image objects should always have a root
Brock Pytlik <bpytlik@sun.com>
parents: 1369
diff changeset
   264
                        self.find_root(self.root, user_provided_dir,
face1fe579ab 11400 image objects should always have a root
Brock Pytlik <bpytlik@sun.com>
parents: 1369
diff changeset
   265
                            progtrack)
face1fe579ab 11400 image objects should always have a root
Brock Pytlik <bpytlik@sun.com>
parents: 1369
diff changeset
   266
                else:
face1fe579ab 11400 image objects should always have a root
Brock Pytlik <bpytlik@sun.com>
parents: 1369
diff changeset
   267
                        if not force and self.image_type(self.root) != None:
2073
9fcacc9e5eaa 16998 transport should support publisher-specific write and read caches
Shawn Walker <shawn.walker@oracle.com>
parents: 2069
diff changeset
   268
                                raise apx.ImageAlreadyExists(self.root)
1370
face1fe579ab 11400 image objects should always have a root
Brock Pytlik <bpytlik@sun.com>
parents: 1369
diff changeset
   269
                        if not force and os.path.exists(self.root) and \
face1fe579ab 11400 image objects should always have a root
Brock Pytlik <bpytlik@sun.com>
parents: 1369
diff changeset
   270
                            len(os.listdir(self.root)) > 0:
2073
9fcacc9e5eaa 16998 transport should support publisher-specific write and read caches
Shawn Walker <shawn.walker@oracle.com>
parents: 2069
diff changeset
   271
                                raise apx.CreatingImageInNonEmptyDir(self.root)
1370
face1fe579ab 11400 image objects should always have a root
Brock Pytlik <bpytlik@sun.com>
parents: 1369
diff changeset
   272
                        self.__set_dirs(root=self.root, imgtype=imgtype,
2097
068cc63b4d6e 17055 image configuration should use pkg.config classes
Shawn Walker <shawn.walker@oracle.com>
parents: 2092
diff changeset
   273
                            progtrack=progtrack, purge=True)
429
6c9cbb6e6600 983 pkg search returns just one action per package/token-type combo
Brock Pytlik <bpytlik@sun.com>
parents: 423
diff changeset
   274
674
e740c8c3bed1 166 os.makedirs() does not set directory mode
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 664
diff changeset
   275
                # right now we don't explicitly set dir/file modes everywhere;
e740c8c3bed1 166 os.makedirs() does not set directory mode
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 664
diff changeset
   276
                # set umask to proper value to prevent problems w/ overly
926
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 922
diff changeset
   277
                # locked down umask.
674
e740c8c3bed1 166 os.makedirs() does not set directory mode
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 664
diff changeset
   278
                os.umask(0022)
e740c8c3bed1 166 os.makedirs() does not set directory mode
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 664
diff changeset
   279
2092
0ef66bf272d3 16852 pkg should look at its image for certs if active image lacks certs
Brock Pytlik <brock.pytlik@oracle.com>
parents: 2089
diff changeset
   280
                self.augment_ta_from_parent_image = augment_ta_from_parent_image
0ef66bf272d3 16852 pkg should look at its image for certs if active image lacks certs
Brock Pytlik <brock.pytlik@oracle.com>
parents: 2089
diff changeset
   281
2339
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2335
diff changeset
   282
        @staticmethod
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2335
diff changeset
   283
        def alloc(*args, **kwargs):
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2335
diff changeset
   284
                return Image(*args, **kwargs)
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2335
diff changeset
   285
1431
62b6033670e4 10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents: 1402
diff changeset
   286
        def __catalog_loaded(self, name):
62b6033670e4 10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents: 1402
diff changeset
   287
                """Returns a boolean value indicating whether the named catalog
62b6033670e4 10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents: 1402
diff changeset
   288
                has already been loaded.  This is intended to be used as an
62b6033670e4 10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents: 1402
diff changeset
   289
                optimization function to determine which catalog to request."""
62b6033670e4 10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents: 1402
diff changeset
   290
62b6033670e4 10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents: 1402
diff changeset
   291
                return name in self.__catalogs
62b6033670e4 10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents: 1402
diff changeset
   292
1463
0ef25025d601 12340 catalog storage performance regression
Shawn Walker <srw@sun.com>
parents: 1461
diff changeset
   293
        def __init_catalogs(self):
0ef25025d601 12340 catalog storage performance regression
Shawn Walker <srw@sun.com>
parents: 1461
diff changeset
   294
                """Initializes default catalog state.  Actual data is provided
0ef25025d601 12340 catalog storage performance regression
Shawn Walker <srw@sun.com>
parents: 1461
diff changeset
   295
                on demand via get_catalog()"""
0ef25025d601 12340 catalog storage performance regression
Shawn Walker <srw@sun.com>
parents: 1461
diff changeset
   296
2144
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
   297
                if self.__upgraded and self.version < 3:
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
   298
                        # Ignore request; transformed catalog data only exists
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
   299
                        # in memory and can't be reloaded from disk.
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
   300
                        return
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
   301
1463
0ef25025d601 12340 catalog storage performance regression
Shawn Walker <srw@sun.com>
parents: 1461
diff changeset
   302
                # This is used to cache image catalogs.
0ef25025d601 12340 catalog storage performance regression
Shawn Walker <srw@sun.com>
parents: 1461
diff changeset
   303
                self.__catalogs = {}
2219
60ad60f7592c 2152 standalone package support needed (on-disk format)
Shawn Walker <shawn.walker@oracle.com>
parents: 2205
diff changeset
   304
                self.__alt_pkg_sources_loaded = False
1463
0ef25025d601 12340 catalog storage performance regression
Shawn Walker <srw@sun.com>
parents: 1461
diff changeset
   305
1710
139720e2e756 1668 image locking needed to prevent race conditions
Shawn Walker <srw@sun.com>
parents: 1688
diff changeset
   306
        @property
2026
d1b30615bc99 9196 pkg(5) should have support for cryptographic manifest signatures
Brock Pytlik <bpytlik@sun.com>
parents: 2003
diff changeset
   307
        def signature_policy(self):
d1b30615bc99 9196 pkg(5) should have support for cryptographic manifest signatures
Brock Pytlik <bpytlik@sun.com>
parents: 2003
diff changeset
   308
                """Returns the signature policy for this image."""
d1b30615bc99 9196 pkg(5) should have support for cryptographic manifest signatures
Brock Pytlik <bpytlik@sun.com>
parents: 2003
diff changeset
   309
d1b30615bc99 9196 pkg(5) should have support for cryptographic manifest signatures
Brock Pytlik <bpytlik@sun.com>
parents: 2003
diff changeset
   310
                if self.__sig_policy is not None:
d1b30615bc99 9196 pkg(5) should have support for cryptographic manifest signatures
Brock Pytlik <bpytlik@sun.com>
parents: 2003
diff changeset
   311
                        return self.__sig_policy
2097
068cc63b4d6e 17055 image configuration should use pkg.config classes
Shawn Walker <shawn.walker@oracle.com>
parents: 2092
diff changeset
   312
                txt = self.cfg.get_policy_str(imageconfig.SIGNATURE_POLICY)
068cc63b4d6e 17055 image configuration should use pkg.config classes
Shawn Walker <shawn.walker@oracle.com>
parents: 2092
diff changeset
   313
                names = self.cfg.get_property("property",
068cc63b4d6e 17055 image configuration should use pkg.config classes
Shawn Walker <shawn.walker@oracle.com>
parents: 2092
diff changeset
   314
                    "signature-required-names")
2026
d1b30615bc99 9196 pkg(5) should have support for cryptographic manifest signatures
Brock Pytlik <bpytlik@sun.com>
parents: 2003
diff changeset
   315
                self.__sig_policy = sigpolicy.Policy.policy_factory(txt, names)
d1b30615bc99 9196 pkg(5) should have support for cryptographic manifest signatures
Brock Pytlik <bpytlik@sun.com>
parents: 2003
diff changeset
   316
                return self.__sig_policy
d1b30615bc99 9196 pkg(5) should have support for cryptographic manifest signatures
Brock Pytlik <bpytlik@sun.com>
parents: 2003
diff changeset
   317
d1b30615bc99 9196 pkg(5) should have support for cryptographic manifest signatures
Brock Pytlik <bpytlik@sun.com>
parents: 2003
diff changeset
   318
        @property
d1b30615bc99 9196 pkg(5) should have support for cryptographic manifest signatures
Brock Pytlik <bpytlik@sun.com>
parents: 2003
diff changeset
   319
        def trust_anchors(self):
d1b30615bc99 9196 pkg(5) should have support for cryptographic manifest signatures
Brock Pytlik <bpytlik@sun.com>
parents: 2003
diff changeset
   320
                """Return a dictionary mapping subject hashes for certificates
2092
0ef66bf272d3 16852 pkg should look at its image for certs if active image lacks certs
Brock Pytlik <brock.pytlik@oracle.com>
parents: 2089
diff changeset
   321
                this image trusts to those certs.  The image trusts those
0ef66bf272d3 16852 pkg should look at its image for certs if active image lacks certs
Brock Pytlik <brock.pytlik@oracle.com>
parents: 2089
diff changeset
   322
                trust anchors in its trust_anchor_dir and those in the from
0ef66bf272d3 16852 pkg should look at its image for certs if active image lacks certs
Brock Pytlik <brock.pytlik@oracle.com>
parents: 2089
diff changeset
   323
                which pkg was run."""
2026
d1b30615bc99 9196 pkg(5) should have support for cryptographic manifest signatures
Brock Pytlik <bpytlik@sun.com>
parents: 2003
diff changeset
   324
d1b30615bc99 9196 pkg(5) should have support for cryptographic manifest signatures
Brock Pytlik <bpytlik@sun.com>
parents: 2003
diff changeset
   325
                if self.__trust_anchors is not None:
d1b30615bc99 9196 pkg(5) should have support for cryptographic manifest signatures
Brock Pytlik <bpytlik@sun.com>
parents: 2003
diff changeset
   326
                        return self.__trust_anchors
2144
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
   327
2092
0ef66bf272d3 16852 pkg should look at its image for certs if active image lacks certs
Brock Pytlik <brock.pytlik@oracle.com>
parents: 2089
diff changeset
   328
                user_set_ta_loc = True
2097
068cc63b4d6e 17055 image configuration should use pkg.config classes
Shawn Walker <shawn.walker@oracle.com>
parents: 2092
diff changeset
   329
                rel_dir = self.get_property("trust-anchor-directory")
2092
0ef66bf272d3 16852 pkg should look at its image for certs if active image lacks certs
Brock Pytlik <brock.pytlik@oracle.com>
parents: 2089
diff changeset
   330
                if rel_dir[0] == "/":
0ef66bf272d3 16852 pkg should look at its image for certs if active image lacks certs
Brock Pytlik <brock.pytlik@oracle.com>
parents: 2089
diff changeset
   331
                        rel_dir = rel_dir[1:]
0ef66bf272d3 16852 pkg should look at its image for certs if active image lacks certs
Brock Pytlik <brock.pytlik@oracle.com>
parents: 2089
diff changeset
   332
                trust_anchor_loc = os.path.join(self.root, rel_dir)
0ef66bf272d3 16852 pkg should look at its image for certs if active image lacks certs
Brock Pytlik <brock.pytlik@oracle.com>
parents: 2089
diff changeset
   333
                loc_is_dir = os.path.isdir(trust_anchor_loc)
0ef66bf272d3 16852 pkg should look at its image for certs if active image lacks certs
Brock Pytlik <brock.pytlik@oracle.com>
parents: 2089
diff changeset
   334
                pkg_trust_anchors = {}
0ef66bf272d3 16852 pkg should look at its image for certs if active image lacks certs
Brock Pytlik <brock.pytlik@oracle.com>
parents: 2089
diff changeset
   335
                if self.__cmddir and self.augment_ta_from_parent_image:
0ef66bf272d3 16852 pkg should look at its image for certs if active image lacks certs
Brock Pytlik <brock.pytlik@oracle.com>
parents: 2089
diff changeset
   336
                        pkg_trust_anchors = Image(self.__cmddir,
2158
5a688b5b92a3 15864 inferring image location from current working directory can be harmful
Shawn Walker <shawn.walker@oracle.com>
parents: 2154
diff changeset
   337
                            augment_ta_from_parent_image=False,
2339
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2335
diff changeset
   338
                            allow_ambiguous=True,
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2335
diff changeset
   339
                            cmdpath=self.cmdpath).trust_anchors
2092
0ef66bf272d3 16852 pkg should look at its image for certs if active image lacks certs
Brock Pytlik <brock.pytlik@oracle.com>
parents: 2089
diff changeset
   340
                if not loc_is_dir and os.path.exists(trust_anchor_loc):
2073
9fcacc9e5eaa 16998 transport should support publisher-specific write and read caches
Shawn Walker <shawn.walker@oracle.com>
parents: 2069
diff changeset
   341
                        raise apx.InvalidPropertyValue(_("The trust "
2092
0ef66bf272d3 16852 pkg should look at its image for certs if active image lacks certs
Brock Pytlik <brock.pytlik@oracle.com>
parents: 2089
diff changeset
   342
                            "anchors for the image were expected to be found "
2026
d1b30615bc99 9196 pkg(5) should have support for cryptographic manifest signatures
Brock Pytlik <bpytlik@sun.com>
parents: 2003
diff changeset
   343
                            "in %s, but that is not a directory.  Please set "
d1b30615bc99 9196 pkg(5) should have support for cryptographic manifest signatures
Brock Pytlik <bpytlik@sun.com>
parents: 2003
diff changeset
   344
                            "the image property 'trust-anchor-directory' to "
d1b30615bc99 9196 pkg(5) should have support for cryptographic manifest signatures
Brock Pytlik <bpytlik@sun.com>
parents: 2003
diff changeset
   345
                            "the correct path.") % trust_anchor_loc)
d1b30615bc99 9196 pkg(5) should have support for cryptographic manifest signatures
Brock Pytlik <bpytlik@sun.com>
parents: 2003
diff changeset
   346
                self.__trust_anchors = {}
2092
0ef66bf272d3 16852 pkg should look at its image for certs if active image lacks certs
Brock Pytlik <brock.pytlik@oracle.com>
parents: 2089
diff changeset
   347
                if loc_is_dir:
0ef66bf272d3 16852 pkg should look at its image for certs if active image lacks certs
Brock Pytlik <brock.pytlik@oracle.com>
parents: 2089
diff changeset
   348
                        for fn in os.listdir(trust_anchor_loc):
0ef66bf272d3 16852 pkg should look at its image for certs if active image lacks certs
Brock Pytlik <brock.pytlik@oracle.com>
parents: 2089
diff changeset
   349
                                pth = os.path.join(trust_anchor_loc, fn)
0ef66bf272d3 16852 pkg should look at its image for certs if active image lacks certs
Brock Pytlik <brock.pytlik@oracle.com>
parents: 2089
diff changeset
   350
                                if os.path.islink(pth):
0ef66bf272d3 16852 pkg should look at its image for certs if active image lacks certs
Brock Pytlik <brock.pytlik@oracle.com>
parents: 2089
diff changeset
   351
                                        continue
0ef66bf272d3 16852 pkg should look at its image for certs if active image lacks certs
Brock Pytlik <brock.pytlik@oracle.com>
parents: 2089
diff changeset
   352
                                trusted_ca = m2.X509.load_cert(pth)
0ef66bf272d3 16852 pkg should look at its image for certs if active image lacks certs
Brock Pytlik <brock.pytlik@oracle.com>
parents: 2089
diff changeset
   353
                                # M2Crypto's subject hash doesn't match
0ef66bf272d3 16852 pkg should look at its image for certs if active image lacks certs
Brock Pytlik <brock.pytlik@oracle.com>
parents: 2089
diff changeset
   354
                                # openssl's subject hash so recompute it so all
0ef66bf272d3 16852 pkg should look at its image for certs if active image lacks certs
Brock Pytlik <brock.pytlik@oracle.com>
parents: 2089
diff changeset
   355
                                # hashes are in the same universe.
0ef66bf272d3 16852 pkg should look at its image for certs if active image lacks certs
Brock Pytlik <brock.pytlik@oracle.com>
parents: 2089
diff changeset
   356
                                s = trusted_ca.get_subject().as_hash()
0ef66bf272d3 16852 pkg should look at its image for certs if active image lacks certs
Brock Pytlik <brock.pytlik@oracle.com>
parents: 2089
diff changeset
   357
                                self.__trust_anchors.setdefault(s, [])
0ef66bf272d3 16852 pkg should look at its image for certs if active image lacks certs
Brock Pytlik <brock.pytlik@oracle.com>
parents: 2089
diff changeset
   358
                                self.__trust_anchors[s].append(trusted_ca)
0ef66bf272d3 16852 pkg should look at its image for certs if active image lacks certs
Brock Pytlik <brock.pytlik@oracle.com>
parents: 2089
diff changeset
   359
                for s in pkg_trust_anchors:
0ef66bf272d3 16852 pkg should look at its image for certs if active image lacks certs
Brock Pytlik <brock.pytlik@oracle.com>
parents: 2089
diff changeset
   360
                        if s not in self.__trust_anchors:
0ef66bf272d3 16852 pkg should look at its image for certs if active image lacks certs
Brock Pytlik <brock.pytlik@oracle.com>
parents: 2089
diff changeset
   361
                                self.__trust_anchors[s] = pkg_trust_anchors[s]
2026
d1b30615bc99 9196 pkg(5) should have support for cryptographic manifest signatures
Brock Pytlik <bpytlik@sun.com>
parents: 2003
diff changeset
   362
                return self.__trust_anchors
d1b30615bc99 9196 pkg(5) should have support for cryptographic manifest signatures
Brock Pytlik <bpytlik@sun.com>
parents: 2003
diff changeset
   363
d1b30615bc99 9196 pkg(5) should have support for cryptographic manifest signatures
Brock Pytlik <bpytlik@sun.com>
parents: 2003
diff changeset
   364
        @property
1710
139720e2e756 1668 image locking needed to prevent race conditions
Shawn Walker <srw@sun.com>
parents: 1688
diff changeset
   365
        def locked(self):
139720e2e756 1668 image locking needed to prevent race conditions
Shawn Walker <srw@sun.com>
parents: 1688
diff changeset
   366
                """Returns a boolean value indicating whether the image is
139720e2e756 1668 image locking needed to prevent race conditions
Shawn Walker <srw@sun.com>
parents: 1688
diff changeset
   367
                currently locked."""
139720e2e756 1668 image locking needed to prevent race conditions
Shawn Walker <srw@sun.com>
parents: 1688
diff changeset
   368
2028
b2c674e6ee28 16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents: 2026
diff changeset
   369
                return self.__lock and self.__lock.locked
1710
139720e2e756 1668 image locking needed to prevent race conditions
Shawn Walker <srw@sun.com>
parents: 1688
diff changeset
   370
139720e2e756 1668 image locking needed to prevent race conditions
Shawn Walker <srw@sun.com>
parents: 1688
diff changeset
   371
        @contextmanager
2154
68e263d9287c 17417 t_pkg_history test unnecessarily wants a unique timestamp
Tim Foster <tim.s.foster@oracle.com>
parents: 2152
diff changeset
   372
        def locked_op(self, op, allow_unprivileged=False, new_history_op=True):
1710
139720e2e756 1668 image locking needed to prevent race conditions
Shawn Walker <srw@sun.com>
parents: 1688
diff changeset
   373
                """Helper method for executing an image-modifying operation
2154
68e263d9287c 17417 t_pkg_history test unnecessarily wants a unique timestamp
Tim Foster <tim.s.foster@oracle.com>
parents: 2152
diff changeset
   374
                that needs locking.  It automatically handles calling
68e263d9287c 17417 t_pkg_history test unnecessarily wants a unique timestamp
Tim Foster <tim.s.foster@oracle.com>
parents: 2152
diff changeset
   375
                log_operation_start and log_operation_end by default.  Locking
68e263d9287c 17417 t_pkg_history test unnecessarily wants a unique timestamp
Tim Foster <tim.s.foster@oracle.com>
parents: 2152
diff changeset
   376
                behaviour is controlled by the blocking_locks image property.
1710
139720e2e756 1668 image locking needed to prevent race conditions
Shawn Walker <srw@sun.com>
parents: 1688
diff changeset
   377
139720e2e756 1668 image locking needed to prevent race conditions
Shawn Walker <srw@sun.com>
parents: 1688
diff changeset
   378
                'allow_unprivileged' is an optional boolean value indicating
139720e2e756 1668 image locking needed to prevent race conditions
Shawn Walker <srw@sun.com>
parents: 1688
diff changeset
   379
                that permissions-related exceptions should be ignored when
139720e2e756 1668 image locking needed to prevent race conditions
Shawn Walker <srw@sun.com>
parents: 1688
diff changeset
   380
                attempting to obtain the lock as the related operation will
139720e2e756 1668 image locking needed to prevent race conditions
Shawn Walker <srw@sun.com>
parents: 1688
diff changeset
   381
                still work correctly even though the image cannot (presumably)
139720e2e756 1668 image locking needed to prevent race conditions
Shawn Walker <srw@sun.com>
parents: 1688
diff changeset
   382
                be modified.
2154
68e263d9287c 17417 t_pkg_history test unnecessarily wants a unique timestamp
Tim Foster <tim.s.foster@oracle.com>
parents: 2152
diff changeset
   383
68e263d9287c 17417 t_pkg_history test unnecessarily wants a unique timestamp
Tim Foster <tim.s.foster@oracle.com>
parents: 2152
diff changeset
   384
                'new_history_op' indicates whether we should handle history
68e263d9287c 17417 t_pkg_history test unnecessarily wants a unique timestamp
Tim Foster <tim.s.foster@oracle.com>
parents: 2152
diff changeset
   385
                operations.
1710
139720e2e756 1668 image locking needed to prevent race conditions
Shawn Walker <srw@sun.com>
parents: 1688
diff changeset
   386
                """
139720e2e756 1668 image locking needed to prevent race conditions
Shawn Walker <srw@sun.com>
parents: 1688
diff changeset
   387
139720e2e756 1668 image locking needed to prevent race conditions
Shawn Walker <srw@sun.com>
parents: 1688
diff changeset
   388
                error = None
139720e2e756 1668 image locking needed to prevent race conditions
Shawn Walker <srw@sun.com>
parents: 1688
diff changeset
   389
                self.lock(allow_unprivileged=allow_unprivileged)
139720e2e756 1668 image locking needed to prevent race conditions
Shawn Walker <srw@sun.com>
parents: 1688
diff changeset
   390
                try:
2141
3757a0f8a7d1 17385 history should store uuids for boot environments
Tim Foster <tim.s.foster@oracle.com>
parents: 2135
diff changeset
   391
                        be_name, be_uuid = \
3757a0f8a7d1 17385 history should store uuids for boot environments
Tim Foster <tim.s.foster@oracle.com>
parents: 2135
diff changeset
   392
                            bootenv.BootEnv.get_be_name(self.root)
2154
68e263d9287c 17417 t_pkg_history test unnecessarily wants a unique timestamp
Tim Foster <tim.s.foster@oracle.com>
parents: 2152
diff changeset
   393
                        if new_history_op:
68e263d9287c 17417 t_pkg_history test unnecessarily wants a unique timestamp
Tim Foster <tim.s.foster@oracle.com>
parents: 2152
diff changeset
   394
                                self.history.log_operation_start(op,
68e263d9287c 17417 t_pkg_history test unnecessarily wants a unique timestamp
Tim Foster <tim.s.foster@oracle.com>
parents: 2152
diff changeset
   395
                                    be_name=be_name, be_uuid=be_uuid)
1710
139720e2e756 1668 image locking needed to prevent race conditions
Shawn Walker <srw@sun.com>
parents: 1688
diff changeset
   396
                        yield
2073
9fcacc9e5eaa 16998 transport should support publisher-specific write and read caches
Shawn Walker <shawn.walker@oracle.com>
parents: 2069
diff changeset
   397
                except apx.ImageLockedError, e:
2043
852501e586d0 14615 image-update claims failure for un-aquired lock and still succeeds
johansen <johansen@opensolaris.org>
parents: 2035
diff changeset
   398
                        # Don't unlock the image if the call failed to
852501e586d0 14615 image-update claims failure for un-aquired lock and still succeeds
johansen <johansen@opensolaris.org>
parents: 2035
diff changeset
   399
                        # get the lock.
1710
139720e2e756 1668 image locking needed to prevent race conditions
Shawn Walker <srw@sun.com>
parents: 1688
diff changeset
   400
                        error = e
139720e2e756 1668 image locking needed to prevent race conditions
Shawn Walker <srw@sun.com>
parents: 1688
diff changeset
   401
                        raise
2043
852501e586d0 14615 image-update claims failure for un-aquired lock and still succeeds
johansen <johansen@opensolaris.org>
parents: 2035
diff changeset
   402
                except Exception, e:
852501e586d0 14615 image-update claims failure for un-aquired lock and still succeeds
johansen <johansen@opensolaris.org>
parents: 2035
diff changeset
   403
                        error = e
852501e586d0 14615 image-update claims failure for un-aquired lock and still succeeds
johansen <johansen@opensolaris.org>
parents: 2035
diff changeset
   404
                        self.unlock()
852501e586d0 14615 image-update claims failure for un-aquired lock and still succeeds
johansen <johansen@opensolaris.org>
parents: 2035
diff changeset
   405
                        raise
852501e586d0 14615 image-update claims failure for un-aquired lock and still succeeds
johansen <johansen@opensolaris.org>
parents: 2035
diff changeset
   406
                else:
852501e586d0 14615 image-update claims failure for un-aquired lock and still succeeds
johansen <johansen@opensolaris.org>
parents: 2035
diff changeset
   407
                        self.unlock()
1710
139720e2e756 1668 image locking needed to prevent race conditions
Shawn Walker <srw@sun.com>
parents: 1688
diff changeset
   408
                finally:
2154
68e263d9287c 17417 t_pkg_history test unnecessarily wants a unique timestamp
Tim Foster <tim.s.foster@oracle.com>
parents: 2152
diff changeset
   409
                        if new_history_op:
68e263d9287c 17417 t_pkg_history test unnecessarily wants a unique timestamp
Tim Foster <tim.s.foster@oracle.com>
parents: 2152
diff changeset
   410
                                self.history.log_operation_end(error=error)
1710
139720e2e756 1668 image locking needed to prevent race conditions
Shawn Walker <srw@sun.com>
parents: 1688
diff changeset
   411
139720e2e756 1668 image locking needed to prevent race conditions
Shawn Walker <srw@sun.com>
parents: 1688
diff changeset
   412
        def lock(self, allow_unprivileged=False):
139720e2e756 1668 image locking needed to prevent race conditions
Shawn Walker <srw@sun.com>
parents: 1688
diff changeset
   413
                """Locks the image in preparation for an image-modifying
139720e2e756 1668 image locking needed to prevent race conditions
Shawn Walker <srw@sun.com>
parents: 1688
diff changeset
   414
                operation.  Raises an ImageLockedError exception on failure.
139720e2e756 1668 image locking needed to prevent race conditions
Shawn Walker <srw@sun.com>
parents: 1688
diff changeset
   415
                Locking behaviour is controlled by the blocking_locks image
139720e2e756 1668 image locking needed to prevent race conditions
Shawn Walker <srw@sun.com>
parents: 1688
diff changeset
   416
                property.
139720e2e756 1668 image locking needed to prevent race conditions
Shawn Walker <srw@sun.com>
parents: 1688
diff changeset
   417
139720e2e756 1668 image locking needed to prevent race conditions
Shawn Walker <srw@sun.com>
parents: 1688
diff changeset
   418
                'allow_unprivileged' is an optional boolean value indicating
139720e2e756 1668 image locking needed to prevent race conditions
Shawn Walker <srw@sun.com>
parents: 1688
diff changeset
   419
                that permissions-related exceptions should be ignored when
139720e2e756 1668 image locking needed to prevent race conditions
Shawn Walker <srw@sun.com>
parents: 1688
diff changeset
   420
                attempting to obtain the lock as the related operation will
139720e2e756 1668 image locking needed to prevent race conditions
Shawn Walker <srw@sun.com>
parents: 1688
diff changeset
   421
                still work correctly even though the image cannot (presumably)
139720e2e756 1668 image locking needed to prevent race conditions
Shawn Walker <srw@sun.com>
parents: 1688
diff changeset
   422
                be modified.
139720e2e756 1668 image locking needed to prevent race conditions
Shawn Walker <srw@sun.com>
parents: 1688
diff changeset
   423
                """
139720e2e756 1668 image locking needed to prevent race conditions
Shawn Walker <srw@sun.com>
parents: 1688
diff changeset
   424
139720e2e756 1668 image locking needed to prevent race conditions
Shawn Walker <srw@sun.com>
parents: 1688
diff changeset
   425
                blocking = self.blocking_locks
139720e2e756 1668 image locking needed to prevent race conditions
Shawn Walker <srw@sun.com>
parents: 1688
diff changeset
   426
139720e2e756 1668 image locking needed to prevent race conditions
Shawn Walker <srw@sun.com>
parents: 1688
diff changeset
   427
                # First, attempt to obtain a thread lock.
139720e2e756 1668 image locking needed to prevent race conditions
Shawn Walker <srw@sun.com>
parents: 1688
diff changeset
   428
                if not self.__lock.acquire(blocking=blocking):
2073
9fcacc9e5eaa 16998 transport should support publisher-specific write and read caches
Shawn Walker <shawn.walker@oracle.com>
parents: 2069
diff changeset
   429
                        raise apx.ImageLockedError()
1710
139720e2e756 1668 image locking needed to prevent race conditions
Shawn Walker <srw@sun.com>
parents: 1688
diff changeset
   430
139720e2e756 1668 image locking needed to prevent race conditions
Shawn Walker <srw@sun.com>
parents: 1688
diff changeset
   431
                try:
139720e2e756 1668 image locking needed to prevent race conditions
Shawn Walker <srw@sun.com>
parents: 1688
diff changeset
   432
                        # Attempt to obtain a file lock.
2043
852501e586d0 14615 image-update claims failure for un-aquired lock and still succeeds
johansen <johansen@opensolaris.org>
parents: 2035
diff changeset
   433
                        self.__lockfile.lock(blocking=blocking)
852501e586d0 14615 image-update claims failure for un-aquired lock and still succeeds
johansen <johansen@opensolaris.org>
parents: 2035
diff changeset
   434
                except EnvironmentError, e:
2073
9fcacc9e5eaa 16998 transport should support publisher-specific write and read caches
Shawn Walker <shawn.walker@oracle.com>
parents: 2069
diff changeset
   435
                        exc = None
2043
852501e586d0 14615 image-update claims failure for un-aquired lock and still succeeds
johansen <johansen@opensolaris.org>
parents: 2035
diff changeset
   436
                        if e.errno == errno.ENOENT:
852501e586d0 14615 image-update claims failure for un-aquired lock and still succeeds
johansen <johansen@opensolaris.org>
parents: 2035
diff changeset
   437
                                return
852501e586d0 14615 image-update claims failure for un-aquired lock and still succeeds
johansen <johansen@opensolaris.org>
parents: 2035
diff changeset
   438
                        if e.errno == errno.EACCES:
2073
9fcacc9e5eaa 16998 transport should support publisher-specific write and read caches
Shawn Walker <shawn.walker@oracle.com>
parents: 2069
diff changeset
   439
                                exc = apx.PermissionsException(e.filename)
2043
852501e586d0 14615 image-update claims failure for un-aquired lock and still succeeds
johansen <johansen@opensolaris.org>
parents: 2035
diff changeset
   440
                        elif e.errno == errno.EROFS:
2073
9fcacc9e5eaa 16998 transport should support publisher-specific write and read caches
Shawn Walker <shawn.walker@oracle.com>
parents: 2069
diff changeset
   441
                                exc = apx.ReadOnlyFileSystemException(
2043
852501e586d0 14615 image-update claims failure for un-aquired lock and still succeeds
johansen <johansen@opensolaris.org>
parents: 2035
diff changeset
   442
                                    e.filename)
852501e586d0 14615 image-update claims failure for un-aquired lock and still succeeds
johansen <johansen@opensolaris.org>
parents: 2035
diff changeset
   443
                        else:
1710
139720e2e756 1668 image locking needed to prevent race conditions
Shawn Walker <srw@sun.com>
parents: 1688
diff changeset
   444
                                self.__lock.release()
139720e2e756 1668 image locking needed to prevent race conditions
Shawn Walker <srw@sun.com>
parents: 1688
diff changeset
   445
                                raise
2043
852501e586d0 14615 image-update claims failure for un-aquired lock and still succeeds
johansen <johansen@opensolaris.org>
parents: 2035
diff changeset
   446
2073
9fcacc9e5eaa 16998 transport should support publisher-specific write and read caches
Shawn Walker <shawn.walker@oracle.com>
parents: 2069
diff changeset
   447
                        if exc and not allow_unprivileged:
2043
852501e586d0 14615 image-update claims failure for un-aquired lock and still succeeds
johansen <johansen@opensolaris.org>
parents: 2035
diff changeset
   448
                                self.__lock.release()
2073
9fcacc9e5eaa 16998 transport should support publisher-specific write and read caches
Shawn Walker <shawn.walker@oracle.com>
parents: 2069
diff changeset
   449
                                raise exc
1710
139720e2e756 1668 image locking needed to prevent race conditions
Shawn Walker <srw@sun.com>
parents: 1688
diff changeset
   450
                except:
139720e2e756 1668 image locking needed to prevent race conditions
Shawn Walker <srw@sun.com>
parents: 1688
diff changeset
   451
                        # If process lock fails, ensure thread lock is released.
139720e2e756 1668 image locking needed to prevent race conditions
Shawn Walker <srw@sun.com>
parents: 1688
diff changeset
   452
                        self.__lock.release()
139720e2e756 1668 image locking needed to prevent race conditions
Shawn Walker <srw@sun.com>
parents: 1688
diff changeset
   453
                        raise
139720e2e756 1668 image locking needed to prevent race conditions
Shawn Walker <srw@sun.com>
parents: 1688
diff changeset
   454
139720e2e756 1668 image locking needed to prevent race conditions
Shawn Walker <srw@sun.com>
parents: 1688
diff changeset
   455
        def unlock(self):
139720e2e756 1668 image locking needed to prevent race conditions
Shawn Walker <srw@sun.com>
parents: 1688
diff changeset
   456
                """Unlocks the image."""
139720e2e756 1668 image locking needed to prevent race conditions
Shawn Walker <srw@sun.com>
parents: 1688
diff changeset
   457
2028
b2c674e6ee28 16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents: 2026
diff changeset
   458
                try:
2043
852501e586d0 14615 image-update claims failure for un-aquired lock and still succeeds
johansen <johansen@opensolaris.org>
parents: 2035
diff changeset
   459
                        if self.__lockfile:
852501e586d0 14615 image-update claims failure for un-aquired lock and still succeeds
johansen <johansen@opensolaris.org>
parents: 2035
diff changeset
   460
                                self.__lockfile.unlock()
2028
b2c674e6ee28 16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents: 2026
diff changeset
   461
                finally:
b2c674e6ee28 16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents: 2026
diff changeset
   462
                        self.__lock.release()
1710
139720e2e756 1668 image locking needed to prevent race conditions
Shawn Walker <srw@sun.com>
parents: 1688
diff changeset
   463
582
303fa3b78f93 3588 Ensure that users don't image-create over top of an image
Brad Hall <bhall@eng.sun.com>
parents: 577
diff changeset
   464
        def image_type(self, d):
303fa3b78f93 3588 Ensure that users don't image-create over top of an image
Brad Hall <bhall@eng.sun.com>
parents: 577
diff changeset
   465
                """Returns the type of image at directory: d; or None"""
303fa3b78f93 3588 Ensure that users don't image-create over top of an image
Brad Hall <bhall@eng.sun.com>
parents: 577
diff changeset
   466
                rv = None
2144
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
   467
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
   468
                def is_image(sub_d, prefix):
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
   469
                        # First check for new image configuration file.
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
   470
                        if os.path.isfile(os.path.join(sub_d, prefix,
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
   471
                            "pkg5.image")):
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
   472
                                # Regardless of directory structure, assume
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
   473
                                # this is an image for now.
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
   474
                                return True
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
   475
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
   476
                        if not os.path.isfile(os.path.join(sub_d, prefix,
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
   477
                            "cfg_cache")):
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
   478
                                # For older formats, if configuration is
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
   479
                                # missing, this can't be an image.
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
   480
                                return False
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
   481
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
   482
                        # Configuration exists, but for older formats,
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
   483
                        # all of these directories have to exist.
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
   484
                        for n in ("state", "pkg"):
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
   485
                                if not os.path.isdir(os.path.join(sub_d, prefix,
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
   486
                                    n)):
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
   487
                                        return False
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
   488
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
   489
                        return True
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
   490
582
303fa3b78f93 3588 Ensure that users don't image-create over top of an image
Brad Hall <bhall@eng.sun.com>
parents: 577
diff changeset
   491
                if os.path.isdir(os.path.join(d, img_user_prefix)) and \
2144
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
   492
                    is_image(d, img_user_prefix):
582
303fa3b78f93 3588 Ensure that users don't image-create over top of an image
Brad Hall <bhall@eng.sun.com>
parents: 577
diff changeset
   493
                        rv = IMG_USER
2144
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
   494
                elif os.path.isdir(os.path.join(d, img_root_prefix)) and \
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
   495
                    is_image(d, img_root_prefix):
582
303fa3b78f93 3588 Ensure that users don't image-create over top of an image
Brad Hall <bhall@eng.sun.com>
parents: 577
diff changeset
   496
                        rv = IMG_ENTIRE
303fa3b78f93 3588 Ensure that users don't image-create over top of an image
Brad Hall <bhall@eng.sun.com>
parents: 577
diff changeset
   497
                return rv
926
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 922
diff changeset
   498
1352
5c92c9d342ef 11065 client v1 catalog support for v0 catalogs
Shawn Walker <srw@sun.com>
parents: 1328
diff changeset
   499
        def find_root(self, d, exact_match=False, progtrack=None):
289
c2e63370fb2b 160 Make IPS cross-platform for use across other supported OS's
Tom Mueller <Tom.Mueller@Sun.COM>
parents: 285
diff changeset
   500
                # Ascend from the given directory d to find first
1370
face1fe579ab 11400 image objects should always have a root
Brock Pytlik <bpytlik@sun.com>
parents: 1369
diff changeset
   501
                # encountered image.  If exact_match is true, if the
561
be1ad23e7704 1651 pkg treats -R <bogus-dir> as "use the image at /"
Brock Pytlik <bpytlik@sun.com>
parents: 560
diff changeset
   502
                # image found doesn't match startd, raise an
be1ad23e7704 1651 pkg treats -R <bogus-dir> as "use the image at /"
Brock Pytlik <bpytlik@sun.com>
parents: 560
diff changeset
   503
                # ImageNotFoundException.
1370
face1fe579ab 11400 image objects should always have a root
Brock Pytlik <bpytlik@sun.com>
parents: 1369
diff changeset
   504
289
c2e63370fb2b 160 Make IPS cross-platform for use across other supported OS's
Tom Mueller <Tom.Mueller@Sun.COM>
parents: 285
diff changeset
   505
                startd = d
c2e63370fb2b 160 Make IPS cross-platform for use across other supported OS's
Tom Mueller <Tom.Mueller@Sun.COM>
parents: 285
diff changeset
   506
                # eliminate problem if relative path such as "." is passed in
c2e63370fb2b 160 Make IPS cross-platform for use across other supported OS's
Tom Mueller <Tom.Mueller@Sun.COM>
parents: 285
diff changeset
   507
                d = os.path.realpath(d)
2158
5a688b5b92a3 15864 inferring image location from current working directory can be harmful
Shawn Walker <shawn.walker@oracle.com>
parents: 2154
diff changeset
   508
26
ab188d4682d5 catalog processing begins
"Stephen Hahn <sch@sun.com>"
parents: 22
diff changeset
   509
                while True:
582
303fa3b78f93 3588 Ensure that users don't image-create over top of an image
Brad Hall <bhall@eng.sun.com>
parents: 577
diff changeset
   510
                        imgtype = self.image_type(d)
2158
5a688b5b92a3 15864 inferring image location from current working directory can be harmful
Shawn Walker <shawn.walker@oracle.com>
parents: 2154
diff changeset
   511
                        if imgtype in (IMG_USER, IMG_ENTIRE):
561
be1ad23e7704 1651 pkg treats -R <bogus-dir> as "use the image at /"
Brock Pytlik <bpytlik@sun.com>
parents: 560
diff changeset
   512
                                if exact_match and \
be1ad23e7704 1651 pkg treats -R <bogus-dir> as "use the image at /"
Brock Pytlik <bpytlik@sun.com>
parents: 560
diff changeset
   513
                                    os.path.realpath(startd) != \
be1ad23e7704 1651 pkg treats -R <bogus-dir> as "use the image at /"
Brock Pytlik <bpytlik@sun.com>
parents: 560
diff changeset
   514
                                    os.path.realpath(d):
2073
9fcacc9e5eaa 16998 transport should support publisher-specific write and read caches
Shawn Walker <shawn.walker@oracle.com>
parents: 2069
diff changeset
   515
                                        raise apx.ImageNotFoundException(
561
be1ad23e7704 1651 pkg treats -R <bogus-dir> as "use the image at /"
Brock Pytlik <bpytlik@sun.com>
parents: 560
diff changeset
   516
                                            exact_match, startd, d)
2339
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2335
diff changeset
   517
                                live_root = misc.liveroot()
2158
5a688b5b92a3 15864 inferring image location from current working directory can be harmful
Shawn Walker <shawn.walker@oracle.com>
parents: 2154
diff changeset
   518
                                if not exact_match and d != live_root and \
5a688b5b92a3 15864 inferring image location from current working directory can be harmful
Shawn Walker <shawn.walker@oracle.com>
parents: 2154
diff changeset
   519
                                    not self.allow_ambiguous and \
5a688b5b92a3 15864 inferring image location from current working directory can be harmful
Shawn Walker <shawn.walker@oracle.com>
parents: 2154
diff changeset
   520
                                    portable.osname == "sunos":
5a688b5b92a3 15864 inferring image location from current working directory can be harmful
Shawn Walker <shawn.walker@oracle.com>
parents: 2154
diff changeset
   521
                                        # On Solaris, consider an image found
5a688b5b92a3 15864 inferring image location from current working directory can be harmful
Shawn Walker <shawn.walker@oracle.com>
parents: 2154
diff changeset
   522
                                        # somewhere other than the live root an
5a688b5b92a3 15864 inferring image location from current working directory can be harmful
Shawn Walker <shawn.walker@oracle.com>
parents: 2154
diff changeset
   523
                                        # an error if an exact match wasn't
5a688b5b92a3 15864 inferring image location from current working directory can be harmful
Shawn Walker <shawn.walker@oracle.com>
parents: 2154
diff changeset
   524
                                        # requested.  (This prevents accidental
5a688b5b92a3 15864 inferring image location from current working directory can be harmful
Shawn Walker <shawn.walker@oracle.com>
parents: 2154
diff changeset
   525
                                        # use of nested images.) It is not
5a688b5b92a3 15864 inferring image location from current working directory can be harmful
Shawn Walker <shawn.walker@oracle.com>
parents: 2154
diff changeset
   526
                                        # desirable to do this on other
5a688b5b92a3 15864 inferring image location from current working directory can be harmful
Shawn Walker <shawn.walker@oracle.com>
parents: 2154
diff changeset
   527
                                        # platforms as non-root images are the
5a688b5b92a3 15864 inferring image location from current working directory can be harmful
Shawn Walker <shawn.walker@oracle.com>
parents: 2154
diff changeset
   528
                                        # norm.
5a688b5b92a3 15864 inferring image location from current working directory can be harmful
Shawn Walker <shawn.walker@oracle.com>
parents: 2154
diff changeset
   529
                                        raise apx.ImageLocationAmbiguous(d,
5a688b5b92a3 15864 inferring image location from current working directory can be harmful
Shawn Walker <shawn.walker@oracle.com>
parents: 2154
diff changeset
   530
                                            live_root=live_root)
1352
5c92c9d342ef 11065 client v1 catalog support for v0 catalogs
Shawn Walker <srw@sun.com>
parents: 1328
diff changeset
   531
                                self.__set_dirs(imgtype=imgtype, root=d,
2339
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2335
diff changeset
   532
                                    startd=startd, progtrack=progtrack)
26
ab188d4682d5 catalog processing begins
"Stephen Hahn <sch@sun.com>"
parents: 22
diff changeset
   533
                                return
ab188d4682d5 catalog processing begins
"Stephen Hahn <sch@sun.com>"
parents: 22
diff changeset
   534
289
c2e63370fb2b 160 Make IPS cross-platform for use across other supported OS's
Tom Mueller <Tom.Mueller@Sun.COM>
parents: 285
diff changeset
   535
                        # XXX follow symlinks or not?
c2e63370fb2b 160 Make IPS cross-platform for use across other supported OS's
Tom Mueller <Tom.Mueller@Sun.COM>
parents: 285
diff changeset
   536
                        oldpath = d
c2e63370fb2b 160 Make IPS cross-platform for use across other supported OS's
Tom Mueller <Tom.Mueller@Sun.COM>
parents: 285
diff changeset
   537
                        d = os.path.normpath(os.path.join(d, os.path.pardir))
26
ab188d4682d5 catalog processing begins
"Stephen Hahn <sch@sun.com>"
parents: 22
diff changeset
   538
289
c2e63370fb2b 160 Make IPS cross-platform for use across other supported OS's
Tom Mueller <Tom.Mueller@Sun.COM>
parents: 285
diff changeset
   539
                        # Make sure we are making progress and aren't in an
c2e63370fb2b 160 Make IPS cross-platform for use across other supported OS's
Tom Mueller <Tom.Mueller@Sun.COM>
parents: 285
diff changeset
   540
                        # infinite loop.
c2e63370fb2b 160 Make IPS cross-platform for use across other supported OS's
Tom Mueller <Tom.Mueller@Sun.COM>
parents: 285
diff changeset
   541
                        #
c2e63370fb2b 160 Make IPS cross-platform for use across other supported OS's
Tom Mueller <Tom.Mueller@Sun.COM>
parents: 285
diff changeset
   542
                        # (XXX - Need to deal with symlinks here too)
c2e63370fb2b 160 Make IPS cross-platform for use across other supported OS's
Tom Mueller <Tom.Mueller@Sun.COM>
parents: 285
diff changeset
   543
                        if d == oldpath:
2073
9fcacc9e5eaa 16998 transport should support publisher-specific write and read caches
Shawn Walker <shawn.walker@oracle.com>
parents: 2069
diff changeset
   544
                                raise apx.ImageNotFoundException(
596
f4519e2a99bc 3704 InventoryException raised if optional dependencies not in catalog
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 583
diff changeset
   545
                                    exact_match, startd, d)
26
ab188d4682d5 catalog processing begins
"Stephen Hahn <sch@sun.com>"
parents: 22
diff changeset
   546
1352
5c92c9d342ef 11065 client v1 catalog support for v0 catalogs
Shawn Walker <srw@sun.com>
parents: 1328
diff changeset
   547
        def __load_config(self):
104
ecfc64baf22e add naive configuration, naive global/preferred authorities, delete content
Stephen Hahn <sch@sun.com>
parents: 87
diff changeset
   548
                """Load this image's cached configuration from the default
2144
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
   549
                location.  This function should not be called anywhere other
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
   550
                than __set_dirs()."""
104
ecfc64baf22e add naive configuration, naive global/preferred authorities, delete content
Stephen Hahn <sch@sun.com>
parents: 87
diff changeset
   551
ecfc64baf22e add naive configuration, naive global/preferred authorities, delete content
Stephen Hahn <sch@sun.com>
parents: 87
diff changeset
   552
                # XXX Incomplete with respect to doc/image.txt description of
ecfc64baf22e add naive configuration, naive global/preferred authorities, delete content
Stephen Hahn <sch@sun.com>
parents: 87
diff changeset
   553
                # configuration.
ecfc64baf22e add naive configuration, naive global/preferred authorities, delete content
Stephen Hahn <sch@sun.com>
parents: 87
diff changeset
   554
ecfc64baf22e add naive configuration, naive global/preferred authorities, delete content
Stephen Hahn <sch@sun.com>
parents: 87
diff changeset
   555
                if self.root == None:
2144
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
   556
                        raise RuntimeError("self.root must be set")
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
   557
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
   558
                version = None
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
   559
                if self.version > -1:
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
   560
                        if self.version >= 3:
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
   561
                                # Configuration version is currently 3
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
   562
                                # for all v3 images and newer.
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
   563
                                version = 3
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
   564
                        else:
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
   565
                                version = self.version
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
   566
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
   567
                self.cfg = imageconfig.ImageConfig(self.__cfgpathname,
2310
ce10607d5332 11684 desire option to not propagate certs to non-global zones
Brock Pytlik <brock.pytlik@oracle.com>
parents: 2293
diff changeset
   568
                    self.root, version=version,
ce10607d5332 11684 desire option to not propagate certs to non-global zones
Brock Pytlik <brock.pytlik@oracle.com>
parents: 2293
diff changeset
   569
                    overrides=self.__property_overrides)
ce10607d5332 11684 desire option to not propagate certs to non-global zones
Brock Pytlik <brock.pytlik@oracle.com>
parents: 2293
diff changeset
   570
ce10607d5332 11684 desire option to not propagate certs to non-global zones
Brock Pytlik <brock.pytlik@oracle.com>
parents: 2293
diff changeset
   571
                if self.__upgraded:
ce10607d5332 11684 desire option to not propagate certs to non-global zones
Brock Pytlik <brock.pytlik@oracle.com>
parents: 2293
diff changeset
   572
                        self.cfg = imageconfig.BlendedConfig(self.cfg,
ce10607d5332 11684 desire option to not propagate certs to non-global zones
Brock Pytlik <brock.pytlik@oracle.com>
parents: 2293
diff changeset
   573
                            self.get_catalog(self.IMG_CATALOG_INSTALLED).\
ce10607d5332 11684 desire option to not propagate certs to non-global zones
Brock Pytlik <brock.pytlik@oracle.com>
parents: 2293
diff changeset
   574
                                get_package_counts_by_pub(),
ce10607d5332 11684 desire option to not propagate certs to non-global zones
Brock Pytlik <brock.pytlik@oracle.com>
parents: 2293
diff changeset
   575
                            self.imgdir, self.transport,
ce10607d5332 11684 desire option to not propagate certs to non-global zones
Brock Pytlik <brock.pytlik@oracle.com>
parents: 2293
diff changeset
   576
                            self.cfg.get_policy("use-system-repo"))
1352
5c92c9d342ef 11065 client v1 catalog support for v0 catalogs
Shawn Walker <srw@sun.com>
parents: 1328
diff changeset
   577
551
233f0eeddd02 856 Image properties
Tom Mueller <Tom.Mueller@sun.com>
parents: 548
diff changeset
   578
        def save_config(self):
1143
71becfca5cfd 8777 image-create traceback with --no-refresh
Shawn Walker <srw@sun.com>
parents: 1141
diff changeset
   579
                # First, create the image directories if they haven't been, so
2097
068cc63b4d6e 17055 image configuration should use pkg.config classes
Shawn Walker <shawn.walker@oracle.com>
parents: 2092
diff changeset
   580
                # the configuration file can be written.
1143
71becfca5cfd 8777 image-create traceback with --no-refresh
Shawn Walker <srw@sun.com>
parents: 1141
diff changeset
   581
                self.mkdirs()
2097
068cc63b4d6e 17055 image configuration should use pkg.config classes
Shawn Walker <shawn.walker@oracle.com>
parents: 2092
diff changeset
   582
                self.cfg.write()
2310
ce10607d5332 11684 desire option to not propagate certs to non-global zones
Brock Pytlik <brock.pytlik@oracle.com>
parents: 2293
diff changeset
   583
                if self.is_liveroot() and \
2335
33734ca16f74 18254 system repository package should be renamed
Brock Pytlik <brock.pytlik@oracle.com>
parents: 2331
diff changeset
   584
                    smf.get_state(
33734ca16f74 18254 system repository package should be renamed
Brock Pytlik <brock.pytlik@oracle.com>
parents: 2331
diff changeset
   585
                        "svc:/application/pkg/system-repository:default") in \
2310
ce10607d5332 11684 desire option to not propagate certs to non-global zones
Brock Pytlik <brock.pytlik@oracle.com>
parents: 2293
diff changeset
   586
                    (smf.SMF_SVC_TMP_ENABLED, smf.SMF_SVC_ENABLED):
2335
33734ca16f74 18254 system repository package should be renamed
Brock Pytlik <brock.pytlik@oracle.com>
parents: 2331
diff changeset
   587
                        smf.refresh([
33734ca16f74 18254 system repository package should be renamed
Brock Pytlik <brock.pytlik@oracle.com>
parents: 2331
diff changeset
   588
                            "svc:/application/pkg/system-repository:default"])
2330
9451b3f28f4c 17558 pkg configuration can't be updated if a publisher source points to down NFS server
Shawn Walker <shawn.walker@oracle.com>
parents: 2310
diff changeset
   589
9451b3f28f4c 17558 pkg configuration can't be updated if a publisher source points to down NFS server
Shawn Walker <shawn.walker@oracle.com>
parents: 2310
diff changeset
   590
                # This ensures all old transport configuration is thrown away.
9451b3f28f4c 17558 pkg configuration can't be updated if a publisher source points to down NFS server
Shawn Walker <shawn.walker@oracle.com>
parents: 2310
diff changeset
   591
                self.transport = transport.Transport(
9451b3f28f4c 17558 pkg configuration can't be updated if a publisher source points to down NFS server
Shawn Walker <shawn.walker@oracle.com>
parents: 2310
diff changeset
   592
                    transport.ImageTransportCfg(self))
551
233f0eeddd02 856 Image properties
Tom Mueller <Tom.Mueller@sun.com>
parents: 548
diff changeset
   593
2144
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
   594
        def mkdirs(self, root=None, version=None):
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
   595
                """Create any missing parts of the image's directory structure.
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
   596
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
   597
                'root' is an optional path to a directory to create the new
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
   598
                image structure in.  If not provided, the current image
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
   599
                directory is the default.
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
   600
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
   601
                'version' is an optional integer value indicating the version
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
   602
                of the structure to create.  If not provided, the current image
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
   603
                version is the default.
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
   604
                """
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
   605
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
   606
                if not root:
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
   607
                        root = self.imgdir
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
   608
                if not version:
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
   609
                        version = self.version
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
   610
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
   611
                if version == self.CURRENT_VERSION:
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
   612
                        img_dirs = ["cache/index", "cache/publisher",
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
   613
                            "cache/tmp", "gui_cache", "history", "license",
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
   614
                            "lost+found", "publisher", "ssl", "state/installed",
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
   615
                            "state/known"]
2183
21ae45e8dfcf 17581 There should be a way of removing a package as part of upgrade
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2178
diff changeset
   616
                else:
2144
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
   617
                        img_dirs = ["download", "file", "gui_cache", "history",
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
   618
                            "index", "lost+found", "pkg", "publisher",
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
   619
                            "state/installed", "state/known", "tmp"]
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
   620
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
   621
                for sd in img_dirs:
1352
5c92c9d342ef 11065 client v1 catalog support for v0 catalogs
Shawn Walker <srw@sun.com>
parents: 1328
diff changeset
   622
                        try:
2144
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
   623
                                misc.makedirs(os.path.join(root, sd))
1352
5c92c9d342ef 11065 client v1 catalog support for v0 catalogs
Shawn Walker <srw@sun.com>
parents: 1328
diff changeset
   624
                        except EnvironmentError, e:
2073
9fcacc9e5eaa 16998 transport should support publisher-specific write and read caches
Shawn Walker <shawn.walker@oracle.com>
parents: 2069
diff changeset
   625
                                raise apx._convert_error(e)
29
f621f1df0849 fix install target; correct imports for module renames
"Stephen Hahn <sch@sun.com>"
parents: 26
diff changeset
   626
2339
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2335
diff changeset
   627
        def __set_dirs(self, imgtype, root, startd=None, progtrack=None,
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2335
diff changeset
   628
            purge=False):
2144
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
   629
                # Ensure upgraded status is reset.
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
   630
                self.__upgraded = False
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
   631
2339
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2335
diff changeset
   632
                if not self.__allow_liveroot() and root == misc.liveroot():
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2335
diff changeset
   633
                        if startd == None:
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2335
diff changeset
   634
                                startd = root
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2335
diff changeset
   635
                        raise RuntimeError, \
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2335
diff changeset
   636
                           "Live root image access is disabled but was \
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2335
diff changeset
   637
                           attempted.\nliveroot: %s\nimage path: %s" % \
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2335
diff changeset
   638
                           (misc.liveroot(), startd)
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2335
diff changeset
   639
554
fe196874250d 3508 zone install should utilize/populate global zone d/l cache
Dan Price <dp@eng.sun.com>
parents: 552
diff changeset
   640
                self.type = imgtype
22
379f0f6809ff pkgsend open, pkgsend add file, pkgsend close; Transaction object
"Stephen Hahn <sch@sun.com>"
parents: 19
diff changeset
   641
                self.root = root
379f0f6809ff pkgsend open, pkgsend add file, pkgsend close; Transaction object
"Stephen Hahn <sch@sun.com>"
parents: 19
diff changeset
   642
                if self.type == IMG_USER:
271
ec8a7669bff2 659 package that delivers existing automounter mountpoint fails installation
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 268
diff changeset
   643
                        self.img_prefix = img_user_prefix
22
379f0f6809ff pkgsend open, pkgsend add file, pkgsend close; Transaction object
"Stephen Hahn <sch@sun.com>"
parents: 19
diff changeset
   644
                else:
271
ec8a7669bff2 659 package that delivers existing automounter mountpoint fails installation
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 268
diff changeset
   645
                        self.img_prefix = img_root_prefix
993
7cfbab7739c3 588 directory remove of cwd fails due to EPERM or EINVAL
Danek Duvall <danek.duvall@sun.com>
parents: 988
diff changeset
   646
2330
9451b3f28f4c 17558 pkg configuration can't be updated if a publisher source points to down NFS server
Shawn Walker <shawn.walker@oracle.com>
parents: 2310
diff changeset
   647
                # Use a new Transport object every time location is changed.
9451b3f28f4c 17558 pkg configuration can't be updated if a publisher source points to down NFS server
Shawn Walker <shawn.walker@oracle.com>
parents: 2310
diff changeset
   648
                self.transport = transport.Transport(
9451b3f28f4c 17558 pkg configuration can't be updated if a publisher source points to down NFS server
Shawn Walker <shawn.walker@oracle.com>
parents: 2310
diff changeset
   649
                    transport.ImageTransportCfg(self))
9451b3f28f4c 17558 pkg configuration can't be updated if a publisher source points to down NFS server
Shawn Walker <shawn.walker@oracle.com>
parents: 2310
diff changeset
   650
2339
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2335
diff changeset
   651
                # cleanup specified path
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2335
diff changeset
   652
                if os.path.isdir(root):
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2335
diff changeset
   653
                        cwd = os.getcwd()
993
7cfbab7739c3 588 directory remove of cwd fails due to EPERM or EINVAL
Danek Duvall <danek.duvall@sun.com>
parents: 988
diff changeset
   654
                        os.chdir(root)
1133
2c28e4526a6e 8720 image-create with a non-absolute path can cause strange results
Shawn Walker <srw@sun.com>
parents: 1125
diff changeset
   655
                        self.root = os.getcwd()
2339
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2335
diff changeset
   656
                        os.chdir(cwd)
1402
c0fb578f911a 11384 cascading failure hides exception during image creation
Shawn Walker <srw@sun.com>
parents: 1370
diff changeset
   657
1710
139720e2e756 1668 image locking needed to prevent race conditions
Shawn Walker <srw@sun.com>
parents: 1688
diff changeset
   658
                # If current image is locked, then it should be unlocked
139720e2e756 1668 image locking needed to prevent race conditions
Shawn Walker <srw@sun.com>
parents: 1688
diff changeset
   659
                # and then relocked after the imgdir is changed.  This
139720e2e756 1668 image locking needed to prevent race conditions
Shawn Walker <srw@sun.com>
parents: 1688
diff changeset
   660
                # ensures that alternate BE scenarios work.
2028
b2c674e6ee28 16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents: 2026
diff changeset
   661
                relock = self.imgdir and self.locked
1710
139720e2e756 1668 image locking needed to prevent race conditions
Shawn Walker <srw@sun.com>
parents: 1688
diff changeset
   662
                if relock:
139720e2e756 1668 image locking needed to prevent race conditions
Shawn Walker <srw@sun.com>
parents: 1688
diff changeset
   663
                        self.unlock()
139720e2e756 1668 image locking needed to prevent race conditions
Shawn Walker <srw@sun.com>
parents: 1688
diff changeset
   664
2073
9fcacc9e5eaa 16998 transport should support publisher-specific write and read caches
Shawn Walker <shawn.walker@oracle.com>
parents: 2069
diff changeset
   665
                # Must set imgdir first.
429
6c9cbb6e6600 983 pkg search returns just one action per package/token-type combo
Brock Pytlik <bpytlik@sun.com>
parents: 423
diff changeset
   666
                self.imgdir = os.path.join(self.root, self.img_prefix)
2073
9fcacc9e5eaa 16998 transport should support publisher-specific write and read caches
Shawn Walker <shawn.walker@oracle.com>
parents: 2069
diff changeset
   667
2144
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
   668
                # Force a reset of version.
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
   669
                self.version = -1
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
   670
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
   671
                # Assume version 4+ configuration location.
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
   672
                self.__cfgpathname = os.path.join(self.imgdir, "pkg5.image")
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
   673
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
   674
                # In the case of initial image creation, purge is specified
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
   675
                # to ensure that when an image is created over an existing
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
   676
                # one, any old data is removed first.
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
   677
                if purge and os.path.exists(self.imgdir):
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
   678
                        for entry in os.listdir(self.imgdir):
2178
7c123147a909 17680 image creation should preserve ssl directory if it already exists
Shawn Walker <shawn.walker@oracle.com>
parents: 2158
diff changeset
   679
                                if entry == "ssl":
7c123147a909 17680 image creation should preserve ssl directory if it already exists
Shawn Walker <shawn.walker@oracle.com>
parents: 2158
diff changeset
   680
                                        # Preserve certs and keys directory
7c123147a909 17680 image creation should preserve ssl directory if it already exists
Shawn Walker <shawn.walker@oracle.com>
parents: 2158
diff changeset
   681
                                        # as a special exception.
7c123147a909 17680 image creation should preserve ssl directory if it already exists
Shawn Walker <shawn.walker@oracle.com>
parents: 2158
diff changeset
   682
                                        continue
2144
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
   683
                                epath = os.path.join(self.imgdir, entry)
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
   684
                                try:
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
   685
                                        if os.path.isdir(epath):
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
   686
                                                shutil.rmtree(epath)
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
   687
                                        else:
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
   688
                                                portable.remove(epath)
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
   689
                                except EnvironmentError, e:
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
   690
                                        raise apx._convert_error(e)
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
   691
                elif not purge:
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
   692
                        # Determine if the version 4 configuration file exists.
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
   693
                        if not os.path.exists(self.__cfgpathname):
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
   694
                                self.__cfgpathname = os.path.join(self.imgdir,
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
   695
                                    "cfg_cache")
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
   696
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
   697
                # Load the image configuration.
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
   698
                self.__load_config()
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
   699
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
   700
                if not purge:
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
   701
                        try:
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
   702
                                self.version = int(self.cfg.get_property("image",
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
   703
                                    "version"))
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
   704
                        except (cfg.PropertyConfigError, ValueError):
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
   705
                                # If version couldn't be read from
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
   706
                                # configuration, then allow fallback
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
   707
                                # path below to set things right.
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
   708
                                self.version = -1
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
   709
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
   710
                if self.version <= 0:
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
   711
                        # If version doesn't exist, attempt to determine version
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
   712
                        # based on structure.
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
   713
                        pub_root = os.path.join(self.imgdir, IMG_PUB_DIR)
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
   714
                        if purge:
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
   715
                                # This is a new image.
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
   716
                                self.version = self.CURRENT_VERSION
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
   717
                        elif os.path.exists(pub_root):
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
   718
                                cache_root = os.path.join(self.imgdir, "cache")
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
   719
                                if os.path.exists(cache_root):
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
   720
                                        # The image must be corrupted, as the
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
   721
                                        # version should have been loaded from
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
   722
                                        # configuration.  For now, raise an
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
   723
                                        # exception.  In the future, this
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
   724
                                        # behaviour should probably be optional
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
   725
                                        # so that pkg fix or pkg verify can
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
   726
                                        # still use the image.
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
   727
                                        raise apx.UnsupportedImageError(
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
   728
                                            self.root)
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
   729
                                else:
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
   730
                                        # Assume version 3 image.
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
   731
                                        self.version = 3
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
   732
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
   733
                                # Reload image configuration again now that
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
   734
                                # version has been determined so that property
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
   735
                                # definitions match.
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
   736
                                self.__load_config()
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
   737
                        elif os.path.exists(os.path.join(self.imgdir,
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
   738
                            "catalog")):
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
   739
                                self.version = 2
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
   740
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
   741
                                # Reload image configuration again now that
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
   742
                                # version has been determined so that property
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
   743
                                # definitions match.
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
   744
                                self.__load_config()
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
   745
                        else:
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
   746
                                # Format is too old or invalid.
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
   747
                                raise apx.UnsupportedImageError(self.root)
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
   748
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
   749
                if self.version > self.CURRENT_VERSION or self.version < 2:
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
   750
                        # Image is too new or too old.
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
   751
                        raise apx.UnsupportedImageError(self.root)
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
   752
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
   753
                # Ensure image version matches determined one; this must
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
   754
                # be set *after* the version checks above.
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
   755
                self.cfg.set_property("image", "version", self.version)
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
   756
2073
9fcacc9e5eaa 16998 transport should support publisher-specific write and read caches
Shawn Walker <shawn.walker@oracle.com>
parents: 2069
diff changeset
   757
                # Remaining dirs may now be set.
2144
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
   758
                if self.version == self.CURRENT_VERSION:
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
   759
                        self.__tmpdir = os.path.join(self.imgdir, "cache",
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
   760
                            "tmp")
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
   761
                else:
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
   762
                        self.__tmpdir = os.path.join(self.imgdir, "tmp")
2073
9fcacc9e5eaa 16998 transport should support publisher-specific write and read caches
Shawn Walker <shawn.walker@oracle.com>
parents: 2069
diff changeset
   763
                self._statedir = os.path.join(self.imgdir, "state")
2339
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2335
diff changeset
   764
                self.plandir = os.path.join(self.__tmpdir, "plan")
2073
9fcacc9e5eaa 16998 transport should support publisher-specific write and read caches
Shawn Walker <shawn.walker@oracle.com>
parents: 2069
diff changeset
   765
                self.update_index_dir()
9fcacc9e5eaa 16998 transport should support publisher-specific write and read caches
Shawn Walker <shawn.walker@oracle.com>
parents: 2069
diff changeset
   766
539
7486304966c5 1449 pkg requires operational history
Shawn Walker <shawn.walker@sun.com>
parents: 537
diff changeset
   767
                self.history.root_dir = self.imgdir
2043
852501e586d0 14615 image-update claims failure for un-aquired lock and still succeeds
johansen <johansen@opensolaris.org>
parents: 2035
diff changeset
   768
                self.__lockfile = lockfile.LockFile(os.path.join(self.imgdir,
852501e586d0 14615 image-update claims failure for un-aquired lock and still succeeds
johansen <johansen@opensolaris.org>
parents: 2035
diff changeset
   769
                    "lock"), set_lockstr=lockfile.client_lock_set_str,
852501e586d0 14615 image-update claims failure for un-aquired lock and still succeeds
johansen <johansen@opensolaris.org>
parents: 2035
diff changeset
   770
                    get_lockstr=lockfile.client_lock_get_str,
2183
21ae45e8dfcf 17581 There should be a way of removing a package as part of upgrade
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2178
diff changeset
   771
                    failure_exc=apx.ImageLockedError,
2043
852501e586d0 14615 image-update claims failure for un-aquired lock and still succeeds
johansen <johansen@opensolaris.org>
parents: 2035
diff changeset
   772
                    provide_mutex=False)
2183
21ae45e8dfcf 17581 There should be a way of removing a package as part of upgrade
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2178
diff changeset
   773
1710
139720e2e756 1668 image locking needed to prevent race conditions
Shawn Walker <srw@sun.com>
parents: 1688
diff changeset
   774
                if relock:
139720e2e756 1668 image locking needed to prevent race conditions
Shawn Walker <srw@sun.com>
parents: 1688
diff changeset
   775
                        self.lock()
139720e2e756 1668 image locking needed to prevent race conditions
Shawn Walker <srw@sun.com>
parents: 1688
diff changeset
   776
2144
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
   777
                # Setup cache directories.
2073
9fcacc9e5eaa 16998 transport should support publisher-specific write and read caches
Shawn Walker <shawn.walker@oracle.com>
parents: 2069
diff changeset
   778
                self.__read_cache_dirs = []
2144
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
   779
                self._incoming_cache_dir = None
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
   780
                self.__user_cache_dir = None
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
   781
                self.__write_cache_dir = None
2148
5625d3707d5b 17424 zone cache usage needs adjustment for new image format
Shawn Walker <shawn.walker@oracle.com>
parents: 2144
diff changeset
   782
                self.__write_cache_root = None
5625d3707d5b 17424 zone cache usage needs adjustment for new image format
Shawn Walker <shawn.walker@oracle.com>
parents: 2144
diff changeset
   783
                # The user specified cache is used as an additional place to
5625d3707d5b 17424 zone cache usage needs adjustment for new image format
Shawn Walker <shawn.walker@oracle.com>
parents: 2144
diff changeset
   784
                # read cache data from, but as the only place to store new
5625d3707d5b 17424 zone cache usage needs adjustment for new image format
Shawn Walker <shawn.walker@oracle.com>
parents: 2144
diff changeset
   785
                # cache data.
5625d3707d5b 17424 zone cache usage needs adjustment for new image format
Shawn Walker <shawn.walker@oracle.com>
parents: 2144
diff changeset
   786
                if "PKG_CACHEROOT" in os.environ:
5625d3707d5b 17424 zone cache usage needs adjustment for new image format
Shawn Walker <shawn.walker@oracle.com>
parents: 2144
diff changeset
   787
                        # If set, cache is structured like /var/pkg/publisher.
5625d3707d5b 17424 zone cache usage needs adjustment for new image format
Shawn Walker <shawn.walker@oracle.com>
parents: 2144
diff changeset
   788
                        # get_cachedirs() will build paths for each publisher's
5625d3707d5b 17424 zone cache usage needs adjustment for new image format
Shawn Walker <shawn.walker@oracle.com>
parents: 2144
diff changeset
   789
                        # cache using this directory.
5625d3707d5b 17424 zone cache usage needs adjustment for new image format
Shawn Walker <shawn.walker@oracle.com>
parents: 2144
diff changeset
   790
                        self.__user_cache_dir = os.path.normpath(
5625d3707d5b 17424 zone cache usage needs adjustment for new image format
Shawn Walker <shawn.walker@oracle.com>
parents: 2144
diff changeset
   791
                            os.environ["PKG_CACHEROOT"])
5625d3707d5b 17424 zone cache usage needs adjustment for new image format
Shawn Walker <shawn.walker@oracle.com>
parents: 2144
diff changeset
   792
                        self.__write_cache_root = self.__user_cache_dir
5625d3707d5b 17424 zone cache usage needs adjustment for new image format
Shawn Walker <shawn.walker@oracle.com>
parents: 2144
diff changeset
   793
                elif "PKG_CACHEDIR" in os.environ:
5625d3707d5b 17424 zone cache usage needs adjustment for new image format
Shawn Walker <shawn.walker@oracle.com>
parents: 2144
diff changeset
   794
                        # If set, cache is a flat structure that is used for
5625d3707d5b 17424 zone cache usage needs adjustment for new image format
Shawn Walker <shawn.walker@oracle.com>
parents: 2144
diff changeset
   795
                        # all publishers.
2073
9fcacc9e5eaa 16998 transport should support publisher-specific write and read caches
Shawn Walker <shawn.walker@oracle.com>
parents: 2069
diff changeset
   796
                        self.__user_cache_dir = os.path.normpath(
554
fe196874250d 3508 zone install should utilize/populate global zone d/l cache
Dan Price <dp@eng.sun.com>
parents: 552
diff changeset
   797
                            os.environ["PKG_CACHEDIR"])
2148
5625d3707d5b 17424 zone cache usage needs adjustment for new image format
Shawn Walker <shawn.walker@oracle.com>
parents: 2144
diff changeset
   798
                        self.__write_cache_dir = self.__user_cache_dir
5625d3707d5b 17424 zone cache usage needs adjustment for new image format
Shawn Walker <shawn.walker@oracle.com>
parents: 2144
diff changeset
   799
                        # Since the cache structure is flat, add it to the
5625d3707d5b 17424 zone cache usage needs adjustment for new image format
Shawn Walker <shawn.walker@oracle.com>
parents: 2144
diff changeset
   800
                        # list of global read caches.
5625d3707d5b 17424 zone cache usage needs adjustment for new image format
Shawn Walker <shawn.walker@oracle.com>
parents: 2144
diff changeset
   801
                        self.__read_cache_dirs.append(self.__user_cache_dir)
5625d3707d5b 17424 zone cache usage needs adjustment for new image format
Shawn Walker <shawn.walker@oracle.com>
parents: 2144
diff changeset
   802
                if self.__user_cache_dir:
2144
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
   803
                        self._incoming_cache_dir = os.path.join(
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
   804
                            self.__user_cache_dir,
2148
5625d3707d5b 17424 zone cache usage needs adjustment for new image format
Shawn Walker <shawn.walker@oracle.com>
parents: 2144
diff changeset
   805
                            "incoming-%d" % os.getpid())
2144
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
   806
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
   807
                if self.version < 4:
2205
53d0be594162 3822 image plans should prevent conflicting actions from being installed
Danek Duvall <danek.duvall@oracle.com>
parents: 2200
diff changeset
   808
                        self.__action_cache_dir = self.temporary_dir()
53d0be594162 3822 image plans should prevent conflicting actions from being installed
Danek Duvall <danek.duvall@oracle.com>
parents: 2200
diff changeset
   809
                else:
53d0be594162 3822 image plans should prevent conflicting actions from being installed
Danek Duvall <danek.duvall@oracle.com>
parents: 2200
diff changeset
   810
                        self.__action_cache_dir = os.path.join(self.imgdir,
53d0be594162 3822 image plans should prevent conflicting actions from being installed
Danek Duvall <danek.duvall@oracle.com>
parents: 2200
diff changeset
   811
                            "cache")
53d0be594162 3822 image plans should prevent conflicting actions from being installed
Danek Duvall <danek.duvall@oracle.com>
parents: 2200
diff changeset
   812
53d0be594162 3822 image plans should prevent conflicting actions from being installed
Danek Duvall <danek.duvall@oracle.com>
parents: 2200
diff changeset
   813
                if self.version < 4:
2144
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
   814
                        if not self.__user_cache_dir:
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
   815
                                self.__write_cache_dir = os.path.join(
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
   816
                                    self.imgdir, "download")
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
   817
                                self._incoming_cache_dir = os.path.join(
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
   818
                                    self.__write_cache_dir,
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
   819
                                    "incoming-%d" % os.getpid())
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
   820
                        self.__read_cache_dirs.append(os.path.normpath(
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
   821
                            os.path.join(self.imgdir, "download")))
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
   822
                elif not self._incoming_cache_dir:
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
   823
                        # Only a global incoming cache exists for newer images.
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
   824
                        self._incoming_cache_dir = os.path.join(self.imgdir,
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
   825
                            "cache", "incoming-%d" % os.getpid())
554
fe196874250d 3508 zone install should utilize/populate global zone d/l cache
Dan Price <dp@eng.sun.com>
parents: 552
diff changeset
   826
1503
78d56b8ee320 12698 download directory must be accessible to non-privileged users
johansen <johansen@sun.com>
parents: 1463
diff changeset
   827
                # Test if we have the permissions to create the cache
2073
9fcacc9e5eaa 16998 transport should support publisher-specific write and read caches
Shawn Walker <shawn.walker@oracle.com>
parents: 2069
diff changeset
   828
                # incoming directory in this hierarchy.  If not, we'll need to
1503
78d56b8ee320 12698 download directory must be accessible to non-privileged users
johansen <johansen@sun.com>
parents: 1463
diff changeset
   829
                # move it somewhere else.
78d56b8ee320 12698 download directory must be accessible to non-privileged users
johansen <johansen@sun.com>
parents: 1463
diff changeset
   830
                try:
2073
9fcacc9e5eaa 16998 transport should support publisher-specific write and read caches
Shawn Walker <shawn.walker@oracle.com>
parents: 2069
diff changeset
   831
                        os.makedirs(self._incoming_cache_dir)
1503
78d56b8ee320 12698 download directory must be accessible to non-privileged users
johansen <johansen@sun.com>
parents: 1463
diff changeset
   832
                except EnvironmentError, e:
78d56b8ee320 12698 download directory must be accessible to non-privileged users
johansen <johansen@sun.com>
parents: 1463
diff changeset
   833
                        if e.errno == errno.EACCES or e.errno == errno.EROFS:
2073
9fcacc9e5eaa 16998 transport should support publisher-specific write and read caches
Shawn Walker <shawn.walker@oracle.com>
parents: 2069
diff changeset
   834
                                self.__write_cache_dir = tempfile.mkdtemp(
1672
3a71439a03f3 13021 file manager exceptions should be api exceptions
Shawn Walker <srw@sun.com>
parents: 1631
diff changeset
   835
                                    prefix="download-%d-" % os.getpid())
2073
9fcacc9e5eaa 16998 transport should support publisher-specific write and read caches
Shawn Walker <shawn.walker@oracle.com>
parents: 2069
diff changeset
   836
                                self._incoming_cache_dir = os.path.normpath(
9fcacc9e5eaa 16998 transport should support publisher-specific write and read caches
Shawn Walker <shawn.walker@oracle.com>
parents: 2069
diff changeset
   837
                                    os.path.join(self.__write_cache_dir,
1672
3a71439a03f3 13021 file manager exceptions should be api exceptions
Shawn Walker <srw@sun.com>
parents: 1631
diff changeset
   838
                                    "incoming-%d" % os.getpid()))
2073
9fcacc9e5eaa 16998 transport should support publisher-specific write and read caches
Shawn Walker <shawn.walker@oracle.com>
parents: 2069
diff changeset
   839
                                self.__read_cache_dirs.append(
9fcacc9e5eaa 16998 transport should support publisher-specific write and read caches
Shawn Walker <shawn.walker@oracle.com>
parents: 2069
diff changeset
   840
                                    self.__write_cache_dir)
1771
0965309e1d22 14654 temporary download directory is created regardless of use and never removed
Danek Duvall <danek.duvall@sun.com>
parents: 1755
diff changeset
   841
                                # There's no image cleanup hook, so we'll just
0965309e1d22 14654 temporary download directory is created regardless of use and never removed
Danek Duvall <danek.duvall@sun.com>
parents: 1755
diff changeset
   842
                                # remove this directory on process exit.
1783
94b0b7ed81ea 14800 traceback on exit when PKG_CACHEDIR is set but not writable
Danek Duvall <danek.duvall@sun.com>
parents: 1779
diff changeset
   843
                                atexit.register(shutil.rmtree,
2073
9fcacc9e5eaa 16998 transport should support publisher-specific write and read caches
Shawn Walker <shawn.walker@oracle.com>
parents: 2069
diff changeset
   844
                                    self.__write_cache_dir, ignore_errors=True)
1503
78d56b8ee320 12698 download directory must be accessible to non-privileged users
johansen <johansen@sun.com>
parents: 1463
diff changeset
   845
                else:
2073
9fcacc9e5eaa 16998 transport should support publisher-specific write and read caches
Shawn Walker <shawn.walker@oracle.com>
parents: 2069
diff changeset
   846
                        os.removedirs(self._incoming_cache_dir)
1503
78d56b8ee320 12698 download directory must be accessible to non-privileged users
johansen <johansen@sun.com>
parents: 1463
diff changeset
   847
1358
6fec8fbc15a6 11324 package state written to parent boot environment during image-update
Shawn Walker <srw@sun.com>
parents: 1353
diff changeset
   848
                # Forcibly discard image catalogs so they can be re-loaded
6fec8fbc15a6 11324 package state written to parent boot environment during image-update
Shawn Walker <srw@sun.com>
parents: 1353
diff changeset
   849
                # from the new location if they are already loaded.  This
6fec8fbc15a6 11324 package state written to parent boot environment during image-update
Shawn Walker <srw@sun.com>
parents: 1353
diff changeset
   850
                # also prevents scribbling on image state information in
6fec8fbc15a6 11324 package state written to parent boot environment during image-update
Shawn Walker <srw@sun.com>
parents: 1353
diff changeset
   851
                # the wrong location.
1463
0ef25025d601 12340 catalog storage performance regression
Shawn Walker <srw@sun.com>
parents: 1461
diff changeset
   852
                self.__init_catalogs()
1358
6fec8fbc15a6 11324 package state written to parent boot environment during image-update
Shawn Walker <srw@sun.com>
parents: 1353
diff changeset
   853
2310
ce10607d5332 11684 desire option to not propagate certs to non-global zones
Brock Pytlik <brock.pytlik@oracle.com>
parents: 2293
diff changeset
   854
                # Upgrade the image's format if needed.
ce10607d5332 11684 desire option to not propagate certs to non-global zones
Brock Pytlik <brock.pytlik@oracle.com>
parents: 2293
diff changeset
   855
                self.update_format(allow_unprivileged=True,
ce10607d5332 11684 desire option to not propagate certs to non-global zones
Brock Pytlik <brock.pytlik@oracle.com>
parents: 2293
diff changeset
   856
                    progtrack=progtrack)
ce10607d5332 11684 desire option to not propagate certs to non-global zones
Brock Pytlik <brock.pytlik@oracle.com>
parents: 2293
diff changeset
   857
ce10607d5332 11684 desire option to not propagate certs to non-global zones
Brock Pytlik <brock.pytlik@oracle.com>
parents: 2293
diff changeset
   858
                # If we haven't loaded the system publisher configuration, do
ce10607d5332 11684 desire option to not propagate certs to non-global zones
Brock Pytlik <brock.pytlik@oracle.com>
parents: 2293
diff changeset
   859
                # that now.
ce10607d5332 11684 desire option to not propagate certs to non-global zones
Brock Pytlik <brock.pytlik@oracle.com>
parents: 2293
diff changeset
   860
                if isinstance(self.cfg, imageconfig.ImageConfig):
ce10607d5332 11684 desire option to not propagate certs to non-global zones
Brock Pytlik <brock.pytlik@oracle.com>
parents: 2293
diff changeset
   861
                        self.cfg = imageconfig.BlendedConfig(self.cfg,
ce10607d5332 11684 desire option to not propagate certs to non-global zones
Brock Pytlik <brock.pytlik@oracle.com>
parents: 2293
diff changeset
   862
                            self.get_catalog(self.IMG_CATALOG_INSTALLED).\
ce10607d5332 11684 desire option to not propagate certs to non-global zones
Brock Pytlik <brock.pytlik@oracle.com>
parents: 2293
diff changeset
   863
                                get_package_counts_by_pub(),
ce10607d5332 11684 desire option to not propagate certs to non-global zones
Brock Pytlik <brock.pytlik@oracle.com>
parents: 2293
diff changeset
   864
                            self.imgdir, self.transport,
ce10607d5332 11684 desire option to not propagate certs to non-global zones
Brock Pytlik <brock.pytlik@oracle.com>
parents: 2293
diff changeset
   865
                            self.cfg.get_policy("use-system-repo"))
ce10607d5332 11684 desire option to not propagate certs to non-global zones
Brock Pytlik <brock.pytlik@oracle.com>
parents: 2293
diff changeset
   866
ce10607d5332 11684 desire option to not propagate certs to non-global zones
Brock Pytlik <brock.pytlik@oracle.com>
parents: 2293
diff changeset
   867
                        # Check to see if any system publishers have been
ce10607d5332 11684 desire option to not propagate certs to non-global zones
Brock Pytlik <brock.pytlik@oracle.com>
parents: 2293
diff changeset
   868
                        # removed.  If they have, remove their metadata and
ce10607d5332 11684 desire option to not propagate certs to non-global zones
Brock Pytlik <brock.pytlik@oracle.com>
parents: 2293
diff changeset
   869
                        # rebuild the catalogs.
ce10607d5332 11684 desire option to not propagate certs to non-global zones
Brock Pytlik <brock.pytlik@oracle.com>
parents: 2293
diff changeset
   870
                        changed = False
ce10607d5332 11684 desire option to not propagate certs to non-global zones
Brock Pytlik <brock.pytlik@oracle.com>
parents: 2293
diff changeset
   871
                        for p in self.cfg.removed_pubs:
ce10607d5332 11684 desire option to not propagate certs to non-global zones
Brock Pytlik <brock.pytlik@oracle.com>
parents: 2293
diff changeset
   872
                                p.meta_root = self._get_publisher_meta_root(
ce10607d5332 11684 desire option to not propagate certs to non-global zones
Brock Pytlik <brock.pytlik@oracle.com>
parents: 2293
diff changeset
   873
                                    p.prefix)
ce10607d5332 11684 desire option to not propagate certs to non-global zones
Brock Pytlik <brock.pytlik@oracle.com>
parents: 2293
diff changeset
   874
                                self.remove_publisher_metadata(p, rebuild=False)
ce10607d5332 11684 desire option to not propagate certs to non-global zones
Brock Pytlik <brock.pytlik@oracle.com>
parents: 2293
diff changeset
   875
                                changed = True
ce10607d5332 11684 desire option to not propagate certs to non-global zones
Brock Pytlik <brock.pytlik@oracle.com>
parents: 2293
diff changeset
   876
                        if changed:
ce10607d5332 11684 desire option to not propagate certs to non-global zones
Brock Pytlik <brock.pytlik@oracle.com>
parents: 2293
diff changeset
   877
                                self.__rebuild_image_catalogs()
ce10607d5332 11684 desire option to not propagate certs to non-global zones
Brock Pytlik <brock.pytlik@oracle.com>
parents: 2293
diff changeset
   878
2144
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
   879
                if purge:
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
   880
                        # Configuration shouldn't be written again unless this
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
   881
                        # is an image creation operation (hence the purge).
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
   882
                        self.save_config()
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
   883
2339
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2335
diff changeset
   884
                # Let the linked image subsystem know that root is moving
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2335
diff changeset
   885
                self.linked._init_root()
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2335
diff changeset
   886
2228
5319ee47781d 2774 new depend action behavior: follow if possible
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2219
diff changeset
   887
                # load image avoid pkg set
5319ee47781d 2774 new depend action behavior: follow if possible
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2219
diff changeset
   888
                self.__avoid_set_load()
5319ee47781d 2774 new depend action behavior: follow if possible
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2219
diff changeset
   889
2144
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
   890
        def update_format(self, allow_unprivileged=False, progtrack=None):
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
   891
                """Transform the existing image structure and its data to
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
   892
                the newest format.  Callers are responsible for locking.
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
   893
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
   894
                'allow_unprivileged' is an optional boolean indicating
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
   895
                whether a fallback to an in-memory only upgrade should
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
   896
                be performed if a PermissionsException is encountered
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
   897
                during the operation.
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
   898
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
   899
                'progtrack' is an optional ProgressTracker object.
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
   900
                """
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
   901
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
   902
                if self.version == self.CURRENT_VERSION:
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
   903
                        # Already upgraded.
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
   904
                        self.__upgraded = True
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
   905
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
   906
                        # If pre-upgrade data still exists; fire off a
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
   907
                        # process to dump it so execution can continue.
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
   908
                        orig_root = self.imgdir + ".old"
2152
623da55258c6 17453 /var/pkg/repo should be preserved during image format upgrades and not used as a default depot location
Shawn Walker <shawn.walker@oracle.com>
parents: 2149
diff changeset
   909
                        nullf = open(os.devnull, "w")
2144
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
   910
                        if os.path.exists(orig_root):
2152
623da55258c6 17453 /var/pkg/repo should be preserved during image format upgrades and not used as a default depot location
Shawn Walker <shawn.walker@oracle.com>
parents: 2149
diff changeset
   911
                                # Ensure all output is discarded; it really
623da55258c6 17453 /var/pkg/repo should be preserved during image format upgrades and not used as a default depot location
Shawn Walker <shawn.walker@oracle.com>
parents: 2149
diff changeset
   912
                                # doesn't matter if this succeeds.
2144
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
   913
                                subprocess.Popen("rm -rf %s" % orig_root,
2152
623da55258c6 17453 /var/pkg/repo should be preserved during image format upgrades and not used as a default depot location
Shawn Walker <shawn.walker@oracle.com>
parents: 2149
diff changeset
   914
                                    shell=True, stdout=nullf, stderr=nullf)
2144
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
   915
                        return False
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
   916
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
   917
                if not progtrack:
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
   918
                        progtrack = progress.QuietProgressTracker()
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
   919
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
   920
                # Not technically 'caching', but close enough ...
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
   921
                progtrack.cache_catalogs_start()
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
   922
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
   923
                # Upgrade catalog data if needed.
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
   924
                self.__upgrade_catalogs()
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
   925
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
   926
                # Data conversion finished.
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
   927
                self.__upgraded = True
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
   928
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
   929
                # Determine if on-disk portion of the upgrade is allowed.
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
   930
                if self.allow_ondisk_upgrade == False:
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
   931
                        return True
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
   932
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
   933
                if self.allow_ondisk_upgrade is None and self.type != IMG_USER:
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
   934
                        if not self.is_liveroot() and not self.is_zone():
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
   935
                                # By default, don't update image format if it
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
   936
                                # is not the live root, and is not for a zone.
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
   937
                                self.allow_ondisk_upgrade = False
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
   938
                                return True
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
   939
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
   940
                # The logic to perform the on-disk upgrade is in its own
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
   941
                # function so that it can easily be wrapped with locking logic.
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
   942
                with self.locked_op("update-format",
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
   943
                    allow_unprivileged=allow_unprivileged):
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
   944
                        self.__upgrade_image_format(progtrack,
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
   945
                            allow_unprivileged=allow_unprivileged)
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
   946
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
   947
                progtrack.cache_catalogs_done()
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
   948
                return True
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
   949
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
   950
        def __upgrade_catalogs(self):
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
   951
                """Private helper function for update_format."""
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
   952
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
   953
                if self.version >= 3:
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
   954
                        # Nothing to do.
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
   955
                        return
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
   956
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
   957
                def installed_file_publisher(filepath):
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
   958
                        """Find the pkg's installed file named by filepath.
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
   959
                        Return the publisher that installed this package."""
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
   960
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
   961
                        f = file(filepath)
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
   962
                        try:
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
   963
                                flines = f.readlines()
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
   964
                                version, pub = flines
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
   965
                                version = version.strip()
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
   966
                                pub = pub.strip()
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
   967
                                f.close()
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
   968
                        except ValueError:
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
   969
                                # If ValueError occurs, the installed file is of
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
   970
                                # a previous format.  For upgrades to work, it's
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
   971
                                # necessary to assume that the package was
2310
ce10607d5332 11684 desire option to not propagate certs to non-global zones
Brock Pytlik <brock.pytlik@oracle.com>
parents: 2293
diff changeset
   972
                                # installed from the highest ranked publisher.
ce10607d5332 11684 desire option to not propagate certs to non-global zones
Brock Pytlik <brock.pytlik@oracle.com>
parents: 2293
diff changeset
   973
                                # Here, the publisher is setup to record that.
2144
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
   974
                                if flines:
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
   975
                                        pub = flines[0]
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
   976
                                        pub = pub.strip()
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
   977
                                        newpub = "%s_%s" % (
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
   978
                                            pkg.fmri.PREF_PUB_PFX, pub)
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
   979
                                else:
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
   980
                                        newpub = "%s_%s" % (
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
   981
                                            pkg.fmri.PREF_PUB_PFX,
2310
ce10607d5332 11684 desire option to not propagate certs to non-global zones
Brock Pytlik <brock.pytlik@oracle.com>
parents: 2293
diff changeset
   982
                                            self.get_highest_ranked_publisher())
2144
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
   983
                                pub = newpub
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
   984
                        assert pub
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
   985
                        return pub
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
   986
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
   987
                # First, load the old package state information.
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
   988
                installed_state_dir = "%s/state/installed" % self.imgdir
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
   989
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
   990
                # If the state directory structure has already been created,
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
   991
                # loading information from it is fast.  The directory is
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
   992
                # populated with files, named by their (url-encoded) FMRI,
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
   993
                # which point to the "installed" file in the corresponding
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
   994
                # directory under /var/pkg.
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
   995
                installed = {}
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
   996
                def add_installed_entry(f):
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
   997
                        path = "%s/pkg/%s/installed" % \
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
   998
                            (self.imgdir, f.get_dir_path())
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
   999
                        pub = installed_file_publisher(path)
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  1000
                        f.set_publisher(pub)
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  1001
                        installed[f.pkg_name] = f
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  1002
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  1003
                for pl in os.listdir(installed_state_dir):
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  1004
                        fmristr = "%s" % urllib.unquote(pl)
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  1005
                        f = pkg.fmri.PkgFmri(fmristr)
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  1006
                        add_installed_entry(f)
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  1007
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  1008
                # Create the new image catalogs.
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  1009
                kcat = pkg.catalog.Catalog(batch_mode=True,
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  1010
                    manifest_cb=self._manifest_cb, sign=False)
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  1011
                icat = pkg.catalog.Catalog(batch_mode=True,
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  1012
                    manifest_cb=self._manifest_cb, sign=False)
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  1013
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  1014
                # XXX For backwards compatibility, 'upgradability' of packages
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  1015
                # is calculated and stored based on whether a given pkg stem
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  1016
                # matches the newest version in the catalog.  This is quite
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  1017
                # expensive (due to overhead), but at least the cost is
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  1018
                # consolidated here.  This comparison is also cross-publisher,
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  1019
                # as it used to be.
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  1020
                newest = {}
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  1021
                old_pub_cats = []
1352
5c92c9d342ef 11065 client v1 catalog support for v0 catalogs
Shawn Walker <srw@sun.com>
parents: 1328
diff changeset
  1022
                for pub in self.gen_publishers():
2028
b2c674e6ee28 16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents: 2026
diff changeset
  1023
                        try:
2144
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  1024
                                old_cat = pkg.server.catalog.ServerCatalog(
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  1025
                                    pub.meta_root, read_only=True,
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  1026
                                    publisher=pub.prefix)
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  1027
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  1028
                                old_pub_cats.append((pub, old_cat))
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  1029
                                for f in old_cat.fmris():
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  1030
                                        nver = newest.get(f.pkg_name, None)
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  1031
                                        newest[f.pkg_name] = max(nver,
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  1032
                                            f.version)
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  1033
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  1034
                        except EnvironmentError, e:
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  1035
                                # If a catalog file is just missing, ignore it.
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  1036
                                # If there's a worse error, make sure the user
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  1037
                                # knows about it.
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  1038
                                if e.errno != errno.ENOENT:
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  1039
                                        raise
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  1040
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  1041
                # Next, load the existing catalog data and convert it.
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  1042
                pub_cats = []
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  1043
                for pub, old_cat in old_pub_cats:
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  1044
                        new_cat = pub.catalog
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  1045
                        new_cat.batch_mode = True
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  1046
                        new_cat.sign = False
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  1047
                        if new_cat.exists:
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  1048
                                new_cat.destroy()
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  1049
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  1050
                        # First convert the old publisher catalog to
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  1051
                        # the new format.
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  1052
                        for f in old_cat.fmris():
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  1053
                                new_cat.add_package(f)
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  1054
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  1055
                                # Now populate the image catalogs.
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  1056
                                states = [self.PKG_STATE_KNOWN,
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  1057
                                    self.PKG_STATE_V0]
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  1058
                                mdata = { "states": states }
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  1059
                                if f.version != newest[f.pkg_name]:
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  1060
                                        states.append(self.PKG_STATE_UPGRADABLE)
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  1061
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  1062
                                inst_fmri = installed.get(f.pkg_name, None)
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  1063
                                if inst_fmri and \
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  1064
                                    inst_fmri.version == f.version and \
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  1065
                                    pkg.fmri.is_same_publisher(f.publisher,
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  1066
                                    inst_fmri.publisher):
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  1067
                                        states.append(self.PKG_STATE_INSTALLED)
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  1068
                                        if inst_fmri.preferred_publisher():
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  1069
                                                # Strip the PREF_PUB_PFX.
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  1070
                                                inst_fmri.set_publisher(
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  1071
                                                    inst_fmri.get_publisher())
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  1072
                                        icat.add_package(f, metadata=mdata)
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  1073
                                        del installed[f.pkg_name]
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  1074
                                kcat.add_package(f, metadata=mdata)
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  1075
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  1076
                        # Normally, the Catalog's attributes are automatically
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  1077
                        # populated as a result of catalog operations.  But in
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  1078
                        # this case, the new Catalog's attributes should match
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  1079
                        # those of the old catalog.
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  1080
                        old_lm = old_cat.last_modified()
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  1081
                        if old_lm:
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  1082
                                # Can be None for empty v0 catalogs.
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  1083
                                old_lm = pkg.catalog.ts_to_datetime(old_lm)
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  1084
                        new_cat.last_modified = old_lm
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  1085
                        new_cat.version = 0
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  1086
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  1087
                        # Add to the list of catalogs to save.
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  1088
                        new_cat.batch_mode = False
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  1089
                        pub_cats.append(new_cat)
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  1090
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  1091
                # Discard the old catalog objects.
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  1092
                old_pub_cats = None
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  1093
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  1094
                for f in installed.values():
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  1095
                        # Any remaining FMRIs need to be added to all of the
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  1096
                        # image catalogs.
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  1097
                        states = [self.PKG_STATE_INSTALLED, self.PKG_STATE_V0]
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  1098
                        mdata = { "states": states }
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  1099
                        # This package may be installed from a publisher that
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  1100
                        # is no longer known or has been disabled.
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  1101
                        if f.pkg_name in newest and \
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  1102
                            f.version != newest[f.pkg_name]:
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  1103
                                states.append(self.PKG_STATE_UPGRADABLE)
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  1104
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  1105
                        if f.preferred_publisher():
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  1106
                                # Strip the PREF_PUB_PFX.
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  1107
                                f.set_publisher(f.get_publisher())
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  1108
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  1109
                        icat.add_package(f, metadata=mdata)
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  1110
                        kcat.add_package(f, metadata=mdata)
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  1111
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  1112
                for cat in pub_cats + [kcat, icat]:
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  1113
                        cat.finalize()
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  1114
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  1115
                # Cache converted catalogs so that operations can function as
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  1116
                # expected if the on-disk format of the catalogs isn't upgraded.
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  1117
                self.__catalogs[self.IMG_CATALOG_KNOWN] = kcat
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  1118
                self.__catalogs[self.IMG_CATALOG_INSTALLED] = icat
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  1119
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  1120
        def __upgrade_image_format(self, progtrack, allow_unprivileged=False):
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  1121
                """Private helper function for update_format."""
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  1122
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  1123
                try:
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  1124
                        # Ensure Image directory structure is valid.
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  1125
                        self.mkdirs()
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  1126
                except apx.PermissionsException, e:
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  1127
                        if not allow_unprivileged:
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  1128
                                raise
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  1129
                        # An unprivileged user is attempting to use the
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  1130
                        # new client with an old image.  Since none of
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  1131
                        # the changes can be saved, warn the user and
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  1132
                        # then return.
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  1133
                        #
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  1134
                        # Raising an exception here would be a decidedly
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  1135
                        # bad thing as it would disrupt find_root, etc.
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  1136
                        return
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  1137
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  1138
                # This has to be done after the permissions check above.
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  1139
                # First, create a new temporary root to store the converted
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  1140
                # image metadata.
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  1141
                tmp_root = self.imgdir + ".new"
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  1142
                try:
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  1143
                        shutil.rmtree(tmp_root)
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  1144
                except EnvironmentError, e:
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  1145
                        if e.errno in (errno.EROFS, errno.EPERM) and \
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  1146
                            allow_unprivileged:
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  1147
                                # Bail.
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  1148
                                return
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  1149
                        if e.errno != errno.ENOENT:
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  1150
                                raise apx._convert_error(e)
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  1151
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  1152
                try:
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  1153
                        self.mkdirs(root=tmp_root, version=self.CURRENT_VERSION)
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  1154
                except apx.PermissionsException, e:
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  1155
                        # Same handling needed as above; but not after this.
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  1156
                        if not allow_unprivileged:
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  1157
                                raise
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  1158
                        return
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  1159
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  1160
                def linktree(src_root, dest_root):
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  1161
                        if not os.path.exists(src_root):
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  1162
                                # Nothing to do.
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  1163
                                return
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  1164
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  1165
                        for entry in os.listdir(src_root):
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  1166
                                src = os.path.join(src_root, entry)
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  1167
                                dest = os.path.join(dest_root, entry)
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  1168
                                if os.path.isdir(src):
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  1169
                                        # Recurse into directory to link
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  1170
                                        # its contents.
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  1171
                                        misc.makedirs(dest)
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  1172
                                        linktree(src, dest)
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  1173
                                        continue
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  1174
                                # Link source file into target dest.
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  1175
                                assert os.path.isfile(src)
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  1176
                                try:
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  1177
                                        os.link(src, dest)
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  1178
                                except EnvironmentError, e:
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  1179
                                        raise apx._convert_error(e)
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  1180
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  1181
                # Next, link history data into place.
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  1182
                linktree(self.history.path, os.path.join(tmp_root,
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  1183
                    "history"))
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  1184
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  1185
                # Next, link index data into place.
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  1186
                linktree(self.index_dir, os.path.join(tmp_root,
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  1187
                    "cache", "index"))
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  1188
2152
623da55258c6 17453 /var/pkg/repo should be preserved during image format upgrades and not used as a default depot location
Shawn Walker <shawn.walker@oracle.com>
parents: 2149
diff changeset
  1189
                # Next, link ssl data into place.
623da55258c6 17453 /var/pkg/repo should be preserved during image format upgrades and not used as a default depot location
Shawn Walker <shawn.walker@oracle.com>
parents: 2149
diff changeset
  1190
                linktree(os.path.join(self.imgdir, "ssl"),
623da55258c6 17453 /var/pkg/repo should be preserved during image format upgrades and not used as a default depot location
Shawn Walker <shawn.walker@oracle.com>
parents: 2149
diff changeset
  1191
                    os.path.join(tmp_root, "ssl"))
623da55258c6 17453 /var/pkg/repo should be preserved during image format upgrades and not used as a default depot location
Shawn Walker <shawn.walker@oracle.com>
parents: 2149
diff changeset
  1192
2144
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  1193
                # Next, write state data into place.
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  1194
                if self.version < 3:
2183
21ae45e8dfcf 17581 There should be a way of removing a package as part of upgrade
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2178
diff changeset
  1195
                        # Image state and publisher metadata
2144
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  1196
                        tmp_state_root = os.path.join(tmp_root, "state")
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  1197
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  1198
                        # Update image catalog locations.
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  1199
                        kcat = self.get_catalog(self.IMG_CATALOG_KNOWN)
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  1200
                        icat = self.get_catalog(self.IMG_CATALOG_INSTALLED)
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  1201
                        kcat.meta_root = os.path.join(tmp_state_root,
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  1202
                            self.IMG_CATALOG_KNOWN)
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  1203
                        icat.meta_root = os.path.join(tmp_state_root,
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  1204
                            self.IMG_CATALOG_INSTALLED)
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  1205
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  1206
                        # Assume that since mkdirs succeeded that the remaining
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  1207
                        # data can be saved and the image structure can be
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  1208
                        # upgraded.  But first, attempt to save the image
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  1209
                        # catalogs.
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  1210
                        for cat in icat, kcat:
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  1211
                                misc.makedirs(cat.meta_root)
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  1212
                                cat.save()
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  1213
                else:
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  1214
                        # For version 3 and newer images, just link existing
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  1215
                        # state information into place.
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  1216
                        linktree(self._statedir, os.path.join(tmp_root,
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  1217
                            "state"))
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  1218
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  1219
                # Reset each publisher's meta_root and ensure its complete
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  1220
                # directory structure is intact.  Then either link in or
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  1221
                # write out the metadata for each publisher.
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  1222
                for pub in self.gen_publishers():
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  1223
                        old_root = pub.meta_root
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  1224
                        old_cat_root = pub.catalog_root
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  1225
                        old_cert_root = pub.cert_root
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  1226
                        pub.meta_root = os.path.join(tmp_root,
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  1227
                            IMG_PUB_DIR, pub.prefix)
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  1228
                        pub.create_meta_root()
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  1229
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  1230
                        if self.version < 3:
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  1231
                                # Should be loaded in memory and transformed
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  1232
                                # already, so just need to be written out.
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  1233
                                pub.catalog.save()
2028
b2c674e6ee28 16744 repository multi-publisher on-disk format should be formalized and implemented
Shawn Walker <shawn.walker@oracle.com>
parents: 2026
diff changeset
  1234
                                continue
1352
5c92c9d342ef 11065 client v1 catalog support for v0 catalogs
Shawn Walker <srw@sun.com>
parents: 1328
diff changeset
  1235
2144
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  1236
                        # Now link any catalog or cert files from the old root
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  1237
                        # into the new root.
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  1238
                        linktree(old_cat_root, pub.catalog_root)
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  1239
                        linktree(old_cert_root, pub.cert_root)
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  1240
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  1241
                        # Finally, create a directory for the publisher's
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  1242
                        # manifests to live in.
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  1243
                        misc.makedirs(os.path.join(pub.meta_root, "pkg"))
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  1244
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  1245
                # Next, link licenses and manifests of installed packages into
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  1246
                # new image dir.
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  1247
                for pfmri in self.gen_installed_pkgs():
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  1248
                        # Link licenses.
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  1249
                        mdir = self.get_manifest_dir(pfmri)
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  1250
                        for entry in os.listdir(mdir):
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  1251
                                if not entry.startswith("license."):
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  1252
                                        continue
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  1253
                                src = os.path.join(mdir, entry)
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  1254
                                if os.path.isdir(src):
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  1255
                                        # Ignore broken licenses.
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  1256
                                        continue
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  1257
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  1258
                                # For conversion, ensure destination link uses
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  1259
                                # encoded license name to match how new image
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  1260
                                # format stores licenses.
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  1261
                                dest = os.path.join(tmp_root, "license",
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  1262
                                    pfmri.get_dir_path(stemonly=True),
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  1263
                                    urllib.quote(entry, ""))
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  1264
                                misc.makedirs(os.path.dirname(dest))
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  1265
                                try:
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  1266
                                        os.link(src, dest)
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  1267
                                except EnvironmentError, e:
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  1268
                                        raise apx._convert_error(e)
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  1269
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  1270
                        # Link manifest.
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  1271
                        src = self.get_manifest_path(pfmri)
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  1272
                        dest = os.path.join(tmp_root, "publisher",
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  1273
                            pfmri.publisher, "pkg", pfmri.get_dir_path())
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  1274
                        misc.makedirs(os.path.dirname(dest))
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  1275
                        try:
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  1276
                                os.link(src, dest)
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  1277
                        except EnvironmentError, e:
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  1278
                                raise apx._convert_error(e)
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  1279
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  1280
                # Next, copy the old configuration into the new location using
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  1281
                # the new name.  The configuration is copied instead of being
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  1282
                # linked so that any changes to configuration as a result of
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  1283
                # the upgrade won't be written into the old image directory.
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  1284
                src = os.path.join(self.imgdir, "disabled_auth")
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  1285
                if os.path.exists(src):
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  1286
                        dest = os.path.join(tmp_root, "disabled_auth")
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  1287
                        portable.copyfile(src, dest)
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  1288
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  1289
                src = self.cfg.target
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  1290
                dest = os.path.join(tmp_root, "pkg5.image")
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  1291
                try:
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  1292
                        portable.copyfile(src, dest)
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  1293
                except EnvironmentError, e:
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  1294
                        raise apx._convert_error(e)
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  1295
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  1296
                # Update the new configuration's version information and then
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  1297
                # write it out again.
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  1298
                newcfg = imageconfig.ImageConfig(dest, tmp_root,
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  1299
                    version=3, overrides={ "image": {
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  1300
                    "version": self.CURRENT_VERSION } })
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  1301
                newcfg._version = 3
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  1302
                newcfg.write()
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  1303
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  1304
                # Now reload configuration and write again to configuration data
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  1305
                # reflects updated version information.
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  1306
                newcfg.reset()
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  1307
                newcfg.write()
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  1308
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  1309
                # Finally, rename the old package metadata directory, then
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  1310
                # rename the new one into place, and then reinitialize.  The
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  1311
                # old data will be dumped during initialization.
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  1312
                orig_root = self.imgdir + ".old"
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  1313
                try:
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  1314
                        portable.rename(self.imgdir, orig_root)
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  1315
                        portable.rename(tmp_root, self.imgdir)
2152
623da55258c6 17453 /var/pkg/repo should be preserved during image format upgrades and not used as a default depot location
Shawn Walker <shawn.walker@oracle.com>
parents: 2149
diff changeset
  1316
623da55258c6 17453 /var/pkg/repo should be preserved during image format upgrades and not used as a default depot location
Shawn Walker <shawn.walker@oracle.com>
parents: 2149
diff changeset
  1317
                        # /var/pkg/repo is renamed into place instead of being
623da55258c6 17453 /var/pkg/repo should be preserved during image format upgrades and not used as a default depot location
Shawn Walker <shawn.walker@oracle.com>
parents: 2149
diff changeset
  1318
                        # linked piece-by-piece for performance reasons.
623da55258c6 17453 /var/pkg/repo should be preserved during image format upgrades and not used as a default depot location
Shawn Walker <shawn.walker@oracle.com>
parents: 2149
diff changeset
  1319
                        # Crawling the entire tree structure of a repository is
623da55258c6 17453 /var/pkg/repo should be preserved during image format upgrades and not used as a default depot location
Shawn Walker <shawn.walker@oracle.com>
parents: 2149
diff changeset
  1320
                        # far slower than simply renaming the top level
623da55258c6 17453 /var/pkg/repo should be preserved during image format upgrades and not used as a default depot location
Shawn Walker <shawn.walker@oracle.com>
parents: 2149
diff changeset
  1321
                        # directory (since it often has thousands or millions
623da55258c6 17453 /var/pkg/repo should be preserved during image format upgrades and not used as a default depot location
Shawn Walker <shawn.walker@oracle.com>
parents: 2149
diff changeset
  1322
                        # of objects).
623da55258c6 17453 /var/pkg/repo should be preserved during image format upgrades and not used as a default depot location
Shawn Walker <shawn.walker@oracle.com>
parents: 2149
diff changeset
  1323
                        old_repo = os.path.join(orig_root, "repo")
623da55258c6 17453 /var/pkg/repo should be preserved during image format upgrades and not used as a default depot location
Shawn Walker <shawn.walker@oracle.com>
parents: 2149
diff changeset
  1324
                        if os.path.exists(old_repo):
623da55258c6 17453 /var/pkg/repo should be preserved during image format upgrades and not used as a default depot location
Shawn Walker <shawn.walker@oracle.com>
parents: 2149
diff changeset
  1325
                                new_repo = os.path.join(tmp_root, "repo")
623da55258c6 17453 /var/pkg/repo should be preserved during image format upgrades and not used as a default depot location
Shawn Walker <shawn.walker@oracle.com>
parents: 2149
diff changeset
  1326
                                portable.rename(old_repo, new_repo)
2144
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  1327
                except EnvironmentError, e:
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  1328
                        raise apx._convert_error(e)
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  1329
                self.find_root(self.root, exact_match=True, progtrack=progtrack)
1352
5c92c9d342ef 11065 client v1 catalog support for v0 catalogs
Shawn Walker <srw@sun.com>
parents: 1328
diff changeset
  1330
1736
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1733
diff changeset
  1331
        def create(self, pubs, facets=EmptyDict, is_zone=False,  progtrack=None,
2026
d1b30615bc99 9196 pkg(5) should have support for cryptographic manifest signatures
Brock Pytlik <bpytlik@sun.com>
parents: 2003
diff changeset
  1332
            props=EmptyDict, refresh_allowed=True, variants=EmptyDict):
1504
265a1d6b86bd 9969 client support for multiple origins desired
Shawn Walker <srw@sun.com>
parents: 1503
diff changeset
  1333
                """Creates a new image with the given attributes if it does not
1736
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1733
diff changeset
  1334
                exist; should not be used with an existing image.
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1733
diff changeset
  1335
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1733
diff changeset
  1336
                'is_zone' is a boolean indicating whether the image is a zone.
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1733
diff changeset
  1337
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1733
diff changeset
  1338
                'pubs' is a list of Publisher objects to configure the image
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1733
diff changeset
  1339
                with.
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1733
diff changeset
  1340
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1733
diff changeset
  1341
                'refresh_allowed' is an optional boolean indicating that
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1733
diff changeset
  1342
                network operations (such as publisher data retrieval) are
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1733
diff changeset
  1343
                allowed.
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1733
diff changeset
  1344
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1733
diff changeset
  1345
                'progtrack' is an optional ProgressTracker object.
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1733
diff changeset
  1346
2026
d1b30615bc99 9196 pkg(5) should have support for cryptographic manifest signatures
Brock Pytlik <bpytlik@sun.com>
parents: 2003
diff changeset
  1347
                'props' is an option dictionary mapping image property names to
d1b30615bc99 9196 pkg(5) should have support for cryptographic manifest signatures
Brock Pytlik <bpytlik@sun.com>
parents: 2003
diff changeset
  1348
                values.
d1b30615bc99 9196 pkg(5) should have support for cryptographic manifest signatures
Brock Pytlik <bpytlik@sun.com>
parents: 2003
diff changeset
  1349
1736
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1733
diff changeset
  1350
                'variants' is an optional dictionary of variant names and
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1733
diff changeset
  1351
                values.
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1733
diff changeset
  1352
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1733
diff changeset
  1353
                'facets' is an optional dictionary of facet names and values.
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1733
diff changeset
  1354
                """
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1733
diff changeset
  1355
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1733
diff changeset
  1356
                for p in pubs:
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1733
diff changeset
  1357
                        p.meta_root = self._get_publisher_meta_root(p.prefix)
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1733
diff changeset
  1358
                        p.transport = self.transport
1086
16500d7bf1ca 8321 image_create should not validate publisher uri
Shawn Walker <srw@sun.com>
parents: 1085
diff changeset
  1359
2144
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  1360
                # Override any initial configuration information.
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  1361
                self.set_properties(props)
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  1362
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  1363
                # Start the operation.
1736
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1733
diff changeset
  1364
                self.history.log_operation_start("image-create")
539
7486304966c5 1449 pkg requires operational history
Shawn Walker <shawn.walker@sun.com>
parents: 537
diff changeset
  1365
1102
5ea5cdb4360d 5014 api sets successful result for image-create with failed catalog refresh
Shawn Walker <srw@sun.com>
parents: 1087
diff changeset
  1366
                # Determine and add the default variants for the image.
111
647c91609117 Client-side filtering.
Danek Duvall <danek.duvall@sun.com>
parents: 107
diff changeset
  1367
                if is_zone:
2097
068cc63b4d6e 17055 image configuration should use pkg.config classes
Shawn Walker <shawn.walker@oracle.com>
parents: 2092
diff changeset
  1368
                        self.cfg.variants["variant.opensolaris.zone"] = \
068cc63b4d6e 17055 image configuration should use pkg.config classes
Shawn Walker <shawn.walker@oracle.com>
parents: 2092
diff changeset
  1369
                            "nonglobal"
838
aafbe4737188 3245 need to support creation of multi-architecture (fat) packages
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 835
diff changeset
  1370
                else:
2097
068cc63b4d6e 17055 image configuration should use pkg.config classes
Shawn Walker <shawn.walker@oracle.com>
parents: 2092
diff changeset
  1371
                        self.cfg.variants["variant.opensolaris.zone"] = \
068cc63b4d6e 17055 image configuration should use pkg.config classes
Shawn Walker <shawn.walker@oracle.com>
parents: 2092
diff changeset
  1372
                            "global"
068cc63b4d6e 17055 image configuration should use pkg.config classes
Shawn Walker <shawn.walker@oracle.com>
parents: 2092
diff changeset
  1373
068cc63b4d6e 17055 image configuration should use pkg.config classes
Shawn Walker <shawn.walker@oracle.com>
parents: 2092
diff changeset
  1374
                self.cfg.variants["variant.arch"] = \
838
aafbe4737188 3245 need to support creation of multi-architecture (fat) packages
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 835
diff changeset
  1375
                    variants.get("variant.arch", platform.processor())
1102
5ea5cdb4360d 5014 api sets successful result for image-create with failed catalog refresh
Shawn Walker <srw@sun.com>
parents: 1087
diff changeset
  1376
5ea5cdb4360d 5014 api sets successful result for image-create with failed catalog refresh
Shawn Walker <srw@sun.com>
parents: 1087
diff changeset
  1377
                # After setting up the default variants, add any overrides or
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  1378
                # additional variants or facets specified.
2097
068cc63b4d6e 17055 image configuration should use pkg.config classes
Shawn Walker <shawn.walker@oracle.com>
parents: 2092
diff changeset
  1379
                self.cfg.variants.update(variants)
068cc63b4d6e 17055 image configuration should use pkg.config classes
Shawn Walker <shawn.walker@oracle.com>
parents: 2092
diff changeset
  1380
                self.cfg.facets.update(facets)
838
aafbe4737188 3245 need to support creation of multi-architecture (fat) packages
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 835
diff changeset
  1381
1102
5ea5cdb4360d 5014 api sets successful result for image-create with failed catalog refresh
Shawn Walker <srw@sun.com>
parents: 1087
diff changeset
  1382
                # Now everything is ready for publisher configuration.
1736
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1733
diff changeset
  1383
                # Since multiple publishers are allowed, they are all
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1733
diff changeset
  1384
                # added at once without any publisher data retrieval.
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1733
diff changeset
  1385
                # A single retrieval is then performed afterwards, if
2026
d1b30615bc99 9196 pkg(5) should have support for cryptographic manifest signatures
Brock Pytlik <bpytlik@sun.com>
parents: 2003
diff changeset
  1386
                # allowed, to minimize the amount of work the client
1736
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1733
diff changeset
  1387
                # needs to perform.
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1733
diff changeset
  1388
                for p in pubs:
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1733
diff changeset
  1389
                        self.add_publisher(p, refresh_allowed=False,
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1733
diff changeset
  1390
                            progtrack=progtrack)
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1733
diff changeset
  1391
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1733
diff changeset
  1392
                if refresh_allowed:
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1733
diff changeset
  1393
                        self.refresh_publishers(progtrack=progtrack)
2339
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2335
diff changeset
  1394
                else:
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2335
diff changeset
  1395
                        # initialize empty catalogs on disk
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2335
diff changeset
  1396
                        self.__rebuild_image_catalogs(progtrack=progtrack)
1736
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1733
diff changeset
  1397
2097
068cc63b4d6e 17055 image configuration should use pkg.config classes
Shawn Walker <shawn.walker@oracle.com>
parents: 2092
diff changeset
  1398
                self.cfg.set_property("property", "publisher-search-order",
068cc63b4d6e 17055 image configuration should use pkg.config classes
Shawn Walker <shawn.walker@oracle.com>
parents: 2092
diff changeset
  1399
                    [p.prefix for p in pubs])
068cc63b4d6e 17055 image configuration should use pkg.config classes
Shawn Walker <shawn.walker@oracle.com>
parents: 2092
diff changeset
  1400
068cc63b4d6e 17055 image configuration should use pkg.config classes
Shawn Walker <shawn.walker@oracle.com>
parents: 2092
diff changeset
  1401
                # Ensure publisher search order is written.
068cc63b4d6e 17055 image configuration should use pkg.config classes
Shawn Walker <shawn.walker@oracle.com>
parents: 2092
diff changeset
  1402
                self.save_config()
068cc63b4d6e 17055 image configuration should use pkg.config classes
Shawn Walker <shawn.walker@oracle.com>
parents: 2092
diff changeset
  1403
1087
293c0aa5f32e 8214 load_catalogs should only load catalog data when needed
Shawn Walker <srw@sun.com>
parents: 1086
diff changeset
  1404
                self.history.log_operation_end()
104
ecfc64baf22e add naive configuration, naive global/preferred authorities, delete content
Stephen Hahn <sch@sun.com>
parents: 87
diff changeset
  1405
2339
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2335
diff changeset
  1406
        @staticmethod
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2335
diff changeset
  1407
        def __allow_liveroot():
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2335
diff changeset
  1408
                """Check if we're allowed to access the current live root
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2335
diff changeset
  1409
                image."""
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2335
diff changeset
  1410
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2335
diff changeset
  1411
                # if we're simulating a live root then allow access to it
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2335
diff changeset
  1412
                if DebugValues.get_value("simulate_live_root") or \
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2335
diff changeset
  1413
                    "PKG_LIVE_ROOT" in os.environ:
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2335
diff changeset
  1414
                        return True
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2335
diff changeset
  1415
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2335
diff changeset
  1416
                # check if the user disabled access to the live root
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2335
diff changeset
  1417
                if DebugValues.get_value("simulate_no_live_root"):
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2335
diff changeset
  1418
                        return False
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2335
diff changeset
  1419
                if "PKG_NO_LIVE_ROOT" in os.environ:
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2335
diff changeset
  1420
                        return False
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2335
diff changeset
  1421
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2335
diff changeset
  1422
                # by default allow access to the live root
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2335
diff changeset
  1423
                return True
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2335
diff changeset
  1424
307
3a857fd8b787 787 optional dependencies are required
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 302
diff changeset
  1425
        def is_liveroot(self):
2339
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2335
diff changeset
  1426
                return bool(self.root == misc.liveroot())
281
81a0bb7f7d63 217 packages need to be able to [un]install users (groups, roles, etc)
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 271
diff changeset
  1427
344
4c887185d780 528 pkg list -u gives confusing output
Dan Price <dp@eng.sun.com>
parents: 342
diff changeset
  1428
        def is_zone(self):
2097
068cc63b4d6e 17055 image configuration should use pkg.config classes
Shawn Walker <shawn.walker@oracle.com>
parents: 2092
diff changeset
  1429
                return self.cfg.variants["variant.opensolaris.zone"] == \
068cc63b4d6e 17055 image configuration should use pkg.config classes
Shawn Walker <shawn.walker@oracle.com>
parents: 2092
diff changeset
  1430
                    "nonglobal"
838
aafbe4737188 3245 need to support creation of multi-architecture (fat) packages
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 835
diff changeset
  1431
aafbe4737188 3245 need to support creation of multi-architecture (fat) packages
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 835
diff changeset
  1432
        def get_arch(self):
2097
068cc63b4d6e 17055 image configuration should use pkg.config classes
Shawn Walker <shawn.walker@oracle.com>
parents: 2092
diff changeset
  1433
                return self.cfg.variants["variant.arch"]
344
4c887185d780 528 pkg list -u gives confusing output
Dan Price <dp@eng.sun.com>
parents: 342
diff changeset
  1434
2105
212a253a462a 12530 pkg -R install doesn't update boot archive
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2097
diff changeset
  1435
        def has_boot_archive(self):
212a253a462a 12530 pkg -R install doesn't update boot archive
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2097
diff changeset
  1436
                """Returns True if a boot_archive is present in this image"""
212a253a462a 12530 pkg -R install doesn't update boot archive
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2097
diff changeset
  1437
                if self.__boot_archive is not None:
212a253a462a 12530 pkg -R install doesn't update boot archive
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2097
diff changeset
  1438
                        return self.__boot_archive
212a253a462a 12530 pkg -R install doesn't update boot archive
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2097
diff changeset
  1439
212a253a462a 12530 pkg -R install doesn't update boot archive
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2097
diff changeset
  1440
                for p in ["platform/i86pc/amd64/boot_archive",
212a253a462a 12530 pkg -R install doesn't update boot archive
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2097
diff changeset
  1441
                          "platform/i86pc/boot_archive",
212a253a462a 12530 pkg -R install doesn't update boot archive
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2097
diff changeset
  1442
                          "platform/sun4u/boot_archive",
212a253a462a 12530 pkg -R install doesn't update boot archive
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2097
diff changeset
  1443
                          "platform/sun4v/boot_archive"]:
212a253a462a 12530 pkg -R install doesn't update boot archive
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2097
diff changeset
  1444
                        if os.path.isfile(os.path.join(self.root, p)):
212a253a462a 12530 pkg -R install doesn't update boot archive
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2097
diff changeset
  1445
                                self.__boot_archive = True
212a253a462a 12530 pkg -R install doesn't update boot archive
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2097
diff changeset
  1446
                                break
212a253a462a 12530 pkg -R install doesn't update boot archive
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2097
diff changeset
  1447
                else:
212a253a462a 12530 pkg -R install doesn't update boot archive
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2097
diff changeset
  1448
                        self.__boot_archive = False
212a253a462a 12530 pkg -R install doesn't update boot archive
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2097
diff changeset
  1449
                return self.__boot_archive
212a253a462a 12530 pkg -R install doesn't update boot archive
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2097
diff changeset
  1450
212a253a462a 12530 pkg -R install doesn't update boot archive
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2097
diff changeset
  1451
        def get_ramdisk_filelist(self):
2183
21ae45e8dfcf 17581 There should be a way of removing a package as part of upgrade
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2178
diff changeset
  1452
                """return the filelist... add the filelist so we rebuild
21ae45e8dfcf 17581 There should be a way of removing a package as part of upgrade
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2178
diff changeset
  1453
                boot archive if it changes... append trailing / to
2105
212a253a462a 12530 pkg -R install doesn't update boot archive
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2097
diff changeset
  1454
                directories that are really there"""
212a253a462a 12530 pkg -R install doesn't update boot archive
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2097
diff changeset
  1455
212a253a462a 12530 pkg -R install doesn't update boot archive
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2097
diff changeset
  1456
                p = "boot/solaris/filelist.ramdisk"
212a253a462a 12530 pkg -R install doesn't update boot archive
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2097
diff changeset
  1457
                f = os.path.join(self.root, p)
212a253a462a 12530 pkg -R install doesn't update boot archive
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2097
diff changeset
  1458
212a253a462a 12530 pkg -R install doesn't update boot archive
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2097
diff changeset
  1459
                def addslash(path):
212a253a462a 12530 pkg -R install doesn't update boot archive
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2097
diff changeset
  1460
                        if os.path.isdir(os.path.join(self.root, path)):
212a253a462a 12530 pkg -R install doesn't update boot archive
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2097
diff changeset
  1461
                                return path + "/"
212a253a462a 12530 pkg -R install doesn't update boot archive
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2097
diff changeset
  1462
                        return path
212a253a462a 12530 pkg -R install doesn't update boot archive
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2097
diff changeset
  1463
212a253a462a 12530 pkg -R install doesn't update boot archive
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2097
diff changeset
  1464
                if not os.path.isfile(f):
212a253a462a 12530 pkg -R install doesn't update boot archive
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2097
diff changeset
  1465
                        return []
212a253a462a 12530 pkg -R install doesn't update boot archive
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2097
diff changeset
  1466
212a253a462a 12530 pkg -R install doesn't update boot archive
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2097
diff changeset
  1467
                return [ addslash(l.strip()) for l in file(f) ] + [p]
212a253a462a 12530 pkg -R install doesn't update boot archive
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2097
diff changeset
  1468
2073
9fcacc9e5eaa 16998 transport should support publisher-specific write and read caches
Shawn Walker <shawn.walker@oracle.com>
parents: 2069
diff changeset
  1469
        def get_cachedirs(self):
9fcacc9e5eaa 16998 transport should support publisher-specific write and read caches
Shawn Walker <shawn.walker@oracle.com>
parents: 2069
diff changeset
  1470
                """Returns a list of tuples of the form (dir, readonly, pub)
9fcacc9e5eaa 16998 transport should support publisher-specific write and read caches
Shawn Walker <shawn.walker@oracle.com>
parents: 2069
diff changeset
  1471
                where 'dir' is the absolute path of the cache directory,
9fcacc9e5eaa 16998 transport should support publisher-specific write and read caches
Shawn Walker <shawn.walker@oracle.com>
parents: 2069
diff changeset
  1472
                'readonly' is a boolean indicating whether the cache can
9fcacc9e5eaa 16998 transport should support publisher-specific write and read caches
Shawn Walker <shawn.walker@oracle.com>
parents: 2069
diff changeset
  1473
                be written to, and 'pub' is the prefix of the publisher that
9fcacc9e5eaa 16998 transport should support publisher-specific write and read caches
Shawn Walker <shawn.walker@oracle.com>
parents: 2069
diff changeset
  1474
                the cache directory should be used for.  If 'pub' is None, the
9fcacc9e5eaa 16998 transport should support publisher-specific write and read caches
Shawn Walker <shawn.walker@oracle.com>
parents: 2069
diff changeset
  1475
                cache directory is intended for all publishers.
9fcacc9e5eaa 16998 transport should support publisher-specific write and read caches
Shawn Walker <shawn.walker@oracle.com>
parents: 2069
diff changeset
  1476
                """
9fcacc9e5eaa 16998 transport should support publisher-specific write and read caches
Shawn Walker <shawn.walker@oracle.com>
parents: 2069
diff changeset
  1477
9fcacc9e5eaa 16998 transport should support publisher-specific write and read caches
Shawn Walker <shawn.walker@oracle.com>
parents: 2069
diff changeset
  1478
                # Get all readonly cache directories.
9fcacc9e5eaa 16998 transport should support publisher-specific write and read caches
Shawn Walker <shawn.walker@oracle.com>
parents: 2069
diff changeset
  1479
                cdirs = [
9fcacc9e5eaa 16998 transport should support publisher-specific write and read caches
Shawn Walker <shawn.walker@oracle.com>
parents: 2069
diff changeset
  1480
                    (cdir, True, None)
9fcacc9e5eaa 16998 transport should support publisher-specific write and read caches
Shawn Walker <shawn.walker@oracle.com>
parents: 2069
diff changeset
  1481
                    for cdir in self.__read_cache_dirs
9fcacc9e5eaa 16998 transport should support publisher-specific write and read caches
Shawn Walker <shawn.walker@oracle.com>
parents: 2069
diff changeset
  1482
                ]
9fcacc9e5eaa 16998 transport should support publisher-specific write and read caches
Shawn Walker <shawn.walker@oracle.com>
parents: 2069
diff changeset
  1483
2148
5625d3707d5b 17424 zone cache usage needs adjustment for new image format
Shawn Walker <shawn.walker@oracle.com>
parents: 2144
diff changeset
  1484
                # Get global write cache directory.
2144
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  1485
                if self.__write_cache_dir:
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  1486
                        cdirs.append((self.__write_cache_dir, False, None))
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  1487
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  1488
                # For images newer than version 3, file data can be stored
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  1489
                # in the publisher's file root.
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  1490
                if self.version == self.CURRENT_VERSION:
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  1491
                        for pub in self.gen_publishers(inc_disabled=True):
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  1492
                                froot = os.path.join(pub.meta_root, "file")
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  1493
                                readonly = False
2148
5625d3707d5b 17424 zone cache usage needs adjustment for new image format
Shawn Walker <shawn.walker@oracle.com>
parents: 2144
diff changeset
  1494
                                if self.__write_cache_dir or \
5625d3707d5b 17424 zone cache usage needs adjustment for new image format
Shawn Walker <shawn.walker@oracle.com>
parents: 2144
diff changeset
  1495
                                    self.__write_cache_root:
2144
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  1496
                                        readonly = True
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  1497
                                cdirs.append((froot, readonly, pub.prefix))
2073
9fcacc9e5eaa 16998 transport should support publisher-specific write and read caches
Shawn Walker <shawn.walker@oracle.com>
parents: 2069
diff changeset
  1498
2148
5625d3707d5b 17424 zone cache usage needs adjustment for new image format
Shawn Walker <shawn.walker@oracle.com>
parents: 2144
diff changeset
  1499
                                if self.__write_cache_root:
5625d3707d5b 17424 zone cache usage needs adjustment for new image format
Shawn Walker <shawn.walker@oracle.com>
parents: 2144
diff changeset
  1500
                                        # Cache is a tree structure like
5625d3707d5b 17424 zone cache usage needs adjustment for new image format
Shawn Walker <shawn.walker@oracle.com>
parents: 2144
diff changeset
  1501
                                        # /var/pkg/publisher.
5625d3707d5b 17424 zone cache usage needs adjustment for new image format
Shawn Walker <shawn.walker@oracle.com>
parents: 2144
diff changeset
  1502
                                        froot = os.path.join(
5625d3707d5b 17424 zone cache usage needs adjustment for new image format
Shawn Walker <shawn.walker@oracle.com>
parents: 2144
diff changeset
  1503
                                            self.__write_cache_root, pub.prefix,
5625d3707d5b 17424 zone cache usage needs adjustment for new image format
Shawn Walker <shawn.walker@oracle.com>
parents: 2144
diff changeset
  1504
                                            "file")
5625d3707d5b 17424 zone cache usage needs adjustment for new image format
Shawn Walker <shawn.walker@oracle.com>
parents: 2144
diff changeset
  1505
                                        cdirs.append((froot, False, pub.prefix))
5625d3707d5b 17424 zone cache usage needs adjustment for new image format
Shawn Walker <shawn.walker@oracle.com>
parents: 2144
diff changeset
  1506
2073
9fcacc9e5eaa 16998 transport should support publisher-specific write and read caches
Shawn Walker <shawn.walker@oracle.com>
parents: 2069
diff changeset
  1507
                return cdirs
9fcacc9e5eaa 16998 transport should support publisher-specific write and read caches
Shawn Walker <shawn.walker@oracle.com>
parents: 2069
diff changeset
  1508
29
f621f1df0849 fix install target; correct imports for module renames
"Stephen Hahn <sch@sun.com>"
parents: 26
diff changeset
  1509
        def get_root(self):
f621f1df0849 fix install target; correct imports for module renames
"Stephen Hahn <sch@sun.com>"
parents: 26
diff changeset
  1510
                return self.root
f621f1df0849 fix install target; correct imports for module renames
"Stephen Hahn <sch@sun.com>"
parents: 26
diff changeset
  1511
1710
139720e2e756 1668 image locking needed to prevent race conditions
Shawn Walker <srw@sun.com>
parents: 1688
diff changeset
  1512
        def get_last_modified(self):
139720e2e756 1668 image locking needed to prevent race conditions
Shawn Walker <srw@sun.com>
parents: 1688
diff changeset
  1513
                """Returns a UTC datetime object representing the time the
139720e2e756 1668 image locking needed to prevent race conditions
Shawn Walker <srw@sun.com>
parents: 1688
diff changeset
  1514
                image's state last changed or None if unknown."""
139720e2e756 1668 image locking needed to prevent race conditions
Shawn Walker <srw@sun.com>
parents: 1688
diff changeset
  1515
139720e2e756 1668 image locking needed to prevent race conditions
Shawn Walker <srw@sun.com>
parents: 1688
diff changeset
  1516
                # Always get last_modified time from known catalog.  It's
139720e2e756 1668 image locking needed to prevent race conditions
Shawn Walker <srw@sun.com>
parents: 1688
diff changeset
  1517
                # retrieved from the catalog itself since that is accurate
139720e2e756 1668 image locking needed to prevent race conditions
Shawn Walker <srw@sun.com>
parents: 1688
diff changeset
  1518
                # down to the micrsecond (as opposed to the filesystem which
139720e2e756 1668 image locking needed to prevent race conditions
Shawn Walker <srw@sun.com>
parents: 1688
diff changeset
  1519
                # has an OS-specific resolution).
139720e2e756 1668 image locking needed to prevent race conditions
Shawn Walker <srw@sun.com>
parents: 1688
diff changeset
  1520
                return self.__get_catalog(self.IMG_CATALOG_KNOWN).last_modified
139720e2e756 1668 image locking needed to prevent race conditions
Shawn Walker <srw@sun.com>
parents: 1688
diff changeset
  1521
926
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 922
diff changeset
  1522
        def gen_publishers(self, inc_disabled=False):
2097
068cc63b4d6e 17055 image configuration should use pkg.config classes
Shawn Walker <shawn.walker@oracle.com>
parents: 2092
diff changeset
  1523
                if not self.cfg:
068cc63b4d6e 17055 image configuration should use pkg.config classes
Shawn Walker <shawn.walker@oracle.com>
parents: 2092
diff changeset
  1524
                        raise apx.ImageCfgEmptyError(self.root)
2219
60ad60f7592c 2152 standalone package support needed (on-disk format)
Shawn Walker <shawn.walker@oracle.com>
parents: 2205
diff changeset
  1525
60ad60f7592c 2152 standalone package support needed (on-disk format)
Shawn Walker <shawn.walker@oracle.com>
parents: 2205
diff changeset
  1526
                alt_pubs = {}
60ad60f7592c 2152 standalone package support needed (on-disk format)
Shawn Walker <shawn.walker@oracle.com>
parents: 2205
diff changeset
  1527
                if self.__alt_pkg_pub_map:
60ad60f7592c 2152 standalone package support needed (on-disk format)
Shawn Walker <shawn.walker@oracle.com>
parents: 2205
diff changeset
  1528
                        alt_src_pubs = dict(
60ad60f7592c 2152 standalone package support needed (on-disk format)
Shawn Walker <shawn.walker@oracle.com>
parents: 2205
diff changeset
  1529
                            (p.prefix, p)
60ad60f7592c 2152 standalone package support needed (on-disk format)
Shawn Walker <shawn.walker@oracle.com>
parents: 2205
diff changeset
  1530
                            for p in self.__alt_pubs
60ad60f7592c 2152 standalone package support needed (on-disk format)
Shawn Walker <shawn.walker@oracle.com>
parents: 2205
diff changeset
  1531
                        )
60ad60f7592c 2152 standalone package support needed (on-disk format)
Shawn Walker <shawn.walker@oracle.com>
parents: 2205
diff changeset
  1532
60ad60f7592c 2152 standalone package support needed (on-disk format)
Shawn Walker <shawn.walker@oracle.com>
parents: 2205
diff changeset
  1533
                        for pfx in self.__alt_known_cat.publishers():
60ad60f7592c 2152 standalone package support needed (on-disk format)
Shawn Walker <shawn.walker@oracle.com>
parents: 2205
diff changeset
  1534
                                # Include alternate package source publishers
60ad60f7592c 2152 standalone package support needed (on-disk format)
Shawn Walker <shawn.walker@oracle.com>
parents: 2205
diff changeset
  1535
                                # in result, and temporarily enable any
60ad60f7592c 2152 standalone package support needed (on-disk format)
Shawn Walker <shawn.walker@oracle.com>
parents: 2205
diff changeset
  1536
                                # disabled publishers that already exist in
60ad60f7592c 2152 standalone package support needed (on-disk format)
Shawn Walker <shawn.walker@oracle.com>
parents: 2205
diff changeset
  1537
                                # the image configuration.
60ad60f7592c 2152 standalone package support needed (on-disk format)
Shawn Walker <shawn.walker@oracle.com>
parents: 2205
diff changeset
  1538
                                try:
60ad60f7592c 2152 standalone package support needed (on-disk format)
Shawn Walker <shawn.walker@oracle.com>
parents: 2205
diff changeset
  1539
                                        img_pub = self.cfg.publishers[pfx]
60ad60f7592c 2152 standalone package support needed (on-disk format)
Shawn Walker <shawn.walker@oracle.com>
parents: 2205
diff changeset
  1540
60ad60f7592c 2152 standalone package support needed (on-disk format)
Shawn Walker <shawn.walker@oracle.com>
parents: 2205
diff changeset
  1541
                                        if not img_pub.disabled:
60ad60f7592c 2152 standalone package support needed (on-disk format)
Shawn Walker <shawn.walker@oracle.com>
parents: 2205
diff changeset
  1542
                                                # No override needed.
60ad60f7592c 2152 standalone package support needed (on-disk format)
Shawn Walker <shawn.walker@oracle.com>
parents: 2205
diff changeset
  1543
                                                continue
60ad60f7592c 2152 standalone package support needed (on-disk format)
Shawn Walker <shawn.walker@oracle.com>
parents: 2205
diff changeset
  1544
                                        new_pub = copy.copy(img_pub)
60ad60f7592c 2152 standalone package support needed (on-disk format)
Shawn Walker <shawn.walker@oracle.com>
parents: 2205
diff changeset
  1545
                                        new_pub.disabled = False
60ad60f7592c 2152 standalone package support needed (on-disk format)
Shawn Walker <shawn.walker@oracle.com>
parents: 2205
diff changeset
  1546
60ad60f7592c 2152 standalone package support needed (on-disk format)
Shawn Walker <shawn.walker@oracle.com>
parents: 2205
diff changeset
  1547
                                        # Discard origins and mirrors to prevent
60ad60f7592c 2152 standalone package support needed (on-disk format)
Shawn Walker <shawn.walker@oracle.com>
parents: 2205
diff changeset
  1548
                                        # their accidental use.
2310
ce10607d5332 11684 desire option to not propagate certs to non-global zones
Brock Pytlik <brock.pytlik@oracle.com>
parents: 2293
diff changeset
  1549
                                        repo = new_pub.repository
2219
60ad60f7592c 2152 standalone package support needed (on-disk format)
Shawn Walker <shawn.walker@oracle.com>
parents: 2205
diff changeset
  1550
                                        repo.reset_origins()
60ad60f7592c 2152 standalone package support needed (on-disk format)
Shawn Walker <shawn.walker@oracle.com>
parents: 2205
diff changeset
  1551
                                        repo.reset_mirrors()
60ad60f7592c 2152 standalone package support needed (on-disk format)
Shawn Walker <shawn.walker@oracle.com>
parents: 2205
diff changeset
  1552
                                except KeyError:
60ad60f7592c 2152 standalone package support needed (on-disk format)
Shawn Walker <shawn.walker@oracle.com>
parents: 2205
diff changeset
  1553
                                        new_pub = alt_src_pubs[pfx]
60ad60f7592c 2152 standalone package support needed (on-disk format)
Shawn Walker <shawn.walker@oracle.com>
parents: 2205
diff changeset
  1554
60ad60f7592c 2152 standalone package support needed (on-disk format)
Shawn Walker <shawn.walker@oracle.com>
parents: 2205
diff changeset
  1555
                                alt_pubs[pfx] = new_pub
60ad60f7592c 2152 standalone package support needed (on-disk format)
Shawn Walker <shawn.walker@oracle.com>
parents: 2205
diff changeset
  1556
60ad60f7592c 2152 standalone package support needed (on-disk format)
Shawn Walker <shawn.walker@oracle.com>
parents: 2205
diff changeset
  1557
                publishers = [
60ad60f7592c 2152 standalone package support needed (on-disk format)
Shawn Walker <shawn.walker@oracle.com>
parents: 2205
diff changeset
  1558
                    alt_pubs.get(p.prefix, p)
60ad60f7592c 2152 standalone package support needed (on-disk format)
Shawn Walker <shawn.walker@oracle.com>
parents: 2205
diff changeset
  1559
                    for p in self.cfg.publishers.values()
60ad60f7592c 2152 standalone package support needed (on-disk format)
Shawn Walker <shawn.walker@oracle.com>
parents: 2205
diff changeset
  1560
                ]
60ad60f7592c 2152 standalone package support needed (on-disk format)
Shawn Walker <shawn.walker@oracle.com>
parents: 2205
diff changeset
  1561
                publishers.extend((
60ad60f7592c 2152 standalone package support needed (on-disk format)
Shawn Walker <shawn.walker@oracle.com>
parents: 2205
diff changeset
  1562
                    p for p in alt_pubs.values()
60ad60f7592c 2152 standalone package support needed (on-disk format)
Shawn Walker <shawn.walker@oracle.com>
parents: 2205
diff changeset
  1563
                    if p not in publishers
60ad60f7592c 2152 standalone package support needed (on-disk format)
Shawn Walker <shawn.walker@oracle.com>
parents: 2205
diff changeset
  1564
                ))
60ad60f7592c 2152 standalone package support needed (on-disk format)
Shawn Walker <shawn.walker@oracle.com>
parents: 2205
diff changeset
  1565
60ad60f7592c 2152 standalone package support needed (on-disk format)
Shawn Walker <shawn.walker@oracle.com>
parents: 2205
diff changeset
  1566
                for pub in publishers:
2350
34b168914d24 18230 pkg update traceback when using -g source using a disabled publisher and BE is created
Shawn Walker <shawn.walker@oracle.com>
parents: 2339
diff changeset
  1567
                        # Prepare publishers for transport usage; this must be
34b168914d24 18230 pkg update traceback when using -g source using a disabled publisher and BE is created
Shawn Walker <shawn.walker@oracle.com>
parents: 2339
diff changeset
  1568
                        # done each time so that information reflects current
34b168914d24 18230 pkg update traceback when using -g source using a disabled publisher and BE is created
Shawn Walker <shawn.walker@oracle.com>
parents: 2339
diff changeset
  1569
                        # image state.  This is done whether or not the
34b168914d24 18230 pkg update traceback when using -g source using a disabled publisher and BE is created
Shawn Walker <shawn.walker@oracle.com>
parents: 2339
diff changeset
  1570
                        # publisher is returned so that in-memory state is
34b168914d24 18230 pkg update traceback when using -g source using a disabled publisher and BE is created
Shawn Walker <shawn.walker@oracle.com>
parents: 2339
diff changeset
  1571
                        # always current.
34b168914d24 18230 pkg update traceback when using -g source using a disabled publisher and BE is created
Shawn Walker <shawn.walker@oracle.com>
parents: 2339
diff changeset
  1572
                        pub.meta_root = self._get_publisher_meta_root(
34b168914d24 18230 pkg update traceback when using -g source using a disabled publisher and BE is created
Shawn Walker <shawn.walker@oracle.com>
parents: 2339
diff changeset
  1573
                            pub.prefix)
34b168914d24 18230 pkg update traceback when using -g source using a disabled publisher and BE is created
Shawn Walker <shawn.walker@oracle.com>
parents: 2339
diff changeset
  1574
                        pub.transport = self.transport
926
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 922
diff changeset
  1575
                        if inc_disabled or not pub.disabled:
2097
068cc63b4d6e 17055 image configuration should use pkg.config classes
Shawn Walker <shawn.walker@oracle.com>
parents: 2092
diff changeset
  1576
                                yield pub
926
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 922
diff changeset
  1577
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  1578
        def get_publisher_ranks(self):
2339
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2335
diff changeset
  1579
                """Return dictionary of configured + enabled publishers and
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2335
diff changeset
  1580
                unconfigured publishers which still have packages installed.
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2335
diff changeset
  1581
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2335
diff changeset
  1582
                Each entry contains a tuple of search order index starting at
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2335
diff changeset
  1583
                0, and a boolean indicating whether or not this publisher is
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2335
diff changeset
  1584
                "sticky", and a boolean indicating whether or not the
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2335
diff changeset
  1585
                publisher is enabled"""
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2335
diff changeset
  1586
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2335
diff changeset
  1587
                pubs = self.get_sorted_publishers(inc_disabled=False)
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  1588
                ret = dict([
2339
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2335
diff changeset
  1589
                    (pubs[i].prefix, (i, pubs[i].sticky, True))
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2335
diff changeset
  1590
                    for i in range(0, len(pubs))
1537
00a5b4d54eb8 5872 List APIs required
Shawn Walker <srw@sun.com>
parents: 1516
diff changeset
  1591
                ])
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  1592
2339
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2335
diff changeset
  1593
                # Add any publishers for pkgs that are installed,
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2335
diff changeset
  1594
                # but have been deleted. These publishers are implicitly
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2335
diff changeset
  1595
                # not-sticky and disabled.
1537
00a5b4d54eb8 5872 List APIs required
Shawn Walker <srw@sun.com>
parents: 1516
diff changeset
  1596
                for pub in self.get_installed_pubs():
2339
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2335
diff changeset
  1597
                        i = len(ret)
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2335
diff changeset
  1598
                        ret.setdefault(pub, (i, False, False))
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  1599
                return ret
1537
00a5b4d54eb8 5872 List APIs required
Shawn Walker <srw@sun.com>
parents: 1516
diff changeset
  1600
2310
ce10607d5332 11684 desire option to not propagate certs to non-global zones
Brock Pytlik <brock.pytlik@oracle.com>
parents: 2293
diff changeset
  1601
        def get_highest_ranked_publisher(self):
ce10607d5332 11684 desire option to not propagate certs to non-global zones
Brock Pytlik <brock.pytlik@oracle.com>
parents: 2293
diff changeset
  1602
                """Return the highest ranked publisher."""
ce10607d5332 11684 desire option to not propagate certs to non-global zones
Brock Pytlik <brock.pytlik@oracle.com>
parents: 2293
diff changeset
  1603
ce10607d5332 11684 desire option to not propagate certs to non-global zones
Brock Pytlik <brock.pytlik@oracle.com>
parents: 2293
diff changeset
  1604
                pubs = self.cfg.get_property("property",
ce10607d5332 11684 desire option to not propagate certs to non-global zones
Brock Pytlik <brock.pytlik@oracle.com>
parents: 2293
diff changeset
  1605
                    "publisher-search-order")
ce10607d5332 11684 desire option to not propagate certs to non-global zones
Brock Pytlik <brock.pytlik@oracle.com>
parents: 2293
diff changeset
  1606
                if pubs:
ce10607d5332 11684 desire option to not propagate certs to non-global zones
Brock Pytlik <brock.pytlik@oracle.com>
parents: 2293
diff changeset
  1607
                        return self.get_publisher(prefix=pubs[0])
ce10607d5332 11684 desire option to not propagate certs to non-global zones
Brock Pytlik <brock.pytlik@oracle.com>
parents: 2293
diff changeset
  1608
                for p in self.gen_publishers():
ce10607d5332 11684 desire option to not propagate certs to non-global zones
Brock Pytlik <brock.pytlik@oracle.com>
parents: 2293
diff changeset
  1609
                        return p
ce10607d5332 11684 desire option to not propagate certs to non-global zones
Brock Pytlik <brock.pytlik@oracle.com>
parents: 2293
diff changeset
  1610
                for p in self.get_installed_pubs():
ce10607d5332 11684 desire option to not propagate certs to non-global zones
Brock Pytlik <brock.pytlik@oracle.com>
parents: 2293
diff changeset
  1611
                        return p
ce10607d5332 11684 desire option to not propagate certs to non-global zones
Brock Pytlik <brock.pytlik@oracle.com>
parents: 2293
diff changeset
  1612
                return None
ce10607d5332 11684 desire option to not propagate certs to non-global zones
Brock Pytlik <brock.pytlik@oracle.com>
parents: 2293
diff changeset
  1613
479
de75c17238ff 2951 Client should check if its SSL certificates have expired
johansen <johansen@sun.com>
parents: 462
diff changeset
  1614
        def check_cert_validity(self):
926
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 922
diff changeset
  1615
                """Look through the publishers defined for the image.  Print
479
de75c17238ff 2951 Client should check if its SSL certificates have expired
johansen <johansen@sun.com>
parents: 462
diff changeset
  1616
                a message and exit with an error if one of the certificates
de75c17238ff 2951 Client should check if its SSL certificates have expired
johansen <johansen@sun.com>
parents: 462
diff changeset
  1617
                has expired.  If certificates are getting close to expiration,
de75c17238ff 2951 Client should check if its SSL certificates have expired
johansen <johansen@sun.com>
parents: 462
diff changeset
  1618
                print a warning instead."""
de75c17238ff 2951 Client should check if its SSL certificates have expired
johansen <johansen@sun.com>
parents: 462
diff changeset
  1619
926
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 922
diff changeset
  1620
                for p in self.gen_publishers():
2310
ce10607d5332 11684 desire option to not propagate certs to non-global zones
Brock Pytlik <brock.pytlik@oracle.com>
parents: 2293
diff changeset
  1621
                        r = p.repository
ce10607d5332 11684 desire option to not propagate certs to non-global zones
Brock Pytlik <brock.pytlik@oracle.com>
parents: 2293
diff changeset
  1622
                        for uri in r.origins:
ce10607d5332 11684 desire option to not propagate certs to non-global zones
Brock Pytlik <brock.pytlik@oracle.com>
parents: 2293
diff changeset
  1623
                                if uri.ssl_cert:
ce10607d5332 11684 desire option to not propagate certs to non-global zones
Brock Pytlik <brock.pytlik@oracle.com>
parents: 2293
diff changeset
  1624
                                        misc.validate_ssl_cert(
ce10607d5332 11684 desire option to not propagate certs to non-global zones
Brock Pytlik <brock.pytlik@oracle.com>
parents: 2293
diff changeset
  1625
                                            uri.ssl_cert,
ce10607d5332 11684 desire option to not propagate certs to non-global zones
Brock Pytlik <brock.pytlik@oracle.com>
parents: 2293
diff changeset
  1626
                                            prefix=p.prefix, uri=uri)
479
de75c17238ff 2951 Client should check if its SSL certificates have expired
johansen <johansen@sun.com>
parents: 462
diff changeset
  1627
                return True
de75c17238ff 2951 Client should check if its SSL certificates have expired
johansen <johansen@sun.com>
parents: 462
diff changeset
  1628
926
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 922
diff changeset
  1629
        def has_publisher(self, prefix=None, alias=None):
1252
3b1b69011fcf 8709 ImageInterface.has_publisher has incorrect docstring
Shawn Walker <srw@sun.com>
parents: 1237
diff changeset
  1630
                """Returns a boolean value indicating whether a publisher
3b1b69011fcf 8709 ImageInterface.has_publisher has incorrect docstring
Shawn Walker <srw@sun.com>
parents: 1237
diff changeset
  1631
                exists in the image configuration that matches the given
3b1b69011fcf 8709 ImageInterface.has_publisher has incorrect docstring
Shawn Walker <srw@sun.com>
parents: 1237
diff changeset
  1632
                prefix or alias."""
3b1b69011fcf 8709 ImageInterface.has_publisher has incorrect docstring
Shawn Walker <srw@sun.com>
parents: 1237
diff changeset
  1633
                for pub in self.gen_publishers(inc_disabled=True):
926
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 922
diff changeset
  1634
                        if prefix == pub.prefix or (alias and
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 922
diff changeset
  1635
                            alias == pub.alias):
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 922
diff changeset
  1636
                                return True
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 922
diff changeset
  1637
                return False
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 922
diff changeset
  1638
1087
293c0aa5f32e 8214 load_catalogs should only load catalog data when needed
Shawn Walker <srw@sun.com>
parents: 1086
diff changeset
  1639
        def remove_publisher(self, prefix=None, alias=None, progtrack=None):
1710
139720e2e756 1668 image locking needed to prevent race conditions
Shawn Walker <srw@sun.com>
parents: 1688
diff changeset
  1640
                """Removes the publisher with the matching identity from the
139720e2e756 1668 image locking needed to prevent race conditions
Shawn Walker <srw@sun.com>
parents: 1688
diff changeset
  1641
                image."""
139720e2e756 1668 image locking needed to prevent race conditions
Shawn Walker <srw@sun.com>
parents: 1688
diff changeset
  1642
1087
293c0aa5f32e 8214 load_catalogs should only load catalog data when needed
Shawn Walker <srw@sun.com>
parents: 1086
diff changeset
  1643
                if not progtrack:
293c0aa5f32e 8214 load_catalogs should only load catalog data when needed
Shawn Walker <srw@sun.com>
parents: 1086
diff changeset
  1644
                        progtrack = progress.QuietProgressTracker()
293c0aa5f32e 8214 load_catalogs should only load catalog data when needed
Shawn Walker <srw@sun.com>
parents: 1086
diff changeset
  1645
1710
139720e2e756 1668 image locking needed to prevent race conditions
Shawn Walker <srw@sun.com>
parents: 1688
diff changeset
  1646
                with self.locked_op("remove-publisher"):
926
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 922
diff changeset
  1647
                        pub = self.get_publisher(prefix=prefix,
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 922
diff changeset
  1648
                            alias=alias)
1710
139720e2e756 1668 image locking needed to prevent race conditions
Shawn Walker <srw@sun.com>
parents: 1688
diff changeset
  1649
2097
068cc63b4d6e 17055 image configuration should use pkg.config classes
Shawn Walker <shawn.walker@oracle.com>
parents: 2092
diff changeset
  1650
                        self.cfg.remove_publisher(pub.prefix)
1710
139720e2e756 1668 image locking needed to prevent race conditions
Shawn Walker <srw@sun.com>
parents: 1688
diff changeset
  1651
                        self.remove_publisher_metadata(pub, progtrack=progtrack)
139720e2e756 1668 image locking needed to prevent race conditions
Shawn Walker <srw@sun.com>
parents: 1688
diff changeset
  1652
                        self.save_config()
926
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 922
diff changeset
  1653
2339
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2335
diff changeset
  1654
        def get_publishers(self, inc_disabled=True):
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2335
diff changeset
  1655
                """Return a dictionary of configured publishers.  This doesn't
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2335
diff changeset
  1656
                include unconfigured publishers which still have packages
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2335
diff changeset
  1657
                installed."""
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2335
diff changeset
  1658
2219
60ad60f7592c 2152 standalone package support needed (on-disk format)
Shawn Walker <shawn.walker@oracle.com>
parents: 2205
diff changeset
  1659
                return dict(
60ad60f7592c 2152 standalone package support needed (on-disk format)
Shawn Walker <shawn.walker@oracle.com>
parents: 2205
diff changeset
  1660
                    (p.prefix, p)
2339
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2335
diff changeset
  1661
                    for p in self.gen_publishers(inc_disabled=inc_disabled)
2219
60ad60f7592c 2152 standalone package support needed (on-disk format)
Shawn Walker <shawn.walker@oracle.com>
parents: 2205
diff changeset
  1662
                )
926
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 922
diff changeset
  1663
2339
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2335
diff changeset
  1664
        def get_sorted_publishers(self, inc_disabled=True):
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2335
diff changeset
  1665
                """Return a list of configured publishers sorted by rank.
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2335
diff changeset
  1666
                This doesn't include unconfigured publishers which still have
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2335
diff changeset
  1667
                packages installed."""
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2335
diff changeset
  1668
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2335
diff changeset
  1669
                d = self.get_publishers(inc_disabled=inc_disabled)
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2335
diff changeset
  1670
                names = self.cfg.get_property("property",
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2335
diff changeset
  1671
                    "publisher-search-order")
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2335
diff changeset
  1672
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2335
diff changeset
  1673
                #
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2335
diff changeset
  1674
                # If someone has been editing the config file we may have
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2335
diff changeset
  1675
                # unranked publishers.  Also, as publisher come and go via the
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2335
diff changeset
  1676
                # sysrepo we can end up with configured but unranked
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2335
diff changeset
  1677
                # publishers.  In either case just sort unranked publishers
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2335
diff changeset
  1678
                # alphabetically.
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2335
diff changeset
  1679
                #
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2335
diff changeset
  1680
                unranked = set(d) - set(names)
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2335
diff changeset
  1681
                ret = [
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2335
diff changeset
  1682
                    d[n]
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2335
diff changeset
  1683
                    for n in names
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2335
diff changeset
  1684
                    if n in d
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2335
diff changeset
  1685
                ] + [
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2335
diff changeset
  1686
                    d[n]
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2335
diff changeset
  1687
                    for n in sorted(unranked)
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2335
diff changeset
  1688
                ]
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2335
diff changeset
  1689
                return ret
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2335
diff changeset
  1690
926
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 922
diff changeset
  1691
        def get_publisher(self, prefix=None, alias=None, origin=None):
2219
60ad60f7592c 2152 standalone package support needed (on-disk format)
Shawn Walker <shawn.walker@oracle.com>
parents: 2205
diff changeset
  1692
                for pub in self.gen_publishers(inc_disabled=True):
926
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 922
diff changeset
  1693
                        if prefix and prefix == pub.prefix:
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 922
diff changeset
  1694
                                return pub
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 922
diff changeset
  1695
                        elif alias and alias == pub.alias:
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 922
diff changeset
  1696
                                return pub
2310
ce10607d5332 11684 desire option to not propagate certs to non-global zones
Brock Pytlik <brock.pytlik@oracle.com>
parents: 2293
diff changeset
  1697
                        elif origin and pub.repository and \
ce10607d5332 11684 desire option to not propagate certs to non-global zones
Brock Pytlik <brock.pytlik@oracle.com>
parents: 2293
diff changeset
  1698
                            pub.repository.has_origin(origin):
926
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 922
diff changeset
  1699
                                return pub
2073
9fcacc9e5eaa 16998 transport should support publisher-specific write and read caches
Shawn Walker <shawn.walker@oracle.com>
parents: 2069
diff changeset
  1700
                raise apx.UnknownPublisher(max(prefix, alias, origin))
926
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 922
diff changeset
  1701
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  1702
        def pub_search_before(self, being_moved, staying_put):
1710
139720e2e756 1668 image locking needed to prevent race conditions
Shawn Walker <srw@sun.com>
parents: 1688
diff changeset
  1703
                """Moves publisher "being_moved" to before "staying_put"
2310
ce10607d5332 11684 desire option to not propagate certs to non-global zones
Brock Pytlik <brock.pytlik@oracle.com>
parents: 2293
diff changeset
  1704
                in search order.
ce10607d5332 11684 desire option to not propagate certs to non-global zones
Brock Pytlik <brock.pytlik@oracle.com>
parents: 2293
diff changeset
  1705
ce10607d5332 11684 desire option to not propagate certs to non-global zones
Brock Pytlik <brock.pytlik@oracle.com>
parents: 2293
diff changeset
  1706
                The caller is responsible for locking the image."""
ce10607d5332 11684 desire option to not propagate certs to non-global zones
Brock Pytlik <brock.pytlik@oracle.com>
parents: 2293
diff changeset
  1707
ce10607d5332 11684 desire option to not propagate certs to non-global zones
Brock Pytlik <brock.pytlik@oracle.com>
parents: 2293
diff changeset
  1708
                self.cfg.change_publisher_search_order(being_moved, staying_put,
ce10607d5332 11684 desire option to not propagate certs to non-global zones
Brock Pytlik <brock.pytlik@oracle.com>
parents: 2293
diff changeset
  1709
                    after=False)
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  1710
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  1711
        def pub_search_after(self, being_moved, staying_put):
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  1712
                """Moves publisher "being_moved" to after "staying_put"
2310
ce10607d5332 11684 desire option to not propagate certs to non-global zones
Brock Pytlik <brock.pytlik@oracle.com>
parents: 2293
diff changeset
  1713
                in search order.
ce10607d5332 11684 desire option to not propagate certs to non-global zones
Brock Pytlik <brock.pytlik@oracle.com>
parents: 2293
diff changeset
  1714
ce10607d5332 11684 desire option to not propagate certs to non-global zones
Brock Pytlik <brock.pytlik@oracle.com>
parents: 2293
diff changeset
  1715
                The caller is responsible for locking the image."""
ce10607d5332 11684 desire option to not propagate certs to non-global zones
Brock Pytlik <brock.pytlik@oracle.com>
parents: 2293
diff changeset
  1716
ce10607d5332 11684 desire option to not propagate certs to non-global zones
Brock Pytlik <brock.pytlik@oracle.com>
parents: 2293
diff changeset
  1717
                self.cfg.change_publisher_search_order(being_moved, staying_put,
ce10607d5332 11684 desire option to not propagate certs to non-global zones
Brock Pytlik <brock.pytlik@oracle.com>
parents: 2293
diff changeset
  1718
                    after=True)
926
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 922
diff changeset
  1719
2219
60ad60f7592c 2152 standalone package support needed (on-disk format)
Shawn Walker <shawn.walker@oracle.com>
parents: 2205
diff changeset
  1720
        def __apply_alt_pkg_sources(self, img_kcat):
60ad60f7592c 2152 standalone package support needed (on-disk format)
Shawn Walker <shawn.walker@oracle.com>
parents: 2205
diff changeset
  1721
                pkg_pub_map = self.__alt_pkg_pub_map
60ad60f7592c 2152 standalone package support needed (on-disk format)
Shawn Walker <shawn.walker@oracle.com>
parents: 2205
diff changeset
  1722
                if not pkg_pub_map or self.__alt_pkg_sources_loaded:
60ad60f7592c 2152 standalone package support needed (on-disk format)
Shawn Walker <shawn.walker@oracle.com>
parents: 2205
diff changeset
  1723
                        # No alternate sources to merge.
60ad60f7592c 2152 standalone package support needed (on-disk format)
Shawn Walker <shawn.walker@oracle.com>
parents: 2205
diff changeset
  1724
                        return
60ad60f7592c 2152 standalone package support needed (on-disk format)
Shawn Walker <shawn.walker@oracle.com>
parents: 2205
diff changeset
  1725
60ad60f7592c 2152 standalone package support needed (on-disk format)
Shawn Walker <shawn.walker@oracle.com>
parents: 2205
diff changeset
  1726
                # Temporarily merge the package metadata in the alternate
60ad60f7592c 2152 standalone package support needed (on-disk format)
Shawn Walker <shawn.walker@oracle.com>
parents: 2205
diff changeset
  1727
                # known package catalog for packages not listed in the
60ad60f7592c 2152 standalone package support needed (on-disk format)
Shawn Walker <shawn.walker@oracle.com>
parents: 2205
diff changeset
  1728
                # image's known catalog.
60ad60f7592c 2152 standalone package support needed (on-disk format)
Shawn Walker <shawn.walker@oracle.com>
parents: 2205
diff changeset
  1729
                def merge_check(alt_kcat, pfmri, new_entry):
60ad60f7592c 2152 standalone package support needed (on-disk format)
Shawn Walker <shawn.walker@oracle.com>
parents: 2205
diff changeset
  1730
                        states = new_entry["metadata"]["states"]
60ad60f7592c 2152 standalone package support needed (on-disk format)
Shawn Walker <shawn.walker@oracle.com>
parents: 2205
diff changeset
  1731
                        if self.PKG_STATE_INSTALLED in states:
60ad60f7592c 2152 standalone package support needed (on-disk format)
Shawn Walker <shawn.walker@oracle.com>
parents: 2205
diff changeset
  1732
                                # Not interesting; already installed.
60ad60f7592c 2152 standalone package support needed (on-disk format)
Shawn Walker <shawn.walker@oracle.com>
parents: 2205
diff changeset
  1733
                                return False, None
60ad60f7592c 2152 standalone package support needed (on-disk format)
Shawn Walker <shawn.walker@oracle.com>
parents: 2205
diff changeset
  1734
                        img_entry = img_kcat.get_entry(pfmri=pfmri)
60ad60f7592c 2152 standalone package support needed (on-disk format)
Shawn Walker <shawn.walker@oracle.com>
parents: 2205
diff changeset
  1735
                        if not img_entry is None:
60ad60f7592c 2152 standalone package support needed (on-disk format)
Shawn Walker <shawn.walker@oracle.com>
parents: 2205
diff changeset
  1736
                                # Already in image known catalog.
60ad60f7592c 2152 standalone package support needed (on-disk format)
Shawn Walker <shawn.walker@oracle.com>
parents: 2205
diff changeset
  1737
                                return False, None
60ad60f7592c 2152 standalone package support needed (on-disk format)
Shawn Walker <shawn.walker@oracle.com>
parents: 2205
diff changeset
  1738
                        return True, new_entry
60ad60f7592c 2152 standalone package support needed (on-disk format)
Shawn Walker <shawn.walker@oracle.com>
parents: 2205
diff changeset
  1739
60ad60f7592c 2152 standalone package support needed (on-disk format)
Shawn Walker <shawn.walker@oracle.com>
parents: 2205
diff changeset
  1740
                img_kcat.append(self.__alt_known_cat, cb=merge_check)
60ad60f7592c 2152 standalone package support needed (on-disk format)
Shawn Walker <shawn.walker@oracle.com>
parents: 2205
diff changeset
  1741
                img_kcat.finalize()
60ad60f7592c 2152 standalone package support needed (on-disk format)
Shawn Walker <shawn.walker@oracle.com>
parents: 2205
diff changeset
  1742
60ad60f7592c 2152 standalone package support needed (on-disk format)
Shawn Walker <shawn.walker@oracle.com>
parents: 2205
diff changeset
  1743
                self.__alt_pkg_sources_loaded = True
60ad60f7592c 2152 standalone package support needed (on-disk format)
Shawn Walker <shawn.walker@oracle.com>
parents: 2205
diff changeset
  1744
                self.transport.cfg.pkg_pub_map = self.__alt_pkg_pub_map
60ad60f7592c 2152 standalone package support needed (on-disk format)
Shawn Walker <shawn.walker@oracle.com>
parents: 2205
diff changeset
  1745
                self.transport.cfg.alt_pubs = self.__alt_pubs
60ad60f7592c 2152 standalone package support needed (on-disk format)
Shawn Walker <shawn.walker@oracle.com>
parents: 2205
diff changeset
  1746
                self.transport.cfg.reset_caches()
60ad60f7592c 2152 standalone package support needed (on-disk format)
Shawn Walker <shawn.walker@oracle.com>
parents: 2205
diff changeset
  1747
60ad60f7592c 2152 standalone package support needed (on-disk format)
Shawn Walker <shawn.walker@oracle.com>
parents: 2205
diff changeset
  1748
        def __cleanup_alt_pkg_certs(self):
60ad60f7592c 2152 standalone package support needed (on-disk format)
Shawn Walker <shawn.walker@oracle.com>
parents: 2205
diff changeset
  1749
                """Private helper function to cleanup package certificate
60ad60f7592c 2152 standalone package support needed (on-disk format)
Shawn Walker <shawn.walker@oracle.com>
parents: 2205
diff changeset
  1750
                information after use of temporary package data."""
60ad60f7592c 2152 standalone package support needed (on-disk format)
Shawn Walker <shawn.walker@oracle.com>
parents: 2205
diff changeset
  1751
60ad60f7592c 2152 standalone package support needed (on-disk format)
Shawn Walker <shawn.walker@oracle.com>
parents: 2205
diff changeset
  1752
                if not self.__alt_pubs:
60ad60f7592c 2152 standalone package support needed (on-disk format)
Shawn Walker <shawn.walker@oracle.com>
parents: 2205
diff changeset
  1753
                        return
60ad60f7592c 2152 standalone package support needed (on-disk format)
Shawn Walker <shawn.walker@oracle.com>
parents: 2205
diff changeset
  1754
60ad60f7592c 2152 standalone package support needed (on-disk format)
Shawn Walker <shawn.walker@oracle.com>
parents: 2205
diff changeset
  1755
                # Cleanup publisher cert information; any certs not retrieved
60ad60f7592c 2152 standalone package support needed (on-disk format)
Shawn Walker <shawn.walker@oracle.com>
parents: 2205
diff changeset
  1756
                # retrieved during temporary publisher use need to be expunged
60ad60f7592c 2152 standalone package support needed (on-disk format)
Shawn Walker <shawn.walker@oracle.com>
parents: 2205
diff changeset
  1757
                # from the image configuration.
60ad60f7592c 2152 standalone package support needed (on-disk format)
Shawn Walker <shawn.walker@oracle.com>
parents: 2205
diff changeset
  1758
                for pub in self.__alt_pubs:
60ad60f7592c 2152 standalone package support needed (on-disk format)
Shawn Walker <shawn.walker@oracle.com>
parents: 2205
diff changeset
  1759
                        try:
60ad60f7592c 2152 standalone package support needed (on-disk format)
Shawn Walker <shawn.walker@oracle.com>
parents: 2205
diff changeset
  1760
                                ipub = self.cfg.publishers[pub.prefix]
60ad60f7592c 2152 standalone package support needed (on-disk format)
Shawn Walker <shawn.walker@oracle.com>
parents: 2205
diff changeset
  1761
                        except KeyError:
60ad60f7592c 2152 standalone package support needed (on-disk format)
Shawn Walker <shawn.walker@oracle.com>
parents: 2205
diff changeset
  1762
                                # Nothing to do.
60ad60f7592c 2152 standalone package support needed (on-disk format)
Shawn Walker <shawn.walker@oracle.com>
parents: 2205
diff changeset
  1763
                                continue
60ad60f7592c 2152 standalone package support needed (on-disk format)
Shawn Walker <shawn.walker@oracle.com>
parents: 2205
diff changeset
  1764
60ad60f7592c 2152 standalone package support needed (on-disk format)
Shawn Walker <shawn.walker@oracle.com>
parents: 2205
diff changeset
  1765
        def set_alt_pkg_sources(self, alt_sources):
60ad60f7592c 2152 standalone package support needed (on-disk format)
Shawn Walker <shawn.walker@oracle.com>
parents: 2205
diff changeset
  1766
                """Specifies an alternate source of package metadata to be
60ad60f7592c 2152 standalone package support needed (on-disk format)
Shawn Walker <shawn.walker@oracle.com>
parents: 2205
diff changeset
  1767
                temporarily merged with image state so that it can be used
60ad60f7592c 2152 standalone package support needed (on-disk format)
Shawn Walker <shawn.walker@oracle.com>
parents: 2205
diff changeset
  1768
                as part of packaging operations."""
60ad60f7592c 2152 standalone package support needed (on-disk format)
Shawn Walker <shawn.walker@oracle.com>
parents: 2205
diff changeset
  1769
60ad60f7592c 2152 standalone package support needed (on-disk format)
Shawn Walker <shawn.walker@oracle.com>
parents: 2205
diff changeset
  1770
                if not alt_sources:
60ad60f7592c 2152 standalone package support needed (on-disk format)
Shawn Walker <shawn.walker@oracle.com>
parents: 2205
diff changeset
  1771
                        self.__init_catalogs()
60ad60f7592c 2152 standalone package support needed (on-disk format)
Shawn Walker <shawn.walker@oracle.com>
parents: 2205
diff changeset
  1772
                        self.__alt_pkg_pub_map = None
60ad60f7592c 2152 standalone package support needed (on-disk format)
Shawn Walker <shawn.walker@oracle.com>
parents: 2205
diff changeset
  1773
                        self.__alt_pubs = None
60ad60f7592c 2152 standalone package support needed (on-disk format)
Shawn Walker <shawn.walker@oracle.com>
parents: 2205
diff changeset
  1774
                        self.__alt_known_cat = None
60ad60f7592c 2152 standalone package support needed (on-disk format)
Shawn Walker <shawn.walker@oracle.com>
parents: 2205
diff changeset
  1775
                        self.__alt_pkg_sources_loaded = False
60ad60f7592c 2152 standalone package support needed (on-disk format)
Shawn Walker <shawn.walker@oracle.com>
parents: 2205
diff changeset
  1776
                        self.transport.cfg.pkg_pub_map = None
60ad60f7592c 2152 standalone package support needed (on-disk format)
Shawn Walker <shawn.walker@oracle.com>
parents: 2205
diff changeset
  1777
                        self.transport.cfg.alt_pubs = None
60ad60f7592c 2152 standalone package support needed (on-disk format)
Shawn Walker <shawn.walker@oracle.com>
parents: 2205
diff changeset
  1778
                        self.transport.cfg.reset_caches()
60ad60f7592c 2152 standalone package support needed (on-disk format)
Shawn Walker <shawn.walker@oracle.com>
parents: 2205
diff changeset
  1779
                        return
60ad60f7592c 2152 standalone package support needed (on-disk format)
Shawn Walker <shawn.walker@oracle.com>
parents: 2205
diff changeset
  1780
                elif self.__alt_pkg_sources_loaded:
60ad60f7592c 2152 standalone package support needed (on-disk format)
Shawn Walker <shawn.walker@oracle.com>
parents: 2205
diff changeset
  1781
                        # Ensure existing alternate package source data
60ad60f7592c 2152 standalone package support needed (on-disk format)
Shawn Walker <shawn.walker@oracle.com>
parents: 2205
diff changeset
  1782
                        # is not part of temporary image state.
60ad60f7592c 2152 standalone package support needed (on-disk format)
Shawn Walker <shawn.walker@oracle.com>
parents: 2205
diff changeset
  1783
                        self.__init_catalogs()
60ad60f7592c 2152 standalone package support needed (on-disk format)
Shawn Walker <shawn.walker@oracle.com>
parents: 2205
diff changeset
  1784
60ad60f7592c 2152 standalone package support needed (on-disk format)
Shawn Walker <shawn.walker@oracle.com>
parents: 2205
diff changeset
  1785
                pkg_pub_map, alt_pubs, alt_kcat, ignored = alt_sources
60ad60f7592c 2152 standalone package support needed (on-disk format)
Shawn Walker <shawn.walker@oracle.com>
parents: 2205
diff changeset
  1786
                self.__alt_pkg_pub_map = pkg_pub_map
60ad60f7592c 2152 standalone package support needed (on-disk format)
Shawn Walker <shawn.walker@oracle.com>
parents: 2205
diff changeset
  1787
                self.__alt_pubs = alt_pubs
60ad60f7592c 2152 standalone package support needed (on-disk format)
Shawn Walker <shawn.walker@oracle.com>
parents: 2205
diff changeset
  1788
                self.__alt_known_cat = alt_kcat
60ad60f7592c 2152 standalone package support needed (on-disk format)
Shawn Walker <shawn.walker@oracle.com>
parents: 2205
diff changeset
  1789
2310
ce10607d5332 11684 desire option to not propagate certs to non-global zones
Brock Pytlik <brock.pytlik@oracle.com>
parents: 2293
diff changeset
  1790
        def set_highest_ranked_publisher(self, prefix=None, alias=None,
ce10607d5332 11684 desire option to not propagate certs to non-global zones
Brock Pytlik <brock.pytlik@oracle.com>
parents: 2293
diff changeset
  1791
            pub=None):
1102
5ea5cdb4360d 5014 api sets successful result for image-create with failed catalog refresh
Shawn Walker <srw@sun.com>
parents: 1087
diff changeset
  1792
                """Sets the preferred publisher for packaging operations.
5ea5cdb4360d 5014 api sets successful result for image-create with failed catalog refresh
Shawn Walker <srw@sun.com>
parents: 1087
diff changeset
  1793
5ea5cdb4360d 5014 api sets successful result for image-create with failed catalog refresh
Shawn Walker <srw@sun.com>
parents: 1087
diff changeset
  1794
                'prefix' is an optional string value specifying the name of
5ea5cdb4360d 5014 api sets successful result for image-create with failed catalog refresh
Shawn Walker <srw@sun.com>
parents: 1087
diff changeset
  1795
                a publisher; ignored if 'pub' is provided.
5ea5cdb4360d 5014 api sets successful result for image-create with failed catalog refresh
Shawn Walker <srw@sun.com>
parents: 1087
diff changeset
  1796
5ea5cdb4360d 5014 api sets successful result for image-create with failed catalog refresh
Shawn Walker <srw@sun.com>
parents: 1087
diff changeset
  1797
                'alias' is an optional string value specifying the alias of
5ea5cdb4360d 5014 api sets successful result for image-create with failed catalog refresh
Shawn Walker <srw@sun.com>
parents: 1087
diff changeset
  1798
                a publisher; ignored if 'pub' is provided.
5ea5cdb4360d 5014 api sets successful result for image-create with failed catalog refresh
Shawn Walker <srw@sun.com>
parents: 1087
diff changeset
  1799
5ea5cdb4360d 5014 api sets successful result for image-create with failed catalog refresh
Shawn Walker <srw@sun.com>
parents: 1087
diff changeset
  1800
                'pub' is an optional Publisher object identifying the
5ea5cdb4360d 5014 api sets successful result for image-create with failed catalog refresh
Shawn Walker <srw@sun.com>
parents: 1087
diff changeset
  1801
                publisher to set as the preferred publisher.
5ea5cdb4360d 5014 api sets successful result for image-create with failed catalog refresh
Shawn Walker <srw@sun.com>
parents: 1087
diff changeset
  1802
2310
ce10607d5332 11684 desire option to not propagate certs to non-global zones
Brock Pytlik <brock.pytlik@oracle.com>
parents: 2293
diff changeset
  1803
                One of the above parameters must be provided.
ce10607d5332 11684 desire option to not propagate certs to non-global zones
Brock Pytlik <brock.pytlik@oracle.com>
parents: 2293
diff changeset
  1804
ce10607d5332 11684 desire option to not propagate certs to non-global zones
Brock Pytlik <brock.pytlik@oracle.com>
parents: 2293
diff changeset
  1805
                The caller is responsible for locking the image."""
ce10607d5332 11684 desire option to not propagate certs to non-global zones
Brock Pytlik <brock.pytlik@oracle.com>
parents: 2293
diff changeset
  1806
ce10607d5332 11684 desire option to not propagate certs to non-global zones
Brock Pytlik <brock.pytlik@oracle.com>
parents: 2293
diff changeset
  1807
                if not pub:
ce10607d5332 11684 desire option to not propagate certs to non-global zones
Brock Pytlik <brock.pytlik@oracle.com>
parents: 2293
diff changeset
  1808
                        pub = self.get_publisher(prefix=prefix, alias=alias)
ce10607d5332 11684 desire option to not propagate certs to non-global zones
Brock Pytlik <brock.pytlik@oracle.com>
parents: 2293
diff changeset
  1809
                if not self.cfg.allowed_to_move(pub):
ce10607d5332 11684 desire option to not propagate certs to non-global zones
Brock Pytlik <brock.pytlik@oracle.com>
parents: 2293
diff changeset
  1810
                        raise apx.ModifyingSyspubException(_("Publisher '%s' "
ce10607d5332 11684 desire option to not propagate certs to non-global zones
Brock Pytlik <brock.pytlik@oracle.com>
parents: 2293
diff changeset
  1811
                            "is a system publisher and cannot be moved.") % pub)
ce10607d5332 11684 desire option to not propagate certs to non-global zones
Brock Pytlik <brock.pytlik@oracle.com>
parents: 2293
diff changeset
  1812
                relative = None
ce10607d5332 11684 desire option to not propagate certs to non-global zones
Brock Pytlik <brock.pytlik@oracle.com>
parents: 2293
diff changeset
  1813
                ranks = self.get_publisher_ranks()
ce10607d5332 11684 desire option to not propagate certs to non-global zones
Brock Pytlik <brock.pytlik@oracle.com>
parents: 2293
diff changeset
  1814
                rel_rank = None
ce10607d5332 11684 desire option to not propagate certs to non-global zones
Brock Pytlik <brock.pytlik@oracle.com>
parents: 2293
diff changeset
  1815
                for p in ranks:
ce10607d5332 11684 desire option to not propagate certs to non-global zones
Brock Pytlik <brock.pytlik@oracle.com>
parents: 2293
diff changeset
  1816
                        rel_pub = self.get_publisher(p)
ce10607d5332 11684 desire option to not propagate certs to non-global zones
Brock Pytlik <brock.pytlik@oracle.com>
parents: 2293
diff changeset
  1817
                        if not self.cfg.allowed_to_move(rel_pub):
ce10607d5332 11684 desire option to not propagate certs to non-global zones
Brock Pytlik <brock.pytlik@oracle.com>
parents: 2293
diff changeset
  1818
                                continue
ce10607d5332 11684 desire option to not propagate certs to non-global zones
Brock Pytlik <brock.pytlik@oracle.com>
parents: 2293
diff changeset
  1819
                        rank = ranks[p][0]
ce10607d5332 11684 desire option to not propagate certs to non-global zones
Brock Pytlik <brock.pytlik@oracle.com>
parents: 2293
diff changeset
  1820
                        if rel_rank is None or rank < rel_rank:
ce10607d5332 11684 desire option to not propagate certs to non-global zones
Brock Pytlik <brock.pytlik@oracle.com>
parents: 2293
diff changeset
  1821
                                rel_rank = rank
ce10607d5332 11684 desire option to not propagate certs to non-global zones
Brock Pytlik <brock.pytlik@oracle.com>
parents: 2293
diff changeset
  1822
                                relative = rel_pub
ce10607d5332 11684 desire option to not propagate certs to non-global zones
Brock Pytlik <brock.pytlik@oracle.com>
parents: 2293
diff changeset
  1823
                assert relative, "Expected %s to already be part of the " + \
ce10607d5332 11684 desire option to not propagate certs to non-global zones
Brock Pytlik <brock.pytlik@oracle.com>
parents: 2293
diff changeset
  1824
                    "search order:%s" % (relative, ranks)
ce10607d5332 11684 desire option to not propagate certs to non-global zones
Brock Pytlik <brock.pytlik@oracle.com>
parents: 2293
diff changeset
  1825
                if relative == pub:
ce10607d5332 11684 desire option to not propagate certs to non-global zones
Brock Pytlik <brock.pytlik@oracle.com>
parents: 2293
diff changeset
  1826
                        # It's already first in the list of non-system
ce10607d5332 11684 desire option to not propagate certs to non-global zones
Brock Pytlik <brock.pytlik@oracle.com>
parents: 2293
diff changeset
  1827
                        # publishers, so nothing to do.
ce10607d5332 11684 desire option to not propagate certs to non-global zones
Brock Pytlik <brock.pytlik@oracle.com>
parents: 2293
diff changeset
  1828
                        return
ce10607d5332 11684 desire option to not propagate certs to non-global zones
Brock Pytlik <brock.pytlik@oracle.com>
parents: 2293
diff changeset
  1829
                self.cfg.change_publisher_search_order(pub.prefix,
ce10607d5332 11684 desire option to not propagate certs to non-global zones
Brock Pytlik <brock.pytlik@oracle.com>
parents: 2293
diff changeset
  1830
                    relative.prefix, after=False)
2097
068cc63b4d6e 17055 image configuration should use pkg.config classes
Shawn Walker <shawn.walker@oracle.com>
parents: 2092
diff changeset
  1831
068cc63b4d6e 17055 image configuration should use pkg.config classes
Shawn Walker <shawn.walker@oracle.com>
parents: 2092
diff changeset
  1832
        def set_property(self, prop_name, prop_value):
1710
139720e2e756 1668 image locking needed to prevent race conditions
Shawn Walker <srw@sun.com>
parents: 1688
diff changeset
  1833
                with self.locked_op("set-property"):
2097
068cc63b4d6e 17055 image configuration should use pkg.config classes
Shawn Walker <shawn.walker@oracle.com>
parents: 2092
diff changeset
  1834
                        self.cfg.set_property("property", prop_name,
068cc63b4d6e 17055 image configuration should use pkg.config classes
Shawn Walker <shawn.walker@oracle.com>
parents: 2092
diff changeset
  1835
                            prop_value)
068cc63b4d6e 17055 image configuration should use pkg.config classes
Shawn Walker <shawn.walker@oracle.com>
parents: 2092
diff changeset
  1836
                        self.save_config()
068cc63b4d6e 17055 image configuration should use pkg.config classes
Shawn Walker <shawn.walker@oracle.com>
parents: 2092
diff changeset
  1837
068cc63b4d6e 17055 image configuration should use pkg.config classes
Shawn Walker <shawn.walker@oracle.com>
parents: 2092
diff changeset
  1838
        def set_properties(self, properties):
068cc63b4d6e 17055 image configuration should use pkg.config classes
Shawn Walker <shawn.walker@oracle.com>
parents: 2092
diff changeset
  1839
                properties = { "property": properties }
068cc63b4d6e 17055 image configuration should use pkg.config classes
Shawn Walker <shawn.walker@oracle.com>
parents: 2092
diff changeset
  1840
                with self.locked_op("set-property"):
068cc63b4d6e 17055 image configuration should use pkg.config classes
Shawn Walker <shawn.walker@oracle.com>
parents: 2092
diff changeset
  1841
                        self.cfg.set_properties(properties)
1710
139720e2e756 1668 image locking needed to prevent race conditions
Shawn Walker <srw@sun.com>
parents: 1688
diff changeset
  1842
                        self.save_config()
551
233f0eeddd02 856 Image properties
Tom Mueller <Tom.Mueller@sun.com>
parents: 548
diff changeset
  1843
233f0eeddd02 856 Image properties
Tom Mueller <Tom.Mueller@sun.com>
parents: 548
diff changeset
  1844
        def get_property(self, prop_name):
2097
068cc63b4d6e 17055 image configuration should use pkg.config classes
Shawn Walker <shawn.walker@oracle.com>
parents: 2092
diff changeset
  1845
                return self.cfg.get_property("property", prop_name)
551
233f0eeddd02 856 Image properties
Tom Mueller <Tom.Mueller@sun.com>
parents: 548
diff changeset
  1846
233f0eeddd02 856 Image properties
Tom Mueller <Tom.Mueller@sun.com>
parents: 548
diff changeset
  1847
        def has_property(self, prop_name):
2097
068cc63b4d6e 17055 image configuration should use pkg.config classes
Shawn Walker <shawn.walker@oracle.com>
parents: 2092
diff changeset
  1848
                try:
068cc63b4d6e 17055 image configuration should use pkg.config classes
Shawn Walker <shawn.walker@oracle.com>
parents: 2092
diff changeset
  1849
                        self.cfg.get_property("property", prop_name)
068cc63b4d6e 17055 image configuration should use pkg.config classes
Shawn Walker <shawn.walker@oracle.com>
parents: 2092
diff changeset
  1850
                        return True
068cc63b4d6e 17055 image configuration should use pkg.config classes
Shawn Walker <shawn.walker@oracle.com>
parents: 2092
diff changeset
  1851
                except cfg.ConfigError:
068cc63b4d6e 17055 image configuration should use pkg.config classes
Shawn Walker <shawn.walker@oracle.com>
parents: 2092
diff changeset
  1852
                        return False
551
233f0eeddd02 856 Image properties
Tom Mueller <Tom.Mueller@sun.com>
parents: 548
diff changeset
  1853
233f0eeddd02 856 Image properties
Tom Mueller <Tom.Mueller@sun.com>
parents: 548
diff changeset
  1854
        def delete_property(self, prop_name):
1710
139720e2e756 1668 image locking needed to prevent race conditions
Shawn Walker <srw@sun.com>
parents: 1688
diff changeset
  1855
                with self.locked_op("unset-property"):
2097
068cc63b4d6e 17055 image configuration should use pkg.config classes
Shawn Walker <shawn.walker@oracle.com>
parents: 2092
diff changeset
  1856
                        self.cfg.remove_property("property", prop_name)
1710
139720e2e756 1668 image locking needed to prevent race conditions
Shawn Walker <srw@sun.com>
parents: 1688
diff changeset
  1857
                        self.save_config()
551
233f0eeddd02 856 Image properties
Tom Mueller <Tom.Mueller@sun.com>
parents: 548
diff changeset
  1858
2026
d1b30615bc99 9196 pkg(5) should have support for cryptographic manifest signatures
Brock Pytlik <bpytlik@sun.com>
parents: 2003
diff changeset
  1859
        def add_property_value(self, prop_name, prop_value):
d1b30615bc99 9196 pkg(5) should have support for cryptographic manifest signatures
Brock Pytlik <bpytlik@sun.com>
parents: 2003
diff changeset
  1860
                with self.locked_op("add-property-value"):
2097
068cc63b4d6e 17055 image configuration should use pkg.config classes
Shawn Walker <shawn.walker@oracle.com>
parents: 2092
diff changeset
  1861
                        self.cfg.add_property_value("property", prop_name,
068cc63b4d6e 17055 image configuration should use pkg.config classes
Shawn Walker <shawn.walker@oracle.com>
parents: 2092
diff changeset
  1862
                            prop_value)
2026
d1b30615bc99 9196 pkg(5) should have support for cryptographic manifest signatures
Brock Pytlik <bpytlik@sun.com>
parents: 2003
diff changeset
  1863
                        self.save_config()
d1b30615bc99 9196 pkg(5) should have support for cryptographic manifest signatures
Brock Pytlik <bpytlik@sun.com>
parents: 2003
diff changeset
  1864
d1b30615bc99 9196 pkg(5) should have support for cryptographic manifest signatures
Brock Pytlik <bpytlik@sun.com>
parents: 2003
diff changeset
  1865
        def remove_property_value(self, prop_name, prop_value):
d1b30615bc99 9196 pkg(5) should have support for cryptographic manifest signatures
Brock Pytlik <bpytlik@sun.com>
parents: 2003
diff changeset
  1866
                with self.locked_op("remove-property-value"):
2097
068cc63b4d6e 17055 image configuration should use pkg.config classes
Shawn Walker <shawn.walker@oracle.com>
parents: 2092
diff changeset
  1867
                        self.cfg.remove_property_value("property", prop_name,
068cc63b4d6e 17055 image configuration should use pkg.config classes
Shawn Walker <shawn.walker@oracle.com>
parents: 2092
diff changeset
  1868
                            prop_value)
2026
d1b30615bc99 9196 pkg(5) should have support for cryptographic manifest signatures
Brock Pytlik <bpytlik@sun.com>
parents: 2003
diff changeset
  1869
                        self.save_config()
d1b30615bc99 9196 pkg(5) should have support for cryptographic manifest signatures
Brock Pytlik <bpytlik@sun.com>
parents: 2003
diff changeset
  1870
1736
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1733
diff changeset
  1871
        def destroy(self):
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1733
diff changeset
  1872
                """Destroys the image; image object should not be used
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1733
diff changeset
  1873
                afterwards."""
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1733
diff changeset
  1874
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1733
diff changeset
  1875
                if not self.imgdir or not os.path.exists(self.imgdir):
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1733
diff changeset
  1876
                        return
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1733
diff changeset
  1877
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1733
diff changeset
  1878
                if os.path.abspath(self.imgdir) == "/":
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1733
diff changeset
  1879
                        # Paranoia.
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1733
diff changeset
  1880
                        return
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1733
diff changeset
  1881
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1733
diff changeset
  1882
                try:
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1733
diff changeset
  1883
                        shutil.rmtree(self.imgdir)
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1733
diff changeset
  1884
                except EnvironmentError, e:
2073
9fcacc9e5eaa 16998 transport should support publisher-specific write and read caches
Shawn Walker <shawn.walker@oracle.com>
parents: 2069
diff changeset
  1885
                        raise apx._convert_error(e)
1736
727dda1e7968 11522 pkg should require publisher prefix to match repository information
Shawn Walker <srw@sun.com>
parents: 1733
diff changeset
  1886
551
233f0eeddd02 856 Image properties
Tom Mueller <Tom.Mueller@sun.com>
parents: 548
diff changeset
  1887
        def properties(self):
2097
068cc63b4d6e 17055 image configuration should use pkg.config classes
Shawn Walker <shawn.walker@oracle.com>
parents: 2092
diff changeset
  1888
                if not self.cfg:
068cc63b4d6e 17055 image configuration should use pkg.config classes
Shawn Walker <shawn.walker@oracle.com>
parents: 2092
diff changeset
  1889
                        raise apx.ImageCfgEmptyError(self.root)
068cc63b4d6e 17055 image configuration should use pkg.config classes
Shawn Walker <shawn.walker@oracle.com>
parents: 2092
diff changeset
  1890
                return self.cfg.get_index()["property"].keys()
551
233f0eeddd02 856 Image properties
Tom Mueller <Tom.Mueller@sun.com>
parents: 548
diff changeset
  1891
2026
d1b30615bc99 9196 pkg(5) should have support for cryptographic manifest signatures
Brock Pytlik <bpytlik@sun.com>
parents: 2003
diff changeset
  1892
        def add_publisher(self, pub, refresh_allowed=True, progtrack=None,
2310
ce10607d5332 11684 desire option to not propagate certs to non-global zones
Brock Pytlik <brock.pytlik@oracle.com>
parents: 2293
diff changeset
  1893
            approved_cas=EmptyI, revoked_cas=EmptyI, search_after=None,
ce10607d5332 11684 desire option to not propagate certs to non-global zones
Brock Pytlik <brock.pytlik@oracle.com>
parents: 2293
diff changeset
  1894
            search_before=None, search_first=None, unset_cas=EmptyI):
926
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 922
diff changeset
  1895
                """Adds the provided publisher object to the image
1102
5ea5cdb4360d 5014 api sets successful result for image-create with failed catalog refresh
Shawn Walker <srw@sun.com>
parents: 1087
diff changeset
  1896
                configuration.
5ea5cdb4360d 5014 api sets successful result for image-create with failed catalog refresh
Shawn Walker <srw@sun.com>
parents: 1087
diff changeset
  1897
5ea5cdb4360d 5014 api sets successful result for image-create with failed catalog refresh
Shawn Walker <srw@sun.com>
parents: 1087
diff changeset
  1898
                'refresh_allowed' is an optional, boolean value indicating
5ea5cdb4360d 5014 api sets successful result for image-create with failed catalog refresh
Shawn Walker <srw@sun.com>
parents: 1087
diff changeset
  1899
                whether the publisher's metadata should be retrieved when adding
5ea5cdb4360d 5014 api sets successful result for image-create with failed catalog refresh
Shawn Walker <srw@sun.com>
parents: 1087
diff changeset
  1900
                it to the image's configuration.
5ea5cdb4360d 5014 api sets successful result for image-create with failed catalog refresh
Shawn Walker <srw@sun.com>
parents: 1087
diff changeset
  1901
5ea5cdb4360d 5014 api sets successful result for image-create with failed catalog refresh
Shawn Walker <srw@sun.com>
parents: 1087
diff changeset
  1902
                'progtrack' is an optional ProgressTracker object."""
1352
5c92c9d342ef 11065 client v1 catalog support for v0 catalogs
Shawn Walker <srw@sun.com>
parents: 1328
diff changeset
  1903
2219
60ad60f7592c 2152 standalone package support needed (on-disk format)
Shawn Walker <shawn.walker@oracle.com>
parents: 2205
diff changeset
  1904
                with self.locked_op("add-publisher"):
60ad60f7592c 2152 standalone package support needed (on-disk format)
Shawn Walker <shawn.walker@oracle.com>
parents: 2205
diff changeset
  1905
                        return self.__add_publisher(pub,
60ad60f7592c 2152 standalone package support needed (on-disk format)
Shawn Walker <shawn.walker@oracle.com>
parents: 2205
diff changeset
  1906
                            refresh_allowed=refresh_allowed,
60ad60f7592c 2152 standalone package support needed (on-disk format)
Shawn Walker <shawn.walker@oracle.com>
parents: 2205
diff changeset
  1907
                            progtrack=progtrack, approved_cas=EmptyI,
2310
ce10607d5332 11684 desire option to not propagate certs to non-global zones
Brock Pytlik <brock.pytlik@oracle.com>
parents: 2293
diff changeset
  1908
                            revoked_cas=EmptyI, search_after=search_after,
ce10607d5332 11684 desire option to not propagate certs to non-global zones
Brock Pytlik <brock.pytlik@oracle.com>
parents: 2293
diff changeset
  1909
                            search_before=search_before,
ce10607d5332 11684 desire option to not propagate certs to non-global zones
Brock Pytlik <brock.pytlik@oracle.com>
parents: 2293
diff changeset
  1910
                            search_first=search_first, unset_cas=EmptyI)
ce10607d5332 11684 desire option to not propagate certs to non-global zones
Brock Pytlik <brock.pytlik@oracle.com>
parents: 2293
diff changeset
  1911
ce10607d5332 11684 desire option to not propagate certs to non-global zones
Brock Pytlik <brock.pytlik@oracle.com>
parents: 2293
diff changeset
  1912
        def __update_publisher_catalogs(self, pub, progtrack=None,
ce10607d5332 11684 desire option to not propagate certs to non-global zones
Brock Pytlik <brock.pytlik@oracle.com>
parents: 2293
diff changeset
  1913
            refresh_allowed=True):
ce10607d5332 11684 desire option to not propagate certs to non-global zones
Brock Pytlik <brock.pytlik@oracle.com>
parents: 2293
diff changeset
  1914
                # Ensure that if the publisher's meta directory already
ce10607d5332 11684 desire option to not propagate certs to non-global zones
Brock Pytlik <brock.pytlik@oracle.com>
parents: 2293
diff changeset
  1915
                # exists for some reason that the data within is not
ce10607d5332 11684 desire option to not propagate certs to non-global zones
Brock Pytlik <brock.pytlik@oracle.com>
parents: 2293
diff changeset
  1916
                # used.
ce10607d5332 11684 desire option to not propagate certs to non-global zones
Brock Pytlik <brock.pytlik@oracle.com>
parents: 2293
diff changeset
  1917
                self.remove_publisher_metadata(pub, progtrack=progtrack,
ce10607d5332 11684 desire option to not propagate certs to non-global zones
Brock Pytlik <brock.pytlik@oracle.com>
parents: 2293
diff changeset
  1918
                    rebuild=False)
ce10607d5332 11684 desire option to not propagate certs to non-global zones
Brock Pytlik <brock.pytlik@oracle.com>
parents: 2293
diff changeset
  1919
ce10607d5332 11684 desire option to not propagate certs to non-global zones
Brock Pytlik <brock.pytlik@oracle.com>
parents: 2293
diff changeset
  1920
                repo = pub.repository
ce10607d5332 11684 desire option to not propagate certs to non-global zones
Brock Pytlik <brock.pytlik@oracle.com>
parents: 2293
diff changeset
  1921
                if refresh_allowed and repo.origins:
ce10607d5332 11684 desire option to not propagate certs to non-global zones
Brock Pytlik <brock.pytlik@oracle.com>
parents: 2293
diff changeset
  1922
                        try:
ce10607d5332 11684 desire option to not propagate certs to non-global zones
Brock Pytlik <brock.pytlik@oracle.com>
parents: 2293
diff changeset
  1923
                                # First, verify that the publisher has a
ce10607d5332 11684 desire option to not propagate certs to non-global zones
Brock Pytlik <brock.pytlik@oracle.com>
parents: 2293
diff changeset
  1924
                                # valid pkg(5) repository.
ce10607d5332 11684 desire option to not propagate certs to non-global zones
Brock Pytlik <brock.pytlik@oracle.com>
parents: 2293
diff changeset
  1925
                                self.transport.valid_publisher_test(pub)
ce10607d5332 11684 desire option to not propagate certs to non-global zones
Brock Pytlik <brock.pytlik@oracle.com>
parents: 2293
diff changeset
  1926
                                pub.validate_config()
ce10607d5332 11684 desire option to not propagate certs to non-global zones
Brock Pytlik <brock.pytlik@oracle.com>
parents: 2293
diff changeset
  1927
                                self.refresh_publishers(pubs=[pub],
ce10607d5332 11684 desire option to not propagate certs to non-global zones
Brock Pytlik <brock.pytlik@oracle.com>
parents: 2293
diff changeset
  1928
                                    progtrack=progtrack)
ce10607d5332 11684 desire option to not propagate certs to non-global zones
Brock Pytlik <brock.pytlik@oracle.com>
parents: 2293
diff changeset
  1929
                        except Exception, e:
ce10607d5332 11684 desire option to not propagate certs to non-global zones
Brock Pytlik <brock.pytlik@oracle.com>
parents: 2293
diff changeset
  1930
                                # Remove the newly added publisher since
ce10607d5332 11684 desire option to not propagate certs to non-global zones
Brock Pytlik <brock.pytlik@oracle.com>
parents: 2293
diff changeset
  1931
                                # it is invalid or the retrieval failed.
ce10607d5332 11684 desire option to not propagate certs to non-global zones
Brock Pytlik <brock.pytlik@oracle.com>
parents: 2293
diff changeset
  1932
                                if not pub.sys_pub:
ce10607d5332 11684 desire option to not propagate certs to non-global zones
Brock Pytlik <brock.pytlik@oracle.com>
parents: 2293
diff changeset
  1933
                                        self.cfg.remove_publisher(pub.prefix)
ce10607d5332 11684 desire option to not propagate certs to non-global zones
Brock Pytlik <brock.pytlik@oracle.com>
parents: 2293
diff changeset
  1934
                                raise
ce10607d5332 11684 desire option to not propagate certs to non-global zones
Brock Pytlik <brock.pytlik@oracle.com>
parents: 2293
diff changeset
  1935
                        except:
ce10607d5332 11684 desire option to not propagate certs to non-global zones
Brock Pytlik <brock.pytlik@oracle.com>
parents: 2293
diff changeset
  1936
                                # Remove the newly added publisher since
ce10607d5332 11684 desire option to not propagate certs to non-global zones
Brock Pytlik <brock.pytlik@oracle.com>
parents: 2293
diff changeset
  1937
                                # the retrieval failed.
ce10607d5332 11684 desire option to not propagate certs to non-global zones
Brock Pytlik <brock.pytlik@oracle.com>
parents: 2293
diff changeset
  1938
                                if not pub.sys_pub:
ce10607d5332 11684 desire option to not propagate certs to non-global zones
Brock Pytlik <brock.pytlik@oracle.com>
parents: 2293
diff changeset
  1939
                                        self.cfg.remove_publisher(pub.prefix)
ce10607d5332 11684 desire option to not propagate certs to non-global zones
Brock Pytlik <brock.pytlik@oracle.com>
parents: 2293
diff changeset
  1940
                                raise
2219
60ad60f7592c 2152 standalone package support needed (on-disk format)
Shawn Walker <shawn.walker@oracle.com>
parents: 2205
diff changeset
  1941
60ad60f7592c 2152 standalone package support needed (on-disk format)
Shawn Walker <shawn.walker@oracle.com>
parents: 2205
diff changeset
  1942
        def __add_publisher(self, pub, refresh_allowed=True, progtrack=None,
2310
ce10607d5332 11684 desire option to not propagate certs to non-global zones
Brock Pytlik <brock.pytlik@oracle.com>
parents: 2293
diff changeset
  1943
            approved_cas=EmptyI, revoked_cas=EmptyI, search_after=None,
ce10607d5332 11684 desire option to not propagate certs to non-global zones
Brock Pytlik <brock.pytlik@oracle.com>
parents: 2293
diff changeset
  1944
            search_before=None, search_first=None, unset_cas=EmptyI):
2219
60ad60f7592c 2152 standalone package support needed (on-disk format)
Shawn Walker <shawn.walker@oracle.com>
parents: 2205
diff changeset
  1945
                """Private version of add_publisher(); caller is responsible
60ad60f7592c 2152 standalone package support needed (on-disk format)
Shawn Walker <shawn.walker@oracle.com>
parents: 2205
diff changeset
  1946
                for locking."""
1733
7ffa6f902aa0 9218 pkg.client.api should check for cross-alias/prefix duplicates
Shawn Walker <srw@sun.com>
parents: 1710
diff changeset
  1947
2310
ce10607d5332 11684 desire option to not propagate certs to non-global zones
Brock Pytlik <brock.pytlik@oracle.com>
parents: 2293
diff changeset
  1948
                assert (not search_after and not search_before) or \
ce10607d5332 11684 desire option to not propagate certs to non-global zones
Brock Pytlik <brock.pytlik@oracle.com>
parents: 2293
diff changeset
  1949
                    (not search_after and not search_first) or \
ce10607d5332 11684 desire option to not propagate certs to non-global zones
Brock Pytlik <brock.pytlik@oracle.com>
parents: 2293
diff changeset
  1950
                    (not search_before and not search_first)
ce10607d5332 11684 desire option to not propagate certs to non-global zones
Brock Pytlik <brock.pytlik@oracle.com>
parents: 2293
diff changeset
  1951
2144
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  1952
                if self.version < self.CURRENT_VERSION:
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  1953
                        raise apx.ImageFormatUpdateNeeded(self.root)
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  1954
2219
60ad60f7592c 2152 standalone package support needed (on-disk format)
Shawn Walker <shawn.walker@oracle.com>
parents: 2205
diff changeset
  1955
                for p in self.cfg.publishers.values():
60ad60f7592c 2152 standalone package support needed (on-disk format)
Shawn Walker <shawn.walker@oracle.com>
parents: 2205
diff changeset
  1956
                        if pub.prefix == p.prefix or \
60ad60f7592c 2152 standalone package support needed (on-disk format)
Shawn Walker <shawn.walker@oracle.com>
parents: 2205
diff changeset
  1957
                            pub.prefix == p.alias or \
60ad60f7592c 2152 standalone package support needed (on-disk format)
Shawn Walker <shawn.walker@oracle.com>
parents: 2205
diff changeset
  1958
                            pub.alias and (pub.alias == p.alias or
60ad60f7592c 2152 standalone package support needed (on-disk format)
Shawn Walker <shawn.walker@oracle.com>
parents: 2205
diff changeset
  1959
                            pub.alias == p.prefix):
60ad60f7592c 2152 standalone package support needed (on-disk format)
Shawn Walker <shawn.walker@oracle.com>
parents: 2205
diff changeset
  1960
                                raise apx.DuplicatePublisher(pub)
60ad60f7592c 2152 standalone package support needed (on-disk format)
Shawn Walker <shawn.walker@oracle.com>
parents: 2205
diff changeset
  1961
60ad60f7592c 2152 standalone package support needed (on-disk format)
Shawn Walker <shawn.walker@oracle.com>
parents: 2205
diff changeset
  1962
                if not progtrack:
60ad60f7592c 2152 standalone package support needed (on-disk format)
Shawn Walker <shawn.walker@oracle.com>
parents: 2205
diff changeset
  1963
                        progtrack = progress.QuietProgressTracker()
60ad60f7592c 2152 standalone package support needed (on-disk format)
Shawn Walker <shawn.walker@oracle.com>
parents: 2205
diff changeset
  1964
60ad60f7592c 2152 standalone package support needed (on-disk format)
Shawn Walker <shawn.walker@oracle.com>
parents: 2205
diff changeset
  1965
                # Must assign this first before performing operations.
60ad60f7592c 2152 standalone package support needed (on-disk format)
Shawn Walker <shawn.walker@oracle.com>
parents: 2205
diff changeset
  1966
                pub.meta_root = self._get_publisher_meta_root(
60ad60f7592c 2152 standalone package support needed (on-disk format)
Shawn Walker <shawn.walker@oracle.com>
parents: 2205
diff changeset
  1967
                    pub.prefix)
60ad60f7592c 2152 standalone package support needed (on-disk format)
Shawn Walker <shawn.walker@oracle.com>
parents: 2205
diff changeset
  1968
                pub.transport = self.transport
60ad60f7592c 2152 standalone package support needed (on-disk format)
Shawn Walker <shawn.walker@oracle.com>
parents: 2205
diff changeset
  1969
                self.cfg.publishers[pub.prefix] = pub
60ad60f7592c 2152 standalone package support needed (on-disk format)
Shawn Walker <shawn.walker@oracle.com>
parents: 2205
diff changeset
  1970
2310
ce10607d5332 11684 desire option to not propagate certs to non-global zones
Brock Pytlik <brock.pytlik@oracle.com>
parents: 2293
diff changeset
  1971
                self.__update_publisher_catalogs(pub, progtrack=progtrack,
ce10607d5332 11684 desire option to not propagate certs to non-global zones
Brock Pytlik <brock.pytlik@oracle.com>
parents: 2293
diff changeset
  1972
                    refresh_allowed=refresh_allowed)
2219
60ad60f7592c 2152 standalone package support needed (on-disk format)
Shawn Walker <shawn.walker@oracle.com>
parents: 2205
diff changeset
  1973
60ad60f7592c 2152 standalone package support needed (on-disk format)
Shawn Walker <shawn.walker@oracle.com>
parents: 2205
diff changeset
  1974
                for ca in approved_cas:
60ad60f7592c 2152 standalone package support needed (on-disk format)
Shawn Walker <shawn.walker@oracle.com>
parents: 2205
diff changeset
  1975
                        try:
60ad60f7592c 2152 standalone package support needed (on-disk format)
Shawn Walker <shawn.walker@oracle.com>
parents: 2205
diff changeset
  1976
                                ca = os.path.abspath(ca)
60ad60f7592c 2152 standalone package support needed (on-disk format)
Shawn Walker <shawn.walker@oracle.com>
parents: 2205
diff changeset
  1977
                                fh = open(ca, "rb")
60ad60f7592c 2152 standalone package support needed (on-disk format)
Shawn Walker <shawn.walker@oracle.com>
parents: 2205
diff changeset
  1978
                                s = fh.read()
60ad60f7592c 2152 standalone package support needed (on-disk format)
Shawn Walker <shawn.walker@oracle.com>
parents: 2205
diff changeset
  1979
                                fh.close()
60ad60f7592c 2152 standalone package support needed (on-disk format)
Shawn Walker <shawn.walker@oracle.com>
parents: 2205
diff changeset
  1980
                        except EnvironmentError, e:
60ad60f7592c 2152 standalone package support needed (on-disk format)
Shawn Walker <shawn.walker@oracle.com>
parents: 2205
diff changeset
  1981
                                if e.errno == errno.ENOENT:
60ad60f7592c 2152 standalone package support needed (on-disk format)
Shawn Walker <shawn.walker@oracle.com>
parents: 2205
diff changeset
  1982
                                        raise apx.MissingFileArgumentException(
60ad60f7592c 2152 standalone package support needed (on-disk format)
Shawn Walker <shawn.walker@oracle.com>
parents: 2205
diff changeset
  1983
                                            ca)
60ad60f7592c 2152 standalone package support needed (on-disk format)
Shawn Walker <shawn.walker@oracle.com>
parents: 2205
diff changeset
  1984
                                raise apx._convert_error(e)
2310
ce10607d5332 11684 desire option to not propagate certs to non-global zones
Brock Pytlik <brock.pytlik@oracle.com>
parents: 2293
diff changeset
  1985
                        pub.approve_ca_cert(s, manual=True)
2219
60ad60f7592c 2152 standalone package support needed (on-disk format)
Shawn Walker <shawn.walker@oracle.com>
parents: 2205
diff changeset
  1986
60ad60f7592c 2152 standalone package support needed (on-disk format)
Shawn Walker <shawn.walker@oracle.com>
parents: 2205
diff changeset
  1987
                for hsh in revoked_cas:
60ad60f7592c 2152 standalone package support needed (on-disk format)
Shawn Walker <shawn.walker@oracle.com>
parents: 2205
diff changeset
  1988
                        pub.revoke_ca_cert(hsh)
60ad60f7592c 2152 standalone package support needed (on-disk format)
Shawn Walker <shawn.walker@oracle.com>
parents: 2205
diff changeset
  1989
60ad60f7592c 2152 standalone package support needed (on-disk format)
Shawn Walker <shawn.walker@oracle.com>
parents: 2205
diff changeset
  1990
                for hsh in unset_cas:
60ad60f7592c 2152 standalone package support needed (on-disk format)
Shawn Walker <shawn.walker@oracle.com>
parents: 2205
diff changeset
  1991
                        pub.unset_ca_cert(hsh)
60ad60f7592c 2152 standalone package support needed (on-disk format)
Shawn Walker <shawn.walker@oracle.com>
parents: 2205
diff changeset
  1992
2310
ce10607d5332 11684 desire option to not propagate certs to non-global zones
Brock Pytlik <brock.pytlik@oracle.com>
parents: 2293
diff changeset
  1993
                if search_first:
ce10607d5332 11684 desire option to not propagate certs to non-global zones
Brock Pytlik <brock.pytlik@oracle.com>
parents: 2293
diff changeset
  1994
                        self.set_highest_ranked_publisher(prefix=pub.prefix)
ce10607d5332 11684 desire option to not propagate certs to non-global zones
Brock Pytlik <brock.pytlik@oracle.com>
parents: 2293
diff changeset
  1995
                elif search_before:
ce10607d5332 11684 desire option to not propagate certs to non-global zones
Brock Pytlik <brock.pytlik@oracle.com>
parents: 2293
diff changeset
  1996
                        self.pub_search_before(pub.prefix, search_before)
ce10607d5332 11684 desire option to not propagate certs to non-global zones
Brock Pytlik <brock.pytlik@oracle.com>
parents: 2293
diff changeset
  1997
                elif search_after:
ce10607d5332 11684 desire option to not propagate certs to non-global zones
Brock Pytlik <brock.pytlik@oracle.com>
parents: 2293
diff changeset
  1998
                        self.pub_search_after(pub.prefix, search_after)
ce10607d5332 11684 desire option to not propagate certs to non-global zones
Brock Pytlik <brock.pytlik@oracle.com>
parents: 2293
diff changeset
  1999
2219
60ad60f7592c 2152 standalone package support needed (on-disk format)
Shawn Walker <shawn.walker@oracle.com>
parents: 2205
diff changeset
  2000
                # Only after success should the configuration be saved.
60ad60f7592c 2152 standalone package support needed (on-disk format)
Shawn Walker <shawn.walker@oracle.com>
parents: 2205
diff changeset
  2001
                self.save_config()
539
7486304966c5 1449 pkg requires operational history
Shawn Walker <shawn.walker@sun.com>
parents: 537
diff changeset
  2002
2339
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2335
diff changeset
  2003
        def verify(self, fmri, progresstracker, **kwargs):
1685
51f832187af7 3005 some pkg verify errors should be warnings or informational messages
Shawn Walker <srw@sun.com>
parents: 1678
diff changeset
  2004
                """Generator that returns a tuple of the form (action, errors,
51f832187af7 3005 some pkg verify errors should be warnings or informational messages
Shawn Walker <srw@sun.com>
parents: 1678
diff changeset
  2005
                warnings, info) if there are any error, warning, or other
51f832187af7 3005 some pkg verify errors should be warnings or informational messages
Shawn Walker <srw@sun.com>
parents: 1678
diff changeset
  2006
                messages about an action contained within the specified
51f832187af7 3005 some pkg verify errors should be warnings or informational messages
Shawn Walker <srw@sun.com>
parents: 1678
diff changeset
  2007
                package.  Where the returned messages are lists of strings
51f832187af7 3005 some pkg verify errors should be warnings or informational messages
Shawn Walker <srw@sun.com>
parents: 1678
diff changeset
  2008
                indicating fatal problems, potential issues (that can be
51f832187af7 3005 some pkg verify errors should be warnings or informational messages
Shawn Walker <srw@sun.com>
parents: 1678
diff changeset
  2009
                ignored), or extra information to be displayed respectively.
51f832187af7 3005 some pkg verify errors should be warnings or informational messages
Shawn Walker <srw@sun.com>
parents: 1678
diff changeset
  2010
51f832187af7 3005 some pkg verify errors should be warnings or informational messages
Shawn Walker <srw@sun.com>
parents: 1678
diff changeset
  2011
                'fmri' is the fmri of the package to verify.
51f832187af7 3005 some pkg verify errors should be warnings or informational messages
Shawn Walker <srw@sun.com>
parents: 1678
diff changeset
  2012
51f832187af7 3005 some pkg verify errors should be warnings or informational messages
Shawn Walker <srw@sun.com>
parents: 1678
diff changeset
  2013
                'progresstracker' is a ProgressTracker object.
51f832187af7 3005 some pkg verify errors should be warnings or informational messages
Shawn Walker <srw@sun.com>
parents: 1678
diff changeset
  2014
2339
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2335
diff changeset
  2015
                'kwargs' is a dict of additional keyword arguments to be passed
1685
51f832187af7 3005 some pkg verify errors should be warnings or informational messages
Shawn Walker <srw@sun.com>
parents: 1678
diff changeset
  2016
                to each action verification routine."""
222
12006bf2a260 4 We need to be able to verify that package(s) is/are correctly installed
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 221
diff changeset
  2017
2026
d1b30615bc99 9196 pkg(5) should have support for cryptographic manifest signatures
Brock Pytlik <bpytlik@sun.com>
parents: 2003
diff changeset
  2018
                try:
2261
3c66f438398d 17961 pkg verify aborts if a package from a removed publisher is installed
Shawn Walker <shawn.walker@oracle.com>
parents: 2228
diff changeset
  2019
                        pub = self.get_publisher(prefix=fmri.publisher)
3c66f438398d 17961 pkg verify aborts if a package from a removed publisher is installed
Shawn Walker <shawn.walker@oracle.com>
parents: 2228
diff changeset
  2020
                except apx.UnknownPublisher:
3c66f438398d 17961 pkg verify aborts if a package from a removed publisher is installed
Shawn Walker <shawn.walker@oracle.com>
parents: 2228
diff changeset
  2021
                        # Since user removed publisher, assume this is the same
3c66f438398d 17961 pkg verify aborts if a package from a removed publisher is installed
Shawn Walker <shawn.walker@oracle.com>
parents: 2228
diff changeset
  2022
                        # as if they had set signature-policy ignore for the
3c66f438398d 17961 pkg verify aborts if a package from a removed publisher is installed
Shawn Walker <shawn.walker@oracle.com>
parents: 2228
diff changeset
  2023
                        # publisher.
3c66f438398d 17961 pkg verify aborts if a package from a removed publisher is installed
Shawn Walker <shawn.walker@oracle.com>
parents: 2228
diff changeset
  2024
                        sig_pol = None
3c66f438398d 17961 pkg verify aborts if a package from a removed publisher is installed
Shawn Walker <shawn.walker@oracle.com>
parents: 2228
diff changeset
  2025
                else:
2026
d1b30615bc99 9196 pkg(5) should have support for cryptographic manifest signatures
Brock Pytlik <bpytlik@sun.com>
parents: 2003
diff changeset
  2026
                        sig_pol = self.signature_policy.combine(
d1b30615bc99 9196 pkg(5) should have support for cryptographic manifest signatures
Brock Pytlik <bpytlik@sun.com>
parents: 2003
diff changeset
  2027
                            pub.signature_policy)
2261
3c66f438398d 17961 pkg verify aborts if a package from a removed publisher is installed
Shawn Walker <shawn.walker@oracle.com>
parents: 2228
diff changeset
  2028
2331
cc898866d552 18257 signed packages with variants fail pkg verify
Brock Pytlik <brock.pytlik@oracle.com>
parents: 2330
diff changeset
  2029
                manf = self.get_manifest(fmri, all_variants=True)
2261
3c66f438398d 17961 pkg verify aborts if a package from a removed publisher is installed
Shawn Walker <shawn.walker@oracle.com>
parents: 2228
diff changeset
  2030
                sigs = list(manf.gen_actions_by_type("signature",
3c66f438398d 17961 pkg verify aborts if a package from a removed publisher is installed
Shawn Walker <shawn.walker@oracle.com>
parents: 2228
diff changeset
  2031
                    self.list_excludes()))
3c66f438398d 17961 pkg verify aborts if a package from a removed publisher is installed
Shawn Walker <shawn.walker@oracle.com>
parents: 2228
diff changeset
  2032
                if sig_pol and (sigs or sig_pol.name != "ignore"):
3c66f438398d 17961 pkg verify aborts if a package from a removed publisher is installed
Shawn Walker <shawn.walker@oracle.com>
parents: 2228
diff changeset
  2033
                        # Only perform signature verification logic if there are
3c66f438398d 17961 pkg verify aborts if a package from a removed publisher is installed
Shawn Walker <shawn.walker@oracle.com>
parents: 2228
diff changeset
  2034
                        # signatures or if signature-policy is not 'ignore'.
3c66f438398d 17961 pkg verify aborts if a package from a removed publisher is installed
Shawn Walker <shawn.walker@oracle.com>
parents: 2228
diff changeset
  2035
                        try:
2331
cc898866d552 18257 signed packages with variants fail pkg verify
Brock Pytlik <brock.pytlik@oracle.com>
parents: 2330
diff changeset
  2036
                                # Signature verification must be done using all
cc898866d552 18257 signed packages with variants fail pkg verify
Brock Pytlik <brock.pytlik@oracle.com>
parents: 2330
diff changeset
  2037
                                # the actions from the manifest, not just the
cc898866d552 18257 signed packages with variants fail pkg verify
Brock Pytlik <brock.pytlik@oracle.com>
parents: 2330
diff changeset
  2038
                                # ones for this image's variants.
2261
3c66f438398d 17961 pkg verify aborts if a package from a removed publisher is installed
Shawn Walker <shawn.walker@oracle.com>
parents: 2228
diff changeset
  2039
                                sig_pol.process_signatures(sigs,
2286
938fbb350ad2 16867 pkgsign should handle existing signatures better
Brock Pytlik <brock.pytlik@oracle.com>
parents: 2261
diff changeset
  2040
                                    manf.gen_actions(), pub, self.trust_anchors)
2261
3c66f438398d 17961 pkg verify aborts if a package from a removed publisher is installed
Shawn Walker <shawn.walker@oracle.com>
parents: 2228
diff changeset
  2041
                        except apx.SigningException, e:
3c66f438398d 17961 pkg verify aborts if a package from a removed publisher is installed
Shawn Walker <shawn.walker@oracle.com>
parents: 2228
diff changeset
  2042
                                e.pfmri = fmri
3c66f438398d 17961 pkg verify aborts if a package from a removed publisher is installed
Shawn Walker <shawn.walker@oracle.com>
parents: 2228
diff changeset
  2043
                                yield e.sig, [e], [], []
3c66f438398d 17961 pkg verify aborts if a package from a removed publisher is installed
Shawn Walker <shawn.walker@oracle.com>
parents: 2228
diff changeset
  2044
                        except apx.InvalidResourceLocation, e:
3c66f438398d 17961 pkg verify aborts if a package from a removed publisher is installed
Shawn Walker <shawn.walker@oracle.com>
parents: 2228
diff changeset
  2045
                                yield [], [e], [], []
2026
d1b30615bc99 9196 pkg(5) should have support for cryptographic manifest signatures
Brock Pytlik <bpytlik@sun.com>
parents: 2003
diff changeset
  2046
d1b30615bc99 9196 pkg(5) should have support for cryptographic manifest signatures
Brock Pytlik <bpytlik@sun.com>
parents: 2003
diff changeset
  2047
                for act in manf.gen_actions(
926
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 922
diff changeset
  2048
                    self.list_excludes()):
2073
9fcacc9e5eaa 16998 transport should support publisher-specific write and read caches
Shawn Walker <shawn.walker@oracle.com>
parents: 2069
diff changeset
  2049
                        errors, warnings, info = act.verify(self, pfmri=fmri,
2339
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2335
diff changeset
  2050
                            **kwargs)
235
61994d15c39b 373 design a nice default output for install/update/remove
Dan Price <dp@eng.sun.com>
parents: 226
diff changeset
  2051
                        progresstracker.verify_add_progress(fmri)
61994d15c39b 373 design a nice default output for install/update/remove
Dan Price <dp@eng.sun.com>
parents: 226
diff changeset
  2052
                        actname = act.distinguished_name()
61994d15c39b 373 design a nice default output for install/update/remove
Dan Price <dp@eng.sun.com>
parents: 226
diff changeset
  2053
                        if errors:
61994d15c39b 373 design a nice default output for install/update/remove
Dan Price <dp@eng.sun.com>
parents: 226
diff changeset
  2054
                                progresstracker.verify_yield_error(actname,
61994d15c39b 373 design a nice default output for install/update/remove
Dan Price <dp@eng.sun.com>
parents: 226
diff changeset
  2055
                                    errors)
1685
51f832187af7 3005 some pkg verify errors should be warnings or informational messages
Shawn Walker <srw@sun.com>
parents: 1678
diff changeset
  2056
                        if warnings:
51f832187af7 3005 some pkg verify errors should be warnings or informational messages
Shawn Walker <srw@sun.com>
parents: 1678
diff changeset
  2057
                                progresstracker.verify_yield_warning(actname,
51f832187af7 3005 some pkg verify errors should be warnings or informational messages
Shawn Walker <srw@sun.com>
parents: 1678
diff changeset
  2058
                                    warnings)
51f832187af7 3005 some pkg verify errors should be warnings or informational messages
Shawn Walker <srw@sun.com>
parents: 1678
diff changeset
  2059
                        if info:
51f832187af7 3005 some pkg verify errors should be warnings or informational messages
Shawn Walker <srw@sun.com>
parents: 1678
diff changeset
  2060
                                progresstracker.verify_yield_info(actname,
51f832187af7 3005 some pkg verify errors should be warnings or informational messages
Shawn Walker <srw@sun.com>
parents: 1678
diff changeset
  2061
                                    info)
51f832187af7 3005 some pkg verify errors should be warnings or informational messages
Shawn Walker <srw@sun.com>
parents: 1678
diff changeset
  2062
                        if errors or warnings or info:
51f832187af7 3005 some pkg verify errors should be warnings or informational messages
Shawn Walker <srw@sun.com>
parents: 1678
diff changeset
  2063
                                yield act, errors, warnings, info
583
fc856572d86e 388 pkg command needs a "fix" subcommand or similar
Brad Hall <bhall@eng.sun.com>
parents: 582
diff changeset
  2064
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  2065
        def image_config_update(self, new_variants, new_facets):
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  2066
                """update variants in image config"""
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  2067
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  2068
                if new_variants is not None:
2097
068cc63b4d6e 17055 image configuration should use pkg.config classes
Shawn Walker <shawn.walker@oracle.com>
parents: 2092
diff changeset
  2069
                        self.cfg.variants.update(new_variants)
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  2070
                if new_facets is not None:
2097
068cc63b4d6e 17055 image configuration should use pkg.config classes
Shawn Walker <shawn.walker@oracle.com>
parents: 2092
diff changeset
  2071
                        self.cfg.facets = new_facets
068cc63b4d6e 17055 image configuration should use pkg.config classes
Shawn Walker <shawn.walker@oracle.com>
parents: 2092
diff changeset
  2072
                self.cfg.write()
1271
036d87b0bd44 6831 need 'pkg change-variant' command
Edward Pilatowicz <Edward.Pilatowicz@Sun.COM>
parents: 1256
diff changeset
  2073
1710
139720e2e756 1668 image locking needed to prevent race conditions
Shawn Walker <srw@sun.com>
parents: 1688
diff changeset
  2074
        def repair(self, *args, **kwargs):
583
fc856572d86e 388 pkg command needs a "fix" subcommand or similar
Brad Hall <bhall@eng.sun.com>
parents: 582
diff changeset
  2075
                """Repair any actions in the fmri that failed a verify."""
2144
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  2076
2154
68e263d9287c 17417 t_pkg_history test unnecessarily wants a unique timestamp
Tim Foster <tim.s.foster@oracle.com>
parents: 2152
diff changeset
  2077
                # prune off any new_history_op keyword argument, used for
68e263d9287c 17417 t_pkg_history test unnecessarily wants a unique timestamp
Tim Foster <tim.s.foster@oracle.com>
parents: 2152
diff changeset
  2078
                # locked_op(), but not for __repair()
68e263d9287c 17417 t_pkg_history test unnecessarily wants a unique timestamp
Tim Foster <tim.s.foster@oracle.com>
parents: 2152
diff changeset
  2079
                need_history_op = kwargs.pop("new_history_op", True)
68e263d9287c 17417 t_pkg_history test unnecessarily wants a unique timestamp
Tim Foster <tim.s.foster@oracle.com>
parents: 2152
diff changeset
  2080
68e263d9287c 17417 t_pkg_history test unnecessarily wants a unique timestamp
Tim Foster <tim.s.foster@oracle.com>
parents: 2152
diff changeset
  2081
                with self.locked_op("fix", new_history_op=need_history_op):
1755
8e1ed1373f93 9123 client traceback during install for bad file mode
Shawn Walker <srw@sun.com>
parents: 1736
diff changeset
  2082
                        try:
8e1ed1373f93 9123 client traceback during install for bad file mode
Shawn Walker <srw@sun.com>
parents: 1736
diff changeset
  2083
                                return self.__repair(*args, **kwargs)
2073
9fcacc9e5eaa 16998 transport should support publisher-specific write and read caches
Shawn Walker <shawn.walker@oracle.com>
parents: 2069
diff changeset
  2084
                        except apx.ActionExecutionError, e:
1859
6e6e866921e7 529 client can traceback with EBUSY during action removal
Shawn Walker <shawn.walker@oracle.com>
parents: 1842
diff changeset
  2085
                                raise
1755
8e1ed1373f93 9123 client traceback during install for bad file mode
Shawn Walker <srw@sun.com>
parents: 1736
diff changeset
  2086
                        except pkg.actions.ActionError, e:
2073
9fcacc9e5eaa 16998 transport should support publisher-specific write and read caches
Shawn Walker <shawn.walker@oracle.com>
parents: 2069
diff changeset
  2087
                                raise apx.InvalidPackageErrors([e])
1710
139720e2e756 1668 image locking needed to prevent race conditions
Shawn Walker <srw@sun.com>
parents: 1688
diff changeset
  2088
139720e2e756 1668 image locking needed to prevent race conditions
Shawn Walker <srw@sun.com>
parents: 1688
diff changeset
  2089
        def __repair(self, repairs, progtrack, accept=False,
139720e2e756 1668 image locking needed to prevent race conditions
Shawn Walker <srw@sun.com>
parents: 1688
diff changeset
  2090
            show_licenses=False):
139720e2e756 1668 image locking needed to prevent race conditions
Shawn Walker <srw@sun.com>
parents: 1688
diff changeset
  2091
                """Private repair method; caller is responsible for locking."""
139720e2e756 1668 image locking needed to prevent race conditions
Shawn Walker <srw@sun.com>
parents: 1688
diff changeset
  2092
2144
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  2093
                if self.version < self.CURRENT_VERSION:
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  2094
                        raise apx.ImageFormatUpdateNeeded(self.root)
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  2095
1710
139720e2e756 1668 image locking needed to prevent race conditions
Shawn Walker <srw@sun.com>
parents: 1688
diff changeset
  2096
                ilm = self.get_last_modified()
139720e2e756 1668 image locking needed to prevent race conditions
Shawn Walker <srw@sun.com>
parents: 1688
diff changeset
  2097
1837
03aa2b10f29d 15169 image-update plans twice and keeps both
Shawn Walker <shawn.walker@oracle.com>
parents: 1832
diff changeset
  2098
                # Allow garbage collection of previous plan.
03aa2b10f29d 15169 image-update plans twice and keeps both
Shawn Walker <shawn.walker@oracle.com>
parents: 1832
diff changeset
  2099
                self.imageplan = None
03aa2b10f29d 15169 image-update plans twice and keeps both
Shawn Walker <shawn.walker@oracle.com>
parents: 1832
diff changeset
  2100
2154
68e263d9287c 17417 t_pkg_history test unnecessarily wants a unique timestamp
Tim Foster <tim.s.foster@oracle.com>
parents: 2152
diff changeset
  2101
                reason = "The following packages needed to be repaired:\n    %s"
68e263d9287c 17417 t_pkg_history test unnecessarily wants a unique timestamp
Tim Foster <tim.s.foster@oracle.com>
parents: 2152
diff changeset
  2102
                self.history.operation_start_state = \
68e263d9287c 17417 t_pkg_history test unnecessarily wants a unique timestamp
Tim Foster <tim.s.foster@oracle.com>
parents: 2152
diff changeset
  2103
                    reason % "\n    ".join(str(fmri)
68e263d9287c 17417 t_pkg_history test unnecessarily wants a unique timestamp
Tim Foster <tim.s.foster@oracle.com>
parents: 2152
diff changeset
  2104
                    for fmri, failed in repairs)
68e263d9287c 17417 t_pkg_history test unnecessarily wants a unique timestamp
Tim Foster <tim.s.foster@oracle.com>
parents: 2152
diff changeset
  2105
687
3d7060f40501 4450 pkg fix passes bogus cancellation point to pkgplan/imageplan
Brad Hall <bhall@eng.sun.com>
parents: 685
diff changeset
  2106
                # XXX: This (lambda x: False) is temporary until we move pkg fix
3d7060f40501 4450 pkg fix passes bogus cancellation point to pkgplan/imageplan
Brad Hall <bhall@eng.sun.com>
parents: 685
diff changeset
  2107
                # into the api and can actually use the
2339
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2335
diff changeset
  2108
                # api::__check_cancel() function.
583
fc856572d86e 388 pkg command needs a "fix" subcommand or similar
Brad Hall <bhall@eng.sun.com>
parents: 582
diff changeset
  2109
                pps = []
fc856572d86e 388 pkg command needs a "fix" subcommand or similar
Brad Hall <bhall@eng.sun.com>
parents: 582
diff changeset
  2110
                for fmri, actions in repairs:
1431
62b6033670e4 10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents: 1402
diff changeset
  2111
                        logger.info("Repairing: %-50s" % fmri.get_pkg_stem())
838
aafbe4737188 3245 need to support creation of multi-architecture (fat) packages
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 835
diff changeset
  2112
                        m = self.get_manifest(fmri)
692
ccf4f4e9da34 4818 pkg fix traceback
Brad Hall <bhall@eng.sun.com>
parents: 687
diff changeset
  2113
                        pp = pkgplan.PkgPlan(self, progtrack, lambda: False)
583
fc856572d86e 388 pkg command needs a "fix" subcommand or similar
Brad Hall <bhall@eng.sun.com>
parents: 582
diff changeset
  2114
                        pp.propose_repair(fmri, m, actions)
838
aafbe4737188 3245 need to support creation of multi-architecture (fat) packages
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 835
diff changeset
  2115
                        pp.evaluate(self.list_excludes(), self.list_excludes())
583
fc856572d86e 388 pkg command needs a "fix" subcommand or similar
Brad Hall <bhall@eng.sun.com>
parents: 582
diff changeset
  2116
                        pps.append(pp)
1837
03aa2b10f29d 15169 image-update plans twice and keeps both
Shawn Walker <shawn.walker@oracle.com>
parents: 1832
diff changeset
  2117
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  2118
                ip = imageplan.ImagePlan(self, progtrack, lambda: False)
1710
139720e2e756 1668 image locking needed to prevent race conditions
Shawn Walker <srw@sun.com>
parents: 1688
diff changeset
  2119
                ip._image_lm = ilm
1832
df15686547e4 6795 pkg fix should fix file modes for some preserved files
Shawn Walker <shawn.walker@oracle.com>
parents: 1829
diff changeset
  2120
                ip._planned_op = ip.PLANNED_FIX
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  2121
                self.imageplan = ip
583
fc856572d86e 388 pkg command needs a "fix" subcommand or similar
Brad Hall <bhall@eng.sun.com>
parents: 582
diff changeset
  2122
1195
cd29e45e4023 9384 pkg fix unexpectedly indexes packages
Brock Pytlik <bpytlik@sun.com>
parents: 1191
diff changeset
  2123
                ip.update_index = False
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  2124
                ip.state = imageplan.EVALUATED_PKGS
625
e46b345645d6 3799 need to start progress tracker going early on
Brock Pytlik <bpytlik@sun.com>
parents: 621
diff changeset
  2125
                progtrack.evaluate_start()
1710
139720e2e756 1668 image locking needed to prevent race conditions
Shawn Walker <srw@sun.com>
parents: 1688
diff changeset
  2126
139720e2e756 1668 image locking needed to prevent race conditions
Shawn Walker <srw@sun.com>
parents: 1688
diff changeset
  2127
                # Always start with most current (on-disk) state information.
139720e2e756 1668 image locking needed to prevent race conditions
Shawn Walker <srw@sun.com>
parents: 1688
diff changeset
  2128
                self.__init_catalogs()
139720e2e756 1668 image locking needed to prevent race conditions
Shawn Walker <srw@sun.com>
parents: 1688
diff changeset
  2129
583
fc856572d86e 388 pkg command needs a "fix" subcommand or similar
Brad Hall <bhall@eng.sun.com>
parents: 582
diff changeset
  2130
                ip.pkg_plans = pps
687
3d7060f40501 4450 pkg fix passes bogus cancellation point to pkgplan/imageplan
Brad Hall <bhall@eng.sun.com>
parents: 685
diff changeset
  2131
3d7060f40501 4450 pkg fix passes bogus cancellation point to pkgplan/imageplan
Brad Hall <bhall@eng.sun.com>
parents: 685
diff changeset
  2132
                ip.evaluate()
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  2133
                if ip.reboot_needed() and self.is_liveroot():
2073
9fcacc9e5eaa 16998 transport should support publisher-specific write and read caches
Shawn Walker <shawn.walker@oracle.com>
parents: 2069
diff changeset
  2134
                        raise apx.RebootNeededOnLiveImageException()
1618
04f7471c9e72 5943 add 'must-accept' attribute to license actions
Shawn Walker <srw@sun.com>
parents: 1603
diff changeset
  2135
04f7471c9e72 5943 add 'must-accept' attribute to license actions
Shawn Walker <srw@sun.com>
parents: 1603
diff changeset
  2136
                logger.info("\n")
04f7471c9e72 5943 add 'must-accept' attribute to license actions
Shawn Walker <srw@sun.com>
parents: 1603
diff changeset
  2137
                for pp in ip.pkg_plans:
04f7471c9e72 5943 add 'must-accept' attribute to license actions
Shawn Walker <srw@sun.com>
parents: 1603
diff changeset
  2138
                        for lic, entry in pp.get_licenses():
04f7471c9e72 5943 add 'must-accept' attribute to license actions
Shawn Walker <srw@sun.com>
parents: 1603
diff changeset
  2139
                                dest = entry["dest"]
04f7471c9e72 5943 add 'must-accept' attribute to license actions
Shawn Walker <srw@sun.com>
parents: 1603
diff changeset
  2140
                                lic = dest.attrs["license"]
04f7471c9e72 5943 add 'must-accept' attribute to license actions
Shawn Walker <srw@sun.com>
parents: 1603
diff changeset
  2141
                                if show_licenses or dest.must_display:
04f7471c9e72 5943 add 'must-accept' attribute to license actions
Shawn Walker <srw@sun.com>
parents: 1603
diff changeset
  2142
                                        # Display license if required.
04f7471c9e72 5943 add 'must-accept' attribute to license actions
Shawn Walker <srw@sun.com>
parents: 1603
diff changeset
  2143
                                        logger.info("-" * 60)
04f7471c9e72 5943 add 'must-accept' attribute to license actions
Shawn Walker <srw@sun.com>
parents: 1603
diff changeset
  2144
                                        logger.info(_("Package: %s") % \
04f7471c9e72 5943 add 'must-accept' attribute to license actions
Shawn Walker <srw@sun.com>
parents: 1603
diff changeset
  2145
                                            pp.destination_fmri)
04f7471c9e72 5943 add 'must-accept' attribute to license actions
Shawn Walker <srw@sun.com>
parents: 1603
diff changeset
  2146
                                        logger.info(_("License: %s\n") % lic)
04f7471c9e72 5943 add 'must-accept' attribute to license actions
Shawn Walker <srw@sun.com>
parents: 1603
diff changeset
  2147
                                        logger.info(dest.get_text(self,
04f7471c9e72 5943 add 'must-accept' attribute to license actions
Shawn Walker <srw@sun.com>
parents: 1603
diff changeset
  2148
                                            pp.destination_fmri))
04f7471c9e72 5943 add 'must-accept' attribute to license actions
Shawn Walker <srw@sun.com>
parents: 1603
diff changeset
  2149
                                        logger.info("\n")
04f7471c9e72 5943 add 'must-accept' attribute to license actions
Shawn Walker <srw@sun.com>
parents: 1603
diff changeset
  2150
04f7471c9e72 5943 add 'must-accept' attribute to license actions
Shawn Walker <srw@sun.com>
parents: 1603
diff changeset
  2151
                                # Mark license as having been displayed.
04f7471c9e72 5943 add 'must-accept' attribute to license actions
Shawn Walker <srw@sun.com>
parents: 1603
diff changeset
  2152
                                pp.set_license_status(lic, displayed=True)
04f7471c9e72 5943 add 'must-accept' attribute to license actions
Shawn Walker <srw@sun.com>
parents: 1603
diff changeset
  2153
04f7471c9e72 5943 add 'must-accept' attribute to license actions
Shawn Walker <srw@sun.com>
parents: 1603
diff changeset
  2154
                                if dest.must_accept and accept:
04f7471c9e72 5943 add 'must-accept' attribute to license actions
Shawn Walker <srw@sun.com>
parents: 1603
diff changeset
  2155
                                        # Mark license as accepted if
04f7471c9e72 5943 add 'must-accept' attribute to license actions
Shawn Walker <srw@sun.com>
parents: 1603
diff changeset
  2156
                                        # required and requested.
04f7471c9e72 5943 add 'must-accept' attribute to license actions
Shawn Walker <srw@sun.com>
parents: 1603
diff changeset
  2157
                                        pp.set_license_status(lic,
04f7471c9e72 5943 add 'must-accept' attribute to license actions
Shawn Walker <srw@sun.com>
parents: 1603
diff changeset
  2158
                                            accepted=accept)
04f7471c9e72 5943 add 'must-accept' attribute to license actions
Shawn Walker <srw@sun.com>
parents: 1603
diff changeset
  2159
687
3d7060f40501 4450 pkg fix passes bogus cancellation point to pkgplan/imageplan
Brad Hall <bhall@eng.sun.com>
parents: 685
diff changeset
  2160
                ip.preexecute()
3d7060f40501 4450 pkg fix passes bogus cancellation point to pkgplan/imageplan
Brad Hall <bhall@eng.sun.com>
parents: 685
diff changeset
  2161
                ip.execute()
583
fc856572d86e 388 pkg command needs a "fix" subcommand or similar
Brad Hall <bhall@eng.sun.com>
parents: 582
diff changeset
  2162
fc856572d86e 388 pkg command needs a "fix" subcommand or similar
Brad Hall <bhall@eng.sun.com>
parents: 582
diff changeset
  2163
                return True
222
12006bf2a260 4 We need to be able to verify that package(s) is/are correctly installed
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 221
diff changeset
  2164
2144
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  2165
        def has_manifest(self, pfmri):
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  2166
                return os.path.exists(self.get_manifest_path(pfmri))
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  2167
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  2168
        def get_license_dir(self, pfmri):
2073
9fcacc9e5eaa 16998 transport should support publisher-specific write and read caches
Shawn Walker <shawn.walker@oracle.com>
parents: 2069
diff changeset
  2169
                """Return path to package license directory."""
2144
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  2170
                if self.version == self.CURRENT_VERSION:
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  2171
                        # Newer image format stores license files per-stem,
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  2172
                        # instead of per-stem and version, so that transitions
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  2173
                        # between package versions don't require redelivery
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  2174
                        # of license files.
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  2175
                        return os.path.join(self.imgdir, "license",
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  2176
                            pfmri.get_dir_path(stemonly=True))
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  2177
                # Older image formats store license files in the manifest cache
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  2178
                # directory.
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  2179
                return self.get_manifest_dir(pfmri)
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  2180
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  2181
        def __get_installed_pkg_publisher(self, pfmri):
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  2182
                """Returns the publisher for the FMRI of an installed package
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  2183
                or None if the package is not installed.
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  2184
                """
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  2185
                for f in self.gen_installed_pkgs():
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  2186
                        if f.pkg_name == pfmri.pkg_name:
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  2187
                                return f.publisher
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  2188
                return None
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  2189
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  2190
        def get_manifest_dir(self, pfmri):
2073
9fcacc9e5eaa 16998 transport should support publisher-specific write and read caches
Shawn Walker <shawn.walker@oracle.com>
parents: 2069
diff changeset
  2191
                """Return path to on-disk manifest cache directory."""
2144
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  2192
                if not pfmri.publisher:
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  2193
                        # Needed for consumers such as search that don't provide
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  2194
                        # publisher information.
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  2195
                        pfmri = pfmri.copy()
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  2196
                        pfmri.publisher = self.__get_installed_pkg_publisher(
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  2197
                            pfmri)
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  2198
                assert pfmri.publisher
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  2199
                if self.version == self.CURRENT_VERSION:
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  2200
                        root = self._get_publisher_cache_root(pfmri.publisher)
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  2201
                else:
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  2202
                        root = self.imgdir
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  2203
                return os.path.join(root, "pkg", pfmri.get_dir_path())
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  2204
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  2205
        def get_manifest_path(self, pfmri):
2073
9fcacc9e5eaa 16998 transport should support publisher-specific write and read caches
Shawn Walker <shawn.walker@oracle.com>
parents: 2069
diff changeset
  2206
                """Return path to on-disk manifest file."""
2144
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  2207
                if not pfmri.publisher:
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  2208
                        # Needed for consumers such as search that don't provide
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  2209
                        # publisher information.
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  2210
                        pfmri = pfmri.copy()
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  2211
                        pfmri.publisher = self.__get_installed_pkg_publisher(
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  2212
                            pfmri)
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  2213
                assert pfmri.publisher
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  2214
                if self.version == self.CURRENT_VERSION:
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  2215
                        root = os.path.join(self._get_publisher_meta_root(
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  2216
                            pfmri.publisher))
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  2217
                        return os.path.join(root, "pkg", pfmri.get_dir_path())
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  2218
                return os.path.join(self.get_manifest_dir(pfmri),
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  2219
                    "manifest")
429
6c9cbb6e6600 983 pkg search returns just one action per package/token-type combo
Brock Pytlik <bpytlik@sun.com>
parents: 423
diff changeset
  2220
2219
60ad60f7592c 2152 standalone package support needed (on-disk format)
Shawn Walker <shawn.walker@oracle.com>
parents: 2205
diff changeset
  2221
        def __get_manifest(self, fmri, excludes=EmptyI, intent=None,
60ad60f7592c 2152 standalone package support needed (on-disk format)
Shawn Walker <shawn.walker@oracle.com>
parents: 2205
diff changeset
  2222
            alt_pub=None):
556
1c3526ca7b9e 2022 client should provide operational intent to server
Shawn Walker <shawn.walker@sun.com>
parents: 554
diff changeset
  2223
                """Find on-disk manifest and create in-memory Manifest
956
adf6bdfdb3b5 6904 image.installed_file_authority always tries to open installed file r+
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 941
diff changeset
  2224
                object.... grab from server if needed"""
556
1c3526ca7b9e 2022 client should provide operational intent to server
Shawn Walker <shawn.walker@sun.com>
parents: 554
diff changeset
  2225
1c3526ca7b9e 2022 client should provide operational intent to server
Shawn Walker <shawn.walker@sun.com>
parents: 554
diff changeset
  2226
                try:
2144
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  2227
                        ret = manifest.FactoredManifest(fmri,
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  2228
                            self.get_manifest_dir(fmri),
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  2229
                            excludes=excludes,
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  2230
                            pathname=self.get_manifest_path(fmri))
2073
9fcacc9e5eaa 16998 transport should support publisher-specific write and read caches
Shawn Walker <shawn.walker@oracle.com>
parents: 2069
diff changeset
  2231
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  2232
                        # if we have a intent string, let depot
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  2233
                        # know for what we're using the cached manifest
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  2234
                        if intent:
2219
60ad60f7592c 2152 standalone package support needed (on-disk format)
Shawn Walker <shawn.walker@oracle.com>
parents: 2205
diff changeset
  2235
                                alt_repo = None
60ad60f7592c 2152 standalone package support needed (on-disk format)
Shawn Walker <shawn.walker@oracle.com>
parents: 2205
diff changeset
  2236
                                if alt_pub:
2310
ce10607d5332 11684 desire option to not propagate certs to non-global zones
Brock Pytlik <brock.pytlik@oracle.com>
parents: 2293
diff changeset
  2237
                                        alt_repo = alt_pub.repository
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  2238
                                try:
2073
9fcacc9e5eaa 16998 transport should support publisher-specific write and read caches
Shawn Walker <shawn.walker@oracle.com>
parents: 2069
diff changeset
  2239
                                        self.transport.touch_manifest(fmri,
2219
60ad60f7592c 2152 standalone package support needed (on-disk format)
Shawn Walker <shawn.walker@oracle.com>
parents: 2205
diff changeset
  2240
                                            intent, alt_repo=alt_repo)
2073
9fcacc9e5eaa 16998 transport should support publisher-specific write and read caches
Shawn Walker <shawn.walker@oracle.com>
parents: 2069
diff changeset
  2241
                                except (apx.UnknownPublisher,
9fcacc9e5eaa 16998 transport should support publisher-specific write and read caches
Shawn Walker <shawn.walker@oracle.com>
parents: 2069
diff changeset
  2242
                                    apx.TransportError):
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  2243
                                        # It's not fatal if we can't find
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  2244
                                        # or reach the publisher.
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  2245
                                        pass
956
adf6bdfdb3b5 6904 image.installed_file_authority always tries to open installed file r+
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 941
diff changeset
  2246
                except KeyError:
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  2247
                        ret = self.transport.get_manifest(fmri, excludes,
2219
60ad60f7592c 2152 standalone package support needed (on-disk format)
Shawn Walker <shawn.walker@oracle.com>
parents: 2205
diff changeset
  2248
                            intent, pub=alt_pub)
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  2249
                return ret
956
adf6bdfdb3b5 6904 image.installed_file_authority always tries to open installed file r+
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 941
diff changeset
  2250
2219
60ad60f7592c 2152 standalone package support needed (on-disk format)
Shawn Walker <shawn.walker@oracle.com>
parents: 2205
diff changeset
  2251
        def get_manifest(self, fmri, all_variants=False, intent=None,
60ad60f7592c 2152 standalone package support needed (on-disk format)
Shawn Walker <shawn.walker@oracle.com>
parents: 2205
diff changeset
  2252
            alt_pub=None):
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  2253
                """return manifest; uses cached version if available.
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  2254
                all_variants controls whether manifest contains actions
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  2255
                for all variants"""
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  2256
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  2257
                # Normally elide other arch variants, facets
1537
00a5b4d54eb8 5872 List APIs required
Shawn Walker <srw@sun.com>
parents: 1516
diff changeset
  2258
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  2259
                if all_variants:
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  2260
                        excludes = EmptyI
956
adf6bdfdb3b5 6904 image.installed_file_authority always tries to open installed file r+
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 941
diff changeset
  2261
                else:
2097
068cc63b4d6e 17055 image configuration should use pkg.config classes
Shawn Walker <shawn.walker@oracle.com>
parents: 2092
diff changeset
  2262
                        excludes = [ self.cfg.variants.allow_action ]
2183
21ae45e8dfcf 17581 There should be a way of removing a package as part of upgrade
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2178
diff changeset
  2263
1755
8e1ed1373f93 9123 client traceback during install for bad file mode
Shawn Walker <srw@sun.com>
parents: 1736
diff changeset
  2264
                try:
8e1ed1373f93 9123 client traceback during install for bad file mode
Shawn Walker <srw@sun.com>
parents: 1736
diff changeset
  2265
                        m = self.__get_manifest(fmri, excludes=excludes,
2219
60ad60f7592c 2152 standalone package support needed (on-disk format)
Shawn Walker <shawn.walker@oracle.com>
parents: 2205
diff changeset
  2266
                            intent=intent, alt_pub=alt_pub)
2073
9fcacc9e5eaa 16998 transport should support publisher-specific write and read caches
Shawn Walker <shawn.walker@oracle.com>
parents: 2069
diff changeset
  2267
                except apx.ActionExecutionError, e:
1859
6e6e866921e7 529 client can traceback with EBUSY during action removal
Shawn Walker <shawn.walker@oracle.com>
parents: 1842
diff changeset
  2268
                        raise
1755
8e1ed1373f93 9123 client traceback during install for bad file mode
Shawn Walker <srw@sun.com>
parents: 1736
diff changeset
  2269
                except pkg.actions.ActionError, e:
2073
9fcacc9e5eaa 16998 transport should support publisher-specific write and read caches
Shawn Walker <shawn.walker@oracle.com>
parents: 2069
diff changeset
  2270
                        raise apx.InvalidPackageErrors([e])
567
ea1d96e269a4 3505 client action and manifest creation are wasteful
johansen <johansen@sun.com>
parents: 565
diff changeset
  2271
296
576858fb8376 398 disambiguate packages matching the default authority
johansen <johansen@sun.com>
parents: 289
diff changeset
  2272
                return m
576858fb8376 398 disambiguate packages matching the default authority
johansen <johansen@sun.com>
parents: 289
diff changeset
  2273
2035
05d5d55504e7 16669 package operations should remove unused manifest cache files
Shawn Walker <shawn.walker@oracle.com>
parents: 2034
diff changeset
  2274
        def update_pkg_installed_state(self, pkg_pairs, progtrack):
1842
b71de8f65cc8 15176 imageplan keeps solver cache and catalog data too long
Shawn Walker <shawn.walker@oracle.com>
parents: 1837
diff changeset
  2275
                """Sets the recorded installed state of each package pair in
b71de8f65cc8 15176 imageplan keeps solver cache and catalog data too long
Shawn Walker <shawn.walker@oracle.com>
parents: 1837
diff changeset
  2276
                'pkg_pairs'.  'pkg_pair' should be an iterable of tuples of
b71de8f65cc8 15176 imageplan keeps solver cache and catalog data too long
Shawn Walker <shawn.walker@oracle.com>
parents: 1837
diff changeset
  2277
                the format (added, removed) where 'removed' is the FMRI of the
b71de8f65cc8 15176 imageplan keeps solver cache and catalog data too long
Shawn Walker <shawn.walker@oracle.com>
parents: 1837
diff changeset
  2278
                package that was uninstalled, and 'added' is the package
b71de8f65cc8 15176 imageplan keeps solver cache and catalog data too long
Shawn Walker <shawn.walker@oracle.com>
parents: 1837
diff changeset
  2279
                installed for the operation.  These pairs are representative of
b71de8f65cc8 15176 imageplan keeps solver cache and catalog data too long
Shawn Walker <shawn.walker@oracle.com>
parents: 1837
diff changeset
  2280
                the destination and origin package for each part of the
b71de8f65cc8 15176 imageplan keeps solver cache and catalog data too long
Shawn Walker <shawn.walker@oracle.com>
parents: 1837
diff changeset
  2281
                operation."""
1352
5c92c9d342ef 11065 client v1 catalog support for v0 catalogs
Shawn Walker <srw@sun.com>
parents: 1328
diff changeset
  2282
2144
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  2283
                if self.version < self.CURRENT_VERSION:
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  2284
                        raise apx.ImageFormatUpdateNeeded(self.root)
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  2285
1352
5c92c9d342ef 11065 client v1 catalog support for v0 catalogs
Shawn Walker <srw@sun.com>
parents: 1328
diff changeset
  2286
                kcat = self.get_catalog(self.IMG_CATALOG_KNOWN)
1842
b71de8f65cc8 15176 imageplan keeps solver cache and catalog data too long
Shawn Walker <shawn.walker@oracle.com>
parents: 1837
diff changeset
  2287
                icat = self.get_catalog(self.IMG_CATALOG_INSTALLED)
b71de8f65cc8 15176 imageplan keeps solver cache and catalog data too long
Shawn Walker <shawn.walker@oracle.com>
parents: 1837
diff changeset
  2288
b71de8f65cc8 15176 imageplan keeps solver cache and catalog data too long
Shawn Walker <shawn.walker@oracle.com>
parents: 1837
diff changeset
  2289
                added = set()
b71de8f65cc8 15176 imageplan keeps solver cache and catalog data too long
Shawn Walker <shawn.walker@oracle.com>
parents: 1837
diff changeset
  2290
                removed = set()
b71de8f65cc8 15176 imageplan keeps solver cache and catalog data too long
Shawn Walker <shawn.walker@oracle.com>
parents: 1837
diff changeset
  2291
                for add_pkg, rem_pkg in pkg_pairs:
2205
53d0be594162 3822 image plans should prevent conflicting actions from being installed
Danek Duvall <danek.duvall@oracle.com>
parents: 2200
diff changeset
  2292
                        if add_pkg == rem_pkg:
53d0be594162 3822 image plans should prevent conflicting actions from being installed
Danek Duvall <danek.duvall@oracle.com>
parents: 2200
diff changeset
  2293
                                continue
1842
b71de8f65cc8 15176 imageplan keeps solver cache and catalog data too long
Shawn Walker <shawn.walker@oracle.com>
parents: 1837
diff changeset
  2294
                        if add_pkg:
b71de8f65cc8 15176 imageplan keeps solver cache and catalog data too long
Shawn Walker <shawn.walker@oracle.com>
parents: 1837
diff changeset
  2295
                                added.add(add_pkg)
b71de8f65cc8 15176 imageplan keeps solver cache and catalog data too long
Shawn Walker <shawn.walker@oracle.com>
parents: 1837
diff changeset
  2296
                        if rem_pkg:
b71de8f65cc8 15176 imageplan keeps solver cache and catalog data too long
Shawn Walker <shawn.walker@oracle.com>
parents: 1837
diff changeset
  2297
                                removed.add(rem_pkg)
b71de8f65cc8 15176 imageplan keeps solver cache and catalog data too long
Shawn Walker <shawn.walker@oracle.com>
parents: 1837
diff changeset
  2298
2035
05d5d55504e7 16669 package operations should remove unused manifest cache files
Shawn Walker <shawn.walker@oracle.com>
parents: 2034
diff changeset
  2299
                combo = added.union(removed)
05d5d55504e7 16669 package operations should remove unused manifest cache files
Shawn Walker <shawn.walker@oracle.com>
parents: 2034
diff changeset
  2300
                progtrack.item_set_goal(_("Package State Update Phase"),
05d5d55504e7 16669 package operations should remove unused manifest cache files
Shawn Walker <shawn.walker@oracle.com>
parents: 2034
diff changeset
  2301
                    len(combo))
05d5d55504e7 16669 package operations should remove unused manifest cache files
Shawn Walker <shawn.walker@oracle.com>
parents: 2034
diff changeset
  2302
05d5d55504e7 16669 package operations should remove unused manifest cache files
Shawn Walker <shawn.walker@oracle.com>
parents: 2034
diff changeset
  2303
                for pfmri in combo:
1842
b71de8f65cc8 15176 imageplan keeps solver cache and catalog data too long
Shawn Walker <shawn.walker@oracle.com>
parents: 1837
diff changeset
  2304
                        entry = kcat.get_entry(pfmri)
b71de8f65cc8 15176 imageplan keeps solver cache and catalog data too long
Shawn Walker <shawn.walker@oracle.com>
parents: 1837
diff changeset
  2305
                        mdata = entry.get("metadata", {})
b71de8f65cc8 15176 imageplan keeps solver cache and catalog data too long
Shawn Walker <shawn.walker@oracle.com>
parents: 1837
diff changeset
  2306
                        states = set(mdata.get("states", set()))
b71de8f65cc8 15176 imageplan keeps solver cache and catalog data too long
Shawn Walker <shawn.walker@oracle.com>
parents: 1837
diff changeset
  2307
                        if pfmri in removed:
b71de8f65cc8 15176 imageplan keeps solver cache and catalog data too long
Shawn Walker <shawn.walker@oracle.com>
parents: 1837
diff changeset
  2308
                                icat.remove_package(pfmri)
b71de8f65cc8 15176 imageplan keeps solver cache and catalog data too long
Shawn Walker <shawn.walker@oracle.com>
parents: 1837
diff changeset
  2309
                                states.discard(self.PKG_STATE_INSTALLED)
b71de8f65cc8 15176 imageplan keeps solver cache and catalog data too long
Shawn Walker <shawn.walker@oracle.com>
parents: 1837
diff changeset
  2310
b71de8f65cc8 15176 imageplan keeps solver cache and catalog data too long
Shawn Walker <shawn.walker@oracle.com>
parents: 1837
diff changeset
  2311
                        if pfmri in added:
b71de8f65cc8 15176 imageplan keeps solver cache and catalog data too long
Shawn Walker <shawn.walker@oracle.com>
parents: 1837
diff changeset
  2312
                                states.add(self.PKG_STATE_INSTALLED)
2219
60ad60f7592c 2152 standalone package support needed (on-disk format)
Shawn Walker <shawn.walker@oracle.com>
parents: 2205
diff changeset
  2313
                                if self.PKG_STATE_ALT_SOURCE in states:
60ad60f7592c 2152 standalone package support needed (on-disk format)
Shawn Walker <shawn.walker@oracle.com>
parents: 2205
diff changeset
  2314
                                        states.discard(
60ad60f7592c 2152 standalone package support needed (on-disk format)
Shawn Walker <shawn.walker@oracle.com>
parents: 2205
diff changeset
  2315
                                            self.PKG_STATE_UPGRADABLE)
60ad60f7592c 2152 standalone package support needed (on-disk format)
Shawn Walker <shawn.walker@oracle.com>
parents: 2205
diff changeset
  2316
                                        states.discard(
60ad60f7592c 2152 standalone package support needed (on-disk format)
Shawn Walker <shawn.walker@oracle.com>
parents: 2205
diff changeset
  2317
                                            self.PKG_STATE_ALT_SOURCE)
60ad60f7592c 2152 standalone package support needed (on-disk format)
Shawn Walker <shawn.walker@oracle.com>
parents: 2205
diff changeset
  2318
                                        states.discard(
60ad60f7592c 2152 standalone package support needed (on-disk format)
Shawn Walker <shawn.walker@oracle.com>
parents: 2205
diff changeset
  2319
                                            self.PKG_STATE_KNOWN)
1842
b71de8f65cc8 15176 imageplan keeps solver cache and catalog data too long
Shawn Walker <shawn.walker@oracle.com>
parents: 1837
diff changeset
  2320
                        elif self.PKG_STATE_KNOWN not in states:
b71de8f65cc8 15176 imageplan keeps solver cache and catalog data too long
Shawn Walker <shawn.walker@oracle.com>
parents: 1837
diff changeset
  2321
                                # This entry is no longer available and has no
b71de8f65cc8 15176 imageplan keeps solver cache and catalog data too long
Shawn Walker <shawn.walker@oracle.com>
parents: 1837
diff changeset
  2322
                                # meaningful state information, so should be
b71de8f65cc8 15176 imageplan keeps solver cache and catalog data too long
Shawn Walker <shawn.walker@oracle.com>
parents: 1837
diff changeset
  2323
                                # discarded.
b71de8f65cc8 15176 imageplan keeps solver cache and catalog data too long
Shawn Walker <shawn.walker@oracle.com>
parents: 1837
diff changeset
  2324
                                kcat.remove_package(pfmri)
2035
05d5d55504e7 16669 package operations should remove unused manifest cache files
Shawn Walker <shawn.walker@oracle.com>
parents: 2034
diff changeset
  2325
                                progtrack.item_add_progress()
1842
b71de8f65cc8 15176 imageplan keeps solver cache and catalog data too long
Shawn Walker <shawn.walker@oracle.com>
parents: 1837
diff changeset
  2326
                                continue
b71de8f65cc8 15176 imageplan keeps solver cache and catalog data too long
Shawn Walker <shawn.walker@oracle.com>
parents: 1837
diff changeset
  2327
b71de8f65cc8 15176 imageplan keeps solver cache and catalog data too long
Shawn Walker <shawn.walker@oracle.com>
parents: 1837
diff changeset
  2328
                        if (self.PKG_STATE_INSTALLED in states and
b71de8f65cc8 15176 imageplan keeps solver cache and catalog data too long
Shawn Walker <shawn.walker@oracle.com>
parents: 1837
diff changeset
  2329
                            self.PKG_STATE_UNINSTALLED in states) or (
b71de8f65cc8 15176 imageplan keeps solver cache and catalog data too long
Shawn Walker <shawn.walker@oracle.com>
parents: 1837
diff changeset
  2330
                            self.PKG_STATE_KNOWN in states and
b71de8f65cc8 15176 imageplan keeps solver cache and catalog data too long
Shawn Walker <shawn.walker@oracle.com>
parents: 1837
diff changeset
  2331
                            self.PKG_STATE_UNKNOWN in states):
2073
9fcacc9e5eaa 16998 transport should support publisher-specific write and read caches
Shawn Walker <shawn.walker@oracle.com>
parents: 2069
diff changeset
  2332
                                raise apx.ImagePkgStateError(pfmri,
1842
b71de8f65cc8 15176 imageplan keeps solver cache and catalog data too long
Shawn Walker <shawn.walker@oracle.com>
parents: 1837
diff changeset
  2333
                                    states)
b71de8f65cc8 15176 imageplan keeps solver cache and catalog data too long
Shawn Walker <shawn.walker@oracle.com>
parents: 1837
diff changeset
  2334
b71de8f65cc8 15176 imageplan keeps solver cache and catalog data too long
Shawn Walker <shawn.walker@oracle.com>
parents: 1837
diff changeset
  2335
                        # Catalog format only supports lists.
b71de8f65cc8 15176 imageplan keeps solver cache and catalog data too long
Shawn Walker <shawn.walker@oracle.com>
parents: 1837
diff changeset
  2336
                        mdata["states"] = list(states)
b71de8f65cc8 15176 imageplan keeps solver cache and catalog data too long
Shawn Walker <shawn.walker@oracle.com>
parents: 1837
diff changeset
  2337
b71de8f65cc8 15176 imageplan keeps solver cache and catalog data too long
Shawn Walker <shawn.walker@oracle.com>
parents: 1837
diff changeset
  2338
                        # Now record the package state.
2352
3c17f86cd994 18105 api should support multiple repositories (origins) with different package data
Shawn Walker <shawn.walker@oracle.com>
parents: 2350
diff changeset
  2339
                        kcat.update_entry(mdata, pfmri=pfmri)
1842
b71de8f65cc8 15176 imageplan keeps solver cache and catalog data too long
Shawn Walker <shawn.walker@oracle.com>
parents: 1837
diff changeset
  2340
b71de8f65cc8 15176 imageplan keeps solver cache and catalog data too long
Shawn Walker <shawn.walker@oracle.com>
parents: 1837
diff changeset
  2341
                        # If the package is being marked as installed,
b71de8f65cc8 15176 imageplan keeps solver cache and catalog data too long
Shawn Walker <shawn.walker@oracle.com>
parents: 1837
diff changeset
  2342
                        # then  it shouldn't already exist in the
b71de8f65cc8 15176 imageplan keeps solver cache and catalog data too long
Shawn Walker <shawn.walker@oracle.com>
parents: 1837
diff changeset
  2343
                        # installed catalog and should be added.
b71de8f65cc8 15176 imageplan keeps solver cache and catalog data too long
Shawn Walker <shawn.walker@oracle.com>
parents: 1837
diff changeset
  2344
                        if pfmri in added:
b71de8f65cc8 15176 imageplan keeps solver cache and catalog data too long
Shawn Walker <shawn.walker@oracle.com>
parents: 1837
diff changeset
  2345
                                icat.append(kcat, pfmri=pfmri)
b71de8f65cc8 15176 imageplan keeps solver cache and catalog data too long
Shawn Walker <shawn.walker@oracle.com>
parents: 1837
diff changeset
  2346
b71de8f65cc8 15176 imageplan keeps solver cache and catalog data too long
Shawn Walker <shawn.walker@oracle.com>
parents: 1837
diff changeset
  2347
                        entry = mdata = states = None
2035
05d5d55504e7 16669 package operations should remove unused manifest cache files
Shawn Walker <shawn.walker@oracle.com>
parents: 2034
diff changeset
  2348
                        progtrack.item_add_progress()
05d5d55504e7 16669 package operations should remove unused manifest cache files
Shawn Walker <shawn.walker@oracle.com>
parents: 2034
diff changeset
  2349
                progtrack.item_done()
05d5d55504e7 16669 package operations should remove unused manifest cache files
Shawn Walker <shawn.walker@oracle.com>
parents: 2034
diff changeset
  2350
2219
60ad60f7592c 2152 standalone package support needed (on-disk format)
Shawn Walker <shawn.walker@oracle.com>
parents: 2205
diff changeset
  2351
                # Discard entries for alternate source packages that weren't
60ad60f7592c 2152 standalone package support needed (on-disk format)
Shawn Walker <shawn.walker@oracle.com>
parents: 2205
diff changeset
  2352
                # installed as part of the operation.
60ad60f7592c 2152 standalone package support needed (on-disk format)
Shawn Walker <shawn.walker@oracle.com>
parents: 2205
diff changeset
  2353
                if self.__alt_pkg_pub_map:
60ad60f7592c 2152 standalone package support needed (on-disk format)
Shawn Walker <shawn.walker@oracle.com>
parents: 2205
diff changeset
  2354
                        for pfmri in self.__alt_known_cat.fmris():
60ad60f7592c 2152 standalone package support needed (on-disk format)
Shawn Walker <shawn.walker@oracle.com>
parents: 2205
diff changeset
  2355
                                if pfmri in added:
60ad60f7592c 2152 standalone package support needed (on-disk format)
Shawn Walker <shawn.walker@oracle.com>
parents: 2205
diff changeset
  2356
                                        # Nothing to do.
60ad60f7592c 2152 standalone package support needed (on-disk format)
Shawn Walker <shawn.walker@oracle.com>
parents: 2205
diff changeset
  2357
                                        continue
60ad60f7592c 2152 standalone package support needed (on-disk format)
Shawn Walker <shawn.walker@oracle.com>
parents: 2205
diff changeset
  2358
60ad60f7592c 2152 standalone package support needed (on-disk format)
Shawn Walker <shawn.walker@oracle.com>
parents: 2205
diff changeset
  2359
                                entry = kcat.get_entry(pfmri)
60ad60f7592c 2152 standalone package support needed (on-disk format)
Shawn Walker <shawn.walker@oracle.com>
parents: 2205
diff changeset
  2360
                                if not entry:
60ad60f7592c 2152 standalone package support needed (on-disk format)
Shawn Walker <shawn.walker@oracle.com>
parents: 2205
diff changeset
  2361
                                        # The only reason that the entry should
60ad60f7592c 2152 standalone package support needed (on-disk format)
Shawn Walker <shawn.walker@oracle.com>
parents: 2205
diff changeset
  2362
                                        # not exist in the 'known' part is
60ad60f7592c 2152 standalone package support needed (on-disk format)
Shawn Walker <shawn.walker@oracle.com>
parents: 2205
diff changeset
  2363
                                        # because it was removed during the
60ad60f7592c 2152 standalone package support needed (on-disk format)
Shawn Walker <shawn.walker@oracle.com>
parents: 2205
diff changeset
  2364
                                        # operation.
60ad60f7592c 2152 standalone package support needed (on-disk format)
Shawn Walker <shawn.walker@oracle.com>
parents: 2205
diff changeset
  2365
                                        assert pfmri in removed
60ad60f7592c 2152 standalone package support needed (on-disk format)
Shawn Walker <shawn.walker@oracle.com>
parents: 2205
diff changeset
  2366
                                        continue
60ad60f7592c 2152 standalone package support needed (on-disk format)
Shawn Walker <shawn.walker@oracle.com>
parents: 2205
diff changeset
  2367
60ad60f7592c 2152 standalone package support needed (on-disk format)
Shawn Walker <shawn.walker@oracle.com>
parents: 2205
diff changeset
  2368
                                states = entry.get("metadata", {}).get("states",
60ad60f7592c 2152 standalone package support needed (on-disk format)
Shawn Walker <shawn.walker@oracle.com>
parents: 2205
diff changeset
  2369
                                    EmptyI)
60ad60f7592c 2152 standalone package support needed (on-disk format)
Shawn Walker <shawn.walker@oracle.com>
parents: 2205
diff changeset
  2370
                                if self.PKG_STATE_ALT_SOURCE in states:
60ad60f7592c 2152 standalone package support needed (on-disk format)
Shawn Walker <shawn.walker@oracle.com>
parents: 2205
diff changeset
  2371
                                        kcat.remove_package(pfmri)
60ad60f7592c 2152 standalone package support needed (on-disk format)
Shawn Walker <shawn.walker@oracle.com>
parents: 2205
diff changeset
  2372
60ad60f7592c 2152 standalone package support needed (on-disk format)
Shawn Walker <shawn.walker@oracle.com>
parents: 2205
diff changeset
  2373
                        # Now add the publishers of packages that were installed
60ad60f7592c 2152 standalone package support needed (on-disk format)
Shawn Walker <shawn.walker@oracle.com>
parents: 2205
diff changeset
  2374
                        # from temporary sources that did not previously exist
60ad60f7592c 2152 standalone package support needed (on-disk format)
Shawn Walker <shawn.walker@oracle.com>
parents: 2205
diff changeset
  2375
                        # to the image's configuration.  (But without any
60ad60f7592c 2152 standalone package support needed (on-disk format)
Shawn Walker <shawn.walker@oracle.com>
parents: 2205
diff changeset
  2376
                        # origins, sticky, and enabled.)
60ad60f7592c 2152 standalone package support needed (on-disk format)
Shawn Walker <shawn.walker@oracle.com>
parents: 2205
diff changeset
  2377
                        cfgpubs = set(self.cfg.publishers.keys())
60ad60f7592c 2152 standalone package support needed (on-disk format)
Shawn Walker <shawn.walker@oracle.com>
parents: 2205
diff changeset
  2378
                        instpubs = set(f.publisher for f in added)
60ad60f7592c 2152 standalone package support needed (on-disk format)
Shawn Walker <shawn.walker@oracle.com>
parents: 2205
diff changeset
  2379
                        altpubs = self.__alt_known_cat.publishers()
60ad60f7592c 2152 standalone package support needed (on-disk format)
Shawn Walker <shawn.walker@oracle.com>
parents: 2205
diff changeset
  2380
60ad60f7592c 2152 standalone package support needed (on-disk format)
Shawn Walker <shawn.walker@oracle.com>
parents: 2205
diff changeset
  2381
                        # List of publishers that need to be added is the
60ad60f7592c 2152 standalone package support needed (on-disk format)
Shawn Walker <shawn.walker@oracle.com>
parents: 2205
diff changeset
  2382
                        # intersection of installed and alternate minus
60ad60f7592c 2152 standalone package support needed (on-disk format)
Shawn Walker <shawn.walker@oracle.com>
parents: 2205
diff changeset
  2383
                        # the already configured.
60ad60f7592c 2152 standalone package support needed (on-disk format)
Shawn Walker <shawn.walker@oracle.com>
parents: 2205
diff changeset
  2384
                        newpubs = (instpubs & altpubs) - cfgpubs
60ad60f7592c 2152 standalone package support needed (on-disk format)
Shawn Walker <shawn.walker@oracle.com>
parents: 2205
diff changeset
  2385
                        for pfx in newpubs:
60ad60f7592c 2152 standalone package support needed (on-disk format)
Shawn Walker <shawn.walker@oracle.com>
parents: 2205
diff changeset
  2386
                                npub = publisher.Publisher(pfx,
2310
ce10607d5332 11684 desire option to not propagate certs to non-global zones
Brock Pytlik <brock.pytlik@oracle.com>
parents: 2293
diff changeset
  2387
                                    repository=publisher.Repository())
2219
60ad60f7592c 2152 standalone package support needed (on-disk format)
Shawn Walker <shawn.walker@oracle.com>
parents: 2205
diff changeset
  2388
                                self.__add_publisher(npub,
60ad60f7592c 2152 standalone package support needed (on-disk format)
Shawn Walker <shawn.walker@oracle.com>
parents: 2205
diff changeset
  2389
                                    refresh_allowed=False)
60ad60f7592c 2152 standalone package support needed (on-disk format)
Shawn Walker <shawn.walker@oracle.com>
parents: 2205
diff changeset
  2390
60ad60f7592c 2152 standalone package support needed (on-disk format)
Shawn Walker <shawn.walker@oracle.com>
parents: 2205
diff changeset
  2391
                        # Ensure image configuration reflects new information.
60ad60f7592c 2152 standalone package support needed (on-disk format)
Shawn Walker <shawn.walker@oracle.com>
parents: 2205
diff changeset
  2392
                        self.__cleanup_alt_pkg_certs()
60ad60f7592c 2152 standalone package support needed (on-disk format)
Shawn Walker <shawn.walker@oracle.com>
parents: 2205
diff changeset
  2393
                        self.save_config()
60ad60f7592c 2152 standalone package support needed (on-disk format)
Shawn Walker <shawn.walker@oracle.com>
parents: 2205
diff changeset
  2394
2149
1f90c73bcde3 8035 imageplan post execute should remove unused manifests
Shawn Walker <shawn.walker@oracle.com>
parents: 2148
diff changeset
  2395
                # Remove manifests of packages that were removed from the
1f90c73bcde3 8035 imageplan post execute should remove unused manifests
Shawn Walker <shawn.walker@oracle.com>
parents: 2148
diff changeset
  2396
                # system.  Some packages may have only had facets or
1f90c73bcde3 8035 imageplan post execute should remove unused manifests
Shawn Walker <shawn.walker@oracle.com>
parents: 2148
diff changeset
  2397
                # variants changed, so don't remove those.
2035
05d5d55504e7 16669 package operations should remove unused manifest cache files
Shawn Walker <shawn.walker@oracle.com>
parents: 2034
diff changeset
  2398
                progtrack.item_set_goal(_("Package Cache Update Phase"),
05d5d55504e7 16669 package operations should remove unused manifest cache files
Shawn Walker <shawn.walker@oracle.com>
parents: 2034
diff changeset
  2399
                    len(removed))
05d5d55504e7 16669 package operations should remove unused manifest cache files
Shawn Walker <shawn.walker@oracle.com>
parents: 2034
diff changeset
  2400
                for pfmri in removed:
2073
9fcacc9e5eaa 16998 transport should support publisher-specific write and read caches
Shawn Walker <shawn.walker@oracle.com>
parents: 2069
diff changeset
  2401
                        manifest.FactoredManifest.clear_cache(
9fcacc9e5eaa 16998 transport should support publisher-specific write and read caches
Shawn Walker <shawn.walker@oracle.com>
parents: 2069
diff changeset
  2402
                            self.get_manifest_dir(pfmri))
2149
1f90c73bcde3 8035 imageplan post execute should remove unused manifests
Shawn Walker <shawn.walker@oracle.com>
parents: 2148
diff changeset
  2403
                        try:
1f90c73bcde3 8035 imageplan post execute should remove unused manifests
Shawn Walker <shawn.walker@oracle.com>
parents: 2148
diff changeset
  2404
                                portable.remove(self.get_manifest_path(pfmri))
1f90c73bcde3 8035 imageplan post execute should remove unused manifests
Shawn Walker <shawn.walker@oracle.com>
parents: 2148
diff changeset
  2405
                        except EnvironmentError, e:
1f90c73bcde3 8035 imageplan post execute should remove unused manifests
Shawn Walker <shawn.walker@oracle.com>
parents: 2148
diff changeset
  2406
                                if e.errno != errno.ENOENT:
1f90c73bcde3 8035 imageplan post execute should remove unused manifests
Shawn Walker <shawn.walker@oracle.com>
parents: 2148
diff changeset
  2407
                                        raise apx._convert_error(e)
2035
05d5d55504e7 16669 package operations should remove unused manifest cache files
Shawn Walker <shawn.walker@oracle.com>
parents: 2034
diff changeset
  2408
                        progtrack.item_add_progress()
05d5d55504e7 16669 package operations should remove unused manifest cache files
Shawn Walker <shawn.walker@oracle.com>
parents: 2034
diff changeset
  2409
                progtrack.item_done()
1842
b71de8f65cc8 15176 imageplan keeps solver cache and catalog data too long
Shawn Walker <shawn.walker@oracle.com>
parents: 1837
diff changeset
  2410
1463
0ef25025d601 12340 catalog storage performance regression
Shawn Walker <srw@sun.com>
parents: 1461
diff changeset
  2411
                # Temporarily redirect the catalogs to a different location,
0ef25025d601 12340 catalog storage performance regression
Shawn Walker <srw@sun.com>
parents: 1461
diff changeset
  2412
                # so that if the save is interrupted, the image won't be left
0ef25025d601 12340 catalog storage performance regression
Shawn Walker <srw@sun.com>
parents: 1461
diff changeset
  2413
                # with invalid state, and then save them.
0ef25025d601 12340 catalog storage performance regression
Shawn Walker <srw@sun.com>
parents: 1461
diff changeset
  2414
                tmp_state_root = self.temporary_dir()
0ef25025d601 12340 catalog storage performance regression
Shawn Walker <srw@sun.com>
parents: 1461
diff changeset
  2415
2035
05d5d55504e7 16669 package operations should remove unused manifest cache files
Shawn Walker <shawn.walker@oracle.com>
parents: 2034
diff changeset
  2416
                progtrack.item_set_goal(_("Image State Update Phase"), 2)
1463
0ef25025d601 12340 catalog storage performance regression
Shawn Walker <srw@sun.com>
parents: 1461
diff changeset
  2417
                try:
1842
b71de8f65cc8 15176 imageplan keeps solver cache and catalog data too long
Shawn Walker <shawn.walker@oracle.com>
parents: 1837
diff changeset
  2418
                        for cat, name in ((kcat, self.IMG_CATALOG_KNOWN),
b71de8f65cc8 15176 imageplan keeps solver cache and catalog data too long
Shawn Walker <shawn.walker@oracle.com>
parents: 1837
diff changeset
  2419
                            (icat, self.IMG_CATALOG_INSTALLED)):
1463
0ef25025d601 12340 catalog storage performance regression
Shawn Walker <srw@sun.com>
parents: 1461
diff changeset
  2420
                                cpath = os.path.join(tmp_state_root, name)
0ef25025d601 12340 catalog storage performance regression
Shawn Walker <srw@sun.com>
parents: 1461
diff changeset
  2421
0ef25025d601 12340 catalog storage performance regression
Shawn Walker <srw@sun.com>
parents: 1461
diff changeset
  2422
                                # Must copy the old catalog data to the new
0ef25025d601 12340 catalog storage performance regression
Shawn Walker <srw@sun.com>
parents: 1461
diff changeset
  2423
                                # destination as only changed files will be
0ef25025d601 12340 catalog storage performance regression
Shawn Walker <srw@sun.com>
parents: 1461
diff changeset
  2424
                                # written.
0ef25025d601 12340 catalog storage performance regression
Shawn Walker <srw@sun.com>
parents: 1461
diff changeset
  2425
                                shutil.copytree(cat.meta_root, cpath)
0ef25025d601 12340 catalog storage performance regression
Shawn Walker <srw@sun.com>
parents: 1461
diff changeset
  2426
                                cat.meta_root = cpath
1842
b71de8f65cc8 15176 imageplan keeps solver cache and catalog data too long
Shawn Walker <shawn.walker@oracle.com>
parents: 1837
diff changeset
  2427
                                cat.finalize(pfmris=added)
1463
0ef25025d601 12340 catalog storage performance regression
Shawn Walker <srw@sun.com>
parents: 1461
diff changeset
  2428
                                cat.save()
2035
05d5d55504e7 16669 package operations should remove unused manifest cache files
Shawn Walker <shawn.walker@oracle.com>
parents: 2034
diff changeset
  2429
                                progtrack.item_add_progress()
1463
0ef25025d601 12340 catalog storage performance regression
Shawn Walker <srw@sun.com>
parents: 1461
diff changeset
  2430
1842
b71de8f65cc8 15176 imageplan keeps solver cache and catalog data too long
Shawn Walker <shawn.walker@oracle.com>
parents: 1837
diff changeset
  2431
                        del cat, name
b71de8f65cc8 15176 imageplan keeps solver cache and catalog data too long
Shawn Walker <shawn.walker@oracle.com>
parents: 1837
diff changeset
  2432
                        self.__init_catalogs()
b71de8f65cc8 15176 imageplan keeps solver cache and catalog data too long
Shawn Walker <shawn.walker@oracle.com>
parents: 1837
diff changeset
  2433
2228
5319ee47781d 2774 new depend action behavior: follow if possible
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2219
diff changeset
  2434
                        # copy any other state files from current state
5319ee47781d 2774 new depend action behavior: follow if possible
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2219
diff changeset
  2435
                        # dir into new state dir.
5319ee47781d 2774 new depend action behavior: follow if possible
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2219
diff changeset
  2436
                        for p in os.listdir(self._statedir):
5319ee47781d 2774 new depend action behavior: follow if possible
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2219
diff changeset
  2437
                                fp = os.path.join(self._statedir, p)
5319ee47781d 2774 new depend action behavior: follow if possible
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2219
diff changeset
  2438
                                if os.path.isfile(fp):
5319ee47781d 2774 new depend action behavior: follow if possible
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2219
diff changeset
  2439
                                        portable.copyfile(fp, os.path.join(tmp_state_root, p))
5319ee47781d 2774 new depend action behavior: follow if possible
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2219
diff changeset
  2440
1463
0ef25025d601 12340 catalog storage performance regression
Shawn Walker <srw@sun.com>
parents: 1461
diff changeset
  2441
                        # Next, preserve the old installed state dir, rename the
0ef25025d601 12340 catalog storage performance regression
Shawn Walker <srw@sun.com>
parents: 1461
diff changeset
  2442
                        # new one into place, and then remove the old one.
2293
631000734928 3679 modified preserve=true files should be backed up during uninstall
Shawn Walker <shawn.walker@oracle.com>
parents: 2286
diff changeset
  2443
                        orig_state_root, ignored = self.salvage(self._statedir)
2073
9fcacc9e5eaa 16998 transport should support publisher-specific write and read caches
Shawn Walker <shawn.walker@oracle.com>
parents: 2069
diff changeset
  2444
                        portable.rename(tmp_state_root, self._statedir)
1463
0ef25025d601 12340 catalog storage performance regression
Shawn Walker <srw@sun.com>
parents: 1461
diff changeset
  2445
                        shutil.rmtree(orig_state_root, True)
1779
b80275b45b18 14176 copytree callers must catch shutil.Error and not traceback
Shawn Walker <srw@sun.com>
parents: 1771
diff changeset
  2446
                except EnvironmentError, e:
b80275b45b18 14176 copytree callers must catch shutil.Error and not traceback
Shawn Walker <srw@sun.com>
parents: 1771
diff changeset
  2447
                        # shutil.Error can contains a tuple of lists of errors.
b80275b45b18 14176 copytree callers must catch shutil.Error and not traceback
Shawn Walker <srw@sun.com>
parents: 1771
diff changeset
  2448
                        # Some of the error entries may be a tuple others will
b80275b45b18 14176 copytree callers must catch shutil.Error and not traceback
Shawn Walker <srw@sun.com>
parents: 1771
diff changeset
  2449
                        # be a string due to poor error handling in shutil.
b80275b45b18 14176 copytree callers must catch shutil.Error and not traceback
Shawn Walker <srw@sun.com>
parents: 1771
diff changeset
  2450
                        if isinstance(e, shutil.Error) and \
b80275b45b18 14176 copytree callers must catch shutil.Error and not traceback
Shawn Walker <srw@sun.com>
parents: 1771
diff changeset
  2451
                            type(e.args[0]) == list:
b80275b45b18 14176 copytree callers must catch shutil.Error and not traceback
Shawn Walker <srw@sun.com>
parents: 1771
diff changeset
  2452
                                msg = ""
b80275b45b18 14176 copytree callers must catch shutil.Error and not traceback
Shawn Walker <srw@sun.com>
parents: 1771
diff changeset
  2453
                                for elist in e.args:
b80275b45b18 14176 copytree callers must catch shutil.Error and not traceback
Shawn Walker <srw@sun.com>
parents: 1771
diff changeset
  2454
                                        for entry in elist:
b80275b45b18 14176 copytree callers must catch shutil.Error and not traceback
Shawn Walker <srw@sun.com>
parents: 1771
diff changeset
  2455
                                                if type(entry) == tuple:
b80275b45b18 14176 copytree callers must catch shutil.Error and not traceback
Shawn Walker <srw@sun.com>
parents: 1771
diff changeset
  2456
                                                        msg += "%s\n" % \
b80275b45b18 14176 copytree callers must catch shutil.Error and not traceback
Shawn Walker <srw@sun.com>
parents: 1771
diff changeset
  2457
                                                            entry[-1]
b80275b45b18 14176 copytree callers must catch shutil.Error and not traceback
Shawn Walker <srw@sun.com>
parents: 1771
diff changeset
  2458
                                                else:
b80275b45b18 14176 copytree callers must catch shutil.Error and not traceback
Shawn Walker <srw@sun.com>
parents: 1771
diff changeset
  2459
                                                        msg += "%s\n" % entry
2073
9fcacc9e5eaa 16998 transport should support publisher-specific write and read caches
Shawn Walker <shawn.walker@oracle.com>
parents: 2069
diff changeset
  2460
                                raise apx.UnknownErrors(msg)
9fcacc9e5eaa 16998 transport should support publisher-specific write and read caches
Shawn Walker <shawn.walker@oracle.com>
parents: 2069
diff changeset
  2461
                        raise apx._convert_error(e)
1463
0ef25025d601 12340 catalog storage performance regression
Shawn Walker <srw@sun.com>
parents: 1461
diff changeset
  2462
                finally:
0ef25025d601 12340 catalog storage performance regression
Shawn Walker <srw@sun.com>
parents: 1461
diff changeset
  2463
                        # Regardless of success, the following must happen.
1842
b71de8f65cc8 15176 imageplan keeps solver cache and catalog data too long
Shawn Walker <shawn.walker@oracle.com>
parents: 1837
diff changeset
  2464
                        self.__init_catalogs()
1463
0ef25025d601 12340 catalog storage performance regression
Shawn Walker <srw@sun.com>
parents: 1461
diff changeset
  2465
                        if os.path.exists(tmp_state_root):
0ef25025d601 12340 catalog storage performance regression
Shawn Walker <srw@sun.com>
parents: 1461
diff changeset
  2466
                                shutil.rmtree(tmp_state_root, True)
2035
05d5d55504e7 16669 package operations should remove unused manifest cache files
Shawn Walker <shawn.walker@oracle.com>
parents: 2034
diff changeset
  2467
                progtrack.item_done()
195
b23d0425f0f7 11 use FMRIs with fully specified authorities internally
johansen <johansen@sun.com>
parents: 192
diff changeset
  2468
1352
5c92c9d342ef 11065 client v1 catalog support for v0 catalogs
Shawn Walker <srw@sun.com>
parents: 1328
diff changeset
  2469
        def get_catalog(self, name):
5c92c9d342ef 11065 client v1 catalog support for v0 catalogs
Shawn Walker <srw@sun.com>
parents: 1328
diff changeset
  2470
                """Returns the requested image catalog.
195
b23d0425f0f7 11 use FMRIs with fully specified authorities internally
johansen <johansen@sun.com>
parents: 192
diff changeset
  2471
1352
5c92c9d342ef 11065 client v1 catalog support for v0 catalogs
Shawn Walker <srw@sun.com>
parents: 1328
diff changeset
  2472
                'name' must be one of the following image constants:
5c92c9d342ef 11065 client v1 catalog support for v0 catalogs
Shawn Walker <srw@sun.com>
parents: 1328
diff changeset
  2473
                    IMG_CATALOG_KNOWN
5c92c9d342ef 11065 client v1 catalog support for v0 catalogs
Shawn Walker <srw@sun.com>
parents: 1328
diff changeset
  2474
                        The known catalog contains all of packages that are
5c92c9d342ef 11065 client v1 catalog support for v0 catalogs
Shawn Walker <srw@sun.com>
parents: 1328
diff changeset
  2475
                        installed or available from a publisher's repository.
5c92c9d342ef 11065 client v1 catalog support for v0 catalogs
Shawn Walker <srw@sun.com>
parents: 1328
diff changeset
  2476
5c92c9d342ef 11065 client v1 catalog support for v0 catalogs
Shawn Walker <srw@sun.com>
parents: 1328
diff changeset
  2477
                    IMG_CATALOG_INSTALLED
5c92c9d342ef 11065 client v1 catalog support for v0 catalogs
Shawn Walker <srw@sun.com>
parents: 1328
diff changeset
  2478
                        The installed catalog is a subset of the 'known'
5c92c9d342ef 11065 client v1 catalog support for v0 catalogs
Shawn Walker <srw@sun.com>
parents: 1328
diff changeset
  2479
                        catalog that only contains installed packages."""
5c92c9d342ef 11065 client v1 catalog support for v0 catalogs
Shawn Walker <srw@sun.com>
parents: 1328
diff changeset
  2480
5c92c9d342ef 11065 client v1 catalog support for v0 catalogs
Shawn Walker <srw@sun.com>
parents: 1328
diff changeset
  2481
                if not self.imgdir:
5c92c9d342ef 11065 client v1 catalog support for v0 catalogs
Shawn Walker <srw@sun.com>
parents: 1328
diff changeset
  2482
                        raise RuntimeError("self.imgdir must be set")
418
21621fd99956 2543 eliminate unnecessary stat() calls from gen_installed_pkgs()
Danek Duvall <danek.duvall@sun.com>
parents: 409
diff changeset
  2483
2219
60ad60f7592c 2152 standalone package support needed (on-disk format)
Shawn Walker <shawn.walker@oracle.com>
parents: 2205
diff changeset
  2484
                cat = None
717
c40259b4ce98 4569 pkg uninstall tracesback when lacking permissions
Brock Pytlik <bpytlik@sun.com>
parents: 715
diff changeset
  2485
                try:
2219
60ad60f7592c 2152 standalone package support needed (on-disk format)
Shawn Walker <shawn.walker@oracle.com>
parents: 2205
diff changeset
  2486
                        cat = self.__catalogs[name]
1352
5c92c9d342ef 11065 client v1 catalog support for v0 catalogs
Shawn Walker <srw@sun.com>
parents: 1328
diff changeset
  2487
                except KeyError:
5c92c9d342ef 11065 client v1 catalog support for v0 catalogs
Shawn Walker <srw@sun.com>
parents: 1328
diff changeset
  2488
                        pass
195
b23d0425f0f7 11 use FMRIs with fully specified authorities internally
johansen <johansen@sun.com>
parents: 192
diff changeset
  2489
2219
60ad60f7592c 2152 standalone package support needed (on-disk format)
Shawn Walker <shawn.walker@oracle.com>
parents: 2205
diff changeset
  2490
60ad60f7592c 2152 standalone package support needed (on-disk format)
Shawn Walker <shawn.walker@oracle.com>
parents: 2205
diff changeset
  2491
                if not cat:
60ad60f7592c 2152 standalone package support needed (on-disk format)
Shawn Walker <shawn.walker@oracle.com>
parents: 2205
diff changeset
  2492
                        cat = self.__get_catalog(name)
60ad60f7592c 2152 standalone package support needed (on-disk format)
Shawn Walker <shawn.walker@oracle.com>
parents: 2205
diff changeset
  2493
                        self.__catalogs[name] = cat
60ad60f7592c 2152 standalone package support needed (on-disk format)
Shawn Walker <shawn.walker@oracle.com>
parents: 2205
diff changeset
  2494
60ad60f7592c 2152 standalone package support needed (on-disk format)
Shawn Walker <shawn.walker@oracle.com>
parents: 2205
diff changeset
  2495
                if name == self.IMG_CATALOG_KNOWN:
60ad60f7592c 2152 standalone package support needed (on-disk format)
Shawn Walker <shawn.walker@oracle.com>
parents: 2205
diff changeset
  2496
                        # Apply alternate package source data every time that
60ad60f7592c 2152 standalone package support needed (on-disk format)
Shawn Walker <shawn.walker@oracle.com>
parents: 2205
diff changeset
  2497
                        # the known catalog is requested.
60ad60f7592c 2152 standalone package support needed (on-disk format)
Shawn Walker <shawn.walker@oracle.com>
parents: 2205
diff changeset
  2498
                        self.__apply_alt_pkg_sources(cat)
60ad60f7592c 2152 standalone package support needed (on-disk format)
Shawn Walker <shawn.walker@oracle.com>
parents: 2205
diff changeset
  2499
1837
03aa2b10f29d 15169 image-update plans twice and keeps both
Shawn Walker <shawn.walker@oracle.com>
parents: 1832
diff changeset
  2500
                return cat
1710
139720e2e756 1668 image locking needed to prevent race conditions
Shawn Walker <srw@sun.com>
parents: 1688
diff changeset
  2501
2144
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  2502
        def _manifest_cb(self, cat, f):
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  2503
                # Only allow lazy-load for packages from non-v1 sources.
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  2504
                # Assume entries for other sources have all data
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  2505
                # required in catalog.  This prevents manifest retrieval
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  2506
                # for packages that don't have any related action data
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  2507
                # in the catalog because they don't have any related
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  2508
                # action data in their manifest.
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  2509
                entry = cat.get_entry(f)
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  2510
                states = entry["metadata"]["states"]
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  2511
                if self.PKG_STATE_V1 not in states:
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  2512
                        return self.get_manifest(f, all_variants=True)
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  2513
                return
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  2514
1710
139720e2e756 1668 image locking needed to prevent race conditions
Shawn Walker <srw@sun.com>
parents: 1688
diff changeset
  2515
        def __get_catalog(self, name):
139720e2e756 1668 image locking needed to prevent race conditions
Shawn Walker <srw@sun.com>
parents: 1688
diff changeset
  2516
                """Private method to retrieve catalog; this bypasses the
2144
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  2517
                normal automatic caching (unless the image hasn't been
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  2518
                upgraded yet)."""
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  2519
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  2520
                if self.__upgraded and self.version < 3:
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  2521
                        # Assume the catalog is already cached in this case
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  2522
                        # and can't be reloaded from disk as it doesn't exist
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  2523
                        # on disk yet.
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  2524
                        return self.__catalogs[name]
1710
139720e2e756 1668 image locking needed to prevent race conditions
Shawn Walker <srw@sun.com>
parents: 1688
diff changeset
  2525
2073
9fcacc9e5eaa 16998 transport should support publisher-specific write and read caches
Shawn Walker <shawn.walker@oracle.com>
parents: 2069
diff changeset
  2526
                croot = os.path.join(self._statedir, name)
419
a38f1ed7cf76 1867 'pkg list' takes *WAY* too long
Danek Duvall <danek.duvall@sun.com>
parents: 418
diff changeset
  2527
                try:
1352
5c92c9d342ef 11065 client v1 catalog support for v0 catalogs
Shawn Walker <srw@sun.com>
parents: 1328
diff changeset
  2528
                        os.makedirs(croot)
419
a38f1ed7cf76 1867 'pkg list' takes *WAY* too long
Danek Duvall <danek.duvall@sun.com>
parents: 418
diff changeset
  2529
                except EnvironmentError, e:
1431
62b6033670e4 10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents: 1402
diff changeset
  2530
                        if e.errno in (errno.EACCES, errno.EROFS):
1352
5c92c9d342ef 11065 client v1 catalog support for v0 catalogs
Shawn Walker <srw@sun.com>
parents: 1328
diff changeset
  2531
                                # Allow operations to work for
5c92c9d342ef 11065 client v1 catalog support for v0 catalogs
Shawn Walker <srw@sun.com>
parents: 1328
diff changeset
  2532
                                # unprivileged users.
5c92c9d342ef 11065 client v1 catalog support for v0 catalogs
Shawn Walker <srw@sun.com>
parents: 1328
diff changeset
  2533
                                croot = None
5c92c9d342ef 11065 client v1 catalog support for v0 catalogs
Shawn Walker <srw@sun.com>
parents: 1328
diff changeset
  2534
                        elif e.errno != errno.EEXIST:
658
e470d4688084 4412 pkg refresh can strand one w/o packages after upgrade from 86
Danek Duvall <danek.duvall@sun.com>
parents: 655
diff changeset
  2535
                                raise
e470d4688084 4412 pkg refresh can strand one w/o packages after upgrade from 86
Danek Duvall <danek.duvall@sun.com>
parents: 655
diff changeset
  2536
1358
6fec8fbc15a6 11324 package state written to parent boot environment during image-update
Shawn Walker <srw@sun.com>
parents: 1353
diff changeset
  2537
                # batch_mode is set to True here as any operations that modify
6fec8fbc15a6 11324 package state written to parent boot environment during image-update
Shawn Walker <srw@sun.com>
parents: 1353
diff changeset
  2538
                # the catalogs (add or remove entries) are only done during an
6fec8fbc15a6 11324 package state written to parent boot environment during image-update
Shawn Walker <srw@sun.com>
parents: 1353
diff changeset
  2539
                # image upgrade or metadata refresh.  In both cases, the catalog
6fec8fbc15a6 11324 package state written to parent boot environment during image-update
Shawn Walker <srw@sun.com>
parents: 1353
diff changeset
  2540
                # is resorted and finalized so this is always safe to use.
6fec8fbc15a6 11324 package state written to parent boot environment during image-update
Shawn Walker <srw@sun.com>
parents: 1353
diff changeset
  2541
                cat = pkg.catalog.Catalog(batch_mode=True,
2144
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  2542
                    manifest_cb=self._manifest_cb, meta_root=croot, sign=False)
1352
5c92c9d342ef 11065 client v1 catalog support for v0 catalogs
Shawn Walker <srw@sun.com>
parents: 1328
diff changeset
  2543
                return cat
5c92c9d342ef 11065 client v1 catalog support for v0 catalogs
Shawn Walker <srw@sun.com>
parents: 1328
diff changeset
  2544
1710
139720e2e756 1668 image locking needed to prevent race conditions
Shawn Walker <srw@sun.com>
parents: 1688
diff changeset
  2545
        def __remove_catalogs(self):
1352
5c92c9d342ef 11065 client v1 catalog support for v0 catalogs
Shawn Walker <srw@sun.com>
parents: 1328
diff changeset
  2546
                """Removes all image catalogs and their directories."""
419
a38f1ed7cf76 1867 'pkg list' takes *WAY* too long
Danek Duvall <danek.duvall@sun.com>
parents: 418
diff changeset
  2547
1463
0ef25025d601 12340 catalog storage performance regression
Shawn Walker <srw@sun.com>
parents: 1461
diff changeset
  2548
                self.__init_catalogs()
1352
5c92c9d342ef 11065 client v1 catalog support for v0 catalogs
Shawn Walker <srw@sun.com>
parents: 1328
diff changeset
  2549
                for name in (self.IMG_CATALOG_KNOWN,
5c92c9d342ef 11065 client v1 catalog support for v0 catalogs
Shawn Walker <srw@sun.com>
parents: 1328
diff changeset
  2550
                    self.IMG_CATALOG_INSTALLED):
2073
9fcacc9e5eaa 16998 transport should support publisher-specific write and read caches
Shawn Walker <shawn.walker@oracle.com>
parents: 2069
diff changeset
  2551
                        shutil.rmtree(os.path.join(self._statedir, name))
418
21621fd99956 2543 eliminate unnecessary stat() calls from gen_installed_pkgs()
Danek Duvall <danek.duvall@sun.com>
parents: 409
diff changeset
  2552
556
1c3526ca7b9e 2022 client should provide operational intent to server
Shawn Walker <shawn.walker@sun.com>
parents: 554
diff changeset
  2553
        def get_version_installed(self, pfmri):
1c3526ca7b9e 2022 client should provide operational intent to server
Shawn Walker <shawn.walker@sun.com>
parents: 554
diff changeset
  2554
                """Returns an fmri of the installed package matching the
1c3526ca7b9e 2022 client should provide operational intent to server
Shawn Walker <shawn.walker@sun.com>
parents: 554
diff changeset
  2555
                package stem of the given fmri or None if no match is found."""
996
31d152a5212b 7582 pkg set-publisher --no-refresh will delete catalogs
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 993
diff changeset
  2556
1352
5c92c9d342ef 11065 client v1 catalog support for v0 catalogs
Shawn Walker <srw@sun.com>
parents: 1328
diff changeset
  2557
                cat = self.get_catalog(self.IMG_CATALOG_INSTALLED)
5c92c9d342ef 11065 client v1 catalog support for v0 catalogs
Shawn Walker <srw@sun.com>
parents: 1328
diff changeset
  2558
                for ver, fmris in cat.fmris_by_version(pfmri.pkg_name):
5c92c9d342ef 11065 client v1 catalog support for v0 catalogs
Shawn Walker <srw@sun.com>
parents: 1328
diff changeset
  2559
                        return fmris[0]
423
5c756997bf67 2253 With the latest build of the pkg repo, can't install packages from additional authorities
Danek Duvall <danek.duvall@sun.com>
parents: 419
diff changeset
  2560
                return None
5c756997bf67 2253 With the latest build of the pkg repo, can't install packages from additional authorities
Danek Duvall <danek.duvall@sun.com>
parents: 419
diff changeset
  2561
135
a1e20e9a9845 add CLI test suite, correct bugs found by test suite, ration out CLI options
Stephen Hahn <sch@Sun.COM>
parents: 116
diff changeset
  2562
        def has_version_installed(self, fmri):
59
eef94b0c0694 require dependencies; dependency following; pkg status; timestamp change
Stephen Hahn <sch@sun.com>
parents: 51
diff changeset
  2563
                """Check that the version given in the FMRI or a successor is
307
3a857fd8b787 787 optional dependencies are required
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 302
diff changeset
  2564
                installed in the current image."""
258
b3b7592412ec 270 Need ability to rename packages
johansen <johansen@sun.com>
parents: 251
diff changeset
  2565
560
4c8d82d58131 3569 pkg state code obviates use of _get_version_installed
Shawn Walker <shawn.walker@sun.com>
parents: 556
diff changeset
  2566
                v = self.get_version_installed(fmri)
59
eef94b0c0694 require dependencies; dependency following; pkg status; timestamp change
Stephen Hahn <sch@sun.com>
parents: 51
diff changeset
  2567
1352
5c92c9d342ef 11065 client v1 catalog support for v0 catalogs
Shawn Walker <srw@sun.com>
parents: 1328
diff changeset
  2568
                if v and not fmri.publisher:
926
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 922
diff changeset
  2569
                        fmri.set_publisher(v.get_publisher_str())
1352
5c92c9d342ef 11065 client v1 catalog support for v0 catalogs
Shawn Walker <srw@sun.com>
parents: 1328
diff changeset
  2570
                elif not fmri.publisher:
2310
ce10607d5332 11684 desire option to not propagate certs to non-global zones
Brock Pytlik <brock.pytlik@oracle.com>
parents: 2293
diff changeset
  2571
                        fmri.set_publisher(self.get_highest_ranked_publisher(),
ce10607d5332 11684 desire option to not propagate certs to non-global zones
Brock Pytlik <brock.pytlik@oracle.com>
parents: 2293
diff changeset
  2572
                            True)
266
5e5bff6fedce 582 Importing packages seemingly misrecords dependencies
johansen <johansen@sun.com>
parents: 260
diff changeset
  2573
1288
4248f27af42a 10417 rename v0 support should be removed everywhere
Shawn Walker <srw@sun.com>
parents: 1271
diff changeset
  2574
                if v and v.is_successor(fmri):
258
b3b7592412ec 270 Need ability to rename packages
johansen <johansen@sun.com>
parents: 251
diff changeset
  2575
                        return True
59
eef94b0c0694 require dependencies; dependency following; pkg status; timestamp change
Stephen Hahn <sch@sun.com>
parents: 51
diff changeset
  2576
                return False
eef94b0c0694 require dependencies; dependency following; pkg status; timestamp change
Stephen Hahn <sch@sun.com>
parents: 51
diff changeset
  2577
2352
3c17f86cd994 18105 api should support multiple repositories (origins) with different package data
Shawn Walker <shawn.walker@oracle.com>
parents: 2350
diff changeset
  2578
        def get_pkg_repo(self, pfmri):
3c17f86cd994 18105 api should support multiple repositories (origins) with different package data
Shawn Walker <shawn.walker@oracle.com>
parents: 2350
diff changeset
  2579
                """Returns the repository object containing the origins that
3c17f86cd994 18105 api should support multiple repositories (origins) with different package data
Shawn Walker <shawn.walker@oracle.com>
parents: 2350
diff changeset
  2580
                should be used to retrieve the specified package or None if
3c17f86cd994 18105 api should support multiple repositories (origins) with different package data
Shawn Walker <shawn.walker@oracle.com>
parents: 2350
diff changeset
  2581
                it can be retrieved from all sources or is not a known package.
3c17f86cd994 18105 api should support multiple repositories (origins) with different package data
Shawn Walker <shawn.walker@oracle.com>
parents: 2350
diff changeset
  2582
                """
3c17f86cd994 18105 api should support multiple repositories (origins) with different package data
Shawn Walker <shawn.walker@oracle.com>
parents: 2350
diff changeset
  2583
3c17f86cd994 18105 api should support multiple repositories (origins) with different package data
Shawn Walker <shawn.walker@oracle.com>
parents: 2350
diff changeset
  2584
                assert pfmri.publisher
3c17f86cd994 18105 api should support multiple repositories (origins) with different package data
Shawn Walker <shawn.walker@oracle.com>
parents: 2350
diff changeset
  2585
                cat = self.get_catalog(self.IMG_CATALOG_KNOWN)
3c17f86cd994 18105 api should support multiple repositories (origins) with different package data
Shawn Walker <shawn.walker@oracle.com>
parents: 2350
diff changeset
  2586
                entry = cat.get_entry(pfmri)
3c17f86cd994 18105 api should support multiple repositories (origins) with different package data
Shawn Walker <shawn.walker@oracle.com>
parents: 2350
diff changeset
  2587
                if entry is None:
3c17f86cd994 18105 api should support multiple repositories (origins) with different package data
Shawn Walker <shawn.walker@oracle.com>
parents: 2350
diff changeset
  2588
                        # Package not known.
3c17f86cd994 18105 api should support multiple repositories (origins) with different package data
Shawn Walker <shawn.walker@oracle.com>
parents: 2350
diff changeset
  2589
                        return
3c17f86cd994 18105 api should support multiple repositories (origins) with different package data
Shawn Walker <shawn.walker@oracle.com>
parents: 2350
diff changeset
  2590
3c17f86cd994 18105 api should support multiple repositories (origins) with different package data
Shawn Walker <shawn.walker@oracle.com>
parents: 2350
diff changeset
  2591
                try:
3c17f86cd994 18105 api should support multiple repositories (origins) with different package data
Shawn Walker <shawn.walker@oracle.com>
parents: 2350
diff changeset
  2592
                        slist = entry["metadata"]["sources"]
3c17f86cd994 18105 api should support multiple repositories (origins) with different package data
Shawn Walker <shawn.walker@oracle.com>
parents: 2350
diff changeset
  2593
                except KeyError:
3c17f86cd994 18105 api should support multiple repositories (origins) with different package data
Shawn Walker <shawn.walker@oracle.com>
parents: 2350
diff changeset
  2594
                        # Can be retrieved from any source.
3c17f86cd994 18105 api should support multiple repositories (origins) with different package data
Shawn Walker <shawn.walker@oracle.com>
parents: 2350
diff changeset
  2595
                        return
3c17f86cd994 18105 api should support multiple repositories (origins) with different package data
Shawn Walker <shawn.walker@oracle.com>
parents: 2350
diff changeset
  2596
                else:
3c17f86cd994 18105 api should support multiple repositories (origins) with different package data
Shawn Walker <shawn.walker@oracle.com>
parents: 2350
diff changeset
  2597
                        if not slist:
3c17f86cd994 18105 api should support multiple repositories (origins) with different package data
Shawn Walker <shawn.walker@oracle.com>
parents: 2350
diff changeset
  2598
                                # Can be retrieved from any source.
3c17f86cd994 18105 api should support multiple repositories (origins) with different package data
Shawn Walker <shawn.walker@oracle.com>
parents: 2350
diff changeset
  2599
                                return
3c17f86cd994 18105 api should support multiple repositories (origins) with different package data
Shawn Walker <shawn.walker@oracle.com>
parents: 2350
diff changeset
  2600
3c17f86cd994 18105 api should support multiple repositories (origins) with different package data
Shawn Walker <shawn.walker@oracle.com>
parents: 2350
diff changeset
  2601
                pub = self.get_publisher(prefix=pfmri.publisher)
3c17f86cd994 18105 api should support multiple repositories (origins) with different package data
Shawn Walker <shawn.walker@oracle.com>
parents: 2350
diff changeset
  2602
                repo = copy.copy(pub.repository)
3c17f86cd994 18105 api should support multiple repositories (origins) with different package data
Shawn Walker <shawn.walker@oracle.com>
parents: 2350
diff changeset
  2603
                norigins = [
3c17f86cd994 18105 api should support multiple repositories (origins) with different package data
Shawn Walker <shawn.walker@oracle.com>
parents: 2350
diff changeset
  2604
                    o for o in repo.origins
3c17f86cd994 18105 api should support multiple repositories (origins) with different package data
Shawn Walker <shawn.walker@oracle.com>
parents: 2350
diff changeset
  2605
                    if o.uri in slist
3c17f86cd994 18105 api should support multiple repositories (origins) with different package data
Shawn Walker <shawn.walker@oracle.com>
parents: 2350
diff changeset
  2606
                ]
3c17f86cd994 18105 api should support multiple repositories (origins) with different package data
Shawn Walker <shawn.walker@oracle.com>
parents: 2350
diff changeset
  2607
3c17f86cd994 18105 api should support multiple repositories (origins) with different package data
Shawn Walker <shawn.walker@oracle.com>
parents: 2350
diff changeset
  2608
                if not norigins:
3c17f86cd994 18105 api should support multiple repositories (origins) with different package data
Shawn Walker <shawn.walker@oracle.com>
parents: 2350
diff changeset
  2609
                        # Known sources don't match configured; return so that
3c17f86cd994 18105 api should support multiple repositories (origins) with different package data
Shawn Walker <shawn.walker@oracle.com>
parents: 2350
diff changeset
  2610
                        # caller can fallback to default behaviour.
3c17f86cd994 18105 api should support multiple repositories (origins) with different package data
Shawn Walker <shawn.walker@oracle.com>
parents: 2350
diff changeset
  2611
                        return
3c17f86cd994 18105 api should support multiple repositories (origins) with different package data
Shawn Walker <shawn.walker@oracle.com>
parents: 2350
diff changeset
  2612
3c17f86cd994 18105 api should support multiple repositories (origins) with different package data
Shawn Walker <shawn.walker@oracle.com>
parents: 2350
diff changeset
  2613
                repo.origins = norigins
3c17f86cd994 18105 api should support multiple repositories (origins) with different package data
Shawn Walker <shawn.walker@oracle.com>
parents: 2350
diff changeset
  2614
                return repo
3c17f86cd994 18105 api should support multiple repositories (origins) with different package data
Shawn Walker <shawn.walker@oracle.com>
parents: 2350
diff changeset
  2615
1461
fdf40c8c6765 820 Need a way to obsolete packages
Danek Duvall <danek.duvall@sun.com>
parents: 1449
diff changeset
  2616
        def get_pkg_state(self, pfmri):
fdf40c8c6765 820 Need a way to obsolete packages
Danek Duvall <danek.duvall@sun.com>
parents: 1449
diff changeset
  2617
                """Returns the list of states a package is in for this image."""
fdf40c8c6765 820 Need a way to obsolete packages
Danek Duvall <danek.duvall@sun.com>
parents: 1449
diff changeset
  2618
fdf40c8c6765 820 Need a way to obsolete packages
Danek Duvall <danek.duvall@sun.com>
parents: 1449
diff changeset
  2619
                cat = self.get_catalog(self.IMG_CATALOG_KNOWN)
1537
00a5b4d54eb8 5872 List APIs required
Shawn Walker <srw@sun.com>
parents: 1516
diff changeset
  2620
                entry = cat.get_entry(pfmri)
00a5b4d54eb8 5872 List APIs required
Shawn Walker <srw@sun.com>
parents: 1516
diff changeset
  2621
                if entry is None:
1461
fdf40c8c6765 820 Need a way to obsolete packages
Danek Duvall <danek.duvall@sun.com>
parents: 1449
diff changeset
  2622
                        return []
fdf40c8c6765 820 Need a way to obsolete packages
Danek Duvall <danek.duvall@sun.com>
parents: 1449
diff changeset
  2623
                return entry["metadata"]["states"]
fdf40c8c6765 820 Need a way to obsolete packages
Danek Duvall <danek.duvall@sun.com>
parents: 1449
diff changeset
  2624
1352
5c92c9d342ef 11065 client v1 catalog support for v0 catalogs
Shawn Walker <srw@sun.com>
parents: 1328
diff changeset
  2625
        def is_pkg_installed(self, pfmri):
5c92c9d342ef 11065 client v1 catalog support for v0 catalogs
Shawn Walker <srw@sun.com>
parents: 1328
diff changeset
  2626
                """Returns a boolean value indicating whether the specified
5c92c9d342ef 11065 client v1 catalog support for v0 catalogs
Shawn Walker <srw@sun.com>
parents: 1328
diff changeset
  2627
                package is installed."""
5c92c9d342ef 11065 client v1 catalog support for v0 catalogs
Shawn Walker <srw@sun.com>
parents: 1328
diff changeset
  2628
1431
62b6033670e4 10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents: 1402
diff changeset
  2629
                # Avoid loading the installed catalog if the known catalog
62b6033670e4 10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents: 1402
diff changeset
  2630
                # is already loaded.  This is safe since the installed
62b6033670e4 10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents: 1402
diff changeset
  2631
                # catalog is a subset of the known, and a specific entry
62b6033670e4 10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents: 1402
diff changeset
  2632
                # is being retrieved.
62b6033670e4 10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents: 1402
diff changeset
  2633
                if not self.__catalog_loaded(self.IMG_CATALOG_KNOWN):
62b6033670e4 10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents: 1402
diff changeset
  2634
                        cat = self.get_catalog(self.IMG_CATALOG_INSTALLED)
62b6033670e4 10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents: 1402
diff changeset
  2635
                else:
62b6033670e4 10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents: 1402
diff changeset
  2636
                        cat = self.get_catalog(self.IMG_CATALOG_KNOWN)
62b6033670e4 10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents: 1402
diff changeset
  2637
1537
00a5b4d54eb8 5872 List APIs required
Shawn Walker <srw@sun.com>
parents: 1516
diff changeset
  2638
                entry = cat.get_entry(pfmri)
00a5b4d54eb8 5872 List APIs required
Shawn Walker <srw@sun.com>
parents: 1516
diff changeset
  2639
                if entry is None:
1352
5c92c9d342ef 11065 client v1 catalog support for v0 catalogs
Shawn Walker <srw@sun.com>
parents: 1328
diff changeset
  2640
                        return False
1431
62b6033670e4 10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents: 1402
diff changeset
  2641
                states = entry["metadata"]["states"]
62b6033670e4 10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents: 1402
diff changeset
  2642
                return self.PKG_STATE_INSTALLED in states
1352
5c92c9d342ef 11065 client v1 catalog support for v0 catalogs
Shawn Walker <srw@sun.com>
parents: 1328
diff changeset
  2643
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  2644
        def list_excludes(self, new_variants=None, new_facets=None):
926
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 922
diff changeset
  2645
                """Generate a list of callables that each return True if an
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 922
diff changeset
  2646
                action is to be included in the image using the currently
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  2647
                defined variants & facets for the image, or an updated set if
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  2648
                new_variants or new_facets are specified."""
1537
00a5b4d54eb8 5872 List APIs required
Shawn Walker <srw@sun.com>
parents: 1516
diff changeset
  2649
838
aafbe4737188 3245 need to support creation of multi-architecture (fat) packages
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 835
diff changeset
  2650
                if new_variants:
2097
068cc63b4d6e 17055 image configuration should use pkg.config classes
Shawn Walker <shawn.walker@oracle.com>
parents: 2092
diff changeset
  2651
                        new_vars = self.cfg.variants.copy()
838
aafbe4737188 3245 need to support creation of multi-architecture (fat) packages
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 835
diff changeset
  2652
                        new_vars.update(new_variants)
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  2653
                        var_call = new_vars.allow_action
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  2654
                else:
2097
068cc63b4d6e 17055 image configuration should use pkg.config classes
Shawn Walker <shawn.walker@oracle.com>
parents: 2092
diff changeset
  2655
                        var_call = self.cfg.variants.allow_action
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  2656
                if new_facets:
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  2657
                        fac_call = new_facets.allow_action
838
aafbe4737188 3245 need to support creation of multi-architecture (fat) packages
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 835
diff changeset
  2658
                else:
2097
068cc63b4d6e 17055 image configuration should use pkg.config classes
Shawn Walker <shawn.walker@oracle.com>
parents: 2092
diff changeset
  2659
                        fac_call = self.cfg.facets.allow_action
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  2660
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  2661
                return [var_call, fac_call]
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  2662
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  2663
        def get_variants(self):
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  2664
                """ return a copy of the current image variants"""
2097
068cc63b4d6e 17055 image configuration should use pkg.config classes
Shawn Walker <shawn.walker@oracle.com>
parents: 2092
diff changeset
  2665
                return self.cfg.variants.copy()
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  2666
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  2667
        def get_facets(self):
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  2668
                """ Return a copy of the current image facets"""
2097
068cc63b4d6e 17055 image configuration should use pkg.config classes
Shawn Walker <shawn.walker@oracle.com>
parents: 2092
diff changeset
  2669
                return self.cfg.facets.copy()
838
aafbe4737188 3245 need to support creation of multi-architecture (fat) packages
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 835
diff changeset
  2670
1352
5c92c9d342ef 11065 client v1 catalog support for v0 catalogs
Shawn Walker <srw@sun.com>
parents: 1328
diff changeset
  2671
        def __rebuild_image_catalogs(self, progtrack=None):
5c92c9d342ef 11065 client v1 catalog support for v0 catalogs
Shawn Walker <srw@sun.com>
parents: 1328
diff changeset
  2672
                """Rebuilds the image catalogs based on the available publisher
5c92c9d342ef 11065 client v1 catalog support for v0 catalogs
Shawn Walker <srw@sun.com>
parents: 1328
diff changeset
  2673
                catalogs."""
5c92c9d342ef 11065 client v1 catalog support for v0 catalogs
Shawn Walker <srw@sun.com>
parents: 1328
diff changeset
  2674
2144
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  2675
                if self.version < 3:
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  2676
                        raise apx.ImageFormatUpdateNeeded(self.root)
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  2677
1352
5c92c9d342ef 11065 client v1 catalog support for v0 catalogs
Shawn Walker <srw@sun.com>
parents: 1328
diff changeset
  2678
                if not progtrack:
5c92c9d342ef 11065 client v1 catalog support for v0 catalogs
Shawn Walker <srw@sun.com>
parents: 1328
diff changeset
  2679
                        progtrack = progress.QuietProgressTracker()
1507
b956ea23d3a6 11735 pkg history data files should not be executable
Richard Lowe <richlowe@richlowe.net>
parents: 1505
diff changeset
  2680
1352
5c92c9d342ef 11065 client v1 catalog support for v0 catalogs
Shawn Walker <srw@sun.com>
parents: 1328
diff changeset
  2681
                progtrack.cache_catalogs_start()
5c92c9d342ef 11065 client v1 catalog support for v0 catalogs
Shawn Walker <srw@sun.com>
parents: 1328
diff changeset
  2682
5c92c9d342ef 11065 client v1 catalog support for v0 catalogs
Shawn Walker <srw@sun.com>
parents: 1328
diff changeset
  2683
                publist = list(self.gen_publishers())
5c92c9d342ef 11065 client v1 catalog support for v0 catalogs
Shawn Walker <srw@sun.com>
parents: 1328
diff changeset
  2684
2141
3757a0f8a7d1 17385 history should store uuids for boot environments
Tim Foster <tim.s.foster@oracle.com>
parents: 2135
diff changeset
  2685
                be_name, be_uuid = bootenv.BootEnv.get_be_name(self.root)
2135
6eeb55920e13 3419 history command -- ability to specify dates or date ranges desired
Tim Foster <tim.s.foster@oracle.com>
parents: 2105
diff changeset
  2686
                self.history.log_operation_start("rebuild-image-catalogs",
2141
3757a0f8a7d1 17385 history should store uuids for boot environments
Tim Foster <tim.s.foster@oracle.com>
parents: 2135
diff changeset
  2687
                    be_name=be_name, be_uuid=be_uuid)
1402
c0fb578f911a 11384 cascading failure hides exception during image creation
Shawn Walker <srw@sun.com>
parents: 1370
diff changeset
  2688
1549
cc81f5023603 13110 image catalog rebuild could be faster
Shawn Walker <srw@sun.com>
parents: 1538
diff changeset
  2689
                # Mark all operations as occurring at this time.
cc81f5023603 13110 image catalog rebuild could be faster
Shawn Walker <srw@sun.com>
parents: 1538
diff changeset
  2690
                op_time = datetime.datetime.utcnow()
cc81f5023603 13110 image catalog rebuild could be faster
Shawn Walker <srw@sun.com>
parents: 1538
diff changeset
  2691
1352
5c92c9d342ef 11065 client v1 catalog support for v0 catalogs
Shawn Walker <srw@sun.com>
parents: 1328
diff changeset
  2692
                # The image catalogs need to be updated, but this is a bit
5c92c9d342ef 11065 client v1 catalog support for v0 catalogs
Shawn Walker <srw@sun.com>
parents: 1328
diff changeset
  2693
                # tricky as previously known packages must remain known even
5c92c9d342ef 11065 client v1 catalog support for v0 catalogs
Shawn Walker <srw@sun.com>
parents: 1328
diff changeset
  2694
                # if PKG_STATE_KNOWN is no longer true if any other state
5c92c9d342ef 11065 client v1 catalog support for v0 catalogs
Shawn Walker <srw@sun.com>
parents: 1328
diff changeset
  2695
                # information is present.  This is to allow freezing, etc. of
5c92c9d342ef 11065 client v1 catalog support for v0 catalogs
Shawn Walker <srw@sun.com>
parents: 1328
diff changeset
  2696
                # package states on a permanent basis even if the package is
1549
cc81f5023603 13110 image catalog rebuild could be faster
Shawn Walker <srw@sun.com>
parents: 1538
diff changeset
  2697
                # no longer available from a publisher repository.  However,
cc81f5023603 13110 image catalog rebuild could be faster
Shawn Walker <srw@sun.com>
parents: 1538
diff changeset
  2698
                # this is only True of installed packages.
cc81f5023603 13110 image catalog rebuild could be faster
Shawn Walker <srw@sun.com>
parents: 1538
diff changeset
  2699
                old_icat = self.get_catalog(self.IMG_CATALOG_INSTALLED)
1352
5c92c9d342ef 11065 client v1 catalog support for v0 catalogs
Shawn Walker <srw@sun.com>
parents: 1328
diff changeset
  2700
1358
6fec8fbc15a6 11324 package state written to parent boot environment during image-update
Shawn Walker <srw@sun.com>
parents: 1353
diff changeset
  2701
                # batch_mode is set to True here since without it, catalog
1352
5c92c9d342ef 11065 client v1 catalog support for v0 catalogs
Shawn Walker <srw@sun.com>
parents: 1328
diff changeset
  2702
                # population time is almost doubled (since the catalog is
5c92c9d342ef 11065 client v1 catalog support for v0 catalogs
Shawn Walker <srw@sun.com>
parents: 1328
diff changeset
  2703
                # re-sorted and stats are generated for every operation).
1402
c0fb578f911a 11384 cascading failure hides exception during image creation
Shawn Walker <srw@sun.com>
parents: 1370
diff changeset
  2704
                # In addition, the new catalog is first created in a new
c0fb578f911a 11384 cascading failure hides exception during image creation
Shawn Walker <srw@sun.com>
parents: 1370
diff changeset
  2705
                # temporary directory so that it can be moved into place
c0fb578f911a 11384 cascading failure hides exception during image creation
Shawn Walker <srw@sun.com>
parents: 1370
diff changeset
  2706
                # at the very end of this process (to minimize the chance
c0fb578f911a 11384 cascading failure hides exception during image creation
Shawn Walker <srw@sun.com>
parents: 1370
diff changeset
  2707
                # that failure or interruption will cause the image to be
c0fb578f911a 11384 cascading failure hides exception during image creation
Shawn Walker <srw@sun.com>
parents: 1370
diff changeset
  2708
                # left in an inconsistent state).
c0fb578f911a 11384 cascading failure hides exception during image creation
Shawn Walker <srw@sun.com>
parents: 1370
diff changeset
  2709
                tmp_state_root = self.temporary_dir()
c0fb578f911a 11384 cascading failure hides exception during image creation
Shawn Walker <srw@sun.com>
parents: 1370
diff changeset
  2710
2228
5319ee47781d 2774 new depend action behavior: follow if possible
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2219
diff changeset
  2711
                # Copy any regular files placed in the state directory
5319ee47781d 2774 new depend action behavior: follow if possible
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2219
diff changeset
  2712
                for p in os.listdir(self._statedir):
5319ee47781d 2774 new depend action behavior: follow if possible
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2219
diff changeset
  2713
                        fp = os.path.join(self._statedir, p)
5319ee47781d 2774 new depend action behavior: follow if possible
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2219
diff changeset
  2714
                        if os.path.isfile(fp):
5319ee47781d 2774 new depend action behavior: follow if possible
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2219
diff changeset
  2715
                                portable.copyfile(fp, os.path.join(tmp_state_root, p))
5319ee47781d 2774 new depend action behavior: follow if possible
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2219
diff changeset
  2716
1402
c0fb578f911a 11384 cascading failure hides exception during image creation
Shawn Walker <srw@sun.com>
parents: 1370
diff changeset
  2717
                kcat = pkg.catalog.Catalog(batch_mode=True,
c0fb578f911a 11384 cascading failure hides exception during image creation
Shawn Walker <srw@sun.com>
parents: 1370
diff changeset
  2718
                    meta_root=os.path.join(tmp_state_root,
c0fb578f911a 11384 cascading failure hides exception during image creation
Shawn Walker <srw@sun.com>
parents: 1370
diff changeset
  2719
                    self.IMG_CATALOG_KNOWN), sign=False)
1352
5c92c9d342ef 11065 client v1 catalog support for v0 catalogs
Shawn Walker <srw@sun.com>
parents: 1328
diff changeset
  2720
5c92c9d342ef 11065 client v1 catalog support for v0 catalogs
Shawn Walker <srw@sun.com>
parents: 1328
diff changeset
  2721
                # XXX if any of the below fails for any reason, the old 'known'
5c92c9d342ef 11065 client v1 catalog support for v0 catalogs
Shawn Walker <srw@sun.com>
parents: 1328
diff changeset
  2722
                # catalog needs to be re-loaded so the client is in a consistent
5c92c9d342ef 11065 client v1 catalog support for v0 catalogs
Shawn Walker <srw@sun.com>
parents: 1328
diff changeset
  2723
                # state.
5c92c9d342ef 11065 client v1 catalog support for v0 catalogs
Shawn Walker <srw@sun.com>
parents: 1328
diff changeset
  2724
5c92c9d342ef 11065 client v1 catalog support for v0 catalogs
Shawn Walker <srw@sun.com>
parents: 1328
diff changeset
  2725
                # All enabled publisher catalogs must be processed.
1431
62b6033670e4 10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents: 1402
diff changeset
  2726
                pub_cats = [(pub.prefix, pub.catalog) for pub in publist]
1352
5c92c9d342ef 11065 client v1 catalog support for v0 catalogs
Shawn Walker <srw@sun.com>
parents: 1328
diff changeset
  2727
5c92c9d342ef 11065 client v1 catalog support for v0 catalogs
Shawn Walker <srw@sun.com>
parents: 1328
diff changeset
  2728
                # XXX For backwards compatibility, 'upgradability' of packages
5c92c9d342ef 11065 client v1 catalog support for v0 catalogs
Shawn Walker <srw@sun.com>
parents: 1328
diff changeset
  2729
                # is calculated and stored based on whether a given pkg stem
5c92c9d342ef 11065 client v1 catalog support for v0 catalogs
Shawn Walker <srw@sun.com>
parents: 1328
diff changeset
  2730
                # matches the newest version in the catalog.  This is quite
5c92c9d342ef 11065 client v1 catalog support for v0 catalogs
Shawn Walker <srw@sun.com>
parents: 1328
diff changeset
  2731
                # expensive (due to overhead), but at least the cost is
5c92c9d342ef 11065 client v1 catalog support for v0 catalogs
Shawn Walker <srw@sun.com>
parents: 1328
diff changeset
  2732
                # consolidated here.  This comparison is also cross-publisher,
5c92c9d342ef 11065 client v1 catalog support for v0 catalogs
Shawn Walker <srw@sun.com>
parents: 1328
diff changeset
  2733
                # as it used to be.  In the future, it could likely be improved
5c92c9d342ef 11065 client v1 catalog support for v0 catalogs
Shawn Walker <srw@sun.com>
parents: 1328
diff changeset
  2734
                # by usage of the SAT solver.
5c92c9d342ef 11065 client v1 catalog support for v0 catalogs
Shawn Walker <srw@sun.com>
parents: 1328
diff changeset
  2735
                newest = {}
1549
cc81f5023603 13110 image catalog rebuild could be faster
Shawn Walker <srw@sun.com>
parents: 1538
diff changeset
  2736
                for pfx, cat in [(None, old_icat)] + pub_cats:
cc81f5023603 13110 image catalog rebuild could be faster
Shawn Walker <srw@sun.com>
parents: 1538
diff changeset
  2737
                        for f in cat.fmris(last=True, pubs=[pfx]):
cc81f5023603 13110 image catalog rebuild could be faster
Shawn Walker <srw@sun.com>
parents: 1538
diff changeset
  2738
                                nver, snver = newest.get(f.pkg_name, (None,
cc81f5023603 13110 image catalog rebuild could be faster
Shawn Walker <srw@sun.com>
parents: 1538
diff changeset
  2739
                                    None))
cc81f5023603 13110 image catalog rebuild could be faster
Shawn Walker <srw@sun.com>
parents: 1538
diff changeset
  2740
                                if f.version > nver:
cc81f5023603 13110 image catalog rebuild could be faster
Shawn Walker <srw@sun.com>
parents: 1538
diff changeset
  2741
                                        newest[f.pkg_name] = (f.version,
cc81f5023603 13110 image catalog rebuild could be faster
Shawn Walker <srw@sun.com>
parents: 1538
diff changeset
  2742
                                            str(f.version))
1352
5c92c9d342ef 11065 client v1 catalog support for v0 catalogs
Shawn Walker <srw@sun.com>
parents: 1328
diff changeset
  2743
1369
e86145680c34 11359 catalog should offer lazy-load mechanism for action metadata
Shawn Walker <srw@sun.com>
parents: 1358
diff changeset
  2744
                # Next, copy all of the entries for the catalog parts that
e86145680c34 11359 catalog should offer lazy-load mechanism for action metadata
Shawn Walker <srw@sun.com>
parents: 1358
diff changeset
  2745
                # currently exist into the image 'known' catalog.
1549
cc81f5023603 13110 image catalog rebuild could be faster
Shawn Walker <srw@sun.com>
parents: 1538
diff changeset
  2746
cc81f5023603 13110 image catalog rebuild could be faster
Shawn Walker <srw@sun.com>
parents: 1538
diff changeset
  2747
                # Iterator for source parts.
cc81f5023603 13110 image catalog rebuild could be faster
Shawn Walker <srw@sun.com>
parents: 1538
diff changeset
  2748
                sparts = (
cc81f5023603 13110 image catalog rebuild could be faster
Shawn Walker <srw@sun.com>
parents: 1538
diff changeset
  2749
                   (pfx, cat, name, cat.get_part(name, must_exist=True))
cc81f5023603 13110 image catalog rebuild could be faster
Shawn Walker <srw@sun.com>
parents: 1538
diff changeset
  2750
                   for pfx, cat in pub_cats
cc81f5023603 13110 image catalog rebuild could be faster
Shawn Walker <srw@sun.com>
parents: 1538
diff changeset
  2751
                   for name in cat.parts
cc81f5023603 13110 image catalog rebuild could be faster
Shawn Walker <srw@sun.com>
parents: 1538
diff changeset
  2752
                )
cc81f5023603 13110 image catalog rebuild could be faster
Shawn Walker <srw@sun.com>
parents: 1538
diff changeset
  2753
1678
825ec1d3702e 14013 image catalog rebuild can stumble on v0 to v1 repo transition
Shawn Walker <srw@sun.com>
parents: 1672
diff changeset
  2754
                # Build list of installed packages based on actual state
825ec1d3702e 14013 image catalog rebuild can stumble on v0 to v1 repo transition
Shawn Walker <srw@sun.com>
parents: 1672
diff changeset
  2755
                # information just in case there is a state issue from an
825ec1d3702e 14013 image catalog rebuild can stumble on v0 to v1 repo transition
Shawn Walker <srw@sun.com>
parents: 1672
diff changeset
  2756
                # older client.
825ec1d3702e 14013 image catalog rebuild can stumble on v0 to v1 repo transition
Shawn Walker <srw@sun.com>
parents: 1672
diff changeset
  2757
                inst_stems = {}
825ec1d3702e 14013 image catalog rebuild can stumble on v0 to v1 repo transition
Shawn Walker <srw@sun.com>
parents: 1672
diff changeset
  2758
                for t, entry in old_icat.tuple_entries():
825ec1d3702e 14013 image catalog rebuild can stumble on v0 to v1 repo transition
Shawn Walker <srw@sun.com>
parents: 1672
diff changeset
  2759
                        states = entry["metadata"]["states"]
825ec1d3702e 14013 image catalog rebuild can stumble on v0 to v1 repo transition
Shawn Walker <srw@sun.com>
parents: 1672
diff changeset
  2760
                        if self.PKG_STATE_INSTALLED not in states:
825ec1d3702e 14013 image catalog rebuild can stumble on v0 to v1 repo transition
Shawn Walker <srw@sun.com>
parents: 1672
diff changeset
  2761
                                continue
825ec1d3702e 14013 image catalog rebuild can stumble on v0 to v1 repo transition
Shawn Walker <srw@sun.com>
parents: 1672
diff changeset
  2762
                        pub, stem, ver = t
825ec1d3702e 14013 image catalog rebuild can stumble on v0 to v1 repo transition
Shawn Walker <srw@sun.com>
parents: 1672
diff changeset
  2763
                        inst_stems.setdefault(pub, {})
825ec1d3702e 14013 image catalog rebuild can stumble on v0 to v1 repo transition
Shawn Walker <srw@sun.com>
parents: 1672
diff changeset
  2764
                        inst_stems[pub].setdefault(stem, {})
825ec1d3702e 14013 image catalog rebuild can stumble on v0 to v1 repo transition
Shawn Walker <srw@sun.com>
parents: 1672
diff changeset
  2765
                        inst_stems[pub][stem][ver] = False
825ec1d3702e 14013 image catalog rebuild can stumble on v0 to v1 repo transition
Shawn Walker <srw@sun.com>
parents: 1672
diff changeset
  2766
825ec1d3702e 14013 image catalog rebuild can stumble on v0 to v1 repo transition
Shawn Walker <srw@sun.com>
parents: 1672
diff changeset
  2767
                # Create the new installed catalog in a temporary location.
825ec1d3702e 14013 image catalog rebuild can stumble on v0 to v1 repo transition
Shawn Walker <srw@sun.com>
parents: 1672
diff changeset
  2768
                icat = pkg.catalog.Catalog(batch_mode=True,
825ec1d3702e 14013 image catalog rebuild can stumble on v0 to v1 repo transition
Shawn Walker <srw@sun.com>
parents: 1672
diff changeset
  2769
                    meta_root=os.path.join(tmp_state_root,
825ec1d3702e 14013 image catalog rebuild can stumble on v0 to v1 repo transition
Shawn Walker <srw@sun.com>
parents: 1672
diff changeset
  2770
                    self.IMG_CATALOG_INSTALLED), sign=False)
825ec1d3702e 14013 image catalog rebuild can stumble on v0 to v1 repo transition
Shawn Walker <srw@sun.com>
parents: 1672
diff changeset
  2771
1801
09b5c1ddef24 14832 pkg info traceback for renamed packages with no variant-applicable dependencies
Shawn Walker <srw@sun.com>
parents: 1786
diff changeset
  2772
                excludes = self.list_excludes()
1549
cc81f5023603 13110 image catalog rebuild could be faster
Shawn Walker <srw@sun.com>
parents: 1538
diff changeset
  2773
                for pfx, cat, name, spart in sparts:
cc81f5023603 13110 image catalog rebuild could be faster
Shawn Walker <srw@sun.com>
parents: 1538
diff changeset
  2774
                        # 'spart' is the source part.
cc81f5023603 13110 image catalog rebuild could be faster
Shawn Walker <srw@sun.com>
parents: 1538
diff changeset
  2775
                        if spart is None:
cc81f5023603 13110 image catalog rebuild could be faster
Shawn Walker <srw@sun.com>
parents: 1538
diff changeset
  2776
                                # Client hasn't retrieved this part.
cc81f5023603 13110 image catalog rebuild could be faster
Shawn Walker <srw@sun.com>
parents: 1538
diff changeset
  2777
                                continue
cc81f5023603 13110 image catalog rebuild could be faster
Shawn Walker <srw@sun.com>
parents: 1538
diff changeset
  2778
cc81f5023603 13110 image catalog rebuild could be faster
Shawn Walker <srw@sun.com>
parents: 1538
diff changeset
  2779
                        # New known part.
cc81f5023603 13110 image catalog rebuild could be faster
Shawn Walker <srw@sun.com>
parents: 1538
diff changeset
  2780
                        nkpart = kcat.get_part(name)
1678
825ec1d3702e 14013 image catalog rebuild can stumble on v0 to v1 repo transition
Shawn Walker <srw@sun.com>
parents: 1672
diff changeset
  2781
                        nipart = icat.get_part(name)
1549
cc81f5023603 13110 image catalog rebuild could be faster
Shawn Walker <srw@sun.com>
parents: 1538
diff changeset
  2782
                        base = name.startswith("catalog.base.")
cc81f5023603 13110 image catalog rebuild could be faster
Shawn Walker <srw@sun.com>
parents: 1538
diff changeset
  2783
1970
60471574c487 16238 client api should ignore invalid and not yet supported packages
Shawn Walker <shawn.walker@oracle.com>
parents: 1895
diff changeset
  2784
                        # Avoid accessor overhead since these will be
1549
cc81f5023603 13110 image catalog rebuild could be faster
Shawn Walker <srw@sun.com>
parents: 1538
diff changeset
  2785
                        # used for every entry.
cc81f5023603 13110 image catalog rebuild could be faster
Shawn Walker <srw@sun.com>
parents: 1538
diff changeset
  2786
                        cat_ver = cat.version
1970
60471574c487 16238 client api should ignore invalid and not yet supported packages
Shawn Walker <shawn.walker@oracle.com>
parents: 1895
diff changeset
  2787
                        dp = cat.get_part("catalog.dependency.C",
60471574c487 16238 client api should ignore invalid and not yet supported packages
Shawn Walker <shawn.walker@oracle.com>
parents: 1895
diff changeset
  2788
                            must_exist=True)
1549
cc81f5023603 13110 image catalog rebuild could be faster
Shawn Walker <srw@sun.com>
parents: 1538
diff changeset
  2789
cc81f5023603 13110 image catalog rebuild could be faster
Shawn Walker <srw@sun.com>
parents: 1538
diff changeset
  2790
                        for t, sentry in spart.tuple_entries(pubs=[pfx]):
cc81f5023603 13110 image catalog rebuild could be faster
Shawn Walker <srw@sun.com>
parents: 1538
diff changeset
  2791
                                pub, stem, ver = t
cc81f5023603 13110 image catalog rebuild could be faster
Shawn Walker <srw@sun.com>
parents: 1538
diff changeset
  2792
1678
825ec1d3702e 14013 image catalog rebuild can stumble on v0 to v1 repo transition
Shawn Walker <srw@sun.com>
parents: 1672
diff changeset
  2793
                                installed = False
825ec1d3702e 14013 image catalog rebuild can stumble on v0 to v1 repo transition
Shawn Walker <srw@sun.com>
parents: 1672
diff changeset
  2794
                                if pub in inst_stems and \
825ec1d3702e 14013 image catalog rebuild can stumble on v0 to v1 repo transition
Shawn Walker <srw@sun.com>
parents: 1672
diff changeset
  2795
                                    stem in inst_stems[pub] and \
825ec1d3702e 14013 image catalog rebuild can stumble on v0 to v1 repo transition
Shawn Walker <srw@sun.com>
parents: 1672
diff changeset
  2796
                                    ver in inst_stems[pub][stem]:
825ec1d3702e 14013 image catalog rebuild can stumble on v0 to v1 repo transition
Shawn Walker <srw@sun.com>
parents: 1672
diff changeset
  2797
                                        installed = True
825ec1d3702e 14013 image catalog rebuild can stumble on v0 to v1 repo transition
Shawn Walker <srw@sun.com>
parents: 1672
diff changeset
  2798
                                        inst_stems[pub][stem][ver] = True
825ec1d3702e 14013 image catalog rebuild can stumble on v0 to v1 repo transition
Shawn Walker <srw@sun.com>
parents: 1672
diff changeset
  2799
1549
cc81f5023603 13110 image catalog rebuild could be faster
Shawn Walker <srw@sun.com>
parents: 1538
diff changeset
  2800
                                # copy() is too slow here and catalog entries
cc81f5023603 13110 image catalog rebuild could be faster
Shawn Walker <srw@sun.com>
parents: 1538
diff changeset
  2801
                                # are shallow so this should be sufficient.
1710
139720e2e756 1668 image locking needed to prevent race conditions
Shawn Walker <srw@sun.com>
parents: 1688
diff changeset
  2802
                                entry = dict(sentry.iteritems())
1549
cc81f5023603 13110 image catalog rebuild could be faster
Shawn Walker <srw@sun.com>
parents: 1538
diff changeset
  2803
                                if not base:
cc81f5023603 13110 image catalog rebuild could be faster
Shawn Walker <srw@sun.com>
parents: 1538
diff changeset
  2804
                                        # Nothing else to do except add the
cc81f5023603 13110 image catalog rebuild could be faster
Shawn Walker <srw@sun.com>
parents: 1538
diff changeset
  2805
                                        # entry for non-base catalog parts.
cc81f5023603 13110 image catalog rebuild could be faster
Shawn Walker <srw@sun.com>
parents: 1538
diff changeset
  2806
                                        nkpart.add(metadata=entry,
cc81f5023603 13110 image catalog rebuild could be faster
Shawn Walker <srw@sun.com>
parents: 1538
diff changeset
  2807
                                            op_time=op_time, pub=pub, stem=stem,
cc81f5023603 13110 image catalog rebuild could be faster
Shawn Walker <srw@sun.com>
parents: 1538
diff changeset
  2808
                                            ver=ver)
1678
825ec1d3702e 14013 image catalog rebuild can stumble on v0 to v1 repo transition
Shawn Walker <srw@sun.com>
parents: 1672
diff changeset
  2809
                                        if installed:
825ec1d3702e 14013 image catalog rebuild can stumble on v0 to v1 repo transition
Shawn Walker <srw@sun.com>
parents: 1672
diff changeset
  2810
                                                nipart.add(metadata=entry,
825ec1d3702e 14013 image catalog rebuild can stumble on v0 to v1 repo transition
Shawn Walker <srw@sun.com>
parents: 1672
diff changeset
  2811
                                                    op_time=op_time, pub=pub,
825ec1d3702e 14013 image catalog rebuild can stumble on v0 to v1 repo transition
Shawn Walker <srw@sun.com>
parents: 1672
diff changeset
  2812
                                                    stem=stem, ver=ver)
1549
cc81f5023603 13110 image catalog rebuild could be faster
Shawn Walker <srw@sun.com>
parents: 1538
diff changeset
  2813
                                        continue
cc81f5023603 13110 image catalog rebuild could be faster
Shawn Walker <srw@sun.com>
parents: 1538
diff changeset
  2814
cc81f5023603 13110 image catalog rebuild could be faster
Shawn Walker <srw@sun.com>
parents: 1538
diff changeset
  2815
                                # Only the base catalog part stores package
cc81f5023603 13110 image catalog rebuild could be faster
Shawn Walker <srw@sun.com>
parents: 1538
diff changeset
  2816
                                # state information and/or other metadata.
2352
3c17f86cd994 18105 api should support multiple repositories (origins) with different package data
Shawn Walker <shawn.walker@oracle.com>
parents: 2350
diff changeset
  2817
                                mdata = entry.setdefault("metadata", {})
3c17f86cd994 18105 api should support multiple repositories (origins) with different package data
Shawn Walker <shawn.walker@oracle.com>
parents: 2350
diff changeset
  2818
                                states = mdata.setdefault("states", [])
3c17f86cd994 18105 api should support multiple repositories (origins) with different package data
Shawn Walker <shawn.walker@oracle.com>
parents: 2350
diff changeset
  2819
                                states.append(self.PKG_STATE_KNOWN)
3c17f86cd994 18105 api should support multiple repositories (origins) with different package data
Shawn Walker <shawn.walker@oracle.com>
parents: 2350
diff changeset
  2820
1549
cc81f5023603 13110 image catalog rebuild could be faster
Shawn Walker <srw@sun.com>
parents: 1538
diff changeset
  2821
                                if cat_ver == 0:
cc81f5023603 13110 image catalog rebuild could be faster
Shawn Walker <srw@sun.com>
parents: 1538
diff changeset
  2822
                                        states.append(self.PKG_STATE_V0)
2352
3c17f86cd994 18105 api should support multiple repositories (origins) with different package data
Shawn Walker <shawn.walker@oracle.com>
parents: 2350
diff changeset
  2823
                                elif self.PKG_STATE_V0 not in states:
1549
cc81f5023603 13110 image catalog rebuild could be faster
Shawn Walker <srw@sun.com>
parents: 1538
diff changeset
  2824
                                        # Assume V1 catalog source.
cc81f5023603 13110 image catalog rebuild could be faster
Shawn Walker <srw@sun.com>
parents: 1538
diff changeset
  2825
                                        states.append(self.PKG_STATE_V1)
cc81f5023603 13110 image catalog rebuild could be faster
Shawn Walker <srw@sun.com>
parents: 1538
diff changeset
  2826
1678
825ec1d3702e 14013 image catalog rebuild can stumble on v0 to v1 repo transition
Shawn Walker <srw@sun.com>
parents: 1672
diff changeset
  2827
                                if installed:
825ec1d3702e 14013 image catalog rebuild can stumble on v0 to v1 repo transition
Shawn Walker <srw@sun.com>
parents: 1672
diff changeset
  2828
                                        states.append(self.PKG_STATE_INSTALLED)
825ec1d3702e 14013 image catalog rebuild can stumble on v0 to v1 repo transition
Shawn Walker <srw@sun.com>
parents: 1672
diff changeset
  2829
1549
cc81f5023603 13110 image catalog rebuild could be faster
Shawn Walker <srw@sun.com>
parents: 1538
diff changeset
  2830
                                nver, snver = newest.get(stem, (None, None))
cc81f5023603 13110 image catalog rebuild could be faster
Shawn Walker <srw@sun.com>
parents: 1538
diff changeset
  2831
                                if snver is not None and ver != snver:
cc81f5023603 13110 image catalog rebuild could be faster
Shawn Walker <srw@sun.com>
parents: 1538
diff changeset
  2832
                                        states.append(self.PKG_STATE_UPGRADABLE)
cc81f5023603 13110 image catalog rebuild could be faster
Shawn Walker <srw@sun.com>
parents: 1538
diff changeset
  2833
cc81f5023603 13110 image catalog rebuild could be faster
Shawn Walker <srw@sun.com>
parents: 1538
diff changeset
  2834
                                # Determine if package is obsolete or has been
cc81f5023603 13110 image catalog rebuild could be faster
Shawn Walker <srw@sun.com>
parents: 1538
diff changeset
  2835
                                # renamed and mark with appropriate state.
cc81f5023603 13110 image catalog rebuild could be faster
Shawn Walker <srw@sun.com>
parents: 1538
diff changeset
  2836
                                dpent = None
cc81f5023603 13110 image catalog rebuild could be faster
Shawn Walker <srw@sun.com>
parents: 1538
diff changeset
  2837
                                if dp is not None:
cc81f5023603 13110 image catalog rebuild could be faster
Shawn Walker <srw@sun.com>
parents: 1538
diff changeset
  2838
                                        dpent = dp.get_entry(pub=pub, stem=stem,
cc81f5023603 13110 image catalog rebuild could be faster
Shawn Walker <srw@sun.com>
parents: 1538
diff changeset
  2839
                                            ver=ver)
cc81f5023603 13110 image catalog rebuild could be faster
Shawn Walker <srw@sun.com>
parents: 1538
diff changeset
  2840
                                if dpent is not None:
cc81f5023603 13110 image catalog rebuild could be faster
Shawn Walker <srw@sun.com>
parents: 1538
diff changeset
  2841
                                        for a in dpent["actions"]:
1801
09b5c1ddef24 14832 pkg info traceback for renamed packages with no variant-applicable dependencies
Shawn Walker <srw@sun.com>
parents: 1786
diff changeset
  2842
                                                # Constructing action objects
09b5c1ddef24 14832 pkg info traceback for renamed packages with no variant-applicable dependencies
Shawn Walker <srw@sun.com>
parents: 1786
diff changeset
  2843
                                                # for every action would be a
09b5c1ddef24 14832 pkg info traceback for renamed packages with no variant-applicable dependencies
Shawn Walker <srw@sun.com>
parents: 1786
diff changeset
  2844
                                                # lot slower, so a simple string
09b5c1ddef24 14832 pkg info traceback for renamed packages with no variant-applicable dependencies
Shawn Walker <srw@sun.com>
parents: 1786
diff changeset
  2845
                                                # match is done first so that
09b5c1ddef24 14832 pkg info traceback for renamed packages with no variant-applicable dependencies
Shawn Walker <srw@sun.com>
parents: 1786
diff changeset
  2846
                                                # only interesting actions get
09b5c1ddef24 14832 pkg info traceback for renamed packages with no variant-applicable dependencies
Shawn Walker <srw@sun.com>
parents: 1786
diff changeset
  2847
                                                # constructed.
1549
cc81f5023603 13110 image catalog rebuild could be faster
Shawn Walker <srw@sun.com>
parents: 1538
diff changeset
  2848
                                                if not a.startswith("set"):
cc81f5023603 13110 image catalog rebuild could be faster
Shawn Walker <srw@sun.com>
parents: 1538
diff changeset
  2849
                                                        continue
1801
09b5c1ddef24 14832 pkg info traceback for renamed packages with no variant-applicable dependencies
Shawn Walker <srw@sun.com>
parents: 1786
diff changeset
  2850
                                                if not ("pkg.obsolete" in a or \
09b5c1ddef24 14832 pkg info traceback for renamed packages with no variant-applicable dependencies
Shawn Walker <srw@sun.com>
parents: 1786
diff changeset
  2851
                                                    "pkg.renamed" in a):
09b5c1ddef24 14832 pkg info traceback for renamed packages with no variant-applicable dependencies
Shawn Walker <srw@sun.com>
parents: 1786
diff changeset
  2852
                                                        continue
09b5c1ddef24 14832 pkg info traceback for renamed packages with no variant-applicable dependencies
Shawn Walker <srw@sun.com>
parents: 1786
diff changeset
  2853
1970
60471574c487 16238 client api should ignore invalid and not yet supported packages
Shawn Walker <shawn.walker@oracle.com>
parents: 1895
diff changeset
  2854
                                                try:
60471574c487 16238 client api should ignore invalid and not yet supported packages
Shawn Walker <shawn.walker@oracle.com>
parents: 1895
diff changeset
  2855
                                                        act = pkg.actions.fromstr(a)
60471574c487 16238 client api should ignore invalid and not yet supported packages
Shawn Walker <shawn.walker@oracle.com>
parents: 1895
diff changeset
  2856
                                                except pkg.actions.ActionError:
60471574c487 16238 client api should ignore invalid and not yet supported packages
Shawn Walker <shawn.walker@oracle.com>
parents: 1895
diff changeset
  2857
                                                        # If the action can't be
60471574c487 16238 client api should ignore invalid and not yet supported packages
Shawn Walker <shawn.walker@oracle.com>
parents: 1895
diff changeset
  2858
                                                        # parsed or is not yet
60471574c487 16238 client api should ignore invalid and not yet supported packages
Shawn Walker <shawn.walker@oracle.com>
parents: 1895
diff changeset
  2859
                                                        # supported, continue.
60471574c487 16238 client api should ignore invalid and not yet supported packages
Shawn Walker <shawn.walker@oracle.com>
parents: 1895
diff changeset
  2860
                                                        continue
60471574c487 16238 client api should ignore invalid and not yet supported packages
Shawn Walker <shawn.walker@oracle.com>
parents: 1895
diff changeset
  2861
1801
09b5c1ddef24 14832 pkg info traceback for renamed packages with no variant-applicable dependencies
Shawn Walker <srw@sun.com>
parents: 1786
diff changeset
  2862
                                                if act.attrs["value"].lower() != "true":
09b5c1ddef24 14832 pkg info traceback for renamed packages with no variant-applicable dependencies
Shawn Walker <srw@sun.com>
parents: 1786
diff changeset
  2863
                                                        continue
09b5c1ddef24 14832 pkg info traceback for renamed packages with no variant-applicable dependencies
Shawn Walker <srw@sun.com>
parents: 1786
diff changeset
  2864
09b5c1ddef24 14832 pkg info traceback for renamed packages with no variant-applicable dependencies
Shawn Walker <srw@sun.com>
parents: 1786
diff changeset
  2865
                                                if act.attrs["name"] == "pkg.obsolete":
1549
cc81f5023603 13110 image catalog rebuild could be faster
Shawn Walker <srw@sun.com>
parents: 1538
diff changeset
  2866
                                                        states.append(
cc81f5023603 13110 image catalog rebuild could be faster
Shawn Walker <srw@sun.com>
parents: 1538
diff changeset
  2867
                                                            self.PKG_STATE_OBSOLETE)
1801
09b5c1ddef24 14832 pkg info traceback for renamed packages with no variant-applicable dependencies
Shawn Walker <srw@sun.com>
parents: 1786
diff changeset
  2868
                                                elif act.attrs["name"] == "pkg.renamed":
09b5c1ddef24 14832 pkg info traceback for renamed packages with no variant-applicable dependencies
Shawn Walker <srw@sun.com>
parents: 1786
diff changeset
  2869
                                                        if not act.include_this(
09b5c1ddef24 14832 pkg info traceback for renamed packages with no variant-applicable dependencies
Shawn Walker <srw@sun.com>
parents: 1786
diff changeset
  2870
                                                            excludes):
1549
cc81f5023603 13110 image catalog rebuild could be faster
Shawn Walker <srw@sun.com>
parents: 1538
diff changeset
  2871
                                                                continue
cc81f5023603 13110 image catalog rebuild could be faster
Shawn Walker <srw@sun.com>
parents: 1538
diff changeset
  2872
                                                        states.append(
cc81f5023603 13110 image catalog rebuild could be faster
Shawn Walker <srw@sun.com>
parents: 1538
diff changeset
  2873
                                                            self.PKG_STATE_RENAMED)
1801
09b5c1ddef24 14832 pkg info traceback for renamed packages with no variant-applicable dependencies
Shawn Walker <srw@sun.com>
parents: 1786
diff changeset
  2874
1549
cc81f5023603 13110 image catalog rebuild could be faster
Shawn Walker <srw@sun.com>
parents: 1538
diff changeset
  2875
                                mdata["states"] = states
cc81f5023603 13110 image catalog rebuild could be faster
Shawn Walker <srw@sun.com>
parents: 1538
diff changeset
  2876
1678
825ec1d3702e 14013 image catalog rebuild can stumble on v0 to v1 repo transition
Shawn Walker <srw@sun.com>
parents: 1672
diff changeset
  2877
                                # Add base entries.
1549
cc81f5023603 13110 image catalog rebuild could be faster
Shawn Walker <srw@sun.com>
parents: 1538
diff changeset
  2878
                                nkpart.add(metadata=entry, op_time=op_time,
cc81f5023603 13110 image catalog rebuild could be faster
Shawn Walker <srw@sun.com>
parents: 1538
diff changeset
  2879
                                    pub=pub, stem=stem, ver=ver)
1678
825ec1d3702e 14013 image catalog rebuild can stumble on v0 to v1 repo transition
Shawn Walker <srw@sun.com>
parents: 1672
diff changeset
  2880
                                if installed:
825ec1d3702e 14013 image catalog rebuild can stumble on v0 to v1 repo transition
Shawn Walker <srw@sun.com>
parents: 1672
diff changeset
  2881
                                        nipart.add(metadata=entry,
825ec1d3702e 14013 image catalog rebuild can stumble on v0 to v1 repo transition
Shawn Walker <srw@sun.com>
parents: 1672
diff changeset
  2882
                                            op_time=op_time, pub=pub, stem=stem,
825ec1d3702e 14013 image catalog rebuild can stumble on v0 to v1 repo transition
Shawn Walker <srw@sun.com>
parents: 1672
diff changeset
  2883
                                            ver=ver)
1549
cc81f5023603 13110 image catalog rebuild could be faster
Shawn Walker <srw@sun.com>
parents: 1538
diff changeset
  2884
cc81f5023603 13110 image catalog rebuild could be faster
Shawn Walker <srw@sun.com>
parents: 1538
diff changeset
  2885
                # Now add installed packages to list of known packages using
cc81f5023603 13110 image catalog rebuild could be faster
Shawn Walker <srw@sun.com>
parents: 1538
diff changeset
  2886
                # previous state information.  While doing so, track any
cc81f5023603 13110 image catalog rebuild could be faster
Shawn Walker <srw@sun.com>
parents: 1538
diff changeset
  2887
                # new entries as the versions for the stem of the entry will
cc81f5023603 13110 image catalog rebuild could be faster
Shawn Walker <srw@sun.com>
parents: 1538
diff changeset
  2888
                # need to be passed to finalize() for sorting.
cc81f5023603 13110 image catalog rebuild could be faster
Shawn Walker <srw@sun.com>
parents: 1538
diff changeset
  2889
                final_fmris = []
cc81f5023603 13110 image catalog rebuild could be faster
Shawn Walker <srw@sun.com>
parents: 1538
diff changeset
  2890
                for name in old_icat.parts:
cc81f5023603 13110 image catalog rebuild could be faster
Shawn Walker <srw@sun.com>
parents: 1538
diff changeset
  2891
                        # Old installed part.
cc81f5023603 13110 image catalog rebuild could be faster
Shawn Walker <srw@sun.com>
parents: 1538
diff changeset
  2892
                        ipart = old_icat.get_part(name, must_exist=True)
cc81f5023603 13110 image catalog rebuild could be faster
Shawn Walker <srw@sun.com>
parents: 1538
diff changeset
  2893
cc81f5023603 13110 image catalog rebuild could be faster
Shawn Walker <srw@sun.com>
parents: 1538
diff changeset
  2894
                        # New known part.
cc81f5023603 13110 image catalog rebuild could be faster
Shawn Walker <srw@sun.com>
parents: 1538
diff changeset
  2895
                        nkpart = kcat.get_part(name)
cc81f5023603 13110 image catalog rebuild could be faster
Shawn Walker <srw@sun.com>
parents: 1538
diff changeset
  2896
cc81f5023603 13110 image catalog rebuild could be faster
Shawn Walker <srw@sun.com>
parents: 1538
diff changeset
  2897
                        # New installed part.
cc81f5023603 13110 image catalog rebuild could be faster
Shawn Walker <srw@sun.com>
parents: 1538
diff changeset
  2898
                        nipart = icat.get_part(name)
cc81f5023603 13110 image catalog rebuild could be faster
Shawn Walker <srw@sun.com>
parents: 1538
diff changeset
  2899
cc81f5023603 13110 image catalog rebuild could be faster
Shawn Walker <srw@sun.com>
parents: 1538
diff changeset
  2900
                        base = name.startswith("catalog.base.")
cc81f5023603 13110 image catalog rebuild could be faster
Shawn Walker <srw@sun.com>
parents: 1538
diff changeset
  2901
cc81f5023603 13110 image catalog rebuild could be faster
Shawn Walker <srw@sun.com>
parents: 1538
diff changeset
  2902
                        mdata = None
cc81f5023603 13110 image catalog rebuild could be faster
Shawn Walker <srw@sun.com>
parents: 1538
diff changeset
  2903
                        for t, entry in ipart.tuple_entries():
cc81f5023603 13110 image catalog rebuild could be faster
Shawn Walker <srw@sun.com>
parents: 1538
diff changeset
  2904
                                pub, stem, ver = t
cc81f5023603 13110 image catalog rebuild could be faster
Shawn Walker <srw@sun.com>
parents: 1538
diff changeset
  2905
1678
825ec1d3702e 14013 image catalog rebuild can stumble on v0 to v1 repo transition
Shawn Walker <srw@sun.com>
parents: 1672
diff changeset
  2906
                                if pub not in inst_stems or \
825ec1d3702e 14013 image catalog rebuild can stumble on v0 to v1 repo transition
Shawn Walker <srw@sun.com>
parents: 1672
diff changeset
  2907
                                    stem not in inst_stems[pub] or \
825ec1d3702e 14013 image catalog rebuild can stumble on v0 to v1 repo transition
Shawn Walker <srw@sun.com>
parents: 1672
diff changeset
  2908
                                    ver not in inst_stems[pub][stem] or \
825ec1d3702e 14013 image catalog rebuild can stumble on v0 to v1 repo transition
Shawn Walker <srw@sun.com>
parents: 1672
diff changeset
  2909
                                    inst_stems[pub][stem][ver]:
825ec1d3702e 14013 image catalog rebuild can stumble on v0 to v1 repo transition
Shawn Walker <srw@sun.com>
parents: 1672
diff changeset
  2910
                                        # Entry is no longer valid or is already
825ec1d3702e 14013 image catalog rebuild can stumble on v0 to v1 repo transition
Shawn Walker <srw@sun.com>
parents: 1672
diff changeset
  2911
                                        # known.
825ec1d3702e 14013 image catalog rebuild can stumble on v0 to v1 repo transition
Shawn Walker <srw@sun.com>
parents: 1672
diff changeset
  2912
                                        continue
825ec1d3702e 14013 image catalog rebuild can stumble on v0 to v1 repo transition
Shawn Walker <srw@sun.com>
parents: 1672
diff changeset
  2913
1549
cc81f5023603 13110 image catalog rebuild could be faster
Shawn Walker <srw@sun.com>
parents: 1538
diff changeset
  2914
                                if base:
cc81f5023603 13110 image catalog rebuild could be faster
Shawn Walker <srw@sun.com>
parents: 1538
diff changeset
  2915
                                        mdata = entry["metadata"]
cc81f5023603 13110 image catalog rebuild could be faster
Shawn Walker <srw@sun.com>
parents: 1538
diff changeset
  2916
                                        states = set(mdata["states"])
cc81f5023603 13110 image catalog rebuild could be faster
Shawn Walker <srw@sun.com>
parents: 1538
diff changeset
  2917
                                        states.discard(self.PKG_STATE_KNOWN)
cc81f5023603 13110 image catalog rebuild could be faster
Shawn Walker <srw@sun.com>
parents: 1538
diff changeset
  2918
cc81f5023603 13110 image catalog rebuild could be faster
Shawn Walker <srw@sun.com>
parents: 1538
diff changeset
  2919
                                        nver, snver = newest.get(stem, (None,
cc81f5023603 13110 image catalog rebuild could be faster
Shawn Walker <srw@sun.com>
parents: 1538
diff changeset
  2920
                                            None))
cc81f5023603 13110 image catalog rebuild could be faster
Shawn Walker <srw@sun.com>
parents: 1538
diff changeset
  2921
                                        if snver is not None and ver == snver:
cc81f5023603 13110 image catalog rebuild could be faster
Shawn Walker <srw@sun.com>
parents: 1538
diff changeset
  2922
                                                states.discard(
cc81f5023603 13110 image catalog rebuild could be faster
Shawn Walker <srw@sun.com>
parents: 1538
diff changeset
  2923
                                                    self.PKG_STATE_UPGRADABLE)
cc81f5023603 13110 image catalog rebuild could be faster
Shawn Walker <srw@sun.com>
parents: 1538
diff changeset
  2924
                                        elif snver is not None:
cc81f5023603 13110 image catalog rebuild could be faster
Shawn Walker <srw@sun.com>
parents: 1538
diff changeset
  2925
                                                states.add(
cc81f5023603 13110 image catalog rebuild could be faster
Shawn Walker <srw@sun.com>
parents: 1538
diff changeset
  2926
                                                    self.PKG_STATE_UPGRADABLE)
cc81f5023603 13110 image catalog rebuild could be faster
Shawn Walker <srw@sun.com>
parents: 1538
diff changeset
  2927
                                        mdata["states"] = list(states)
cc81f5023603 13110 image catalog rebuild could be faster
Shawn Walker <srw@sun.com>
parents: 1538
diff changeset
  2928
1678
825ec1d3702e 14013 image catalog rebuild can stumble on v0 to v1 repo transition
Shawn Walker <srw@sun.com>
parents: 1672
diff changeset
  2929
                                # Add entries.
825ec1d3702e 14013 image catalog rebuild can stumble on v0 to v1 repo transition
Shawn Walker <srw@sun.com>
parents: 1672
diff changeset
  2930
                                nkpart.add(metadata=entry, op_time=op_time,
825ec1d3702e 14013 image catalog rebuild can stumble on v0 to v1 repo transition
Shawn Walker <srw@sun.com>
parents: 1672
diff changeset
  2931
                                    pub=pub, stem=stem, ver=ver)
825ec1d3702e 14013 image catalog rebuild can stumble on v0 to v1 repo transition
Shawn Walker <srw@sun.com>
parents: 1672
diff changeset
  2932
                                nipart.add(metadata=entry, op_time=op_time,
1549
cc81f5023603 13110 image catalog rebuild could be faster
Shawn Walker <srw@sun.com>
parents: 1538
diff changeset
  2933
                                    pub=pub, stem=stem, ver=ver)
cc81f5023603 13110 image catalog rebuild could be faster
Shawn Walker <srw@sun.com>
parents: 1538
diff changeset
  2934
                                final_fmris.append(pkg.fmri.PkgFmri(
cc81f5023603 13110 image catalog rebuild could be faster
Shawn Walker <srw@sun.com>
parents: 1538
diff changeset
  2935
                                    "%s@%s" % (stem, ver), publisher=pub))
1352
5c92c9d342ef 11065 client v1 catalog support for v0 catalogs
Shawn Walker <srw@sun.com>
parents: 1328
diff changeset
  2936
1402
c0fb578f911a 11384 cascading failure hides exception during image creation
Shawn Walker <srw@sun.com>
parents: 1370
diff changeset
  2937
                # Save the new catalogs.
1352
5c92c9d342ef 11065 client v1 catalog support for v0 catalogs
Shawn Walker <srw@sun.com>
parents: 1328
diff changeset
  2938
                for cat in kcat, icat:
2144
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  2939
                        misc.makedirs(cat.meta_root)
1549
cc81f5023603 13110 image catalog rebuild could be faster
Shawn Walker <srw@sun.com>
parents: 1538
diff changeset
  2940
                        cat.finalize(pfmris=final_fmris)
1352
5c92c9d342ef 11065 client v1 catalog support for v0 catalogs
Shawn Walker <srw@sun.com>
parents: 1328
diff changeset
  2941
                        cat.save()
1402
c0fb578f911a 11384 cascading failure hides exception during image creation
Shawn Walker <srw@sun.com>
parents: 1370
diff changeset
  2942
c0fb578f911a 11384 cascading failure hides exception during image creation
Shawn Walker <srw@sun.com>
parents: 1370
diff changeset
  2943
                # Next, preserve the old installed state dir, rename the
c0fb578f911a 11384 cascading failure hides exception during image creation
Shawn Walker <srw@sun.com>
parents: 1370
diff changeset
  2944
                # new one into place, and then remove the old one.
2293
631000734928 3679 modified preserve=true files should be backed up during uninstall
Shawn Walker <shawn.walker@oracle.com>
parents: 2286
diff changeset
  2945
                orig_state_root, ignored = self.salvage(self._statedir)
2073
9fcacc9e5eaa 16998 transport should support publisher-specific write and read caches
Shawn Walker <shawn.walker@oracle.com>
parents: 2069
diff changeset
  2946
                portable.rename(tmp_state_root, self._statedir)
1402
c0fb578f911a 11384 cascading failure hides exception during image creation
Shawn Walker <srw@sun.com>
parents: 1370
diff changeset
  2947
                shutil.rmtree(orig_state_root, True)
c0fb578f911a 11384 cascading failure hides exception during image creation
Shawn Walker <srw@sun.com>
parents: 1370
diff changeset
  2948
c0fb578f911a 11384 cascading failure hides exception during image creation
Shawn Walker <srw@sun.com>
parents: 1370
diff changeset
  2949
                # Ensure in-memory catalogs get reloaded.
1463
0ef25025d601 12340 catalog storage performance regression
Shawn Walker <srw@sun.com>
parents: 1461
diff changeset
  2950
                self.__init_catalogs()
1402
c0fb578f911a 11384 cascading failure hides exception during image creation
Shawn Walker <srw@sun.com>
parents: 1370
diff changeset
  2951
1352
5c92c9d342ef 11065 client v1 catalog support for v0 catalogs
Shawn Walker <srw@sun.com>
parents: 1328
diff changeset
  2952
                progtrack.cache_catalogs_done()
1402
c0fb578f911a 11384 cascading failure hides exception during image creation
Shawn Walker <srw@sun.com>
parents: 1370
diff changeset
  2953
                self.history.log_operation_end()
1352
5c92c9d342ef 11065 client v1 catalog support for v0 catalogs
Shawn Walker <srw@sun.com>
parents: 1328
diff changeset
  2954
996
31d152a5212b 7582 pkg set-publisher --no-refresh will delete catalogs
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 993
diff changeset
  2955
        def refresh_publishers(self, full_refresh=False, immediate=False,
1352
5c92c9d342ef 11065 client v1 catalog support for v0 catalogs
Shawn Walker <srw@sun.com>
parents: 1328
diff changeset
  2956
            pubs=None, progtrack=None):
996
31d152a5212b 7582 pkg set-publisher --no-refresh will delete catalogs
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 993
diff changeset
  2957
                """Refreshes the metadata (e.g. catalog) for one or more
1710
139720e2e756 1668 image locking needed to prevent race conditions
Shawn Walker <srw@sun.com>
parents: 1688
diff changeset
  2958
                publishers.  Callers are responsible for locking the image.
996
31d152a5212b 7582 pkg set-publisher --no-refresh will delete catalogs
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 993
diff changeset
  2959
31d152a5212b 7582 pkg set-publisher --no-refresh will delete catalogs
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 993
diff changeset
  2960
                'full_refresh' is an optional boolean value indicating whether
31d152a5212b 7582 pkg set-publisher --no-refresh will delete catalogs
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 993
diff changeset
  2961
                a full retrieval of publisher metadata (e.g. catalogs) or only
31d152a5212b 7582 pkg set-publisher --no-refresh will delete catalogs
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 993
diff changeset
  2962
                an update to the existing metadata should be performed.  When
31d152a5212b 7582 pkg set-publisher --no-refresh will delete catalogs
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 993
diff changeset
  2963
                True, 'immediate' is also set to True.
31d152a5212b 7582 pkg set-publisher --no-refresh will delete catalogs
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 993
diff changeset
  2964
31d152a5212b 7582 pkg set-publisher --no-refresh will delete catalogs
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 993
diff changeset
  2965
                'immediate' is an optional boolean value indicating whether the
31d152a5212b 7582 pkg set-publisher --no-refresh will delete catalogs
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 993
diff changeset
  2966
                a refresh should occur now.  If False, a publisher's selected
31d152a5212b 7582 pkg set-publisher --no-refresh will delete catalogs
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 993
diff changeset
  2967
                repository will only be checked for updates if the update
31d152a5212b 7582 pkg set-publisher --no-refresh will delete catalogs
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 993
diff changeset
  2968
                interval period recorded in the image configuration has been
1352
5c92c9d342ef 11065 client v1 catalog support for v0 catalogs
Shawn Walker <srw@sun.com>
parents: 1328
diff changeset
  2969
                exceeded.
996
31d152a5212b 7582 pkg set-publisher --no-refresh will delete catalogs
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 993
diff changeset
  2970
31d152a5212b 7582 pkg set-publisher --no-refresh will delete catalogs
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 993
diff changeset
  2971
                'pubs' is a list of publisher prefixes or publisher objects
31d152a5212b 7582 pkg set-publisher --no-refresh will delete catalogs
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 993
diff changeset
  2972
                to refresh.  Passing an empty list or using the default value
1352
5c92c9d342ef 11065 client v1 catalog support for v0 catalogs
Shawn Walker <srw@sun.com>
parents: 1328
diff changeset
  2973
                implies all publishers."""
996
31d152a5212b 7582 pkg set-publisher --no-refresh will delete catalogs
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 993
diff changeset
  2974
2144
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  2975
                if self.version < 3:
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  2976
                        raise apx.ImageFormatUpdateNeeded(self.root)
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  2977
996
31d152a5212b 7582 pkg set-publisher --no-refresh will delete catalogs
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 993
diff changeset
  2978
                if not progtrack:
31d152a5212b 7582 pkg set-publisher --no-refresh will delete catalogs
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 993
diff changeset
  2979
                        progtrack = progress.QuietProgressTracker()
31d152a5212b 7582 pkg set-publisher --no-refresh will delete catalogs
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 993
diff changeset
  2980
2141
3757a0f8a7d1 17385 history should store uuids for boot environments
Tim Foster <tim.s.foster@oracle.com>
parents: 2135
diff changeset
  2981
                be_name, be_uuid = bootenv.BootEnv.get_be_name(self.root)
2135
6eeb55920e13 3419 history command -- ability to specify dates or date ranges desired
Tim Foster <tim.s.foster@oracle.com>
parents: 2105
diff changeset
  2982
                self.history.log_operation_start("refresh-publishers",
2141
3757a0f8a7d1 17385 history should store uuids for boot environments
Tim Foster <tim.s.foster@oracle.com>
parents: 2135
diff changeset
  2983
                    be_name=be_name, be_uuid=be_uuid)
996
31d152a5212b 7582 pkg set-publisher --no-refresh will delete catalogs
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 993
diff changeset
  2984
31d152a5212b 7582 pkg set-publisher --no-refresh will delete catalogs
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 993
diff changeset
  2985
                # Verify validity of certificates before attempting network
31d152a5212b 7582 pkg set-publisher --no-refresh will delete catalogs
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 993
diff changeset
  2986
                # operations.
31d152a5212b 7582 pkg set-publisher --no-refresh will delete catalogs
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 993
diff changeset
  2987
                try:
31d152a5212b 7582 pkg set-publisher --no-refresh will delete catalogs
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 993
diff changeset
  2988
                        self.check_cert_validity()
2073
9fcacc9e5eaa 16998 transport should support publisher-specific write and read caches
Shawn Walker <shawn.walker@oracle.com>
parents: 2069
diff changeset
  2989
                except apx.ExpiringCertificate, e:
1431
62b6033670e4 10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents: 1402
diff changeset
  2990
                        logger.error(str(e))
996
31d152a5212b 7582 pkg set-publisher --no-refresh will delete catalogs
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 993
diff changeset
  2991
31d152a5212b 7582 pkg set-publisher --no-refresh will delete catalogs
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 993
diff changeset
  2992
                pubs_to_refresh = []
31d152a5212b 7582 pkg set-publisher --no-refresh will delete catalogs
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 993
diff changeset
  2993
31d152a5212b 7582 pkg set-publisher --no-refresh will delete catalogs
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 993
diff changeset
  2994
                if not pubs:
31d152a5212b 7582 pkg set-publisher --no-refresh will delete catalogs
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 993
diff changeset
  2995
                        # Omit disabled publishers.
31d152a5212b 7582 pkg set-publisher --no-refresh will delete catalogs
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 993
diff changeset
  2996
                        pubs = [p for p in self.gen_publishers()]
2310
ce10607d5332 11684 desire option to not propagate certs to non-global zones
Brock Pytlik <brock.pytlik@oracle.com>
parents: 2293
diff changeset
  2997
ce10607d5332 11684 desire option to not propagate certs to non-global zones
Brock Pytlik <brock.pytlik@oracle.com>
parents: 2293
diff changeset
  2998
                if not pubs:
ce10607d5332 11684 desire option to not propagate certs to non-global zones
Brock Pytlik <brock.pytlik@oracle.com>
parents: 2293
diff changeset
  2999
                        self.__rebuild_image_catalogs(progtrack=progtrack)
ce10607d5332 11684 desire option to not propagate certs to non-global zones
Brock Pytlik <brock.pytlik@oracle.com>
parents: 2293
diff changeset
  3000
                        return
ce10607d5332 11684 desire option to not propagate certs to non-global zones
Brock Pytlik <brock.pytlik@oracle.com>
parents: 2293
diff changeset
  3001
996
31d152a5212b 7582 pkg set-publisher --no-refresh will delete catalogs
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 993
diff changeset
  3002
                for pub in pubs:
31d152a5212b 7582 pkg set-publisher --no-refresh will delete catalogs
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 993
diff changeset
  3003
                        p = pub
31d152a5212b 7582 pkg set-publisher --no-refresh will delete catalogs
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 993
diff changeset
  3004
                        if not isinstance(p, publisher.Publisher):
31d152a5212b 7582 pkg set-publisher --no-refresh will delete catalogs
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 993
diff changeset
  3005
                                p = self.get_publisher(prefix=p)
31d152a5212b 7582 pkg set-publisher --no-refresh will delete catalogs
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 993
diff changeset
  3006
                        if p.disabled:
2073
9fcacc9e5eaa 16998 transport should support publisher-specific write and read caches
Shawn Walker <shawn.walker@oracle.com>
parents: 2069
diff changeset
  3007
                                e = apx.DisabledPublisher(p)
996
31d152a5212b 7582 pkg set-publisher --no-refresh will delete catalogs
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 993
diff changeset
  3008
                                self.history.log_operation_end(error=e)
31d152a5212b 7582 pkg set-publisher --no-refresh will delete catalogs
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 993
diff changeset
  3009
                                raise e
1352
5c92c9d342ef 11065 client v1 catalog support for v0 catalogs
Shawn Walker <srw@sun.com>
parents: 1328
diff changeset
  3010
                        pubs_to_refresh.append(p)
996
31d152a5212b 7582 pkg set-publisher --no-refresh will delete catalogs
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 993
diff changeset
  3011
31d152a5212b 7582 pkg set-publisher --no-refresh will delete catalogs
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 993
diff changeset
  3012
                if not pubs_to_refresh:
2069
207f168361ba 10148 successful image operations with no effect should be elided from history
Shawn Walker <shawn.walker@oracle.com>
parents: 2055
diff changeset
  3013
                        self.history.log_operation_end(
207f168361ba 10148 successful image operations with no effect should be elided from history
Shawn Walker <shawn.walker@oracle.com>
parents: 2055
diff changeset
  3014
                            result=history.RESULT_NOTHING_TO_DO)
996
31d152a5212b 7582 pkg set-publisher --no-refresh will delete catalogs
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 993
diff changeset
  3015
                        return
31d152a5212b 7582 pkg set-publisher --no-refresh will delete catalogs
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 993
diff changeset
  3016
31d152a5212b 7582 pkg set-publisher --no-refresh will delete catalogs
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 993
diff changeset
  3017
                try:
31d152a5212b 7582 pkg set-publisher --no-refresh will delete catalogs
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 993
diff changeset
  3018
                        # Ensure Image directory structure is valid.
31d152a5212b 7582 pkg set-publisher --no-refresh will delete catalogs
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 993
diff changeset
  3019
                        self.mkdirs()
1352
5c92c9d342ef 11065 client v1 catalog support for v0 catalogs
Shawn Walker <srw@sun.com>
parents: 1328
diff changeset
  3020
                except Exception, e:
996
31d152a5212b 7582 pkg set-publisher --no-refresh will delete catalogs
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 993
diff changeset
  3021
                        self.history.log_operation_end(error=e)
31d152a5212b 7582 pkg set-publisher --no-refresh will delete catalogs
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 993
diff changeset
  3022
                        raise
31d152a5212b 7582 pkg set-publisher --no-refresh will delete catalogs
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 993
diff changeset
  3023
1352
5c92c9d342ef 11065 client v1 catalog support for v0 catalogs
Shawn Walker <srw@sun.com>
parents: 1328
diff changeset
  3024
                progtrack.refresh_start(len(pubs_to_refresh))
996
31d152a5212b 7582 pkg set-publisher --no-refresh will delete catalogs
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 993
diff changeset
  3025
1352
5c92c9d342ef 11065 client v1 catalog support for v0 catalogs
Shawn Walker <srw@sun.com>
parents: 1328
diff changeset
  3026
                failed = []
5c92c9d342ef 11065 client v1 catalog support for v0 catalogs
Shawn Walker <srw@sun.com>
parents: 1328
diff changeset
  3027
                total = 0
5c92c9d342ef 11065 client v1 catalog support for v0 catalogs
Shawn Walker <srw@sun.com>
parents: 1328
diff changeset
  3028
                succeeded = set()
996
31d152a5212b 7582 pkg set-publisher --no-refresh will delete catalogs
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 993
diff changeset
  3029
                updated = 0
1352
5c92c9d342ef 11065 client v1 catalog support for v0 catalogs
Shawn Walker <srw@sun.com>
parents: 1328
diff changeset
  3030
                for pub in pubs_to_refresh:
201
63e78f600aa7 185 traceback on pkg refresh when hostname lookup fails
Danek Duvall <danek.duvall@sun.com>
parents: 195
diff changeset
  3031
                        total += 1
996
31d152a5212b 7582 pkg set-publisher --no-refresh will delete catalogs
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 993
diff changeset
  3032
                        progtrack.refresh_progress(pub.prefix)
235
61994d15c39b 373 design a nice default output for install/update/remove
Dan Price <dp@eng.sun.com>
parents: 226
diff changeset
  3033
                        try:
1352
5c92c9d342ef 11065 client v1 catalog support for v0 catalogs
Shawn Walker <srw@sun.com>
parents: 1328
diff changeset
  3034
                                if pub.refresh(full_refresh=full_refresh,
5c92c9d342ef 11065 client v1 catalog support for v0 catalogs
Shawn Walker <srw@sun.com>
parents: 1328
diff changeset
  3035
                                    immediate=immediate):
996
31d152a5212b 7582 pkg set-publisher --no-refresh will delete catalogs
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 993
diff changeset
  3036
                                        updated += 1
2073
9fcacc9e5eaa 16998 transport should support publisher-specific write and read caches
Shawn Walker <shawn.walker@oracle.com>
parents: 2069
diff changeset
  3037
                        except apx.PermissionsException, e:
1538
78ac66abc186 12130 install/update operations should always refresh publisher metadata (when allowed)
Shawn Walker <srw@sun.com>
parents: 1537
diff changeset
  3038
                                failed.append((pub, e))
78ac66abc186 12130 install/update operations should always refresh publisher metadata (when allowed)
Shawn Walker <srw@sun.com>
parents: 1537
diff changeset
  3039
                                # No point in continuing since no data can
78ac66abc186 12130 install/update operations should always refresh publisher metadata (when allowed)
Shawn Walker <srw@sun.com>
parents: 1537
diff changeset
  3040
                                # be written.
78ac66abc186 12130 install/update operations should always refresh publisher metadata (when allowed)
Shawn Walker <srw@sun.com>
parents: 1537
diff changeset
  3041
                                break
2073
9fcacc9e5eaa 16998 transport should support publisher-specific write and read caches
Shawn Walker <shawn.walker@oracle.com>
parents: 2069
diff changeset
  3042
                        except apx.ApiException, e:
1352
5c92c9d342ef 11065 client v1 catalog support for v0 catalogs
Shawn Walker <srw@sun.com>
parents: 1328
diff changeset
  3043
                                failed.append((pub, e))
5c92c9d342ef 11065 client v1 catalog support for v0 catalogs
Shawn Walker <srw@sun.com>
parents: 1328
diff changeset
  3044
                                continue
5c92c9d342ef 11065 client v1 catalog support for v0 catalogs
Shawn Walker <srw@sun.com>
parents: 1328
diff changeset
  3045
                        succeeded.add(pub.prefix)
996
31d152a5212b 7582 pkg set-publisher --no-refresh will delete catalogs
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 993
diff changeset
  3046
                progtrack.refresh_done()
625
e46b345645d6 3799 need to start progress tracker going early on
Brock Pytlik <bpytlik@sun.com>
parents: 621
diff changeset
  3047
1352
5c92c9d342ef 11065 client v1 catalog support for v0 catalogs
Shawn Walker <srw@sun.com>
parents: 1328
diff changeset
  3048
                if updated:
5c92c9d342ef 11065 client v1 catalog support for v0 catalogs
Shawn Walker <srw@sun.com>
parents: 1328
diff changeset
  3049
                        self.__rebuild_image_catalogs(progtrack=progtrack)
5c92c9d342ef 11065 client v1 catalog support for v0 catalogs
Shawn Walker <srw@sun.com>
parents: 1328
diff changeset
  3050
201
63e78f600aa7 185 traceback on pkg refresh when hostname lookup fails
Danek Duvall <danek.duvall@sun.com>
parents: 195
diff changeset
  3051
                if failed:
2073
9fcacc9e5eaa 16998 transport should support publisher-specific write and read caches
Shawn Walker <shawn.walker@oracle.com>
parents: 2069
diff changeset
  3052
                        e = apx.CatalogRefreshException(failed, total,
1352
5c92c9d342ef 11065 client v1 catalog support for v0 catalogs
Shawn Walker <srw@sun.com>
parents: 1328
diff changeset
  3053
                            len(succeeded))
5c92c9d342ef 11065 client v1 catalog support for v0 catalogs
Shawn Walker <srw@sun.com>
parents: 1328
diff changeset
  3054
                        self.history.log_operation_end(error=e)
1435
f65591874aef 12221 client traceback if refresh fails due to exception
Shawn Walker <srw@sun.com>
parents: 1431
diff changeset
  3055
                        raise e
2069
207f168361ba 10148 successful image operations with no effect should be elided from history
Shawn Walker <shawn.walker@oracle.com>
parents: 2055
diff changeset
  3056
207f168361ba 10148 successful image operations with no effect should be elided from history
Shawn Walker <shawn.walker@oracle.com>
parents: 2055
diff changeset
  3057
                if not updated:
207f168361ba 10148 successful image operations with no effect should be elided from history
Shawn Walker <shawn.walker@oracle.com>
parents: 2055
diff changeset
  3058
                        self.history.log_operation_end(
207f168361ba 10148 successful image operations with no effect should be elided from history
Shawn Walker <shawn.walker@oracle.com>
parents: 2055
diff changeset
  3059
                            result=history.RESULT_NOTHING_TO_DO)
207f168361ba 10148 successful image operations with no effect should be elided from history
Shawn Walker <shawn.walker@oracle.com>
parents: 2055
diff changeset
  3060
                        return
1352
5c92c9d342ef 11065 client v1 catalog support for v0 catalogs
Shawn Walker <srw@sun.com>
parents: 1328
diff changeset
  3061
                self.history.log_operation_end()
116
9c9942a52984 (image flag day) remove pkg catalog, improve pkg status, localize pkg(1), use
Stephen Hahn <sch@Sun.COM>
parents: 111
diff changeset
  3062
1352
5c92c9d342ef 11065 client v1 catalog support for v0 catalogs
Shawn Walker <srw@sun.com>
parents: 1328
diff changeset
  3063
        def _get_publisher_meta_dir(self):
2144
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  3064
                if self.version >= 3:
1352
5c92c9d342ef 11065 client v1 catalog support for v0 catalogs
Shawn Walker <srw@sun.com>
parents: 1328
diff changeset
  3065
                        return IMG_PUB_DIR
5c92c9d342ef 11065 client v1 catalog support for v0 catalogs
Shawn Walker <srw@sun.com>
parents: 1328
diff changeset
  3066
                return "catalog"
996
31d152a5212b 7582 pkg set-publisher --no-refresh will delete catalogs
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 993
diff changeset
  3067
2144
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  3068
        def _get_publisher_cache_root(self, prefix):
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  3069
                return os.path.join(self.imgdir, "cache", "publisher", prefix)
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  3070
1352
5c92c9d342ef 11065 client v1 catalog support for v0 catalogs
Shawn Walker <srw@sun.com>
parents: 1328
diff changeset
  3071
        def _get_publisher_meta_root(self, prefix):
5c92c9d342ef 11065 client v1 catalog support for v0 catalogs
Shawn Walker <srw@sun.com>
parents: 1328
diff changeset
  3072
                return os.path.join(self.imgdir, self._get_publisher_meta_dir(),
5c92c9d342ef 11065 client v1 catalog support for v0 catalogs
Shawn Walker <srw@sun.com>
parents: 1328
diff changeset
  3073
                    prefix)
5c92c9d342ef 11065 client v1 catalog support for v0 catalogs
Shawn Walker <srw@sun.com>
parents: 1328
diff changeset
  3074
2144
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  3075
        def remove_publisher_metadata(self, pub, progtrack=None, rebuild=True):
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  3076
                """Removes the metadata for the specified publisher object,
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  3077
                except data for installed packages.
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  3078
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  3079
                'pub' is the object of the publisher to remove the data for.
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  3080
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  3081
                'progtrack' is an optional ProgressTracker object.
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  3082
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  3083
                'rebuild' is an optional boolean specifying whether image
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  3084
                catalogs should be rebuilt after removing the publisher's
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  3085
                metadata.
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  3086
                """
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  3087
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  3088
                if self.version < 4:
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  3089
                        # Older images don't require fine-grained deletion.
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  3090
                        pub.remove_meta_root()
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  3091
                        if rebuild:
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  3092
                                self.__rebuild_image_catalogs(
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  3093
                                    progtrack=progtrack)
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  3094
                        return
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  3095
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  3096
                # Build a list of paths that shouldn't be removed because they
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  3097
                # belong to installed packages.
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  3098
                excluded = [
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  3099
                    self.get_manifest_path(f)
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  3100
                    for f in self.gen_installed_pkgs()
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  3101
                    if f.publisher == pub.prefix
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  3102
                ]
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  3103
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  3104
                if not excluded:
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  3105
                        pub.remove_meta_root()
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  3106
                else:
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  3107
                        try:
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  3108
                                # Discard all publisher metadata except
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  3109
                                # package manifests as a first pass.
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  3110
                                for entry in os.listdir(pub.meta_root):
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  3111
                                        if entry == "pkg":
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  3112
                                                continue
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  3113
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  3114
                                        target = os.path.join(pub.meta_root,
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  3115
                                            entry)
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  3116
                                        if os.path.isdir(target):
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  3117
                                                shutil.rmtree(target)
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  3118
                                        else:
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  3119
                                                portable.remove(target)
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  3120
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  3121
                                # Build the list of directories that can't be
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  3122
                                # removed.
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  3123
                                exdirs = [os.path.dirname(e) for e in excluded]
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  3124
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  3125
                                # Now try to discard only package manifests
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  3126
                                # that aren't for installed packages.
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  3127
                                mroot = os.path.join(pub.meta_root, "pkg")
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  3128
                                for pdir in os.listdir(mroot):
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  3129
                                        proot = os.path.join(mroot, pdir)
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  3130
                                        if proot not in exdirs:
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  3131
                                                # This removes all manifest data
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  3132
                                                # for a given package stem.
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  3133
                                                shutil.rmtree(proot)
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  3134
                                                continue
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  3135
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  3136
                                        # Remove only manifest data for packages
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  3137
                                        # that are not installed.
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  3138
                                        for mname in os.listdir(proot):
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  3139
                                                mpath = os.path.join(proot,
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  3140
                                                    mname)
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  3141
                                                if mpath not in excluded:
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  3142
                                                        portable.remove(mpath)
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  3143
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  3144
                                # Finally, dump any cache data for this
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  3145
                                # publisher if possible.
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  3146
                                shutil.rmtree(self._get_publisher_cache_root(
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  3147
                                    pub.prefix), ignore_errors=True)
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  3148
                        except EnvironmentError, e:
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  3149
                                raise apx._convert_error(e)
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  3150
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  3151
                if rebuild:
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  3152
                        self.__rebuild_image_catalogs(progtrack=progtrack)
926
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 922
diff changeset
  3153
1352
5c92c9d342ef 11065 client v1 catalog support for v0 catalogs
Shawn Walker <srw@sun.com>
parents: 1328
diff changeset
  3154
        def gen_installed_pkg_names(self, anarchy=True):
5c92c9d342ef 11065 client v1 catalog support for v0 catalogs
Shawn Walker <srw@sun.com>
parents: 1328
diff changeset
  3155
                """A generator function that produces FMRI strings as it
5c92c9d342ef 11065 client v1 catalog support for v0 catalogs
Shawn Walker <srw@sun.com>
parents: 1328
diff changeset
  3156
                iterates over the list of installed packages.  This is
5c92c9d342ef 11065 client v1 catalog support for v0 catalogs
Shawn Walker <srw@sun.com>
parents: 1328
diff changeset
  3157
                faster than gen_installed_pkgs when only the FMRI string
5c92c9d342ef 11065 client v1 catalog support for v0 catalogs
Shawn Walker <srw@sun.com>
parents: 1328
diff changeset
  3158
                is needed."""
5c92c9d342ef 11065 client v1 catalog support for v0 catalogs
Shawn Walker <srw@sun.com>
parents: 1328
diff changeset
  3159
5c92c9d342ef 11065 client v1 catalog support for v0 catalogs
Shawn Walker <srw@sun.com>
parents: 1328
diff changeset
  3160
                cat = self.get_catalog(self.IMG_CATALOG_INSTALLED)
5c92c9d342ef 11065 client v1 catalog support for v0 catalogs
Shawn Walker <srw@sun.com>
parents: 1328
diff changeset
  3161
                for f in cat.fmris(objects=False):
5c92c9d342ef 11065 client v1 catalog support for v0 catalogs
Shawn Walker <srw@sun.com>
parents: 1328
diff changeset
  3162
                        if anarchy:
5c92c9d342ef 11065 client v1 catalog support for v0 catalogs
Shawn Walker <srw@sun.com>
parents: 1328
diff changeset
  3163
                                # Catalog entries always have publisher prefix.
5c92c9d342ef 11065 client v1 catalog support for v0 catalogs
Shawn Walker <srw@sun.com>
parents: 1328
diff changeset
  3164
                                yield "pkg:/%s" % f[6:].split("/", 1)[-1]
5c92c9d342ef 11065 client v1 catalog support for v0 catalogs
Shawn Walker <srw@sun.com>
parents: 1328
diff changeset
  3165
                                continue
5c92c9d342ef 11065 client v1 catalog support for v0 catalogs
Shawn Walker <srw@sun.com>
parents: 1328
diff changeset
  3166
                        yield f
5c92c9d342ef 11065 client v1 catalog support for v0 catalogs
Shawn Walker <srw@sun.com>
parents: 1328
diff changeset
  3167
5c92c9d342ef 11065 client v1 catalog support for v0 catalogs
Shawn Walker <srw@sun.com>
parents: 1328
diff changeset
  3168
        def gen_installed_pkgs(self):
5c92c9d342ef 11065 client v1 catalog support for v0 catalogs
Shawn Walker <srw@sun.com>
parents: 1328
diff changeset
  3169
                """Return an iteration through the installed packages."""
1068
9400aa8afd32 2557 catalog cache pickle file dependent on fmri and version object definitions
Shawn Walker <srw@sun.com>
parents: 1045
diff changeset
  3170
1352
5c92c9d342ef 11065 client v1 catalog support for v0 catalogs
Shawn Walker <srw@sun.com>
parents: 1328
diff changeset
  3171
                cat = self.get_catalog(self.IMG_CATALOG_INSTALLED)
5c92c9d342ef 11065 client v1 catalog support for v0 catalogs
Shawn Walker <srw@sun.com>
parents: 1328
diff changeset
  3172
                for f in cat.fmris():
5c92c9d342ef 11065 client v1 catalog support for v0 catalogs
Shawn Walker <srw@sun.com>
parents: 1328
diff changeset
  3173
                        yield f
5c92c9d342ef 11065 client v1 catalog support for v0 catalogs
Shawn Walker <srw@sun.com>
parents: 1328
diff changeset
  3174
2228
5319ee47781d 2774 new depend action behavior: follow if possible
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2219
diff changeset
  3175
        def gen_tracked_stems(self):
5319ee47781d 2774 new depend action behavior: follow if possible
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2219
diff changeset
  3176
                """Return an iteration through all the tracked pkg stems
5319ee47781d 2774 new depend action behavior: follow if possible
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2219
diff changeset
  3177
                in the set of currently installed packages.  Return value
5319ee47781d 2774 new depend action behavior: follow if possible
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2219
diff changeset
  3178
                is group pkg fmri, stem"""
5319ee47781d 2774 new depend action behavior: follow if possible
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2219
diff changeset
  3179
                cat = self.get_catalog(self.IMG_CATALOG_INSTALLED)
5319ee47781d 2774 new depend action behavior: follow if possible
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2219
diff changeset
  3180
                excludes = self.list_excludes()
5319ee47781d 2774 new depend action behavior: follow if possible
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2219
diff changeset
  3181
5319ee47781d 2774 new depend action behavior: follow if possible
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2219
diff changeset
  3182
                for f in cat.fmris():
5319ee47781d 2774 new depend action behavior: follow if possible
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2219
diff changeset
  3183
                        for a in cat.get_entry_actions(f,
5319ee47781d 2774 new depend action behavior: follow if possible
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2219
diff changeset
  3184
                            [pkg.catalog.Catalog.DEPENDENCY], excludes=excludes):
5319ee47781d 2774 new depend action behavior: follow if possible
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2219
diff changeset
  3185
                                if a.name == "depend" and a.attrs["type"] == "group":
5319ee47781d 2774 new depend action behavior: follow if possible
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2219
diff changeset
  3186
                                        yield (f, self.strtofmri(
5319ee47781d 2774 new depend action behavior: follow if possible
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2219
diff changeset
  3187
                                            a.attrs["fmri"]).pkg_name)
5319ee47781d 2774 new depend action behavior: follow if possible
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2219
diff changeset
  3188
2205
53d0be594162 3822 image plans should prevent conflicting actions from being installed
Danek Duvall <danek.duvall@oracle.com>
parents: 2200
diff changeset
  3189
        def _create_fast_lookups(self):
53d0be594162 3822 image plans should prevent conflicting actions from being installed
Danek Duvall <danek.duvall@oracle.com>
parents: 2200
diff changeset
  3190
                """Create an on-disk database mapping action name and key
53d0be594162 3822 image plans should prevent conflicting actions from being installed
Danek Duvall <danek.duvall@oracle.com>
parents: 2200
diff changeset
  3191
                attribute value to the action string comprising the unique
53d0be594162 3822 image plans should prevent conflicting actions from being installed
Danek Duvall <danek.duvall@oracle.com>
parents: 2200
diff changeset
  3192
                attributes of the action, for all installed actions.  This is
53d0be594162 3822 image plans should prevent conflicting actions from being installed
Danek Duvall <danek.duvall@oracle.com>
parents: 2200
diff changeset
  3193
                done with a file mapping the tuple to an offset into a second
53d0be594162 3822 image plans should prevent conflicting actions from being installed
Danek Duvall <danek.duvall@oracle.com>
parents: 2200
diff changeset
  3194
                file, where those actions are kept.  Once the offsets are loaded
53d0be594162 3822 image plans should prevent conflicting actions from being installed
Danek Duvall <danek.duvall@oracle.com>
parents: 2200
diff changeset
  3195
                into memory, it is simple to seek into the second file to the
53d0be594162 3822 image plans should prevent conflicting actions from being installed
Danek Duvall <danek.duvall@oracle.com>
parents: 2200
diff changeset
  3196
                given offset and read until you hit an action that doesn't
53d0be594162 3822 image plans should prevent conflicting actions from being installed
Danek Duvall <danek.duvall@oracle.com>
parents: 2200
diff changeset
  3197
                match."""
53d0be594162 3822 image plans should prevent conflicting actions from being installed
Danek Duvall <danek.duvall@oracle.com>
parents: 2200
diff changeset
  3198
53d0be594162 3822 image plans should prevent conflicting actions from being installed
Danek Duvall <danek.duvall@oracle.com>
parents: 2200
diff changeset
  3199
                stripped_path = os.path.join(self.__action_cache_dir,
53d0be594162 3822 image plans should prevent conflicting actions from being installed
Danek Duvall <danek.duvall@oracle.com>
parents: 2200
diff changeset
  3200
                    "actions.stripped")
53d0be594162 3822 image plans should prevent conflicting actions from being installed
Danek Duvall <danek.duvall@oracle.com>
parents: 2200
diff changeset
  3201
                offsets_path = os.path.join(self.__action_cache_dir,
53d0be594162 3822 image plans should prevent conflicting actions from being installed
Danek Duvall <danek.duvall@oracle.com>
parents: 2200
diff changeset
  3202
                    "actions.offsets")
53d0be594162 3822 image plans should prevent conflicting actions from being installed
Danek Duvall <danek.duvall@oracle.com>
parents: 2200
diff changeset
  3203
53d0be594162 3822 image plans should prevent conflicting actions from being installed
Danek Duvall <danek.duvall@oracle.com>
parents: 2200
diff changeset
  3204
                excludes = self.list_excludes()
53d0be594162 3822 image plans should prevent conflicting actions from being installed
Danek Duvall <danek.duvall@oracle.com>
parents: 2200
diff changeset
  3205
                heap = []
53d0be594162 3822 image plans should prevent conflicting actions from being installed
Danek Duvall <danek.duvall@oracle.com>
parents: 2200
diff changeset
  3206
53d0be594162 3822 image plans should prevent conflicting actions from being installed
Danek Duvall <danek.duvall@oracle.com>
parents: 2200
diff changeset
  3207
                from heapq import heappush, heappop
53d0be594162 3822 image plans should prevent conflicting actions from being installed
Danek Duvall <danek.duvall@oracle.com>
parents: 2200
diff changeset
  3208
53d0be594162 3822 image plans should prevent conflicting actions from being installed
Danek Duvall <danek.duvall@oracle.com>
parents: 2200
diff changeset
  3209
                for pfmri in self.gen_installed_pkgs():
53d0be594162 3822 image plans should prevent conflicting actions from being installed
Danek Duvall <danek.duvall@oracle.com>
parents: 2200
diff changeset
  3210
                        m = self.get_manifest(pfmri, all_variants=True)
53d0be594162 3822 image plans should prevent conflicting actions from being installed
Danek Duvall <danek.duvall@oracle.com>
parents: 2200
diff changeset
  3211
                        for act in m.gen_actions(excludes):
53d0be594162 3822 image plans should prevent conflicting actions from being installed
Danek Duvall <danek.duvall@oracle.com>
parents: 2200
diff changeset
  3212
                                if not act.globally_identical:
53d0be594162 3822 image plans should prevent conflicting actions from being installed
Danek Duvall <danek.duvall@oracle.com>
parents: 2200
diff changeset
  3213
                                        continue
53d0be594162 3822 image plans should prevent conflicting actions from being installed
Danek Duvall <danek.duvall@oracle.com>
parents: 2200
diff changeset
  3214
                                for key in act.attrs.keys():
53d0be594162 3822 image plans should prevent conflicting actions from being installed
Danek Duvall <danek.duvall@oracle.com>
parents: 2200
diff changeset
  3215
                                        if (act.unique_attrs and
53d0be594162 3822 image plans should prevent conflicting actions from being installed
Danek Duvall <danek.duvall@oracle.com>
parents: 2200
diff changeset
  3216
                                            key not in act.unique_attrs) or \
53d0be594162 3822 image plans should prevent conflicting actions from being installed
Danek Duvall <danek.duvall@oracle.com>
parents: 2200
diff changeset
  3217
                                            key.startswith("variant.") or \
53d0be594162 3822 image plans should prevent conflicting actions from being installed
Danek Duvall <danek.duvall@oracle.com>
parents: 2200
diff changeset
  3218
                                            key.startswith("facet."):
53d0be594162 3822 image plans should prevent conflicting actions from being installed
Danek Duvall <danek.duvall@oracle.com>
parents: 2200
diff changeset
  3219
                                                del act.attrs[key]
53d0be594162 3822 image plans should prevent conflicting actions from being installed
Danek Duvall <danek.duvall@oracle.com>
parents: 2200
diff changeset
  3220
                                heappush(heap, (act.name,
53d0be594162 3822 image plans should prevent conflicting actions from being installed
Danek Duvall <danek.duvall@oracle.com>
parents: 2200
diff changeset
  3221
                                    act.attrs[act.key_attr], pfmri, act))
53d0be594162 3822 image plans should prevent conflicting actions from being installed
Danek Duvall <danek.duvall@oracle.com>
parents: 2200
diff changeset
  3222
53d0be594162 3822 image plans should prevent conflicting actions from being installed
Danek Duvall <danek.duvall@oracle.com>
parents: 2200
diff changeset
  3223
                # Don't worry if we can't write the temporary files.
53d0be594162 3822 image plans should prevent conflicting actions from being installed
Danek Duvall <danek.duvall@oracle.com>
parents: 2200
diff changeset
  3224
                try:
53d0be594162 3822 image plans should prevent conflicting actions from being installed
Danek Duvall <danek.duvall@oracle.com>
parents: 2200
diff changeset
  3225
                        actdict = {}
53d0be594162 3822 image plans should prevent conflicting actions from being installed
Danek Duvall <danek.duvall@oracle.com>
parents: 2200
diff changeset
  3226
                        sf, sp = self.temporary_file(close=False)
53d0be594162 3822 image plans should prevent conflicting actions from being installed
Danek Duvall <danek.duvall@oracle.com>
parents: 2200
diff changeset
  3227
                        of, op = self.temporary_file(close=False)
53d0be594162 3822 image plans should prevent conflicting actions from being installed
Danek Duvall <danek.duvall@oracle.com>
parents: 2200
diff changeset
  3228
53d0be594162 3822 image plans should prevent conflicting actions from being installed
Danek Duvall <danek.duvall@oracle.com>
parents: 2200
diff changeset
  3229
                        sf = os.fdopen(sf, "wb")
53d0be594162 3822 image plans should prevent conflicting actions from being installed
Danek Duvall <danek.duvall@oracle.com>
parents: 2200
diff changeset
  3230
                        of = os.fdopen(of, "wb")
53d0be594162 3822 image plans should prevent conflicting actions from being installed
Danek Duvall <danek.duvall@oracle.com>
parents: 2200
diff changeset
  3231
53d0be594162 3822 image plans should prevent conflicting actions from being installed
Danek Duvall <danek.duvall@oracle.com>
parents: 2200
diff changeset
  3232
                        # We need to make sure the files are coordinated.
53d0be594162 3822 image plans should prevent conflicting actions from being installed
Danek Duvall <danek.duvall@oracle.com>
parents: 2200
diff changeset
  3233
                        t = int(time.time())
53d0be594162 3822 image plans should prevent conflicting actions from being installed
Danek Duvall <danek.duvall@oracle.com>
parents: 2200
diff changeset
  3234
                        sf.write("VERSION 1\n%s\n" % t)
53d0be594162 3822 image plans should prevent conflicting actions from being installed
Danek Duvall <danek.duvall@oracle.com>
parents: 2200
diff changeset
  3235
                        of.write("VERSION 1\n%s\n" % t)
53d0be594162 3822 image plans should prevent conflicting actions from being installed
Danek Duvall <danek.duvall@oracle.com>
parents: 2200
diff changeset
  3236
53d0be594162 3822 image plans should prevent conflicting actions from being installed
Danek Duvall <danek.duvall@oracle.com>
parents: 2200
diff changeset
  3237
                        last_name, last_key = None, None
53d0be594162 3822 image plans should prevent conflicting actions from being installed
Danek Duvall <danek.duvall@oracle.com>
parents: 2200
diff changeset
  3238
                        while heap:
53d0be594162 3822 image plans should prevent conflicting actions from being installed
Danek Duvall <danek.duvall@oracle.com>
parents: 2200
diff changeset
  3239
                                item = heappop(heap)
53d0be594162 3822 image plans should prevent conflicting actions from being installed
Danek Duvall <danek.duvall@oracle.com>
parents: 2200
diff changeset
  3240
                                fmri, act = item[2:]
53d0be594162 3822 image plans should prevent conflicting actions from being installed
Danek Duvall <danek.duvall@oracle.com>
parents: 2200
diff changeset
  3241
                                offset = sf.tell()
53d0be594162 3822 image plans should prevent conflicting actions from being installed
Danek Duvall <danek.duvall@oracle.com>
parents: 2200
diff changeset
  3242
                                sf.write("%s %s\n" % (fmri, act))
53d0be594162 3822 image plans should prevent conflicting actions from being installed
Danek Duvall <danek.duvall@oracle.com>
parents: 2200
diff changeset
  3243
                                key = act.attrs[act.key_attr]
53d0be594162 3822 image plans should prevent conflicting actions from being installed
Danek Duvall <danek.duvall@oracle.com>
parents: 2200
diff changeset
  3244
                                if act.name != last_name or key != last_key:
53d0be594162 3822 image plans should prevent conflicting actions from being installed
Danek Duvall <danek.duvall@oracle.com>
parents: 2200
diff changeset
  3245
                                        of.write("%s %s %s\n" % (act.name, offset, key))
53d0be594162 3822 image plans should prevent conflicting actions from being installed
Danek Duvall <danek.duvall@oracle.com>
parents: 2200
diff changeset
  3246
                                        actdict[(act.name, key)] = offset
53d0be594162 3822 image plans should prevent conflicting actions from being installed
Danek Duvall <danek.duvall@oracle.com>
parents: 2200
diff changeset
  3247
                                        last_name, last_key = act.name, key
53d0be594162 3822 image plans should prevent conflicting actions from being installed
Danek Duvall <danek.duvall@oracle.com>
parents: 2200
diff changeset
  3248
                        sf.close()
53d0be594162 3822 image plans should prevent conflicting actions from being installed
Danek Duvall <danek.duvall@oracle.com>
parents: 2200
diff changeset
  3249
                        of.close()
53d0be594162 3822 image plans should prevent conflicting actions from being installed
Danek Duvall <danek.duvall@oracle.com>
parents: 2200
diff changeset
  3250
                        os.chmod(sp, misc.PKG_FILE_MODE)
53d0be594162 3822 image plans should prevent conflicting actions from being installed
Danek Duvall <danek.duvall@oracle.com>
parents: 2200
diff changeset
  3251
                        os.chmod(op, misc.PKG_FILE_MODE)
53d0be594162 3822 image plans should prevent conflicting actions from being installed
Danek Duvall <danek.duvall@oracle.com>
parents: 2200
diff changeset
  3252
                except BaseException, e:
53d0be594162 3822 image plans should prevent conflicting actions from being installed
Danek Duvall <danek.duvall@oracle.com>
parents: 2200
diff changeset
  3253
                        try:
53d0be594162 3822 image plans should prevent conflicting actions from being installed
Danek Duvall <danek.duvall@oracle.com>
parents: 2200
diff changeset
  3254
                                os.unlink(sp)
53d0be594162 3822 image plans should prevent conflicting actions from being installed
Danek Duvall <danek.duvall@oracle.com>
parents: 2200
diff changeset
  3255
                                os.unlink(op)
53d0be594162 3822 image plans should prevent conflicting actions from being installed
Danek Duvall <danek.duvall@oracle.com>
parents: 2200
diff changeset
  3256
                        except:
53d0be594162 3822 image plans should prevent conflicting actions from being installed
Danek Duvall <danek.duvall@oracle.com>
parents: 2200
diff changeset
  3257
                                if isinstance(e, KeyboardInterrupt):
53d0be594162 3822 image plans should prevent conflicting actions from being installed
Danek Duvall <danek.duvall@oracle.com>
parents: 2200
diff changeset
  3258
                                        raise
53d0be594162 3822 image plans should prevent conflicting actions from being installed
Danek Duvall <danek.duvall@oracle.com>
parents: 2200
diff changeset
  3259
                                return actdict
53d0be594162 3822 image plans should prevent conflicting actions from being installed
Danek Duvall <danek.duvall@oracle.com>
parents: 2200
diff changeset
  3260
                        if isinstance(e, KeyboardInterrupt):
53d0be594162 3822 image plans should prevent conflicting actions from being installed
Danek Duvall <danek.duvall@oracle.com>
parents: 2200
diff changeset
  3261
                                raise
53d0be594162 3822 image plans should prevent conflicting actions from being installed
Danek Duvall <danek.duvall@oracle.com>
parents: 2200
diff changeset
  3262
                        return
53d0be594162 3822 image plans should prevent conflicting actions from being installed
Danek Duvall <danek.duvall@oracle.com>
parents: 2200
diff changeset
  3263
53d0be594162 3822 image plans should prevent conflicting actions from being installed
Danek Duvall <danek.duvall@oracle.com>
parents: 2200
diff changeset
  3264
                # Finally, rename the temporary files into their final place.
53d0be594162 3822 image plans should prevent conflicting actions from being installed
Danek Duvall <danek.duvall@oracle.com>
parents: 2200
diff changeset
  3265
                # If we have any problems, do our best to remove them, and we'll
53d0be594162 3822 image plans should prevent conflicting actions from being installed
Danek Duvall <danek.duvall@oracle.com>
parents: 2200
diff changeset
  3266
                # try to recreate them on the read-side.
53d0be594162 3822 image plans should prevent conflicting actions from being installed
Danek Duvall <danek.duvall@oracle.com>
parents: 2200
diff changeset
  3267
                try:
53d0be594162 3822 image plans should prevent conflicting actions from being installed
Danek Duvall <danek.duvall@oracle.com>
parents: 2200
diff changeset
  3268
                        portable.rename(sp, stripped_path)
53d0be594162 3822 image plans should prevent conflicting actions from being installed
Danek Duvall <danek.duvall@oracle.com>
parents: 2200
diff changeset
  3269
                        portable.rename(op, offsets_path)
53d0be594162 3822 image plans should prevent conflicting actions from being installed
Danek Duvall <danek.duvall@oracle.com>
parents: 2200
diff changeset
  3270
                        return actdict
53d0be594162 3822 image plans should prevent conflicting actions from being installed
Danek Duvall <danek.duvall@oracle.com>
parents: 2200
diff changeset
  3271
                except EnvironmentError, e:
53d0be594162 3822 image plans should prevent conflicting actions from being installed
Danek Duvall <danek.duvall@oracle.com>
parents: 2200
diff changeset
  3272
                        if e.errno == errno.EACCES or e.errno == errno.EROFS:
53d0be594162 3822 image plans should prevent conflicting actions from being installed
Danek Duvall <danek.duvall@oracle.com>
parents: 2200
diff changeset
  3273
                                self.__action_cache_dir = self.temporary_dir()
53d0be594162 3822 image plans should prevent conflicting actions from being installed
Danek Duvall <danek.duvall@oracle.com>
parents: 2200
diff changeset
  3274
                                stripped_path = os.path.join(
53d0be594162 3822 image plans should prevent conflicting actions from being installed
Danek Duvall <danek.duvall@oracle.com>
parents: 2200
diff changeset
  3275
                                    self.__action_cache_dir, "actions.stripped")
53d0be594162 3822 image plans should prevent conflicting actions from being installed
Danek Duvall <danek.duvall@oracle.com>
parents: 2200
diff changeset
  3276
                                offsets_path = os.path.join(
53d0be594162 3822 image plans should prevent conflicting actions from being installed
Danek Duvall <danek.duvall@oracle.com>
parents: 2200
diff changeset
  3277
                                    self.__action_cache_dir, "actions.offsets")
53d0be594162 3822 image plans should prevent conflicting actions from being installed
Danek Duvall <danek.duvall@oracle.com>
parents: 2200
diff changeset
  3278
                                portable.rename(sp, stripped_path)
53d0be594162 3822 image plans should prevent conflicting actions from being installed
Danek Duvall <danek.duvall@oracle.com>
parents: 2200
diff changeset
  3279
                                portable.rename(op, offsets_path)
53d0be594162 3822 image plans should prevent conflicting actions from being installed
Danek Duvall <danek.duvall@oracle.com>
parents: 2200
diff changeset
  3280
                                return actdict
53d0be594162 3822 image plans should prevent conflicting actions from being installed
Danek Duvall <danek.duvall@oracle.com>
parents: 2200
diff changeset
  3281
                        try:
53d0be594162 3822 image plans should prevent conflicting actions from being installed
Danek Duvall <danek.duvall@oracle.com>
parents: 2200
diff changeset
  3282
                                os.unlink(stripped_path)
53d0be594162 3822 image plans should prevent conflicting actions from being installed
Danek Duvall <danek.duvall@oracle.com>
parents: 2200
diff changeset
  3283
                                os.unlink(offsets_path)
53d0be594162 3822 image plans should prevent conflicting actions from being installed
Danek Duvall <danek.duvall@oracle.com>
parents: 2200
diff changeset
  3284
                        except:
53d0be594162 3822 image plans should prevent conflicting actions from being installed
Danek Duvall <danek.duvall@oracle.com>
parents: 2200
diff changeset
  3285
                                pass
53d0be594162 3822 image plans should prevent conflicting actions from being installed
Danek Duvall <danek.duvall@oracle.com>
parents: 2200
diff changeset
  3286
53d0be594162 3822 image plans should prevent conflicting actions from being installed
Danek Duvall <danek.duvall@oracle.com>
parents: 2200
diff changeset
  3287
        def _load_actdict(self):
53d0be594162 3822 image plans should prevent conflicting actions from being installed
Danek Duvall <danek.duvall@oracle.com>
parents: 2200
diff changeset
  3288
                """Read the file of offsets created in _create_fast_lookups()
53d0be594162 3822 image plans should prevent conflicting actions from being installed
Danek Duvall <danek.duvall@oracle.com>
parents: 2200
diff changeset
  3289
                and return the dictionary mapping action name and key value to
53d0be594162 3822 image plans should prevent conflicting actions from being installed
Danek Duvall <danek.duvall@oracle.com>
parents: 2200
diff changeset
  3290
                offset."""
53d0be594162 3822 image plans should prevent conflicting actions from being installed
Danek Duvall <danek.duvall@oracle.com>
parents: 2200
diff changeset
  3291
53d0be594162 3822 image plans should prevent conflicting actions from being installed
Danek Duvall <danek.duvall@oracle.com>
parents: 2200
diff changeset
  3292
                actdict = {}
53d0be594162 3822 image plans should prevent conflicting actions from being installed
Danek Duvall <danek.duvall@oracle.com>
parents: 2200
diff changeset
  3293
53d0be594162 3822 image plans should prevent conflicting actions from being installed
Danek Duvall <danek.duvall@oracle.com>
parents: 2200
diff changeset
  3294
                try:
53d0be594162 3822 image plans should prevent conflicting actions from being installed
Danek Duvall <danek.duvall@oracle.com>
parents: 2200
diff changeset
  3295
                        of = open(os.path.join(self.__action_cache_dir,
53d0be594162 3822 image plans should prevent conflicting actions from being installed
Danek Duvall <danek.duvall@oracle.com>
parents: 2200
diff changeset
  3296
                            "actions.offsets"), "rb")
53d0be594162 3822 image plans should prevent conflicting actions from being installed
Danek Duvall <danek.duvall@oracle.com>
parents: 2200
diff changeset
  3297
                except IOError, e:
53d0be594162 3822 image plans should prevent conflicting actions from being installed
Danek Duvall <danek.duvall@oracle.com>
parents: 2200
diff changeset
  3298
                        if e.errno != errno.ENOENT:
53d0be594162 3822 image plans should prevent conflicting actions from being installed
Danek Duvall <danek.duvall@oracle.com>
parents: 2200
diff changeset
  3299
                                raise
53d0be594162 3822 image plans should prevent conflicting actions from being installed
Danek Duvall <danek.duvall@oracle.com>
parents: 2200
diff changeset
  3300
53d0be594162 3822 image plans should prevent conflicting actions from being installed
Danek Duvall <danek.duvall@oracle.com>
parents: 2200
diff changeset
  3301
                        actdict = self._create_fast_lookups()
53d0be594162 3822 image plans should prevent conflicting actions from being installed
Danek Duvall <danek.duvall@oracle.com>
parents: 2200
diff changeset
  3302
                        if actdict is not None:
53d0be594162 3822 image plans should prevent conflicting actions from being installed
Danek Duvall <danek.duvall@oracle.com>
parents: 2200
diff changeset
  3303
                                return actdict
53d0be594162 3822 image plans should prevent conflicting actions from being installed
Danek Duvall <danek.duvall@oracle.com>
parents: 2200
diff changeset
  3304
53d0be594162 3822 image plans should prevent conflicting actions from being installed
Danek Duvall <danek.duvall@oracle.com>
parents: 2200
diff changeset
  3305
                # Make sure the files are paired, and try to create them if not.
53d0be594162 3822 image plans should prevent conflicting actions from being installed
Danek Duvall <danek.duvall@oracle.com>
parents: 2200
diff changeset
  3306
                oversion = of.readline().rstrip()
53d0be594162 3822 image plans should prevent conflicting actions from being installed
Danek Duvall <danek.duvall@oracle.com>
parents: 2200
diff changeset
  3307
                otimestamp = of.readline().rstrip()
53d0be594162 3822 image plans should prevent conflicting actions from being installed
Danek Duvall <danek.duvall@oracle.com>
parents: 2200
diff changeset
  3308
                sversion, stimestamp = self._get_stripped_actions_file(internal=True)
53d0be594162 3822 image plans should prevent conflicting actions from being installed
Danek Duvall <danek.duvall@oracle.com>
parents: 2200
diff changeset
  3309
53d0be594162 3822 image plans should prevent conflicting actions from being installed
Danek Duvall <danek.duvall@oracle.com>
parents: 2200
diff changeset
  3310
                # If we recognize neither file's version or their timestamps
53d0be594162 3822 image plans should prevent conflicting actions from being installed
Danek Duvall <danek.duvall@oracle.com>
parents: 2200
diff changeset
  3311
                # don't match, then we blow them away and try again.
53d0be594162 3822 image plans should prevent conflicting actions from being installed
Danek Duvall <danek.duvall@oracle.com>
parents: 2200
diff changeset
  3312
                if oversion != "VERSION 1" or sversion != "VERSION 1" or \
53d0be594162 3822 image plans should prevent conflicting actions from being installed
Danek Duvall <danek.duvall@oracle.com>
parents: 2200
diff changeset
  3313
                    stimestamp != otimestamp:
53d0be594162 3822 image plans should prevent conflicting actions from being installed
Danek Duvall <danek.duvall@oracle.com>
parents: 2200
diff changeset
  3314
                        of.close()
53d0be594162 3822 image plans should prevent conflicting actions from being installed
Danek Duvall <danek.duvall@oracle.com>
parents: 2200
diff changeset
  3315
                        actdict = self._create_fast_lookups()
53d0be594162 3822 image plans should prevent conflicting actions from being installed
Danek Duvall <danek.duvall@oracle.com>
parents: 2200
diff changeset
  3316
                        if actdict is not None:
53d0be594162 3822 image plans should prevent conflicting actions from being installed
Danek Duvall <danek.duvall@oracle.com>
parents: 2200
diff changeset
  3317
                                return actdict
53d0be594162 3822 image plans should prevent conflicting actions from being installed
Danek Duvall <danek.duvall@oracle.com>
parents: 2200
diff changeset
  3318
                        of = file(os.path.join(self.__action_cache_dir,
53d0be594162 3822 image plans should prevent conflicting actions from being installed
Danek Duvall <danek.duvall@oracle.com>
parents: 2200
diff changeset
  3319
                            "actions.offsets"), "rb")
53d0be594162 3822 image plans should prevent conflicting actions from being installed
Danek Duvall <danek.duvall@oracle.com>
parents: 2200
diff changeset
  3320
                        oversion = of.readline().rstrip()
53d0be594162 3822 image plans should prevent conflicting actions from being installed
Danek Duvall <danek.duvall@oracle.com>
parents: 2200
diff changeset
  3321
                        otimestamp = of.readline().rstrip()
53d0be594162 3822 image plans should prevent conflicting actions from being installed
Danek Duvall <danek.duvall@oracle.com>
parents: 2200
diff changeset
  3322
53d0be594162 3822 image plans should prevent conflicting actions from being installed
Danek Duvall <danek.duvall@oracle.com>
parents: 2200
diff changeset
  3323
                for line in of:
53d0be594162 3822 image plans should prevent conflicting actions from being installed
Danek Duvall <danek.duvall@oracle.com>
parents: 2200
diff changeset
  3324
                        actname, offset, key_attr = line.rstrip().split(None, 2)
53d0be594162 3822 image plans should prevent conflicting actions from being installed
Danek Duvall <danek.duvall@oracle.com>
parents: 2200
diff changeset
  3325
                        actdict[(actname, key_attr)] = int(offset)
53d0be594162 3822 image plans should prevent conflicting actions from being installed
Danek Duvall <danek.duvall@oracle.com>
parents: 2200
diff changeset
  3326
53d0be594162 3822 image plans should prevent conflicting actions from being installed
Danek Duvall <danek.duvall@oracle.com>
parents: 2200
diff changeset
  3327
                of.close()
53d0be594162 3822 image plans should prevent conflicting actions from being installed
Danek Duvall <danek.duvall@oracle.com>
parents: 2200
diff changeset
  3328
                return actdict
53d0be594162 3822 image plans should prevent conflicting actions from being installed
Danek Duvall <danek.duvall@oracle.com>
parents: 2200
diff changeset
  3329
53d0be594162 3822 image plans should prevent conflicting actions from being installed
Danek Duvall <danek.duvall@oracle.com>
parents: 2200
diff changeset
  3330
        def _get_stripped_actions_file(self, internal=False):
53d0be594162 3822 image plans should prevent conflicting actions from being installed
Danek Duvall <danek.duvall@oracle.com>
parents: 2200
diff changeset
  3331
                """Open the actions file described in _create_fast_lookups() and
53d0be594162 3822 image plans should prevent conflicting actions from being installed
Danek Duvall <danek.duvall@oracle.com>
parents: 2200
diff changeset
  3332
                return the corresponding file object."""
53d0be594162 3822 image plans should prevent conflicting actions from being installed
Danek Duvall <danek.duvall@oracle.com>
parents: 2200
diff changeset
  3333
53d0be594162 3822 image plans should prevent conflicting actions from being installed
Danek Duvall <danek.duvall@oracle.com>
parents: 2200
diff changeset
  3334
                sf = file(os.path.join(self.__action_cache_dir,
53d0be594162 3822 image plans should prevent conflicting actions from being installed
Danek Duvall <danek.duvall@oracle.com>
parents: 2200
diff changeset
  3335
                    "actions.stripped"), "rb")
53d0be594162 3822 image plans should prevent conflicting actions from being installed
Danek Duvall <danek.duvall@oracle.com>
parents: 2200
diff changeset
  3336
                sversion = sf.readline().rstrip()
53d0be594162 3822 image plans should prevent conflicting actions from being installed
Danek Duvall <danek.duvall@oracle.com>
parents: 2200
diff changeset
  3337
                stimestamp = sf.readline().rstrip()
53d0be594162 3822 image plans should prevent conflicting actions from being installed
Danek Duvall <danek.duvall@oracle.com>
parents: 2200
diff changeset
  3338
                if internal:
53d0be594162 3822 image plans should prevent conflicting actions from being installed
Danek Duvall <danek.duvall@oracle.com>
parents: 2200
diff changeset
  3339
                        sf.close()
53d0be594162 3822 image plans should prevent conflicting actions from being installed
Danek Duvall <danek.duvall@oracle.com>
parents: 2200
diff changeset
  3340
                        return sversion, stimestamp
53d0be594162 3822 image plans should prevent conflicting actions from being installed
Danek Duvall <danek.duvall@oracle.com>
parents: 2200
diff changeset
  3341
53d0be594162 3822 image plans should prevent conflicting actions from being installed
Danek Duvall <danek.duvall@oracle.com>
parents: 2200
diff changeset
  3342
                return sf
53d0be594162 3822 image plans should prevent conflicting actions from being installed
Danek Duvall <danek.duvall@oracle.com>
parents: 2200
diff changeset
  3343
53d0be594162 3822 image plans should prevent conflicting actions from being installed
Danek Duvall <danek.duvall@oracle.com>
parents: 2200
diff changeset
  3344
        def gen_installed_actions_bytype(self, atype, implicit_dirs=False):
53d0be594162 3822 image plans should prevent conflicting actions from being installed
Danek Duvall <danek.duvall@oracle.com>
parents: 2200
diff changeset
  3345
                """Iterates through the installed actions of type 'atype'.  If
53d0be594162 3822 image plans should prevent conflicting actions from being installed
Danek Duvall <danek.duvall@oracle.com>
parents: 2200
diff changeset
  3346
                'implicit_dirs' is True and 'atype' is 'dir', then include
53d0be594162 3822 image plans should prevent conflicting actions from being installed
Danek Duvall <danek.duvall@oracle.com>
parents: 2200
diff changeset
  3347
                directories only implicitly defined by other filesystem
53d0be594162 3822 image plans should prevent conflicting actions from being installed
Danek Duvall <danek.duvall@oracle.com>
parents: 2200
diff changeset
  3348
                actions."""
53d0be594162 3822 image plans should prevent conflicting actions from being installed
Danek Duvall <danek.duvall@oracle.com>
parents: 2200
diff changeset
  3349
53d0be594162 3822 image plans should prevent conflicting actions from being installed
Danek Duvall <danek.duvall@oracle.com>
parents: 2200
diff changeset
  3350
                if implicit_dirs and atype != "dir":
53d0be594162 3822 image plans should prevent conflicting actions from being installed
Danek Duvall <danek.duvall@oracle.com>
parents: 2200
diff changeset
  3351
                        implicit_dirs = False
53d0be594162 3822 image plans should prevent conflicting actions from being installed
Danek Duvall <danek.duvall@oracle.com>
parents: 2200
diff changeset
  3352
53d0be594162 3822 image plans should prevent conflicting actions from being installed
Danek Duvall <danek.duvall@oracle.com>
parents: 2200
diff changeset
  3353
                excludes = self.list_excludes()
53d0be594162 3822 image plans should prevent conflicting actions from being installed
Danek Duvall <danek.duvall@oracle.com>
parents: 2200
diff changeset
  3354
53d0be594162 3822 image plans should prevent conflicting actions from being installed
Danek Duvall <danek.duvall@oracle.com>
parents: 2200
diff changeset
  3355
                for pfmri in self.gen_installed_pkgs():
53d0be594162 3822 image plans should prevent conflicting actions from being installed
Danek Duvall <danek.duvall@oracle.com>
parents: 2200
diff changeset
  3356
                        m = self.get_manifest(pfmri)
53d0be594162 3822 image plans should prevent conflicting actions from being installed
Danek Duvall <danek.duvall@oracle.com>
parents: 2200
diff changeset
  3357
                        dirs = set()
53d0be594162 3822 image plans should prevent conflicting actions from being installed
Danek Duvall <danek.duvall@oracle.com>
parents: 2200
diff changeset
  3358
                        for act in m.gen_actions_by_type(atype, excludes):
53d0be594162 3822 image plans should prevent conflicting actions from being installed
Danek Duvall <danek.duvall@oracle.com>
parents: 2200
diff changeset
  3359
                                if implicit_dirs:
53d0be594162 3822 image plans should prevent conflicting actions from being installed
Danek Duvall <danek.duvall@oracle.com>
parents: 2200
diff changeset
  3360
                                        dirs.add(act.attrs["path"])
53d0be594162 3822 image plans should prevent conflicting actions from being installed
Danek Duvall <danek.duvall@oracle.com>
parents: 2200
diff changeset
  3361
                                yield act, pfmri
53d0be594162 3822 image plans should prevent conflicting actions from being installed
Danek Duvall <danek.duvall@oracle.com>
parents: 2200
diff changeset
  3362
                        if implicit_dirs:
53d0be594162 3822 image plans should prevent conflicting actions from being installed
Danek Duvall <danek.duvall@oracle.com>
parents: 2200
diff changeset
  3363
                                da = pkg.actions.directory.DirectoryAction
53d0be594162 3822 image plans should prevent conflicting actions from being installed
Danek Duvall <danek.duvall@oracle.com>
parents: 2200
diff changeset
  3364
                                for d in m.get_directories(excludes):
53d0be594162 3822 image plans should prevent conflicting actions from being installed
Danek Duvall <danek.duvall@oracle.com>
parents: 2200
diff changeset
  3365
                                        if d not in dirs:
53d0be594162 3822 image plans should prevent conflicting actions from being installed
Danek Duvall <danek.duvall@oracle.com>
parents: 2200
diff changeset
  3366
                                                yield da(path=d, implicit="true"), pfmri
53d0be594162 3822 image plans should prevent conflicting actions from being installed
Danek Duvall <danek.duvall@oracle.com>
parents: 2200
diff changeset
  3367
1537
00a5b4d54eb8 5872 List APIs required
Shawn Walker <srw@sun.com>
parents: 1516
diff changeset
  3368
        def get_installed_pubs(self):
00a5b4d54eb8 5872 List APIs required
Shawn Walker <srw@sun.com>
parents: 1516
diff changeset
  3369
                """Returns a set containing the prefixes of all publishers with
00a5b4d54eb8 5872 List APIs required
Shawn Walker <srw@sun.com>
parents: 1516
diff changeset
  3370
                installed packages."""
00a5b4d54eb8 5872 List APIs required
Shawn Walker <srw@sun.com>
parents: 1516
diff changeset
  3371
00a5b4d54eb8 5872 List APIs required
Shawn Walker <srw@sun.com>
parents: 1516
diff changeset
  3372
                cat = self.get_catalog(self.IMG_CATALOG_INSTALLED)
00a5b4d54eb8 5872 List APIs required
Shawn Walker <srw@sun.com>
parents: 1516
diff changeset
  3373
                return cat.publishers()
00a5b4d54eb8 5872 List APIs required
Shawn Walker <srw@sun.com>
parents: 1516
diff changeset
  3374
307
3a857fd8b787 787 optional dependencies are required
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 302
diff changeset
  3375
        def strtofmri(self, myfmri):
423
5c756997bf67 2253 With the latest build of the pkg repo, can't install packages from additional authorities
Danek Duvall <danek.duvall@sun.com>
parents: 419
diff changeset
  3376
                return pkg.fmri.PkgFmri(myfmri, self.attrs["Build-Release"])
307
3a857fd8b787 787 optional dependencies are required
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 302
diff changeset
  3377
526
8c243883ae41 822 Depot traceback on "pkgsend -s <server> open foo"
Dan Price <dp@eng.sun.com>
parents: 518
diff changeset
  3378
        def strtomatchingfmri(self, myfmri):
926
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 922
diff changeset
  3379
                return pkg.fmri.MatchingPkgFmri(myfmri,
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 922
diff changeset
  3380
                    self.attrs["Build-Release"])
526
8c243883ae41 822 Depot traceback on "pkgsend -s <server> open foo"
Dan Price <dp@eng.sun.com>
parents: 518
diff changeset
  3381
289
c2e63370fb2b 160 Make IPS cross-platform for use across other supported OS's
Tom Mueller <Tom.Mueller@Sun.COM>
parents: 285
diff changeset
  3382
        def get_user_by_name(self, name):
2003
16461c9acfee 1637 user action should be more robust against missing ftpusers file (and others)
Danek Duvall <danek.duvall@oracle.com>
parents: 1977
diff changeset
  3383
                uid = self._usersbyname.get(name, None)
16461c9acfee 1637 user action should be more robust against missing ftpusers file (and others)
Danek Duvall <danek.duvall@oracle.com>
parents: 1977
diff changeset
  3384
                if uid is not None:
16461c9acfee 1637 user action should be more robust against missing ftpusers file (and others)
Danek Duvall <danek.duvall@oracle.com>
parents: 1977
diff changeset
  3385
                        return uid
429
6c9cbb6e6600 983 pkg search returns just one action per package/token-type combo
Brock Pytlik <bpytlik@sun.com>
parents: 423
diff changeset
  3386
                return portable.get_user_by_name(name, self.root,
6c9cbb6e6600 983 pkg search returns just one action per package/token-type combo
Brock Pytlik <bpytlik@sun.com>
parents: 423
diff changeset
  3387
                    self.type != IMG_USER)
173
da329417a206 18 Actions should use passwd and group databases from image, if possible
Danek Duvall <danek.duvall@sun.com>
parents: 172
diff changeset
  3388
339
d8e57580599b 1271 pkg verify tracebacks on files owned by my uid...
Danek Duvall <danek.duvall@sun.com>
parents: 331
diff changeset
  3389
        def get_name_by_uid(self, uid, returnuid = False):
173
da329417a206 18 Actions should use passwd and group databases from image, if possible
Danek Duvall <danek.duvall@sun.com>
parents: 172
diff changeset
  3390
                # XXX What to do about IMG_PARTIAL?
339
d8e57580599b 1271 pkg verify tracebacks on files owned by my uid...
Danek Duvall <danek.duvall@sun.com>
parents: 331
diff changeset
  3391
                try:
429
6c9cbb6e6600 983 pkg search returns just one action per package/token-type combo
Brock Pytlik <bpytlik@sun.com>
parents: 423
diff changeset
  3392
                        return portable.get_name_by_uid(uid, self.root,
339
d8e57580599b 1271 pkg verify tracebacks on files owned by my uid...
Danek Duvall <danek.duvall@sun.com>
parents: 331
diff changeset
  3393
                            self.type != IMG_USER)
d8e57580599b 1271 pkg verify tracebacks on files owned by my uid...
Danek Duvall <danek.duvall@sun.com>
parents: 331
diff changeset
  3394
                except KeyError:
d8e57580599b 1271 pkg verify tracebacks on files owned by my uid...
Danek Duvall <danek.duvall@sun.com>
parents: 331
diff changeset
  3395
                        if returnuid:
d8e57580599b 1271 pkg verify tracebacks on files owned by my uid...
Danek Duvall <danek.duvall@sun.com>
parents: 331
diff changeset
  3396
                                return uid
d8e57580599b 1271 pkg verify tracebacks on files owned by my uid...
Danek Duvall <danek.duvall@sun.com>
parents: 331
diff changeset
  3397
                        else:
d8e57580599b 1271 pkg verify tracebacks on files owned by my uid...
Danek Duvall <danek.duvall@sun.com>
parents: 331
diff changeset
  3398
                                raise
243
ca57127811b8 399 pkg list on explicit packages fails with no output, exit status of 1
Stephen Hahn <sch@Sun.COM>
parents: 239
diff changeset
  3399
289
c2e63370fb2b 160 Make IPS cross-platform for use across other supported OS's
Tom Mueller <Tom.Mueller@Sun.COM>
parents: 285
diff changeset
  3400
        def get_group_by_name(self, name):
2003
16461c9acfee 1637 user action should be more robust against missing ftpusers file (and others)
Danek Duvall <danek.duvall@oracle.com>
parents: 1977
diff changeset
  3401
                gid = self._groupsbyname.get(name, None)
16461c9acfee 1637 user action should be more robust against missing ftpusers file (and others)
Danek Duvall <danek.duvall@oracle.com>
parents: 1977
diff changeset
  3402
                if gid is not None:
16461c9acfee 1637 user action should be more robust against missing ftpusers file (and others)
Danek Duvall <danek.duvall@oracle.com>
parents: 1977
diff changeset
  3403
                        return gid
429
6c9cbb6e6600 983 pkg search returns just one action per package/token-type combo
Brock Pytlik <bpytlik@sun.com>
parents: 423
diff changeset
  3404
                return portable.get_group_by_name(name, self.root,
6c9cbb6e6600 983 pkg search returns just one action per package/token-type combo
Brock Pytlik <bpytlik@sun.com>
parents: 423
diff changeset
  3405
                    self.type != IMG_USER)
173
da329417a206 18 Actions should use passwd and group databases from image, if possible
Danek Duvall <danek.duvall@sun.com>
parents: 172
diff changeset
  3406
339
d8e57580599b 1271 pkg verify tracebacks on files owned by my uid...
Danek Duvall <danek.duvall@sun.com>
parents: 331
diff changeset
  3407
        def get_name_by_gid(self, gid, returngid = False):
d8e57580599b 1271 pkg verify tracebacks on files owned by my uid...
Danek Duvall <danek.duvall@sun.com>
parents: 331
diff changeset
  3408
                try:
429
6c9cbb6e6600 983 pkg search returns just one action per package/token-type combo
Brock Pytlik <bpytlik@sun.com>
parents: 423
diff changeset
  3409
                        return portable.get_name_by_gid(gid, self.root,
339
d8e57580599b 1271 pkg verify tracebacks on files owned by my uid...
Danek Duvall <danek.duvall@sun.com>
parents: 331
diff changeset
  3410
                            self.type != IMG_USER)
d8e57580599b 1271 pkg verify tracebacks on files owned by my uid...
Danek Duvall <danek.duvall@sun.com>
parents: 331
diff changeset
  3411
                except KeyError:
d8e57580599b 1271 pkg verify tracebacks on files owned by my uid...
Danek Duvall <danek.duvall@sun.com>
parents: 331
diff changeset
  3412
                        if returngid:
d8e57580599b 1271 pkg verify tracebacks on files owned by my uid...
Danek Duvall <danek.duvall@sun.com>
parents: 331
diff changeset
  3413
                                return gid
d8e57580599b 1271 pkg verify tracebacks on files owned by my uid...
Danek Duvall <danek.duvall@sun.com>
parents: 331
diff changeset
  3414
                        else:
d8e57580599b 1271 pkg verify tracebacks on files owned by my uid...
Danek Duvall <danek.duvall@sun.com>
parents: 331
diff changeset
  3415
                                raise
173
da329417a206 18 Actions should use passwd and group databases from image, if possible
Danek Duvall <danek.duvall@sun.com>
parents: 172
diff changeset
  3416
429
6c9cbb6e6600 983 pkg search returns just one action per package/token-type combo
Brock Pytlik <bpytlik@sun.com>
parents: 423
diff changeset
  3417
        def update_index_dir(self, postfix="index"):
6c9cbb6e6600 983 pkg search returns just one action per package/token-type combo
Brock Pytlik <bpytlik@sun.com>
parents: 423
diff changeset
  3418
                """Since the index directory will not reliably be updated when
6c9cbb6e6600 983 pkg search returns just one action per package/token-type combo
Brock Pytlik <bpytlik@sun.com>
parents: 423
diff changeset
  3419
                the image root is, this should be called prior to using the
6c9cbb6e6600 983 pkg search returns just one action per package/token-type combo
Brock Pytlik <bpytlik@sun.com>
parents: 423
diff changeset
  3420
                index directory.
6c9cbb6e6600 983 pkg search returns just one action per package/token-type combo
Brock Pytlik <bpytlik@sun.com>
parents: 423
diff changeset
  3421
                """
2144
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  3422
                if self.version == self.CURRENT_VERSION:
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  3423
                        self.index_dir = os.path.join(self.imgdir, "cache",
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  3424
                            postfix)
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  3425
                else:
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  3426
                        self.index_dir = os.path.join(self.imgdir, postfix)
429
6c9cbb6e6600 983 pkg search returns just one action per package/token-type combo
Brock Pytlik <bpytlik@sun.com>
parents: 423
diff changeset
  3427
251
6c3d70b74865 470 pkg image-update can fail under some conditions
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 243
diff changeset
  3428
        def cleanup_downloads(self):
388
5a08791fb814 2188 Client must fail gracefully when network timeout occurs
johansen <johansen@sun.com>
parents: 384
diff changeset
  3429
                """Clean up any downloads that were in progress but that
5a08791fb814 2188 Client must fail gracefully when network timeout occurs
johansen <johansen@sun.com>
parents: 384
diff changeset
  3430
                did not successfully finish."""
5a08791fb814 2188 Client must fail gracefully when network timeout occurs
johansen <johansen@sun.com>
parents: 384
diff changeset
  3431
2073
9fcacc9e5eaa 16998 transport should support publisher-specific write and read caches
Shawn Walker <shawn.walker@oracle.com>
parents: 2069
diff changeset
  3432
                shutil.rmtree(self._incoming_cache_dir, True)
388
5a08791fb814 2188 Client must fail gracefully when network timeout occurs
johansen <johansen@sun.com>
parents: 384
diff changeset
  3433
5a08791fb814 2188 Client must fail gracefully when network timeout occurs
johansen <johansen@sun.com>
parents: 384
diff changeset
  3434
        def cleanup_cached_content(self):
5a08791fb814 2188 Client must fail gracefully when network timeout occurs
johansen <johansen@sun.com>
parents: 384
diff changeset
  3435
                """Delete the directory that stores all of our cached
5a08791fb814 2188 Client must fail gracefully when network timeout occurs
johansen <johansen@sun.com>
parents: 384
diff changeset
  3436
                downloaded content.  This may take a while for a large
554
fe196874250d 3508 zone install should utilize/populate global zone d/l cache
Dan Price <dp@eng.sun.com>
parents: 552
diff changeset
  3437
                directory hierarchy.  Don't clean up caches if the
2148
5625d3707d5b 17424 zone cache usage needs adjustment for new image format
Shawn Walker <shawn.walker@oracle.com>
parents: 2144
diff changeset
  3438
                user overrode the underlying setting using PKG_CACHEDIR or
5625d3707d5b 17424 zone cache usage needs adjustment for new image format
Shawn Walker <shawn.walker@oracle.com>
parents: 2144
diff changeset
  3439
                PKG_CACHEROOT. """
388
5a08791fb814 2188 Client must fail gracefully when network timeout occurs
johansen <johansen@sun.com>
parents: 384
diff changeset
  3440
2097
068cc63b4d6e 17055 image configuration should use pkg.config classes
Shawn Walker <shawn.walker@oracle.com>
parents: 2092
diff changeset
  3441
                if self.cfg.get_policy(imageconfig.FLUSH_CONTENT_CACHE):
1431
62b6033670e4 10416 server catalog v1 support desired
Shawn Walker <srw@sun.com>
parents: 1402
diff changeset
  3442
                        logger.info("Deleting content cache")
2073
9fcacc9e5eaa 16998 transport should support publisher-specific write and read caches
Shawn Walker <shawn.walker@oracle.com>
parents: 2069
diff changeset
  3443
                        for path, readonly, pub in self.get_cachedirs():
2148
5625d3707d5b 17424 zone cache usage needs adjustment for new image format
Shawn Walker <shawn.walker@oracle.com>
parents: 2144
diff changeset
  3444
                                if readonly or (self.__user_cache_dir and
5625d3707d5b 17424 zone cache usage needs adjustment for new image format
Shawn Walker <shawn.walker@oracle.com>
parents: 2144
diff changeset
  3445
                                    path.startswith(self.__user_cache_dir)):
5625d3707d5b 17424 zone cache usage needs adjustment for new image format
Shawn Walker <shawn.walker@oracle.com>
parents: 2144
diff changeset
  3446
                                        continue
5625d3707d5b 17424 zone cache usage needs adjustment for new image format
Shawn Walker <shawn.walker@oracle.com>
parents: 2144
diff changeset
  3447
                                shutil.rmtree(path, True)
289
c2e63370fb2b 160 Make IPS cross-platform for use across other supported OS's
Tom Mueller <Tom.Mueller@Sun.COM>
parents: 285
diff changeset
  3448
2293
631000734928 3679 modified preserve=true files should be backed up during uninstall
Shawn Walker <shawn.walker@oracle.com>
parents: 2286
diff changeset
  3449
        def salvage(self, path):
631000734928 3679 modified preserve=true files should be backed up during uninstall
Shawn Walker <shawn.walker@oracle.com>
parents: 2286
diff changeset
  3450
                """Called when unexpected file or directory is found during
631000734928 3679 modified preserve=true files should be backed up during uninstall
Shawn Walker <shawn.walker@oracle.com>
parents: 2286
diff changeset
  3451
                package operations; returns a tuple of the path of the salvage
631000734928 3679 modified preserve=true files should be backed up during uninstall
Shawn Walker <shawn.walker@oracle.com>
parents: 2286
diff changeset
  3452
                directory where the item was stored and the new path of the
631000734928 3679 modified preserve=true files should be backed up during uninstall
Shawn Walker <shawn.walker@oracle.com>
parents: 2286
diff changeset
  3453
                salvaged item.  path is rooted in /...."""
631000734928 3679 modified preserve=true files should be backed up during uninstall
Shawn Walker <shawn.walker@oracle.com>
parents: 2286
diff changeset
  3454
1859
6e6e866921e7 529 client can traceback with EBUSY during action removal
Shawn Walker <shawn.walker@oracle.com>
parents: 1842
diff changeset
  3455
                # This ensures that if the path is already rooted in the image,
6e6e866921e7 529 client can traceback with EBUSY during action removal
Shawn Walker <shawn.walker@oracle.com>
parents: 1842
diff changeset
  3456
                # that it will be stored in lost+found (due to os.path.join
6e6e866921e7 529 client can traceback with EBUSY during action removal
Shawn Walker <shawn.walker@oracle.com>
parents: 1842
diff changeset
  3457
                # behaviour with absolute path components).
6e6e866921e7 529 client can traceback with EBUSY during action removal
Shawn Walker <shawn.walker@oracle.com>
parents: 1842
diff changeset
  3458
                if path.startswith(self.root):
6e6e866921e7 529 client can traceback with EBUSY during action removal
Shawn Walker <shawn.walker@oracle.com>
parents: 1842
diff changeset
  3459
                        path = path.replace(self.root, "", 1)
6e6e866921e7 529 client can traceback with EBUSY during action removal
Shawn Walker <shawn.walker@oracle.com>
parents: 1842
diff changeset
  3460
6e6e866921e7 529 client can traceback with EBUSY during action removal
Shawn Walker <shawn.walker@oracle.com>
parents: 1842
diff changeset
  3461
                if os.path.isabs(path):
6e6e866921e7 529 client can traceback with EBUSY during action removal
Shawn Walker <shawn.walker@oracle.com>
parents: 1842
diff changeset
  3462
                        # If for some reason the path wasn't rooted in the
6e6e866921e7 529 client can traceback with EBUSY during action removal
Shawn Walker <shawn.walker@oracle.com>
parents: 1842
diff changeset
  3463
                        # image, but it is an absolute one, then strip the
6e6e866921e7 529 client can traceback with EBUSY during action removal
Shawn Walker <shawn.walker@oracle.com>
parents: 1842
diff changeset
  3464
                        # absolute part so that it will be stored in lost+found
6e6e866921e7 529 client can traceback with EBUSY during action removal
Shawn Walker <shawn.walker@oracle.com>
parents: 1842
diff changeset
  3465
                        # (due to os.path.join behaviour with absolute path
6e6e866921e7 529 client can traceback with EBUSY during action removal
Shawn Walker <shawn.walker@oracle.com>
parents: 1842
diff changeset
  3466
                        # components).
6e6e866921e7 529 client can traceback with EBUSY during action removal
Shawn Walker <shawn.walker@oracle.com>
parents: 1842
diff changeset
  3467
                        path = os.path.splitdrive(path)[-1].lstrip(os.path.sep)
6e6e866921e7 529 client can traceback with EBUSY during action removal
Shawn Walker <shawn.walker@oracle.com>
parents: 1842
diff changeset
  3468
1402
c0fb578f911a 11384 cascading failure hides exception during image creation
Shawn Walker <srw@sun.com>
parents: 1370
diff changeset
  3469
                sdir = os.path.normpath(
c0fb578f911a 11384 cascading failure hides exception during image creation
Shawn Walker <srw@sun.com>
parents: 1370
diff changeset
  3470
                    os.path.join(self.imgdir, "lost+found",
c0fb578f911a 11384 cascading failure hides exception during image creation
Shawn Walker <srw@sun.com>
parents: 1370
diff changeset
  3471
                    path + "-" + time.strftime("%Y%m%dT%H%M%SZ")))
c0fb578f911a 11384 cascading failure hides exception during image creation
Shawn Walker <srw@sun.com>
parents: 1370
diff changeset
  3472
c0fb578f911a 11384 cascading failure hides exception during image creation
Shawn Walker <srw@sun.com>
parents: 1370
diff changeset
  3473
                parent = os.path.dirname(sdir)
c0fb578f911a 11384 cascading failure hides exception during image creation
Shawn Walker <srw@sun.com>
parents: 1370
diff changeset
  3474
                if not os.path.exists(parent):
2144
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  3475
                        misc.makedirs(parent)
2293
631000734928 3679 modified preserve=true files should be backed up during uninstall
Shawn Walker <shawn.walker@oracle.com>
parents: 2286
diff changeset
  3476
631000734928 3679 modified preserve=true files should be backed up during uninstall
Shawn Walker <shawn.walker@oracle.com>
parents: 2286
diff changeset
  3477
                orig = os.path.normpath(os.path.join(self.root, path))
631000734928 3679 modified preserve=true files should be backed up during uninstall
Shawn Walker <shawn.walker@oracle.com>
parents: 2286
diff changeset
  3478
                shutil.move(orig, sdir)
631000734928 3679 modified preserve=true files should be backed up during uninstall
Shawn Walker <shawn.walker@oracle.com>
parents: 2286
diff changeset
  3479
                return sdir, os.path.join(sdir, sdir)
1402
c0fb578f911a 11384 cascading failure hides exception during image creation
Shawn Walker <srw@sun.com>
parents: 1370
diff changeset
  3480
c0fb578f911a 11384 cascading failure hides exception during image creation
Shawn Walker <srw@sun.com>
parents: 1370
diff changeset
  3481
        def temporary_dir(self):
2205
53d0be594162 3822 image plans should prevent conflicting actions from being installed
Danek Duvall <danek.duvall@oracle.com>
parents: 2200
diff changeset
  3482
                """Create a temp directory under the image directory for various
53d0be594162 3822 image plans should prevent conflicting actions from being installed
Danek Duvall <danek.duvall@oracle.com>
parents: 2200
diff changeset
  3483
                purposes.  If the process is unable to create a directory in the
53d0be594162 3822 image plans should prevent conflicting actions from being installed
Danek Duvall <danek.duvall@oracle.com>
parents: 2200
diff changeset
  3484
                image's temporary directory, a replacement location is found."""
53d0be594162 3822 image plans should prevent conflicting actions from being installed
Danek Duvall <danek.duvall@oracle.com>
parents: 2200
diff changeset
  3485
53d0be594162 3822 image plans should prevent conflicting actions from being installed
Danek Duvall <danek.duvall@oracle.com>
parents: 2200
diff changeset
  3486
                try:
53d0be594162 3822 image plans should prevent conflicting actions from being installed
Danek Duvall <danek.duvall@oracle.com>
parents: 2200
diff changeset
  3487
                        misc.makedirs(self.__tmpdir)
53d0be594162 3822 image plans should prevent conflicting actions from being installed
Danek Duvall <danek.duvall@oracle.com>
parents: 2200
diff changeset
  3488
                except (apx.PermissionsException,
53d0be594162 3822 image plans should prevent conflicting actions from being installed
Danek Duvall <danek.duvall@oracle.com>
parents: 2200
diff changeset
  3489
                    apx.ReadOnlyFileSystemException):
53d0be594162 3822 image plans should prevent conflicting actions from being installed
Danek Duvall <danek.duvall@oracle.com>
parents: 2200
diff changeset
  3490
                        self.__tmpdir = tempfile.mkdtemp(prefix="pkg5tmp-")
53d0be594162 3822 image plans should prevent conflicting actions from being installed
Danek Duvall <danek.duvall@oracle.com>
parents: 2200
diff changeset
  3491
                        atexit.register(shutil.rmtree,
53d0be594162 3822 image plans should prevent conflicting actions from being installed
Danek Duvall <danek.duvall@oracle.com>
parents: 2200
diff changeset
  3492
                            self.__tmpdir, ignore_errors=True)
53d0be594162 3822 image plans should prevent conflicting actions from being installed
Danek Duvall <danek.duvall@oracle.com>
parents: 2200
diff changeset
  3493
                        return self.temporary_dir()
53d0be594162 3822 image plans should prevent conflicting actions from being installed
Danek Duvall <danek.duvall@oracle.com>
parents: 2200
diff changeset
  3494
1402
c0fb578f911a 11384 cascading failure hides exception during image creation
Shawn Walker <srw@sun.com>
parents: 1370
diff changeset
  3495
                try:
2073
9fcacc9e5eaa 16998 transport should support publisher-specific write and read caches
Shawn Walker <shawn.walker@oracle.com>
parents: 2069
diff changeset
  3496
                        rval = tempfile.mkdtemp(dir=self.__tmpdir)
1463
0ef25025d601 12340 catalog storage performance regression
Shawn Walker <srw@sun.com>
parents: 1461
diff changeset
  3497
0ef25025d601 12340 catalog storage performance regression
Shawn Walker <srw@sun.com>
parents: 1461
diff changeset
  3498
                        # Force standard mode.
1507
b956ea23d3a6 11735 pkg history data files should not be executable
Richard Lowe <richlowe@richlowe.net>
parents: 1505
diff changeset
  3499
                        os.chmod(rval, misc.PKG_DIR_MODE)
1463
0ef25025d601 12340 catalog storage performance regression
Shawn Walker <srw@sun.com>
parents: 1461
diff changeset
  3500
                        return rval
1402
c0fb578f911a 11384 cascading failure hides exception during image creation
Shawn Walker <srw@sun.com>
parents: 1370
diff changeset
  3501
                except EnvironmentError, e:
2205
53d0be594162 3822 image plans should prevent conflicting actions from being installed
Danek Duvall <danek.duvall@oracle.com>
parents: 2200
diff changeset
  3502
                        if e.errno == errno.EACCES or e.errno == errno.EROFS:
53d0be594162 3822 image plans should prevent conflicting actions from being installed
Danek Duvall <danek.duvall@oracle.com>
parents: 2200
diff changeset
  3503
                                self.__tmpdir = tempfile.mkdtemp(prefix="pkg5tmp-")
53d0be594162 3822 image plans should prevent conflicting actions from being installed
Danek Duvall <danek.duvall@oracle.com>
parents: 2200
diff changeset
  3504
                                atexit.register(shutil.rmtree,
53d0be594162 3822 image plans should prevent conflicting actions from being installed
Danek Duvall <danek.duvall@oracle.com>
parents: 2200
diff changeset
  3505
                                    self.__tmpdir, ignore_errors=True)
53d0be594162 3822 image plans should prevent conflicting actions from being installed
Danek Duvall <danek.duvall@oracle.com>
parents: 2200
diff changeset
  3506
                                return self.temporary_dir()
2073
9fcacc9e5eaa 16998 transport should support publisher-specific write and read caches
Shawn Walker <shawn.walker@oracle.com>
parents: 2069
diff changeset
  3507
                        raise apx._convert_error(e)
251
6c3d70b74865 470 pkg image-update can fail under some conditions
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 243
diff changeset
  3508
2205
53d0be594162 3822 image plans should prevent conflicting actions from being installed
Danek Duvall <danek.duvall@oracle.com>
parents: 2200
diff changeset
  3509
        def temporary_file(self, close=True):
53d0be594162 3822 image plans should prevent conflicting actions from being installed
Danek Duvall <danek.duvall@oracle.com>
parents: 2200
diff changeset
  3510
                """Create a temporary file under the image directory for various
53d0be594162 3822 image plans should prevent conflicting actions from being installed
Danek Duvall <danek.duvall@oracle.com>
parents: 2200
diff changeset
  3511
                purposes.  If 'close' is True, close the file descriptor;
53d0be594162 3822 image plans should prevent conflicting actions from being installed
Danek Duvall <danek.duvall@oracle.com>
parents: 2200
diff changeset
  3512
                otherwise leave it open.  If the process is unable to create a
53d0be594162 3822 image plans should prevent conflicting actions from being installed
Danek Duvall <danek.duvall@oracle.com>
parents: 2200
diff changeset
  3513
                file in the image's temporary directory, a replacement is
53d0be594162 3822 image plans should prevent conflicting actions from being installed
Danek Duvall <danek.duvall@oracle.com>
parents: 2200
diff changeset
  3514
                found."""
53d0be594162 3822 image plans should prevent conflicting actions from being installed
Danek Duvall <danek.duvall@oracle.com>
parents: 2200
diff changeset
  3515
53d0be594162 3822 image plans should prevent conflicting actions from being installed
Danek Duvall <danek.duvall@oracle.com>
parents: 2200
diff changeset
  3516
                try:
53d0be594162 3822 image plans should prevent conflicting actions from being installed
Danek Duvall <danek.duvall@oracle.com>
parents: 2200
diff changeset
  3517
                        misc.makedirs(self.__tmpdir)
53d0be594162 3822 image plans should prevent conflicting actions from being installed
Danek Duvall <danek.duvall@oracle.com>
parents: 2200
diff changeset
  3518
                except (apx.PermissionsException,
53d0be594162 3822 image plans should prevent conflicting actions from being installed
Danek Duvall <danek.duvall@oracle.com>
parents: 2200
diff changeset
  3519
                    apx.ReadOnlyFileSystemException):
53d0be594162 3822 image plans should prevent conflicting actions from being installed
Danek Duvall <danek.duvall@oracle.com>
parents: 2200
diff changeset
  3520
                        self.__tmpdir = tempfile.mkdtemp(prefix="pkg5tmp-")
53d0be594162 3822 image plans should prevent conflicting actions from being installed
Danek Duvall <danek.duvall@oracle.com>
parents: 2200
diff changeset
  3521
                        atexit.register(shutil.rmtree,
53d0be594162 3822 image plans should prevent conflicting actions from being installed
Danek Duvall <danek.duvall@oracle.com>
parents: 2200
diff changeset
  3522
                            self.__tmpdir, ignore_errors=True)
53d0be594162 3822 image plans should prevent conflicting actions from being installed
Danek Duvall <danek.duvall@oracle.com>
parents: 2200
diff changeset
  3523
                        return self.temporary_file(close=close)
53d0be594162 3822 image plans should prevent conflicting actions from being installed
Danek Duvall <danek.duvall@oracle.com>
parents: 2200
diff changeset
  3524
1402
c0fb578f911a 11384 cascading failure hides exception during image creation
Shawn Walker <srw@sun.com>
parents: 1370
diff changeset
  3525
                try:
2073
9fcacc9e5eaa 16998 transport should support publisher-specific write and read caches
Shawn Walker <shawn.walker@oracle.com>
parents: 2069
diff changeset
  3526
                        fd, name = tempfile.mkstemp(dir=self.__tmpdir)
2205
53d0be594162 3822 image plans should prevent conflicting actions from being installed
Danek Duvall <danek.duvall@oracle.com>
parents: 2200
diff changeset
  3527
                        if close:
53d0be594162 3822 image plans should prevent conflicting actions from being installed
Danek Duvall <danek.duvall@oracle.com>
parents: 2200
diff changeset
  3528
                                os.close(fd)
1402
c0fb578f911a 11384 cascading failure hides exception during image creation
Shawn Walker <srw@sun.com>
parents: 1370
diff changeset
  3529
                except EnvironmentError, e:
2205
53d0be594162 3822 image plans should prevent conflicting actions from being installed
Danek Duvall <danek.duvall@oracle.com>
parents: 2200
diff changeset
  3530
                        if e.errno == errno.EACCES or e.errno == errno.EROFS:
53d0be594162 3822 image plans should prevent conflicting actions from being installed
Danek Duvall <danek.duvall@oracle.com>
parents: 2200
diff changeset
  3531
                                self.__tmpdir = tempfile.mkdtemp(prefix="pkg5tmp-")
53d0be594162 3822 image plans should prevent conflicting actions from being installed
Danek Duvall <danek.duvall@oracle.com>
parents: 2200
diff changeset
  3532
                                atexit.register(shutil.rmtree,
53d0be594162 3822 image plans should prevent conflicting actions from being installed
Danek Duvall <danek.duvall@oracle.com>
parents: 2200
diff changeset
  3533
                                    self.__tmpdir, ignore_errors=True)
53d0be594162 3822 image plans should prevent conflicting actions from being installed
Danek Duvall <danek.duvall@oracle.com>
parents: 2200
diff changeset
  3534
                                return self.temporary_file(close=close)
2073
9fcacc9e5eaa 16998 transport should support publisher-specific write and read caches
Shawn Walker <shawn.walker@oracle.com>
parents: 2069
diff changeset
  3535
                        raise apx._convert_error(e)
2205
53d0be594162 3822 image plans should prevent conflicting actions from being installed
Danek Duvall <danek.duvall@oracle.com>
parents: 2200
diff changeset
  3536
53d0be594162 3822 image plans should prevent conflicting actions from being installed
Danek Duvall <danek.duvall@oracle.com>
parents: 2200
diff changeset
  3537
                if close:
53d0be594162 3822 image plans should prevent conflicting actions from being installed
Danek Duvall <danek.duvall@oracle.com>
parents: 2200
diff changeset
  3538
                        return name
53d0be594162 3822 image plans should prevent conflicting actions from being installed
Danek Duvall <danek.duvall@oracle.com>
parents: 2200
diff changeset
  3539
                else:
53d0be594162 3822 image plans should prevent conflicting actions from being installed
Danek Duvall <danek.duvall@oracle.com>
parents: 2200
diff changeset
  3540
                        return fd, name
462
910600c14093 45 "move" action for files that are renamed, but must be preserved
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 461
diff changeset
  3541
1352
5c92c9d342ef 11065 client v1 catalog support for v0 catalogs
Shawn Walker <srw@sun.com>
parents: 1328
diff changeset
  3542
        def __filter_install_matches(self, matches):
988
a851ba83a5aa 6654 pkg list state incorrect after publisher removal when another publisher has it
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 964
diff changeset
  3543
                """Attempts to eliminate redundant matches found during
a851ba83a5aa 6654 pkg list state incorrect after publisher removal when another publisher has it
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 964
diff changeset
  3544
                packaging operations:
a851ba83a5aa 6654 pkg list state incorrect after publisher removal when another publisher has it
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 964
diff changeset
  3545
a851ba83a5aa 6654 pkg list state incorrect after publisher removal when another publisher has it
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 964
diff changeset
  3546
                    * First, stems of installed packages for publishers that
a851ba83a5aa 6654 pkg list state incorrect after publisher removal when another publisher has it
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 964
diff changeset
  3547
                      are now unknown (no longer present in the image
a851ba83a5aa 6654 pkg list state incorrect after publisher removal when another publisher has it
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 964
diff changeset
  3548
                      configuration) are dropped.
a851ba83a5aa 6654 pkg list state incorrect after publisher removal when another publisher has it
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 964
diff changeset
  3549
a851ba83a5aa 6654 pkg list state incorrect after publisher removal when another publisher has it
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 964
diff changeset
  3550
                    * Second, if multiple matches are still present, stems of
a851ba83a5aa 6654 pkg list state incorrect after publisher removal when another publisher has it
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 964
diff changeset
  3551
                      of installed packages, that are not presently in the
a851ba83a5aa 6654 pkg list state incorrect after publisher removal when another publisher has it
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 964
diff changeset
  3552
                      corresponding publisher's catalog, are dropped.
a851ba83a5aa 6654 pkg list state incorrect after publisher removal when another publisher has it
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 964
diff changeset
  3553
a851ba83a5aa 6654 pkg list state incorrect after publisher removal when another publisher has it
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 964
diff changeset
  3554
                    * Finally, if multiple matches are still present, all
a851ba83a5aa 6654 pkg list state incorrect after publisher removal when another publisher has it
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 964
diff changeset
  3555
                      stems except for those in state PKG_STATE_INSTALLED are
a851ba83a5aa 6654 pkg list state incorrect after publisher removal when another publisher has it
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 964
diff changeset
  3556
                      dropped.
a851ba83a5aa 6654 pkg list state incorrect after publisher removal when another publisher has it
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 964
diff changeset
  3557
a851ba83a5aa 6654 pkg list state incorrect after publisher removal when another publisher has it
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 964
diff changeset
  3558
                Returns a list of the filtered matches, along with a dict of
1352
5c92c9d342ef 11065 client v1 catalog support for v0 catalogs
Shawn Walker <srw@sun.com>
parents: 1328
diff changeset
  3559
                their unique names."""
988
a851ba83a5aa 6654 pkg list state incorrect after publisher removal when another publisher has it
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 964
diff changeset
  3560
a851ba83a5aa 6654 pkg list state incorrect after publisher removal when another publisher has it
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 964
diff changeset
  3561
                olist = []
1461
fdf40c8c6765 820 Need a way to obsolete packages
Danek Duvall <danek.duvall@sun.com>
parents: 1449
diff changeset
  3562
                onames = set()
fdf40c8c6765 820 Need a way to obsolete packages
Danek Duvall <danek.duvall@sun.com>
parents: 1449
diff changeset
  3563
988
a851ba83a5aa 6654 pkg list state incorrect after publisher removal when another publisher has it
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 964
diff changeset
  3564
                # First eliminate any duplicate matches that are for unknown
a851ba83a5aa 6654 pkg list state incorrect after publisher removal when another publisher has it
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 964
diff changeset
  3565
                # publishers (publishers which have been removed from the image
a851ba83a5aa 6654 pkg list state incorrect after publisher removal when another publisher has it
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 964
diff changeset
  3566
                # configuration).
1352
5c92c9d342ef 11065 client v1 catalog support for v0 catalogs
Shawn Walker <srw@sun.com>
parents: 1328
diff changeset
  3567
                publist = set(p.prefix for p in self.get_publishers().values())
5c92c9d342ef 11065 client v1 catalog support for v0 catalogs
Shawn Walker <srw@sun.com>
parents: 1328
diff changeset
  3568
                for m, st in matches:
5c92c9d342ef 11065 client v1 catalog support for v0 catalogs
Shawn Walker <srw@sun.com>
parents: 1328
diff changeset
  3569
                        if m.publisher in publist:
1461
fdf40c8c6765 820 Need a way to obsolete packages
Danek Duvall <danek.duvall@sun.com>
parents: 1449
diff changeset
  3570
                                onames.add(m.get_pkg_stem())
1352
5c92c9d342ef 11065 client v1 catalog support for v0 catalogs
Shawn Walker <srw@sun.com>
parents: 1328
diff changeset
  3571
                                olist.append((m, st))
988
a851ba83a5aa 6654 pkg list state incorrect after publisher removal when another publisher has it
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 964
diff changeset
  3572
1352
5c92c9d342ef 11065 client v1 catalog support for v0 catalogs
Shawn Walker <srw@sun.com>
parents: 1328
diff changeset
  3573
                # Next, if there are still multiple matches, eliminate matches
5c92c9d342ef 11065 client v1 catalog support for v0 catalogs
Shawn Walker <srw@sun.com>
parents: 1328
diff changeset
  3574
                # belonging to publishers that no longer have the FMRI in their
988
a851ba83a5aa 6654 pkg list state incorrect after publisher removal when another publisher has it
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 964
diff changeset
  3575
                # catalog.
a851ba83a5aa 6654 pkg list state incorrect after publisher removal when another publisher has it
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 964
diff changeset
  3576
                found_state = False
a851ba83a5aa 6654 pkg list state incorrect after publisher removal when another publisher has it
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 964
diff changeset
  3577
                if len(onames) > 1:
a851ba83a5aa 6654 pkg list state incorrect after publisher removal when another publisher has it
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 964
diff changeset
  3578
                        mlist = []
1461
fdf40c8c6765 820 Need a way to obsolete packages
Danek Duvall <danek.duvall@sun.com>
parents: 1449
diff changeset
  3579
                        mnames = set()
1352
5c92c9d342ef 11065 client v1 catalog support for v0 catalogs
Shawn Walker <srw@sun.com>
parents: 1328
diff changeset
  3580
                        for m, st in olist:
5c92c9d342ef 11065 client v1 catalog support for v0 catalogs
Shawn Walker <srw@sun.com>
parents: 1328
diff changeset
  3581
                                if not st["in_catalog"]:
5c92c9d342ef 11065 client v1 catalog support for v0 catalogs
Shawn Walker <srw@sun.com>
parents: 1328
diff changeset
  3582
                                        continue
5c92c9d342ef 11065 client v1 catalog support for v0 catalogs
Shawn Walker <srw@sun.com>
parents: 1328
diff changeset
  3583
                                if st["state"] == self.PKG_STATE_INSTALLED:
5c92c9d342ef 11065 client v1 catalog support for v0 catalogs
Shawn Walker <srw@sun.com>
parents: 1328
diff changeset
  3584
                                        found_state = True
1461
fdf40c8c6765 820 Need a way to obsolete packages
Danek Duvall <danek.duvall@sun.com>
parents: 1449
diff changeset
  3585
                                mnames.add(m.get_pkg_stem())
1352
5c92c9d342ef 11065 client v1 catalog support for v0 catalogs
Shawn Walker <srw@sun.com>
parents: 1328
diff changeset
  3586
                                mlist.append((m, st))
988
a851ba83a5aa 6654 pkg list state incorrect after publisher removal when another publisher has it
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 964
diff changeset
  3587
                        olist = mlist
a851ba83a5aa 6654 pkg list state incorrect after publisher removal when another publisher has it
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 964
diff changeset
  3588
                        onames = mnames
a851ba83a5aa 6654 pkg list state incorrect after publisher removal when another publisher has it
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 964
diff changeset
  3589
1461
fdf40c8c6765 820 Need a way to obsolete packages
Danek Duvall <danek.duvall@sun.com>
parents: 1449
diff changeset
  3590
                # Finally, if there are still multiple matches, and a known
1352
5c92c9d342ef 11065 client v1 catalog support for v0 catalogs
Shawn Walker <srw@sun.com>
parents: 1328
diff changeset
  3591
                # stem is installed, then eliminate any stems that do not
5c92c9d342ef 11065 client v1 catalog support for v0 catalogs
Shawn Walker <srw@sun.com>
parents: 1328
diff changeset
  3592
                # have an installed version.
988
a851ba83a5aa 6654 pkg list state incorrect after publisher removal when another publisher has it
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 964
diff changeset
  3593
                if found_state and len(onames) > 1:
a851ba83a5aa 6654 pkg list state incorrect after publisher removal when another publisher has it
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 964
diff changeset
  3594
                        mlist = []
1461
fdf40c8c6765 820 Need a way to obsolete packages
Danek Duvall <danek.duvall@sun.com>
parents: 1449
diff changeset
  3595
                        mnames = set()
1352
5c92c9d342ef 11065 client v1 catalog support for v0 catalogs
Shawn Walker <srw@sun.com>
parents: 1328
diff changeset
  3596
                        for m, st in olist:
1463
0ef25025d601 12340 catalog storage performance regression
Shawn Walker <srw@sun.com>
parents: 1461
diff changeset
  3597
                                if st["state"] == self.PKG_STATE_INSTALLED:
1461
fdf40c8c6765 820 Need a way to obsolete packages
Danek Duvall <danek.duvall@sun.com>
parents: 1449
diff changeset
  3598
                                        mnames.add(m.get_pkg_stem())
1352
5c92c9d342ef 11065 client v1 catalog support for v0 catalogs
Shawn Walker <srw@sun.com>
parents: 1328
diff changeset
  3599
                                        mlist.append((m, st))
988
a851ba83a5aa 6654 pkg list state incorrect after publisher removal when another publisher has it
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 964
diff changeset
  3600
                        olist = mlist
a851ba83a5aa 6654 pkg list state incorrect after publisher removal when another publisher has it
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 964
diff changeset
  3601
                        onames = mnames
a851ba83a5aa 6654 pkg list state incorrect after publisher removal when another publisher has it
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 964
diff changeset
  3602
a851ba83a5aa 6654 pkg list state incorrect after publisher removal when another publisher has it
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 964
diff changeset
  3603
                return olist, onames
a851ba83a5aa 6654 pkg list state incorrect after publisher removal when another publisher has it
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 964
diff changeset
  3604
2339
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2335
diff changeset
  3605
        def avoid_pkgs(self, pat_list, progtrack, check_cancel):
2228
5319ee47781d 2774 new depend action behavior: follow if possible
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2219
diff changeset
  3606
                """Avoid the specified packages... use pattern matching on
5319ee47781d 2774 new depend action behavior: follow if possible
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2219
diff changeset
  3607
                names; ignore versions."""
5319ee47781d 2774 new depend action behavior: follow if possible
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2219
diff changeset
  3608
5319ee47781d 2774 new depend action behavior: follow if possible
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2219
diff changeset
  3609
                with self.locked_op("avoid"):
2339
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2335
diff changeset
  3610
                        ip = imageplan.ImagePlan(self, progtrack, check_cancel,
2228
5319ee47781d 2774 new depend action behavior: follow if possible
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2219
diff changeset
  3611
                            noexecute=False)
5319ee47781d 2774 new depend action behavior: follow if possible
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2219
diff changeset
  3612
5319ee47781d 2774 new depend action behavior: follow if possible
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2219
diff changeset
  3613
                        self._avoid_set_save(self.avoid_set_get() |
5319ee47781d 2774 new depend action behavior: follow if possible
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2219
diff changeset
  3614
                            set(ip.match_user_stems(pat_list, ip.MATCH_UNINSTALLED)))
5319ee47781d 2774 new depend action behavior: follow if possible
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2219
diff changeset
  3615
2339
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2335
diff changeset
  3616
        def unavoid_pkgs(self, pat_list, progtrack, check_cancel):
2228
5319ee47781d 2774 new depend action behavior: follow if possible
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2219
diff changeset
  3617
                """Unavoid the specified packages... use pattern matching on
5319ee47781d 2774 new depend action behavior: follow if possible
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2219
diff changeset
  3618
                names; ignore versions."""
5319ee47781d 2774 new depend action behavior: follow if possible
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2219
diff changeset
  3619
5319ee47781d 2774 new depend action behavior: follow if possible
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2219
diff changeset
  3620
                with self.locked_op("unavoid"):
5319ee47781d 2774 new depend action behavior: follow if possible
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2219
diff changeset
  3621
2339
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2335
diff changeset
  3622
                        ip = imageplan.ImagePlan(self, progtrack, check_cancel,
2228
5319ee47781d 2774 new depend action behavior: follow if possible
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2219
diff changeset
  3623
                            noexecute=False)
5319ee47781d 2774 new depend action behavior: follow if possible
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2219
diff changeset
  3624
                        unavoid_set = set(ip.match_user_stems(pat_list, ip.MATCH_ALL))
5319ee47781d 2774 new depend action behavior: follow if possible
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2219
diff changeset
  3625
                        current_set = self.avoid_set_get()
5319ee47781d 2774 new depend action behavior: follow if possible
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2219
diff changeset
  3626
                        not_avoided = unavoid_set - current_set
5319ee47781d 2774 new depend action behavior: follow if possible
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2219
diff changeset
  3627
                        if not_avoided:
5319ee47781d 2774 new depend action behavior: follow if possible
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2219
diff changeset
  3628
                                raise apx.PlanCreationException(not_avoided=not_avoided)
5319ee47781d 2774 new depend action behavior: follow if possible
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2219
diff changeset
  3629
5319ee47781d 2774 new depend action behavior: follow if possible
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2219
diff changeset
  3630
                        would_install = [
5319ee47781d 2774 new depend action behavior: follow if possible
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2219
diff changeset
  3631
                            a
5319ee47781d 2774 new depend action behavior: follow if possible
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2219
diff changeset
  3632
                            for f, a in self.gen_tracked_stems()
5319ee47781d 2774 new depend action behavior: follow if possible
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2219
diff changeset
  3633
                            if a in unavoid_set
5319ee47781d 2774 new depend action behavior: follow if possible
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2219
diff changeset
  3634
                        ]
5319ee47781d 2774 new depend action behavior: follow if possible
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2219
diff changeset
  3635
5319ee47781d 2774 new depend action behavior: follow if possible
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2219
diff changeset
  3636
                        if would_install:
5319ee47781d 2774 new depend action behavior: follow if possible
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2219
diff changeset
  3637
                                raise apx.PlanCreationException(would_install=would_install)
5319ee47781d 2774 new depend action behavior: follow if possible
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2219
diff changeset
  3638
5319ee47781d 2774 new depend action behavior: follow if possible
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2219
diff changeset
  3639
                        self._avoid_set_save(current_set - unavoid_set)
5319ee47781d 2774 new depend action behavior: follow if possible
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2219
diff changeset
  3640
5319ee47781d 2774 new depend action behavior: follow if possible
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2219
diff changeset
  3641
        def get_avoid_dict(self):
5319ee47781d 2774 new depend action behavior: follow if possible
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2219
diff changeset
  3642
                """ return dict of lists (avoided stem, pkgs w/ group
5319ee47781d 2774 new depend action behavior: follow if possible
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2219
diff changeset
  3643
                dependencies on this pkg)"""
5319ee47781d 2774 new depend action behavior: follow if possible
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2219
diff changeset
  3644
                ret = dict((a, list()) for a in self.avoid_set_get())
5319ee47781d 2774 new depend action behavior: follow if possible
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2219
diff changeset
  3645
                for fmri, group in self.gen_tracked_stems():
5319ee47781d 2774 new depend action behavior: follow if possible
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2219
diff changeset
  3646
                        if group in ret:
5319ee47781d 2774 new depend action behavior: follow if possible
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2219
diff changeset
  3647
                                ret[group].append(fmri.pkg_name)
5319ee47781d 2774 new depend action behavior: follow if possible
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2219
diff changeset
  3648
                return ret
5319ee47781d 2774 new depend action behavior: follow if possible
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2219
diff changeset
  3649
2339
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2335
diff changeset
  3650
        def __call_imageplan_evaluate(self, ip):
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2335
diff changeset
  3651
                # A plan can be requested without actually performing an
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2335
diff changeset
  3652
                # operation on the image.
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2335
diff changeset
  3653
                if self.history.operation_name:
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2335
diff changeset
  3654
                        self.history.operation_start_state = ip.get_plan()
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2335
diff changeset
  3655
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2335
diff changeset
  3656
                try:
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2335
diff changeset
  3657
                        ip.evaluate()
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2335
diff changeset
  3658
                except apx.ConflictingActionErrors:
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2335
diff changeset
  3659
                        # Image plan evaluation can fail because of duplicate
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2335
diff changeset
  3660
                        # action discovery, but we still want to be able to
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2335
diff changeset
  3661
                        # display and log the solved FMRI changes.
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2335
diff changeset
  3662
                        self.imageplan = ip
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2335
diff changeset
  3663
                        if self.history.operation_name:
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2335
diff changeset
  3664
                                self.history.operation_end_state = \
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2335
diff changeset
  3665
                                    "Unevaluated: merged plan had errors\n" + \
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2335
diff changeset
  3666
                                    ip.get_plan(full=False)
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2335
diff changeset
  3667
                        raise
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2335
diff changeset
  3668
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2335
diff changeset
  3669
                self.imageplan = ip
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2335
diff changeset
  3670
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2335
diff changeset
  3671
                if self.history.operation_name:
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2335
diff changeset
  3672
                        self.history.operation_end_state = \
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2335
diff changeset
  3673
                            ip.get_plan(full=False)
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2335
diff changeset
  3674
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2335
diff changeset
  3675
        def __make_plan_common(self, _op, _progtrack, _check_cancel,
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2335
diff changeset
  3676
            _ip_mode, _noexecute, _ip_noop=False,
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2335
diff changeset
  3677
            **kwargs):
2089
c8b9d6341530 2775 pkg should provide a way to downgrade (reinstall) packages
Shawn Walker <shawn.walker@oracle.com>
parents: 2074
diff changeset
  3678
                """Private helper function to perform base plan creation and
c8b9d6341530 2775 pkg should provide a way to downgrade (reinstall) packages
Shawn Walker <shawn.walker@oracle.com>
parents: 2074
diff changeset
  3679
                cleanup.
1158
78582c4403a9 8616 operations should use same publisher when only non-preferred has package
Shawn Walker <srw@sun.com>
parents: 1143
diff changeset
  3680
                """
1710
139720e2e756 1668 image locking needed to prevent race conditions
Shawn Walker <srw@sun.com>
parents: 1688
diff changeset
  3681
1837
03aa2b10f29d 15169 image-update plans twice and keeps both
Shawn Walker <shawn.walker@oracle.com>
parents: 1832
diff changeset
  3682
                # Allow garbage collection of previous plan.
03aa2b10f29d 15169 image-update plans twice and keeps both
Shawn Walker <shawn.walker@oracle.com>
parents: 1832
diff changeset
  3683
                self.imageplan = None
03aa2b10f29d 15169 image-update plans twice and keeps both
Shawn Walker <shawn.walker@oracle.com>
parents: 1832
diff changeset
  3684
2339
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2335
diff changeset
  3685
                ip = imageplan.ImagePlan(self, _progtrack, _check_cancel,
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2335
diff changeset
  3686
                    noexecute=_noexecute, mode=_ip_mode)
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2335
diff changeset
  3687
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2335
diff changeset
  3688
                _progtrack.evaluate_start()
307
3a857fd8b787 787 optional dependencies are required
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 302
diff changeset
  3689
1710
139720e2e756 1668 image locking needed to prevent race conditions
Shawn Walker <srw@sun.com>
parents: 1688
diff changeset
  3690
                # Always start with most current (on-disk) state information.
139720e2e756 1668 image locking needed to prevent race conditions
Shawn Walker <srw@sun.com>
parents: 1688
diff changeset
  3691
                self.__init_catalogs()
139720e2e756 1668 image locking needed to prevent race conditions
Shawn Walker <srw@sun.com>
parents: 1688
diff changeset
  3692
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  3693
                try:
2219
60ad60f7592c 2152 standalone package support needed (on-disk format)
Shawn Walker <shawn.walker@oracle.com>
parents: 2205
diff changeset
  3694
                        try:
2339
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2335
diff changeset
  3695
                                if _ip_noop:
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2335
diff changeset
  3696
                                        ip.plan_noop()
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2335
diff changeset
  3697
                                elif _op in [
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2335
diff changeset
  3698
                                    pkgdefs.API_OP_ATTACH,
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2335
diff changeset
  3699
                                    pkgdefs.API_OP_DETACH,
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2335
diff changeset
  3700
                                    pkgdefs.API_OP_SYNC]:
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2335
diff changeset
  3701
                                        ip.plan_sync(**kwargs)
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2335
diff changeset
  3702
                                elif _op in [
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2335
diff changeset
  3703
                                    pkgdefs.API_OP_CHANGE_FACET,
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2335
diff changeset
  3704
                                    pkgdefs.API_OP_CHANGE_VARIANT]:
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2335
diff changeset
  3705
                                        ip.plan_change_varcets(**kwargs)
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2335
diff changeset
  3706
                                elif _op == pkgdefs.API_OP_INSTALL:
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2335
diff changeset
  3707
                                        ip.plan_install(**kwargs)
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2335
diff changeset
  3708
                                elif _op == pkgdefs.API_OP_REVERT:
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2335
diff changeset
  3709
                                        ip.plan_revert(**kwargs)
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2335
diff changeset
  3710
                                elif _op == pkgdefs.API_OP_UNINSTALL:
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2335
diff changeset
  3711
                                        ip.plan_uninstall(**kwargs)
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2335
diff changeset
  3712
                                elif _op == pkgdefs.API_OP_UPDATE:
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2335
diff changeset
  3713
                                        ip.plan_update(**kwargs)
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2335
diff changeset
  3714
                                else:
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2335
diff changeset
  3715
                                        raise RuntimeError(
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2335
diff changeset
  3716
                                            "Unknown api op: %s" % _op)
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2335
diff changeset
  3717
2219
60ad60f7592c 2152 standalone package support needed (on-disk format)
Shawn Walker <shawn.walker@oracle.com>
parents: 2205
diff changeset
  3718
                        except apx.ActionExecutionError, e:
60ad60f7592c 2152 standalone package support needed (on-disk format)
Shawn Walker <shawn.walker@oracle.com>
parents: 2205
diff changeset
  3719
                                raise
60ad60f7592c 2152 standalone package support needed (on-disk format)
Shawn Walker <shawn.walker@oracle.com>
parents: 2205
diff changeset
  3720
                        except pkg.actions.ActionError, e:
60ad60f7592c 2152 standalone package support needed (on-disk format)
Shawn Walker <shawn.walker@oracle.com>
parents: 2205
diff changeset
  3721
                                raise apx.InvalidPackageErrors([e])
60ad60f7592c 2152 standalone package support needed (on-disk format)
Shawn Walker <shawn.walker@oracle.com>
parents: 2205
diff changeset
  3722
                        except apx.ApiException:
60ad60f7592c 2152 standalone package support needed (on-disk format)
Shawn Walker <shawn.walker@oracle.com>
parents: 2205
diff changeset
  3723
                                raise
60ad60f7592c 2152 standalone package support needed (on-disk format)
Shawn Walker <shawn.walker@oracle.com>
parents: 2205
diff changeset
  3724
                        try:
60ad60f7592c 2152 standalone package support needed (on-disk format)
Shawn Walker <shawn.walker@oracle.com>
parents: 2205
diff changeset
  3725
                                self.__call_imageplan_evaluate(ip)
60ad60f7592c 2152 standalone package support needed (on-disk format)
Shawn Walker <shawn.walker@oracle.com>
parents: 2205
diff changeset
  3726
                        except apx.ActionExecutionError, e:
60ad60f7592c 2152 standalone package support needed (on-disk format)
Shawn Walker <shawn.walker@oracle.com>
parents: 2205
diff changeset
  3727
                                raise
60ad60f7592c 2152 standalone package support needed (on-disk format)
Shawn Walker <shawn.walker@oracle.com>
parents: 2205
diff changeset
  3728
                        except pkg.actions.ActionError, e:
60ad60f7592c 2152 standalone package support needed (on-disk format)
Shawn Walker <shawn.walker@oracle.com>
parents: 2205
diff changeset
  3729
                                raise apx.InvalidPackageErrors([e])
60ad60f7592c 2152 standalone package support needed (on-disk format)
Shawn Walker <shawn.walker@oracle.com>
parents: 2205
diff changeset
  3730
                finally:
60ad60f7592c 2152 standalone package support needed (on-disk format)
Shawn Walker <shawn.walker@oracle.com>
parents: 2205
diff changeset
  3731
                        self.__cleanup_alt_pkg_certs()
45
8a3f00dea14f catalog refresh; basic catalog listing; precise manifest pulls
Stephen Hahn <sch@sun.com>
parents: 39
diff changeset
  3732
2339
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2335
diff changeset
  3733
        def make_install_plan(self, op, progtrack, check_cancel, ip_mode,
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2335
diff changeset
  3734
            noexecute, pkgs_inst=None, reject_list=None):
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2335
diff changeset
  3735
                """Take a list of packages, specified in pkgs_inst, and attempt
2089
c8b9d6341530 2775 pkg should provide a way to downgrade (reinstall) packages
Shawn Walker <shawn.walker@oracle.com>
parents: 2074
diff changeset
  3736
                to assemble an appropriate image plan.  This is a helper
c8b9d6341530 2775 pkg should provide a way to downgrade (reinstall) packages
Shawn Walker <shawn.walker@oracle.com>
parents: 2074
diff changeset
  3737
                routine for some common operations in the client.
c8b9d6341530 2775 pkg should provide a way to downgrade (reinstall) packages
Shawn Walker <shawn.walker@oracle.com>
parents: 2074
diff changeset
  3738
                """
c8b9d6341530 2775 pkg should provide a way to downgrade (reinstall) packages
Shawn Walker <shawn.walker@oracle.com>
parents: 2074
diff changeset
  3739
2339
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2335
diff changeset
  3740
                self.__make_plan_common(op, progtrack, check_cancel,
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2335
diff changeset
  3741
                    ip_mode, noexecute, pkgs_inst=pkgs_inst,
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2335
diff changeset
  3742
                    reject_list=reject_list)
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2335
diff changeset
  3743
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2335
diff changeset
  3744
        def make_change_varcets_plan(self, op, progtrack, check_cancel,
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2335
diff changeset
  3745
            ip_mode, noexecute, facets=None, reject_list=None,
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2335
diff changeset
  3746
            variants=None):
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2335
diff changeset
  3747
                """Take a list of variants and/or facets and attempt to
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2335
diff changeset
  3748
                assemble an image plan which changes them.  This is a helper
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2335
diff changeset
  3749
                routine for some common operations in the client."""
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2335
diff changeset
  3750
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2335
diff changeset
  3751
                # compute dict of changing variants
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2335
diff changeset
  3752
                if variants:
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2335
diff changeset
  3753
                        new = set(variants.iteritems())
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2335
diff changeset
  3754
                        cur = set(self.cfg.variants.iteritems())
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2335
diff changeset
  3755
                        variants = dict(new - cur)
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2335
diff changeset
  3756
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2335
diff changeset
  3757
                self.__make_plan_common(op, progtrack, check_cancel, ip_mode,
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2335
diff changeset
  3758
                    noexecute, new_variants=variants, new_facets=facets,
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2335
diff changeset
  3759
                    reject_list=reject_list)
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2335
diff changeset
  3760
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2335
diff changeset
  3761
        def make_sync_plan(self, op, progtrack, check_cancel, ip_mode,
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2335
diff changeset
  3762
            noexecute, li_pkg_updates=True, reject_list=None):
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2335
diff changeset
  3763
                """Attempt to create an appropriate image plan to bring an
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2335
diff changeset
  3764
                image in sync with it's linked image constraints.  This is a
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2335
diff changeset
  3765
                helper routine for some common operations in the client."""
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2335
diff changeset
  3766
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2335
diff changeset
  3767
                self.__make_plan_common(op, progtrack, check_cancel, ip_mode,
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2335
diff changeset
  3768
                    noexecute, reject_list=reject_list,
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2335
diff changeset
  3769
                    li_pkg_updates=li_pkg_updates)
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2335
diff changeset
  3770
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2335
diff changeset
  3771
        def make_uninstall_plan(self, op, progtrack, check_cancel, ip_mode,
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2335
diff changeset
  3772
            noexecute, pkgs_to_uninstall, recursive_removal):
1505
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  3773
                """Create uninstall plan to remove the specified packages;
cc598d70bbbe 4425 pkg install should deal w/ complex dependency changes in one install
Bart Smaalders <Bart.Smaalders@Sun.COM>
parents: 1504
diff changeset
  3774
                do so recursively iff recursive_removal is set"""
565
1fb4f05220b9 3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents: 562
diff changeset
  3775
2339
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2335
diff changeset
  3776
                self.__make_plan_common(op, progtrack, check_cancel,
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2335
diff changeset
  3777
                    ip_mode, noexecute, pkgs_to_uninstall=pkgs_to_uninstall,
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2335
diff changeset
  3778
                    recursive_removal=recursive_removal)
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2335
diff changeset
  3779
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2335
diff changeset
  3780
        def make_update_plan(self, op, progtrack, check_cancel, ip_mode,
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2335
diff changeset
  3781
            noexecute, pkgs_update=None, reject_list=None):
2089
c8b9d6341530 2775 pkg should provide a way to downgrade (reinstall) packages
Shawn Walker <shawn.walker@oracle.com>
parents: 2074
diff changeset
  3782
                """Create a plan to update all packages or the specific ones as
c8b9d6341530 2775 pkg should provide a way to downgrade (reinstall) packages
Shawn Walker <shawn.walker@oracle.com>
parents: 2074
diff changeset
  3783
                far as possible.  This is a helper routine for some common
c8b9d6341530 2775 pkg should provide a way to downgrade (reinstall) packages
Shawn Walker <shawn.walker@oracle.com>
parents: 2074
diff changeset
  3784
                operations in the client.
c8b9d6341530 2775 pkg should provide a way to downgrade (reinstall) packages
Shawn Walker <shawn.walker@oracle.com>
parents: 2074
diff changeset
  3785
                """
c8b9d6341530 2775 pkg should provide a way to downgrade (reinstall) packages
Shawn Walker <shawn.walker@oracle.com>
parents: 2074
diff changeset
  3786
2339
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2335
diff changeset
  3787
                self.__make_plan_common(op, progtrack, check_cancel,
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2335
diff changeset
  3788
                    ip_mode, noexecute, pkgs_update=pkgs_update,
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2335
diff changeset
  3789
                    reject_list=reject_list)
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2335
diff changeset
  3790
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2335
diff changeset
  3791
        def make_revert_plan(self, op, progtrack, check_cancel, ip_mode,
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2335
diff changeset
  3792
            noexecute, args, tagged):
2200
155eda704b2f 16279 Need a way to revert certain editable files to a as-installed state
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2183
diff changeset
  3793
                """Revert the specified files, or all files tagged as specified
155eda704b2f 16279 Need a way to revert certain editable files to a as-installed state
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2183
diff changeset
  3794
                in args to their manifest definitions.
155eda704b2f 16279 Need a way to revert certain editable files to a as-installed state
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2183
diff changeset
  3795
                """
155eda704b2f 16279 Need a way to revert certain editable files to a as-installed state
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2183
diff changeset
  3796
2339
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2335
diff changeset
  3797
                self.__make_plan_common(op, progtrack, check_cancel,
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2335
diff changeset
  3798
                    ip_mode, noexecute, args=args, tagged=tagged)
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2335
diff changeset
  3799
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2335
diff changeset
  3800
        def make_noop_plan(self, op, progtrack, check_cancel, ip_mode,
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2335
diff changeset
  3801
            noexecute):
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2335
diff changeset
  3802
                """Create an image plan that doesn't update the image in any
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2335
diff changeset
  3803
                way."""
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2335
diff changeset
  3804
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2335
diff changeset
  3805
                self.__make_plan_common(op, progtrack, check_cancel,
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2335
diff changeset
  3806
                    ip_mode, noexecute, _ip_noop=True)
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2335
diff changeset
  3807
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2335
diff changeset
  3808
        def ipkg_is_up_to_date(self, check_cancel, noexecute,
996
31d152a5212b 7582 pkg set-publisher --no-refresh will delete catalogs
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 993
diff changeset
  3809
            refresh_allowed=True, progtrack=None):
1829
e581a205ec02 14907 references to old-style package names must be purged
Danek Duvall <danek.duvall@sun.com>
parents: 1801
diff changeset
  3810
                """Test whether the packaging system is updated to the latest
e581a205ec02 14907 references to old-style package names must be purged
Danek Duvall <danek.duvall@sun.com>
parents: 1801
diff changeset
  3811
                version known to be available for this image."""
1352
5c92c9d342ef 11065 client v1 catalog support for v0 catalogs
Shawn Walker <srw@sun.com>
parents: 1328
diff changeset
  3812
565
1fb4f05220b9 3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents: 562
diff changeset
  3813
                #
1fb4f05220b9 3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents: 562
diff changeset
  3814
                # This routine makes the distinction between the "target image",
1fb4f05220b9 3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents: 562
diff changeset
  3815
                # which will be altered, and the "running image", which is
926
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 922
diff changeset
  3816
                # to say whatever image appears to contain the version of the
565
1fb4f05220b9 3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents: 562
diff changeset
  3817
                # pkg command we're running.
1fb4f05220b9 3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents: 562
diff changeset
  3818
                #
1fb4f05220b9 3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents: 562
diff changeset
  3819
1fb4f05220b9 3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents: 562
diff changeset
  3820
                #
1fb4f05220b9 3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents: 562
diff changeset
  3821
                # There are two relevant cases here:
1fb4f05220b9 3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents: 562
diff changeset
  3822
                #     1) Packaging code and image we're updating are the same
2089
c8b9d6341530 2775 pkg should provide a way to downgrade (reinstall) packages
Shawn Walker <shawn.walker@oracle.com>
parents: 2074
diff changeset
  3823
                #        image.  (i.e. 'pkg update')
565
1fb4f05220b9 3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents: 562
diff changeset
  3824
                #
1fb4f05220b9 3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents: 562
diff changeset
  3825
                #     2) Packaging code's image and the image we're updating are
2089
c8b9d6341530 2775 pkg should provide a way to downgrade (reinstall) packages
Shawn Walker <shawn.walker@oracle.com>
parents: 2074
diff changeset
  3826
                #        different (i.e. 'pkg update -R')
565
1fb4f05220b9 3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents: 562
diff changeset
  3827
                #
1fb4f05220b9 3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents: 562
diff changeset
  3828
                # In general, we care about getting the user to run the
1fb4f05220b9 3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents: 562
diff changeset
  3829
                # most recent packaging code available for their build.  So,
1fb4f05220b9 3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents: 562
diff changeset
  3830
                # if we're not in the liveroot case, we create a new image
1fb4f05220b9 3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents: 562
diff changeset
  3831
                # which represents "/" on the system.
1fb4f05220b9 3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents: 562
diff changeset
  3832
                #
1fb4f05220b9 3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents: 562
diff changeset
  3833
625
e46b345645d6 3799 need to start progress tracker going early on
Brock Pytlik <bpytlik@sun.com>
parents: 621
diff changeset
  3834
                if not progtrack:
e46b345645d6 3799 need to start progress tracker going early on
Brock Pytlik <bpytlik@sun.com>
parents: 621
diff changeset
  3835
                        progtrack = progress.QuietProgressTracker()
565
1fb4f05220b9 3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents: 562
diff changeset
  3836
1fb4f05220b9 3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents: 562
diff changeset
  3837
                img = self
926
6ee411c9026a 5871 publisher apis desired
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 922
diff changeset
  3838
2144
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  3839
                if self.__cmddir and not img.is_liveroot():
565
1fb4f05220b9 3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents: 562
diff changeset
  3840
                        #
1fb4f05220b9 3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents: 562
diff changeset
  3841
                        # Find the path to ourselves, and use that
1fb4f05220b9 3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents: 562
diff changeset
  3842
                        # as a way to locate the image we're in.  It's
1fb4f05220b9 3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents: 562
diff changeset
  3843
                        # not perfect-- we could be in a developer's
1fb4f05220b9 3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents: 562
diff changeset
  3844
                        # workspace, for example.
1fb4f05220b9 3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents: 562
diff changeset
  3845
                        #
2144
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  3846
                        newimg = Image(self.__cmddir,
2158
5a688b5b92a3 15864 inferring image location from current working directory can be harmful
Shawn Walker <shawn.walker@oracle.com>
parents: 2154
diff changeset
  3847
                            allow_ondisk_upgrade=False, allow_ambiguous=True,
2339
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2335
diff changeset
  3848
                            progtrack=progtrack, cmdpath=self.cmdpath)
2144
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  3849
                        useimg = True
996
31d152a5212b 7582 pkg set-publisher --no-refresh will delete catalogs
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 993
diff changeset
  3850
                        if refresh_allowed:
31d152a5212b 7582 pkg set-publisher --no-refresh will delete catalogs
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 993
diff changeset
  3851
                                # If refreshing publisher metadata is allowed,
1829
e581a205ec02 14907 references to old-style package names must be purged
Danek Duvall <danek.duvall@sun.com>
parents: 1801
diff changeset
  3852
                                # then perform a refresh so that a new packaging
e581a205ec02 14907 references to old-style package names must be purged
Danek Duvall <danek.duvall@sun.com>
parents: 1801
diff changeset
  3853
                                # system package can be discovered.
2144
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  3854
                                newimg.lock(allow_unprivileged=True)
565
1fb4f05220b9 3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents: 562
diff changeset
  3855
                                try:
996
31d152a5212b 7582 pkg set-publisher --no-refresh will delete catalogs
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 993
diff changeset
  3856
                                        newimg.refresh_publishers(
31d152a5212b 7582 pkg set-publisher --no-refresh will delete catalogs
Shawn Walker <Shawn.Walker@Sun.COM>
parents: 993
diff changeset
  3857
                                            progtrack=progtrack)
2144
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  3858
                                except (apx.ImageFormatUpdateNeeded,
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  3859
                                    apx.PermissionsException):
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  3860
                                        # Can't use the image to perform an
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  3861
                                        # update check and it would be wrong
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  3862
                                        # to prevent the operation from
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  3863
                                        # continuing in these cases.
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  3864
                                        useimg = False
2073
9fcacc9e5eaa 16998 transport should support publisher-specific write and read caches
Shawn Walker <shawn.walker@oracle.com>
parents: 2069
diff changeset
  3865
                                except apx.CatalogRefreshException, cre:
1603
84bd53597209 13019 DeprecationWarnings seen after python 2.6 migration
Dan Price <dp@eng.sun.com>
parents: 1586
diff changeset
  3866
                                        cre.errmessage = \
1829
e581a205ec02 14907 references to old-style package names must be purged
Danek Duvall <danek.duvall@sun.com>
parents: 1801
diff changeset
  3867
                                            _("pkg(5) update check failed.")
565
1fb4f05220b9 3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents: 562
diff changeset
  3868
                                        raise
1710
139720e2e756 1668 image locking needed to prevent race conditions
Shawn Walker <srw@sun.com>
parents: 1688
diff changeset
  3869
                                finally:
139720e2e756 1668 image locking needed to prevent race conditions
Shawn Walker <srw@sun.com>
parents: 1688
diff changeset
  3870
                                        newimg.unlock()
139720e2e756 1668 image locking needed to prevent race conditions
Shawn Walker <srw@sun.com>
parents: 1688
diff changeset
  3871
2144
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  3872
                        if useimg:
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  3873
                                img = newimg
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  3874
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  3875
                # XXX call to progress tracker that the package is being
2ac203b826ab 7276 /var/pkg metadata needs reorg (looks busy)
Shawn Walker <shawn.walker@oracle.com>
parents: 2141
diff changeset
  3876
                # refreshed
2339
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2335
diff changeset
  3877
                img.make_install_plan(pkgdefs.API_OP_INSTALL, progtrack,
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2335
diff changeset
  3878
                    check_cancel, pkgdefs.API_STAGE_DEFAULT, noexecute,
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2335
diff changeset
  3879
                    pkgs_inst=["pkg:/package/pkg"])
565
1fb4f05220b9 3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents: 562
diff changeset
  3880
1fb4f05220b9 3443 An api needs to be provided for safe interaction of front-ends
Brock Pytlik <bpytlik@sun.com>
parents: 562
diff changeset
  3881
                return img.imageplan.nothingtodo()
2228
5319ee47781d 2774 new depend action behavior: follow if possible
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2219
diff changeset
  3882
5319ee47781d 2774 new depend action behavior: follow if possible
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2219
diff changeset
  3883
        # avoid set implementation uses simplejson to store a
5319ee47781d 2774 new depend action behavior: follow if possible
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2219
diff changeset
  3884
        # set of pkg_stems being avoided, and a set of tracked
5319ee47781d 2774 new depend action behavior: follow if possible
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2219
diff changeset
  3885
        # stems that are obsolete.
5319ee47781d 2774 new depend action behavior: follow if possible
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2219
diff changeset
  3886
        #
5319ee47781d 2774 new depend action behavior: follow if possible
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2219
diff changeset
  3887
        # format is (version, dict((pkg stem, "avoid" or "obsolete"))
5319ee47781d 2774 new depend action behavior: follow if possible
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2219
diff changeset
  3888
5319ee47781d 2774 new depend action behavior: follow if possible
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2219
diff changeset
  3889
        __AVOID_SET_VERSION = 1
5319ee47781d 2774 new depend action behavior: follow if possible
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2219
diff changeset
  3890
5319ee47781d 2774 new depend action behavior: follow if possible
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2219
diff changeset
  3891
        def avoid_set_get(self):
5319ee47781d 2774 new depend action behavior: follow if possible
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2219
diff changeset
  3892
                """Return copy of avoid set"""
5319ee47781d 2774 new depend action behavior: follow if possible
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2219
diff changeset
  3893
                return self.__avoid_set.copy()
5319ee47781d 2774 new depend action behavior: follow if possible
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2219
diff changeset
  3894
5319ee47781d 2774 new depend action behavior: follow if possible
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2219
diff changeset
  3895
        def obsolete_set_get(self):
5319ee47781d 2774 new depend action behavior: follow if possible
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2219
diff changeset
  3896
                """Return copy of tracked obsolete pkgs"""
5319ee47781d 2774 new depend action behavior: follow if possible
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2219
diff changeset
  3897
                return self.__group_obsolete.copy()
5319ee47781d 2774 new depend action behavior: follow if possible
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2219
diff changeset
  3898
5319ee47781d 2774 new depend action behavior: follow if possible
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2219
diff changeset
  3899
        def __avoid_set_load(self):
5319ee47781d 2774 new depend action behavior: follow if possible
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2219
diff changeset
  3900
                """Load avoid set fron image state directory"""
5319ee47781d 2774 new depend action behavior: follow if possible
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2219
diff changeset
  3901
                state_file = os.path.join(self._statedir, "avoid_set")
5319ee47781d 2774 new depend action behavior: follow if possible
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2219
diff changeset
  3902
                self.__avoid_set = set()
5319ee47781d 2774 new depend action behavior: follow if possible
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2219
diff changeset
  3903
                self.__group_obsolete = set()
5319ee47781d 2774 new depend action behavior: follow if possible
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2219
diff changeset
  3904
                if os.path.isfile(state_file):
5319ee47781d 2774 new depend action behavior: follow if possible
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2219
diff changeset
  3905
                        version, d = json.load(file(state_file))
5319ee47781d 2774 new depend action behavior: follow if possible
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2219
diff changeset
  3906
                        assert version == self.__AVOID_SET_VERSION
5319ee47781d 2774 new depend action behavior: follow if possible
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2219
diff changeset
  3907
                        for stem in d:
5319ee47781d 2774 new depend action behavior: follow if possible
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2219
diff changeset
  3908
                                if d[stem] == "avoid":
5319ee47781d 2774 new depend action behavior: follow if possible
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2219
diff changeset
  3909
                                        self.__avoid_set.add(stem)
5319ee47781d 2774 new depend action behavior: follow if possible
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2219
diff changeset
  3910
                                elif d[stem] == "obsolete":
5319ee47781d 2774 new depend action behavior: follow if possible
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2219
diff changeset
  3911
                                        self.__group_obsolete.add(stem)
5319ee47781d 2774 new depend action behavior: follow if possible
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2219
diff changeset
  3912
                                else:
5319ee47781d 2774 new depend action behavior: follow if possible
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2219
diff changeset
  3913
                                        logger.warn("Corrupted avoid list - ignoring")
5319ee47781d 2774 new depend action behavior: follow if possible
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2219
diff changeset
  3914
                                        self.__avoid_set = set()
5319ee47781d 2774 new depend action behavior: follow if possible
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2219
diff changeset
  3915
                                        self.__group_obsolete = set()
5319ee47781d 2774 new depend action behavior: follow if possible
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2219
diff changeset
  3916
                                        self.__avoid_set_altered = True
5319ee47781d 2774 new depend action behavior: follow if possible
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2219
diff changeset
  3917
                else:
5319ee47781d 2774 new depend action behavior: follow if possible
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2219
diff changeset
  3918
                        self.__avoid_set_altered = True
5319ee47781d 2774 new depend action behavior: follow if possible
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2219
diff changeset
  3919
5319ee47781d 2774 new depend action behavior: follow if possible
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2219
diff changeset
  3920
        def _avoid_set_save(self, new_set=None, obsolete=None):
5319ee47781d 2774 new depend action behavior: follow if possible
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2219
diff changeset
  3921
                """Store avoid set to image state directory"""
5319ee47781d 2774 new depend action behavior: follow if possible
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2219
diff changeset
  3922
                if new_set is not None:
5319ee47781d 2774 new depend action behavior: follow if possible
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2219
diff changeset
  3923
                        self.__avoid_set_altered = True
5319ee47781d 2774 new depend action behavior: follow if possible
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2219
diff changeset
  3924
                        self.__avoid_set = new_set
5319ee47781d 2774 new depend action behavior: follow if possible
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2219
diff changeset
  3925
5319ee47781d 2774 new depend action behavior: follow if possible
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2219
diff changeset
  3926
                if obsolete is not None:
5319ee47781d 2774 new depend action behavior: follow if possible
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2219
diff changeset
  3927
                        self.__group_obsolete = obsolete
5319ee47781d 2774 new depend action behavior: follow if possible
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2219
diff changeset
  3928
                        self.__avoid_set_altered = True
5319ee47781d 2774 new depend action behavior: follow if possible
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2219
diff changeset
  3929
5319ee47781d 2774 new depend action behavior: follow if possible
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2219
diff changeset
  3930
                if not self.__avoid_set_altered:
5319ee47781d 2774 new depend action behavior: follow if possible
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2219
diff changeset
  3931
                        return
2339
aa5954c06b9d 16148 need linked image support for zones, phase 1
Edward Pilatowicz <edward.pilatowicz@oracle.com>
parents: 2335
diff changeset
  3932
2228
5319ee47781d 2774 new depend action behavior: follow if possible
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2219
diff changeset
  3933
5319ee47781d 2774 new depend action behavior: follow if possible
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2219
diff changeset
  3934
                state_file = os.path.join(self._statedir, "avoid_set")
5319ee47781d 2774 new depend action behavior: follow if possible
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2219
diff changeset
  3935
                tmp_file   = os.path.join(self._statedir, "avoid_set.new")
5319ee47781d 2774 new depend action behavior: follow if possible
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2219
diff changeset
  3936
                tf = file(tmp_file, "w")
5319ee47781d 2774 new depend action behavior: follow if possible
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2219
diff changeset
  3937
5319ee47781d 2774 new depend action behavior: follow if possible
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2219
diff changeset
  3938
                d = dict((a, "avoid") for a in self.__avoid_set)
5319ee47781d 2774 new depend action behavior: follow if possible
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2219
diff changeset
  3939
                d.update((a, "obsolete") for a in self.__group_obsolete)
5319ee47781d 2774 new depend action behavior: follow if possible
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2219
diff changeset
  3940
5319ee47781d 2774 new depend action behavior: follow if possible
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2219
diff changeset
  3941
                try:
5319ee47781d 2774 new depend action behavior: follow if possible
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2219
diff changeset
  3942
                        json.dump((self.__AVOID_SET_VERSION, d), tf)
5319ee47781d 2774 new depend action behavior: follow if possible
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2219
diff changeset
  3943
                        tf.close()
5319ee47781d 2774 new depend action behavior: follow if possible
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2219
diff changeset
  3944
                        portable.rename(tmp_file, state_file)
5319ee47781d 2774 new depend action behavior: follow if possible
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2219
diff changeset
  3945
5319ee47781d 2774 new depend action behavior: follow if possible
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2219
diff changeset
  3946
                except Exception, e:
5319ee47781d 2774 new depend action behavior: follow if possible
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2219
diff changeset
  3947
                        logger.warn("Cannot save avoid list: %s" % str(e))
5319ee47781d 2774 new depend action behavior: follow if possible
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2219
diff changeset
  3948
                        return
5319ee47781d 2774 new depend action behavior: follow if possible
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2219
diff changeset
  3949
5319ee47781d 2774 new depend action behavior: follow if possible
Bart Smaalders <Bart.Smaalders@Oracle.COM>
parents: 2219
diff changeset
  3950
                self.__avoid_set_altered = False