Openembedded Core Discussions
 help / color / mirror / Atom feed
* [PATCH 0/2 ] V3 Incremental rpm image generation
@ 2012-01-10 10:38 Robert Yang
  2012-01-10 10:38 ` [PATCH 1/2 " Robert Yang
                   ` (2 more replies)
  0 siblings, 3 replies; 4+ messages in thread
From: Robert Yang @ 2012-01-10 10:38 UTC (permalink / raw)
  To: openembedded-core

Changes of V3:
* Change the name from INC_RPM_IMAGE_GEN to INC_RPM_IMAGE_GEN as Richard
  suggested, and it will only work for rpm based rootfs, the deb and ipk
  will be done in M3.

* Update rootfs_rpm.bbclass since other developer has modified it since
  V2.

Changes of V2:
* Move the config sample from meta-yocto/conf/local.conf.sample to
  meta-yocto/conf/local.conf.sample.extended as Saul suggested.

Testing:
1) Add INC_RPM_IMAGE_GEN = "1" to conf/local.conf
2) $ bitbake core-image-sato

   * Test when remove some pkgs
     a) Save the modify time of file which is in
        tmp/work/qemux86_64-poky-linux/core-image-sato-1.0-r0/rootfs/dev/.
     b) Edit meta/recipes-sato/images/core-image-sato.bb, remove
        ${SATO_IMAGE_FEATURES} from IMAGE_FEATURES.
     c) bitbake core-image-sato

     Result: The project built well, check the modify time of the file
     which is in
     tmp/work/qemux86_64-poky-linux/core-image-sato-1.0-r0/rootfs/dev/,
     They should be the same to step a)'s, which means that these files
     were note newly created.

   * Testh when add some pkgs
     a) Save the modify time of file which is in
        tmp/work/qemux86_64-poky-linux/core-image-sato-1.0-r0/rootfs/dev/.
     b) Edit meta/recipes-sato/images/core-image-sato.bb, add the
        ${SATO_IMAGE_FEATURES} back to IMAGE_FEATURES.
     c) bitbake core-image-sato

     Result: The project built well, check the modify time of the file
     which is in
     tmp/work/qemux86_64-poky-linux/core-image-sato-1.0-r0/rootfs/dev/,
     They should be the same to step a)'s, which means that these files
     were note newly created.

   * Test when edit a pkg
     a) bitbake bzip2 -cclean
     b) rm -f rm -f sstate-cache/sstate-bzip2-*
     c) Edit meta/recipes-extended/bzip2/bzip2_1.0.6.bb
     d) bitbake core-image-sato
     Result: The project built well, and check:
        tmp/work/qemux86-poky-linux/core-image-sato-1.0-r0/temp/log.do_rootfs
     Only the bzip2 has been re-installed



The following changes since commit 468998cddbe1a803096c9b357e1b5daa3b7e8c2e:

  command.py: add parseConfigurationFiles API (2012-01-06 16:01:44 +0000)

are available in the git repository at:
  git://git.pokylinux.org/poky-contrib robert/inc_image_gen
  http://git.pokylinux.org/cgit.cgi/poky-contrib/log/?h=robert/inc_image_gen

Robert Yang (2):
  Incremental rpm image generation
  Incremental rpm image generation(Add config sample)

 meta-yocto/conf/local.conf.sample.extended |    7 +++
 meta/classes/image.bbclass                 |   11 ++++-
 meta/classes/package_rpm.bbclass           |   73 ++++++++++++++++++++++++----
 meta/classes/rootfs_rpm.bbclass            |    6 ++-
 4 files changed, 84 insertions(+), 13 deletions(-)

-- 
1.7.4.1




^ permalink raw reply	[flat|nested] 4+ messages in thread

* [PATCH 1/2 ] V3 Incremental rpm image generation
  2012-01-10 10:38 [PATCH 0/2 ] V3 Incremental rpm image generation Robert Yang
@ 2012-01-10 10:38 ` Robert Yang
  2012-01-10 10:38 ` [PATCH 2/2 ] V3 Incremental rpm image generation(Add config sample) Robert Yang
  2012-01-12  6:42 ` [PATCH 0/2 ] V3 Incremental rpm image generation Saul Wold
  2 siblings, 0 replies; 4+ messages in thread
From: Robert Yang @ 2012-01-10 10:38 UTC (permalink / raw)
  To: openembedded-core

Incremental rpm image generation, the rootfs would be totally removed and
re-created in the second generation by default, but with
INC_RPM_IMAGE_GEN = "1", the rpm based rootfs would be kept, and will do
update(remove/add some pkgs) on it.

NOTE: This is not suggested when you want to create a productive rootfs

For example:
  1) Add the follow config option to a conf file:
     INC_RPM_IMAGE_GEN = "1"

  2) bitbake core-image-sato
     modify a package
     bitbake core-image-sato

The rootfs would not be totally removed and re-created in the second
generation, it would be simply updated based on the "package".

Implatation:
1) Figure out the pkg which need to be removed or re-installed, then use
'rpm -e to remove the old one. Use the rpm's BUILDTIME to determine
which pkg has been rebuilt.

2) Figure out the pkg which is newly added, and use 'rpm -U' to install
it.

This only for the rpm based rootfs, the deb and ipk based rootfs would
be done later.

[YOCTO #1651]

Signed-off-by: Robert Yang <liezhi.yang@windriver.com>
---
 meta/classes/image.bbclass       |   11 +++++-
 meta/classes/package_rpm.bbclass |   73 ++++++++++++++++++++++++++++++++-----
 meta/classes/rootfs_rpm.bbclass  |    6 +++-
 3 files changed, 77 insertions(+), 13 deletions(-)

diff --git a/meta/classes/image.bbclass b/meta/classes/image.bbclass
index 295b653..3034725 100644
--- a/meta/classes/image.bbclass
+++ b/meta/classes/image.bbclass
@@ -134,15 +134,22 @@ do_rootfs[umask] = 022
 
 fakeroot do_rootfs () {
 	#set -x
-	rm -rf ${IMAGE_ROOTFS}
+    # When use the rpm incremental image generation, don't remove the rootfs
+    if [ "${INC_RPM_IMAGE_GEN}" != "1" -o "${IMAGE_PKGTYPE}" != "rpm" ]; then
+        rm -rf ${IMAGE_ROOTFS}
+    fi
 	rm -rf ${MULTILIB_TEMP_ROOTFS}
 	mkdir -p ${IMAGE_ROOTFS}
 	mkdir -p ${DEPLOY_DIR_IMAGE}
 
 	cp ${COREBASE}/meta/files/deploydir_readme.txt ${DEPLOY_DIR_IMAGE}/README_-_DO_NOT_DELETE_FILES_IN_THIS_DIRECTORY.txt
 
-	if [ "${USE_DEVFS}" != "1" ]; then
+    # If "${IMAGE_ROOTFS}/dev" exists, then the device had been made by
+    # the previous build
+	if [ "${USE_DEVFS}" != "1" -a ! -r "${IMAGE_ROOTFS}/dev" ]; then
 		for devtable in ${@get_devtable_list(d)}; do
+            # Always return ture since there maybe already one when use the
+            # incremental image generation
 			makedevs -r ${IMAGE_ROOTFS} -D $devtable
 		done
 	fi
diff --git a/meta/classes/package_rpm.bbclass b/meta/classes/package_rpm.bbclass
index d03dc3f..2d92efe 100644
--- a/meta/classes/package_rpm.bbclass
+++ b/meta/classes/package_rpm.bbclass
@@ -147,6 +147,67 @@ resolve_package_rpm () {
 	echo $pkg_name
 }
 
+# rpm common command and options
+rpm_common_comand () {
+
+    local target_rootfs="${INSTALL_ROOTFS_RPM}"
+    local extra_args="$@"
+
+    ${RPM} --root ${target_rootfs} \
+        --predefine "_rpmds_sysinfo_path ${target_rootfs}/etc/rpm/sysinfo" \
+        --predefine "_rpmrc_platform_path ${target_rootfs}/etc/rpm/platform" \
+        -D "_var ${localstatedir}" \
+        -D "_dbpath ${rpmlibdir}" \
+        --noparentdirs --nolinktos \
+        -D "__dbi_txn create nofsync private" \
+        -D "_cross_scriptlet_wrapper ${WORKDIR}/scriptlet_wrapper" $extra_args
+}
+
+# install or remove the pkg
+rpm_update_pkg () {
+
+    local target_rootfs="${INSTALL_ROOTFS_RPM}"
+
+    # Save the rpm's build time for incremental image generation, and the file
+    # would be moved to ${T}
+    rm -f ${target_rootfs}/install/total_solution_bt.manifest
+    for i in `cat ${target_rootfs}/install/total_solution.manifest`; do
+        # Use "rpm" rather than "${RPM}" here, since we don't need the
+        # '--dbpath' option
+        echo "$i `rpm -qp --qf '%{BUILDTIME}\n' $i`" >> \
+            ${target_rootfs}/install/total_solution_bt.manifest
+    done
+
+    # Only install the different pkgs if incremental image generation is set
+    if [ "${INC_RPM_IMAGE_GEN}" = "1" -a -f ${T}/total_solution_bt.manifest -a \
+        "${IMAGE_PKGTYPE}" = "rpm" ]; then
+        cur_list="${target_rootfs}/install/total_solution_bt.manifest"
+        pre_list="${T}/total_solution_bt.manifest"
+        sort -u $cur_list -o $cur_list
+        sort -u $pre_list -o $pre_list
+        comm -1 -3 $cur_list $pre_list | sed 's#.*/\(.*\)\.rpm .*#\1#' > \
+            ${target_rootfs}/install/remove.manifest
+        comm -2 -3 $cur_list $pre_list | awk '{print $1}' > \
+            ${target_rootfs}/install/incremental.manifest
+
+        # Attempt to remove unwanted pkgs, the scripts(pre, post, etc.) has not
+        # been run by now, so don't have to run them(preun, postun, etc.) when
+        # erase the pkg
+        if [ -s ${target_rootfs}/install/remove.manifest ]; then
+            rpm_common_comand --noscripts --nodeps \
+                -e `cat ${target_rootfs}/install/remove.manifest`
+        fi
+
+        # Attempt to install the incremental pkgs
+        rpm_common_comand --nodeps --replacefiles --replacepkgs \
+            -Uvh ${target_rootfs}/install/incremental.manifest
+    else
+        # Attempt to install
+        rpm_common_comand --replacepkgs \
+            -Uhv ${target_rootfs}/install/total_solution.manifest
+    fi
+}
+
 #
 # install a bunch of packages using rpm
 # the following shell variables needs to be set before calling this func:
@@ -406,16 +467,8 @@ EOF
 
 	chmod 0755 ${WORKDIR}/scriptlet_wrapper
 
-	# Attempt install
-	${RPM} --root ${target_rootfs} \
-		--predefine "_rpmds_sysinfo_path ${target_rootfs}/etc/rpm/sysinfo" \
-		--predefine "_rpmrc_platform_path ${target_rootfs}/etc/rpm/platform" \
-		-D "_var ${localstatedir}" \
-		-D "_dbpath ${rpmlibdir}" \
-		--noparentdirs --nolinktos --replacepkgs \
-		-D "__dbi_txn create nofsync private" \
-		-D "_cross_scriptlet_wrapper ${WORKDIR}/scriptlet_wrapper" \
-		-Uhv ${target_rootfs}/install/total_solution.manifest
+    rpm_update_pkg
+
 }
 
 python write_specfile () {
diff --git a/meta/classes/rootfs_rpm.bbclass b/meta/classes/rootfs_rpm.bbclass
index 999b8a6..48133f0 100644
--- a/meta/classes/rootfs_rpm.bbclass
+++ b/meta/classes/rootfs_rpm.bbclass
@@ -201,11 +201,15 @@ rootfs_check_package_exists() {
 }
 
 rootfs_install_packages() {
+    # The pkg to be installed here is not controlled by the
+    # package_install_internal_rpm, so it may have already been
+    # installed(e.g, installed in the first time when generate the
+    # rootfs), use '--replacepkgs' to always install them
 	for pkg in $@; do
 		${RPM} --root ${IMAGE_ROOTFS} -D "_dbpath ${rpmlibdir}" \
 			-D "__dbi_txn create nofsync private" \
 			--noscripts --notriggers --noparentdirs --nolinktos \
-			-Uhv $pkg || true
+			--replacepkgs -Uhv $pkg || true
 	done
 }
 
-- 
1.7.4.1




^ permalink raw reply related	[flat|nested] 4+ messages in thread

* [PATCH 2/2 ] V3 Incremental rpm image generation(Add config sample)
  2012-01-10 10:38 [PATCH 0/2 ] V3 Incremental rpm image generation Robert Yang
  2012-01-10 10:38 ` [PATCH 1/2 " Robert Yang
@ 2012-01-10 10:38 ` Robert Yang
  2012-01-12  6:42 ` [PATCH 0/2 ] V3 Incremental rpm image generation Saul Wold
  2 siblings, 0 replies; 4+ messages in thread
From: Robert Yang @ 2012-01-10 10:38 UTC (permalink / raw)
  To: openembedded-core

Add the config sample for incremental image generation to
meta-yocto/conf/local.conf.sample.extended

[YOCTO #1651]

Signed-off-by: Robert Yang <liezhi.yang@windriver.com>
---
 meta-yocto/conf/local.conf.sample.extended |    7 +++++++
 1 files changed, 7 insertions(+), 0 deletions(-)

diff --git a/meta-yocto/conf/local.conf.sample.extended b/meta-yocto/conf/local.conf.sample.extended
index 7c26572..b901c5b 100644
--- a/meta-yocto/conf/local.conf.sample.extended
+++ b/meta-yocto/conf/local.conf.sample.extended
@@ -123,3 +123,10 @@
 # The following is a list of classes to import to use in the generation of images
 # currently an example class is image_types_uboot
 # IMAGE_CLASSES = " image_types_uboot"
+
+# Incremental rpm image generation, the rootfs would be totally removed
+# and re-created in the second generation by default, but with
+# INC_RPM_IMAGE_GEN = "1", the rpm based rootfs would be kept, and will
+# do update(remove/add some pkgs) on it.  NOTE: This is not suggested
+# when you want to create a productive rootfs
+#INC_RPM_IMAGE_GEN = "1"
-- 
1.7.4.1




^ permalink raw reply related	[flat|nested] 4+ messages in thread

* Re: [PATCH 0/2 ] V3 Incremental rpm image generation
  2012-01-10 10:38 [PATCH 0/2 ] V3 Incremental rpm image generation Robert Yang
  2012-01-10 10:38 ` [PATCH 1/2 " Robert Yang
  2012-01-10 10:38 ` [PATCH 2/2 ] V3 Incremental rpm image generation(Add config sample) Robert Yang
@ 2012-01-12  6:42 ` Saul Wold
  2 siblings, 0 replies; 4+ messages in thread
From: Saul Wold @ 2012-01-12  6:42 UTC (permalink / raw)
  To: Patches and discussions about the oe-core layer

On 01/10/2012 02:38 AM, Robert Yang wrote:
> Changes of V3:
> * Change the name from INC_RPM_IMAGE_GEN to INC_RPM_IMAGE_GEN as Richard
>    suggested, and it will only work for rpm based rootfs, the deb and ipk
>    will be done in M3.
>
> * Update rootfs_rpm.bbclass since other developer has modified it since
>    V2.
>
> Changes of V2:
> * Move the config sample from meta-yocto/conf/local.conf.sample to
>    meta-yocto/conf/local.conf.sample.extended as Saul suggested.
>
> Testing:
> 1) Add INC_RPM_IMAGE_GEN = "1" to conf/local.conf
> 2) $ bitbake core-image-sato
>
>     * Test when remove some pkgs
>       a) Save the modify time of file which is in
>          tmp/work/qemux86_64-poky-linux/core-image-sato-1.0-r0/rootfs/dev/.
>       b) Edit meta/recipes-sato/images/core-image-sato.bb, remove
>          ${SATO_IMAGE_FEATURES} from IMAGE_FEATURES.
>       c) bitbake core-image-sato
>
>       Result: The project built well, check the modify time of the file
>       which is in
>       tmp/work/qemux86_64-poky-linux/core-image-sato-1.0-r0/rootfs/dev/,
>       They should be the same to step a)'s, which means that these files
>       were note newly created.
>
>     * Testh when add some pkgs
>       a) Save the modify time of file which is in
>          tmp/work/qemux86_64-poky-linux/core-image-sato-1.0-r0/rootfs/dev/.
>       b) Edit meta/recipes-sato/images/core-image-sato.bb, add the
>          ${SATO_IMAGE_FEATURES} back to IMAGE_FEATURES.
>       c) bitbake core-image-sato
>
>       Result: The project built well, check the modify time of the file
>       which is in
>       tmp/work/qemux86_64-poky-linux/core-image-sato-1.0-r0/rootfs/dev/,
>       They should be the same to step a)'s, which means that these files
>       were note newly created.
>
>     * Test when edit a pkg
>       a) bitbake bzip2 -cclean
>       b) rm -f rm -f sstate-cache/sstate-bzip2-*
>       c) Edit meta/recipes-extended/bzip2/bzip2_1.0.6.bb
>       d) bitbake core-image-sato
>       Result: The project built well, and check:
>          tmp/work/qemux86-poky-linux/core-image-sato-1.0-r0/temp/log.do_rootfs
>       Only the bzip2 has been re-installed
>
>
>
> The following changes since commit 468998cddbe1a803096c9b357e1b5daa3b7e8c2e:
>
>    command.py: add parseConfigurationFiles API (2012-01-06 16:01:44 +0000)
>
> are available in the git repository at:
>    git://git.pokylinux.org/poky-contrib robert/inc_image_gen
>    http://git.pokylinux.org/cgit.cgi/poky-contrib/log/?h=robert/inc_image_gen
>
> Robert Yang (2):
>    Incremental rpm image generation
>    Incremental rpm image generation(Add config sample)
>
>   meta-yocto/conf/local.conf.sample.extended |    7 +++
>   meta/classes/image.bbclass                 |   11 ++++-
>   meta/classes/package_rpm.bbclass           |   73 ++++++++++++++++++++++++----
>   meta/classes/rootfs_rpm.bbclass            |    6 ++-
>   4 files changed, 84 insertions(+), 13 deletions(-)
>

Merged into OE-Core
'
Thanks
	Sau!



^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2012-01-12  6:50 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2012-01-10 10:38 [PATCH 0/2 ] V3 Incremental rpm image generation Robert Yang
2012-01-10 10:38 ` [PATCH 1/2 " Robert Yang
2012-01-10 10:38 ` [PATCH 2/2 ] V3 Incremental rpm image generation(Add config sample) Robert Yang
2012-01-12  6:42 ` [PATCH 0/2 ] V3 Incremental rpm image generation Saul Wold

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox