Ajout argument debug et base, acbuild sans modification de l'image

This commit is contained in:
William Petit 2017-02-18 11:26:25 +01:00
parent 0bf686d5f3
commit 9780cafffd
1 changed files with 31 additions and 18 deletions

49
package
View File

@ -17,7 +17,9 @@ def create_args_parser():
parser.add_argument("-o", "--output", help="The path to the generated packages destination directory", default=".") parser.add_argument("-o", "--output", help="The path to the generated packages destination directory", default=".")
parser.add_argument("-p", "--profile", help="The profile to use to package this project (default: debian)", choices=profile_names, default='debian') parser.add_argument("-p", "--profile", help="The profile to use to package this project (default: debian)", choices=profile_names, default='debian')
parser.add_argument("-a", "--architecture", help="The target architecture for the package (default: amd64)", default='amd64') parser.add_argument("-a", "--architecture", help="The target architecture for the package (default: amd64)", default='amd64')
parser.add_argument("-b", "--base", help="Use the specified image instead of the profile's one", default='')
parser.add_argument("--rebuild", help="Ignore cache and rebuild container's image", action="store_true", default=False) parser.add_argument("--rebuild", help="Ignore cache and rebuild container's image", action="store_true", default=False)
parser.add_argument("--debug", help="Will add extra output and start the container in interactive mode", action="store_true", default=False)
return parser return parser
@ -49,7 +51,7 @@ def get_cached_image_path(profile):
def build_image(build_workspace, aci_file, base_image, profile): def build_image(build_workspace, aci_file, base_image, profile):
acbuild_flags = ["--modify", aci_file, "--work-path", build_workspace] acbuild_flags = ["--work-path", build_workspace]
# Find and export base image from rkt' store # Find and export base image from rkt' store
name_pattern = base_image.split('/')[-1] + '$' name_pattern = base_image.split('/')[-1] + '$'
@ -57,6 +59,7 @@ def build_image(build_workspace, aci_file, base_image, profile):
rkt.export_image(image['id'], aci_file, rkt_flags=rkt_flags); rkt.export_image(image['id'], aci_file, rkt_flags=rkt_flags);
# Build image # Build image
tamarin.run_acbuild(acbuild_flags+["begin", aci_file])
tamarin.run_acbuild(acbuild_flags+["set-name", "image_{:d}".format(pid)]) tamarin.run_acbuild(acbuild_flags+["set-name", "image_{:d}".format(pid)])
tamarin.run_acbuild(acbuild_flags+["mount", "add", "src", "/src", "--read-only"]) tamarin.run_acbuild(acbuild_flags+["mount", "add", "src", "/src", "--read-only"])
tamarin.run_acbuild(acbuild_flags+["mount", "add", "dist", "/dist"]) tamarin.run_acbuild(acbuild_flags+["mount", "add", "dist", "/dist"])
@ -73,6 +76,9 @@ def build_image(build_workspace, aci_file, base_image, profile):
# Run hooks # Run hooks
tamarin.run_profile_hooks(profile, 'containerbuild', cwd=build_workspace, env=hooks_env) tamarin.run_profile_hooks(profile, 'containerbuild', cwd=build_workspace, env=hooks_env)
tamarin.run_acbuild(acbuild_flags+["write", "--overwrite", aci_file])
tamarin.run_acbuild(acbuild_flags+["end"])
return aci_file return aci_file
def cleanup(build_workspace, rkt_flags): def cleanup(build_workspace, rkt_flags):
@ -126,7 +132,7 @@ if __name__ == "__main__":
rkt_store = tamarin.get_workspace_subdir('store') rkt_store = tamarin.get_workspace_subdir('store')
rkt_flags = ["--dir={:s}".format(rkt_store)] rkt_flags = ["--dir={:s}".format(rkt_store)]
base_image = profile['profile']['default_image'] base_image = args.base if args.base != '' else profile['profile']['default_image']
# If the base image is Docker-based, download it # If the base image is Docker-based, download it
if base_image.startswith('docker://'): if base_image.startswith('docker://'):
@ -147,23 +153,30 @@ if __name__ == "__main__":
# Cache image # Cache image
shutil.copyfile(aci_file, cached_image_file) shutil.copyfile(aci_file, cached_image_file)
# rkt run arguments
rkt_args = [
"run",
"--insecure-options=image",
aci_file, "--net=host",
"--volume=src,kind=host,source={:s}".format(project_dir),
"--volume=dist,kind=host,source={:s}".format(output_dir),
"--volume=tamarin-hooks,kind=host,source={:s}".format(tamarin.get_hooks_dir()),
"--volume=tamarin-lib,kind=host,source={:s}".format(tamarin.get_lib_dir()),
"--volume=tamarin-profiles,kind=host,source={:s}".format(tamarin.get_profiles_dir())
]
# Use environment proxy if defined
for proxy_var in ['HTTP_PROXY', 'HTTPS_PROXY', 'http_proxy', 'https_proxy']:
if proxy_var in os.environ:
rkt_args += ["--set-env={:s}={:s}".format(proxy_var, os.environ[proxy_var])]
if args.debug:
rkt_args += ["--interactive", "--exec", "/bin/bash"]
else:
rkt_args += ["--exec", "/usr/bin/python3", "--", "/tamarin/lib/build.py", args.profile, args.architecture]
# Start container # Start container
rkt.run(rkt_flags+[ rkt.run(rkt_flags+rkt_args, as_root=True)
"run",
"--insecure-options=image",
aci_file, "--net=host",
"--volume=src,kind=host,source={:s}".format(project_dir),
"--volume=dist,kind=host,source={:s}".format(output_dir),
"--volume=tamarin-hooks,kind=host,source={:s}".format(tamarin.get_hooks_dir()),
"--volume=tamarin-lib,kind=host,source={:s}".format(tamarin.get_lib_dir()),
"--volume=tamarin-profiles,kind=host,source={:s}".format(tamarin.get_profiles_dir()),
"--set-env=HTTP_PROXY={:s}".format(os.environ['HTTP_PROXY']),
"--set-env=HTTPS_PROXY={:s}".format(os.environ['HTTP_PROXY']),
"--set-env=http_proxy={:s}".format(os.environ['http_proxy']),
"--set-env=https_proxy={:s}".format(os.environ['https_proxy']),
#"--interactive", "--exec", "/bin/bash"
"--exec", "/usr/bin/python3", "--", "/tamarin/lib/build.py", args.profile, args.architecture
], as_root=True)
# Cleanup # Cleanup
cleanup(build_workspace, rkt_flags) cleanup(build_workspace, rkt_flags)