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

« back to all changes in this revision

Viewing changes to setup/install.py

  • Committer: mattgiuca
  • Date: 2008-07-07 12:01:03 UTC
  • Revision ID: svn-v3-trunk0:2b9c9e99-6f39-0410-b283-7f802c844ae2:trunk:820
lib: Added new package pulldown_subj, a collection of modules designed to
    pull student subject enrolments from the server.
    Note that the actual code to do this is not included (since that is
    specific to the organisation running IVLE) - just a pluggable interface
    and an example plugin module.
configure.py: Added new config option: subject_pulldown_modules, which allows
    you to specify which modules are plugged in here.
    (Actually that was added accidentally in a previous commit; but this
    revision fixes some comments).

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
# setup/build.py
 
23
# Compiles all files and sets up a jail template in the source directory.
 
24
# Details:
 
25
# Compiles (GCC) trampoline/trampoline.c to trampoline/trampoline.
 
26
# Creates jail/.
 
27
# Creates standard subdirs inside the jail, eg bin, opt, home, tmp.
 
28
# Copies console/ to a location within the jail.
 
29
# Copies OS programs and files to corresponding locations within the jail
 
30
#   (eg. python and Python libs, ld.so, etc).
 
31
# Generates .pyc files for all the IVLE .py files.
 
32
 
 
33
import optparse
 
34
import os
 
35
from setuputil import *
 
36
 
 
37
def install(args):
 
38
    usage = """usage: %prog install [options]
 
39
(Requires root)
 
40
Create target install directory ($target).
 
41
Create $target/bin.
 
42
Copy trampoline/trampoline to $target/bin.
 
43
Copy timount/timount to $target/bin.
 
44
chown and chmod the installed trampoline.
 
45
Copy www/ to $target.
 
46
Copy jail/ to jail_system directory (unless --nojail specified).
 
47
Copy subjects/ to subjects directory (unless --nosubjects specified).
 
48
"""
 
49
 
 
50
    # Parse arguments
 
51
    parser = optparse.OptionParser(usage)
 
52
    parser.add_option("-n", "--dry",
 
53
        action="store_true", dest="dry",
 
54
        help="Print out the actions but don't do anything.")
 
55
    parser.add_option("-J", "--nojail",
 
56
        action="store_true", dest="nojail",
 
57
        help="Don't copy jail/ to jail_system directory")
 
58
    parser.add_option("-S", "--nosubjects",
 
59
        action="store_true", dest="nosubjects",
 
60
        help="Don't copy subject/ to subjects directory.")
 
61
    (options, args) = parser.parse_args(args)
 
62
 
 
63
    # Call the real function
 
64
    __install(options.dry, options.nojail, options.nosubjects)
 
65
 
 
66
def __install(dry=False,nojail=False,nosubjects=False):
 
67
    # Importing configuration is a little tricky
 
68
    sys.path.append(os.path.join(os.pardir, 'lib'))
 
69
    sys.path.append(os.pardir)
 
70
    import conf.conf
 
71
    import install_list
 
72
 
 
73
    # Pull the required varibles out of the config
 
74
    ivle_install_dir = conf.conf.ivle_install_dir
 
75
    jail_base = conf.conf.jail_base
 
76
    jail_system = conf.conf.jail_system
 
77
    subjects_base = conf.conf.subjects_base
 
78
    exercises_base = conf.conf.exercises_base
 
79
 
 
80
    # Must be run as root or a dry run  
 
81
    if dry:
 
82
        print "Dry run (no actions will be executed)\n"
 
83
    
 
84
    if not dry and os.geteuid() != 0:
 
85
        print >>sys.stderr, "Must be root to run build"
 
86
        print >>sys.stderr, "(I need to chown)."
 
87
        return 1
 
88
    
 
89
    # Create the target (install) directory
 
90
    action_mkdir(ivle_install_dir, dry)
 
91
 
 
92
    # Create bin and copy the compiled files there
 
93
    action_mkdir(os.path.join(ivle_install_dir, 'bin'), dry)
 
94
    tramppath = os.path.join(ivle_install_dir, 'bin/trampoline')
 
95
    action_copyfile('trampoline/trampoline', tramppath, dry)
 
96
    # chown trampoline to root and set setuid bit
 
97
    action_chown_setuid(tramppath, dry)
 
98
 
 
99
    timountpath = os.path.join(ivle_install_dir, 'bin/timount')
 
100
    action_copyfile('timount/timount', timountpath, dry)
 
101
 
 
102
    # Create a scripts directory to put the usrmgt-server in.
 
103
    action_mkdir(os.path.join(ivle_install_dir, 'scripts'), dry)
 
104
    usrmgtpath = os.path.join(ivle_install_dir, 'scripts/usrmgt-server')
 
105
    action_copyfile('scripts/usrmgt-server', usrmgtpath, dry)
 
106
    action_chmod_x(usrmgtpath, dry)
 
107
 
 
108
    # Copy the www and lib directories using the list
 
109
    action_copylist(install_list.list_www, ivle_install_dir, dry)
 
110
    action_copylist(install_list.list_lib, ivle_install_dir, dry)
 
111
    
 
112
    # Copy the php directory
 
113
    forum_dir = "www/php/phpBB3"
 
114
    forum_path = os.path.join(ivle_install_dir, forum_dir)
 
115
    action_copytree(forum_dir, forum_path, dry)
 
116
    print "chown -R www-data:www-data %s" % forum_path
 
117
    if not dry:
 
118
        os.system("chown -R www-data:www-data %s" % forum_path)
 
119
 
 
120
    if not nojail:
 
121
        # Copy the local jail directory built by the build action
 
122
        # to the jail_system directory (it will be used to help build
 
123
        # all the students' jails).
 
124
        action_copytree('jail', jail_system, dry)
 
125
    if not nosubjects:
 
126
        # Copy the subjects and exercises directories across
 
127
        action_copylist(install_list.list_subjects, subjects_base, dry,
 
128
            srcdir="./subjects")
 
129
        action_copylist(install_list.list_exercises, exercises_base, dry,
 
130
            srcdir="./exercises")
 
131
 
 
132
    # Append IVLE path to ivle.pth in python site packages
 
133
    # (Unless it's already there)
 
134
    ivle_pth = os.path.join(sys.prefix,
 
135
        "lib/python%s/site-packages/ivle.pth" % PYTHON_VERSION)
 
136
    ivle_www = os.path.join(ivle_install_dir, "www")
 
137
    ivle_lib = os.path.join(ivle_install_dir, "lib")
 
138
    write_ivle_pth = True
 
139
    write_ivle_lib_pth = True
 
140
    try:
 
141
        file = open(ivle_pth, 'r')
 
142
        for line in file:
 
143
            if line.strip() == ivle_www:
 
144
                write_ivle_pth = False
 
145
            elif line.strip() == ivle_lib:
 
146
                write_ivle_lib_pth = False
 
147
        file.close()
 
148
    except (IOError, OSError):
 
149
        pass
 
150
    if write_ivle_pth:
 
151
        action_append(ivle_pth, ivle_www)
 
152
    if write_ivle_lib_pth:
 
153
        action_append(ivle_pth, ivle_lib)
 
154
 
 
155
 
 
156
    # Create the ivle working revision record file
 
157
    action_mkdir(os.path.join(ivle_install_dir, 'version'), dry)
 
158
    ivle_revision_record_file = os.path.join(ivle_install_dir, 'version/ivle-revision.txt')
 
159
    if not dry:
 
160
        try:
 
161
            conf = open(ivle_revision_record_file, "w")
 
162
 
 
163
            conf.write( "# IVLE code revision listing generated by running 'svn status -v ..' from " + os.getcwd() + "\n#\n\n")
 
164
 
 
165
            conf.close()
 
166
        except IOError, (errno, strerror):
 
167
            print "IO error(%s): %s" % (errno, strerror)
 
168
            sys.exit(1)
 
169
 
 
170
        os.system("svn status -v . >> %s" % ivle_revision_record_file)
 
171
 
 
172
    print "Wrote IVLE code revision status to %s" % ivle_revision_record_file
 
173
 
 
174
    return 0
 
175