From mboxrd@z Thu Jan 1 00:00:00 1970 X-GM-THRID: 6569888326546882560 X-Received: by 2002:a19:7417:: with SMTP id v23-v6mr78406lfe.22.1529671329468; Fri, 22 Jun 2018 05:42:09 -0700 (PDT) X-BeenThere: isar-users@googlegroups.com Received: by 2002:a2e:8001:: with SMTP id j1-v6ls984486ljg.16.gmail; Fri, 22 Jun 2018 05:42:09 -0700 (PDT) X-Google-Smtp-Source: ADUXVKL7ttWMAZWNpRPudiZBOEzfQDKL/fryNUyWVuE1HsXTefcbaK4ScggRk/3iOmqVqVnMl3p2 X-Received: by 2002:a2e:90c2:: with SMTP id o2-v6mr57773ljg.37.1529671328985; Fri, 22 Jun 2018 05:42:08 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1529671328; cv=none; d=google.com; s=arc-20160816; b=UNQihvVzeZhjHSWdrhCxVeA7YwfnDXKOQKyrHCRInYzeJiHgdO4STCvUeK+iruIra2 XnAvdOXZFxn36zNBxXJWruhBFQiCtFR83RIhVxBXvGd1YzEwvO95mAIqPOT9xZzg5k1t WftF2IHe4BWxFWk06X5rWtLFknbht5pvtSldsqL7JzjWtmIqh2Bvia8sLQslgaJJzw3i a9i4ZTKpGJekshbTZTiIRhjcnO4638XkDHCS9332DME5JbxxffE62Eej9o5foqEEOwtb yydBg2cBqgPRLl/lTS1wScb9eplEprVYIkt2HrUhDHu4q8rYCpNC1Ttg36TPyiIWlZLn 7alQ== 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:to:from :arc-authentication-results; bh=3KD4kGFquifNFEhymUJQBHs+MPzELdJEP6/grT0WNQw=; b=WFaEKfQuFQh9f1gQedKvtUvGHlEhVSY+NNh6VkLAYa/ozGxrvkWC0nU5k5MY503b+Y Vf+kPcIVkNwNCo3JeSt4N8/tcgrSBAebu/hmYnNlGOep76ywbC3qVxeNZSB8agWUulCf o6w5Xe60LaFuyBH2mYhRxMJ2/iGru5vapicWNqjt+0Qdze89WKtEipBtERQ4Kqv05Mcj iOIxx7xexuV+YQ5Mv+52LpVCjWT4X9J6veM6Ymwf6sQG8iVRbE9Q/A+WQLGFueRZiEdH M5JcJOljX69+vuHLzXjE4xxA+EF/94xkSM9qZwEKuZH1jEqvOEuf2bBCIyf6QY4QFwG4 uOpw== ARC-Authentication-Results: i=1; gmr-mx.google.com; spf=pass (google.com: best guess record for domain of mosipov@ilbers.de designates 85.214.62.211 as permitted sender) smtp.mailfrom=mosipov@ilbers.de Return-Path: Received: from aqmola.ilbers.de (aqmola.ilbers.de. [85.214.62.211]) by gmr-mx.google.com with ESMTPS id u23-v6si248470lji.3.2018.06.22.05.42.08 for (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Fri, 22 Jun 2018 05:42:08 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of mosipov@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 mosipov@ilbers.de designates 85.214.62.211 as permitted sender) smtp.mailfrom=mosipov@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 w5MCeN8N030516 (version=TLSv1/SSLv3 cipher=AES128-SHA256 bits=128 verify=NOT) for ; Fri, 22 Jun 2018 14:42:07 +0200 From: "Maxim Yu. Osipov" To: isar-users@googlegroups.com Subject: [PATCH v2 2/7] isar-bootstrap: Add host architecture support Date: Fri, 22 Jun 2018 14:40:17 +0200 Message-Id: <20180622124022.30192-3-mosipov@ilbers.de> X-Mailer: git-send-email 2.11.0 In-Reply-To: <20180622124022.30192-1-mosipov@ilbers.de> References: <20180622124022.30192-1-mosipov@ilbers.de> X-TUID: aeW3LleePCaL From: Alexander Smirnov Add HOST_* definitions and recipe to generate ISAR boostrap with the host architecture. Add corresponding options to setup_root_file_system(). Generate reprepro config for host distro if it doesn't exist. Signed-off-by: Alexander Smirnov Signed-off-by: Maxim Yu. Osipov --- meta/classes/isar-bootstrap-helper.bbclass | 22 ++++++- .../isar-bootstrap/isar-bootstrap-host.bb | 75 ++++++++++++++++++++++ meta/recipes-devtools/isar-apt/isar-apt-host.bb | 31 +++++++++ 3 files changed, 126 insertions(+), 2 deletions(-) create mode 100644 meta/recipes-core/isar-bootstrap/isar-bootstrap-host.bb create mode 100644 meta/recipes-devtools/isar-apt/isar-apt-host.bb diff --git a/meta/classes/isar-bootstrap-helper.bbclass b/meta/classes/isar-bootstrap-helper.bbclass index 3c10fc7..bc23ad2 100644 --- a/meta/classes/isar-bootstrap-helper.bbclass +++ b/meta/classes/isar-bootstrap-helper.bbclass @@ -7,6 +7,18 @@ IMAGE_TRANSIENT_PACKAGES ??= "" +def get_deb_host_arch(): + import subprocess + arch = subprocess.check_output(['dpkg-architecture', '-q', 'DEB_HOST_ARCH'], universal_newlines=True) + return str.splitlines(arch)[0] + +#Debian Distribution for SDK host +HOST_DISTRO ?= "debian-stretch" +#Determine SDK host architecture if not explicitly set +HOST_ARCH ?= "${@get_deb_host_arch()}" + +HOST_DISTRO_APT_SOURCES += "conf/distro/${HOST_DISTRO}.list" + def reverse_bb_array(d, varname): array = d.getVar(varname, True) if array is None: @@ -14,13 +26,18 @@ def reverse_bb_array(d, varname): array = reversed(array.split()) return " ".join(i for i in array) + setup_root_file_system() { CLEAN="" FSTAB="" + ROOTFS_ARCH="${DISTRO_ARCH}" + ROOTFS_DISTRO="${DISTRO}" while true; do case "$1" in --clean) CLEAN=1 ;; --fstab) FSTAB=$2; shift ;; + --host-arch) ROOTFS_ARCH=${HOST_ARCH} ;; + --host-distro) ROOTFS_DISTRO=${HOST_DISTRO} ;; -*) bbfatal "$0: invalid option specified: $1" ;; *) break ;; esac @@ -33,7 +50,7 @@ setup_root_file_system() { CLEAN_FILES="${ROOTFSDIR}/etc/hostname ${ROOTFSDIR}/etc/resolv.conf" sudo cp -Trpfx \ - "${DEPLOY_DIR_IMAGE}/isar-bootstrap-${DISTRO}-${DISTRO_ARCH}/" \ + "${DEPLOY_DIR_IMAGE}/isar-bootstrap-$ROOTFS_DISTRO-$ROOTFS_ARCH/" \ "$ROOTFSDIR" [ -n "${FSTAB}" ] && cat ${FSTAB} | sudo tee "$ROOTFSDIR/etc/fstab" @@ -43,7 +60,8 @@ setup_root_file_system() { echo "Package: *\nPin: release n=${DEBDISTRONAME}\nPin-Priority: 1000" | \ sudo tee "$ROOTFSDIR/etc/apt/preferences.d/isar" >/dev/null - sudo mount --bind ${DEPLOY_DIR_APT}/${DISTRO} $ROOTFSDIR/isar-apt + sudo mount --bind ${DEPLOY_DIR_APT}/${ROOTFS_DISTRO} $ROOTFSDIR/isar-apt + sudo mount -t devtmpfs -o mode=0755,nosuid devtmpfs $ROOTFSDIR/dev sudo mount -t proc none $ROOTFSDIR/proc diff --git a/meta/recipes-core/isar-bootstrap/isar-bootstrap-host.bb b/meta/recipes-core/isar-bootstrap/isar-bootstrap-host.bb new file mode 100644 index 0000000..cca0984 --- /dev/null +++ b/meta/recipes-core/isar-bootstrap/isar-bootstrap-host.bb @@ -0,0 +1,75 @@ +# Minimal host Debian root file system +# +# This software is a part of ISAR. +# Copyright (c) Siemens AG, 2018 +# +# SPDX-License-Identifier: MIT + +Description = "Minimal host Debian root file system" + +WORKDIR = "${TMPDIR}/work/${DISTRO}-${DISTRO_ARCH}/${PN}-${HOST_DISTRO}-${HOST_ARCH}" + +include isar-bootstrap.inc +inherit isar-bootstrap-helper + +do_generate_keyring[stamp-extra-info] = "${HOST_DISTRO}-${HOST_ARCH}" + +do_apt_config_prepare[stamp-extra-info] = "${HOST_DISTRO}-${HOST_ARCH}" +do_apt_config_prepare[dirs] = "${WORKDIR}" +do_apt_config_prepare[vardeps] += "\ + APTPREFS \ + HOST_DISTRO_APT_PREFERENCES \ + DEBDISTRONAME \ + APTSRCS \ + HOST_DISTRO_APT_SOURCES \ + " +python do_apt_config_prepare() { + apt_preferences_out = d.getVar("APTPREFS", True) + apt_preferences_list = (d.getVar("HOST_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("HOST_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_apt_config_install[stamp-extra-info] = "${HOST_DISTRO}-${HOST_ARCH}" + + +do_bootstrap[stamp-extra-info] = "${HOST_DISTRO}-${HOST_ARCH}" +do_bootstrap[vardeps] += "HOST_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 \ + --include=locales \ + ${@get_distro_components_argument(d, True)} \ + ${DEBOOTSTRAP_KEYRING} \ + "${@get_distro_suite(d, True)}" \ + "${ROOTFSDIR}" \ + "${@get_distro_source(d, True)}" +} +addtask bootstrap before do_build after do_generate_keyring + +do_deploy[stamp-extra-info] = "${HOST_DISTRO}-${HOST_ARCH}" +do_deploy[dirs] = "${DEPLOY_DIR_IMAGE}" +do_deploy() { + ln -Tfsr "${ROOTFSDIR}" "${DEPLOY_DIR_IMAGE}/isar-bootstrap-${HOST_DISTRO}-${HOST_ARCH}" +} +addtask deploy before do_build after do_apt_update + +do_apt_update[stamp-extra-info] = "${HOST_DISTRO}-${HOST_ARCH}" + +CLEANFUNCS = "clean_deploy" +clean_deploy() { + rm -f "${DEPLOY_DIR_IMAGE}/isar-bootstrap}-${HOST_DISTRO}-${HOST_ARCH}" +} diff --git a/meta/recipes-devtools/isar-apt/isar-apt-host.bb b/meta/recipes-devtools/isar-apt/isar-apt-host.bb new file mode 100644 index 0000000..0cf5ce1 --- /dev/null +++ b/meta/recipes-devtools/isar-apt/isar-apt-host.bb @@ -0,0 +1,31 @@ +# This software is a part of ISAR. +# Copyright (C) 2015-2018 ilbers GmbH + +inherit isar-bootstrap-helper + +SRC_URI = "file://distributions.in" + +CACHE_CONF_DIR = "${DEPLOY_DIR_APT}/${HOST_DISTRO}/conf" +do_cache_config[dirs] = "${CACHE_CONF_DIR}" +do_cache_config[stamp-extra-info] = "${HOST_DISTRO}" +do_cache_config[lockfiles] = "${DEPLOY_DIR_APT}/isar.lock" + +# Generate reprepro config for current host distro if it doesn't exist. Once it's +# generated, this task should do nothing. +do_cache_config() { + if [ ! -e "${CACHE_CONF_DIR}/distributions" ]; then + sed -e "s#{DISTRO_NAME}#"${DEBDISTRONAME}"#g" \ + ${WORKDIR}/distributions.in > ${CACHE_CONF_DIR}/distributions + fi + + path_cache="${DEPLOY_DIR_APT}/${HOST_DISTRO}" + path_databases="${DEPLOY_DIR_DB}/${HOST_DISTRO}" + + if [ ! -d "${path_databases}" ]; then + reprepro -b ${path_cache} \ + --dbdir ${path_databases} \ + export ${DEBDISTRONAME} + fi +} + +addtask cache_config after do_unpack -- 2.11.0