mirror of
https://github.com/kevingruesser/bootstrap-vz.git
synced 2025-08-24 15:36:27 +00:00

Also move task for adjustment of that script into common. It still needs some modifications to support device names other than xvda
74 lines
2.6 KiB
Python
74 lines
2.6 KiB
Python
from base import Task
|
|
from common import phases
|
|
from common.tools import log_check_call
|
|
import os.path
|
|
|
|
|
|
class ResolveInitScripts(Task):
|
|
description = 'Determining which startup scripts to install or disable'
|
|
phase = phases.system_modification
|
|
|
|
def run(self, info):
|
|
init_scripts = {}
|
|
init_scripts['expand-root'] = 'expand-root'
|
|
|
|
from subprocess import CalledProcessError
|
|
try:
|
|
log_check_call(['/usr/sbin/chroot', info.root,
|
|
'/usr/bin/dpkg-query', '-W', 'openssh-server'])
|
|
init_scripts['generate-ssh-hostkeys'] = 'generate-ssh-hostkeys'
|
|
if info.manifest.system['release'] == 'squeeze':
|
|
init_scripts['generate-ssh-hostkeys'] = 'squeeze/generate-ssh-hostkeys'
|
|
except CalledProcessError:
|
|
pass
|
|
|
|
disable_scripts = ['hwclock.sh']
|
|
if info.manifest.system['release'] == 'squeeze':
|
|
disable_scripts.append('hwclockfirst.sh')
|
|
|
|
init_scripts_dir = os.path.normpath(os.path.join(os.path.dirname(__file__), '../assets/init.d'))
|
|
for name, path in init_scripts.iteritems():
|
|
init_scripts[name] = os.path.join(init_scripts_dir, path)
|
|
|
|
info.initd = {'install': init_scripts,
|
|
'disable': disable_scripts}
|
|
|
|
|
|
class InstallInitScripts(Task):
|
|
description = 'Installing startup scripts'
|
|
phase = phases.system_modification
|
|
predecessors = [ResolveInitScripts]
|
|
|
|
def run(self, info):
|
|
import stat
|
|
rwxr_xr_x = (stat.S_IRUSR | stat.S_IWUSR | stat.S_IXUSR |
|
|
stat.S_IRGRP | stat.S_IXGRP |
|
|
stat.S_IROTH | stat.S_IXOTH)
|
|
from shutil import copy
|
|
for name, src in info.initd['install'].iteritems():
|
|
dst = os.path.join(info.root, 'etc/init.d', name)
|
|
copy(src, dst)
|
|
os.chmod(dst, rwxr_xr_x)
|
|
log_check_call(['/usr/sbin/chroot', info.root, '/sbin/insserv', '--default', name])
|
|
|
|
for name in info.initd['disable']:
|
|
log_check_call(['/usr/sbin/chroot', info.root, '/sbin/insserv', '--remove', name])
|
|
|
|
|
|
class AdjustExpandRootScript(Task):
|
|
description = 'Adjusting the expand-root script'
|
|
phase = phases.system_modification
|
|
predecessors = [InstallInitScripts]
|
|
|
|
def run(self, info):
|
|
if 'expand-root' not in info.initd['install']:
|
|
raise TaskError('The expand-root script was not installed')
|
|
|
|
from base.fs.partitionmaps.none import NoPartitions
|
|
if not isinstance(info.volume.partition_map, NoPartitions):
|
|
import os.path
|
|
from common.tools import sed_i
|
|
script = os.path.join(info.root, 'etc/init.d.expand-root')
|
|
root_idx = info.volume.partition_map.root.get_index()
|
|
device_path = 'device_path="/dev/xvda{idx}"'.format(idx=root_idx)
|
|
sed_i(script, '^device_path="/dev/xvda$', device_path)
|