From 624a6179da3454b8246fcef82ec8e1e49271579b Mon Sep 17 00:00:00 2001 From: Stanislaw Adaszewski Date: Fri, 24 Apr 2020 01:29:59 +0200 Subject: [PATCH] Improved jail cleanup --- jail.py | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/jail.py b/jail.py index 885b316..0872704 100644 --- a/jail.py +++ b/jail.py @@ -2,14 +2,27 @@ import subprocess from .zfs import * import random import shutil +import json + + +def get_jid(path): + data = json.loads(subprocess.check_output(['jls', '--libxo=json'])) + lst = data['jail-information']['jail'] + lst = list(filter(lambda a: a['path'] == path, lst)) + if len(lst) == 0: + raise ValueError('JID not found for path: ' + path) + if len(lst) > 1: + raise ValueError('Ambiguous JID for path: ' + path) + return str(lst[0]['jid']) def jail_run(path, command): - command = ['jail', '-c', 'host.hostname=' + os.path.split(path)[1], 'mount.devfs=1', 'interface=lo1', 'ip4.addr=127.0.1.0', 'path=' + path, 'command', '/bin/sh', '-c', command] + command = ['jail', '-c', 'host.hostname=' + os.path.split(path)[1], 'persist=1', 'mount.devfs=1', 'interface=lo1', 'ip4.addr=127.0.1.0', 'path=' + path, 'command', '/bin/sh', '-c', command] print('Running:', ' '.join(command)) try: res = subprocess.run(command) finally: + subprocess.run(['jail', '-r', get_jid(path)]) subprocess.run(['umount', '-f', os.path.join(path, 'dev')]) if res.returncode != 0: # subprocess.run(['umount', os.path.join(path, 'dev')])