diff options
| -rw-r--r-- | meta/classes/package_rpm.bbclass | 531 | ||||
| -rw-r--r-- | meta/classes/populate_sdk_rpm.bbclass | 51 | ||||
| -rw-r--r-- | meta/classes/rootfs_rpm.bbclass | 34 |
3 files changed, 121 insertions, 495 deletions
diff --git a/meta/classes/package_rpm.bbclass b/meta/classes/package_rpm.bbclass index 293c52c629..4b81b68bf7 100644 --- a/meta/classes/package_rpm.bbclass +++ b/meta/classes/package_rpm.bbclass | |||
| @@ -16,88 +16,27 @@ python package_rpm_install () { | |||
| 16 | bb.fatal("package_rpm_install not implemented!") | 16 | bb.fatal("package_rpm_install not implemented!") |
| 17 | } | 17 | } |
| 18 | 18 | ||
| 19 | RPMCONF_TARGET_BASE = "${DEPLOY_DIR_RPM}/solvedb" | ||
| 20 | RPMCONF_HOST_BASE = "${DEPLOY_DIR_RPM}/solvedb-sdk" | ||
| 21 | # | 19 | # |
| 22 | # Update the Packages depsolver db in ${DEPLOY_DIR_RPM} | 20 | # Update the packages indexes ${DEPLOY_DIR_RPM} |
| 23 | # | 21 | # |
| 24 | package_update_index_rpm () { | 22 | package_update_index_rpm () { |
| 25 | if [ ! -z "${DEPLOY_KEEP_PACKAGES}" -o ! -e "${DEPLOY_DIR_RPM}" ]; then | 23 | if [ ! -z "${DEPLOY_KEEP_PACKAGES}" -o ! -e "${DEPLOY_DIR_RPM}" ]; then |
| 26 | return | 24 | return |
| 27 | fi | 25 | fi |
| 28 | 26 | ||
| 29 | # Update target packages | ||
| 30 | base_archs="`echo ${PACKAGE_ARCHS} | sed 's/-/_/g'`" | 27 | base_archs="`echo ${PACKAGE_ARCHS} | sed 's/-/_/g'`" |
| 31 | ml_archs="`echo ${MULTILIB_PACKAGE_ARCHS} | sed 's/-/_/g'`" | 28 | ml_archs="`echo ${MULTILIB_PACKAGE_ARCHS} | sed 's/-/_/g'`" |
| 32 | package_update_index_rpm_common "${RPMCONF_TARGET_BASE}" base_archs ml_archs | 29 | sdk_archs="`echo ${SDK_PACKAGE_ARCHS} | sed 's/-/_/g'`" |
| 33 | 30 | ||
| 34 | # Update SDK packages | 31 | archs=`for arch in $base_archs $ml_archs $sdk_archs ; do |
| 35 | base_archs="`echo ${SDK_PACKAGE_ARCHS} | sed 's/-/_/g'`" | 32 | echo $arch |
| 36 | package_update_index_rpm_common "${RPMCONF_HOST_BASE}" base_archs | 33 | done | sort | uniq` |
| 37 | } | ||
| 38 | |||
| 39 | package_update_index_rpm_common () { | ||
| 40 | rpmconf_base="$1" | ||
| 41 | shift | ||
| 42 | |||
| 43 | createdirs="" | ||
| 44 | for archvar in "$@"; do | ||
| 45 | eval archs=\${${archvar}} | ||
| 46 | packagedirs="" | ||
| 47 | for arch in $archs; do | ||
| 48 | packagedirs="${DEPLOY_DIR_RPM}/$arch $packagedirs" | ||
| 49 | rm -rf ${DEPLOY_DIR_RPM}/$arch/solvedb.done | ||
| 50 | done | ||
| 51 | |||
| 52 | cat /dev/null > ${rpmconf_base}-${archvar}.conf | ||
| 53 | for pkgdir in $packagedirs; do | ||
| 54 | if [ -e $pkgdir/ ]; then | ||
| 55 | echo "Generating solve db for $pkgdir..." | ||
| 56 | echo $pkgdir/solvedb >> ${rpmconf_base}-${archvar}.conf | ||
| 57 | createdirs="$createdirs $pkgdir" | ||
| 58 | fi | ||
| 59 | done | ||
| 60 | done | ||
| 61 | rpm-createsolvedb.py "${RPM}" $createdirs | ||
| 62 | } | ||
| 63 | |||
| 64 | # | ||
| 65 | # Generate an rpm configuration suitable for use against the | ||
| 66 | # generated depsolver db's... | ||
| 67 | # | ||
| 68 | package_generate_rpm_conf () { | ||
| 69 | # Update target packages | ||
| 70 | package_generate_rpm_conf_common "${RPMCONF_TARGET_BASE}" base_archs ml_archs | ||
| 71 | |||
| 72 | # Update SDK packages | ||
| 73 | package_generate_rpm_conf_common "${RPMCONF_HOST_BASE}" base_archs | ||
| 74 | } | ||
| 75 | |||
| 76 | package_generate_rpm_conf_common() { | ||
| 77 | rpmconf_base="$1" | ||
| 78 | shift | ||
| 79 | 34 | ||
| 80 | printf "_solve_dbpath " > ${rpmconf_base}.macro | 35 | for arch in $archs; do |
| 81 | o_colon="false" | 36 | if [ -d ${DEPLOY_DIR_RPM}/$arch ] ; then |
| 82 | 37 | createrepo --update -q ${DEPLOY_DIR_RPM}/$arch | |
| 83 | for archvar in "$@"; do | 38 | fi |
| 84 | printf "_solve_dbpath " > ${rpmconf_base}-${archvar}.macro | ||
| 85 | colon="false" | ||
| 86 | for each in `cat ${rpmconf_base}-${archvar}.conf` ; do | ||
| 87 | if [ "$o_colon" = "true" ]; then | ||
| 88 | printf ":" >> ${rpmconf_base}.macro | ||
| 89 | fi | ||
| 90 | if [ "$colon" = "true" ]; then | ||
| 91 | printf ":" >> ${rpmconf_base}-${archvar}.macro | ||
| 92 | fi | ||
| 93 | printf "%s" $each >> ${rpmconf_base}.macro | ||
| 94 | o_colon="true" | ||
| 95 | printf "%s" $each >> ${rpmconf_base}-${archvar}.macro | ||
| 96 | colon="true" | ||
| 97 | done | ||
| 98 | printf "\n" >> ${rpmconf_base}-${archvar}.macro | ||
| 99 | done | 39 | done |
| 100 | printf "\n" >> ${rpmconf_base}.macro | ||
| 101 | } | 40 | } |
| 102 | 41 | ||
| 103 | rpm_log_check() { | 42 | rpm_log_check() { |
| @@ -122,150 +61,23 @@ rpm_log_check() { | |||
| 122 | 61 | ||
| 123 | 62 | ||
| 124 | # | 63 | # |
| 125 | # Resolve package names to filepaths | ||
| 126 | # resolve_pacakge <pkgname> <solvdb conffile> | ||
| 127 | # | ||
| 128 | resolve_package_rpm () { | ||
| 129 | local conffile="$1" | ||
| 130 | shift | ||
| 131 | local pkg_name="" | ||
| 132 | for solve in `cat ${conffile}`; do | ||
| 133 | pkg_name=$(${RPM} -D "_dbpath $solve" -D "__dbi_txn create nofsync" -q --qf "%{packageorigin}\n" "$@" | grep -v "is not installed" || true) | ||
| 134 | if [ -n "$pkg_name" -a "$pkg_name" != "(none)" ]; then | ||
| 135 | echo $pkg_name | ||
| 136 | break; | ||
| 137 | fi | ||
| 138 | done | ||
| 139 | } | ||
| 140 | |||
| 141 | # rpm common command and options | ||
| 142 | rpm_common_comand () { | ||
| 143 | |||
| 144 | local target_rootfs="${INSTALL_ROOTFS_RPM}" | ||
| 145 | |||
| 146 | ${RPM} --root ${target_rootfs} \ | ||
| 147 | --predefine "_rpmds_sysinfo_path ${target_rootfs}/etc/rpm/sysinfo" \ | ||
| 148 | --predefine "_rpmrc_platform_path ${target_rootfs}/etc/rpm/platform" \ | ||
| 149 | -D "_var ${localstatedir}" \ | ||
| 150 | -D "_dbpath ${rpmlibdir}" \ | ||
| 151 | -D "_tmppath /install/tmp" \ | ||
| 152 | --noparentdirs --nolinktos \ | ||
| 153 | -D "__dbi_txn create nofsync private" \ | ||
| 154 | -D "_cross_scriptlet_wrapper ${WORKDIR}/scriptlet_wrapper" $@ | ||
| 155 | } | ||
| 156 | |||
| 157 | # install or remove the pkg | ||
| 158 | rpm_update_pkg () { | ||
| 159 | |||
| 160 | manifest=$1 | ||
| 161 | # The manifest filename, e.g. total_solution.manifest | ||
| 162 | m_name=${manifest##/*/} | ||
| 163 | local target_rootfs="${INSTALL_ROOTFS_RPM}" | ||
| 164 | installdir=$target_rootfs/install | ||
| 165 | pre_btmanifest=$installdir/pre_bt.manifest | ||
| 166 | cur_btmanifest=$installdir/cur_bt.manifest | ||
| 167 | |||
| 168 | # Install/remove the different pkgs when total_solution.manifest is | ||
| 169 | # comming and incremental image generation is enabled. | ||
| 170 | if [ "${INC_RPM_IMAGE_GEN}" = "1" -a -d "${target_rootfs}${rpmlibdir}" \ | ||
| 171 | -a "$m_name" = "total_solution.manifest" \ | ||
| 172 | -a "${INSTALL_COMPLEMENTARY_RPM}" != "1" ]; then | ||
| 173 | # Get the previous installed list | ||
| 174 | rpm --root $target_rootfs --dbpath ${rpmlibdir} \ | ||
| 175 | -qa --qf '%{PACKAGEORIGIN} %{BUILDTIME}\n' | sort -u -o $pre_btmanifest | ||
| 176 | # Get the current installed list (based on install/var/lib/rpm) | ||
| 177 | rpm --root $installdir -D "_dbpath $installdir" \ | ||
| 178 | -qa --qf '%{PACKAGEORIGIN} %{BUILDTIME}\n' | sort -u -o $cur_btmanifest | ||
| 179 | comm -1 -3 $cur_btmanifest $pre_btmanifest | sed 's#.*/\(.*\)\.rpm .*#\1#' > \ | ||
| 180 | $installdir/remove.manifest | ||
| 181 | comm -2 -3 $cur_btmanifest $pre_btmanifest | awk '{print $1}' > \ | ||
| 182 | $installdir/incremental.manifest | ||
| 183 | |||
| 184 | # Attempt to remove unwanted pkgs, the scripts(pre, post, etc.) has not | ||
| 185 | # been run by now, so don't have to run them(preun, postun, etc.) when | ||
| 186 | # erase the pkg | ||
| 187 | if [ -s $installdir/remove.manifest ]; then | ||
| 188 | rpm_common_comand --noscripts --nodeps \ | ||
| 189 | -e `cat $installdir/remove.manifest` | ||
| 190 | fi | ||
| 191 | |||
| 192 | # Attempt to install the incremental pkgs | ||
| 193 | if [ -s $installdir/incremental.manifest ]; then | ||
| 194 | rpm_common_comand --replacefiles --replacepkgs \ | ||
| 195 | -Uvh $installdir/incremental.manifest | ||
| 196 | fi | ||
| 197 | else | ||
| 198 | # Attempt to install | ||
| 199 | rpm_common_comand --replacepkgs -Uhv $manifest | ||
| 200 | fi | ||
| 201 | } | ||
| 202 | |||
| 203 | process_pkg_list_rpm() { | ||
| 204 | local insttype=$1 | ||
| 205 | shift | ||
| 206 | # $@ is special POSIX linear array can not be assigned | ||
| 207 | # to a local variable directly in dash since its separated by | ||
| 208 | # space and dash expands it before assignment | ||
| 209 | # and local x=1 2 3 and not x="1 2 3" | ||
| 210 | local pkgs | ||
| 211 | pkgs="$@" | ||
| 212 | local confbase=${INSTALL_CONFBASE_RPM} | ||
| 213 | |||
| 214 | printf "" > ${target_rootfs}/install/base_archs.pkglist | ||
| 215 | printf "" > ${target_rootfs}/install/ml_archs.pkglist | ||
| 216 | |||
| 217 | for pkg in $pkgs; do | ||
| 218 | echo "Processing $pkg..." | ||
| 219 | |||
| 220 | archvar=base_archs | ||
| 221 | ml_pkg=$pkg | ||
| 222 | for i in ${MULTILIB_PREFIX_LIST} ; do | ||
| 223 | subst=${pkg#${i}-} | ||
| 224 | if [ $subst != $pkg ] ; then | ||
| 225 | ml_pkg=$subst | ||
| 226 | archvar=ml_archs | ||
| 227 | break | ||
| 228 | fi | ||
| 229 | done | ||
| 230 | |||
| 231 | echo $ml_pkg >> ${target_rootfs}/install/$archvar.pkglist | ||
| 232 | done | ||
| 233 | |||
| 234 | local manifestpfx="install" | ||
| 235 | local extraopt="" | ||
| 236 | if [ "$insttype" = "attemptonly" ] ; then | ||
| 237 | manifestpfx="install_attemptonly" | ||
| 238 | extraopt="-i" | ||
| 239 | fi | ||
| 240 | |||
| 241 | rpmresolve $extraopt ${confbase}-base_archs.conf ${target_rootfs}/install/base_archs.pkglist -o ${target_rootfs}/install/${manifestpfx}.manifest | ||
| 242 | if [ -s ${target_rootfs}/install/ml_archs.pkglist ] ; then | ||
| 243 | rpmresolve $extraopt ${confbase}-ml_archs.conf ${target_rootfs}/install/ml_archs.pkglist -o ${target_rootfs}/install/${manifestpfx}_multilib.manifest | ||
| 244 | fi | ||
| 245 | } | ||
| 246 | |||
| 247 | # | ||
| 248 | # Install a bunch of packages using rpm. | 64 | # Install a bunch of packages using rpm. |
| 249 | # There are 3 solutions in an image's FRESH generation: | 65 | # There are two solutions in an image's FRESH generation: |
| 250 | # 1) initial_solution | 66 | # 1) main package solution |
| 251 | # 2) total_solution | 67 | # 2) complementary solution |
| 252 | # 3) COMPLEMENTARY solution | ||
| 253 | # | 68 | # |
| 254 | # It is different when incremental image generation is enabled in the | 69 | # It is different when incremental image generation is enabled: |
| 255 | # SECOND generation: | 70 | # 1) The incremental image generation takes action during the main package |
| 256 | # 1) The initial_solution is skipped. | 71 | # installation, the previous installed complementary packages would |
| 257 | # 2) The incremental image generation takes action during the total_solution | 72 | # usually be removed here, and the new complementary ones would be |
| 258 | # installation, the previous installed COMPLEMENTARY pkgs usually would be | 73 | # installed in the next step. |
| 259 | # removed here, the new COMPLEMENTARY ones would be installed in the next | 74 | # 2) The complementary would always be installed since it is |
| 260 | # step. | 75 | # generated based on the first step's image. |
| 261 | # 3) The COMPLEMENTARY would always be installed since it is | ||
| 262 | # generated based on the second step's image. | ||
| 263 | # | 76 | # |
| 264 | # the following shell variables needs to be set before calling this func: | 77 | # the following shell variables needs to be set before calling this func: |
| 265 | # INSTALL_ROOTFS_RPM - install root dir | 78 | # INSTALL_ROOTFS_RPM - install root dir |
| 266 | # INSTALL_PLATFORM_RPM - main platform | 79 | # INSTALL_PLATFORM_RPM - main platform |
| 267 | # INSTALL_PLATFORM_EXTRA_RPM - extra platform | 80 | # INSTALL_PLATFORM_EXTRA_RPM - extra platform |
| 268 | # INSTALL_CONFBASE_RPM - configuration file base name | ||
| 269 | # INSTALL_PACKAGES_RPM - packages to be installed | 81 | # INSTALL_PACKAGES_RPM - packages to be installed |
| 270 | # INSTALL_PACKAGES_ATTEMPTONLY_RPM - packages attemped to be installed only | 82 | # INSTALL_PACKAGES_ATTEMPTONLY_RPM - packages attemped to be installed only |
| 271 | # INSTALL_PACKAGES_LINGUAS_RPM - additional packages for uclibc | 83 | # INSTALL_PACKAGES_LINGUAS_RPM - additional packages for uclibc |
| @@ -275,15 +87,20 @@ process_pkg_list_rpm() { | |||
| 275 | 87 | ||
| 276 | package_install_internal_rpm () { | 88 | package_install_internal_rpm () { |
| 277 | 89 | ||
| 278 | local target_rootfs="${INSTALL_ROOTFS_RPM}" | 90 | local target_rootfs="$INSTALL_ROOTFS_RPM" |
| 279 | local platform="`echo ${INSTALL_PLATFORM_RPM} | sed 's#-#_#g'`" | 91 | local platform="`echo $INSTALL_PLATFORM_RPM | sed 's#-#_#g'`" |
| 280 | local platform_extra="`echo ${INSTALL_PLATFORM_EXTRA_RPM} | sed 's#-#_#g'`" | 92 | local platform_extra="`echo $INSTALL_PLATFORM_EXTRA_RPM | sed 's#-#_#g'`" |
| 281 | local confbase="${INSTALL_CONFBASE_RPM}" | 93 | local package_to_install="$INSTALL_PACKAGES_RPM" |
| 282 | local package_to_install="${INSTALL_PACKAGES_RPM}" | 94 | local package_attemptonly="$INSTALL_PACKAGES_ATTEMPTONLY_RPM" |
| 283 | local package_attemptonly="${INSTALL_PACKAGES_ATTEMPTONLY_RPM}" | 95 | local package_linguas="$INSTALL_PACKAGES_LINGUAS_RPM" |
| 284 | local package_linguas="${INSTALL_PACKAGES_LINGUAS_RPM}" | 96 | local providename="$INSTALL_PROVIDENAME_RPM" |
| 285 | local providename="${INSTALL_PROVIDENAME_RPM}" | 97 | local task="$INSTALL_TASK_RPM" |
| 286 | local task="${INSTALL_TASK_RPM}" | 98 | |
| 99 | # Configure internal RPM environment when using Smart | ||
| 100 | export RPM_ETCRPM=${target_rootfs}/etc/rpm | ||
| 101 | |||
| 102 | # Setup temporary directory -- install... | ||
| 103 | mkdir -p ${target_rootfs}/install | ||
| 287 | 104 | ||
| 288 | if [ "${INSTALL_COMPLEMENTARY_RPM}" != "1" ] ; then | 105 | if [ "${INSTALL_COMPLEMENTARY_RPM}" != "1" ] ; then |
| 289 | # Setup base system configuration | 106 | # Setup base system configuration |
| @@ -306,166 +123,74 @@ package_install_internal_rpm () { | |||
| 306 | # Tell RPM that the "/" directory exist and is available | 123 | # Tell RPM that the "/" directory exist and is available |
| 307 | mkdir -p ${target_rootfs}/etc/rpm/sysinfo | 124 | mkdir -p ${target_rootfs}/etc/rpm/sysinfo |
| 308 | echo "/" >${target_rootfs}/etc/rpm/sysinfo/Dirnames | 125 | echo "/" >${target_rootfs}/etc/rpm/sysinfo/Dirnames |
| 126 | |||
| 309 | if [ ! -z "$providename" ]; then | 127 | if [ ! -z "$providename" ]; then |
| 310 | cat /dev/null > ${target_rootfs}/etc/rpm/sysinfo/Providename | 128 | cat /dev/null > ${target_rootfs}/etc/rpm/sysinfo/Providename |
| 311 | for provide in $providename ; do | 129 | for provide in $providename ; do |
| 312 | echo $provide >> ${target_rootfs}/etc/rpm/sysinfo/Providename | 130 | echo $provide >> ${target_rootfs}/etc/rpm/sysinfo/Providename |
| 313 | done | 131 | done |
| 314 | fi | 132 | fi |
| 315 | else | ||
| 316 | # We may run through the complementary installs multiple times. For each time | ||
| 317 | # we should add the previous solution manifest to the full "original" set to | ||
| 318 | # avoid duplicate install steps. | ||
| 319 | echo "Update original solution..." | ||
| 320 | for m in ${target_rootfs}/install/initial_solution.manifest \ | ||
| 321 | ${target_rootfs}/install/total_solution.manifest; do | ||
| 322 | if [ -s $m ]; then | ||
| 323 | cat $m >> ${target_rootfs}/install/original_solution.manifest | ||
| 324 | rm -f $m | ||
| 325 | fi | ||
| 326 | done | ||
| 327 | sort -u ${target_rootfs}/install/original_solution.manifest -o ${target_rootfs}/install/original_solution.manifest.new | ||
| 328 | mv ${target_rootfs}/install/original_solution.manifest.new ${target_rootfs}/install/original_solution.manifest | ||
| 329 | fi | ||
| 330 | 133 | ||
| 331 | # Setup manifest of packages to install... | 134 | # Configure RPM... we enforce these settings! |
| 332 | mkdir -p ${target_rootfs}/install | 135 | mkdir -p ${target_rootfs}${rpmlibdir} |
| 333 | rm -f ${target_rootfs}/install/install.manifest | 136 | mkdir -p ${target_rootfs}${rpmlibdir}/log |
| 334 | rm -f ${target_rootfs}/install/install_multilib.manifest | 137 | # After change the __db.* cache size, log file will not be generated automatically, |
| 335 | rm -f ${target_rootfs}/install/install_attemptonly.manifest | 138 | # that will raise some warnings, so touch a bare log for rpm write into it. |
| 139 | touch ${target_rootfs}${rpmlibdir}/log/log.0000000001 | ||
| 140 | if [ ! -e ${target_rootfs}${rpmlibdir}/DB_CONFIG ]; then | ||
| 141 | cat > ${target_rootfs}${rpmlibdir}/DB_CONFIG << EOF | ||
| 142 | # ================ Environment | ||
| 143 | set_data_dir . | ||
| 144 | set_create_dir . | ||
| 145 | set_lg_dir ./log | ||
| 146 | set_tmp_dir ./tmp | ||
| 147 | set_flags db_log_autoremove on | ||
| 336 | 148 | ||
| 337 | # Uclibc builds don't provide this stuff... | 149 | # -- thread_count must be >= 8 |
| 338 | if [ x${TARGET_OS} = "xlinux" ] || [ x${TARGET_OS} = "xlinux-gnueabi" ] ; then | 150 | set_thread_count 64 |
| 339 | if [ ! -z "${package_linguas}" ]; then | ||
| 340 | process_pkg_list_rpm linguas ${package_linguas} | ||
| 341 | fi | ||
| 342 | fi | ||
| 343 | 151 | ||
| 344 | if [ ! -z "${package_to_install}" ]; then | 152 | # ================ Logging |
| 345 | process_pkg_list_rpm default ${package_to_install} | ||
| 346 | fi | ||
| 347 | 153 | ||
| 348 | # Normal package installation | 154 | # ================ Memory Pool |
| 349 | 155 | set_cachesize 0 1048576 0 | |
| 350 | # Generate an install solution by doing a --justdb install, then recreate it with | 156 | set_mp_mmapsize 268435456 |
| 351 | # an actual package install! | ||
| 352 | if [ -s ${target_rootfs}/install/install.manifest ]; then | ||
| 353 | echo "# Install manifest padding" >> ${target_rootfs}/install/install.manifest | ||
| 354 | ${RPM} --predefine "_rpmds_sysinfo_path ${target_rootfs}/etc/rpm/sysinfo" \ | ||
| 355 | --predefine "_rpmrc_platform_path ${target_rootfs}/etc/rpm/platform" \ | ||
| 356 | --root "${target_rootfs}/install" \ | ||
| 357 | -D "_dbpath ${target_rootfs}/install" -D "`cat ${confbase}-base_archs.macro`" \ | ||
| 358 | -D "__dbi_txn create nofsync" \ | ||
| 359 | -U --justdb --replacepkgs --noscripts --notriggers --noparentdirs --nolinktos --ignoresize \ | ||
| 360 | ${target_rootfs}/install/install.manifest | ||
| 361 | fi | ||
| 362 | 157 | ||
| 363 | if [ ! -z "${package_attemptonly}" ]; then | 158 | # ================ Locking |
| 364 | echo "Adding attempt only packages..." | 159 | set_lk_max_locks 16384 |
| 365 | process_pkg_list_rpm attemptonly ${package_attemptonly} | 160 | set_lk_max_lockers 16384 |
| 366 | cat ${target_rootfs}/install/install_attemptonly.manifest | while read pkg_name | 161 | set_lk_max_objects 16384 |
| 367 | do | 162 | mutex_set_max 163840 |
| 368 | echo "Attempting $pkg_name..." >> "`dirname ${BB_LOGFILE}`/log.do_${task}_attemptonly.${PID}" | ||
| 369 | ${RPM} --predefine "_rpmds_sysinfo_path ${target_rootfs}/etc/rpm/sysinfo" \ | ||
| 370 | --predefine "_rpmrc_platform_path ${target_rootfs}/etc/rpm/platform" \ | ||
| 371 | --root "${target_rootfs}/install" \ | ||
| 372 | -D "_dbpath ${target_rootfs}/install" -D "`cat ${confbase}.macro`" \ | ||
| 373 | -D "__dbi_txn create nofsync private" \ | ||
| 374 | -U --justdb --replacepkgs --noscripts --notriggers --noparentdirs --nolinktos --ignoresize \ | ||
| 375 | $pkg_name >> "`dirname ${BB_LOGFILE}`/log.do_${task}_attemptonly.${PID}" 2>&1 || true | ||
| 376 | done | ||
| 377 | fi | ||
| 378 | 163 | ||
| 379 | #### Note: 'Recommends' is an arbitrary tag that means _SUGGESTS_ in OE-core.. | 164 | # ================ Replication |
| 380 | # Add any recommended packages to the image | 165 | EOF |
| 381 | # RPM does not solve for recommended packages because they are optional... | 166 | fi |
| 382 | # So we query them and tree them like the ATTEMPTONLY packages above... | ||
| 383 | # Change the loop to "1" to run this code... | ||
| 384 | loop=0 | ||
| 385 | if [ $loop -eq 1 ]; then | ||
| 386 | echo "Processing recommended packages..." | ||
| 387 | cat /dev/null > ${target_rootfs}/install/recommend.list | ||
| 388 | while [ $loop -eq 1 ]; do | ||
| 389 | # Dump the full set of recommends... | ||
| 390 | ${RPM} --predefine "_rpmds_sysinfo_path ${target_rootfs}/etc/rpm/sysinfo" \ | ||
| 391 | --predefine "_rpmrc_platform_path ${target_rootfs}/etc/rpm/platform" \ | ||
| 392 | --root "${target_rootfs}/install" \ | ||
| 393 | -D "_dbpath ${target_rootfs}/install" -D "`cat ${confbase}.macro`" \ | ||
| 394 | -D "__dbi_txn create nofsync private" \ | ||
| 395 | -qa --qf "[%{RECOMMENDS}\n]" | sort -u > ${target_rootfs}/install/recommend | ||
| 396 | # Did we add more to the list? | ||
| 397 | grep -v -x -F -f ${target_rootfs}/install/recommend.list ${target_rootfs}/install/recommend > ${target_rootfs}/install/recommend.new || true | ||
| 398 | # We don't want to loop unless there is a change to the list! | ||
| 399 | loop=0 | ||
| 400 | cat ${target_rootfs}/install/recommend.new | \ | ||
| 401 | while read pkg ; do | ||
| 402 | # Ohh there was a new one, we'll need to loop again... | ||
| 403 | loop=1 | ||
| 404 | echo "Processing $pkg..." | ||
| 405 | found=0 | ||
| 406 | for archvar in base_archs ml_archs ; do | ||
| 407 | pkg_name=$(resolve_package_rpm ${confbase}-${archvar}.conf ${pkg}) | ||
| 408 | if [ -n "$pkg_name" ]; then | ||
| 409 | found=1 | ||
| 410 | break | ||
| 411 | fi | ||
| 412 | done | ||
| 413 | 167 | ||
| 414 | if [ $found -eq 0 ]; then | 168 | # Create database so that smart doesn't complain (lazy init) |
| 415 | echo "Note: Unable to find package $pkg -- suggests" | 169 | rpm --root $target_rootfs --dbpath /var/lib/rpm -qa > /dev/null |
| 416 | echo "Unable to find package $pkg." >> "`dirname ${BB_LOGFILE}`/log.do_${task}_recommend.${PID}" | 170 | |
| 417 | continue | 171 | # Configure smart |
| 172 | rm -rf ${target_rootfs}/var/lib/smart | ||
| 173 | smart --data-dir=${target_rootfs}/var/lib/smart config --set rpm-root=${target_rootfs} | ||
| 174 | smart --data-dir=${target_rootfs}/var/lib/smart config --set rpm-dbpath=${rpmlibdir} | ||
| 175 | smart --data-dir=${target_rootfs}/var/lib/smart config --set rpm-nolinktos=1 | ||
| 176 | smart --data-dir=${target_rootfs}/var/lib/smart config --set rpm-noparentdirs=1 | ||
| 177 | smart --data-dir=${target_rootfs}/var/lib/smart config --set rpm-extra-macros._var=${localstatedir} | ||
| 178 | smart --data-dir=${target_rootfs}/var/lib/smart config --set rpm-extra-macros._tmppath=/install/tmp | ||
| 179 | smart --data-dir=${target_rootfs}/var/lib/smart channel --add rpmsys type=rpm-sys -y | ||
| 180 | |||
| 181 | for arch in $platform_extra ; do | ||
| 182 | if [ -d ${DEPLOY_DIR_RPM}/$arch -a ! -e ${target_rootfs}/install/channel.$arch.stamp ] ; then | ||
| 183 | smart --data-dir=${target_rootfs}/var/lib/smart channel --add $arch type=rpm-md type=rpm-md baseurl=${DEPLOY_DIR_RPM}/$arch -y | ||
| 184 | touch ${target_rootfs}/install/channel.$arch.stamp | ||
| 418 | fi | 185 | fi |
| 419 | echo "Attempting $pkg_name..." >> "`dirname ${BB_LOGFILE}`/log.do_{task}_recommend.${PID}" | ||
| 420 | ${RPM} --predefine "_rpmds_sysinfo_path ${target_rootfs}/etc/rpm/sysinfo" \ | ||
| 421 | --predefine "_rpmrc_platform_path ${target_rootfs}/etc/rpm/platform" \ | ||
| 422 | --root "${target_rootfs}/install" \ | ||
| 423 | -D "_dbpath ${target_rootfs}/install" -D "`cat ${confbase}.macro`" \ | ||
| 424 | -D "__dbi_txn create nofsync private" \ | ||
| 425 | -U --justdb --replacepkgs --noscripts --notriggers --noparentdirs --nolinktos --ignoresize \ | ||
| 426 | $pkg_name >> "`dirname ${BB_LOGFILE}`/log.do_${task}_recommend.${PID}" 2>&1 || true | ||
| 427 | done | 186 | done |
| 428 | cat ${target_rootfs}/install/recommend.list ${target_rootfs}/install/recommend.new | sort -u > ${target_rootfs}/install/recommend.new.list | ||
| 429 | mv -f ${target_rootfs}/install/recommend.new.list ${target_rootfs}/install/recommend.list | ||
| 430 | rm ${target_rootfs}/install/recommend ${target_rootfs}/install/recommend.new | ||
| 431 | done | ||
| 432 | fi | 187 | fi |
| 433 | 188 | ||
| 434 | # Now that we have a solution, pull out a list of what to install... | 189 | # Uclibc builds don't provide this stuff... |
| 435 | echo "Manifest: ${target_rootfs}/install/install_solution.manifest" | 190 | if [ x${TARGET_OS} != "xlinux" ] && [ x${TARGET_OS} != "xlinux-gnueabi" ] ; then |
| 436 | ${RPM} -D "_dbpath ${target_rootfs}/install" -qa --qf "%{packageorigin}\n" \ | 191 | package_linguas="" |
| 437 | --root "${target_rootfs}/install" \ | ||
| 438 | -D "__dbi_txn create nofsync private" \ | ||
| 439 | > ${target_rootfs}/install/install_solution.manifest | ||
| 440 | |||
| 441 | touch ${target_rootfs}/install/install_multilib_solution.manifest | ||
| 442 | |||
| 443 | if [ -s "${target_rootfs}/install/install_multilib.manifest" ]; then | ||
| 444 | # multilib package installation | ||
| 445 | echo "# Install multilib manifest padding" >> ${target_rootfs}/install/install_multilib.manifest | ||
| 446 | |||
| 447 | # Generate an install solution by doing a --justdb install, then recreate it with | ||
| 448 | # an actual package install! | ||
| 449 | ${RPM} --predefine "_rpmds_sysinfo_path ${target_rootfs}/etc/rpm/sysinfo" \ | ||
| 450 | --predefine "_rpmrc_platform_path ${target_rootfs}/etc/rpm/platform" \ | ||
| 451 | --root "${target_rootfs}/install" \ | ||
| 452 | -D "_dbpath ${target_rootfs}/install" -D "`cat ${confbase}-ml_archs.macro`" \ | ||
| 453 | -D "__dbi_txn create nofsync" \ | ||
| 454 | -U --justdb --replacepkgs --noscripts --notriggers --noparentdirs --nolinktos --ignoresize \ | ||
| 455 | ${target_rootfs}/install/install_multilib.manifest | ||
| 456 | |||
| 457 | # Now that we have a solution, pull out a list of what to install... | ||
| 458 | echo "Manifest: ${target_rootfs}/install/install_multilib.manifest" | ||
| 459 | ${RPM} -D "_dbpath ${target_rootfs}/install" -qa --qf "%{packageorigin}\n" \ | ||
| 460 | --root "${target_rootfs}/install" \ | ||
| 461 | -D "__dbi_txn create nofsync private" \ | ||
| 462 | > ${target_rootfs}/install/install_multilib_solution.manifest | ||
| 463 | |||
| 464 | fi | 192 | fi |
| 465 | 193 | ||
| 466 | cat ${target_rootfs}/install/install_solution.manifest \ | ||
| 467 | ${target_rootfs}/install/install_multilib_solution.manifest | sort -u > ${target_rootfs}/install/total_solution.manifest | ||
| 468 | |||
| 469 | # Construct install scriptlet wrapper | 194 | # Construct install scriptlet wrapper |
| 470 | cat << EOF > ${WORKDIR}/scriptlet_wrapper | 195 | cat << EOF > ${WORKDIR}/scriptlet_wrapper |
| 471 | #!/bin/bash | 196 | #!/bin/bash |
| @@ -491,93 +216,17 @@ fi | |||
| 491 | EOF | 216 | EOF |
| 492 | 217 | ||
| 493 | chmod 0755 ${WORKDIR}/scriptlet_wrapper | 218 | chmod 0755 ${WORKDIR}/scriptlet_wrapper |
| 219 | smart --data-dir=${target_rootfs}/var/lib/smart config --set rpm-extra-macros._cross_scriptlet_wrapper=${WORKDIR}/scriptlet_wrapper | ||
| 494 | 220 | ||
| 495 | # Configure RPM... we enforce these settings! | 221 | smart --data-dir=${target_rootfs}/var/lib/smart install -y ${package_to_install} ${package_linguas} |
| 496 | mkdir -p ${target_rootfs}${rpmlibdir} | ||
| 497 | mkdir -p ${target_rootfs}${rpmlibdir}/log | ||
| 498 | # After change the __db.* cache size, log file will not be generated automatically, | ||
| 499 | # that will raise some warnings, so touch a bare log for rpm write into it. | ||
| 500 | touch ${target_rootfs}${rpmlibdir}/log/log.0000000001 | ||
| 501 | cat > ${target_rootfs}${rpmlibdir}/DB_CONFIG << EOF | ||
| 502 | # ================ Environment | ||
| 503 | set_data_dir . | ||
| 504 | set_create_dir . | ||
| 505 | set_lg_dir ./log | ||
| 506 | set_tmp_dir ./tmp | ||
| 507 | set_flags db_log_autoremove on | ||
| 508 | |||
| 509 | # -- thread_count must be >= 8 | ||
| 510 | set_thread_count 64 | ||
| 511 | |||
| 512 | # ================ Logging | ||
| 513 | 222 | ||
| 514 | # ================ Memory Pool | 223 | if [ ! -z "${package_attemptonly}" ]; then |
| 515 | set_cachesize 0 1048576 0 | 224 | echo "Installing attempt only packages..." |
| 516 | set_mp_mmapsize 268435456 | 225 | for pkg_name in ${package_attemptonly} ; do |
| 517 | 226 | echo "Attempting $pkg_name..." >> "`dirname ${BB_LOGFILE}`/log.do_${task}_attemptonly.${PID}" | |
| 518 | # ================ Locking | 227 | smart --data-dir=${target_rootfs}/var/lib/smart install -y $pkg_name >> "`dirname ${BB_LOGFILE}`/log.do_${task}_attemptonly.${PID}" 2>&1 || true |
| 519 | set_lk_max_locks 16384 | 228 | done |
| 520 | set_lk_max_lockers 16384 | ||
| 521 | set_lk_max_objects 16384 | ||
| 522 | mutex_set_max 163840 | ||
| 523 | |||
| 524 | # ================ Replication | ||
| 525 | EOF | ||
| 526 | |||
| 527 | if [ "${INSTALL_COMPLEMENTARY_RPM}" = "1" ] ; then | ||
| 528 | # Only install packages not already installed (dependency calculation will | ||
| 529 | # almost certainly have added some that have been) | ||
| 530 | sort -u ${target_rootfs}/install/original_solution.manifest > ${target_rootfs}/install/original_solution_sorted.manifest | ||
| 531 | sort -u ${target_rootfs}/install/total_solution.manifest > ${target_rootfs}/install/total_solution_sorted.manifest | ||
| 532 | comm -2 -3 ${target_rootfs}/install/total_solution_sorted.manifest \ | ||
| 533 | ${target_rootfs}/install/original_solution_sorted.manifest > \ | ||
| 534 | ${target_rootfs}/install/diff.manifest | ||
| 535 | mv ${target_rootfs}/install/diff.manifest ${target_rootfs}/install/total_solution.manifest | ||
| 536 | elif [ "${INC_RPM_IMAGE_GEN}" = "1" -a -f "${target_rootfs}/etc/passwd" ]; then | ||
| 537 | echo "Skipping pre install due to existing image" | ||
| 538 | else | ||
| 539 | # RPM is special. It can't handle dependencies and preinstall scripts correctly. Its | ||
| 540 | # probably a feature. The only way to convince rpm to actually run the preinstall scripts | ||
| 541 | # for base-passwd and shadow first before installing packages that depend on these packages | ||
| 542 | # is to do two image installs, installing one set of packages, then the other. | ||
| 543 | rm -f ${target_rootfs}/install/initial_install.manifest | ||
| 544 | echo "Installing base dependencies first (base-passwd, base-files and shadow) since rpm is special" | ||
| 545 | grep /base-passwd-[0-9] ${target_rootfs}/install/total_solution.manifest >> ${target_rootfs}/install/initial_install.manifest || true | ||
| 546 | grep /base-files-[0-9] ${target_rootfs}/install/total_solution.manifest >> ${target_rootfs}/install/initial_install.manifest || true | ||
| 547 | grep /shadow-[0-9] ${target_rootfs}/install/total_solution.manifest >> ${target_rootfs}/install/initial_install.manifest || true | ||
| 548 | |||
| 549 | if [ -s ${target_rootfs}/install/initial_install.manifest ]; then | ||
| 550 | echo "# Initial Install manifest padding..." >> ${target_rootfs}/install/initial_install.manifest | ||
| 551 | |||
| 552 | # Generate an install solution by doing a --justdb install, then recreate it with | ||
| 553 | # an actual package install! | ||
| 554 | mkdir -p ${target_rootfs}/initial | ||
| 555 | |||
| 556 | ${RPM} --predefine "_rpmds_sysinfo_path ${target_rootfs}/etc/rpm/sysinfo" \ | ||
| 557 | --predefine "_rpmrc_platform_path ${target_rootfs}/etc/rpm/platform" \ | ||
| 558 | --root "${target_rootfs}/install" \ | ||
| 559 | -D "_dbpath ${target_rootfs}/initial" -D "`cat ${confbase}.macro`" \ | ||
| 560 | -D "__dbi_txn create nofsync" \ | ||
| 561 | -U --justdb --replacepkgs --noscripts --notriggers --noparentdirs --nolinktos --ignoresize \ | ||
| 562 | ${target_rootfs}/install/initial_install.manifest | ||
| 563 | |||
| 564 | ${RPM} -D "_dbpath ${target_rootfs}/initial" -qa --qf "%{packageorigin}\n" \ | ||
| 565 | -D "__dbi_txn create nofsync private" \ | ||
| 566 | --root "${target_rootfs}/install" \ | ||
| 567 | > ${target_rootfs}/install/initial_solution.manifest | ||
| 568 | |||
| 569 | rpm_update_pkg ${target_rootfs}/install/initial_solution.manifest | ||
| 570 | |||
| 571 | grep -Fv -f ${target_rootfs}/install/initial_solution.manifest ${target_rootfs}/install/total_solution.manifest > ${target_rootfs}/install/total_solution.manifest.new | ||
| 572 | mv ${target_rootfs}/install/total_solution.manifest.new ${target_rootfs}/install/total_solution.manifest | ||
| 573 | |||
| 574 | rm -rf ${target_rootfs}/initial | ||
| 575 | fi | ||
| 576 | fi | 229 | fi |
| 577 | |||
| 578 | echo "Installing main solution manifest (${target_rootfs}/install/total_solution.manifest)" | ||
| 579 | |||
| 580 | rpm_update_pkg ${target_rootfs}/install/total_solution.manifest | ||
| 581 | } | 230 | } |
| 582 | 231 | ||
| 583 | python write_specfile () { | 232 | python write_specfile () { |
diff --git a/meta/classes/populate_sdk_rpm.bbclass b/meta/classes/populate_sdk_rpm.bbclass index b5aa601f5d..d26867fa9a 100644 --- a/meta/classes/populate_sdk_rpm.bbclass +++ b/meta/classes/populate_sdk_rpm.bbclass | |||
| @@ -1,10 +1,20 @@ | |||
| 1 | # Smart is python based, so be sure python-native is available to us. | ||
| 2 | EXTRANATIVEPATH += "python-native" | ||
| 3 | |||
| 1 | do_populate_sdk[depends] += "rpm-native:do_populate_sysroot" | 4 | do_populate_sdk[depends] += "rpm-native:do_populate_sysroot" |
| 2 | do_populate_sdk[depends] += "rpmresolve-native:do_populate_sysroot" | 5 | do_populate_sdk[depends] += "rpmresolve-native:do_populate_sysroot" |
| 6 | do_populate_sdk[depends] += "python-smartpm-native:do_populate_sysroot" | ||
| 7 | |||
| 8 | # Needed for update-alternatives | ||
| 9 | do_populate_sdk[depends] += "opkg-native:do_populate_sysroot" | ||
| 10 | |||
| 11 | # Creating the repo info in do_rootfs | ||
| 3 | do_populate_sdk[depends] += "createrepo-native:do_populate_sysroot" | 12 | do_populate_sdk[depends] += "createrepo-native:do_populate_sysroot" |
| 13 | |||
| 4 | do_populate_sdk[recrdeptask] += "do_package_write_rpm" | 14 | do_populate_sdk[recrdeptask] += "do_package_write_rpm" |
| 5 | 15 | ||
| 6 | rpmlibdir = "/var/lib/rpm" | 16 | rpmlibdir = "/var/lib/rpm" |
| 7 | RPMOPTS="--dbpath ${rpmlibdir} --define='_openall_before_chroot 1'" | 17 | RPMOPTS="--dbpath ${rpmlibdir}" |
| 8 | RPM="rpm ${RPMOPTS}" | 18 | RPM="rpm ${RPMOPTS}" |
| 9 | 19 | ||
| 10 | do_populate_sdk[lockfiles] += "${DEPLOY_DIR_RPM}/rpm.lock" | 20 | do_populate_sdk[lockfiles] += "${DEPLOY_DIR_RPM}/rpm.lock" |
| @@ -16,28 +26,24 @@ populate_sdk_post_rpm () { | |||
| 16 | # remove lock files | 26 | # remove lock files |
| 17 | rm -f ${target_rootfs}/__db.* | 27 | rm -f ${target_rootfs}/__db.* |
| 18 | 28 | ||
| 19 | # Move manifests into the directory with the logs | ||
| 20 | mv ${target_rootfs}/install/*.manifest ${T}/ | ||
| 21 | |||
| 22 | # Remove all remaining resolver files | 29 | # Remove all remaining resolver files |
| 23 | rm -rf ${target_rootfs}/install | 30 | rm -rf ${target_rootfs}/install |
| 31 | rm -rf ${target_rootfs}/var/lib/smart | ||
| 24 | } | 32 | } |
| 25 | 33 | ||
| 26 | populate_sdk_rpm () { | 34 | populate_sdk_rpm () { |
| 27 | 35 | ||
| 28 | package_update_index_rpm | 36 | package_update_index_rpm |
| 29 | package_generate_rpm_conf | ||
| 30 | 37 | ||
| 31 | ## install target ## | 38 | ## install target ## |
| 32 | # This needs to work in the same way as rootfs_rpm.bbclass! | 39 | # This needs to work in the same way as rootfs_rpm.bbclass! |
| 33 | # | 40 | # |
| 34 | export INSTALL_ROOTFS_RPM="${SDK_OUTPUT}/${SDKTARGETSYSROOT}" | 41 | export INSTALL_ROOTFS_RPM="${SDK_OUTPUT}/${SDKTARGETSYSROOT}" |
| 35 | export INSTALL_PLATFORM_RPM="${TARGET_ARCH}" | 42 | export INSTALL_PLATFORM_RPM="${TARGET_ARCH}" |
| 36 | export INSTALL_CONFBASE_RPM="${RPMCONF_TARGET_BASE}" | ||
| 37 | export INSTALL_PACKAGES_RPM="${TOOLCHAIN_TARGET_TASK}" | 43 | export INSTALL_PACKAGES_RPM="${TOOLCHAIN_TARGET_TASK}" |
| 38 | export INSTALL_PACKAGES_ATTEMPTONLY_RPM="${TOOLCHAIN_TARGET_TASK_ATTEMPTONLY}" | 44 | export INSTALL_PACKAGES_ATTEMPTONLY_RPM="${TOOLCHAIN_TARGET_TASK_ATTEMPTONLY}" |
| 39 | export INSTALL_PACKAGES_LINGUAS_RPM="" | 45 | export INSTALL_PACKAGES_LINGUAS_RPM="" |
| 40 | export INSTALL_PROVIDENAME_RPM="/bin/sh /bin/bash /usr/bin/env /usr/bin/perl pkgconfig pkgconfig(pkg-config)" | 46 | export INSTALL_PROVIDENAME_RPM="" |
| 41 | export INSTALL_TASK_RPM="populate_sdk-target" | 47 | export INSTALL_TASK_RPM="populate_sdk-target" |
| 42 | export INSTALL_COMPLEMENTARY_RPM="" | 48 | export INSTALL_COMPLEMENTARY_RPM="" |
| 43 | export INTERCEPT_DIR=${WORKDIR}/intercept_scripts | 49 | export INTERCEPT_DIR=${WORKDIR}/intercept_scripts |
| @@ -45,31 +51,6 @@ populate_sdk_rpm () { | |||
| 45 | 51 | ||
| 46 | # Setup base system configuration | 52 | # Setup base system configuration |
| 47 | mkdir -p ${INSTALL_ROOTFS_RPM}/etc/rpm/ | 53 | mkdir -p ${INSTALL_ROOTFS_RPM}/etc/rpm/ |
| 48 | mkdir -p ${INSTALL_ROOTFS_RPM}${rpmlibdir} | ||
| 49 | mkdir -p ${INSTALL_ROOTFS_RPM}${rpmlibdir}/log | ||
| 50 | cat > ${INSTALL_ROOTFS_RPM}${rpmlibdir}/DB_CONFIG << EOF | ||
| 51 | # ================ Environment | ||
| 52 | set_data_dir . | ||
| 53 | set_create_dir . | ||
| 54 | set_lg_dir ./log | ||
| 55 | set_tmp_dir ./tmp | ||
| 56 | |||
| 57 | # -- thread_count must be >= 8 | ||
| 58 | set_thread_count 64 | ||
| 59 | |||
| 60 | # ================ Logging | ||
| 61 | |||
| 62 | # ================ Memory Pool | ||
| 63 | set_mp_mmapsize 268435456 | ||
| 64 | |||
| 65 | # ================ Locking | ||
| 66 | set_lk_max_locks 16384 | ||
| 67 | set_lk_max_lockers 16384 | ||
| 68 | set_lk_max_objects 16384 | ||
| 69 | mutex_set_max 163840 | ||
| 70 | |||
| 71 | # ================ Replication | ||
| 72 | EOF | ||
| 73 | 54 | ||
| 74 | # List must be prefered to least preferred order | 55 | # List must be prefered to least preferred order |
| 75 | INSTALL_PLATFORM_EXTRA_RPM="" | 56 | INSTALL_PLATFORM_EXTRA_RPM="" |
| @@ -86,7 +67,6 @@ EOF | |||
| 86 | echo "Installing NATIVESDK packages" | 67 | echo "Installing NATIVESDK packages" |
| 87 | export INSTALL_ROOTFS_RPM="${SDK_OUTPUT}" | 68 | export INSTALL_ROOTFS_RPM="${SDK_OUTPUT}" |
| 88 | export INSTALL_PLATFORM_RPM="${SDK_ARCH}" | 69 | export INSTALL_PLATFORM_RPM="${SDK_ARCH}" |
| 89 | export INSTALL_CONFBASE_RPM="${RPMCONF_HOST_BASE}" | ||
| 90 | export INSTALL_PACKAGES_RPM="${TOOLCHAIN_HOST_TASK}" | 70 | export INSTALL_PACKAGES_RPM="${TOOLCHAIN_HOST_TASK}" |
| 91 | export INSTALL_PACKAGES_ATTEMPTONLY_RPM="${TOOLCHAIN_TARGET_HOST_ATTEMPTONLY}" | 71 | export INSTALL_PACKAGES_ATTEMPTONLY_RPM="${TOOLCHAIN_TARGET_HOST_ATTEMPTONLY}" |
| 92 | export INSTALL_PACKAGES_LINGUAS_RPM="" | 72 | export INSTALL_PACKAGES_LINGUAS_RPM="" |
| @@ -114,11 +94,6 @@ EOF | |||
| 114 | rm -rf ${SDK_OUTPUT}/etc | 94 | rm -rf ${SDK_OUTPUT}/etc |
| 115 | 95 | ||
| 116 | populate_sdk_log_check populate_sdk | 96 | populate_sdk_log_check populate_sdk |
| 117 | |||
| 118 | # Workaround so the parser knows we need the resolve_package function! | ||
| 119 | if false ; then | ||
| 120 | resolve_package_rpm foo ${RPMCONF_TARGET_BASE}.conf || true | ||
| 121 | fi | ||
| 122 | } | 97 | } |
| 123 | 98 | ||
| 124 | python () { | 99 | python () { |
diff --git a/meta/classes/rootfs_rpm.bbclass b/meta/classes/rootfs_rpm.bbclass index 2bb1b08740..d0b0d5793f 100644 --- a/meta/classes/rootfs_rpm.bbclass +++ b/meta/classes/rootfs_rpm.bbclass | |||
| @@ -7,11 +7,15 @@ ROOTFS_PKGMANAGE = "rpm zypper" | |||
| 7 | # Add 50Meg of extra space for zypper database space | 7 | # Add 50Meg of extra space for zypper database space |
| 8 | IMAGE_ROOTFS_EXTRA_SPACE_append = "${@base_contains("PACKAGE_INSTALL", "zypper", " + 51200", "" ,d)}" | 8 | IMAGE_ROOTFS_EXTRA_SPACE_append = "${@base_contains("PACKAGE_INSTALL", "zypper", " + 51200", "" ,d)}" |
| 9 | 9 | ||
| 10 | # Smart is python based, so be sure python-native is available to us. | ||
| 11 | EXTRANATIVEPATH += "python-native" | ||
| 12 | |||
| 10 | # Postinstalls on device are handled within this class at present | 13 | # Postinstalls on device are handled within this class at present |
| 11 | ROOTFS_PKGMANAGE_BOOTSTRAP = "" | 14 | ROOTFS_PKGMANAGE_BOOTSTRAP = "" |
| 12 | 15 | ||
| 13 | do_rootfs[depends] += "rpm-native:do_populate_sysroot" | 16 | do_rootfs[depends] += "rpm-native:do_populate_sysroot" |
| 14 | do_rootfs[depends] += "rpmresolve-native:do_populate_sysroot" | 17 | do_rootfs[depends] += "rpmresolve-native:do_populate_sysroot" |
| 18 | do_rootfs[depends] += "python-smartpm-native:do_populate_sysroot" | ||
| 15 | 19 | ||
| 16 | # Needed for update-alternatives | 20 | # Needed for update-alternatives |
| 17 | do_rootfs[depends] += "opkg-native:do_populate_sysroot" | 21 | do_rootfs[depends] += "opkg-native:do_populate_sysroot" |
| @@ -21,8 +25,8 @@ do_rootfs[depends] += "createrepo-native:do_populate_sysroot" | |||
| 21 | 25 | ||
| 22 | do_rootfs[recrdeptask] += "do_package_write_rpm" | 26 | do_rootfs[recrdeptask] += "do_package_write_rpm" |
| 23 | 27 | ||
| 24 | RPM_PREPROCESS_COMMANDS = "package_update_index_rpm; package_generate_rpm_conf; " | 28 | RPM_PREPROCESS_COMMANDS = "package_update_index_rpm; " |
| 25 | RPM_POSTPROCESS_COMMANDS = "" | 29 | RPM_POSTPROCESS_COMMANDS = "rpm_setup_smart_target_config; " |
| 26 | 30 | ||
| 27 | # | 31 | # |
| 28 | # Allow distributions to alter when [postponed] package install scripts are run | 32 | # Allow distributions to alter when [postponed] package install scripts are run |
| @@ -32,7 +36,7 @@ POSTINSTALL_INITPOSITION ?= "98" | |||
| 32 | rpmlibdir = "/var/lib/rpm" | 36 | rpmlibdir = "/var/lib/rpm" |
| 33 | opkglibdir = "${localstatedir}/lib/opkg" | 37 | opkglibdir = "${localstatedir}/lib/opkg" |
| 34 | 38 | ||
| 35 | RPMOPTS="--dbpath ${rpmlibdir} --define='_openall_before_chroot 1'" | 39 | RPMOPTS="--dbpath ${rpmlibdir}" |
| 36 | RPM="rpm ${RPMOPTS}" | 40 | RPM="rpm ${RPMOPTS}" |
| 37 | 41 | ||
| 38 | # RPM doesn't work with multiple rootfs generation at once due to collisions in the use of files | 42 | # RPM doesn't work with multiple rootfs generation at once due to collisions in the use of files |
| @@ -42,13 +46,10 @@ do_rootfs[lockfiles] += "${DEPLOY_DIR_RPM}/rpm.lock" | |||
| 42 | fakeroot rootfs_rpm_do_rootfs () { | 46 | fakeroot rootfs_rpm_do_rootfs () { |
| 43 | ${RPM_PREPROCESS_COMMANDS} | 47 | ${RPM_PREPROCESS_COMMANDS} |
| 44 | 48 | ||
| 45 | #createrepo "${DEPLOY_DIR_RPM}" | ||
| 46 | |||
| 47 | # install packages | 49 | # install packages |
| 48 | # This needs to work in the same way as populate_sdk_rpm.bbclass! | 50 | # This needs to work in the same way as populate_sdk_rpm.bbclass! |
| 49 | export INSTALL_ROOTFS_RPM="${IMAGE_ROOTFS}" | 51 | export INSTALL_ROOTFS_RPM="${IMAGE_ROOTFS}" |
| 50 | export INSTALL_PLATFORM_RPM="${TARGET_ARCH}" | 52 | export INSTALL_PLATFORM_RPM="${TARGET_ARCH}" |
| 51 | export INSTALL_CONFBASE_RPM="${RPMCONF_TARGET_BASE}" | ||
| 52 | export INSTALL_PACKAGES_RPM="${PACKAGE_INSTALL}" | 53 | export INSTALL_PACKAGES_RPM="${PACKAGE_INSTALL}" |
| 53 | export INSTALL_PACKAGES_ATTEMPTONLY_RPM="${PACKAGE_INSTALL_ATTEMPTONLY}" | 54 | export INSTALL_PACKAGES_ATTEMPTONLY_RPM="${PACKAGE_INSTALL_ATTEMPTONLY}" |
| 54 | export INSTALL_PACKAGES_LINGUAS_RPM="${LINGUAS_INSTALL}" | 55 | export INSTALL_PACKAGES_LINGUAS_RPM="${LINGUAS_INSTALL}" |
| @@ -114,18 +115,10 @@ EOF | |||
| 114 | # remove lock files | 115 | # remove lock files |
| 115 | rm -f ${IMAGE_ROOTFS}${rpmlibdir}/__db.* | 116 | rm -f ${IMAGE_ROOTFS}${rpmlibdir}/__db.* |
| 116 | 117 | ||
| 117 | # Move manifests into the directory with the logs | ||
| 118 | mv ${IMAGE_ROOTFS}/install/*.manifest ${T}/ | ||
| 119 | |||
| 120 | # Remove all remaining resolver files | 118 | # Remove all remaining resolver files |
| 121 | rm -rf ${IMAGE_ROOTFS}/install | 119 | rm -rf ${IMAGE_ROOTFS}/install |
| 122 | 120 | ||
| 123 | log_check rootfs | 121 | log_check rootfs |
| 124 | |||
| 125 | # Workaround so the parser knows we need the resolve_package function! | ||
| 126 | if false ; then | ||
| 127 | resolve_package_rpm foo ${RPMCONF_TARGET_BASE}.conf || true | ||
| 128 | fi | ||
| 129 | } | 122 | } |
| 130 | 123 | ||
| 131 | remove_packaging_data_files() { | 124 | remove_packaging_data_files() { |
| @@ -135,10 +128,19 @@ remove_packaging_data_files() { | |||
| 135 | mkdir -p $t | 128 | mkdir -p $t |
| 136 | mv ${IMAGE_ROOTFS}${rpmlibdir} $t | 129 | mv ${IMAGE_ROOTFS}${rpmlibdir} $t |
| 137 | rm -rf ${IMAGE_ROOTFS}${opkglibdir} | 130 | rm -rf ${IMAGE_ROOTFS}${opkglibdir} |
| 131 | rm -rf ${IMAGE_ROOTFS}/var/lib/smart | ||
| 132 | } | ||
| 133 | |||
| 134 | rpm_setup_smart_target_config() { | ||
| 135 | # Set up smart configuration for the target | ||
| 136 | rm -rf ${IMAGE_ROOTFS}/var/lib/smart | ||
| 137 | smart --data-dir=${IMAGE_ROOTFS}/var/lib/smart channel --add rpmsys type=rpm-sys -y | ||
| 138 | smart --data-dir=${IMAGE_ROOTFS}/var/lib/smart config --set rpm-nolinktos=1 | ||
| 139 | smart --data-dir=${IMAGE_ROOTFS}/var/lib/smart config --set rpm-noparentdirs=1 | ||
| 140 | rm -f ${IMAGE_ROOTFS}/var/lib/smart/config.old | ||
| 138 | } | 141 | } |
| 139 | 142 | ||
| 140 | RPM_QUERY_CMD = '${RPM} --root $INSTALL_ROOTFS_RPM -D "_dbpath ${rpmlibdir}" \ | 143 | RPM_QUERY_CMD = '${RPM} --root $INSTALL_ROOTFS_RPM -D "_dbpath ${rpmlibdir}"' |
| 141 | -D "__dbi_txn create nofsync private"' | ||
| 142 | 144 | ||
| 143 | list_installed_packages() { | 145 | list_installed_packages() { |
| 144 | GET_LIST=$(${RPM_QUERY_CMD} -qa --qf "[%{NAME} %{ARCH} %{PACKAGEORIGIN} %{Platform}\n]") | 146 | GET_LIST=$(${RPM_QUERY_CMD} -qa --qf "[%{NAME} %{ARCH} %{PACKAGEORIGIN} %{Platform}\n]") |
