diff --git a/server/module_lib/icon_lib.py b/server/module_lib/icon_lib.py index 5d35da4..ac23328 100644 --- a/server/module_lib/icon_lib.py +++ b/server/module_lib/icon_lib.py @@ -73,3 +73,10 @@ class IconModule(object): with open(os.path.join(self._chroot_path, 'etc', 'modules'), 'a') as fh: for module in modules: fh.write('%s\n' % module) + + def ServiceFile(self, service): + path = os.path.join(self._chroot_path, 'lib', 'systemd', 'system', service) + return open(path, 'w') + + def EnableService(self, service): + self.ExecChroot('systemctl', 'enable', service) diff --git a/server/modules/persistent.py b/server/modules/persistent.py index aa17d9f..221509f 100755 --- a/server/modules/persistent.py +++ b/server/modules/persistent.py @@ -3,6 +3,8 @@ import argparse import os +import icon_lib + parser = argparse.ArgumentParser(description='iconograph persistent') parser.add_argument( @@ -14,24 +16,40 @@ FLAGS = parser.parse_args() def main(): + module = icon_lib.IconModule(FLAGS.chroot_path) + os.mkdir(os.path.join(FLAGS.chroot_path, 'persistent')) - init = os.path.join(FLAGS.chroot_path, 'etc', 'init', 'persistent.conf') - with open(init, 'w') as fh: - fh.write(""" -description "Mount /persistent" + tool_path = os.path.join(FLAGS.chroot_path, 'icon', 'persistent') + os.makedirs(tool_path, exist_ok=True) -start on filesystem -task - -emits persistent-ready - -script - mount -o data=journal,noatime,sync LABEL=PERSISTENT /persistent - initctl emit --no-wait persistent-ready -end script + script = os.path.join(tool_path, 'startup.sh') + with open(script, 'w') as fh: + os.chmod(fh.fileno(), 0o755) + fh.write("""\ +#!/bin/bash +mount -o data=journal,noatime,sync LABEL=PERSISTENT /persistent """) + with module.ServiceFile('persistent.service') as fh: + fh.write(""" +[Unit] +Description=Mount /persistent +DefaultDependencies=no +Conflicts=shutdown.target +After=systemd-remount-fs.service +Before=sysinit.target + +[Service] +Type=oneshot +RemainAfterExit=yes +ExecStart=/icon/persistent/startup.sh + +[Install] +WantedBy=sysinit.target +""") + module.EnableService('persistent.service') + if __name__ == '__main__': main() diff --git a/server/modules/systemid.py b/server/modules/systemid.py index feba9a8..052597f 100755 --- a/server/modules/systemid.py +++ b/server/modules/systemid.py @@ -35,24 +35,7 @@ hostname --file /etc/hostname grep ${SYSTEMID} /etc/hosts >/dev/null || echo "127.0.2.1 ${SYSTEMID}" >> /etc/hosts """) - upstart = os.path.join(FLAGS.chroot_path, 'etc', 'init', 'systemid.conf') - with open(upstart, 'w') as fh: - fh.write(""" -description "Mount /systemid" - -start on filesystem -task - -emits systemid-ready - -script - /icon/systemid/startup.sh - initctl emit --no-wait systemid-ready -end script -""") - - systemd = os.path.join(FLAGS.chroot_path, 'lib', 'systemd', 'system', 'systemid.service') - with open(systemd, 'w') as fh: + with module.ServiceFile('systemid.service') as fh: fh.write(""" [Unit] Description=Mount /systemid and configure from it @@ -69,18 +52,8 @@ ExecStart=/icon/systemid/startup.sh [Install] WantedBy=sysinit.target """) - try: - module.ExecChroot( - 'systemctl', - 'unmask', - 'systemid.service') - module.ExecChroot( - 'systemctl', - 'enable', - 'systemid.service') - except icon_lib.SubprocessFailure: - # trusty backwards-compat - pass + module.EnableService('systemid.service') + if __name__ == '__main__': main()