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

« back to all changes in this revision

Viewing changes to bin/ivle-buildjail

  • Committer: William Grant
  • Date: 2009-06-24 09:57:42 UTC
  • Revision ID: grantw@unimelb.edu.au-20090624095742-0mk2uzne2glpk7xf
Add default messages to our HTTP errors. Fixes issue #98.

Show diffs side-by-side

added added

removed removed

Lines of Context:
18
18
 
19
19
import optparse
20
20
import os
21
 
import stat
22
21
import sys
23
22
import shutil
24
23
 
26
25
import ivle.config
27
26
import ivle.jailbuilder.debian
28
27
 
29
 
class UnsafeJail(Exception):
30
 
    pass
31
 
 
32
28
usage = """usage: %prog [options]
33
29
(requires root)
34
30
Builds or updates the base IVLE jail."""
47
43
    help='''Apply any package updates in the jail.''')
48
44
parser.add_option("-m", "--mirror",
49
45
    action="store", dest="apt_mirror",
50
 
    help="Sets the apt mirror.", default=conf['jail']['mirror'])
 
46
    help="Sets the apt mirror.", default="http://archive.ubuntu.com/ubuntu")
51
47
parser.add_option("--python-site-packages",
52
48
    action="store", dest="python_site_packages",
53
49
    help="Path to Python site packages directory inside the jail.",
141
137
        shutil.rmtree(jail_site_packages)
142
138
    shutil.copytree(ivle_site_packages, jail_site_packages)
143
139
 
144
 
# Make /tmp and /var/lock un-world-writable. /tmp will be mounted over,
145
 
# and /var/{lock,tmp} should die.
146
 
for path in ('tmp', 'var/lock', 'var/tmp'):
147
 
    path = os.path.join(build_path, path)
148
 
    os.chmod(path, os.stat(path).st_mode & ~stat.S_IWOTH)
149
 
 
150
 
# Verify that nothing in the jail is world-writable.
151
 
# We don't want students to write into places that others can see.
152
 
for path, dirs, files in os.walk(build_path):
153
 
    for dname in dirs:
154
 
        d = os.path.join(path, dname)
155
 
        if os.path.islink(d):
156
 
            continue
157
 
        if os.stat(d).st_mode & stat.S_IWOTH:
158
 
            raise UnsafeJail(d)
159
 
 
160
 
    for fname in files:
161
 
        f = os.path.join(path, fname)
162
 
        if os.path.islink(f):
163
 
            continue
164
 
        if os.stat(f).st_mode & stat.S_IWOTH:
165
 
            if (os.path.dirname(f) == os.path.join(build_path, 'dev') and
166
 
                os.path.basename(f) in ('ptmx', 'null', 'tty', 'full', 'zero',
167
 
                                        'random', 'urandom')
168
 
                ):
169
 
                continue
170
 
            raise UnsafeJail(f)
171
 
    
172
 
 
173
140
if os.spawnvp(os.P_WAIT, 'rsync', ['rsync', '-a', '--delete',
174
141
              build_path + '/', ivle.conf.jail_system]) != 0:
175
142
    print >> sys.stderr, "Jail copying failed."
176
143
    sys.exit(1)
177
144
 
178
 
# Now mangle things a bit, so we can bind-mount the user bits in.
179
 
# /etc/passwd and /etc/ivle/ivle.conf need to be symlinks to somewhere in /home
180
 
 
181
 
os.rename(os.path.join(ivle.conf.jail_system, 'etc/passwd'),
182
 
          os.path.join(ivle.conf.jail_system, 'home/.passwd')
183
 
          )
184
 
os.symlink('../home/.passwd', os.path.join(ivle.conf.jail_system, 'etc/passwd'))
185
 
 
186
 
os.makedirs(os.path.join(ivle.conf.jail_system, "etc/ivle"))
187
 
os.symlink('../../home/.ivle.conf',
188
 
           os.path.join(ivle.conf.jail_system, "etc/ivle/ivle.conf"))