author | Yiteng Zhang <yiteng.zhang@oracle.com> |
Mon, 09 Sep 2013 10:52:27 -0700 | |
changeset 2942 | 17aad7c202b0 |
parent 2852 | 5650587d9468 |
child 2954 | 4b449f059c78 |
permissions | -rwxr-xr-x |
2852
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
1 |
#!/usr/bin/python2.6 |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
2 |
# |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
3 |
# CDDL HEADER START |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
4 |
# |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
5 |
# The contents of this file are subject to the terms of the |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
6 |
# Common Development and Distribution License (the "License"). |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
7 |
# You may not use this file except in compliance with the License. |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
8 |
# |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
9 |
# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
10 |
# or http://www.opensolaris.org/os/licensing. |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
11 |
# See the License for the specific language governing permissions |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
12 |
# and limitations under the License. |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
13 |
# |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
14 |
# When distributing Covered Code, include this CDDL HEADER in each |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
15 |
# file and include the License file at usr/src/OPENSOLARIS.LICENSE. |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
16 |
# If applicable, add the following below this CDDL HEADER, with the |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
17 |
# fields enclosed by brackets "[]" replaced with your own identifying |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
18 |
# information: Portions Copyright [yyyy] [name of copyright owner] |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
19 |
# |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
20 |
# CDDL HEADER END |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
21 |
# |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
22 |
|
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
23 |
# |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
24 |
# Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved. |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
25 |
# |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
26 |
|
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
27 |
import errno |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
28 |
import getopt |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
29 |
import gettext |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
30 |
import locale |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
31 |
import logging |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
32 |
import os |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
33 |
import re |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
34 |
import shutil |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
35 |
import socket |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
36 |
import sys |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
37 |
import traceback |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
38 |
import warnings |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
39 |
|
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
40 |
from mako.template import Template |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
41 |
from mako.lookup import TemplateLookup |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
42 |
|
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
43 |
import pkg |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
44 |
import pkg.client.api_errors as apx |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
45 |
import pkg.catalog |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
46 |
import pkg.config as cfg |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
47 |
import pkg.misc as misc |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
48 |
import pkg.portable as portable |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
49 |
import pkg.p5i as p5i |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
50 |
import pkg.server.repository as sr |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
51 |
import pkg.smf as smf |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
52 |
|
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
53 |
from pkg.client import global_settings |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
54 |
from pkg.client.debugvalues import DebugValues |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
55 |
from pkg.misc import msg, PipeError |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
56 |
|
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
57 |
logger = global_settings.logger |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
58 |
|
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
59 |
# exit codes |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
60 |
EXIT_OK = 0 |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
61 |
EXIT_OOPS = 1 |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
62 |
EXIT_BADOPT = 2 |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
63 |
|
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
64 |
DEPOT_HTTP_TEMPLATE = "depot_httpd.conf.mako" |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
65 |
DEPOT_FRAGMENT_TEMPLATE = "depot.conf.mako" |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
66 |
|
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
67 |
DEPOT_HTTP_FILENAME = "depot_httpd.conf" |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
68 |
DEPOT_FRAGMENT_FILENAME= "depot.conf" |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
69 |
|
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
70 |
DEPOT_PUB_FILENAME = "index.html" |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
71 |
DEPOT_HTDOCS_DIRNAME = "htdocs" |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
72 |
|
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
73 |
DEPOT_VERSIONS_DIRNAME = ["versions", "0"] |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
74 |
DEPOT_PUB_DIRNAME = ["publisher", "1"] |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
75 |
|
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
76 |
DEPOT_CACHE_FILENAME = "depot.cache" |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
77 |
|
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
78 |
KNOWN_SERVER_TYPES = ["apache2"] |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
79 |
|
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
80 |
PKG_SERVER_SVC = "svc:/application/pkg/server" |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
81 |
|
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
82 |
# static string with our versions response |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
83 |
DEPOT_FRAGMENT_VERSIONS_STR = """\ |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
84 |
pkg-server %s |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
85 |
publisher 0 1 |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
86 |
versions 0 |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
87 |
catalog 1 |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
88 |
file 1 |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
89 |
manifest 0 |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
90 |
""" % pkg.VERSION |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
91 |
|
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
92 |
# versions response used when we provide search capability |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
93 |
DEPOT_VERSIONS_STR = """%sadmin 0 |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
94 |
search 0 1 |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
95 |
""" % DEPOT_FRAGMENT_VERSIONS_STR |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
96 |
|
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
97 |
DEPOT_USER = "pkg5srv" |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
98 |
DEPOT_GROUP = "pkg5srv" |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
99 |
|
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
100 |
class DepotException(Exception): |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
101 |
def __unicode__(self): |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
102 |
# To workaround python issues 6108 and 2517, this provides a |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
103 |
# a standard wrapper for this class' exceptions so that they |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
104 |
# have a chance of being stringified correctly. |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
105 |
return str(self) |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
106 |
|
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
107 |
|
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
108 |
def error(text, cmd=None): |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
109 |
"""Emit an error message prefixed by the command name """ |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
110 |
|
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
111 |
if cmd: |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
112 |
text = "%s: %s" % (cmd, text) |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
113 |
pkg_cmd = "pkg.depot-config " |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
114 |
else: |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
115 |
pkg_cmd = "pkg.depot-config: " |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
116 |
|
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
117 |
# If we get passed something like an Exception, we can convert |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
118 |
# it down to a string. |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
119 |
text = str(text) |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
120 |
|
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
121 |
# If the message starts with whitespace, assume that it should come |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
122 |
# *before* the command-name prefix. |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
123 |
text_nows = text.lstrip() |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
124 |
ws = text[:len(text) - len(text_nows)] |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
125 |
|
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
126 |
# This has to be a constant value as we can't reliably get our actual |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
127 |
# program name on all platforms. |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
128 |
logger.error(ws + pkg_cmd + text_nows) |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
129 |
|
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
130 |
def usage(usage_error=None, cmd=None, retcode=EXIT_BADOPT): |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
131 |
"""Emit a usage message and optionally prefix it with a more |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
132 |
specific error message. Causes program to exit. |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
133 |
""" |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
134 |
|
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
135 |
if usage_error: |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
136 |
error(usage_error, cmd=cmd) |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
137 |
msg(_("""\ |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
138 |
Usage: |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
139 |
pkg.depot-config ( -d repository_dir | -S ) -r runtime_dir |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
140 |
[-c cache_dir] [-s cache_size] [-p port] [-h hostname] |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
141 |
[-l logs_dir] [-T template_dir] [-A] |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
142 |
[-t server_type] ( [-F] [-P server_prefix] ) |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
143 |
""")) |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
144 |
sys.exit(retcode) |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
145 |
|
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
146 |
def _chown_dir(dir): |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
147 |
"""Sets ownership for the given directory to pkg5srv:pkg5srv""" |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
148 |
|
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
149 |
uid = portable.get_user_by_name(DEPOT_USER, None, False) |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
150 |
gid = portable.get_group_by_name(DEPOT_GROUP, None, False) |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
151 |
try: |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
152 |
os.chown(dir, uid, gid) |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
153 |
except OSError, err: |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
154 |
if not os.environ.get("PKG5_TEST_ENV", None): |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
155 |
raise DepotException(_("Unable to chown %(dir)s to " |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
156 |
"%(user)s:%(group)s: %(err)s") % |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
157 |
{"dir": dir, "user": DEPOT_USER, |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
158 |
"group": DEPOT_GROUP, "err": err}) |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
159 |
|
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
160 |
def _get_publishers(root): |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
161 |
"""Given a repository root, return the list of available publishers, |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
162 |
along with the default publisher/prefix.""" |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
163 |
|
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
164 |
try: |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
165 |
# we don't set writable_root, as we don't want to take the hit |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
166 |
# on potentially building an index here. |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
167 |
repository = sr.Repository(root=root, read_only=True) |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
168 |
|
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
169 |
if repository.version != 4: |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
170 |
raise DepotException( |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
171 |
_("pkg.depot-config only supports v4 repositories")) |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
172 |
except Exception, e: |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
173 |
raise DepotException(e) |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
174 |
|
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
175 |
all_pubs = [pub.prefix for pub in repository.get_publishers()] |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
176 |
try: |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
177 |
default_pub = repository.cfg.get_property("publisher", "prefix") |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
178 |
except cfg.UnknownPropertyError: |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
179 |
default_pub = None |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
180 |
return all_pubs, default_pub |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
181 |
|
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
182 |
def _write_httpd_conf(pubs, default_pubs, runtime_dir, log_dir, template_dir, |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
183 |
cache_dir, cache_size, host, port, sroot, |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
184 |
fragment=False, allow_refresh=False): |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
185 |
"""Writes the webserver configuration for the depot. |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
186 |
|
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
187 |
pubs repository and publisher information, a list in the form |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
188 |
[(publisher_prefix, repo_dir, repo_prefix), ... ] |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
189 |
default_pubs default publishers, per repository, a list in the form |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
190 |
[(default_publisher_prefix, repo_dir, repo_prefix) ... ] |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
191 |
|
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
192 |
runtime_dir where we write httpd.conf files |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
193 |
log_dir where Apache should write its log files |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
194 |
template_dir where we find our Mako templates |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
195 |
cache_dir where Apache should write its cache and wsgi search idx |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
196 |
cache_size how large our cache can grow |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
197 |
host our hostname, needed to set ServerName properly |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
198 |
port the port on which Apache should listen |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
199 |
sroot the prefix into the server namespace, |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
200 |
ignored if fragment==False |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
201 |
fragment True if we should only write a file to drop into conf.d/ |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
202 |
(i.e. a partial server configuration) |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
203 |
|
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
204 |
allow_refresh True if we allow the 'refresh' or 'refresh-indexes' |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
205 |
admin/0 operations |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
206 |
|
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
207 |
The URI namespace we create on the web server looks like this: |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
208 |
|
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
209 |
<sroot>/<repo_prefix>/<publisher>/<file, catalog etc.>/<version>/ |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
210 |
<sroot>/<repo_prefix>/<file, catalog etc.>/<version>/ |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
211 |
|
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
212 |
'sroot' is only used when the Apache server is serving other content |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
213 |
and we want to separate pkg(5) resources from the other resources |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
214 |
provided. |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
215 |
|
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
216 |
'repo_prefix' exists so that we can disambiguate between multiple |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
217 |
repositories that provide the same publisher. |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
218 |
""" |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
219 |
|
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
220 |
try: |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
221 |
# check our hostname |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
222 |
socket.getaddrinfo(host, None) |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
223 |
|
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
224 |
# Apache needs IPv6 addresses wrapped in square brackets |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
225 |
if ":" in host: |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
226 |
host = "[%s]" % host |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
227 |
|
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
228 |
# check our directories |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
229 |
dirs = [runtime_dir] |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
230 |
if not fragment: |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
231 |
dirs.append(log_dir) |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
232 |
if cache_dir: |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
233 |
dirs.append(cache_dir) |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
234 |
for dir in dirs + [template_dir]: |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
235 |
if os.path.exists(dir) and not os.path.isdir(dir): |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
236 |
raise DepotException( |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
237 |
_("%s is not a directory") % dir) |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
238 |
|
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
239 |
for dir in dirs: |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
240 |
misc.makedirs(dir) |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
241 |
|
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
242 |
# check our port |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
243 |
if not fragment: |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
244 |
try: |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
245 |
num = int(port) |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
246 |
if num <= 0 or num >= 65535: |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
247 |
raise DepotException( |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
248 |
_("invalid port: %s") % port) |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
249 |
except ValueError: |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
250 |
raise DepotException(_("invalid port: %s") % |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
251 |
port) |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
252 |
|
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
253 |
# check our cache size |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
254 |
try: |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
255 |
num = int(cache_size) |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
256 |
if num < 0: |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
257 |
raise DepotException(_("invalid cache size: " |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
258 |
"%s") % num) |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
259 |
except ValueError: |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
260 |
raise DepotException(_("invalid cache size: %s") % |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
261 |
cache_size) |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
262 |
|
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
263 |
httpd_conf_template_path = os.path.join(template_dir, |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
264 |
DEPOT_HTTP_TEMPLATE) |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
265 |
fragment_conf_template_path = os.path.join(template_dir, |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
266 |
DEPOT_FRAGMENT_TEMPLATE) |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
267 |
|
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
268 |
# we're disabling unicode here because we want Mako to |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
269 |
# passthrough any filesystem path names, whatever the |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
270 |
# original encoding. |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
271 |
conf_lookup = TemplateLookup(directories=[template_dir]) |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
272 |
if fragment: |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
273 |
conf_template = Template( |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
274 |
filename=fragment_conf_template_path, |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
275 |
disable_unicode=True, lookup=conf_lookup) |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
276 |
conf_path = os.path.join(runtime_dir, |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
277 |
DEPOT_FRAGMENT_FILENAME) |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
278 |
else: |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
279 |
conf_template = Template( |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
280 |
filename=httpd_conf_template_path, |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
281 |
disable_unicode=True, lookup=conf_lookup) |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
282 |
conf_path = os.path.join(runtime_dir, |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
283 |
DEPOT_HTTP_FILENAME) |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
284 |
|
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
285 |
conf_text = conf_template.render( |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
286 |
pubs=pubs, |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
287 |
default_pubs=default_pubs, |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
288 |
log_dir=log_dir, |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
289 |
cache_dir=cache_dir, |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
290 |
cache_size=cache_size, |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
291 |
runtime_dir=runtime_dir, |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
292 |
template_dir=template_dir, |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
293 |
ipv6_addr="::1", |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
294 |
host=host, |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
295 |
port=port, |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
296 |
sroot=sroot, |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
297 |
allow_refresh=allow_refresh |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
298 |
) |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
299 |
|
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
300 |
with file(conf_path, "wb") as conf_file: |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
301 |
conf_file.write(conf_text) |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
302 |
|
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
303 |
except socket.gaierror, err: |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
304 |
raise DepotException( |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
305 |
_("Unable to write Apache configuration: %(host)s: " |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
306 |
"%(err)s") % locals()) |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
307 |
except (OSError, IOError, EnvironmentError, apx.ApiException), err: |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
308 |
traceback.print_exc(err) |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
309 |
raise DepotException( |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
310 |
_("Unable to write depot_httpd.conf: %s") % err) |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
311 |
|
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
312 |
def _write_versions_response(htdocs_path, fragment=False): |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
313 |
"""Writes a static versions/0 response for the Apache depot.""" |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
314 |
|
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
315 |
try: |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
316 |
versions_path = os.path.join(htdocs_path, |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
317 |
*DEPOT_VERSIONS_DIRNAME) |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
318 |
misc.makedirs(versions_path) |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
319 |
|
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
320 |
with file(os.path.join(versions_path, "index.html"), "w") as \ |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
321 |
versions_file: |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
322 |
versions_file.write( |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
323 |
fragment and DEPOT_FRAGMENT_VERSIONS_STR or |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
324 |
DEPOT_VERSIONS_STR) |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
325 |
|
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
326 |
versions_file.close() |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
327 |
except (OSError, apx.ApiException), err: |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
328 |
raise DepotException( |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
329 |
_("Unable to write versions response: %s") % err) |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
330 |
|
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
331 |
def _write_publisher_response(pubs, htdocs_path, repo_prefix): |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
332 |
"""Writes a static publisher/0 response for the depot.""" |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
333 |
try: |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
334 |
# convert our list of strings to a list of Publishers |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
335 |
pub_objs = [pkg.client.publisher.Publisher(pub) for pub in pubs] |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
336 |
|
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
337 |
# write individual reponses for the publishers |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
338 |
for pub in pub_objs: |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
339 |
pub_path = os.path.join(htdocs_path, |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
340 |
os.path.sep.join( |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
341 |
[repo_prefix, pub.prefix] + DEPOT_PUB_DIRNAME)) |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
342 |
misc.makedirs(pub_path) |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
343 |
with file(os.path.join(pub_path, "index.html"), "w") as\ |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
344 |
pub_file: |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
345 |
p5i.write(pub_file, [pub]) |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
346 |
|
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
347 |
# write a response that contains all publishers |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
348 |
pub_path = os.path.join(htdocs_path, |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
349 |
os.path.sep.join([repo_prefix] + DEPOT_PUB_DIRNAME)) |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
350 |
os.makedirs(pub_path) |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
351 |
with file(os.path.join(pub_path, "index.html"), "w") as \ |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
352 |
pub_file: |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
353 |
p5i.write(pub_file, pub_objs) |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
354 |
|
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
355 |
except (OSError, apx.ApiException), err: |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
356 |
raise DepotException( |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
357 |
_("Unable to write publisher response: %s") % err) |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
358 |
|
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
359 |
def cleanup_conf(runtime_dir=None): |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
360 |
"""Destroys an old configuration.""" |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
361 |
try: |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
362 |
shutil.rmtree(runtime_dir, ignore_errors=True) |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
363 |
except OSError, err: |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
364 |
raise DepotException( |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
365 |
_("Unable to cleanup old configuration: %s") % err) |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
366 |
|
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
367 |
def refresh_conf(repo_info, log_dir, host, port, runtime_dir, |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
368 |
template_dir, cache_dir, cache_size, sroot, fragment=False, |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
369 |
allow_refresh=False): |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
370 |
"""Creates a new configuration for the depot.""" |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
371 |
try: |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
372 |
ret = EXIT_OK |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
373 |
cleanup_conf(runtime_dir=runtime_dir) |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
374 |
if not repo_info: |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
375 |
raise DepotException(_("no repositories found")) |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
376 |
|
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
377 |
htdocs_path = os.path.join(runtime_dir, DEPOT_HTDOCS_DIRNAME, |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
378 |
sroot) |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
379 |
misc.makedirs(htdocs_path) |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
380 |
|
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
381 |
# pubs and default_pubs are lists of tuples of the form: |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
382 |
# (publisher prefix, repository root dir, repository prefix) |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
383 |
pubs = [] |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
384 |
default_pubs = [] |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
385 |
|
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
386 |
repo_prefixes = [prefix for root, prefix in repo_info] |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
387 |
errors = [] |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
388 |
|
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
389 |
# Query each repository for its publisher information. |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
390 |
for (repo_root, repo_prefix) in repo_info: |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
391 |
try: |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
392 |
publishers, default_pub = \ |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
393 |
_get_publishers(repo_root) |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
394 |
for pub in publishers: |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
395 |
pubs.append( |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
396 |
(pub, repo_root, |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
397 |
repo_prefix)) |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
398 |
default_pubs.append((default_pub, |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
399 |
repo_root, repo_prefix)) |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
400 |
|
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
401 |
except DepotException, err: |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
402 |
errors.append(str(err)) |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
403 |
if errors: |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
404 |
raise DepotException(_("Unable to get publisher " |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
405 |
"information: %s") % "\n".join(errors)) |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
406 |
|
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
407 |
# Write the publisher/0 response for each repository |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
408 |
pubs_by_repo = {} |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
409 |
for pub_prefix, repo_root, repo_prefix in pubs: |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
410 |
pubs_by_repo.setdefault(repo_prefix, []).append( |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
411 |
pub_prefix) |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
412 |
for repo_prefix in pubs_by_repo: |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
413 |
_write_publisher_response( |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
414 |
pubs_by_repo[repo_prefix], htdocs_path, repo_prefix) |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
415 |
|
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
416 |
_write_httpd_conf(pubs, default_pubs, runtime_dir, log_dir, |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
417 |
template_dir, cache_dir, cache_size, host, port, sroot, |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
418 |
fragment=fragment, allow_refresh=allow_refresh) |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
419 |
_write_versions_response(htdocs_path, fragment=fragment) |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
420 |
# If we're writing a configuration fragment, then the web server |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
421 |
# is probably not running as DEPOT_USER:DEPOT_GROUP |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
422 |
if not fragment: |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
423 |
_chown_dir(runtime_dir) |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
424 |
_chown_dir(cache_dir) |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
425 |
else: |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
426 |
msg(_("Created %s/depot.conf") % runtime_dir) |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
427 |
except (DepotException, OSError, apx.ApiException), err: |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
428 |
error(err) |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
429 |
ret = EXIT_OOPS |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
430 |
return ret |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
431 |
|
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
432 |
def get_smf_repo_info(): |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
433 |
"""Return a list of repo_info from the online instances of pkg/server |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
434 |
which are marked as pkg/standalone = False and pkg/readonly = True.""" |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
435 |
|
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
436 |
smf_instances = smf.check_fmris(None, "%s:*" % PKG_SERVER_SVC) |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
437 |
repo_info = [] |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
438 |
for fmri in smf_instances: |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
439 |
repo_prefix = fmri.split(":")[-1] |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
440 |
repo_root = smf.get_prop(fmri, "pkg/inst_root") |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
441 |
state = smf.get_prop(fmri, "restarter/state") |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
442 |
readonly = smf.get_prop(fmri, "pkg/readonly") |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
443 |
standalone = smf.get_prop(fmri, "pkg/standalone") |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
444 |
|
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
445 |
if (state == "online" and |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
446 |
readonly == "true" and |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
447 |
standalone == "false"): |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
448 |
repo_info.append((repo_root, |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
449 |
_affix_slash(repo_prefix))) |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
450 |
if not repo_info: |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
451 |
raise DepotException(_( |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
452 |
"No online, readonly, non-standalone instances of " |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
453 |
"%s found.") % PKG_SERVER_SVC) |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
454 |
return repo_info |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
455 |
|
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
456 |
def _check_unique_repo_properties(repo_info): |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
457 |
"""Determine whether the repository root, and supplied prefixes are |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
458 |
unique. The prefixes allow two or more repositories that both contain |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
459 |
the same publisher to be differentiated in the Apache configuration, so |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
460 |
that requests are routed to the correct repository.""" |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
461 |
|
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
462 |
prefixes = set() |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
463 |
roots = set() |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
464 |
errors = [] |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
465 |
for root, prefix in repo_info: |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
466 |
if prefix in prefixes: |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
467 |
errors.append(_("instance %s already exists") % prefix) |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
468 |
prefixes.add(prefix) |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
469 |
if root in roots: |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
470 |
errors.append(_("repo_root %s already exists") % root) |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
471 |
roots.add(root) |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
472 |
if errors: |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
473 |
raise DepotException("\n".join(errors)) |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
474 |
return True |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
475 |
|
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
476 |
def _affix_slash(str): |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
477 |
val = str.lstrip("/").rstrip("/") |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
478 |
if "/" in str: |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
479 |
raise DepotException(_("cannot use '/' chars in prefixes")) |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
480 |
# An RE that matches valid SMF instance names works for prefixes |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
481 |
if not re.match(r"^([A-Za-z][_A-Za-z0-9.-]*,)?[A-Za-z][_A-Za-z0-9-]*$", |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
482 |
str): |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
483 |
raise DepotException(_("%s is not a valid prefix")) |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
484 |
return "%s/" % val |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
485 |
|
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
486 |
def main_func(): |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
487 |
|
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
488 |
# some sensible defaults |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
489 |
host = "0.0.0.0" |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
490 |
# the port we listen on |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
491 |
port = None |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
492 |
# a list of (repo_dir, repo_prefix) tuples |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
493 |
repo_info = [] |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
494 |
# the path where we store indexes and disk caches |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
495 |
cache_dir = None |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
496 |
# our maximum cache size, in megabytes |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
497 |
cache_size = 0 |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
498 |
# whether we're writing a full httpd.conf, or just a fragment |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
499 |
fragment = False |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
500 |
# an optional url-prefix, used to separate pkg5 services from the rest |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
501 |
# of the webserver url namespace, only used when running in fragment |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
502 |
# mode, otherwise we assume we're the only service running on this |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
503 |
# web server instance, and control the entire server URL namespace. |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
504 |
sroot = "" |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
505 |
# the path where our Mako templates and wsgi scripts are stored |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
506 |
template_dir = "/etc/pkg/depot" |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
507 |
# a volatile directory used at runtime for storing state |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
508 |
runtime_dir = None |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
509 |
# where logs are written |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
510 |
log_dir = "/var/log/pkg/depot" |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
511 |
# whether we should pull configuration from |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
512 |
# svc:/application/pkg/server instances |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
513 |
use_smf_instances = False |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
514 |
# whether we allow admin/0 operations to rebuild the index |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
515 |
allow_refresh = False |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
516 |
# the current server_type |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
517 |
server_type = "apache2" |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
518 |
|
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
519 |
try: |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
520 |
opts, pargs = getopt.getopt(sys.argv[1:], |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
521 |
"Ac:d:Fh:l:P:p:r:Ss:t:T:?", ["help", "debug="]) |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
522 |
for opt, arg in opts: |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
523 |
if opt == "--help": |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
524 |
usage() |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
525 |
elif opt == "-h": |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
526 |
host = arg |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
527 |
elif opt == "-c": |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
528 |
cache_dir = arg |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
529 |
elif opt == "-s": |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
530 |
cache_size = arg |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
531 |
elif opt == "-l": |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
532 |
log_dir = arg |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
533 |
elif opt == "-p": |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
534 |
port = arg |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
535 |
elif opt == "-r": |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
536 |
runtime_dir = arg |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
537 |
elif opt == "-T": |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
538 |
template_dir = arg |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
539 |
elif opt == "-t": |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
540 |
server_type = arg |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
541 |
elif opt == "-d": |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
542 |
if "=" not in arg: |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
543 |
usage(_("-d arguments must be in the " |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
544 |
"form <prefix>=<repo path>")) |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
545 |
prefix, root = arg.split("=", 1) |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
546 |
repo_info.append((root, _affix_slash(prefix))) |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
547 |
elif opt == "-P": |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
548 |
sroot = _affix_slash(arg) |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
549 |
elif opt == "-F": |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
550 |
fragment = True |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
551 |
elif opt == "-S": |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
552 |
use_smf_instances = True |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
553 |
elif opt == "-A": |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
554 |
allow_refresh = True |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
555 |
elif opt == "--debug": |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
556 |
try: |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
557 |
key, value = arg.split("=", 1) |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
558 |
except (AttributeError, ValueError): |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
559 |
usage( |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
560 |
_("%(opt)s takes argument of form " |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
561 |
"name=value, not %(arg)s") % { |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
562 |
"opt": opt, "arg": arg }) |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
563 |
DebugValues.set_value(key, value) |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
564 |
else: |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
565 |
usage("unknown option %s" % opt) |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
566 |
|
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
567 |
except getopt.GetoptError, e: |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
568 |
usage(_("illegal global option -- %s") % e.opt) |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
569 |
|
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
570 |
if not runtime_dir: |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
571 |
usage(_("required runtime dir option -r missing.")) |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
572 |
|
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
573 |
# we need a cache_dir to store the search indexes |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
574 |
if not cache_dir and not fragment: |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
575 |
usage(_("cache_dir option -c is required if -F is not used.")) |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
576 |
|
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
577 |
if not fragment and not port: |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
578 |
usage(_("required port option -p missing.")) |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
579 |
|
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
580 |
if not use_smf_instances and not repo_info: |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
581 |
usage(_("at least one -d option is required if -S is " |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
582 |
"not used.")) |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
583 |
|
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
584 |
if repo_info and use_smf_instances: |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
585 |
usage(_("cannot use -d and -S together.")) |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
586 |
|
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
587 |
if fragment and port: |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
588 |
usage(_("cannot use -F and -p together.")) |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
589 |
|
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
590 |
if fragment and allow_refresh: |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
591 |
usage(_("cannot use -F and -A together.")) |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
592 |
|
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
593 |
if sroot and not fragment: |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
594 |
usage(_("cannot use -P without -F.")) |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
595 |
|
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
596 |
if use_smf_instances: |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
597 |
try: |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
598 |
repo_info = get_smf_repo_info() |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
599 |
except DepotException, e: |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
600 |
error(e) |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
601 |
|
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
602 |
# In the future we may produce configuration for different |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
603 |
# HTTP servers. For now, we only support "apache2" |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
604 |
if server_type not in KNOWN_SERVER_TYPES: |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
605 |
usage(_("unknown server type %(type)s. " |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
606 |
"Known types are: %(known)s") % |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
607 |
{"type": server_type, |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
608 |
"known": ", ".join(KNOWN_SERVER_TYPES)}) |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
609 |
|
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
610 |
_check_unique_repo_properties(repo_info) |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
611 |
|
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
612 |
ret = refresh_conf(repo_info, log_dir, host, port, runtime_dir, |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
613 |
template_dir, cache_dir, cache_size, sroot, fragment=fragment, |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
614 |
allow_refresh=allow_refresh) |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
615 |
return ret |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
616 |
|
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
617 |
# |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
618 |
# Establish a specific exit status which means: "python barfed an exception" |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
619 |
# so that we can more easily detect these in testing of the CLI commands. |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
620 |
# |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
621 |
def handle_errors(func, *args, **kwargs): |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
622 |
"""Catch exceptions raised by the main program function and then print |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
623 |
a message and/or exit with an appropriate return code. |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
624 |
""" |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
625 |
|
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
626 |
traceback_str = misc.get_traceback_message() |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
627 |
|
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
628 |
try: |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
629 |
# Out of memory errors can be raised as EnvironmentErrors with |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
630 |
# an errno of ENOMEM, so in order to handle those exceptions |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
631 |
# with other errnos, we nest this try block and have the outer |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
632 |
# one handle the other instances. |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
633 |
try: |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
634 |
__ret = func(*args, **kwargs) |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
635 |
except (MemoryError, EnvironmentError), __e: |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
636 |
if isinstance(__e, EnvironmentError) and \ |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
637 |
__e.errno != errno.ENOMEM: |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
638 |
raise |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
639 |
error("\n" + misc.out_of_memory()) |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
640 |
__ret = EXIT_OOPS |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
641 |
except SystemExit, __e: |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
642 |
raise __e |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
643 |
except (PipeError, KeyboardInterrupt): |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
644 |
# Don't display any messages here to prevent possible further |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
645 |
# broken pipe (EPIPE) errors. |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
646 |
__ret = EXIT_OOPS |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
647 |
except: |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
648 |
traceback.print_exc() |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
649 |
error(traceback_str) |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
650 |
__ret = 99 |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
651 |
return __ret |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
652 |
|
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
653 |
|
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
654 |
if __name__ == "__main__": |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
655 |
misc.setlocale(locale.LC_ALL, "", error) |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
656 |
gettext.install("pkg", "/usr/share/locale", |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
657 |
codeset=locale.getpreferredencoding()) |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
658 |
|
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
659 |
# Make all warnings be errors. |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
660 |
warnings.simplefilter('error') |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
661 |
|
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
662 |
__retval = handle_errors(main_func) |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
663 |
try: |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
664 |
logging.shutdown() |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
665 |
except IOError: |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
666 |
# Ignore python's spurious pipe problems. |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
667 |
pass |
5650587d9468
15807357 need an Apache-based pkg.depotd
Tim Foster <tim.s.foster@oracle.com>
parents:
diff
changeset
|
668 |
sys.exit(__retval) |