1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 from VMBuilder import register_plugin, Plugin, VMBuilderUserError
21 from VMBuilder.util import run_cmd
22
23 import logging
24 import os
25 import shutil
26 import VMBuilder
27
29 """
30 Plugin to provide --firstboot and --firstlogin scripts capabilities
31 """
32 name = 'First-Scripts plugin'
33
35 group = self.vm.setting_group('Scripts')
36 group.add_option('--firstboot', metavar='PATH', default='', help='Specify a script that will be copied into the guest and executed the first time the machine boots. This script must not be interactive.')
37 group.add_option('--firstlogin', metavar='PATH', default='', help='Specify a script that will be copied into the guest and will be executed the first time the user logs in. This script can be interactive.')
38 self.vm.register_setting_group(group)
39
41
42 if self.vm.firstboot:
43 logging.debug("Checking if firstboot script %s exists" % (self.vm.firstboot,))
44 if not(os.path.isfile(self.vm.firstboot)):
45 raise VMBuilderUserError('The path to the first-boot script is invalid: %s. Make sure you are providing a full path.' % self.vm.firstboot)
46
47 if self.vm.firstlogin:
48 logging.debug("Checking if first login script %s exists" % (self.vm.firstlogin,))
49 if not(os.path.isfile(self.vm.firstlogin)):
50 raise VMBuilderUserError('The path to the first-login script is invalid: %s. Make sure you are providing a full path.' % self.vm.firstlogin)
51
52 - def post_install(self):
53 logging.debug("Installing firstboot script %s" % (self.vm.firstboot,))
54 if self.vm.firstboot:
55 self.vm.install_file('/root/firstboot.sh', source=self.vm.firstboot, mode=0700)
56 os.rename('%s/etc/rc.local' % self.vm.installdir, '%s/etc/rc.local.orig' % self.vm.installdir)
57 self.install_from_template('/etc/rc.local', 'firstbootrc', mode=0755)
58
59 logging.debug("Installing first login script %s" % (self.vm.firstlogin,))
60 if self.vm.firstlogin:
61 self.vm.install_file('/root/firstlogin.sh', source=self.vm.firstlogin, mode=0755)
62 os.rename('%s/etc/bash.bashrc' % self.vm.installdir, '%s/etc/bash.bashrc.orig' % self.vm.installdir)
63 self.install_from_template('/etc/bash.bashrc', 'firstloginrc')
64
65 return True
66
67 register_plugin(Firstscripts)
68