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

« back to all changes in this revision

Viewing changes to setup/install.py

  • Committer: dcoles
  • Date: 2008-03-31 01:10:43 UTC
  • Revision ID: svn-v3-trunk0:2b9c9e99-6f39-0410-b283-7f802c844ae2:trunk:720
download: Fixing the download button.
    We now run download in the jail so that we don't encounter permission 
    problems.  Since this is very similar to "serve" we now extend serveservice 
    to do the work of download and use the serve code to do download.

    w/a/s/__init__.py: Overloaded servefile to support downloads
    w/a/d/__init__.py: Use servefile from server rather than old implementaion
    s/serveservice: Added support for download of directories (as zip files)
    l/c/zip.py: Now uses paths not ivle_urls

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
 
 
26
 
from setup import util
27
 
 
28
 
def install(args):
29
 
    usage = """usage: %prog install [options]
30
 
(Requires root)
31
 
Create target install directory ($target).
32
 
Create $target/bin.
33
 
Copy bin/trampoline/trampoline to $target/bin.
34
 
Copy bin/timount/timount to $target/bin.
35
 
chown and chmod the installed trampoline.
36
 
Copy www/ to $target.
37
 
Copy jail/ to jail_system directory (unless --nojail specified).
38
 
Copy subjects/ to subjects directory (unless --nosubjects specified).
39
 
"""
40
 
 
41
 
    # Parse arguments
42
 
    parser = optparse.OptionParser(usage)
43
 
    parser.add_option("-n", "--dry",
44
 
        action="store_true", dest="dry",
45
 
        help="Print out the actions but don't do anything.")
46
 
    parser.add_option("-J", "--nojail",
47
 
        action="store_true", dest="nojail",
48
 
        help="Don't copy jail/ to jail_system directory")
49
 
    parser.add_option("-S", "--nosubjects",
50
 
        action="store_true", dest="nosubjects",
51
 
        help="Don't copy subject/ to subjects directory.")
52
 
    (options, args) = parser.parse_args(args)
53
 
 
54
 
    # Call the real function
55
 
    return __install(options.dry, options.nojail, options.nosubjects)
56
 
 
57
 
def __install(dry=False,nojail=False,nosubjects=False):
58
 
    # We need to import the one in the working copy, not in the system path.
59
 
    confmodule = __import__("ivle/conf/conf")
60
 
    install_list = util.InstallList()
61
 
 
62
 
    # Pull the required varibles out of the config
63
 
    lib_path = confmodule.lib_path
64
 
    share_path = confmodule.share_path
65
 
    bin_path = confmodule.bin_path
66
 
    python_site_packages = confmodule.python_site_packages
67
 
    jail_base = confmodule.jail_base
68
 
    jail_system = confmodule.jail_system
69
 
    subjects_base = confmodule.subjects_base
70
 
    exercises_base = confmodule.exercises_base
71
 
 
72
 
    # Must be run as root or a dry run  
73
 
    if dry:
74
 
        print "Dry run (no actions will be executed)\n"
75
 
    
76
 
    if not dry and os.geteuid() != 0:
77
 
        print >>sys.stderr, "Must be root to run build"
78
 
        print >>sys.stderr, "(I need to chown)."
79
 
        return 1
80
 
 
81
 
    # Make some directories for data.
82
 
    util.action_mkdir(confmodule.log_path, dry)
83
 
    util.action_mkdir(confmodule.data_path, dry)
84
 
    util.action_mkdir(confmodule.jail_base, dry)
85
 
    util.action_mkdir(confmodule.jail_src_base, dry)
86
 
    util.action_mkdir(confmodule.content_path, dry)
87
 
    util.action_mkdir(confmodule.notices_path, dry)
88
 
    util.action_mkdir(os.path.join(confmodule.data_path, 'sessions'), dry)
89
 
    util.action_mkdir(confmodule.svn_path, dry)
90
 
    util.action_mkdir(confmodule.svn_repo_path, dry)
91
 
    util.action_mkdir(os.path.join(confmodule.svn_repo_path, 'users'), dry)
92
 
    util.action_mkdir(os.path.join(confmodule.svn_repo_path, 'groups'), dry)
93
 
 
94
 
    util.action_chown(confmodule.log_path, util.wwwuid, util.wwwuid, dry)
95
 
    util.action_chown(os.path.join(confmodule.data_path, 'sessions'),
96
 
                      util.wwwuid, util.wwwuid, dry)
97
 
    util.action_chown(os.path.join(confmodule.svn_repo_path, 'users'),
98
 
                      util.wwwuid, util.wwwuid, dry)
99
 
    util.action_chown(os.path.join(confmodule.svn_repo_path, 'groups'),
100
 
                      util.wwwuid, util.wwwuid, dry)
101
 
 
102
 
    # Create lib and copy the compiled files there
103
 
    util.action_mkdir(lib_path, dry)
104
 
 
105
 
    tramppath = os.path.join(lib_path, 'trampoline')
106
 
    util.action_copyfile('bin/trampoline/trampoline', tramppath, dry)
107
 
    # chown trampoline to root and set setuid bit
108
 
    util.action_chown_setuid(tramppath, dry)
109
 
 
110
 
    timountpath = os.path.join(lib_path, 'timount')
111
 
    util.action_copyfile('bin/timount/timount', timountpath, dry)
112
 
 
113
 
    # Create a services directory to put the usrmgt-server in.
114
 
    util.action_mkdir(os.path.join(share_path, 'services'), dry)
115
 
 
116
 
    usrmgtpath = os.path.join(share_path, 'services/usrmgt-server')
117
 
    util.action_copyfile('services/usrmgt-server', usrmgtpath, dry)
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 www and lib directories using the list
125
 
    util.action_copylist(install_list.list_www, share_path, dry)
126
 
    util.action_copylist(install_list.list_ivle_lib, python_site_packages, dry)
127
 
    
128
 
    # Make the config file private
129
 
    # XXX Get rid of lib
130
 
    configpath = os.path.join(python_site_packages, 'ivle/conf/conf.py')
131
 
    util.action_make_private(configpath, dry)
132
 
 
133
 
    # Copy the php directory
134
 
    forum_dir = "www/php/phpBB3"
135
 
    forum_path = os.path.join(share_path, forum_dir)
136
 
    util.action_copytree(forum_dir, forum_path, dry)
137
 
    print "chown -R www-data:www-data %s" % forum_path
138
 
    if not dry:
139
 
        os.system("chown -R www-data:www-data %s" % forum_path)
140
 
 
141
 
    if not nojail:
142
 
        # Copy the local jail directory built by the build action
143
 
        # to the jail_system directory (it will be used to help build
144
 
        # all the students' jails).
145
 
        util.action_copytree('jail', jail_system, dry)
146
 
 
147
 
    if not nosubjects:
148
 
        # Copy the subjects and exercises directories across
149
 
        util.action_mkdir(subjects_base, dry)
150
 
        util.action_copylist(install_list.list_subjects, subjects_base, dry,
151
 
            srcdir="./subjects")
152
 
        util.action_mkdir(exercises_base, dry)
153
 
        util.action_copylist(install_list.list_exercises, exercises_base, dry,
154
 
            srcdir="./exercises")
155
 
 
156
 
    # XXX We shouldn't have ivle.pth at all any more.
157
 
    # We may still need the www packages to be importable.
158
 
    # Anything from www that is needed from the outside should go to lib.
159
 
    ivle_pth = os.path.join(python_site_packages, "ivle.pth")
160
 
    try:
161
 
        file = open(ivle_pth, 'w')
162
 
        file.write(os.path.join(share_path, "www"))
163
 
        file.close()
164
 
    except (IOError, OSError):
165
 
        pass
166
 
 
167
 
    # Create the ivle working revision record file
168
 
    ivle_revision_record_file = os.path.join(share_path, 'ivle-revision.txt')
169
 
    if not dry:
170
 
        try:
171
 
            conf = open(ivle_revision_record_file, "w")
172
 
 
173
 
            conf.write("""# SVN revision r%s
174
 
# Source tree location: %s
175
 
# Modified files:
176
 
""" % (util.get_svn_revision(), os.getcwd()))
177
 
 
178
 
            conf.close()
179
 
        except IOError, (errno, strerror):
180
 
            print "IO error(%s): %s" % (errno, strerror)
181
 
            sys.exit(1)
182
 
 
183
 
        os.system("svn status . >> %s" % ivle_revision_record_file)
184
 
 
185
 
    print "Wrote IVLE code revision status to %s" % ivle_revision_record_file
186
 
 
187
 
    return 0
188