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

« back to all changes in this revision

Viewing changes to setup/install.py

  • Committer: mattgiuca
  • Date: 2008-01-29 23:52:19 UTC
  • Revision ID: svn-v3-trunk0:2b9c9e99-6f39-0410-b283-7f802c844ae2:trunk:329
Converted Console from an "app" into a "plugin". It can now be plugged in to
any app.
Added "plugins" directory in www. Added "console" plugin. This contains all of
the functionality of what was previously the console app, but modularized so
it can be imported by another app.

apps/console: Removed most of the logic (moved to plugins/console). Replaced
with a simple import of the console plugin. Should behave exactly the same.
apps/tutorial: As proof of concept, imported the console plugin. It now
appears at the bottom of the page (yet to make it have "pop up" behaviour).

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("-R", "--nosvnrevno",
46
 
        action="store_true", dest="nosvnrevno",
47
 
        help="Don't write out the Subversion revision to the share directory.")
48
 
    parser.add_option("--root",
49
 
        action="store", dest="rootdir",
50
 
        help="Install into a different root directory.",
51
 
        default='/')
52
 
    parser.add_option("--prefix",
53
 
        action="store", dest="prefix",
54
 
        help="Base prefix to install IVLE into (default: /usr/local).",
55
 
        default='/usr/local')
56
 
    parser.add_option("--python-site-packages",
57
 
        action="store", dest="python_site_packages",
58
 
        help="Path to Python site packages directory.",
59
 
        default=None)
60
 
    (options, args) = parser.parse_args(args)
61
 
 
62
 
    # Prefix must be absolute (not really necessary, but since a relative
63
 
    # prefix will be taken relative to *root* not working directory, it is
64
 
    # confusing if we allow it).
65
 
    if options.prefix[:1] not in (os.path.sep, os.path.altsep):
66
 
        print >>sys.stderr, """prefix must be an absolute path.
67
 
    (This will be interpreted relative to root, so provide --root=. if you
68
 
    want a path relative to the working directory)."""
69
 
        return 1
70
 
 
71
 
    # Calculate python_site_packages using the supplied prefix
72
 
    if options.python_site_packages is None:
73
 
        options.python_site_packages = distutils.sysconfig.get_python_lib(
74
 
            prefix=options.prefix)
75
 
 
76
 
    # Call the real function
77
 
    return __install(prefix=options.prefix,
78
 
                     python_site_packages=options.python_site_packages,
79
 
                     dry=options.dry, rootdir=options.rootdir,
80
 
                     nosvnrevno=options.nosvnrevno)
81
 
 
82
 
def __install(prefix, python_site_packages, dry=False, rootdir=None,
83
 
              nosvnrevno=False):
84
 
    install_list = util.InstallList()
85
 
 
86
 
    # We need to apply make_install_path with the rootdir to an awful lot of
87
 
    # config variables, so make it easy:
88
 
    mip = functools.partial(util.make_install_path, rootdir)
89
 
 
90
 
    # Compute the lib_path, share_path and bin_path (copied from
91
 
    # ivle/conf/conf.py).
92
 
    lib_path = mip(os.path.join(prefix, 'lib/ivle'))
93
 
    share_path = mip(os.path.join(prefix, 'share/ivle'))
94
 
    bin_path = mip(os.path.join(prefix, 'bin'))
95
 
    python_site_packages = mip(python_site_packages)
96
 
 
97
 
    # Must be run as root or a dry run  
98
 
    if dry:
99
 
        print "Dry run (no actions will be executed)\n"
100
 
    
101
 
    if not dry and os.geteuid() != 0:
102
 
        print >>sys.stderr, "Must be root to run install"
103
 
        return 1
104
 
 
105
 
    # Create the config directory.
106
 
    util.action_mkdir(mip('/etc/ivle/plugins.d'), dry)
107
 
 
108
 
    # Create lib and copy the compiled files there
109
 
    util.action_mkdir(lib_path, dry)
110
 
 
111
 
    tramppath = os.path.join(lib_path, 'trampoline')
112
 
    util.action_copyfile('bin/trampoline/trampoline', tramppath, dry)
113
 
    # chown trampoline to root and set setuid bit
114
 
    util.action_chown_setuid(tramppath, dry)
115
 
 
116
 
    timountpath = os.path.join(lib_path, 'timount')
117
 
    util.action_copyfile('bin/timount/timount', timountpath, dry)
118
 
 
119
 
    # Copy in the services (only usrmgt-server is needed on the host, but
120
 
    # the jail build requires the rest).
121
 
    util.action_copylist(install_list.list_services, share_path, dry)
122
 
    usrmgtpath = os.path.join(share_path, 'services/usrmgt-server')
123
 
    util.action_chmod_x(usrmgtpath, dry)
124
 
 
125
 
    # Copy the user-executable binaries using the list.
126
 
    util.action_copylist(install_list.list_user_binaries, bin_path, dry,
127
 
                         onlybasename=True)
128
 
 
129
 
    # Copy the lib directory (using the list)
130
 
    util.action_copylist(install_list.list_ivle_lib, python_site_packages, dry)
131
 
 
132
 
    if not nosvnrevno:
133
 
        # Create the ivle working revision record file
134
 
        ivle_revision_file = os.path.join(share_path, 'revision.txt')
135
 
        if not dry:
136
 
            try:
137
 
                conf = open(ivle_revision_file, "w")
138
 
 
139
 
                conf.write("""# SVN revision r%s
140
 
# Source tree location: %s
141
 
# Modified files:
142
 
""" % (util.get_svn_revision(), os.getcwd()))
143
 
 
144
 
                conf.close()
145
 
            except IOError, (errno, strerror):
146
 
                print "IO error(%s): %s" % (errno, strerror)
147
 
                sys.exit(1)
148
 
 
149
 
            os.system("svn status . >> %s" % ivle_revision_file)
150
 
 
151
 
        print "Wrote IVLE code revision status to %s" % ivle_revision_file
152
 
 
153
 
    return 0
154