#!/usr/bin/python3 import hashlib import json import os import subprocess import sys BUILD_ROOT = '/root/buildroot' LXC_ROOT = '/var/lib/lxc' def pack(meta_file): # Prepare metadata meta = {} with open(meta_file) as fd: for line in fd: line = [l.strip() for l in line.split(':', 1)] meta[line[0]] = line[1] meta['deps'] = meta['deps'].split() pkg_name = meta['pkg'] del meta['pkg'] tar_path = os.path.join(BUILD_ROOT, '{}.tar'.format(pkg_name)) xz_path = '{}.xz'.format(tar_path) # Remove old package try: os.unlink(tar_path) os.unlink(xz_path) except: pass # Create archive print('Archiving', meta['lxcpath']) subprocess.run(['tar', 'cpf', tar_path, meta['lxcpath']], cwd=LXC_ROOT) if '/' not in meta['lxcpath']: print('Archiving setup files') cwd = os.path.dirname(os.path.abspath(meta_file)) subprocess.run(['tar', 'rpf', tar_path, 'setup', 'setup.sh'], cwd=cwd) print('Compressing', tar_path) subprocess.run(['xz', '-9', tar_path]) # Register package print('Registering package') packages = {} packages_file = os.path.join(BUILD_ROOT, 'packages') try: with open(packages_file, 'r') as fd: packages = json.load(fd) except: pass packages[pkg_name] = meta with open(packages_file, 'w') as fd: json.dump(packages, fd, sort_keys=True, indent=4) # Sign packages print('Signing packages') subprocess.run(['openssl', 'dgst', '-sha512', '-sign', 'packages.key', '-out', 'packages.sha512', 'packages'], cwd=BUILD_ROOT) def hash_file(file_path): sha512 = hashlib.sha512() with open(file_path, 'rb') as fd: while True: data = fd.read(65536) if not data: break sha512.update(data) return sha512.hexdigest() if __name__ == '__main__': if len(sys.argv) != 2: print('Usage: lxc-pack ') else: pack(sys.argv[1])