From mboxrd@z Thu Jan 1 00:00:00 1970 X-GM-THRID: 6460145511220379648 X-Received: by 10.28.215.195 with SMTP id o186mr140082wmg.9.1504860627539; Fri, 08 Sep 2017 01:50:27 -0700 (PDT) X-BeenThere: isar-users@googlegroups.com Received: by 10.25.203.2 with SMTP id b2ls104519lfg.54.gmail; Fri, 08 Sep 2017 01:50:27 -0700 (PDT) X-Google-Smtp-Source: AOwi7QCLg65JXgBEePKbcyf8bjplDH1JT+niAYEetcsxHdTYiAUStz7TIDqQ7PEIrI21PmEIkWbB X-Received: by 10.46.83.13 with SMTP id h13mr150951ljb.40.1504860627282; Fri, 08 Sep 2017 01:50:27 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1504860627; cv=none; d=google.com; s=arc-20160816; b=kBK1RtFlKmEys2x3vxeVMvIF27ccO3/K9FTyVs8/ve3swDhVnkZk7pjYvJf+KeywC5 IY3hmfdKooqFdxwjgSyZJPnoYdn4X2vk8OTN9hQh+nqiShWam4V7xAB4w5Xr4UvIGOLM p7xqLe2FsiWTpTsFfPqc2kAUF46s4IqjjJT5oWKPlQZJC6L0/dl9Qav33gTBOSZfO1TA Zi5sFIp87dkuHuscqAedh8H6Lc/2HfFF3K1lqqbQ6cOxV86572yegMHETx6yNwavzhDy onij0TWHiOvEz2YoLBmEJ32dpbYAoY3/bgrwO0RZzWKRrHbPD6kK1IISXX3K1cgzWG83 /JtQ== 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:to:references:subject :arc-authentication-results; bh=xPCPi/Z6qXnSLPvv0yZg8GZOuv9ARq9Hq2yD5QgxiTs=; b=XkZ3/9MZJA3yXu+Yb3W8g/vg7dFpKDgE5XY79Uxcm6IbMy4nC3FreLl//mZVpcKa9O kxnNaObcO7QZcAJBBZwnafdBziTWDLOF9xBiQxcN/snZoViIELZTpGBw6YWp9Aln/c/V ztOgKlJvS/Uza4qU9NVeijsVk/TVvMgVaE26NXhZY6e5abPeiDJf0Bi0cOkDOBIM1nRT jbn23PErIPmtJy/tGp0qnyWyzoUGaMBYuHnJmAzh2iB4W9Wiv/b9xT7dzt0XsDiy5nHy bFB5mJ2LfNcf8nguuaHhmM/RyBE3alyFKKpigB+e3zkYQE32q2niZgzpeMQy4g0Uxknc YUiA== 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 i90si94997wmh.5.2017.09.08.01.50.26 for (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Fri, 08 Sep 2017 01:50:26 -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 [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 v888oO5o008376 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES128-SHA bits=128 verify=NOT) for ; Fri, 8 Sep 2017 10:50:25 +0200 Subject: Re: [PATCH 5/6] meta/dpkg: add dpkg-custom class References: <356cb2c3f7dfead49d75580fdff10dfa8c41232e.1504119538.git.henning.schild@siemens.com> <20170908101549.25d4e3ff@md1em3qc> <5785905c-16fe-049f-9b15-b28a929363c6@ilbers.de> <20170908104201.4f5db805@md1em3qc> To: isar-users@googlegroups.com From: Alexander Smirnov Message-ID: <46889a3a-08f7-2bc6-b556-40ed2e1172d0@ilbers.de> Date: Fri, 8 Sep 2017 11:50:18 +0300 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Thunderbird/52.2.1 MIME-Version: 1.0 In-Reply-To: <20170908104201.4f5db805@md1em3qc> Content-Type: text/plain; charset=utf-8; format=flowed Content-Language: en-US Content-Transfer-Encoding: 7bit X-TUID: QefhFg4Ev6UV On 09/08/2017 11:42 AM, Henning Schild wrote: > Am Fri, 8 Sep 2017 11:31:23 +0300 > schrieb Alexander Smirnov : > >> On 09/08/2017 11:15 AM, Henning Schild wrote: >>> Am Mon, 4 Sep 2017 18:36:23 +0300 >>> schrieb Alexander Smirnov : >>> >>>> 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: >>> >>> Well it is a capital "DEBIAN" folder that contains the package >>> metadata and no build instructions like 'debian'. >>> >>>> 1. Why we need another do_deb_package, while do_build from dpkg >>>> class does the same? >>> >>> do_build does not do the same. It eventually calls >>> 'dpkg-buildpackage' which does "configure; make; make install; make >>> deb" >>> >>> Using the same language this step is just "make deb" and it uses the >>> debian tool 'dpkg-deb'. >>> >>> Custom steps for "configure; make;" could be added in the future. >>> "make install" is do_populate_package. >> >> Ok, I see now. But why it's done by host dpkg-deb tool? This should >> be done inside buildchroot to keep version compatibility. If you use >> host stretch and build for wheezy, there will be big gap in versions. > > Thanks for pointing that out. That is a mistake just like the ARCH > thing Claudius pointed out. I will look into that. > I kindly ask you to review the patch again and provide such feedback > inline. Sure, will do. >>> >>>> 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. >>> >>> That would be adding support for 'debian'-izing a source package. >>> >>> This patch is more about packaging binaries and creating >>> meta-packages. >> >> Ok. >> >