Add a common module library.

This commit is contained in:
Ian Gulliver
2016-05-19 00:12:44 +00:00
parent fc7a670a1f
commit 0274794674
2 changed files with 74 additions and 4 deletions

View File

@@ -216,17 +216,21 @@ class ImageBuilder(object):
os.fchmod(fh.fileno(), 0o744) os.fchmod(fh.fileno(), 0o744)
def _InstallPackages(self, chroot_path): def _InstallPackages(self, chroot_path):
os.environ['DEBIAN_FRONTEND'] = 'noninteractive' env = os.environ.copy()
env['DEBIAN_FRONTEND'] = 'noninteractive'
self._ExecChroot( self._ExecChroot(
chroot_path, chroot_path,
'apt-get', 'apt-get',
'update') 'update',
env=env)
self._ExecChroot( self._ExecChroot(
chroot_path, chroot_path,
'apt-get', 'apt-get',
'install', 'install',
'--assume-yes', '--assume-yes',
*self._BASE_PACKAGES) *self._BASE_PACKAGES,
env=env)
def _WriteVersion(self, chroot_path, timestamp): def _WriteVersion(self, chroot_path, timestamp):
with open(os.path.join(chroot_path, 'etc', 'iconograph.json'), 'w') as fh: with open(os.path.join(chroot_path, 'etc', 'iconograph.json'), 'w') as fh:
@@ -240,13 +244,17 @@ class ImageBuilder(object):
fh.write('\n') fh.write('\n')
def _RunModules(self, chroot_path): def _RunModules(self, chroot_path):
env = os.environ.copy()
env['PYTHONPATH'] = os.path.abspath(os.path.join(os.path.dirname(sys.argv[0]), 'module_lib'))
for module in self._modules: for module in self._modules:
self._Exec( self._Exec(
'%(module)s --chroot-path=%(chroot_path)s' % { '%(module)s --chroot-path=%(chroot_path)s' % {
'module': module, 'module': module,
'chroot_path': chroot_path, 'chroot_path': chroot_path,
}, },
shell=True) shell=True,
env=env)
def _CleanPackages(self, chroot_path): def _CleanPackages(self, chroot_path):
self._ExecChroot( self._ExecChroot(

View File

@@ -0,0 +1,62 @@
#!/usr/bin/python3
import os
import shutil
import subprocess
import sys
class IconModule(object):
def __init__(self, chroot_path):
self._chroot_path = chroot_path
def Exec(self, *args, **kwargs):
print('+', args)
subprocess.check_call(args, **kwargs)
def ExecChroot(self, *args, **kwargs):
self.Exec('chroot', self._chroot_path, *args, **kwargs)
def CopyRootFSOverlay(self, source_dir):
start_pos = len(source_dir) + 1
for dirpath, dirnames, filenames in os.walk(source_dir):
dest_dir = os.path.join(self._chroot_path, dirpath[start_pos:])
# pylint: disable=unexpected-keyword-arg
os.makedirs(dest_dir, exist_ok=True)
shutil.copystat(dirpath, dest_dir)
for dirname in dirnames:
source_path = os.path.join(dirpath, dirname)
dest_path = os.path.join(dest_dir, dirname)
try:
link = os.readlink(source_path)
os.symlink(link, dest_path)
except OSError:
pass
for filename in filenames:
source_path = os.path.join(dirpath, filename)
dest_path = os.path.join(dest_dir, filename)
try:
link = os.readlink(source_path)
os.symlink(link, dest_path)
except OSError:
shutil.copy(source_path, dest_path)
# In case we copied libraries
self.ExecChroot('ldconfig')
def InstallPackages(self, *packages):
self.ExecChroot('apt-get', 'install', '--assume-yes', '--no-install-recommends', *packages)
def InstallPythonPackages(self, *packages):
self.InstallPackages('python-pip')
self.ExecChroot('pip', 'install', *packages)
def AddSystemUsers(self, *users):
for user in users:
self.ExecChroot('adduser', '--system', '--group', '--no-create-home', '--disabled-login', user)
def AddKernelModules(self, *modules):
with open(os.path.join(self._chroot_path, 'etc', 'modules'), 'a') as fh:
for module in modules:
fh.write('%s\n' % module)