1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93
|
#!/usr/bin/env python3
#
# Copyright 2017 Dell, Inc.
#
# SPDX-License-Identifier: LGPL-2.1-or-later
#
import os
import subprocess
import sys
import shutil
from fwupd_setup_helpers import parse_dependencies
def get_container_cmd():
"""return docker or podman as container manager"""
if shutil.which("docker"):
return "docker"
if shutil.which("podman"):
return "podman"
directory = os.path.dirname(sys.argv[0])
TARGET = os.getenv("OS")
if TARGET is None:
print("Missing OS environment variable")
sys.exit(1)
OS = TARGET
SUBOS = ""
split = TARGET.split("-")
if len(split) >= 2:
OS = split[0]
SUBOS = split[1]
deps = parse_dependencies(OS, SUBOS, False)
f = os.path.join(directory, f"Dockerfile-{OS}.in")
if not os.path.exists(f):
print(f"Missing input file {f} for {OS}")
sys.exit(1)
with open(f) as rfd:
lines = rfd.readlines()
with open("Dockerfile", "w") as wfd:
for line in lines:
if line.startswith("FROM %%%ARCH_PREFIX%%%"):
if (OS == "debian" or OS == "ubuntu") and SUBOS == "i386":
replace = SUBOS + "/"
else:
replace = ""
wfd.write(line.replace("%%%ARCH_PREFIX%%%", replace))
elif line == "%%%INSTALL_DEPENDENCIES_COMMAND%%%\n":
if OS == "fedora":
wfd.write("RUN dnf --enablerepo=updates-testing -y install \\\n")
elif OS == "centos":
wfd.write("RUN dnf -y install \\\n")
elif OS == "debian" or OS == "ubuntu":
wfd.write("RUN apt update -qq && \\\n")
wfd.write(
"\tDEBIAN_FRONTEND=noninteractive apt install -yq --no-install-recommends\\\n"
)
elif OS == "arch":
wfd.write("RUN pacman -Syu --noconfirm --needed\\\n")
for i in range(0, len(deps)):
if i < len(deps) - 1:
wfd.write(f"\t{deps[i]} \\\n")
else:
wfd.write(f"\t{deps[i]} || true\n")
elif line == "%%%ARCH_SPECIFIC_COMMAND%%%\n":
if OS == "debian" and SUBOS == "s390x":
# add sources
wfd.write(
'RUN cat /etc/apt/sources.list | sed "s/deb/deb-src/" >> /etc/apt/sources.list\n'
)
# add new architecture
wfd.write(f"RUN dpkg --add-architecture {SUBOS}\n")
elif line == "%%%OS%%%\n":
wfd.write(f"ENV OS={TARGET}\n")
else:
wfd.write(line)
wfd.flush()
if len(sys.argv) == 2 and sys.argv[1] == "build":
cmd = get_container_cmd()
args = [cmd, "build", "-t", f"fwupd-{TARGET}"]
if "http_proxy" in os.environ:
args += [f"--build-arg=http_proxy={os.environ['http_proxy']}"]
if "https_proxy" in os.environ:
args += [f"--build-arg=https_proxy={os.environ['https_proxy']}"]
args += ["-f", "./Dockerfile", "."]
subprocess.check_call(args)
|