From: Henning Schild <henning.schild@siemens.com>
To: isar-users@googlegroups.com
Cc: Alexander Smirnov <alex.bluesman.smirnov@gmail.com>,
Christian Storm <christian.storm@siemens.com>,
Claudius Heine <ch@denx.de>,
Henning Schild <henning.schild@siemens.com>
Subject: [PATCH 5/6] meta/dpkg: add dpkg-custom class
Date: Wed, 30 Aug 2017 21:03:56 +0200 [thread overview]
Message-ID: <356cb2c3f7dfead49d75580fdff10dfa8c41232e.1504119538.git.henning.schild@siemens.com> (raw)
In-Reply-To: <cover.1504119538.git.henning.schild@siemens.com>
In-Reply-To: <cover.1504119538.git.henning.schild@siemens.com>
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.
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
--
2.13.5
next prev parent reply other threads:[~2017-08-30 19:03 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 ` Henning Schild [this message]
2017-08-31 8:38 ` [PATCH 5/6] meta/dpkg: add dpkg-custom class 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
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=356cb2c3f7dfead49d75580fdff10dfa8c41232e.1504119538.git.henning.schild@siemens.com \
--to=henning.schild@siemens.com \
--cc=alex.bluesman.smirnov@gmail.com \
--cc=ch@denx.de \
--cc=christian.storm@siemens.com \
--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