From mboxrd@z Thu Jan 1 00:00:00 1970 X-GM-THRID: 6520199916203016192 X-Received: by 10.25.157.193 with SMTP id g184mr27871lfe.37.1518509991218; Tue, 13 Feb 2018 00:19:51 -0800 (PST) X-BeenThere: isar-users@googlegroups.com Received: by 10.25.151.15 with SMTP id z15ls1520663lfd.14.gmail; Tue, 13 Feb 2018 00:19:50 -0800 (PST) X-Google-Smtp-Source: AH8x226hPXZd4jubpIciMn7L5t55+VuCIhEISRfbPtR5BgqBQeMkgpBlhv90ouMsNrl/GPCeueWV X-Received: by 10.25.41.140 with SMTP id p134mr29476lfp.17.1518509990566; Tue, 13 Feb 2018 00:19:50 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1518509990; cv=none; d=google.com; s=arc-20160816; b=i+3xDuq6j10G7JQNU+wCTexLz4vqpJ3+N0PyN+x6HRmtKZL8zE/YALxW86jh5LV8uM +cirYvXA5rHRYn+Ez9RvOqtSq+XF6wkvwTQViYy0cANOZSYSKtv9Ctt0z9OaIcrpXr4c WOuKWCsyn/l2yqHpfwycy0g3vJJnxmMXv7Rrbn2jsM2oHSwbHLuOFRG3jRzbnQacrOU8 qGYMDYnfxawmfZSUim2EHVkgXAPQvvMKJO4uhWvHa/4OQbW8pXskVLgvhS2UMpxYzWFT 3PjrK7X7PaBcLhgbxpJlRKXaVJhAlj9xFPuPjfWIUcqzUGwy6/0TmLhTOOiPJIC9fW3N sviw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=content-transfer-encoding:content-language:in-reply-to:mime-version :user-agent:date:message-id:from:references:to:subject :arc-authentication-results; bh=I3sH0lepOirbOVVPKbo2u3+OtNblw8r8o+lnTdzEwnc=; b=0ewMvmOday6cdOORyb6ir00818TXRdw71X0vF/4yNFIf2NEWA5iNdmMztTlI9o4Iem 4KJ9BAZeQ2pBIQULyy8R/JV2UlbP1osuhIDYCvxFpaApLUPrEhyE8MFQPsiSL2ZTvVMr +YTJFTjJY5n6gPaJMxXiYGRapeV6c1Pm8s5Rnq1RqqfkueBkv5q9bcJXcuKTDotD5cKs uXabys1peVG/LC7CU7tA8pn7NJhjuE7JXZSHXj55Ysh/gmvasmKMmYGiNbVg6qeM1vHv VWYn1D18h+7Zp1pIE+a4hZVqpv7VhcH6p317JT1VqVxsh1VFqJgAraVMFUVivQ4vxQSr Gd/Q== 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 l30si556916ljb.3.2018.02.13.00.19.50 for (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 13 Feb 2018 00:19:50 -0800 (PST) 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 [10.0.2.15] ([188.227.110.165]) (authenticated bits=0) by aqmola.ilbers.de (8.14.4/8.14.4/Debian-4+deb7u1) with ESMTP id w1D8JkLZ005204 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES128-SHA bits=128 verify=NOT); Tue, 13 Feb 2018 09:19:48 +0100 Subject: Re: [PATCH v4 5/8] Provide class for easy custom kernel builds To: Jan Kiszka , isar-users References: <10f71292d5c06de6909594c891f2478334106135.1518362719.git.jan.kiszka@siemens.com> <5771c955-dec7-8347-123d-d4b3f08e751a@siemens.com> From: Alexander Smirnov Message-ID: <946a22d8-1562-4f73-25f0-b36bccba35d7@ilbers.de> Date: Tue, 13 Feb 2018 11:19:41 +0300 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Thunderbird/52.3.0 MIME-Version: 1.0 In-Reply-To: <5771c955-dec7-8347-123d-d4b3f08e751a@siemens.com> Content-Type: text/plain; charset=utf-8; format=flowed Content-Language: en-US Content-Transfer-Encoding: 8bit X-TUID: uMWCYu75OAfW On 02/13/2018 10:03 AM, Jan Kiszka wrote: > On 2018-02-12 19:56, Alexander Smirnov wrote: >> On 02/11/2018 06:25 PM, Jan Kiszka wrote: >>> From: Jan Kiszka >>> >>> With this class, it becomes almost trivial to replace the distro kernel >>> with a custom build. You just need to inherit linux-kernel, specify the >>> source URI, define via S where the source is unpacked to and provide a >>> defconfig. To switch to a custom kernel recipe, >>> PREFERRED_PROVIDER_virtual/kernel has to be adjusted in local.conf or >>> the distro conf. >>> >>> The approach works internally by first running "make deb-pkg" on the >>> kernel and the repackages the output to make the binary linux-image and >>> linux-header debs act as replacement of their distro packages. This >>> results in a suboptimal technical implementation which may eventually be >>> replaced by an isar-implemented deb-pkg build process. However, this is >>> not expected to affect the user-visible interface of this class. >>> >>> Signed-off-by: Jan Kiszka >>> --- >>>   meta/classes/linux-kernel.bbclass | 98 >>> +++++++++++++++++++++++++++++++++++++++ >>>   1 file changed, 98 insertions(+) >>>   create mode 100644 meta/classes/linux-kernel.bbclass >>> >>> diff --git a/meta/classes/linux-kernel.bbclass >>> b/meta/classes/linux-kernel.bbclass >>> new file mode 100644 >>> index 0000000..5f4df3f >>> --- /dev/null >>> +++ b/meta/classes/linux-kernel.bbclass >>> @@ -0,0 +1,98 @@ >>> +# Custom kernel build >>> +# >>> +# This software is a part of ISAR. >>> +# Copyright (c) Siemens AG, 2018 >>> +# >>> +# SPDX-License-Identifier: MIT >>> + >>> +DESCRIPTION ?= "Custom kernel" >>> +PROVIDES = "virtual/kernel" >>> + >>> +inherit dpkg-base >>> + >>> +KERNEL_DEBIAN_DEPENDS ?= "initramfs-tools | linux-initramfs-tool, >>> kmod, linux-base (>= 4.3~)" >>> +KERNEL_HEADERS_DEBIAN_DEPENDS ?= "libc6, libssl1.1, gcc" >>> +KBUILD_DEPENDS ?= "libssl-dev libelf-dev bc" >>> + >>> +REPACK_DIR = "${PP}/repack" >>> +REPACK_LINUX_IMAGE_DIR = "${REPACK_DIR}/linux-image" >>> +REPACK_LINUX_HEADERS_DIR = "${REPACK_DIR}/linux-headers" >>> + >>> +dpkg_runbuild() { >>> +    E="${@ bb.utils.export_proxies(d)}" >>> +    sudo -E chroot ${BUILDCHROOT_DIR} sh -c ' >>> +        set -e >>> + >>> +        apt-get install -y -o Debug::pkgProblemResolver=yes \ >>> +            --no-install-recommends ${KBUILD_DEPENDS} >>> + >>> +        cd ${PP}/${S} >>> +        cp ../defconfig .config >>> +        make olddefconfig >>> + >>> +        make -j ${@bb.utils.cpu_count() * 2} deb-pkg >>> + >>> +        rm -rf ${REPACK_DIR} >>> +        mkdir -p ${REPACK_DIR} >>> +        mkdir -p ${REPACK_LINUX_IMAGE_DIR} >>> +        mkdir -p ${REPACK_LINUX_HEADERS_DIR} >>> + >>> +        cd ${PP} >>> +        tar xzf linux-${PV}_${PV}-1.debian.tar.gz -C ${REPACK_DIR} >>> +        dpkg-deb -R linux-image-${PV}_${PV}-1_${KERNEL_ARCH}.deb \ >>> +            ${REPACK_LINUX_IMAGE_DIR} >>> +        dpkg-deb -R linux-headers-${PV}_${PV}-1_${KERNEL_ARCH}.deb \ >>> +            ${REPACK_LINUX_HEADERS_DIR} >>> + >>> +        dpkg-gencontrol -crepack/debian/control \ >>> +            -lrepack/debian/changelog \ >>> +            -frepack/debian/files \ >>> +            -plinux-image-${PV} \ >>> +            -P${REPACK_LINUX_IMAGE_DIR} \ >>> +            -DPackage="linux-image-${KERNEL_ARCH}" \ >>> +            -DSection=kernel \ >>> +            -DPriority=required \ >>> +            -DProvides="${PN}" \ >>> +            -DDepends="${KERNEL_DEBIAN_DEPENDS}" >>> + >>> +        # Add Debian-like link installation to postinst >>> +        touch ${REPACK_LINUX_IMAGE_DIR}/lib/modules/${PV}/.fresh-install >>> +        sed -i ${REPACK_LINUX_IMAGE_DIR}/DEBIAN/postinst \ >>> +            -e "/^set -e$/a\\ >>> +\\ >>> +if [ -f /lib/modules/${PV}/.fresh-install ]; then\\ >>> +    change=install\\ >>> +else\\ >>> +    change=upgrade\\ >>> +fi\\ >>> +linux-update-symlinks \$change ${PV} /boot/vmlinuz-${PV}\\ >>> +rm -f /lib/modules/${PV}/.fresh-install" >>> + >>> +        # Add Debian-like link removal to postrm >>> +        sed -i ${REPACK_LINUX_IMAGE_DIR}/DEBIAN/postrm \ >>> +            -e "/^set -e$/a\\ >>> +\\ >>> +rm -f /lib/modules/${PV}/.fresh-install\\ >>> +\\ >>> +if [ \"\$1\" != upgrade ] && command -v linux-update-symlinks >>>> /dev/null; then\\ >>> +    linux-update-symlinks remove ${PV}  /boot/vmlinuz-${PV}\\ >>> +fi" >>> + >>> +        dpkg-gencontrol -crepack/debian/control \ >>> +            -lrepack/debian/changelog \ >>> +            -frepack/debian/files \ >>> +            -plinux-headers-${PV} \ >>> +            -P${REPACK_LINUX_HEADERS_DIR} \ >>> +            -Vkernel:debarch="${KERNEL_ARCH}" \ >>> +            -DPackage="linux-headers-${KERNEL_ARCH}" \ >>> +            -DSection=kernel \ >>> +            -DDepends="${KERNEL_HEADERS_DEBIAN_DEPENDS}" >>> + >>> +        dpkg-deb -b ${REPACK_LINUX_IMAGE_DIR} \ >>> +            linux-image-${KERNEL_ARCH}_${PV}-1_${KERNEL_ARCH}.deb >>> +        rm -f linux-image-${PV}_${PV}-1_${KERNEL_ARCH}.deb >>> +        dpkg-deb -b ${REPACK_LINUX_HEADERS_DIR} \ >>> +            linux-headers-${KERNEL_ARCH}_${PV}-1_${KERNEL_ARCH}.deb >>> +        rm -f linux-headers-${PV}_${PV}-1_${KERNEL_ARCH}.deb >>> +    ' >>> +} >>> >> >> What is the benefit of having this script in the class? I see that we >> have separate files for: >> >>  - buildchroot >>  - kernel modules >> >> Why this chroot script should be a part of bitbake class? This makes >> debugging much more complicated, because I have no possibility to run >> this script manually from buildchroot (like I could do with build.sh) > > I played with it, and it "just" took 6 exports to set up the interface > to script-based build. That will likely not be convenient for debugging > as well (and I never had to call things manually that way, I got all > information from logs), but I can keep that pattern. Will also mean: > back to an include, rather than using a class (no big issue). > >> >> Also formatting style looks nasty here. > > That's not going to change unless you suggest some alternative for the > sed-based code injection into postinst/postrm. Just for sure that I understand the issue, why no sed injections? You already do this for kernel module by "sedding" control file. Alex