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

« back to all changes in this revision

Viewing changes to bin/ivle-mountallusers

  • Committer: William Grant
  • Date: 2010-02-15 05:37:50 UTC
  • Revision ID: grantw@unimelb.edu.au-20100215053750-hihmegnp8e7dshc2
Ignore test coverage files.

Show diffs side-by-side

added added

removed removed

Lines of Context:
20
20
# Author:  William Grant
21
21
# Date:    4/7/2008
22
22
 
23
 
# Script to UnionFS-mount jails for all users on the system.
 
23
# Script to bind-mount jails for all users on the system.
24
24
# Requires root to run.
25
25
 
26
26
import sys
31
31
 
32
32
import ivle.config
33
33
import ivle.database
34
 
import ivle.conf
35
34
 
36
35
p = optparse.OptionParser()
37
36
p.add_option('--verbose', '-v', action='store_true')
50
49
                          os.path.basename(sys.argv[0])
51
50
    sys.exit(1)
52
51
 
53
 
store = ivle.database.get_store(ivle.config.Config())
 
52
config = ivle.config.Config()
 
53
store = ivle.database.get_store(config)
54
54
users = store.find(ivle.database.User).order_by(ivle.database.User.login)
55
55
 
56
 
logging.info("mass aufs mount started")
 
56
logging.info("mass bind mount started")
57
57
 
58
58
for user in users:
59
59
    login = user.login
60
60
    # This is where we'll mount to...
61
 
    destdir = os.path.join(ivle.conf.jail_base, login)
 
61
    destdir = os.path.join(config['paths']['jails']['mounts'], login)
62
62
    # ... and this is where we'll get the user bits.
63
 
    srcdir = os.path.join(ivle.conf.jail_src_base, login)
 
63
    srcdir = os.path.join(config['paths']['jails']['src'], login)
64
64
 
65
65
    try:
66
66
        if not options.unmount:
70
70
            if not os.path.exists(destdir):
71
71
                logging.debug("user %s had no mountpoint - creating" % login)
72
72
                os.mkdir(destdir)
73
 
        
74
 
            if os.system('/bin/mount -t aufs -o dirs=%s:%s=ro none %s'
75
 
                             % (srcdir,ivle.conf.jail_system,destdir)) == 0:
76
 
                logging.info("mounted user %s's jail." % login)
77
 
            else:
78
 
                logging.error("failed to mount user %s's jail!" % login)
 
73
            if os.path.exists(os.path.join(destdir, 'lib')):
 
74
                logging.info("%s's jail appears mounted. skipping." % login)
 
75
                continue
 
76
            # Mount read only root template
 
77
            if os.system('/bin/mount --bind -o ro %s %s'
 
78
                    % (config['paths']['jails']['template'], destdir)) == 0:
 
79
                logging.debug("mounted user %s's root template" % login)
 
80
            else:
 
81
                logging.debug("failed to mount %s's root template!" % login)
 
82
                continue
 
83
            # Mount homedir
 
84
            if os.system('/bin/mount --bind %s %s'
 
85
                    % (os.path.join(srcdir,'home'), os.path.join(destdir,'home'))) == 0:
 
86
                logging.debug("mounted user %s's home." % login)
 
87
            else:
 
88
                logging.error("failed to mount user %s's home!" % login)
 
89
                os.system("/bin/umount %s" % destdir)
 
90
                continue
 
91
            # Mount tmp
 
92
            if os.system('/bin/mount --bind %s %s'
 
93
                    % (os.path.join(srcdir,'tmp'), os.path.join(destdir,'tmp'))) == 0:
 
94
                logging.debug("mounted user %s's tmp." % login)
 
95
            else:
 
96
                logging.error("failed to mount user %s's tmp!" % login)
 
97
                os.system("/bin/umount %s" % os.path.join(destdir,'home'))
 
98
                os.system("/bin/umount %s" % destdir)
 
99
                continue
 
100
            logging.info("mounted user %s's jail" % login)
79
101
        else:
80
 
            os.system('/bin/umount ' + destdir)
 
102
            os.system("/bin/umount %s" % os.path.join(destdir,'tmp'))
 
103
            os.system("/bin/umount %s" % os.path.join(destdir,'home'))
 
104
            os.system("/bin/umount %s" % destdir)
81
105
            logging.info("unmounted user %s's jail." % login)
82
106
    except Exception, message:
83
107
        logging.warning(str(message))