diff options
Diffstat (limited to 'meta/classes')
-rw-r--r-- | meta/classes/buildhistory.bbclass | 51 | ||||
-rw-r--r-- | meta/classes/rootfs_deb.bbclass | 28 | ||||
-rw-r--r-- | meta/classes/rootfs_ipk.bbclass | 34 | ||||
-rw-r--r-- | meta/classes/rootfs_rpm.bbclass | 33 |
4 files changed, 52 insertions, 94 deletions
diff --git a/meta/classes/buildhistory.bbclass b/meta/classes/buildhistory.bbclass index f0bf849860..ddb76e8771 100644 --- a/meta/classes/buildhistory.bbclass +++ b/meta/classes/buildhistory.bbclass | |||
@@ -285,48 +285,43 @@ buildhistory_get_image_installed() { | |||
285 | mkdir -p ${BUILDHISTORY_DIR_IMAGE} | 285 | mkdir -p ${BUILDHISTORY_DIR_IMAGE} |
286 | 286 | ||
287 | # Get list of installed packages | 287 | # Get list of installed packages |
288 | list_installed_packages | sort > ${BUILDHISTORY_DIR_IMAGE}/installed-package-names.txt | 288 | pkgcache="${BUILDHISTORY_DIR_IMAGE}/installed-packages.tmp" |
289 | INSTALLED_PKGS=`cat ${BUILDHISTORY_DIR_IMAGE}/installed-package-names.txt` | 289 | list_installed_packages file | sort > $pkgcache |
290 | |||
291 | cat $pkgcache | awk '{ print $1 }' > ${BUILDHISTORY_DIR_IMAGE}/installed-package-names.txt | ||
292 | cat $pkgcache | awk '{ print $2 }' | xargs -n1 basename > ${BUILDHISTORY_DIR_IMAGE}/installed-packages.txt | ||
293 | |||
294 | # Produce dependency graph | ||
295 | # First, filter out characters that cause issues for dot | ||
296 | rootfs_list_installed_depends | sed -e 's:-:_:g' -e 's:\.:_:g' -e 's:+::g' > ${BUILDHISTORY_DIR_IMAGE}/depends.tmp | ||
297 | # Change delimiter from pipe to -> and set style for recommend lines | ||
298 | sed -i -e 's:|: -> :' -e 's:\[REC\]:[style=dotted]:' -e 's:$:;:' ${BUILDHISTORY_DIR_IMAGE}/depends.tmp | ||
299 | # Add header, sorted and de-duped contents and footer and then delete the temp file | ||
300 | echo -e "digraph depends {\n node [shape=plaintext]" > ${BUILDHISTORY_DIR_IMAGE}/depends.dot | ||
301 | cat ${BUILDHISTORY_DIR_IMAGE}/depends.tmp | sort | uniq >> ${BUILDHISTORY_DIR_IMAGE}/depends.dot | ||
302 | echo "}" >> ${BUILDHISTORY_DIR_IMAGE}/depends.dot | ||
303 | rm ${BUILDHISTORY_DIR_IMAGE}/depends.tmp | ||
290 | 304 | ||
291 | # Produce installed package file and size lists and dependency graph | 305 | # Produce installed package sizes list |
292 | echo -n > ${BUILDHISTORY_DIR_IMAGE}/installed-packages.txt | ||
293 | echo -n > ${BUILDHISTORY_DIR_IMAGE}/installed-package-sizes.tmp | 306 | echo -n > ${BUILDHISTORY_DIR_IMAGE}/installed-package-sizes.tmp |
294 | echo -e "digraph depends {\n node [shape=plaintext]" > ${BUILDHISTORY_DIR_IMAGE}/depends.dot | 307 | cat $pkgcache | while read pkg pkgfile |
295 | for pkg in $INSTALLED_PKGS; do | 308 | do |
296 | pkgfile=`get_package_filename $pkg` | ||
297 | echo `basename $pkgfile` >> ${BUILDHISTORY_DIR_IMAGE}/installed-packages.txt | ||
298 | if [ -f $pkgfile ] ; then | 309 | if [ -f $pkgfile ] ; then |
299 | pkgsize=`du -k $pkgfile | head -n1 | awk '{ print $1 }'` | 310 | pkgsize=`du -k $pkgfile | head -n1 | awk '{ print $1 }'` |
300 | echo $pkgsize $pkg >> ${BUILDHISTORY_DIR_IMAGE}/installed-package-sizes.tmp | 311 | echo $pkgsize $pkg >> ${BUILDHISTORY_DIR_IMAGE}/installed-package-sizes.tmp |
301 | fi | 312 | fi |
302 | 313 | done | |
303 | deps=`list_package_depends $pkg` | ||
304 | for dep in $deps ; do | ||
305 | echo "$pkg OPP $dep;" | sed -e 's:-:_:g' -e 's:\.:_:g' -e 's:+::g' | sed 's:OPP:->:g' | ||
306 | done | ||
307 | |||
308 | recs=`list_package_recommends $pkg` | ||
309 | for rec in $recs ; do | ||
310 | echo "$pkg OPP $rec [style=dotted];" | sed -e 's:-:_:g' -e 's:\.:_:g' -e 's:+::g' | sed 's:OPP:->:g' | ||
311 | done | ||
312 | done | sort | uniq >> ${BUILDHISTORY_DIR_IMAGE}/depends.dot | ||
313 | echo "}" >> ${BUILDHISTORY_DIR_IMAGE}/depends.dot | ||
314 | |||
315 | cat ${BUILDHISTORY_DIR_IMAGE}/installed-package-sizes.tmp | sort -n -r | awk '{print $1 "\tKiB " $2}' > ${BUILDHISTORY_DIR_IMAGE}/installed-package-sizes.txt | 314 | cat ${BUILDHISTORY_DIR_IMAGE}/installed-package-sizes.tmp | sort -n -r | awk '{print $1 "\tKiB " $2}' > ${BUILDHISTORY_DIR_IMAGE}/installed-package-sizes.txt |
316 | rm ${BUILDHISTORY_DIR_IMAGE}/installed-package-sizes.tmp | 315 | rm ${BUILDHISTORY_DIR_IMAGE}/installed-package-sizes.tmp |
317 | 316 | ||
317 | # We're now done with the cache, delete it | ||
318 | rm $pkgcache | ||
319 | |||
318 | # Produce some cut-down graphs (for readability) | 320 | # Produce some cut-down graphs (for readability) |
319 | grep -v kernel_image ${BUILDHISTORY_DIR_IMAGE}/depends.dot | grep -v kernel_2 | grep -v kernel_3 > ${BUILDHISTORY_DIR_IMAGE}/depends-nokernel.dot | 321 | grep -v kernel_image ${BUILDHISTORY_DIR_IMAGE}/depends.dot | grep -v kernel_2 | grep -v kernel_3 > ${BUILDHISTORY_DIR_IMAGE}/depends-nokernel.dot |
320 | grep -v libc6 ${BUILDHISTORY_DIR_IMAGE}/depends-nokernel.dot | grep -v libgcc > ${BUILDHISTORY_DIR_IMAGE}/depends-nokernel-nolibc.dot | 322 | grep -v libc6 ${BUILDHISTORY_DIR_IMAGE}/depends-nokernel.dot | grep -v libgcc > ${BUILDHISTORY_DIR_IMAGE}/depends-nokernel-nolibc.dot |
321 | grep -v update_ ${BUILDHISTORY_DIR_IMAGE}/depends-nokernel-nolibc.dot > ${BUILDHISTORY_DIR_IMAGE}/depends-nokernel-nolibc-noupdate.dot | 323 | grep -v update_ ${BUILDHISTORY_DIR_IMAGE}/depends-nokernel-nolibc.dot > ${BUILDHISTORY_DIR_IMAGE}/depends-nokernel-nolibc-noupdate.dot |
322 | grep -v kernel_module ${BUILDHISTORY_DIR_IMAGE}/depends-nokernel-nolibc-noupdate.dot > ${BUILDHISTORY_DIR_IMAGE}/depends-nokernel-nolibc-noupdate-nomodules.dot | 324 | grep -v kernel_module ${BUILDHISTORY_DIR_IMAGE}/depends-nokernel-nolibc-noupdate.dot > ${BUILDHISTORY_DIR_IMAGE}/depends-nokernel-nolibc-noupdate-nomodules.dot |
323 | |||
324 | # Workaround for broken shell function dependencies | ||
325 | if false ; then | ||
326 | get_package_filename | ||
327 | list_package_depends | ||
328 | list_package_recommends | ||
329 | fi | ||
330 | } | 325 | } |
331 | 326 | ||
332 | buildhistory_get_imageinfo() { | 327 | buildhistory_get_imageinfo() { |
diff --git a/meta/classes/rootfs_deb.bbclass b/meta/classes/rootfs_deb.bbclass index a002b1ec02..750a8ca082 100644 --- a/meta/classes/rootfs_deb.bbclass +++ b/meta/classes/rootfs_deb.bbclass | |||
@@ -96,26 +96,24 @@ list_installed_packages() { | |||
96 | if [ "$1" = "arch" ] ; then | 96 | if [ "$1" = "arch" ] ; then |
97 | # Here we want the PACKAGE_ARCH not the deb architecture | 97 | # Here we want the PACKAGE_ARCH not the deb architecture |
98 | ${DPKG_QUERY_COMMAND} -W -f='${Package} ${PackageArch}\n' | 98 | ${DPKG_QUERY_COMMAND} -W -f='${Package} ${PackageArch}\n' |
99 | elif [ "$1" = "file" ] ; then | ||
100 | ${DPKG_QUERY_COMMAND} -W -f='${Package} ${Package}_${Version}_${Architecture}.deb\n' | while read pkg pkgfile | ||
101 | do | ||
102 | fullpath=`find ${DEPLOY_DIR_DEB} -name "$pkgfile" || true` | ||
103 | if [ "$fullpath" = "" ] ; then | ||
104 | echo "$pkg $pkgfile" | ||
105 | else | ||
106 | echo "$pkg $fullpath" | ||
107 | fi | ||
108 | done | ||
99 | else | 109 | else |
100 | ${DPKG_QUERY_COMMAND} -W -f='${Package}\n' | 110 | ${DPKG_QUERY_COMMAND} -W -f='${Package}\n' |
101 | fi | 111 | fi |
102 | } | 112 | } |
103 | 113 | ||
104 | get_package_filename() { | 114 | rootfs_list_installed_depends() { |
105 | fullname=`find ${DEPLOY_DIR_DEB} -name "$1_*.deb" || true` | 115 | # Cheat here a little bit by using the opkg query helper util |
106 | if [ "$fullname" = "" ] ; then | 116 | ${DPKG_QUERY_COMMAND} -W -f='Package: ${Package}\nDepends: ${Depends}\nRecommends: ${Recommends}\n\n' | opkg-query-helper.py |
107 | echo $name | ||
108 | else | ||
109 | echo $fullname | ||
110 | fi | ||
111 | } | ||
112 | |||
113 | list_package_depends() { | ||
114 | ${DPKG_QUERY_COMMAND} -s $1 | grep ^Depends | sed -e 's/^Depends: //' -e 's/,//g' -e 's:([=<>]* [^ )]*)::g' | ||
115 | } | ||
116 | |||
117 | list_package_recommends() { | ||
118 | ${DPKG_QUERY_COMMAND} -s $1 | grep ^Recommends | sed -e 's/^Recommends: //' -e 's/,//g' -e 's:([=<>]* [^ )]*)::g' | ||
119 | } | 117 | } |
120 | 118 | ||
121 | rootfs_install_packages() { | 119 | rootfs_install_packages() { |
diff --git a/meta/classes/rootfs_ipk.bbclass b/meta/classes/rootfs_ipk.bbclass index 7df97a014b..6cdd8f6062 100644 --- a/meta/classes/rootfs_ipk.bbclass +++ b/meta/classes/rootfs_ipk.bbclass | |||
@@ -131,33 +131,23 @@ remove_packaging_data_files() { | |||
131 | list_installed_packages() { | 131 | list_installed_packages() { |
132 | if [ "$1" = "arch" ] ; then | 132 | if [ "$1" = "arch" ] ; then |
133 | opkg-cl ${IPKG_ARGS_POST} status | opkg-query-helper.py -a | 133 | opkg-cl ${IPKG_ARGS_POST} status | opkg-query-helper.py -a |
134 | elif [ "$1" = "file" ] ; then | ||
135 | opkg-cl ${IPKG_ARGS_POST} status | opkg-query-helper.py -f | while read pkg pkgfile | ||
136 | do | ||
137 | fullpath=`find ${DEPLOY_DIR_IPK} -name "$pkgfile" || true` | ||
138 | if [ "$fullpath" = "" ] ; then | ||
139 | echo "$pkg $pkgfile" | ||
140 | else | ||
141 | echo "$pkg $fullpath" | ||
142 | fi | ||
143 | done | ||
134 | else | 144 | else |
135 | opkg-cl ${IPKG_ARGS_POST} list_installed | awk '{ print $1 }' | 145 | opkg-cl ${IPKG_ARGS_POST} list_installed | awk '{ print $1 }' |
136 | fi | 146 | fi |
137 | } | 147 | } |
138 | 148 | ||
139 | get_package_filename() { | 149 | rootfs_list_installed_depends() { |
140 | set +x | 150 | opkg-cl ${IPKG_ARGS_POST} status | opkg-query-helper.py |
141 | info=`opkg-cl ${IPKG_ARGS_POST} info $1 | grep -B 7 -A 7 "^Status.* \(\(installed\)\|\(unpacked\)\)" || true` | ||
142 | name=`echo "${info}" | awk '/^Package/ {printf $2"_"}'` | ||
143 | name=$name`echo "${info}" | awk -F: '/^Version/ {printf $NF"_"}' | sed 's/^\s*//g'` | ||
144 | name=$name`echo "${info}" | awk '/^Archi/ {print $2".ipk"}'` | ||
145 | set -x | ||
146 | |||
147 | fullname=`find ${DEPLOY_DIR_IPK} -name "$name" || true` | ||
148 | if [ "$fullname" = "" ] ; then | ||
149 | echo $name | ||
150 | else | ||
151 | echo $fullname | ||
152 | fi | ||
153 | } | ||
154 | |||
155 | list_package_depends() { | ||
156 | opkg-cl ${IPKG_ARGS_POST} info $1 | grep ^Depends | sed -e 's/^Depends: //' -e 's/,//g' -e 's:([=<>]* [^ )]*)::g' | ||
157 | } | ||
158 | |||
159 | list_package_recommends() { | ||
160 | opkg-cl ${IPKG_ARGS_POST} info $1 | grep ^Recommends | sed -e 's/^Recommends: //' -e 's/,//g' -e 's:([=<>]* [^ )]*)::g' | ||
161 | } | 151 | } |
162 | 152 | ||
163 | rootfs_install_packages() { | 153 | rootfs_install_packages() { |
diff --git a/meta/classes/rootfs_rpm.bbclass b/meta/classes/rootfs_rpm.bbclass index 1cc4a84495..c9258dfe39 100644 --- a/meta/classes/rootfs_rpm.bbclass +++ b/meta/classes/rootfs_rpm.bbclass | |||
@@ -143,40 +143,15 @@ RPM_QUERY_CMD = '${RPM} --root $INSTALL_ROOTFS_RPM -D "_dbpath ${rpmlibdir}" \ | |||
143 | list_installed_packages() { | 143 | list_installed_packages() { |
144 | if [ "$1" = "arch" ] ; then | 144 | if [ "$1" = "arch" ] ; then |
145 | ${RPM_QUERY_CMD} -qa --qf "[%{NAME} %{ARCH}\n]" | 145 | ${RPM_QUERY_CMD} -qa --qf "[%{NAME} %{ARCH}\n]" |
146 | elif [ "$1" = "file" ] ; then | ||
147 | ${RPM_QUERY_CMD} -qa --qf "[%{NAME} %{PACKAGEORIGIN}\n]" | ||
146 | else | 148 | else |
147 | ${RPM_QUERY_CMD} -qa --qf "[%{NAME}\n]" | 149 | ${RPM_QUERY_CMD} -qa --qf "[%{NAME}\n]" |
148 | fi | 150 | fi |
149 | } | 151 | } |
150 | 152 | ||
151 | get_package_filename() { | 153 | rootfs_list_installed_depends() { |
152 | resolve_package_rpm ${RPMCONF_TARGET_BASE}-base_archs.conf $1 | 154 | rpmresolve -d $INSTALL_ROOTFS_RPM/${rpmlibdir} |
153 | } | ||
154 | |||
155 | list_package_depends() { | ||
156 | pkglist=`list_installed_packages` | ||
157 | |||
158 | # REQUIRE* lists "soft" requirements (which we know as recommends and RPM refers to | ||
159 | # as "suggests") so filter these out with the help of awk | ||
160 | for req in `${RPM_QUERY_CMD} -q --qf "[%{REQUIRENAME} %{REQUIREFLAGS}\n]" $1 | awk '{ if( and($2, 0x80000) == 0) print $1 }'`; do | ||
161 | if echo "$req" | grep -q "^rpmlib" ; then continue ; fi | ||
162 | |||
163 | realpkg="" | ||
164 | for dep in $pkglist; do | ||
165 | if [ "$dep" = "$req" ] ; then | ||
166 | realpkg="1" | ||
167 | echo $req | ||
168 | break | ||
169 | fi | ||
170 | done | ||
171 | |||
172 | if [ "$realdep" = "" ] ; then | ||
173 | ${RPM_QUERY_CMD} -q --whatprovides $req --qf "%{NAME}\n" | ||
174 | fi | ||
175 | done | ||
176 | } | ||
177 | |||
178 | list_package_recommends() { | ||
179 | ${RPM_QUERY_CMD} -q --suggests $1 | ||
180 | } | 155 | } |
181 | 156 | ||
182 | rootfs_install_packages() { | 157 | rootfs_install_packages() { |