~azzar1/unity/add-show-desktop-key

« back to all changes in this revision

Viewing changes to setup/install.py

  • Committer: mattgiuca
  • Date: 2008-02-15 04:45:12 UTC
  • Revision ID: svn-v3-trunk0:2b9c9e99-6f39-0410-b283-7f802c844ae2:trunk:472
db.py: No longer exceptions if password is not supplied.
makeuser: Converted explicit args into kwargs which are simply forwarded along
    to db. Makeuser db NO LONGER accepts "force" argument (which used to
    delete and replace login rows). This is dangerous, and we have removed the
    delete user functionality altogether - because we never delete users.
makeuser.py (script): Major change. Replaced the command-line interface so it
    now only takes 3 required arguments, and a bunch of optional arguments
    getopts style.
    All the arguments are specified at the top; the rest of the code works
    with these data structures so they are only specified in one place
    (including all the work of putting them into a dict and passing it to the
    database).
    Note that makeuser.py is a *second* point of control for the list of the
    login fields (the other is in db.DB.login_fields_list). This is by design,
    because there is a semantic difference between "what fields are in the db"
    and "what arguments should we accept on the command line".

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
# IVLE - Informatics Virtual Learning Environment
2
 
# Copyright (C) 2007-2008 The University of Melbourne
3
 
#
4
 
# This program is free software; you can redistribute it and/or modify
5
 
# it under the terms of the GNU General Public License as published by
6
 
# the Free Software Foundation; either version 2 of the License, or
7
 
# (at your option) any later version.
8
 
#
9
 
# This program is distributed in the hope that it will be useful,
10
 
# but WITHOUT ANY WARRANTY; without even the implied warranty of
11
 
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12
 
# GNU General Public License for more details.
13
 
#
14
 
# You should have received a copy of the GNU General Public License
15
 
# along with this program; if not, write to the Free Software
16
 
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
17
 
 
18
 
# Module: setup/install
19
 
# Author: Matt Giuca, Refactored by David Coles
20
 
# Date:   03/07/2008
21
 
 
22
 
import optparse
23
 
import os
24
 
import sys
25
 
import functools
26
 
import distutils.sysconfig
27
 
 
28
 
from setup import util
29
 
 
30
 
def install(args):
31
 
    usage = """usage: %prog install [options]
32
 
(Requires root)
33
 
Create target install directory ($target).
34
 
Create $target/bin.
35
 
Copy bin/trampoline/trampoline to $target/bin.
36
 
Copy bin/timount/timount to $target/bin.
37
 
chown and chmod the installed trampoline.
38
 
"""
39
 
 
40
 
    # Parse arguments
41
 
    parser = optparse.OptionParser(usage)
42
 
    parser.add_option("-n", "--dry",
43
 
        action="store_true", dest="dry",
44
 
        help="Print out the actions but don't do anything.")
45
 
    parser.add_option("--root",
46
 
        action="store", dest="rootdir",
47
 
        help="Install into a different root directory.",
48
 
        default='/')
49
 
    parser.add_option("--prefix",
50
 
        action="store", dest="prefix",
51
 
        help="Base prefix to install IVLE into (default: /usr/local).",
52
 
        default='/usr/local')
53
 
    parser.add_option("--python-site-packages",
54
 
        action="store", dest="python_site_packages",
55
 
        help="Path to Python site packages directory.",
56
 
        default=None)
57
 
    (options, args) = parser.parse_args(args)
58
 
 
59
 
    # Prefix must be absolute (not really necessary, but since a relative
60
 
    # prefix will be taken relative to *root* not working directory, it is
61
 
    # confusing if we allow it).
62
 
    if options.prefix[:1] not in (os.path.sep, os.path.altsep):
63
 
        print >>sys.stderr, """prefix must be an absolute path.
64
 
    (This will be interpreted relative to root, so provide --root=. if you
65
 
    want a path relative to the working directory)."""
66
 
        return 1
67
 
 
68
 
    # Calculate python_site_packages using the supplied prefix
69
 
    if options.python_site_packages is None:
70
 
        options.python_site_packages = distutils.sysconfig.get_python_lib(
71
 
            prefix=options.prefix)
72
 
 
73
 
    # Call the real function
74
 
    return __install(prefix=options.prefix,
75
 
                     python_site_packages=options.python_site_packages,
76
 
                     dry=options.dry, rootdir=options.rootdir)
77
 
 
78
 
def __install(prefix, python_site_packages, dry=False, rootdir=None):
79
 
    install_list = util.InstallList()
80
 
 
81
 
    # We need to apply make_install_path with the rootdir to an awful lot of
82
 
    # config variables, so make it easy:
83
 
    mip = functools.partial(util.make_install_path, rootdir)
84
 
 
85
 
    # Compute the lib_path, share_path and bin_path (copied from
86
 
    # ivle/conf/conf.py).
87
 
    lib_path = mip(os.path.join(prefix, 'lib/ivle'))
88
 
    share_path = mip(os.path.join(prefix, 'share/ivle'))
89
 
    bin_path = mip(os.path.join(prefix, 'bin'))
90
 
    python_site_packages = mip(python_site_packages)
91
 
 
92
 
    # Must be run as root or a dry run  
93
 
    if dry:
94
 
        print "Dry run (no actions will be executed)\n"
95
 
    
96
 
    if not dry and os.geteuid() != 0:
97
 
        print >>sys.stderr, "Must be root to run install"
98
 
        return 1
99
 
 
100
 
    # Create the config directory.
101
 
    util.action_mkdir(mip('/etc/ivle/plugins.d'), dry)
102
 
 
103
 
    # Create lib and copy the compiled files there
104
 
    util.action_mkdir(lib_path, dry)
105
 
 
106
 
    tramppath = os.path.join(lib_path, 'trampoline')
107
 
    util.action_copyfile('bin/trampoline/trampoline', tramppath, dry)
108
 
    # chown trampoline to root and set setuid bit
109
 
    util.action_chown_setuid(tramppath, dry)
110
 
 
111
 
    timountpath = os.path.join(lib_path, 'timount')
112
 
    util.action_copyfile('bin/timount/timount', timountpath, dry)
113
 
 
114
 
    # Copy in the services (only usrmgt-server is needed on the host, but
115
 
    # the jail build requires the rest).
116
 
    util.action_copylist(install_list.list_services, share_path, dry)
117
 
    usrmgtpath = os.path.join(share_path, 'services/usrmgt-server')
118
 
    util.action_chmod_x(usrmgtpath, dry)
119
 
 
120
 
    # Copy the user-executable binaries using the list.
121
 
    util.action_copylist(install_list.list_user_binaries, bin_path, dry,
122
 
                         onlybasename=True)
123
 
 
124
 
    # Copy the lib directory (using the list)
125
 
    util.action_copylist(install_list.list_ivle_lib, python_site_packages, dry)
126
 
 
127
 
    return 0
128