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

« back to all changes in this revision

Viewing changes to bin/ivle-buildjail

  • Committer: mattgiuca
  • Date: 2008-01-10 00:10:11 UTC
  • Revision ID: svn-v3-trunk0:2b9c9e99-6f39-0410-b283-7f802c844ae2:trunk:149
fileservice:
    * Both subversion and OS mode listings now output "." as one of the files.
        This is deliberate in order for the client to see (by the presence or
        absence of the "svnstatus" attribute) whether this directory is
        under version control.
    * Directories no longer display a "type" attribute (since this was always
        just the default type, it's meaningless).
    * Fixed bug where unversioned directories inside a versioned directory
        output an empty listing.

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
#!/usr/bin/python
2
 
# IVLE - Informatics Virtual Learning Environment
3
 
# Copyright (C) 2009 The University of Melbourne
4
 
#
5
 
# This program is free software; you can redistribute it and/or modify
6
 
# it under the terms of the GNU General Public License as published by
7
 
# the Free Software Foundation; either version 2 of the License, or
8
 
# (at your option) any later version.
9
 
#
10
 
# This program is distributed in the hope that it will be useful,
11
 
# but WITHOUT ANY WARRANTY; without even the implied warranty of
12
 
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13
 
# GNU General Public License for more details.
14
 
#
15
 
# You should have received a copy of the GNU General Public License
16
 
# along with this program; if not, write to the Free Software
17
 
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
18
 
 
19
 
import optparse
20
 
import os
21
 
import sys
22
 
import shutil
23
 
 
24
 
import ivle.conf
25
 
import ivle.config
26
 
import ivle.jailbuilder.debian
27
 
 
28
 
usage = """usage: %prog [options]
29
 
(requires root)
30
 
Builds or updates the base IVLE jail."""
31
 
 
32
 
conf = ivle.config.Config()
33
 
build_path = ivle.conf.jail_system_build
34
 
 
35
 
# Parse arguments
36
 
parser = optparse.OptionParser(usage)
37
 
parser.add_option("-r", "--recreate",
38
 
    action="store_true", dest="recreate",
39
 
    help='''Completely recreate the jail - don't just update its IVLE code.
40
 
Be warned, this may download hundreds of megabytes!''')
41
 
parser.add_option("-u", "--upgrade",
42
 
    action="store_true", dest="upgrade",
43
 
    help='''Apply any package updates in the jail.''')
44
 
parser.add_option("-m", "--mirror",
45
 
    action="store", dest="apt_mirror",
46
 
    help="Sets the apt mirror.", default=conf['jail']['mirror'])
47
 
parser.add_option("--python-site-packages",
48
 
    action="store", dest="python_site_packages",
49
 
    help="Path to Python site packages directory inside the jail.",
50
 
    default=None)
51
 
(options, args) = parser.parse_args(sys.argv)
52
 
 
53
 
if os.geteuid() != 0:
54
 
    print >> sys.stderr, "Must be root to run buildjail."
55
 
    sys.exit(1)
56
 
 
57
 
if not options.recreate and not os.path.exists(build_path):
58
 
    print >> sys.stderr, "No jail exists -- please rerun with -r."
59
 
    sys.exit(1)
60
 
 
61
 
if (options.python_site_packages is not None and
62
 
    options.python_site_packages[:1] not in (os.path.sep, os.path.altsep)):
63
 
    print >> sys.stderr, "python-site-packages must be an absolute path."
64
 
    sys.exit(1)
65
 
 
66
 
if options.recreate:
67
 
    options.upgrade = True
68
 
 
69
 
    # Create the jail and its subdirectories
70
 
    # Note: Other subdirs will be made by copying files
71
 
    if options.apt_mirror is not None:
72
 
        os.environ['MIRROR'] = options.apt_mirror
73
 
 
74
 
    os.system('rm -rf --one-file-system ' + build_path)
75
 
    ivle.jailbuilder.debian.debootstrap_create_jail(conf['jail']['suite'],
76
 
              build_path, mirror=options.apt_mirror)
77
 
 
78
 
    ivle.jailbuilder.debian.apt_update_cache(build_path)
79
 
    ivle.jailbuilder.debian.apt_install(build_path,
80
 
                        ['python2.5', 'python-cjson', 'python-svn'])
81
 
 
82
 
    ivle.jailbuilder.debian.apt_clean(build_path)
83
 
 
84
 
if options.upgrade:
85
 
    # Run apt-get update, apt-get upgrade and apt-get clean.
86
 
    ivle.jailbuilder.debian.mangle_sources_list(build_path, clobber=True)
87
 
    ivle.jailbuilder.debian.mangle_sources_list(build_path, lines=[
88
 
            'deb %s %s%s %s' % (options.apt_mirror, conf['jail']['suite'],
89
 
                                pocket, ' '.join(['main', 'universe']))
90
 
            for pocket in ('', '-updates', '-security')])
91
 
 
92
 
    # Add any extra site apt sources.
93
 
    if conf['jail']['extra_sources']:
94
 
        ivle.jailbuilder.debian.mangle_sources_list(build_path,
95
 
                  conf['jail']['extra_sources'])
96
 
 
97
 
    # Add any extra site apt keys.
98
 
    if conf['jail']['extra_keys']:
99
 
        ivle.jailbuilder.debian.apt_add_key(build_path,
100
 
                                            conf['jail']['extra_keys'])
101
 
 
102
 
    ivle.jailbuilder.debian.apt_update_cache(build_path)
103
 
    ivle.jailbuilder.debian.apt_upgrade(build_path)
104
 
 
105
 
    # Install any extra site packages.
106
 
    if conf['jail']['extra_packages']:
107
 
        ivle.jailbuilder.debian.apt_install(build_path,
108
 
                  conf['jail']['extra_packages'])
109
 
 
110
 
    ivle.jailbuilder.debian.apt_clean(build_path)
111
 
 
112
 
if conf['jail']['devmode']:
113
 
    # Copy all console and operating system files into the jail
114
 
    services_path = os.path.join(ivle.conf.share_path, 'services')
115
 
    jail_services_path = os.path.join(build_path, services_path[1:])
116
 
    if os.path.exists(jail_services_path):
117
 
        shutil.rmtree(jail_services_path)
118
 
    shutil.copytree(services_path, jail_services_path)
119
 
 
120
 
    # Also copy the IVLE lib directory into the jail
121
 
    # This is necessary for running certain services
122
 
 
123
 
    # ivle_site_packages is the IVLE install location outside the jail
124
 
    ivle_site_packages = os.path.dirname(ivle.__file__)
125
 
 
126
 
    if options.python_site_packages is None:
127
 
        # Get the site packages from the IVLE install location *OUTSIDE* the
128
 
        # jail. Warning! This only works if you have the same Python site
129
 
        # packages directory inside and out (ie. same Python version).
130
 
        # If not, you should use --python-site-packages.
131
 
        jail_site_packages = os.path.join(build_path, ivle_site_packages[1:])
132
 
    else:
133
 
        # User-specified site packages
134
 
        jail_site_packages = os.path.join(build_path,
135
 
                                options.python_site_packages[1:], "ivle")
136
 
    if os.path.exists(jail_site_packages):
137
 
        shutil.rmtree(jail_site_packages)
138
 
    shutil.copytree(ivle_site_packages, jail_site_packages)
139
 
 
140
 
if os.spawnvp(os.P_WAIT, 'rsync', ['rsync', '-a', '--delete',
141
 
              build_path + '/', ivle.conf.jail_system]) != 0:
142
 
    print >> sys.stderr, "Jail copying failed."
143
 
    sys.exit(1)
144