From mboxrd@z Thu Jan 1 00:00:00 1970 X-GM-THRID: 6460145511220379648 X-Received: by 10.46.82.12 with SMTP id g12mr143189ljb.24.1504541312386; Mon, 04 Sep 2017 09:08:32 -0700 (PDT) X-BeenThere: isar-users@googlegroups.com Received: by 10.46.2.81 with SMTP id 78ls46511ljc.38.gmail; Mon, 04 Sep 2017 09:08:32 -0700 (PDT) X-Google-Smtp-Source: ADKCNb6yPYAnLj4JXNtWYIdKUvc+12/Bhzk1zsAt5caki5i3ZpmoFox87eElnMhqqLfXqAdfMEYH X-Received: by 10.46.0.30 with SMTP id 30mr140860lja.27.1504541312090; Mon, 04 Sep 2017 09:08:32 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1504541312; cv=none; d=google.com; s=arc-20160816; b=wv2uEUkBMlsl1BStgBkO2qxlFjdppLzNXkQgnS8bypUgVBJb1jwewPJ67XoniDadlB Kh/mg4MT86L5QOYqgU3Je/BRhU7q7uReNI8ZHg/yozGsYKy1U3VHYThLYOxoSE+Ul3nb o5HJ9Hkip819aEwaJZ6juS8/Iwd1fTU1G8Q9X9PEdhBmQ0SonQVEq/AfqPBsgmphz8ah E3JF/zwPRaw6PsK4Zs29BRsTs/ylJiRzVY46I1fC1FdOnW5mKtQUT0nr8iH2YY54gUuW bx2PujmfEj9FyPSvC0mhnLm6DV4D+L9o5bQ8w1e8cwOrWqe3/noUDorokfIkjIPtfa6L BMxw== 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=2ka2EEV8SSZmw1dxBDuM2OpfOjf0RglV21vFU1QbbR0=; b=nVvE+Ye+U+FG6v2Ubvfbj7WZ6GKgbqHZc4VD4itn/7IR++2Xn3P4QY1t2052OW6BxL NM7a1wpL9FTPstUAUcGacW7EbQqSytUn14VB3+ylcEQanc/7Msx3y3c5fG4IdlNWF1Kq e79YakUyejYoZ1gV6sr4oQjsxz1a9jFWtOurpYZJbxOKYBN+jMzjy6kSFYEQIlgStAy3 XnT0YvFL6Jgcm9eOf7ymhy2CwbMoYD8lwsn9Tgy+wZtTw7mtrWXYFRNxnUBZuYUYTIMz At9sPA/2uXdbjdm+80Pq3zg4+RS7bbjjGnNPGzEPcjwGV0eXtCfU61WFbjLn5N4Y+KkB UOhQ== ARC-Authentication-Results: i=1; gmr-mx.google.com; spf=neutral (google.com: 192.35.17.28 is neither permitted nor denied by best guess record for domain of jan.kiszka@siemens.com) smtp.mailfrom=jan.kiszka@siemens.com Return-Path: Received: from goliath.siemens.de (goliath.siemens.de. [192.35.17.28]) by gmr-mx.google.com with ESMTPS id m63si50877wma.8.2017.09.04.09.08.31 for (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Mon, 04 Sep 2017 09:08:32 -0700 (PDT) Received-SPF: neutral (google.com: 192.35.17.28 is neither permitted nor denied by best guess record for domain of jan.kiszka@siemens.com) client-ip=192.35.17.28; Authentication-Results: gmr-mx.google.com; spf=neutral (google.com: 192.35.17.28 is neither permitted nor denied by best guess record for domain of jan.kiszka@siemens.com) smtp.mailfrom=jan.kiszka@siemens.com Received: from mail1.siemens.de (mail1.siemens.de [139.23.33.14]) by goliath.siemens.de (8.15.2/8.15.2) with ESMTPS id v84G8Vlh003231 (version=TLSv1.2 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Mon, 4 Sep 2017 18:08:31 +0200 Received: from md1f2u6c.ww002.siemens.net ([139.25.68.37]) by mail1.siemens.de (8.15.2/8.15.2) with ESMTP id v84G8VFE020930; Mon, 4 Sep 2017 18:08:31 +0200 Subject: Re: [PATCH 5/6] meta/dpkg: add dpkg-custom class To: Alexander Smirnov , isar-users@googlegroups.com References: <356cb2c3f7dfead49d75580fdff10dfa8c41232e.1504119538.git.henning.schild@siemens.com> From: Jan Kiszka Message-ID: <183d261a-8b83-8dc0-09e7-80d80ce1cc15@siemens.com> Date: Mon, 4 Sep 2017 18:08:31 +0200 User-Agent: Mozilla/5.0 (X11; U; Linux i686 (x86_64); de; rv:1.8.1.12) Gecko/20080226 SUSE/2.0.0.12-1.1 Thunderbird/2.0.0.12 Mnenhy/0.7.5.666 MIME-Version: 1.0 In-Reply-To: Content-Type: text/plain; charset=utf-8 Content-Language: en-US Content-Transfer-Encoding: 8bit X-TUID: ZLZ8hePErFAa On 2017-09-04 17:36, Alexander Smirnov wrote: > On 08/30/2017 10:03 PM, Henning Schild wrote: >> Issues: >> 1. full customizations of the images is hard to impossible to >> realize in a layer without touching Isar >> 1.1. there is no easy way to just copy a file into the image >> 1.2. configuration (passwords, groups, cfg-files changes) can not be >> done in a layer, there is no way too hook into multistrap or the >> configure-script >> >> Change: >> Introduce a class that lets users create custom debian packages on the >> fly, without having to create a /debian directory and actually building. >> That allows you to pull in debian-dependencies, you could have a >> package that has no content and is just there to install what you need >> for a feature of your product. >> Using package hooks (preinst, postinst ..) you can configure pretty much >> all you want when installing the package. >> The package can contain actual payload as well, basically any files that >> come from "somewhere else". Say binary data like wallpapers, sound files >> or application binaries. >> >> Impact: >> This patch addresses the metioned issue in a way that uses debian >> mechanism. All the customizations will enjoy features like >> - collission protection (multiple packages providing the same file) >> - config file protection >> - versioning and the ability to deploy your changes in an updateable way >> >> This patch introduces a major new feature to Isar. >> >> This class introduces a new class for building debian packages on the >> fly. They can basically contain anything from random sources, where >> building happens outside of Isar. It also allows to create meta-packages >> that contain nothing but pull in dependencies, once all our packets come >> in via multistrap that will come in handy. >> For rootfs configuration you would use post- and pre- scripts just like >> regular debian packages do. >> > > Good idea. > >> Signed-off-by: Henning Schild >> --- >>   meta/classes/dpkg-custom.bbclass | 57 >> ++++++++++++++++++++++++++++++++++++++++ >>   1 file changed, 57 insertions(+) >>   create mode 100644 meta/classes/dpkg-custom.bbclass >> >> diff --git a/meta/classes/dpkg-custom.bbclass >> b/meta/classes/dpkg-custom.bbclass >> new file mode 100644 >> index 0000000..e4e743f >> --- /dev/null >> +++ b/meta/classes/dpkg-custom.bbclass >> @@ -0,0 +1,57 @@ >> +# This software is a part of ISAR. >> +# Copyright (C) 2017 Siemens AG >> + >> +inherit dpkg >> + >> +DEBIAN_DEPENDS ?= "" >> +MAINTAINER ?= "FIXME Unknown maintainer" >> + >> +D = "${WORKDIR}/image/" >> + >> +# Populate folder that will be picked up as package >> +# TODO this should be called 'do_install' >> +do_populate_package() { >> +    bbnote "Put your files for this package in ${D}" >> +} >> + >> +addtask populate_package after do_unpack before do_deb_package_prepare >> + >> +# so we can put hooks etc. in there already >> +do_populate_package[dirs] = "${D}/DEBIAN" >> + >> +do_deb_package_prepare() { >> +    cat<<-__EOF__ > ${D}/DEBIAN/control >> +        Package: ${PN} >> +        Architecture: `dpkg --print-architecture` >> +        Section: misc >> +        Priority: optional >> +        Maintainer: ${MAINTAINER} >> +        Depends: `echo ${DEBIAN_DEPENDS} | tr '[:blank:]' ','` >> +        Version: ${PV}+isar >> +        Description: ${DESCRIPTION} >> +    __EOF__ >> +    for t in pre post >> +    do >> +        for a in inst rm >> +        do >> +            chmod -f +x ${D}/DEBIAN/${t}${a} || true >> +        done >> +    done >> +} >> + >> +addtask deb_package_prepare after do_populate_package before >> do_deb_package_conffiles >> + >> +do_deb_package_conffiles() { >> +    CONFFILES=${D}/DEBIAN/conffiles >> +    find ${D} -type f -path '*/etc/*' | sed -e 's|^${D}|/|' >> >> $CONFFILES >> +    test -s $CONFFILES || rm $CONFFILES >> +} >> + >> +addtask deb_package_conffiles after do_deb_package_prepare before >> do_deb_package >> + >> +do_deb_package() { >> +    sudo chown -R root:root ${D}/DEBIAN/ >> +    sudo dpkg-deb --build ${D} ${WORKDIR} >> +} >> + >> +addtask deb_package after do_deb_package_conffiles before do_install >> > > If I got this correctly, the difference from dpkg-debian flow is that > you generate 'debian' folder on the fly. So: > > 1. Why we need another do_deb_package, while do_build from dpkg class > does the same? > > 2. Can we just add optional task to generic pipeline which generates > debian folder? Or make it as a part of do_build: if [ ! -d ${D}/debian > ]; then blablabla. > I'm not too deep into the details here, but the general considerations should be here: - Do both classes share enough code to unify them? - Is it easy enough for the user to specify and the class to derive the mode of operation when there is only one class? Jan -- Siemens AG, Corporate Technology, CT RDA ITP SES-DE Corporate Competence Center Embedded Linux