summaryrefslogtreecommitdiffstats
path: root/meta/classes/package_rpm.bbclass
diff options
context:
space:
mode:
Diffstat (limited to 'meta/classes/package_rpm.bbclass')
-rw-r--r--meta/classes/package_rpm.bbclass188
1 files changed, 175 insertions, 13 deletions
diff --git a/meta/classes/package_rpm.bbclass b/meta/classes/package_rpm.bbclass
index 4b81b68bf7..4f60daffb4 100644
--- a/meta/classes/package_rpm.bbclass
+++ b/meta/classes/package_rpm.bbclass
@@ -24,11 +24,24 @@ package_update_index_rpm () {
24 return 24 return
25 fi 25 fi
26 26
27 base_archs="`echo ${PACKAGE_ARCHS} | sed 's/-/_/g'`" 27 sdk_archs=`echo "${SDK_PACKAGE_ARCHS}" | tr - _`
28 ml_archs="`echo ${MULTILIB_PACKAGE_ARCHS} | sed 's/-/_/g'`" 28
29 sdk_archs="`echo ${SDK_PACKAGE_ARCHS} | sed 's/-/_/g'`" 29 target_archs=""
30 for i in ${MULTILIB_PREFIX_LIST} ; do
31 old_IFS="$IFS"
32 IFS=":"
33 set $i
34 IFS="$old_IFS"
35 shift # remove mlib
36 while [ -n "$1" ]; do
37 target_archs="$target_archs $1"
38 shift
39 done
40 done
30 41
31 archs=`for arch in $base_archs $ml_archs $sdk_archs ; do 42 target_archs=`echo "$target_archs" | tr - _`
43
44 archs=`for arch in $target_archs $sdk_archs ; do
32 echo $arch 45 echo $arch
33 done | sort | uniq` 46 done | sort | uniq`
34 47
@@ -59,6 +72,143 @@ rpm_log_check() {
59 true 72 true
60} 73}
61 74
75# Translate the RPM/Smart format names to the OE multilib format names
76# Input via stdin (only the first item per line is converted!)
77# Output via stdout
78translate_smart_to_oe() {
79 arg1="$1"
80
81 # Dump installed packages
82 while read pkg arch other ; do
83 if [ -z "$pkg" ]; then
84 continue
85 fi
86 new_pkg=$pkg
87 fixed_arch=`echo "$arch" | tr _ -`
88 for i in ${MULTILIB_PREFIX_LIST} ; do
89 old_IFS="$IFS"
90 IFS=":"
91 set $i
92 IFS="$old_IFS"
93 mlib="$1"
94 shift
95 while [ -n "$1" ]; do
96 cmp_arch=$1
97 shift
98 if [ "$arch" = "$cmp_arch" -o "$fixed_arch" = "$cmp_arch" ]; then
99 if [ "$mlib" = "default" ]; then
100 new_pkg="$pkg"
101 else
102 new_pkg="$mlib-$pkg"
103 fi
104 break
105 fi
106 done
107 if [ "$arch" = "$cmp_arch" -o "$fixed_arch" = "$cmp_arch" ]; then
108 break
109 fi
110 done
111
112 #echo "$pkg -> $new_pkg" >&2
113 if [ "$arg1" = "arch" ]; then
114 echo $new_pkg $cmp_arch $other
115 else
116 echo $new_pkg $other
117 fi
118 done
119}
120
121# Translate the OE multilib format names to the RPM/Smart format names
122# Input via arguments
123# Ouput via pkgs_to_install
124translate_oe_to_smart() {
125 default_archs=""
126 sdk_mode=""
127 if [ "$1" = "--sdk" ]; then
128 shift
129 sdk_mode="true"
130 # Need to reverse the order of the SDK_ARCHS highest -> lowest priority
131 archs=`echo "${SDK_PACKAGE_ARCHS}" | tr - _`
132 for arch in $archs ; do
133 default_archs="$arch $default_archs"
134 done
135 fi
136
137 attemptonly="Error"
138 if [ "$1" = "--attemptonly" ]; then
139 attemptonly="Warning"
140 shift
141 fi
142
143 # Dump a list of all available packages
144 [ ! -e ${target_rootfs}/install/tmp/fullpkglist.query ] && smart --data-dir=${target_rootfs}/var/lib/smart query --output ${target_rootfs}/install/tmp/fullpkglist.query
145
146 pkgs_to_install=""
147 for pkg in "$@" ; do
148 new_pkg="$pkg"
149 if [ -z "$sdk_mode" ]; then
150 for i in ${MULTILIB_PREFIX_LIST} ; do
151 old_IFS="$IFS"
152 IFS=":"
153 set $i
154 IFS="$old_IFS"
155 mlib="$1"
156 shift
157 if [ "$mlib" = "default" ]; then
158 if [ -z "$default_archs" ]; then
159 default_archs=$@
160 fi
161 continue
162 fi
163 subst=${pkg#${mlib}-}
164 if [ "$subst" != "$pkg" ]; then
165 feeds=$@
166 while [ -n "$1" ]; do
167 arch="$1"
168 arch=`echo "$arch" | tr - _`
169 shift
170 if grep -q '^'$subst'-[^-]*-[^-]*@'$arch'$' ${target_rootfs}/install/tmp/fullpkglist.query ; then
171 new_pkg="$subst@$arch"
172 # First found is best match
173 break
174 fi
175 done
176 if [ "$pkg" = "$new_pkg" ]; then
177 # Failed to translate, package not found!
178 echo "$attemptonly: $pkg not found in the $mlib feeds ($feeds)." >&2
179 if [ "$attemptonly" = "Error" ]; then
180 exit 1
181 fi
182 continue
183 fi
184 fi
185 done
186 fi
187 # Apparently not a multilib package...
188 if [ "$pkg" = "$new_pkg" ]; then
189 default_archs_fixed=`echo "$default_archs" | tr - _`
190 for arch in $default_archs_fixed ; do
191 if grep -q '^'$pkg'-[^-]*-[^-]*@'$arch'$' ${target_rootfs}/install/tmp/fullpkglist.query ; then
192 new_pkg="$pkg@$arch"
193 # First found is best match
194 break
195 fi
196 done
197 if [ "$pkg" = "$new_pkg" ]; then
198 # Failed to translate, package not found!
199 echo "$attemptonly: $pkg not found in the base feeds ($default_archs)." >&2
200 if [ "$attemptonly" = "Error" ]; then
201 exit 1
202 fi
203 continue
204 fi
205 fi
206 #echo "$pkg -> $new_pkg" >&2
207 pkgs_to_install="${pkgs_to_install} ${new_pkg}"
208 done
209 export pkgs_to_install
210}
211
62 212
63# 213#
64# Install a bunch of packages using rpm. 214# Install a bunch of packages using rpm.
@@ -96,18 +246,26 @@ package_install_internal_rpm () {
96 local providename="$INSTALL_PROVIDENAME_RPM" 246 local providename="$INSTALL_PROVIDENAME_RPM"
97 local task="$INSTALL_TASK_RPM" 247 local task="$INSTALL_TASK_RPM"
98 248
249 local sdk_mode=""
250 if [ "$1" = "--sdk" ]; then
251 sdk_mode="--sdk"
252 fi
253
99 # Configure internal RPM environment when using Smart 254 # Configure internal RPM environment when using Smart
100 export RPM_ETCRPM=${target_rootfs}/etc/rpm 255 export RPM_ETCRPM=${target_rootfs}/etc/rpm
101 256
102 # Setup temporary directory -- install... 257 # Setup temporary directory -- install...
103 mkdir -p ${target_rootfs}/install 258 rm -rf ${target_rootfs}/install
259 mkdir -p ${target_rootfs}/install/tmp
104 260
261 channel_priority=5
105 if [ "${INSTALL_COMPLEMENTARY_RPM}" != "1" ] ; then 262 if [ "${INSTALL_COMPLEMENTARY_RPM}" != "1" ] ; then
106 # Setup base system configuration 263 # Setup base system configuration
107 mkdir -p ${target_rootfs}/etc/rpm/ 264 mkdir -p ${target_rootfs}/etc/rpm/
108 echo "${platform}${TARGET_VENDOR}-${TARGET_OS}" > ${target_rootfs}/etc/rpm/platform 265 echo "${platform}${TARGET_VENDOR}-${TARGET_OS}" > ${target_rootfs}/etc/rpm/platform
109 if [ ! -z "$platform_extra" ]; then 266 if [ ! -z "$platform_extra" ]; then
110 for pt in $platform_extra ; do 267 for pt in $platform_extra ; do
268 channel_priority=$(expr $channel_priority + 5)
111 case $pt in 269 case $pt in
112 noarch | any | all) 270 noarch | any | all)
113 os="`echo ${TARGET_OS} | sed "s,-.*,,"`.*" 271 os="`echo ${TARGET_OS} | sed "s,-.*,,"`.*"
@@ -178,11 +336,14 @@ EOF
178 smart --data-dir=${target_rootfs}/var/lib/smart config --set rpm-extra-macros._tmppath=/install/tmp 336 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 337 smart --data-dir=${target_rootfs}/var/lib/smart channel --add rpmsys type=rpm-sys -y
180 338
181 for arch in $platform_extra ; do 339 platform_extra_fixed=`echo "$platform_extra" | tr - _`
340 for arch in $platform_extra_fixed ; do
182 if [ -d ${DEPLOY_DIR_RPM}/$arch -a ! -e ${target_rootfs}/install/channel.$arch.stamp ] ; then 341 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 342 smart --data-dir=${target_rootfs}/var/lib/smart channel --add $arch type=rpm-md type=rpm-md baseurl=${DEPLOY_DIR_RPM}/$arch -y
343 smart --data-dir=${target_rootfs}/var/lib/smart channel --set $arch priority=$channel_priority
184 touch ${target_rootfs}/install/channel.$arch.stamp 344 touch ${target_rootfs}/install/channel.$arch.stamp
185 fi 345 fi
346 channel_priority=$(expr $channel_priority - 5)
186 done 347 done
187 fi 348 fi
188 349
@@ -218,14 +379,15 @@ EOF
218 chmod 0755 ${WORKDIR}/scriptlet_wrapper 379 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 380 smart --data-dir=${target_rootfs}/var/lib/smart config --set rpm-extra-macros._cross_scriptlet_wrapper=${WORKDIR}/scriptlet_wrapper
220 381
221 smart --data-dir=${target_rootfs}/var/lib/smart install -y ${package_to_install} ${package_linguas} 382 # Determine what to install
383 translate_oe_to_smart ${sdk_mode} ${package_to_install} ${package_linguas}
222 384
223 if [ ! -z "${package_attemptonly}" ]; then 385 [ -n "$pkgs_to_install" ] && smart --data-dir=${target_rootfs}/var/lib/smart install -y ${pkgs_to_install}
224 echo "Installing attempt only packages..." 386
225 for pkg_name in ${package_attemptonly} ; do 387 if [ -n "${package_attemptonly}" ]; then
226 echo "Attempting $pkg_name..." >> "`dirname ${BB_LOGFILE}`/log.do_${task}_attemptonly.${PID}" 388 translate_oe_to_smart ${sdk_mode} --attemptonly $package_attemptonly
227 smart --data-dir=${target_rootfs}/var/lib/smart install -y $pkg_name >> "`dirname ${BB_LOGFILE}`/log.do_${task}_attemptonly.${PID}" 2>&1 || true 389 echo "Attempting $pkgs_to_install"
228 done 390 smart --data-dir=${target_rootfs}/var/lib/smart install -y $pkgs_to_install >> "`dirname ${BB_LOGFILE}`/log.do_${task}_attemptonly.${PID}" 2>&1 || true
229 fi 391 fi
230} 392}
231 393