Write a list of installed packages to a .manifest file next to the
image, so we can find out what went into the image after it has been
constructed without necessarily having to have buildhistory enabled
(although that will provide more detail.) We can make use of this for
example in the testimage class associated code that checks for installed
packages for determining whether or not to run specific tests.
Note: this replaces the previous ipk-specific manifest code with
something that works for ipk, rpm and deb, and instead of a pruned
status file, packages are listed one per line, in the following format:
<packagename> <packagearch> <version>
Tests for all three backends have shown that the performance impact of
this change is negligible (about 1.5s max).
Implements [YOCTO #5410]
(From OE-Core rev:
2978d1f2617a33e2e3a77e249d73e998d79b4ec9)
Signed-off-by: Paul Eggleton <paul.eggleton@linux.intel.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
ROOTFS_POSTPROCESS_COMMAND += '${@base_contains("IMAGE_FEATURES", "debug-tweaks", "ssh_allow_empty_password; ", "",d)}'
# Enable postinst logging if debug-tweaks is enabled
ROOTFS_POSTPROCESS_COMMAND += '${@base_contains("IMAGE_FEATURES", "debug-tweaks", "postinst_enable_logging; ", "",d)}'
+# Write manifest
+IMAGE_MANIFEST = "${DEPLOY_DIR_IMAGE}/${IMAGE_NAME}.rootfs.manifest"
+ROOTFS_POSTPROCESS_COMMAND =+ "write_image_manifest ; "
# Set default postinst log file
POSTINST_LOGFILE ?= "${localstatedir}/log/postinstall.log"
${IMAGE_POSTPROCESS_COMMAND}
${MACHINE_POSTPROCESS_COMMAND}
+
+ if [ -n "${IMAGE_LINK_NAME}" -a -f "${IMAGE_MANIFEST}" ]; then
+ rm -f ${DEPLOY_DIR_IMAGE}/${IMAGE_LINK_NAME}.manifest
+ ln -s ${IMAGE_NAME}.rootfs.manifest ${DEPLOY_DIR_IMAGE}/${IMAGE_LINK_NAME}.manifest
+ fi
}
insert_feed_uris () {
}
write_image_manifest () {
- rootfs_${IMAGE_PKGTYPE}_write_manifest
-
- if [ -n "${IMAGE_LINK_NAME}" ]; then
- rm -f ${DEPLOY_DIR_IMAGE}/${IMAGE_LINK_NAME}.manifest
- ln -s ${IMAGE_NAME}.rootfs.manifest ${DEPLOY_DIR_IMAGE}/${IMAGE_LINK_NAME}.manifest
- fi
+ list_installed_packages ver | sort > ${IMAGE_MANIFEST}
}
# Make login manager(s) enable automatic login.
echo "$pkg $fullpath $pkgarch"
fi
done
+ elif [ "$1" = "ver" ] ; then
+ ${DPKG_QUERY_COMMAND} -W -f='${Package} ${PackageArch} ${Version}\n'
else
${DPKG_QUERY_COMMAND} -W -f='${Package}\n'
fi
echo "$pkg $fullpath $pkgarch"
fi
done
+ elif [ "$1" = "ver" ] ; then
+ opkg-cl ${OPKG_ARGS} status | opkg-query-helper.py -v
else
opkg-cl ${OPKG_ARGS} list_installed | awk '{ print $1 }'
fi
${RPM_QUERY_CMD} -qa --qf "[%{NAME} %{ARCH}\n]" | translate_smart_to_oe arch
elif [ "$1" = "file" ]; then
${RPM_QUERY_CMD} -qa --qf "[%{NAME} %{ARCH} %{PACKAGEORIGIN}\n]" | translate_smart_to_oe file
+ elif [ "$1" = "ver" ]; then
+ ${RPM_QUERY_CMD} -qa --qf "[%{NAME} %{ARCH} %{VERSION}\n]" | translate_smart_to_oe arch
else
${RPM_QUERY_CMD} -qa --qf "[%{NAME} %{ARCH}\n]" | translate_smart_to_oe
fi
done
}
-rootfs_ipk_write_manifest() {
- manifest=${DEPLOY_DIR_IMAGE}/${IMAGE_NAME}.rootfs.manifest
- cp ${IMAGE_ROOTFS}${OPKGLIBDIR}/opkg/status $manifest
-
- sed '/Depends/d' -i $manifest
- sed '/Status/d' -i $manifest
- sed '/Architecture/d' -i $manifest
- sed '/Installed-Time/d' -i $manifest
- sed '/Auto-Installed/d' -i $manifest
- sed '/Recommends/d' -i $manifest
- sed '/Provides/d' -i $manifest
- sed '/Conflicts/d' -i $manifest
-}
-
remove_packaging_data_files() {
rm -rf ${IMAGE_ROOTFS}${OPKGLIBDIR}/opkg
# We need the directory for the package manager lock
archmode = False
filemode = False
+vermode = False
args = []
for arg in sys.argv[1:]:
archmode = True
elif arg == '-f':
filemode = True
+ elif arg == '-v':
+ vermode = True
else:
args.append(arg)
elif line.startswith("Architecture:"):
arch = line.split(": ")[1]
print("%s %s_%s_%s.ipk %s" % (pkg,pkg,ver,arch,arch))
+ elif vermode:
+ if line.startswith("Version:"):
+ ver = line.split(": ")[1]
+ elif line.startswith("Architecture:"):
+ arch = line.split(": ")[1]
+ print("%s %s %s" % (pkg,arch,ver))
else:
if line.startswith("Depends:"):
depval = line.split(": ")[1]