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

« back to all changes in this revision

Viewing changes to setup/install.py

Added overlay system and console overlay. Note that the console overlay
is no longer special cased, allowing multiple overlays per page.

This commit breaks the original console tab.

Show diffs side-by-side

added added

removed removed

Lines of Context:
22
22
import optparse
23
23
import os
24
24
import sys
25
 
import functools
26
25
 
27
26
from setup import util
28
27
 
29
 
PYTHON_VERSION = sys.version[:3]
30
 
 
31
28
def install(args):
32
29
    usage = """usage: %prog install [options]
33
30
(Requires root)
36
33
Copy bin/trampoline/trampoline to $target/bin.
37
34
Copy bin/timount/timount to $target/bin.
38
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
39
"""
40
40
 
41
41
    # Parse arguments
43
43
    parser.add_option("-n", "--dry",
44
44
        action="store_true", dest="dry",
45
45
        help="Print out the actions but don't do anything.")
46
 
    parser.add_option("-R", "--nosvnrevno",
47
 
        action="store_true", dest="nosvnrevno",
48
 
        help="Don't write out the Subversion revision to the share directory.")
49
 
    parser.add_option("--root",
50
 
        action="store", dest="rootdir",
51
 
        help="Install into a different root directory.",
52
 
        default='/')
53
 
    parser.add_option("--prefix",
54
 
        action="store", dest="prefix",
55
 
        help="Base prefix to install IVLE into (default: /usr/local).",
56
 
        default='/usr/local')
57
 
    parser.add_option("--python-site-packages",
58
 
        action="store", dest="python_site_packages",
59
 
        help="Path to Python site packages directory.",
60
 
        default='/usr/local/lib/python%s/site-packages' % PYTHON_VERSION)
 
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.")
61
52
    (options, args) = parser.parse_args(args)
62
53
 
63
54
    # Call the real function
64
 
    return __install(prefix=options.prefix,
65
 
                     python_site_packages=options.python_site_packages,
66
 
                     dry=options.dry, rootdir=options.rootdir,
67
 
                     nosvnrevno=options.nosvnrevno)
 
55
    return __install(options.dry, options.nojail, options.nosubjects)
68
56
 
69
 
def __install(prefix, python_site_packages, dry=False, rootdir=None,
70
 
              nosvnrevno=False):
 
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")
71
60
    install_list = util.InstallList()
72
61
 
73
 
    # We need to apply make_install_path with the rootdir to an awful lot of
74
 
    # config variables, so make it easy:
75
 
    mip = functools.partial(util.make_install_path, rootdir)
76
 
 
77
 
    # Compute the lib_path, share_path and bin_path (copied from
78
 
    # ivle/conf/conf.py).
79
 
    lib_path = mip(os.path.join(prefix, 'lib/ivle'))
80
 
    share_path = mip(os.path.join(prefix, 'share/ivle'))
81
 
    bin_path = mip(os.path.join(prefix, 'bin'))
82
 
    python_site_packages = mip(python_site_packages)
 
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
83
71
 
84
72
    # Must be run as root or a dry run  
85
73
    if dry:
86
74
        print "Dry run (no actions will be executed)\n"
87
75
    
88
76
    if not dry and os.geteuid() != 0:
89
 
        print >>sys.stderr, "Must be root to run install"
 
77
        print >>sys.stderr, "Must be root to run build"
 
78
        print >>sys.stderr, "(I need to chown)."
90
79
        return 1
91
80
 
92
 
    # Create the config directory.
93
 
    util.action_mkdir(mip('/etc/ivle/plugins.d'), dry)
 
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)
94
101
 
95
102
    # Create lib and copy the compiled files there
96
103
    util.action_mkdir(lib_path, dry)
103
110
    timountpath = os.path.join(lib_path, 'timount')
104
111
    util.action_copyfile('bin/timount/timount', timountpath, dry)
105
112
 
106
 
    # Copy in the services (only usrmgt-server is needed on the host, but
107
 
    # the jail build requires the rest).
108
 
    util.action_copylist(install_list.list_services, share_path, dry)
 
113
    # Create a services directory to put the usrmgt-server in.
 
114
    util.action_mkdir(os.path.join(share_path, 'services'), dry)
 
115
 
109
116
    usrmgtpath = os.path.join(share_path, 'services/usrmgt-server')
 
117
    util.action_copyfile('services/usrmgt-server', usrmgtpath, dry)
110
118
    util.action_chmod_x(usrmgtpath, dry)
111
119
 
112
120
    # Copy the user-executable binaries using the list.
113
121
    util.action_copylist(install_list.list_user_binaries, bin_path, dry,
114
122
                         onlybasename=True)
115
123
 
116
 
    # Copy the lib directory (using the list)
 
124
    # Copy the www and lib directories using the list
 
125
    util.action_copylist(install_list.list_www, share_path, dry)
117
126
    util.action_copylist(install_list.list_ivle_lib, python_site_packages, dry)
118
 
 
119
 
    if not nosvnrevno:
120
 
        # Create the ivle working revision record file
121
 
        ivle_revision_file = os.path.join(share_path, 'revision.txt')
122
 
        if not dry:
123
 
            try:
124
 
                conf = open(ivle_revision_file, "w")
125
 
 
126
 
                conf.write("""# SVN revision r%s
 
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
127
174
# Source tree location: %s
128
175
# Modified files:
129
176
""" % (util.get_svn_revision(), os.getcwd()))
130
177
 
131
 
                conf.close()
132
 
            except IOError, (errno, strerror):
133
 
                print "IO error(%s): %s" % (errno, strerror)
134
 
                sys.exit(1)
135
 
 
136
 
            os.system("svn status . >> %s" % ivle_revision_file)
137
 
 
138
 
        print "Wrote IVLE code revision status to %s" % ivle_revision_file
 
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
139
186
 
140
187
    return 0
141
188