From: Claudius Heine <claudius.heine.ext@siemens.com>
To: Alexander Smirnov <asmirnov@ilbers.de>, isar-users@googlegroups.com
Subject: Re: [PATCH 5/6] meta/dpkg: add dpkg-custom class
Date: Mon, 11 Sep 2017 10:13:02 +0200 [thread overview]
Message-ID: <303e4092-fb88-3115-b770-44dc7cdc2420@siemens.com> (raw)
In-Reply-To: <ea8412e7-112c-edab-d6e6-2168e88c8a72@ilbers.de>
Hi,
On 09/04/2017 05:36 PM, 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 <henning.schild@siemens.com>
>> ---
>> 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?
Why not? 'do_build' is a very bad name, because it not really describes
anything specific and if you have multiple tasks with good names like
'deb_package' (while I still would prefer 'package_deb') that do just
one job each, then its much easier to recognize the tasks when calling
'bitbake -c liststasks ..' and its simpler to extend the pipeline in
each recipe as needed.
> 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.
No, please not part of the 'do_build' task! Thats exactly the reason why
'build' is not a good name, because it describes everything and nothing
and now developers are ensnared by its name to put everything in it.
And you agree that one big task that rules the world is just very bad
design. Every task should be very simple and do just one thing.
About the optional task inserted into the generic pipeline: I don't
really see the benefit. I currently tend to prefer them to be separated
and I see different arguments on both sides. My current view of those
packages where the 'DEBIAN' directory is created on the fly are that
they aren't clean packages. The 'right' way to do this is to have
debianized sources or a patch that adds the right 'DEBIAN' directory to
the sources. This here is just a useful shortcut for debianizing the
sources.
Cheers,
Claudius
--
DENX Software Engineering GmbH, Managing Director: Wolfgang Denk
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: (+49)-8142-66989-54 Fax: (+49)-8142-66989-80 Email: ch@denx.de
next prev parent reply other threads:[~2017-09-11 8:13 UTC|newest]
Thread overview: 51+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-08-30 19:03 [PATCH 0/6] v3 of getting the custom debian package in Henning Schild
2017-08-30 19:03 ` [PATCH 1/6] meta/dpkg: Make 'do_unpack' more generic, prepare for pulling out Henning Schild
2017-09-04 15:11 ` Alexander Smirnov
2017-09-04 16:47 ` Jan Kiszka
2017-09-05 7:05 ` Claudius Heine
2017-09-05 7:25 ` Alexander Smirnov
2017-09-05 7:37 ` Alexander Smirnov
2017-09-05 7:56 ` Claudius Heine
2017-09-08 8:30 ` Henning Schild
2017-09-08 8:44 ` Claudius Heine
2017-09-08 9:03 ` Henning Schild
2017-08-30 19:03 ` [PATCH 2/6] meta: Move 'do_fetch' and 'do_unpack' to base-class Henning Schild
2017-09-04 15:14 ` Alexander Smirnov
2017-09-04 16:03 ` Jan Kiszka
2017-09-04 16:10 ` Alexander Smirnov
2017-09-04 16:11 ` Jan Kiszka
2017-09-04 16:39 ` Alexander Smirnov
2017-09-04 16:45 ` Jan Kiszka
2017-08-30 19:03 ` [PATCH 3/6] meta/dpkg: rename to dpkg-debian and add comment Henning Schild
2017-08-31 8:23 ` Claudius Heine
2017-09-04 15:17 ` Alexander Smirnov
2017-09-04 16:05 ` Jan Kiszka
2017-08-30 19:03 ` [PATCH 4/6] meta/dpkg-debian: Make 'do_install' more generic, prepare for pulling out Henning Schild
2017-08-30 19:09 ` Henning Schild
2017-09-08 8:35 ` Henning Schild
2017-08-30 19:03 ` [PATCH 5/6] meta/dpkg: add dpkg-custom class Henning Schild
2017-08-31 8:38 ` Claudius Heine
2017-08-31 8:42 ` Jan Kiszka
2017-08-31 9:10 ` Claudius Heine
2017-08-31 9:32 ` Henning Schild
2017-08-31 12:14 ` Claudius Heine
2017-08-31 13:39 ` Henning Schild
2017-09-11 8:39 ` Alexander Smirnov
2017-08-31 8:53 ` Claudius Heine
2017-08-31 10:21 ` Henning Schild
2017-09-04 15:36 ` Alexander Smirnov
2017-09-04 16:08 ` Jan Kiszka
2017-09-04 16:30 ` Alexander Smirnov
2017-09-04 16:53 ` Jan Kiszka
2017-09-08 8:20 ` Henning Schild
2017-09-08 8:15 ` Henning Schild
2017-09-08 8:31 ` Alexander Smirnov
2017-09-08 8:42 ` Henning Schild
2017-09-08 8:50 ` Alexander Smirnov
2017-09-11 8:13 ` Claudius Heine [this message]
2017-09-11 8:19 ` Henning Schild
2017-09-11 9:12 ` Claudius Heine
2017-09-11 8:42 ` Claudius Heine
2017-08-30 19:03 ` [PATCH 6/6] recipes-app/example-custom: add example on how to use dpkg-custom Henning Schild
2017-09-04 15:40 ` Alexander Smirnov
2017-09-06 7:36 ` Henning Schild
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=303e4092-fb88-3115-b770-44dc7cdc2420@siemens.com \
--to=claudius.heine.ext@siemens.com \
--cc=asmirnov@ilbers.de \
--cc=isar-users@googlegroups.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox