From mboxrd@z Thu Jan 1 00:00:00 1970 X-GM-THRID: 6572049490740510720 X-Received: by 2002:a2e:7d0f:: with SMTP id y15-v6mr296655ljc.3.1530174519919; Thu, 28 Jun 2018 01:28:39 -0700 (PDT) X-BeenThere: isar-users@googlegroups.com Received: by 2002:a2e:9903:: with SMTP id v3-v6ls927729lji.5.gmail; Thu, 28 Jun 2018 01:28:39 -0700 (PDT) X-Google-Smtp-Source: AAOMgpfJ0wAp1UA2n8I+P7fNpTgthHs7s9Z/3TmO2QqwYQxe7qG+ZngUMLQ5xuehNEWbQjSaOANt X-Received: by 2002:a2e:9899:: with SMTP id b25-v6mr68086ljj.35.1530174519461; Thu, 28 Jun 2018 01:28:39 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1530174519; cv=none; d=google.com; s=arc-20160816; b=tCzrhBCYU9MCZw1+xhXXZ3ERIx3iwEFwIpXtL/t5MPqd9mFQaPpsSd6xGlxgc1LoeP Z1pSuVJW/9tkVgsGEHmoitZLzGhzuO/mex8PUOug8KHPolzA/g6R4K5Wimv2cn4lNWaC a17WwnzW2uO4+1tRRmclgzv9axnbjWoM6t0FILqcV8mU9TYS/v7fwk+EgM05ecyRA8ln S8rKhI/DwHWS+Zad1yLvzbdYRaoqYMemnnuPdgbiMeV8/zK8VG/egWfSrpr/0YYEFjt2 AogBFD6cJssdgeNtuzqmi+Me45CpLGakq9Y3/JH5E59AklgHr1lhT9gVoauYd/pJQVki SOQA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=references:in-reply-to:message-id:date:subject:cc:to:from :arc-authentication-results; bh=teylqp/ZyyXOxpzXKq/9AxHZEeLwABDoVuEV2fyXKl8=; b=XB7ys0teaWkLykUu+rV2is22qQWLGH/q8E3qAiyKSb73PEhXlc8TLvkvbAuWjyXe3m N6vlN544bVTUnMI+G1uTh93SvtRgB1khhiE1j23WOpBXtKJEYfkI+7CcGJ0AIaIhkYDd e1B2E4cfoEHfOJbT0D6SIeVQZSCJPCY/t89y06SSGRoDCVMAM8Z3pHHLN9pmjlImBpgQ DuzvOQWnFAr0s2lKMvw9veyI4faH0+zB169Ehm4bsBbiaMx+dO9ZRZk6Lih8oX6atZ/a ENbRaUDEs54hn3WrdkSeeSCcU7/8Fn7HljCBtlz92KfY+HBcbQ0pCWob9dHpW8jJhB3U I6sg== ARC-Authentication-Results: i=1; gmr-mx.google.com; spf=pass (google.com: best guess record for domain of asmirnov@ilbers.de designates 85.214.62.211 as permitted sender) smtp.mailfrom=asmirnov@ilbers.de Return-Path: Received: from aqmola.ilbers.de (aqmola.ilbers.de. [85.214.62.211]) by gmr-mx.google.com with ESMTPS id t18-v6si195379lji.5.2018.06.28.01.28.39 for (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Thu, 28 Jun 2018 01:28:39 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of asmirnov@ilbers.de designates 85.214.62.211 as permitted sender) client-ip=85.214.62.211; Authentication-Results: gmr-mx.google.com; spf=pass (google.com: best guess record for domain of asmirnov@ilbers.de designates 85.214.62.211 as permitted sender) smtp.mailfrom=asmirnov@ilbers.de Received: from azat.i.ilbers.de (host-80-81-17-52.static.customer.m-online.net [80.81.17.52]) (authenticated bits=0) by aqmola.ilbers.de (8.14.4/8.14.4/Debian-4+deb7u1) with ESMTP id w5S8SEq8024070 (version=TLSv1/SSLv3 cipher=AES128-SHA256 bits=128 verify=NOT); Thu, 28 Jun 2018 10:28:24 +0200 From: Alexander Smirnov To: isar-users@googlegroups.com Cc: Alexander Smirnov Subject: [PATCH v2 02/12] isar-bootstrap: Move common part to include Date: Thu, 28 Jun 2018 10:28:00 +0200 Message-Id: <20180628082810.3571-3-asmirnov@ilbers.de> X-Mailer: git-send-email 2.11.0 In-Reply-To: <20180628082810.3571-1-asmirnov@ilbers.de> References: <20180628082810.3571-1-asmirnov@ilbers.de> X-TUID: tw6cinSJF/HI Eventually there should be two bootstraps: host and target. This patch derives the acrchitecture independent part of original isar-bootstrap recipe and put it in header file. Signed-off-by: Alexander Smirnov --- meta/classes/image.bbclass | 2 +- .../isar-bootstrap/isar-bootstrap-target.bb | 44 ++++ meta/recipes-core/isar-bootstrap/isar-bootstrap.bb | 259 --------------------- .../recipes-core/isar-bootstrap/isar-bootstrap.inc | 223 ++++++++++++++++++ meta/recipes-devtools/buildchroot/buildchroot.bb | 2 +- 5 files changed, 269 insertions(+), 261 deletions(-) create mode 100644 meta/recipes-core/isar-bootstrap/isar-bootstrap-target.bb delete mode 100644 meta/recipes-core/isar-bootstrap/isar-bootstrap.bb create mode 100644 meta/recipes-core/isar-bootstrap/isar-bootstrap.inc diff --git a/meta/classes/image.bbclass b/meta/classes/image.bbclass index 3bdcb2f..4738cb8 100644 --- a/meta/classes/image.bbclass +++ b/meta/classes/image.bbclass @@ -47,7 +47,7 @@ INITRD_IMAGE ?= "${@get_image_name(d, 'initrd.img')[1]}" inherit ${IMAGE_TYPE} do_rootfs[stamp-extra-info] = "${MACHINE}-${DISTRO}" -do_rootfs[depends] = "isar-apt:do_cache_config isar-bootstrap:do_deploy" +do_rootfs[depends] = "isar-apt:do_cache_config isar-bootstrap-target:do_deploy" do_rootfs() { die "No root filesystem function defined, please implement in your recipe" diff --git a/meta/recipes-core/isar-bootstrap/isar-bootstrap-target.bb b/meta/recipes-core/isar-bootstrap/isar-bootstrap-target.bb new file mode 100644 index 0000000..bb37a68 --- /dev/null +++ b/meta/recipes-core/isar-bootstrap/isar-bootstrap-target.bb @@ -0,0 +1,44 @@ +# Minimal target Debian root file system +# +# This software is a part of ISAR. +# Copyright (c) Siemens AG, 2018 +# +# SPDX-License-Identifier: MIT + +Description = "Minimal target Debian root file system" + +include isar-bootstrap.inc + +do_bootstrap[stamp-extra-info] = "${DISTRO}-${DISTRO_ARCH}" +do_bootstrap[vardeps] += "DISTRO_APT_SOURCES" +do_bootstrap[vardeps] += "DISTRO_APT_PREMIRRORS" +do_bootstrap() { + if [ -e "${ROOTFSDIR}" ]; then + sudo umount -l "${ROOTFSDIR}/dev" || true + sudo umount -l "${ROOTFSDIR}/proc" || true + sudo rm -rf "${ROOTFSDIR}" + fi + E="${@bb.utils.export_proxies(d)}" + sudo -E "${DEBOOTSTRAP}" --verbose \ + --variant=minbase \ + --arch="${DISTRO_ARCH}" \ + --include=locales \ + ${@get_distro_components_argument(d)} \ + ${DEBOOTSTRAP_KEYRING} \ + "${@get_distro_suite(d)}" \ + "${ROOTFSDIR}" \ + "${@get_distro_source(d)}" +} +addtask bootstrap before do_build after do_generate_keyring + +do_deploy[stamp-extra-info] = "${DISTRO}-${DISTRO_ARCH}" +do_deploy[dirs] = "${DEPLOY_DIR_IMAGE}" +do_deploy() { + ln -Tfsr "${ROOTFSDIR}" "${DEPLOY_DIR_IMAGE}/isar-bootstrap-${DISTRO}-${DISTRO_ARCH}" +} +addtask deploy before do_build after do_apt_update + +CLEANFUNCS = "clean_deploy" +clean_deploy() { + rm -f "${DEPLOY_DIR_IMAGE}/${PN}-${DISTRO}-${DISTRO_ARCH}" +} diff --git a/meta/recipes-core/isar-bootstrap/isar-bootstrap.bb b/meta/recipes-core/isar-bootstrap/isar-bootstrap.bb deleted file mode 100644 index 497a4f4..0000000 --- a/meta/recipes-core/isar-bootstrap/isar-bootstrap.bb +++ /dev/null @@ -1,259 +0,0 @@ -# Minimal debian root file system -# -# This software is a part of ISAR. -# Copyright (c) Siemens AG, 2018 -# -# SPDX-License-Identifier: MIT - -Description = "Minimal debian root file system" - -LICENSE = "gpl-2.0" -LIC_FILES_CHKSUM = "file://${LAYERDIR_isar}/licenses/COPYING.GPLv2;md5=751419260aa954499f7abaabaa882bbe" -FILESPATH_prepend := "${THISDIR}/files:" -SRC_URI = " \ - file://isar-apt.conf \ - file://isar-apt-fallback.conf \ - file://locale \ - file://chroot-setup.sh" -PV = "1.0" - -WORKDIR = "${TMPDIR}/work/${DISTRO}-${DISTRO_ARCH}/${PN}" -DEBOOTSTRAP ?= "qemu-debootstrap" -ROOTFSDIR = "${WORKDIR}/rootfs" -APTPREFS = "${WORKDIR}/apt-preferences" -APTSRCS = "${WORKDIR}/apt-sources" -APTKEYFILES = "" -APTKEYRING = "${WORKDIR}/apt-keyring.gpg" -DEBOOTSTRAP_KEYRING = "" - -python () { - from urllib.parse import urlparse - distro_apt_keys = d.getVar("DISTRO_APT_KEYS", False) - if distro_apt_keys: - d.setVar("DEBOOTSTRAP_KEYRING", "--keyring ${APTKEYRING}") - for key in distro_apt_keys.split(): - url = urlparse(key) - filename = os.path.basename(url.path) - d.appendVar("SRC_URI", " %s" % key) - d.appendVar("APTKEYFILES", " %s" % filename) -} - -def aggregate_files(d, file_list, file_out): - import shutil - - with open(file_out, "wb") as out_fd: - for entry in file_list: - entry_real = bb.parse.resolve_file(entry, d) - with open(entry_real, "rb") as in_fd: - shutil.copyfileobj(in_fd, out_fd, 1024*1024*10) - out_fd.write("\n".encode()) - -def parse_aptsources_list_line(source_list_line): - import re - - s = source_list_line.strip() - - if s.startswith("#"): - return None - - type, s = re.split("\s+", s, maxsplit=1) - if type not in ["deb", "deb-src"]: - return None - - options = "" - options_match = re.match("\[\s*(\S+=\S+(?=\s))*\s*(\S+=\S+)\s*\]\s+", s) - if options_match: - options = options_match.group(0).strip() - s = s[options_match.end():] - - source, s = re.split("\s+", s, maxsplit=1) - - suite, s = re.split("\s+", s, maxsplit=1) - - components = " ".join(s.split()) - - return [type, options, source, suite, components] - -def get_apt_source_mirror(d, aptsources_entry_list): - import re - - premirrors = d.getVar('DISTRO_APT_PREMIRRORS', True) or "" - mirror_list = [entry.split() - for entry in premirrors.split('\\n') - if any(entry)] - - for regex, replace in mirror_list: - match = re.search(regex, aptsources_entry_list[2]) - - if match: - new_aptsources_entry_list = aptsources_entry_list.copy() - new_aptsources_entry_list[2] = re.sub(regex, replace, - aptsources_entry_list[2], - count = 1) - return new_aptsources_entry_list - - return aptsources_entry_list - -def aggregate_aptsources_list(d, file_list, file_out): - import shutil - - with open(file_out, "wb") as out_fd: - for entry in file_list: - entry_real = bb.parse.resolve_file(entry, d) - with open(entry_real, "r") as in_fd: - for line in in_fd: - parsed = parse_aptsources_list_line(line) - if parsed: - parsed = get_apt_source_mirror(d, parsed) - out_fd.write(" ".join(parsed).encode()) - else: - out_fd.write(line.encode()) - out_fd.write("\n".encode()) - out_fd.write("\n".encode()) - -def get_distro_primary_source_entry(d): - apt_sources_list = (d.getVar("DISTRO_APT_SOURCES", True) or "").split() - for entry in apt_sources_list: - entry_real = bb.parse.resolve_file(entry, d) - with open(entry_real, "r") as in_fd: - for line in in_fd: - parsed = parse_aptsources_list_line(line) - if parsed: - parsed = get_apt_source_mirror(d, parsed) - if parsed[0] == "deb": - return parsed[2:] - return ["", "", ""] - -def get_distro_source(d): - return get_distro_primary_source_entry(d)[0] - -def get_distro_suite(d): - return get_distro_primary_source_entry(d)[1] - -def get_distro_components_argument(d): - components = get_distro_primary_source_entry(d)[2] - if components and components.strip(): - return "--components=%s" % ",".join(components.split()) - else: - return "" - -do_generate_keyring[stamp-extra-info] = "${DISTRO}-${DISTRO_ARCH}" -do_generate_keyring[dirs] = "${WORKDIR}" -do_generate_keyring[vardeps] += "DISTRO_APT_KEYS" -do_generate_keyring() { - if [ -n "${@d.getVar("APTKEYFILES", True) or ""}" ]; then - for keyfile in ${@d.getVar("APTKEYFILES", True)}; do - gpg --no-default-keyring --keyring "${APTKEYRING}" \ - --homedir "${WORKDIR}" --import "$keyfile" - done - fi -} -addtask generate_keyring before do_build after do_unpack - -do_apt_config_prepare[stamp-extra-info] = "${DISTRO}-${DISTRO_ARCH}" -do_apt_config_prepare[dirs] = "${WORKDIR}" -do_apt_config_prepare[vardeps] += "\ - APTPREFS \ - DISTRO_APT_PREFERENCES \ - DEBDISTRONAME \ - APTSRCS \ - DISTRO_APT_SOURCES \ - " -python do_apt_config_prepare() { - apt_preferences_out = d.getVar("APTPREFS", True) - apt_preferences_list = (d.getVar("DISTRO_APT_PREFERENCES", True) or "" - ).split() - aggregate_files(d, apt_preferences_list, apt_preferences_out) - - apt_sources_out = d.getVar("APTSRCS", True) - apt_sources_list = (d.getVar("DISTRO_APT_SOURCES", True) or "").split() - - aggregate_aptsources_list(d, apt_sources_list, apt_sources_out) -} -addtask apt_config_prepare before do_build after do_unpack - -do_bootstrap[stamp-extra-info] = "${DISTRO}-${DISTRO_ARCH}" -do_bootstrap[vardeps] += "DISTRO_APT_SOURCES" -do_bootstrap[vardeps] += "DISTRO_APT_PREMIRRORS" -do_bootstrap() { - if [ -e "${ROOTFSDIR}" ]; then - sudo umount -l "${ROOTFSDIR}/dev" || true - sudo umount -l "${ROOTFSDIR}/proc" || true - sudo rm -rf "${ROOTFSDIR}" - fi - E="${@bb.utils.export_proxies(d)}" - sudo -E "${DEBOOTSTRAP}" --verbose \ - --variant=minbase \ - --arch="${DISTRO_ARCH}" \ - --include=locales \ - ${@get_distro_components_argument(d)} \ - ${DEBOOTSTRAP_KEYRING} \ - "${@get_distro_suite(d)}" \ - "${ROOTFSDIR}" \ - "${@get_distro_source(d)}" -} -addtask bootstrap before do_build after do_generate_keyring - -do_set_locale() { - sudo install -v -m644 "${WORKDIR}/locale" "${ROOTFSDIR}/etc/locale" - - sudo sed -i '/en_US.UTF-8 UTF-8/s/^#//g' "${ROOTFSDIR}/etc/locale.gen" - sudo -E chroot "${ROOTFSDIR}" /usr/sbin/locale-gen -} -addtask set_locale after do_bootstrap - -do_setup_chroot() { - sudo install -v -m755 "${WORKDIR}/chroot-setup.sh" "${ROOTFSDIR}/chroot-setup.sh" - sudo "${ROOTFSDIR}/chroot-setup.sh" "setup" "${ROOTFSDIR}" -} -addtask setup_chroot before do_build after do_bootstrap - -def get_host_release(): - import platform - rel = platform.release() - return rel - -do_apt_config_install[stamp-extra-info] = "${DISTRO}-${DISTRO_ARCH}" -do_apt_config_install() { - sudo mkdir -p "${ROOTFSDIR}/etc/apt/preferences.d" - sudo install -v -m644 "${APTPREFS}" \ - "${ROOTFSDIR}/etc/apt/preferences.d/bootstrap" - sudo mkdir -p "${ROOTFSDIR}/etc/apt/sources.list.d" - sudo install -v -m644 "${APTSRCS}" \ - "${ROOTFSDIR}/etc/apt/sources.list.d/bootstrap.list" - sudo rm -f "${ROOTFSDIR}/etc/apt/sources.list" - sudo mkdir -p "${ROOTFSDIR}/etc/apt/apt.conf.d" - sudo install -v -m644 "${WORKDIR}/isar-apt.conf" \ - "${ROOTFSDIR}/etc/apt/apt.conf.d/50isar.conf" - - if [ "${@get_distro_suite(d)}" = "stretch" ] && [ "${@get_host_release().split('.')[0]}" -lt "4" ]; then - sudo install -v -m644 "${WORKDIR}/isar-apt-fallback.conf" \ - "${ROOTFSDIR}/etc/apt/apt.conf.d/55isar-fallback.conf" - fi -} -addtask apt_config_install before do_build after do_bootstrap do_apt_config_prepare - -do_apt_update[stamp-extra-info] = "${DISTRO}-${DISTRO_ARCH}" -do_apt_update() { - sudo mount -t devtmpfs -o mode=0755,nosuid devtmpfs ${ROOTFSDIR}/dev - sudo mount -t proc none ${ROOTFSDIR}/proc - - E="${@bb.utils.export_proxies(d)}" - export DEBIAN_FRONTEND=noninteractive - sudo -E chroot "${ROOTFSDIR}" /usr/bin/apt-get update -y - sudo -E chroot "${ROOTFSDIR}" /usr/bin/apt-get dist-upgrade -y \ - -o Debug::pkgProblemResolver=yes -} -addtask apt_update before do_build after do_apt_config_install do_set_locale do_setup_chroot - -do_deploy[stamp-extra-info] = "${DISTRO}-${DISTRO_ARCH}" -do_deploy[dirs] = "${DEPLOY_DIR_IMAGE}" -do_deploy() { - ln -Tfsr "${ROOTFSDIR}" "${DEPLOY_DIR_IMAGE}/${PN}-${DISTRO}-${DISTRO_ARCH}" -} -addtask deploy before do_build after do_apt_update - -CLEANFUNCS = "clean_deploy" -clean_deploy() { - rm -f "${DEPLOY_DIR_IMAGE}/${PN}-${DISTRO}-${DISTRO_ARCH}" -} diff --git a/meta/recipes-core/isar-bootstrap/isar-bootstrap.inc b/meta/recipes-core/isar-bootstrap/isar-bootstrap.inc new file mode 100644 index 0000000..263f8af --- /dev/null +++ b/meta/recipes-core/isar-bootstrap/isar-bootstrap.inc @@ -0,0 +1,223 @@ +# Minimal debian root file system +# +# This software is a part of ISAR. +# Copyright (c) Siemens AG, 2018 +# +# SPDX-License-Identifier: MIT + +LICENSE = "gpl-2.0" +LIC_FILES_CHKSUM = "file://${LAYERDIR_isar}/licenses/COPYING.GPLv2;md5=751419260aa954499f7abaabaa882bbe" +FILESPATH_prepend := "${THISDIR}/files:" +SRC_URI = " \ + file://isar-apt.conf \ + file://isar-apt-fallback.conf \ + file://locale \ + file://chroot-setup.sh" +PV = "1.0" + +WORKDIR = "${TMPDIR}/work/${DISTRO}-${DISTRO_ARCH}/${PN}" +DEBOOTSTRAP ?= "qemu-debootstrap" +ROOTFSDIR = "${WORKDIR}/rootfs" +APTPREFS = "${WORKDIR}/apt-preferences" +APTSRCS = "${WORKDIR}/apt-sources" +APTKEYFILES = "" +APTKEYRING = "${WORKDIR}/apt-keyring.gpg" +DEBOOTSTRAP_KEYRING = "" + +python () { + from urllib.parse import urlparse + distro_apt_keys = d.getVar("DISTRO_APT_KEYS", False) + if distro_apt_keys: + d.setVar("DEBOOTSTRAP_KEYRING", "--keyring ${APTKEYRING}") + for key in distro_apt_keys.split(): + url = urlparse(key) + filename = os.path.basename(url.path) + d.appendVar("SRC_URI", " %s" % key) + d.appendVar("APTKEYFILES", " %s" % filename) +} + +def aggregate_files(d, file_list, file_out): + import shutil + + with open(file_out, "wb") as out_fd: + for entry in file_list: + entry_real = bb.parse.resolve_file(entry, d) + with open(entry_real, "rb") as in_fd: + shutil.copyfileobj(in_fd, out_fd, 1024*1024*10) + out_fd.write("\n".encode()) + +def parse_aptsources_list_line(source_list_line): + import re + + s = source_list_line.strip() + + if s.startswith("#"): + return None + + type, s = re.split("\s+", s, maxsplit=1) + if type not in ["deb", "deb-src"]: + return None + + options = "" + options_match = re.match("\[\s*(\S+=\S+(?=\s))*\s*(\S+=\S+)\s*\]\s+", s) + if options_match: + options = options_match.group(0).strip() + s = s[options_match.end():] + + source, s = re.split("\s+", s, maxsplit=1) + + suite, s = re.split("\s+", s, maxsplit=1) + + components = " ".join(s.split()) + + return [type, options, source, suite, components] + +def get_apt_source_mirror(d, aptsources_entry_list): + import re + + premirrors = d.getVar('DISTRO_APT_PREMIRRORS', True) or "" + mirror_list = [entry.split() + for entry in premirrors.split('\\n') + if any(entry)] + + for regex, replace in mirror_list: + match = re.search(regex, aptsources_entry_list[2]) + + if match: + new_aptsources_entry_list = aptsources_entry_list.copy() + new_aptsources_entry_list[2] = re.sub(regex, replace, + aptsources_entry_list[2], + count = 1) + return new_aptsources_entry_list + + return aptsources_entry_list + +def aggregate_aptsources_list(d, file_list, file_out): + import shutil + + with open(file_out, "wb") as out_fd: + for entry in file_list: + entry_real = bb.parse.resolve_file(entry, d) + with open(entry_real, "r") as in_fd: + for line in in_fd: + parsed = parse_aptsources_list_line(line) + if parsed: + parsed = get_apt_source_mirror(d, parsed) + out_fd.write(" ".join(parsed).encode()) + else: + out_fd.write(line.encode()) + out_fd.write("\n".encode()) + out_fd.write("\n".encode()) + +def get_distro_primary_source_entry(d): + apt_sources_list = (d.getVar("DISTRO_APT_SOURCES", True) or "").split() + for entry in apt_sources_list: + entry_real = bb.parse.resolve_file(entry, d) + with open(entry_real, "r") as in_fd: + for line in in_fd: + parsed = parse_aptsources_list_line(line) + if parsed: + parsed = get_apt_source_mirror(d, parsed) + if parsed[0] == "deb": + return parsed[2:] + return ["", "", ""] + +def get_distro_source(d): + return get_distro_primary_source_entry(d)[0] + +def get_distro_suite(d): + return get_distro_primary_source_entry(d)[1] + +def get_distro_components_argument(d): + components = get_distro_primary_source_entry(d)[2] + if components and components.strip(): + return "--components=%s" % ",".join(components.split()) + else: + return "" + +do_generate_keyring[stamp-extra-info] = "${DISTRO}-${DISTRO_ARCH}" +do_generate_keyring[dirs] = "${WORKDIR}" +do_generate_keyring[vardeps] += "DISTRO_APT_KEYS" +do_generate_keyring() { + if [ -n "${@d.getVar("APTKEYFILES", True) or ""}" ]; then + for keyfile in ${@d.getVar("APTKEYFILES", True)}; do + gpg --no-default-keyring --keyring "${APTKEYRING}" \ + --homedir "${WORKDIR}" --import "$keyfile" + done + fi +} +addtask generate_keyring before do_build after do_unpack + +do_apt_config_prepare[stamp-extra-info] = "${DISTRO}-${DISTRO_ARCH}" +do_apt_config_prepare[dirs] = "${WORKDIR}" +do_apt_config_prepare[vardeps] += "\ + APTPREFS \ + DISTRO_APT_PREFERENCES \ + DEBDISTRONAME \ + APTSRCS \ + DISTRO_APT_SOURCES \ + " +python do_apt_config_prepare() { + apt_preferences_out = d.getVar("APTPREFS", True) + apt_preferences_list = (d.getVar("DISTRO_APT_PREFERENCES", True) or "" + ).split() + aggregate_files(d, apt_preferences_list, apt_preferences_out) + + apt_sources_out = d.getVar("APTSRCS", True) + apt_sources_list = (d.getVar("DISTRO_APT_SOURCES", True) or "").split() + + aggregate_aptsources_list(d, apt_sources_list, apt_sources_out) +} +addtask apt_config_prepare before do_build after do_unpack + +do_set_locale() { + sudo install -v -m644 "${WORKDIR}/locale" "${ROOTFSDIR}/etc/locale" + + sudo sed -i '/en_US.UTF-8 UTF-8/s/^#//g' "${ROOTFSDIR}/etc/locale.gen" + sudo -E chroot "${ROOTFSDIR}" /usr/sbin/locale-gen +} +addtask set_locale after do_bootstrap + +do_setup_chroot() { + sudo install -v -m755 "${WORKDIR}/chroot-setup.sh" "${ROOTFSDIR}/chroot-setup.sh" + sudo "${ROOTFSDIR}/chroot-setup.sh" "setup" "${ROOTFSDIR}" +} +addtask setup_chroot before do_build after do_bootstrap + +def get_host_release(): + import platform + rel = platform.release() + return rel + +do_apt_config_install[stamp-extra-info] = "${DISTRO}-${DISTRO_ARCH}" +do_apt_config_install() { + sudo mkdir -p "${ROOTFSDIR}/etc/apt/preferences.d" + sudo install -v -m644 "${APTPREFS}" \ + "${ROOTFSDIR}/etc/apt/preferences.d/bootstrap" + sudo mkdir -p "${ROOTFSDIR}/etc/apt/sources.list.d" + sudo install -v -m644 "${APTSRCS}" \ + "${ROOTFSDIR}/etc/apt/sources.list.d/bootstrap.list" + sudo rm -f "${ROOTFSDIR}/etc/apt/sources.list" + sudo mkdir -p "${ROOTFSDIR}/etc/apt/apt.conf.d" + sudo install -v -m644 "${WORKDIR}/isar-apt.conf" \ + "${ROOTFSDIR}/etc/apt/apt.conf.d/50isar.conf" + + if [ "${@get_distro_suite(d)}" = "stretch" ] && [ "${@get_host_release().split('.')[0]}" -lt "4" ]; then + sudo install -v -m644 "${WORKDIR}/isar-apt-fallback.conf" \ + "${ROOTFSDIR}/etc/apt/apt.conf.d/55isar-fallback.conf" + fi +} +addtask apt_config_install before do_build after do_bootstrap do_apt_config_prepare + +do_apt_update[stamp-extra-info] = "${DISTRO}-${DISTRO_ARCH}" +do_apt_update() { + sudo mount -t devtmpfs -o mode=0755,nosuid devtmpfs ${ROOTFSDIR}/dev + sudo mount -t proc none ${ROOTFSDIR}/proc + + E="${@bb.utils.export_proxies(d)}" + export DEBIAN_FRONTEND=noninteractive + sudo -E chroot "${ROOTFSDIR}" /usr/bin/apt-get update -y + sudo -E chroot "${ROOTFSDIR}" /usr/bin/apt-get dist-upgrade -y \ + -o Debug::pkgProblemResolver=yes +} +addtask apt_update before do_build after do_apt_config_install do_set_locale do_setup_chroot diff --git a/meta/recipes-devtools/buildchroot/buildchroot.bb b/meta/recipes-devtools/buildchroot/buildchroot.bb index 538c577..7db8206 100644 --- a/meta/recipes-devtools/buildchroot/buildchroot.bb +++ b/meta/recipes-devtools/buildchroot/buildchroot.bb @@ -66,7 +66,7 @@ do_build[root_cleandirs] = "${BUILDCHROOT_DIR} \ ${BUILDCHROOT_DIR}/isar-apt \ ${BUILDCHROOT_DIR}/downloads \ ${BUILDCHROOT_DIR}/home/builder" -do_build[depends] = "isar-apt:do_cache_config isar-bootstrap:do_deploy" +do_build[depends] = "isar-apt:do_cache_config isar-bootstrap-target:do_deploy" do_build() { setup_root_file_system "${BUILDCHROOT_DIR}" ${BUILDCHROOT_PREINSTALL} -- 2.1.4