diff options
Diffstat (limited to 'meta/classes/rootfs_rpm.bbclass')
| -rw-r--r-- | meta/classes/rootfs_rpm.bbclass | 145 |
1 files changed, 14 insertions, 131 deletions
diff --git a/meta/classes/rootfs_rpm.bbclass b/meta/classes/rootfs_rpm.bbclass index 26aaa1f8c3..d9a9c7d8a8 100644 --- a/meta/classes/rootfs_rpm.bbclass +++ b/meta/classes/rootfs_rpm.bbclass | |||
| @@ -37,7 +37,7 @@ RPM="rpm ${RPMOPTS}" | |||
| 37 | do_rootfs[lockfiles] += "${DEPLOY_DIR_RPM}/rpm.lock" | 37 | do_rootfs[lockfiles] += "${DEPLOY_DIR_RPM}/rpm.lock" |
| 38 | 38 | ||
| 39 | fakeroot rootfs_rpm_do_rootfs () { | 39 | fakeroot rootfs_rpm_do_rootfs () { |
| 40 | set +x | 40 | #set +x |
| 41 | 41 | ||
| 42 | ${RPM_PREPROCESS_COMMANDS} | 42 | ${RPM_PREPROCESS_COMMANDS} |
| 43 | 43 | ||
| @@ -46,123 +46,18 @@ fakeroot rootfs_rpm_do_rootfs () { | |||
| 46 | # Setup base system configuration | 46 | # Setup base system configuration |
| 47 | mkdir -p ${IMAGE_ROOTFS}/etc/rpm/ | 47 | mkdir -p ${IMAGE_ROOTFS}/etc/rpm/ |
| 48 | 48 | ||
| 49 | # Default arch is the top.. | 49 | #install pacakges |
| 50 | echo "${TARGET_ARCH}-unknown-linux" >${IMAGE_ROOTFS}/etc/rpm/platform | 50 | export INSTALL_ROOTFS_RPM="${IMAGE_ROOTFS}" |
| 51 | # Add the rest in sort order.. | 51 | export INSTALL_PLATFORM_RPM="${TARGET_ARCH}" |
| 52 | for each in ${PACKAGE_ARCHS} ; do | 52 | export INSTALL_PLATFORM_EXTRA_RPM="${PACKAGE_ARCHS}" |
| 53 | echo "$each""-unknown-linux" >>${IMAGE_ROOTFS}/etc/rpm/platform | 53 | export INSTALL_CONFBASE_RPM="${RPMCONF_TARGET_BASE}" |
| 54 | done | 54 | export INSTALL_PACKAGES_NORMAL_RPM="${PACKAGE_INSTALL}" |
| 55 | 55 | export INSTALL_PACKAGES_ATTEMPTONLY_RPM="${PACKAGE_INSTALL_ATTEMPTONLY}" | |
| 56 | # Tell RPM that the "/" directory exist and is available | 56 | export INSTALL_PACKAGES_LINGUAS_RPM="${LINGUAS_INSTALL}" |
| 57 | mkdir -p ${IMAGE_ROOTFS}/etc/rpm/sysinfo | 57 | export INSTALL_PROVIDENAME_RPM="" |
| 58 | echo "/" >${IMAGE_ROOTFS}/etc/rpm/sysinfo/Dirnames | 58 | export INSTALL_TASK_RPM="populate_sdk" |
| 59 | |||
| 60 | # Setup manifest of packages to install... | ||
| 61 | mkdir -p ${IMAGE_ROOTFS}/install | ||
| 62 | echo "# Install manifest" > ${IMAGE_ROOTFS}/install/install.manifest | ||
| 63 | |||
| 64 | # Uclibc builds don't provide this stuff... | ||
| 65 | if [ x${TARGET_OS} = "xlinux" ] || [ x${TARGET_OS} = "xlinux-gnueabi" ] ; then | ||
| 66 | if [ ! -z "${LINGUAS_INSTALL}" ]; then | ||
| 67 | for pkg in ${LINGUAS_INSTALL}; do | ||
| 68 | echo "Processing $pkg..." | ||
| 69 | pkg_name=$(resolve_package $pkg) | ||
| 70 | if [ -z "$pkg_name" ]; then | ||
| 71 | echo "Unable to find package $pkg!" | ||
| 72 | exit 1 | ||
| 73 | fi | ||
| 74 | echo $pkg_name >> ${IMAGE_ROOTFS}/install/install.manifest | ||
| 75 | done | ||
| 76 | fi | ||
| 77 | fi | ||
| 78 | 59 | ||
| 79 | if [ ! -z "${PACKAGE_INSTALL}" ]; then | 60 | package_install_internal_rpm |
| 80 | for pkg in ${PACKAGE_INSTALL} ; do | ||
| 81 | echo "Processing $pkg..." | ||
| 82 | pkg_name=$(resolve_package $pkg) | ||
| 83 | if [ -z "$pkg_name" ]; then | ||
| 84 | echo "Unable to find package $pkg!" | ||
| 85 | exit 1 | ||
| 86 | fi | ||
| 87 | echo $pkg_name >> ${IMAGE_ROOTFS}/install/install.manifest | ||
| 88 | done | ||
| 89 | fi | ||
| 90 | |||
| 91 | # Generate an install solution by doing a --justdb install, then recreate it with | ||
| 92 | # an actual package install! | ||
| 93 | ${RPM} -D "_dbpath ${IMAGE_ROOTFS}/install" -D "`cat ${DEPLOY_DIR_RPM}/solvedb.macro`" \ | ||
| 94 | -D "__dbi_txn create nofsync" \ | ||
| 95 | -U --justdb --noscripts --notriggers --noparentdirs --nolinktos --ignoresize \ | ||
| 96 | ${IMAGE_ROOTFS}/install/install.manifest | ||
| 97 | |||
| 98 | if [ ! -z "${PACKAGE_INSTALL_ATTEMPTONLY}" ]; then | ||
| 99 | echo "Adding attempt only packages..." | ||
| 100 | for pkg in ${PACKAGE_INSTALL_ATTEMPTONLY} ; do | ||
| 101 | echo "Processing $pkg..." | ||
| 102 | pkg_name=$(resolve_package $pkg) | ||
| 103 | if [ -z "$pkg_name" ]; then | ||
| 104 | echo "Unable to find package $pkg!" | ||
| 105 | exit 1 | ||
| 106 | fi | ||
| 107 | echo "Attempting $pkg_name..." >> "${WORKDIR}/temp/log.do_rootfs_attemptonly.${PID}" | ||
| 108 | ${RPM} -D "_dbpath ${IMAGE_ROOTFS}/install" -D "`cat ${DEPLOY_DIR_RPM}/solvedb.macro`" \ | ||
| 109 | -D "__dbi_txn create nofsync private" \ | ||
| 110 | -U --justdb --noscripts --notriggers --noparentdirs --nolinktos --ignoresize \ | ||
| 111 | $pkg_name >> "${WORKDIR}/temp/log.do_rootfs_attemptonly.${PID}" || true | ||
| 112 | done | ||
| 113 | fi | ||
| 114 | |||
| 115 | #### Note: 'Recommends' is an arbitrary tag that means _SUGGESTS_ in Poky.. | ||
| 116 | # Add any recommended packages to the image | ||
| 117 | # RPM does not solve for recommended packages because they are optional... | ||
| 118 | # So we query them and tree them like the ATTEMPTONLY packages above... | ||
| 119 | # Change the loop to "1" to run this code... | ||
| 120 | loop=0 | ||
| 121 | if [ $loop -eq 1 ]; then | ||
| 122 | echo "Processing recommended packages..." | ||
| 123 | cat /dev/null > ${IMAGE_ROOTFS}/install/recommend.list | ||
| 124 | while [ $loop -eq 1 ]; do | ||
| 125 | # Dump the full set of recommends... | ||
| 126 | ${RPM} -D "_dbpath ${IMAGE_ROOTFS}/install" -D "`cat ${DEPLOY_DIR_RPM}/solvedb.macro`" \ | ||
| 127 | -D "__dbi_txn create nofsync private" \ | ||
| 128 | -qa --qf "[%{RECOMMENDS}\n]" | sort -u > ${IMAGE_ROOTFS}/install/recommend | ||
| 129 | # Did we add more to the list? | ||
| 130 | grep -v -x -F -f ${IMAGE_ROOTFS}/install/recommend.list ${IMAGE_ROOTFS}/install/recommend > ${IMAGE_ROOTFS}/install/recommend.new || true | ||
| 131 | # We don't want to loop unless there is a change to the list! | ||
| 132 | loop=0 | ||
| 133 | cat ${IMAGE_ROOTFS}/install/recommend.new | \ | ||
| 134 | while read pkg ; do | ||
| 135 | # Ohh there was a new one, we'll need to loop again... | ||
| 136 | loop=1 | ||
| 137 | echo "Processing $pkg..." | ||
| 138 | pkg_name=$(resolve_package $pkg) | ||
| 139 | if [ -z "$pkg_name" ]; then | ||
| 140 | echo "Unable to find package $pkg." >> "${WORKDIR}/temp/log.do_rootfs_recommend.${PID}" | ||
| 141 | continue | ||
| 142 | fi | ||
| 143 | echo "Attempting $pkg_name..." >> "${WORKDIR}/temp/log.do_rootfs_recommend.${PID}" | ||
| 144 | ${RPM} -D "_dbpath ${IMAGE_ROOTFS}/install" -D "`cat ${DEPLOY_DIR_RPM}/solvedb.macro`" \ | ||
| 145 | -D "__dbi_txn create nofsync private" \ | ||
| 146 | -U --justdb --noscripts --notriggers --noparentdirs --nolinktos --ignoresize \ | ||
| 147 | $pkg_name >> "${WORKDIR}/temp/log.do_rootfs_recommend.${PID}" 2>&1 || true | ||
| 148 | done | ||
| 149 | cat ${IMAGE_ROOTFS}/install/recommend.list ${IMAGE_ROOTFS}/install/recommend.new | sort -u > ${IMAGE_ROOTFS}/install/recommend.new.list | ||
| 150 | mv ${IMAGE_ROOTFS}/install/recommend.new.list ${IMAGE_ROOTFS}/install/recommend.list | ||
| 151 | rm ${IMAGE_ROOTFS}/install/recommend ${IMAGE_ROOTFS}/install/recommend.new | ||
| 152 | done | ||
| 153 | fi | ||
| 154 | |||
| 155 | # Now that we have a solution, pull out a list of what to install... | ||
| 156 | echo "Manifest: ${IMAGE_ROOTFS}/install/install.manifest" | ||
| 157 | ${RPM} -D "_dbpath ${IMAGE_ROOTFS}/install" -qa --yaml \ | ||
| 158 | -D "__dbi_txn create nofsync private" \ | ||
| 159 | | grep -i 'Packageorigin' | cut -d : -f 2 > ${IMAGE_ROOTFS}/install/install_solution.manifest | ||
| 160 | |||
| 161 | # Attempt install | ||
| 162 | ${RPM} --root ${IMAGE_ROOTFS} -D "_dbpath ${rpmlibdir}" \ | ||
| 163 | --noscripts --notriggers --noparentdirs --nolinktos \ | ||
| 164 | -D "__dbi_txn create nofsync private" \ | ||
| 165 | -Uhv ${IMAGE_ROOTFS}/install/install_solution.manifest | ||
| 166 | 61 | ||
| 167 | export D=${IMAGE_ROOTFS} | 62 | export D=${IMAGE_ROOTFS} |
| 168 | export OFFLINE_ROOT=${IMAGE_ROOTFS} | 63 | export OFFLINE_ROOT=${IMAGE_ROOTFS} |
| @@ -227,7 +122,7 @@ EOF | |||
| 227 | 122 | ||
| 228 | # Workaround so the parser knows we need the resolve_package function! | 123 | # Workaround so the parser knows we need the resolve_package function! |
| 229 | if false ; then | 124 | if false ; then |
| 230 | resolve_package foo || true | 125 | resolve_package_rpm foo ${RPMCONF_TARGET_BASE}.conf || true |
| 231 | fi | 126 | fi |
| 232 | } | 127 | } |
| 233 | 128 | ||
| @@ -236,18 +131,6 @@ remove_packaging_data_files() { | |||
| 236 | rm -rf ${IMAGE_ROOTFS}${opkglibdir} | 131 | rm -rf ${IMAGE_ROOTFS}${opkglibdir} |
| 237 | } | 132 | } |
| 238 | 133 | ||
| 239 | # Resolve package names to filepaths | ||
| 240 | resolve_package() { | ||
| 241 | pkg="$1" | ||
| 242 | pkg_name="" | ||
| 243 | for solve in `cat ${DEPLOY_DIR_RPM}/solvedb.conf`; do | ||
| 244 | pkg_name=$(${RPM} -D "_dbpath $solve" -D "__dbi_txn create nofsync" -q --yaml $pkg | grep -i 'Packageorigin' | cut -d : -f 2) | ||
| 245 | if [ -n "$pkg_name" ]; then | ||
| 246 | break; | ||
| 247 | fi | ||
| 248 | done | ||
| 249 | echo $pkg_name | ||
| 250 | } | ||
| 251 | 134 | ||
| 252 | install_all_locales() { | 135 | install_all_locales() { |
| 253 | PACKAGES_TO_INSTALL="" | 136 | PACKAGES_TO_INSTALL="" |
| @@ -263,7 +146,7 @@ install_all_locales() { | |||
| 263 | # but this should be good enough for the few users of this function... | 146 | # but this should be good enough for the few users of this function... |
| 264 | for pkg in $INSTALLED_PACKAGES; do | 147 | for pkg in $INSTALLED_PACKAGES; do |
| 265 | for lang in ${IMAGE_LOCALES}; do | 148 | for lang in ${IMAGE_LOCALES}; do |
| 266 | pkg_name=$(resolve_package $pkg-locale-$lang) | 149 | pkg_name=$(resolve_package_rpm $pkg-locale-$lang ${RPMCONF_TARGET_BASE}.conf) |
| 267 | if [ -n "$pkg_name" ]; then | 150 | if [ -n "$pkg_name" ]; then |
| 268 | ${RPM} --root ${IMAGE_ROOTFS} -D "_dbpath ${rpmlibdir}" \ | 151 | ${RPM} --root ${IMAGE_ROOTFS} -D "_dbpath ${rpmlibdir}" \ |
| 269 | -D "__dbi_txn create nofsync private" \ | 152 | -D "__dbi_txn create nofsync private" \ |
