69 lines
1.8 KiB
Python
Executable File
69 lines
1.8 KiB
Python
Executable File
#!/usr/bin/python
|
|
|
|
import os
|
|
import sys
|
|
import argparse
|
|
import subprocess
|
|
|
|
if __name__ == "__main__":
|
|
|
|
DEFAULT_PARTICLES_DIR = "/particles"
|
|
PARTICLES_DIR = os.getenv("PARTICLES_DIR", DEFAULT_PARTICLES_DIR)
|
|
DEFAULT_MATTER_ARGS = "--commit --gentle --push"
|
|
MATTER_ARGS = os.getenv("MATTER_ARGS", DEFAULT_MATTER_ARGS)
|
|
|
|
CHROOT_SCRIPT = """\
|
|
cd "${PARTICLES_DIR}" || exit 1
|
|
git pull || exit 1
|
|
particles=$(find "${PARTICLES_DIR}" -name "*.particle" | xargs)
|
|
if [ -n "${particles}" ]; then
|
|
/usr/sbin/env-update
|
|
. /etc/profile
|
|
matter ${MATTER_ARGS} ${particles}
|
|
exit ${?}
|
|
fi
|
|
exit 1
|
|
"""
|
|
|
|
ENV_VARS_HELP = """\
|
|
Environment variables:
|
|
%s = path inside chroot containing Matter spec files (also called particles)
|
|
default: %s
|
|
%s = custom "matter" arguments
|
|
default: %s
|
|
""" % (
|
|
"PARTICLES_DIR",
|
|
DEFAULT_PARTICLES_DIR,
|
|
"MATTER_ARGS",
|
|
DEFAULT_MATTER_ARGS,)
|
|
|
|
parser = argparse.ArgumentParser(
|
|
description='Entropy Matter, execution scheduler',
|
|
epilog=ENV_VARS_HELP,
|
|
formatter_class=argparse.RawDescriptionHelpFormatter)
|
|
|
|
parser.add_argument("chroot", metavar="<chroot>",
|
|
help="path to chroot")
|
|
|
|
nsargs = parser.parse_args(sys.argv[1:])
|
|
|
|
chroot_dir = nsargs.chroot
|
|
if not os.path.isdir(chroot_dir):
|
|
sys.stderr.write("chroot directory is not available\n")
|
|
raise SystemExit(1)
|
|
|
|
if os.getuid() != 0:
|
|
sys.stderr.write("root access required\n")
|
|
raise SystemExit(1)
|
|
|
|
os.environ["PARTICLES_DIR"] = PARTICLES_DIR
|
|
os.environ["MATTER_ARGS"] = MATTER_ARGS
|
|
os.chroot(chroot_dir)
|
|
os.chdir("/")
|
|
try:
|
|
rc = subprocess.call(CHROOT_SCRIPT, shell=True)
|
|
except Exception as err:
|
|
sys.stderr.write(repr(err) + "\n")
|
|
rc = 1
|
|
|
|
raise SystemExit(rc) |