image.bbclass: Make unneeded packages for a read-only rootfs configurable
Previously the list of packages that are considered unneeded for a read-only rootfs was hardcoded. This made it impossible to, e.g., have shadow installed on a system with a read-only rootfs, but where /etc is mounted writable. This also lists ${VIRTUAL-RUNTIME_update-alternatives} rather than update-alternatives (as was previously the case) since this should actually remove the intended package. (From OE-Core rev: e3b881d4168e5b02ff00f5c470ba472ab8bbc747) Signed-off-by: Peter Kjellerstedt <peter.kjellerstedt@axis.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
This commit is contained in:
parent
4dde12f17b
commit
aa13b97286
|
@ -33,6 +33,10 @@ IMAGE_GEN_DEBUGFS ?= "0"
|
|||
# rootfs bootstrap install
|
||||
ROOTFS_BOOTSTRAP_INSTALL = "${@bb.utils.contains("IMAGE_FEATURES", "package-management", "", "${ROOTFS_PKGMANAGE_BOOTSTRAP}",d)}"
|
||||
|
||||
# These packages will be removed from a read-only rootfs after all other
|
||||
# packages have been installed
|
||||
ROOTFS_RO_UNNEEDED = "update-rc.d base-passwd shadow ${VIRTUAL-RUNTIME_update-alternatives} ${ROOTFS_BOOTSTRAP_INSTALL}"
|
||||
|
||||
# packages to install from features
|
||||
FEATURE_INSTALL = "${@' '.join(oe.packagegroup.required_packages(oe.data.typed_value('IMAGE_FEATURES', d), d))}"
|
||||
FEATURE_INSTALL[vardepvalue] = "${FEATURE_INSTALL}"
|
||||
|
@ -114,7 +118,7 @@ def rootfs_variables(d):
|
|||
'IMAGE_ROOTFS_MAXSIZE','IMAGE_NAME','IMAGE_LINK_NAME','IMAGE_MANIFEST','DEPLOY_DIR_IMAGE','RM_OLD_IMAGE','IMAGE_FSTYPES','IMAGE_INSTALL_COMPLEMENTARY','IMAGE_LINGUAS',
|
||||
'MULTILIBRE_ALLOW_REP','MULTILIB_TEMP_ROOTFS','MULTILIB_VARIANTS','MULTILIBS','ALL_MULTILIB_PACKAGE_ARCHS','MULTILIB_GLOBAL_VARIANTS','BAD_RECOMMENDATIONS','NO_RECOMMENDATIONS',
|
||||
'PACKAGE_ARCHS','PACKAGE_CLASSES','TARGET_VENDOR','TARGET_ARCH','TARGET_OS','OVERRIDES','BBEXTENDVARIANT','FEED_DEPLOYDIR_BASE_URI','INTERCEPT_DIR','USE_DEVFS',
|
||||
'COMPRESSIONTYPES', 'IMAGE_GEN_DEBUGFS']
|
||||
'COMPRESSIONTYPES', 'IMAGE_GEN_DEBUGFS', 'ROOTFS_RO_UNNEEDED']
|
||||
variables.extend(rootfs_command_variables(d))
|
||||
variables.extend(variable_depends(d))
|
||||
return " ".join(variables)
|
||||
|
|
|
@ -238,28 +238,13 @@ class Rootfs(object):
|
|||
self.d.getVar('IMAGE_ROOTFS', True),
|
||||
"run-postinsts", "remove"])
|
||||
|
||||
runtime_pkgmanage = bb.utils.contains("IMAGE_FEATURES", "package-management",
|
||||
True, False, self.d)
|
||||
sysvcompat_in_distro = bb.utils.contains("DISTRO_FEATURES", [ "systemd", "sysvinit" ],
|
||||
True, False, self.d)
|
||||
image_rorfs = bb.utils.contains("IMAGE_FEATURES", "read-only-rootfs",
|
||||
True, False, self.d)
|
||||
if sysvcompat_in_distro and not image_rorfs:
|
||||
pkg_to_remove = ""
|
||||
else:
|
||||
pkg_to_remove = "update-rc.d"
|
||||
True, False, self.d)
|
||||
if image_rorfs:
|
||||
# Remove components that we don't need if it's a read-only rootfs
|
||||
unneeded_pkgs = self.d.getVar("ROOTFS_RO_UNNEEDED", True).split()
|
||||
pkgs_installed = image_list_installed_packages(self.d)
|
||||
pkgs_to_remove = list()
|
||||
for pkg in pkgs_installed:
|
||||
if pkg in ["update-rc.d",
|
||||
"base-passwd",
|
||||
"shadow",
|
||||
"update-alternatives", pkg_to_remove,
|
||||
self.d.getVar("ROOTFS_BOOTSTRAP_INSTALL", True)
|
||||
]:
|
||||
pkgs_to_remove.append(pkg)
|
||||
pkgs_to_remove = [pkg for pkg in pkgs_installed if pkg in unneeded_pkgs]
|
||||
|
||||
if len(pkgs_to_remove) > 0:
|
||||
self.pm.remove(pkgs_to_remove, False)
|
||||
|
@ -273,6 +258,8 @@ class Rootfs(object):
|
|||
post_uninstall_cmds = self.d.getVar("ROOTFS_POSTUNINSTALL_COMMAND", True)
|
||||
execute_pre_post_process(self.d, post_uninstall_cmds)
|
||||
|
||||
runtime_pkgmanage = bb.utils.contains("IMAGE_FEATURES", "package-management",
|
||||
True, False, self.d)
|
||||
if not runtime_pkgmanage:
|
||||
# Remove the package manager data files
|
||||
self.pm.remove_packaging_data()
|
||||
|
|
Loading…
Reference in New Issue