diff --git a/usr/bin/lxcid b/usr/bin/lxcid deleted file mode 100755 index 092d25e..0000000 --- a/usr/bin/lxcid +++ /dev/null @@ -1,23 +0,0 @@ -#!/usr/bin/python3 -# -*- coding: utf-8 -*- - -import argparse -import subprocess -import sys - -parser = argparse.ArgumentParser(description='Print shifted UID / GID of an LXC user') -parser.add_argument('--group', '-g', action='store_true', help='Get primary GID') -parser.add_argument('container', help='LXC container in which to lookup') -parser.add_argument('user', help='User to lookup') - -if len(sys.argv) < 2: - parser.print_usage() - sys.exit(1) -args = parser.parse_args() - -# Check if lxc-ls prints back the container name -is_running = subprocess.run(['lxc-ls', '--running', args.container], stdout=subprocess.PIPE, check=True) -lxc_command = 'lxc-attach' if is_running else 'lxc-execute' -# Run id command inside container -id = subprocess.run([lxc_command, args.container, '--', 'id', '-g' if args.group else '-u', args.user], stdout=subprocess.PIPE, check=True) -print(int(id.stdout) + 100000) diff --git a/usr/lib/python3.6/lxcmgr/svcmgr.py b/usr/lib/python3.6/lxcmgr/svcmgr.py index 8c7da2f..61811a6 100644 --- a/usr/lib/python3.6/lxcmgr/svcmgr.py +++ b/usr/lib/python3.6/lxcmgr/svcmgr.py @@ -6,12 +6,16 @@ import subprocess from .paths import AUTOSTART_SVC_DIR, SERVICE_DIR, STARTED_SVC_DIR from .templates import SERVICE +def lxcize(service): + # Prepend lxc- to service name, otherwise there's much greater risk of naming conflict with other host services + return 'lxc-{}'.format(service) + def create_service(container, image): - depends = ' '.join(image['depends']) if 'depends' in image else '' + depends = ' '.join([lxcize(service) for service in image['depends']]) if 'depends' in image else '' # Add ready check to start_post - # This could arguably be better done via some template engine, but introducing one for 2 template files seems like overkill + # This could arguably be done better via some template engine, but introducing one for a single template file seems like an overkill start_post = '\nstart_post() {{\n timeout -t 60 lxc-attach {} -- sh -c \'until {}; do sleep 0.1; done\'\n}}\n'.format(container, image['ready']) if 'ready' in image else '' - service_file = os.path.join(SERVICE_DIR, container) + service_file = os.path.join(SERVICE_DIR, lxcize(container)) with open(service_file, 'w') as f: f.write(SERVICE.format(container=container, depends=depends, start_post=start_post)) os.chmod(service_file, 0o755) @@ -23,7 +27,7 @@ def delete_service(service): if is_service_autostarted(service): update_service_autostart(service, False) try: - os.unlink(os.path.join(SERVICE_DIR, service)) + os.unlink(os.path.join(SERVICE_DIR, lxcize(service))) update_services() except FileNotFoundError: pass @@ -33,20 +37,20 @@ def update_services(): def start_service(service): if not is_service_started(service): - subprocess.run(['/sbin/service', service, 'stop'], check=True) + subprocess.run(['/sbin/service', lxcize(service), 'start'], check=True) def stop_service(service): if is_service_started(service): - subprocess.run(['/sbin/service', service, 'stop'], check=True) + subprocess.run(['/sbin/service', lxcize(service), 'stop'], check=True) def is_service_started(service): # Check OpenRC service status without calling any binary - return os.path.exists(os.path.join(STARTED_SVC_DIR, service)) + return os.path.exists(os.path.join(STARTED_SVC_DIR, lxcize(service))) def is_service_autostarted(service): # Check OpenRC service enablement - return os.path.exists(os.path.join(AUTOSTART_SVC_DIR, service)) + return os.path.exists(os.path.join(AUTOSTART_SVC_DIR, lxcize(service))) def update_service_autostart(service, enabled): # Add/remove the service to/from OpenRC default runlevel - subprocess.run(['/sbin/rc-update', 'add' if enabled else 'del', service]) + subprocess.run(['/sbin/rc-update', 'add' if enabled else 'del', lxcize(service)])