Files
iconograph/server/modules/autoimage.py

148 lines
3.7 KiB
Python
Raw Normal View History

2016-03-31 17:11:23 -07:00
#!/usr/bin/python3
import argparse
import os
import shutil
import subprocess
from urllib import parse
2016-03-31 17:11:23 -07:00
parser = argparse.ArgumentParser(description='iconograph autoimage')
parser.add_argument(
'--ca-cert',
dest='ca_cert',
action='store',
required=True)
parser.add_argument(
'--chroot-path',
dest='chroot_path',
action='store',
required=True)
parser.add_argument(
'--device',
dest='device',
action='store',
required=True)
parser.add_argument(
'--https-ca-cert',
dest='https_ca_cert',
action='store',
required=True)
parser.add_argument(
'--https-client-cert',
dest='https_client_cert',
action='store',
required=True)
parser.add_argument(
'--https-client-key',
dest='https_client_key',
action='store',
required=True)
parser.add_argument(
'--image-type',
dest='image_type',
action='store',
required=True)
2016-03-31 17:11:23 -07:00
parser.add_argument(
'--persistent-percent',
dest='persistent_percent',
action='store',
type=int,
default=0)
parser.add_argument(
'--server',
dest='server',
action='store',
required=True)
2016-03-31 17:11:23 -07:00
FLAGS = parser.parse_args()
def Exec(*args, **kwargs):
print('+', args)
subprocess.check_call(args, **kwargs)
def ExecChroot(*args, **kwargs):
Exec('chroot', FLAGS.chroot_path, *args, **kwargs)
def main():
ExecChroot(
'apt-get',
'install',
'--assume-yes',
2016-04-06 23:37:40 +00:00
'git', 'grub-pc', 'python3-openssl', 'python3-requests')
2016-03-31 17:11:23 -07:00
2016-04-06 22:38:57 -07:00
os.makedirs(os.path.join(FLAGS.chroot_path, 'icon', 'config'), exist_ok=True)
if not os.path.exists(os.path.join(FLAGS.chroot_path, 'icon', 'iconograph')):
ExecChroot(
'git',
'clone',
'https://github.com/robot-tools/iconograph.git',
'icon/iconograph')
2016-03-31 17:11:23 -07:00
shutil.copyfile(
FLAGS.ca_cert,
2016-04-06 22:38:57 -07:00
os.path.join(FLAGS.chroot_path, 'icon', 'config', 'ca.image.cert.pem'))
2016-03-31 17:11:23 -07:00
image_flags = []
https_ca_cert_path = os.path.join('icon', 'config', 'ca.www.cert.pem')
shutil.copyfile(
FLAGS.https_ca_cert,
os.path.join(FLAGS.chroot_path, https_ca_cert_path))
image_flags.extend([
'--https-ca-cert', os.path.join('/', https_ca_cert_path),
])
https_client_cert_path = os.path.join('icon', 'config', 'client.www.cert.pem')
shutil.copyfile(
FLAGS.https_client_cert,
os.path.join(FLAGS.chroot_path, https_client_cert_path))
https_client_key_path = os.path.join('icon', 'config', 'client.www.key.pem')
shutil.copyfile(
FLAGS.https_client_key,
os.path.join(FLAGS.chroot_path, https_client_key_path))
os.chmod(os.path.join(FLAGS.chroot_path, https_client_key_path), 0o400)
image_flags.extend([
'--https-client-cert', os.path.join('/', https_client_cert_path),
'--https-client-key', os.path.join('/', https_client_key_path),
])
2016-03-31 17:11:23 -07:00
init = os.path.join(FLAGS.chroot_path, 'etc', 'init', 'autoimage.conf')
with open(init, 'w') as fh:
fh.write("""
description "AutoImage"
2016-04-07 01:00:40 +00:00
start on runlevel [2345]
2016-03-31 17:11:23 -07:00
script
exec </dev/tty8 >/dev/tty8 2>&1
chvt 8
2016-04-06 22:38:57 -07:00
/icon/iconograph/client/wait_for_service.py --host=%(host)s --service=%(service)s
chvt 8
/icon/iconograph/imager/image.py --device=%(device)s --persistent-percent=%(persistent_percent)d --ca-cert=/icon/config/ca.image.cert.pem --server=%(server)s --image-type=%(image_type)s %(image_flags)s
chvt 8
2016-04-01 10:04:24 -07:00
2016-04-07 01:00:40 +00:00
echo
echo "=================="
echo "autoimage complete"
echo "=================="
2016-04-02 11:16:27 -07:00
2016-04-06 22:38:57 -07:00
/icon/iconograph/client/alert.py --type=happy
2016-03-31 17:11:23 -07:00
end script
""" % {
'host': FLAGS.server,
'service': 'https',
2016-03-31 17:11:23 -07:00
'device': FLAGS.device,
'persistent_percent': FLAGS.persistent_percent,
'server': FLAGS.server,
'image_type': FLAGS.image_type,
'image_flags': ' '.join(image_flags),
2016-03-31 17:11:23 -07:00
})
if __name__ == '__main__':
main()