All of lore.kernel.org
 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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.