diff options
Diffstat (limited to 'meta/classes/package_rpm.bbclass')
-rw-r--r-- | meta/classes/package_rpm.bbclass | 74 |
1 files changed, 44 insertions, 30 deletions
diff --git a/meta/classes/package_rpm.bbclass b/meta/classes/package_rpm.bbclass index 29018e9cca..b4bc52e69b 100644 --- a/meta/classes/package_rpm.bbclass +++ b/meta/classes/package_rpm.bbclass | |||
@@ -248,6 +248,7 @@ process_pkg_list_rpm() { | |||
248 | # INSTALL_PACKAGES_LINGUAS_RPM - additional packages for uclibc | 248 | # INSTALL_PACKAGES_LINGUAS_RPM - additional packages for uclibc |
249 | # INSTALL_PROVIDENAME_RPM - content for provide name | 249 | # INSTALL_PROVIDENAME_RPM - content for provide name |
250 | # INSTALL_TASK_RPM - task name | 250 | # INSTALL_TASK_RPM - task name |
251 | # INSTALL_COMPLEMENTARY_RPM - 1 to enable complementary package install mode | ||
251 | 252 | ||
252 | package_install_internal_rpm () { | 253 | package_install_internal_rpm () { |
253 | 254 | ||
@@ -261,31 +262,35 @@ package_install_internal_rpm () { | |||
261 | local providename="${INSTALL_PROVIDENAME_RPM}" | 262 | local providename="${INSTALL_PROVIDENAME_RPM}" |
262 | local task="${INSTALL_TASK_RPM}" | 263 | local task="${INSTALL_TASK_RPM}" |
263 | 264 | ||
264 | # Setup base system configuration | 265 | if [ "${INSTALL_COMPLEMENTARY_RPM}" != "1" ] ; then |
265 | mkdir -p ${target_rootfs}/etc/rpm/ | 266 | # Setup base system configuration |
266 | echo "${platform}${TARGET_VENDOR}-${TARGET_OS}" > ${target_rootfs}/etc/rpm/platform | 267 | mkdir -p ${target_rootfs}/etc/rpm/ |
267 | if [ ! -z "$platform_extra" ]; then | 268 | echo "${platform}${TARGET_VENDOR}-${TARGET_OS}" > ${target_rootfs}/etc/rpm/platform |
268 | for pt in $platform_extra ; do | 269 | if [ ! -z "$platform_extra" ]; then |
269 | case $pt in | 270 | for pt in $platform_extra ; do |
270 | noarch | any | all) | 271 | case $pt in |
271 | os="`echo ${TARGET_OS} | sed "s,-.*,,"`.*" | 272 | noarch | any | all) |
272 | ;; | 273 | os="`echo ${TARGET_OS} | sed "s,-.*,,"`.*" |
273 | *) | 274 | ;; |
274 | os="${TARGET_OS}" | 275 | *) |
275 | ;; | 276 | os="${TARGET_OS}" |
276 | esac | 277 | ;; |
277 | echo "$pt-.*-$os" >> ${target_rootfs}/etc/rpm/platform | 278 | esac |
278 | done | 279 | echo "$pt-.*-$os" >> ${target_rootfs}/etc/rpm/platform |
279 | fi | 280 | done |
281 | fi | ||
280 | 282 | ||
281 | # Tell RPM that the "/" directory exist and is available | 283 | # Tell RPM that the "/" directory exist and is available |
282 | mkdir -p ${target_rootfs}/etc/rpm/sysinfo | 284 | mkdir -p ${target_rootfs}/etc/rpm/sysinfo |
283 | echo "/" >${target_rootfs}/etc/rpm/sysinfo/Dirnames | 285 | echo "/" >${target_rootfs}/etc/rpm/sysinfo/Dirnames |
284 | if [ ! -z "$providename" ]; then | 286 | if [ ! -z "$providename" ]; then |
285 | cat /dev/null > ${target_rootfs}/etc/rpm/sysinfo/Providename | 287 | cat /dev/null > ${target_rootfs}/etc/rpm/sysinfo/Providename |
286 | for provide in $providename ; do | 288 | for provide in $providename ; do |
287 | echo $provide >> ${target_rootfs}/etc/rpm/sysinfo/Providename | 289 | echo $provide >> ${target_rootfs}/etc/rpm/sysinfo/Providename |
288 | done | 290 | done |
291 | fi | ||
292 | else | ||
293 | mv ${target_rootfs}/install/total_solution.manifest ${target_rootfs}/install/original_solution.manifest | ||
289 | fi | 294 | fi |
290 | 295 | ||
291 | # Setup manifest of packages to install... | 296 | # Setup manifest of packages to install... |
@@ -480,13 +485,22 @@ mutex_set_max 163840 | |||
480 | # ================ Replication | 485 | # ================ Replication |
481 | EOF | 486 | EOF |
482 | 487 | ||
483 | # RPM is special. It can't handle dependencies and preinstall scripts correctly. Its | 488 | if [ "${INSTALL_COMPLEMENTARY_RPM}" = "1" ] ; then |
484 | # probably a feature. The only way to convince rpm to actually run the preinstall scripts | 489 | # Only install packages not already installed (dependency calculation will |
485 | # for base-passwd and shadow first before installing packages that depend on these packages | 490 | # almost certainly have added some that have been) |
486 | # is to do two image installs, installing one set of packages, then the other. | 491 | sort ${target_rootfs}/install/original_solution.manifest > ${target_rootfs}/install/original_solution_sorted.manifest |
487 | if [ "${INC_RPM_IMAGE_GEN}" = "1" -a -f "$pre_btmanifest" ]; then | 492 | sort ${target_rootfs}/install/total_solution.manifest > ${target_rootfs}/install/total_solution_sorted.manifest |
488 | echo "Skipping pre install due to exisitng image" | 493 | comm -2 -3 ${target_rootfs}/install/total_solution_sorted.manifest \ |
494 | ${target_rootfs}/install/original_solution_sorted.manifest | awk '{print $1}' > \ | ||
495 | ${target_rootfs}/install/diff.manifest | ||
496 | mv ${target_rootfs}/install/diff.manifest ${target_rootfs}/install/total_solution.manifest | ||
497 | elif [ "${INC_RPM_IMAGE_GEN}" = "1" -a -f "$pre_btmanifest" ]; then | ||
498 | echo "Skipping pre install due to existing image" | ||
489 | else | 499 | else |
500 | # RPM is special. It can't handle dependencies and preinstall scripts correctly. Its | ||
501 | # probably a feature. The only way to convince rpm to actually run the preinstall scripts | ||
502 | # for base-passwd and shadow first before installing packages that depend on these packages | ||
503 | # is to do two image installs, installing one set of packages, then the other. | ||
490 | rm -f ${target_rootfs}/install/initial_install.manifest | 504 | rm -f ${target_rootfs}/install/initial_install.manifest |
491 | echo "Installing base dependencies first (base-passwd, base-files and shadow) since rpm is special" | 505 | echo "Installing base dependencies first (base-passwd, base-files and shadow) since rpm is special" |
492 | grep /base-passwd-[0-9] ${target_rootfs}/install/total_solution.manifest >> ${target_rootfs}/install/initial_install.manifest || true | 506 | grep /base-passwd-[0-9] ${target_rootfs}/install/total_solution.manifest >> ${target_rootfs}/install/initial_install.manifest || true |