diff options
| -rw-r--r-- | meta/classes/package_rpm.bbclass | 12 | ||||
| -rw-r--r-- | meta/classes/rootfs_rpm.bbclass | 124 |
2 files changed, 104 insertions, 32 deletions
diff --git a/meta/classes/package_rpm.bbclass b/meta/classes/package_rpm.bbclass index a5225dd809..3967ae294e 100644 --- a/meta/classes/package_rpm.bbclass +++ b/meta/classes/package_rpm.bbclass | |||
| @@ -270,8 +270,10 @@ python write_specfile () { | |||
| 270 | splitrobsoletes = dep | 270 | splitrobsoletes = dep |
| 271 | 271 | ||
| 272 | print_deps(splitrdepends, "Requires", spec_preamble_bottom, d) | 272 | print_deps(splitrdepends, "Requires", spec_preamble_bottom, d) |
| 273 | print_deps(splitrrecommends, "Recommends", spec_preamble_bottom, d) | 273 | # Suggests in RPM are like recommends in Poky! |
| 274 | print_deps(splitrsuggests, "Suggests", spec_preamble_bottom, d) | 274 | print_deps(splitrrecommends, "Suggests", spec_preamble_bottom, d) |
| 275 | # While there is no analog for suggests... (So call them recommends for now) | ||
| 276 | print_deps(splitrsuggests, "Recommends", spec_preamble_bottom, d) | ||
| 275 | print_deps(splitrprovides, "Provides", spec_preamble_bottom, d) | 277 | print_deps(splitrprovides, "Provides", spec_preamble_bottom, d) |
| 276 | print_deps(splitrobsoletes, "Obsoletes", spec_preamble_bottom, d) | 278 | print_deps(splitrobsoletes, "Obsoletes", spec_preamble_bottom, d) |
| 277 | 279 | ||
| @@ -352,8 +354,10 @@ python write_specfile () { | |||
| 352 | 354 | ||
| 353 | print_deps(srcdepends, "BuildRequires", spec_preamble_top, d) | 355 | print_deps(srcdepends, "BuildRequires", spec_preamble_top, d) |
| 354 | print_deps(srcrdepends, "Requires", spec_preamble_top, d) | 356 | print_deps(srcrdepends, "Requires", spec_preamble_top, d) |
| 355 | print_deps(srcrrecommends, "Recommends", spec_preamble_top, d) | 357 | # Suggests in RPM are like recommends in Poky! |
| 356 | print_deps(srcrsuggests, "Suggests", spec_preamble_top, d) | 358 | print_deps(srcrrecommends, "Suggests", spec_preamble_top, d) |
| 359 | # While there is no analog for suggests... (So call them recommends for now) | ||
| 360 | print_deps(srcrsuggests, "Recommends", spec_preamble_top, d) | ||
| 357 | print_deps(srcrprovides, "Provides", spec_preamble_top, d) | 361 | print_deps(srcrprovides, "Provides", spec_preamble_top, d) |
| 358 | print_deps(srcrobsoletes, "Obsoletes", spec_preamble_top, d) | 362 | print_deps(srcrobsoletes, "Obsoletes", spec_preamble_top, d) |
| 359 | 363 | ||
diff --git a/meta/classes/rootfs_rpm.bbclass b/meta/classes/rootfs_rpm.bbclass index f56acada7c..ace9677f06 100644 --- a/meta/classes/rootfs_rpm.bbclass +++ b/meta/classes/rootfs_rpm.bbclass | |||
| @@ -5,9 +5,6 @@ | |||
| 5 | ROOTFS_PKGMANAGE = "rpm" | 5 | ROOTFS_PKGMANAGE = "rpm" |
| 6 | ROOTFS_PKGMANAGE_BOOTSTRAP = "run-postinsts" | 6 | ROOTFS_PKGMANAGE_BOOTSTRAP = "run-postinsts" |
| 7 | 7 | ||
| 8 | RPMOPTS="--dbpath /var/lib/rpm --define='_openall_before_chroot 1'" | ||
| 9 | RPM="${BUILD_ARCH}-${BUILD_OS}-rpm ${RPMOPTS}" | ||
| 10 | |||
| 11 | do_rootfs[depends] += "rpm-native:do_populate_sysroot" | 8 | do_rootfs[depends] += "rpm-native:do_populate_sysroot" |
| 12 | 9 | ||
| 13 | # Needed for update-alternatives | 10 | # Needed for update-alternatives |
| @@ -20,8 +17,12 @@ AWKPOSTINSTSCRIPT = "${POKYBASE}/scripts/rootfs_rpm-extract-postinst.awk" | |||
| 20 | RPM_PREPROCESS_COMMANDS = "package_update_index_rpm; package_generate_rpm_conf" | 17 | RPM_PREPROCESS_COMMANDS = "package_update_index_rpm; package_generate_rpm_conf" |
| 21 | RPM_POSTPROCESS_COMMANDS = "" | 18 | RPM_POSTPROCESS_COMMANDS = "" |
| 22 | 19 | ||
| 20 | rpmlibdir = "/var/lib/rpm" | ||
| 23 | opkglibdir = "${localstatedir}/lib/opkg" | 21 | opkglibdir = "${localstatedir}/lib/opkg" |
| 24 | 22 | ||
| 23 | RPMOPTS="--dbpath ${rpmlibdir} --define='_openall_before_chroot 1'" | ||
| 24 | RPM="${BUILD_ARCH}-${BUILD_OS}-rpm ${RPMOPTS}" | ||
| 25 | |||
| 25 | fakeroot rootfs_rpm_do_rootfs () { | 26 | fakeroot rootfs_rpm_do_rootfs () { |
| 26 | set +x | 27 | set +x |
| 27 | 28 | ||
| @@ -38,9 +39,14 @@ fakeroot rootfs_rpm_do_rootfs () { | |||
| 38 | # Uclibc builds don't provide this stuff... | 39 | # Uclibc builds don't provide this stuff... |
| 39 | if [ x${TARGET_OS} = "xlinux" ] || [ x${TARGET_OS} = "xlinux-gnueabi" ] ; then | 40 | if [ x${TARGET_OS} = "xlinux" ] || [ x${TARGET_OS} = "xlinux-gnueabi" ] ; then |
| 40 | if [ ! -z "${LINGUAS_INSTALL}" ]; then | 41 | if [ ! -z "${LINGUAS_INSTALL}" ]; then |
| 41 | for i in ${LINGUAS_INSTALL}; do | 42 | for pkg in ${LINGUAS_INSTALL}; do |
| 42 | echo "LINGUAS: $i" | 43 | echo "Processing $pkg..." |
| 43 | : # Do not support locales yet | 44 | pkg_name=$(resolve_package $pkg) |
| 45 | if [ -z '$pkg_name' ]; then | ||
| 46 | echo "Unable to find package $pkg!" | ||
| 47 | exit 1 | ||
| 48 | fi | ||
| 49 | echo $pkg_name >> ${IMAGE_ROOTFS}/install/install.manifest | ||
| 44 | done | 50 | done |
| 45 | fi | 51 | fi |
| 46 | fi | 52 | fi |
| @@ -48,44 +54,89 @@ fakeroot rootfs_rpm_do_rootfs () { | |||
| 48 | if [ ! -z "${PACKAGE_INSTALL}" ]; then | 54 | if [ ! -z "${PACKAGE_INSTALL}" ]; then |
| 49 | for pkg in ${PACKAGE_INSTALL} ; do | 55 | for pkg in ${PACKAGE_INSTALL} ; do |
| 50 | echo "Processing $pkg..." | 56 | echo "Processing $pkg..." |
| 51 | for solve in `cat ${DEPLOY_DIR_RPM}/solvedb.conf`; do | 57 | pkg_name=$(resolve_package $pkg) |
| 52 | pkg_name=$(${RPM} -D "_dbpath $solve" -D "_dbi_tags_3 Packages:Name:Basenames:Providename:Nvra" -D "__dbi_cdb create mp_mmapsize=128Mb mp_size=1Mb nofsync" -q --yaml $pkg | grep -i 'Packageorigin' | cut -d : -f 2) | 58 | if [ -z '$pkg_name' ]; then |
| 53 | if [ -n "$pkg_name" ]; then | 59 | echo "Unable to find package $pkg!" |
| 54 | break; | ||
| 55 | fi | ||
| 56 | done | ||
| 57 | if [ -z "$pkg_name" ]; then | ||
| 58 | echo "ERROR: Unable to find $pkg!" | ||
| 59 | exit 1 | 60 | exit 1 |
| 60 | fi | 61 | fi |
| 61 | echo $pkg_name >> ${IMAGE_ROOTFS}/install/install.manifest | 62 | echo $pkg_name >> ${IMAGE_ROOTFS}/install/install.manifest |
| 62 | done | 63 | done |
| 63 | fi | 64 | fi |
| 64 | 65 | ||
| 65 | echo "Manifest: ${IMAGE_ROOTFS}/install/install.manifest" | ||
| 66 | |||
| 67 | # Generate an install solution by doing a --justdb install, then recreate it with | 66 | # Generate an install solution by doing a --justdb install, then recreate it with |
| 68 | # an actual package install! | 67 | # an actual package install! |
| 69 | ${RPM} -D "_dbpath ${IMAGE_ROOTFS}/install" -D "`cat ${DEPLOY_DIR_RPM}/solvedb.macro`" \ | 68 | ${RPM} -D "_dbpath ${IMAGE_ROOTFS}/install" -D "`cat ${DEPLOY_DIR_RPM}/solvedb.macro`" \ |
| 69 | -D "__dbi_cdb create mp_mmapsize=128Mb mp_size=1Mb nofsync" \ | ||
| 70 | -U --justdb --noscripts --notriggers --noparentdirs --nolinktos \ | 70 | -U --justdb --noscripts --notriggers --noparentdirs --nolinktos \ |
| 71 | ${IMAGE_ROOTFS}/install/install.manifest | 71 | ${IMAGE_ROOTFS}/install/install.manifest |
| 72 | 72 | ||
| 73 | if [ ! -z "${PACKAGE_INSTALL_ATTEMPTONLY}" ]; then | ||
| 74 | echo "Adding attempt only packages..." | ||
| 75 | for pkg in ${PACKAGE_INSTALL_ATTEMPTONLY} ; do | ||
| 76 | echo "Processing $pkg..." | ||
| 77 | pkg_name=$(resolve_package $pkg) | ||
| 78 | if [ -z '$pkg_name' ]; then | ||
| 79 | echo "Unable to find package $pkg!" | ||
| 80 | exit 1 | ||
| 81 | fi | ||
| 82 | echo "Attempting $pkg_name..." >> "${WORKDIR}/temp/log.do_rootfs_attemptonly.${PID}" | ||
| 83 | ${RPM} -D "_dbpath ${IMAGE_ROOTFS}/install" -D "`cat ${DEPLOY_DIR_RPM}/solvedb.macro`" \ | ||
| 84 | -D "__dbi_cdb create mp_mmapsize=128Mb mp_size=1Mb nofsync private" \ | ||
| 85 | -U --justdb --noscripts --notriggers --noparentdirs --nolinktos \ | ||
| 86 | $pkg_name >> "${WORKDIR}/temp/log.do_rootfs_attemptonly.${PID}" || true | ||
| 87 | done | ||
| 88 | fi | ||
| 89 | |||
| 90 | #### Note: 'Recommends' is an arbitrary tag that means _SUGGESTS_ in Poky.. | ||
| 91 | # Add any recommended packages to the image | ||
| 92 | # RPM does not solve for recommended packages because they are optional... | ||
| 93 | # So we query them and tree them like the ATTEMPTONLY packages above... | ||
| 94 | # Change the loop to "1" to run this code... | ||
| 95 | loop=0 | ||
| 96 | if [ $loop -eq 1 ]; then | ||
| 97 | echo "Processing recommended packages..." | ||
| 98 | cat /dev/null > ${IMAGE_ROOTFS}/install/recommend.list | ||
| 99 | while [ $loop -eq 1 ]; do | ||
| 100 | # Dump the full set of recommends... | ||
| 101 | ${RPM} -D "_dbpath ${IMAGE_ROOTFS}/install" -D "`cat ${DEPLOY_DIR_RPM}/solvedb.macro`" \ | ||
| 102 | -qa --qf "[%{RECOMMENDS}\n]" | sort -u > ${IMAGE_ROOTFS}/install/recommend | ||
| 103 | # Did we add more to the list? | ||
| 104 | grep -v -x -F -f ${IMAGE_ROOTFS}/install/recommend.list ${IMAGE_ROOTFS}/install/recommend > ${IMAGE_ROOTFS}/install/recommend.new || true | ||
| 105 | # We don't want to loop unless there is a change to the list! | ||
| 106 | loop=0 | ||
| 107 | cat ${IMAGE_ROOTFS}/install/recommend.new | \ | ||
| 108 | while read pkg ; do | ||
| 109 | # Ohh there was a new one, we'll need to loop again... | ||
| 110 | loop=1 | ||
| 111 | echo "Processing $pkg..." | ||
| 112 | pkg_name=$(resolve_package $pkg || true) | ||
| 113 | if [ -z "$pkg_name" ]; then | ||
| 114 | echo "Unable to find package $pkg." >> "${WORKDIR}/temp/log.do_rootfs_recommend.${PID}" | ||
| 115 | continue | ||
| 116 | fi | ||
| 117 | echo "Attempting $pkg_name..." >> "${WORKDIR}/temp/log.do_rootfs_recommend.${PID}" | ||
| 118 | ${RPM} -D "_dbpath ${IMAGE_ROOTFS}/install" -D "`cat ${DEPLOY_DIR_RPM}/solvedb.macro`" \ | ||
| 119 | -D "__dbi_cdb create mp_mmapsize=128Mb mp_size=1Mb nofsync private" \ | ||
| 120 | -U --justdb --noscripts --notriggers --noparentdirs --nolinktos \ | ||
| 121 | $pkg_name >> "${WORKDIR}/temp/log.do_rootfs_recommend.${PID}" 2>&1 || true | ||
| 122 | done | ||
| 123 | cat ${IMAGE_ROOTFS}/install/recommend.list ${IMAGE_ROOTFS}/install/recommend.new | sort -u > ${IMAGE_ROOTFS}/install/recommend.new.list | ||
| 124 | mv ${IMAGE_ROOTFS}/install/recommend.new.list ${IMAGE_ROOTFS}/install/recommend.list | ||
| 125 | rm ${IMAGE_ROOTFS}/install/recommend ${IMAGE_ROOTFS}/install/recommend.new | ||
| 126 | done | ||
| 127 | fi | ||
| 128 | |||
| 129 | # Now that we have a solution, pull out a list of what to install... | ||
| 130 | echo "Manifest: ${IMAGE_ROOTFS}/install/install.manifest" | ||
| 73 | ${RPM} -D "_dbpath ${IMAGE_ROOTFS}/install" -qa --yaml \ | 131 | ${RPM} -D "_dbpath ${IMAGE_ROOTFS}/install" -qa --yaml \ |
| 74 | | grep -i 'Packageorigin' | cut -d : -f 2 > ${IMAGE_ROOTFS}/install/install_solution.manifest | 132 | | grep -i 'Packageorigin' | cut -d : -f 2 > ${IMAGE_ROOTFS}/install/install_solution.manifest |
| 75 | 133 | ||
| 76 | # Attempt install | 134 | # Attempt install |
| 77 | ${RPM} --root ${IMAGE_ROOTFS} -D "_dbpath /var/lib/rpm" \ | 135 | ${RPM} --root ${IMAGE_ROOTFS} -D "_dbpath ${rpmlibdir}" \ |
| 78 | --noscripts --notriggers --noparentdirs --nolinktos \ | 136 | --noscripts --notriggers --noparentdirs --nolinktos \ |
| 137 | -D "__dbi_cdb create mp_mmapsize=128Mb mp_size=1Mb nofsync private" \ | ||
| 79 | -Uhv ${IMAGE_ROOTFS}/install/install_solution.manifest | 138 | -Uhv ${IMAGE_ROOTFS}/install/install_solution.manifest |
| 80 | 139 | ||
| 81 | if [ ! -z "${PACKAGE_INSTALL_ATTEMPTONLY}" ]; then | ||
| 82 | : # fakechroot yum ${YUMARGS} -y install ${PACKAGE_INSTALL_ATTEMPTONLY} > ${WORKDIR}/temp/log.do_rootfs-attemptonly.${PID} || true | ||
| 83 | fi | ||
| 84 | |||
| 85 | # Add any recommended packages to the image | ||
| 86 | # (added as an extra script since yum itself doesn't support this) | ||
| 87 | : # yum-install-recommends.py ${IMAGE_ROOTFS} "fakechroot yum ${YUMARGS} -y install" | ||
| 88 | |||
| 89 | export D=${IMAGE_ROOTFS} | 140 | export D=${IMAGE_ROOTFS} |
| 90 | export OFFLINE_ROOT=${IMAGE_ROOTFS} | 141 | export OFFLINE_ROOT=${IMAGE_ROOTFS} |
| 91 | export IPKG_OFFLINE_ROOT=${IMAGE_ROOTFS} | 142 | export IPKG_OFFLINE_ROOT=${IMAGE_ROOTFS} |
| @@ -94,7 +145,7 @@ fakeroot rootfs_rpm_do_rootfs () { | |||
| 94 | ${ROOTFS_POSTINSTALL_COMMAND} | 145 | ${ROOTFS_POSTINSTALL_COMMAND} |
| 95 | 146 | ||
| 96 | mkdir -p ${IMAGE_ROOTFS}/etc/rpm-postinsts/ | 147 | mkdir -p ${IMAGE_ROOTFS}/etc/rpm-postinsts/ |
| 97 | ${RPM} --root ${IMAGE_ROOTFS} -D '_dbpath /var/lib/rpm' -qa \ | 148 | ${RPM} --root ${IMAGE_ROOTFS} -D '_dbpath ${rpmlibdir}' -qa \ |
| 98 | --qf 'Name: %{NAME}\n%|POSTIN?{postinstall scriptlet%|POSTINPROG?{ (using %{POSTINPROG})}|:\n%{POSTIN}\n}:{%|POSTINPROG?{postinstall program: %{POSTINPROG}\n}|}|' \ | 149 | --qf 'Name: %{NAME}\n%|POSTIN?{postinstall scriptlet%|POSTINPROG?{ (using %{POSTINPROG})}|:\n%{POSTIN}\n}:{%|POSTINPROG?{postinstall program: %{POSTINPROG}\n}|}|' \ |
| 99 | > ${IMAGE_ROOTFS}/etc/rpm-postinsts/combined | 150 | > ${IMAGE_ROOTFS}/etc/rpm-postinsts/combined |
| 100 | awk -f ${AWKPOSTINSTSCRIPT} < ${IMAGE_ROOTFS}/etc/rpm-postinsts/combined | 151 | awk -f ${AWKPOSTINSTSCRIPT} < ${IMAGE_ROOTFS}/etc/rpm-postinsts/combined |
| @@ -136,7 +187,7 @@ EOF | |||
| 136 | rm -rf ${IMAGE_ROOTFS}/var/log2/ | 187 | rm -rf ${IMAGE_ROOTFS}/var/log2/ |
| 137 | 188 | ||
| 138 | # remove lock files | 189 | # remove lock files |
| 139 | rm -f ${IMAGE_ROOTFS}/var/lib/rpm/__db.* | 190 | rm -f ${IMAGE_ROOTFS}${rpmlibdir}/__db.* |
| 140 | 191 | ||
| 141 | # remove resolver files and manifests | 192 | # remove resolver files and manifests |
| 142 | rm -f ${IMAGE_ROOTFS}/install/install.manifest | 193 | rm -f ${IMAGE_ROOTFS}/install/install.manifest |
| @@ -165,11 +216,28 @@ rootfs_rpm_log_check() { | |||
| 165 | } | 216 | } |
| 166 | 217 | ||
| 167 | remove_packaging_data_files() { | 218 | remove_packaging_data_files() { |
| 168 | exit 1 | 219 | rm -rf ${IMAGE_ROOTFS}${rpmlibdir} |
| 169 | rm -rf ${IMAGE_ROOTFS}${opkglibdir} | 220 | rm -rf ${IMAGE_ROOTFS}${opkglibdir} |
| 170 | } | 221 | } |
| 171 | 222 | ||
| 223 | # Resolve package names to filepaths | ||
| 224 | resolve_package() { | ||
| 225 | pkg="$1" | ||
| 226 | for solve in `cat ${DEPLOY_DIR_RPM}/solvedb.conf`; do | ||
| 227 | pkg_name=$(${RPM} -D "_dbpath $solve" -D "_dbi_tags_3 Packages:Name:Basenames:Providename:Nvra" -D "__dbi_cdb create mp_mmapsize=128Mb mp_size=1Mb nofsync" -q --yaml $pkg | grep -i 'Packageorigin' | cut -d : -f 2) | ||
| 228 | if [ -n "$pkg_name" ]; then | ||
| 229 | break; | ||
| 230 | fi | ||
| 231 | done | ||
| 232 | if [ -z "$pkg_name" ]; then | ||
| 233 | return 1 | ||
| 234 | fi | ||
| 235 | echo $pkg_name | ||
| 236 | return 0 | ||
| 237 | } | ||
| 238 | |||
| 172 | install_all_locales() { | 239 | install_all_locales() { |
| 240 | echo "install_all_locales: not yet implemented!" | ||
| 173 | exit 1 | 241 | exit 1 |
| 174 | 242 | ||
| 175 | PACKAGES_TO_INSTALL="" | 243 | PACKAGES_TO_INSTALL="" |
