diff options
Diffstat (limited to 'meta/classes/rootfs_deb.bbclass')
| -rw-r--r-- | meta/classes/rootfs_deb.bbclass | 192 |
1 files changed, 78 insertions, 114 deletions
diff --git a/meta/classes/rootfs_deb.bbclass b/meta/classes/rootfs_deb.bbclass index 705b363d7..6c9767f98 100644 --- a/meta/classes/rootfs_deb.bbclass +++ b/meta/classes/rootfs_deb.bbclass @@ -2,158 +2,122 @@ # Copyright 2006-2007 Openedhand Ltd. # -ROOTFS_PKGMANAGE = "run-postinsts dpkg" +ROOTFS_PKGMANAGE = "run-postinsts dpkg apt" ROOTFS_PKGMANAGE_BOOTSTRAP = "run-postinsts" -do_rootfs[depends] += "dpkg-native:do_populate_staging apt-native:do_populate_staging" +do_rootfs[depends] += "dpkg-native:do_populate_sysroot apt-native:do_populate_sysroot" do_rootfs[recrdeptask] += "do_package_write_deb" +DEB_POSTPROCESS_COMMANDS = "rootfs_install_all_locales; " + +opkglibdir = "${localstatedir}/lib/opkg" + +deb_package_setflag() { + sed -i -e "/^Package: $2\$/{n; s/Status: install ok .*/Status: install ok $1/;}" ${IMAGE_ROOTFS}/var/lib/dpkg/status +} + +deb_package_getflag() { + cat ${IMAGE_ROOTFS}/var/lib/dpkg/status | sed -n -e "/^Package: $2\$/{n; s/Status: install ok .*/$1/; p}" +} + fakeroot rootfs_deb_do_rootfs () { set +e - mkdir -p ${IMAGE_ROOTFS}/var/dpkg/info - mkdir -p ${IMAGE_ROOTFS}/var/dpkg/updates - rm -f ${STAGING_ETCDIR_NATIVE}/apt/sources.list.rev - rm -f ${STAGING_ETCDIR_NATIVE}/apt/preferences - > ${IMAGE_ROOTFS}/var/dpkg/status - > ${IMAGE_ROOTFS}/var/dpkg/available - mkdir -p ${IMAGE_ROOTFS}/var/dpkg/alternatives + mkdir -p ${IMAGE_ROOTFS}/var/lib/dpkg/alternatives - priority=1 - for arch in ${PACKAGE_ARCHS}; do - if [ ! -d ${DEPLOY_DIR_DEB}/$arch ]; then - continue; - fi - cd ${DEPLOY_DIR_DEB}/$arch - # if [ -z "${DEPLOY_KEEP_PACKAGES}" ]; then - rm -f Packages.gz Packages Packages.bz2 - # fi - dpkg-scanpackages . | bzip2 > Packages.bz2 - echo "Label: $arch" > Release - - echo "deb file:${DEPLOY_DIR_DEB}/$arch/ ./" >> ${STAGING_ETCDIR_NATIVE}/apt/sources.list.rev - (echo "Package: *" - echo "Pin: release l=$arch" - echo "Pin-Priority: $((800 + $priority))" - echo) >> ${STAGING_ETCDIR_NATIVE}/apt/preferences - priority=$(expr $priority + 5) - done + # update index + package_update_index_deb - tac ${STAGING_ETCDIR_NATIVE}/apt/sources.list.rev > ${STAGING_ETCDIR_NATIVE}/apt/sources.list + #install packages + export INSTALL_ROOTFS_DEB="${IMAGE_ROOTFS}" + export INSTALL_BASEARCH_DEB="${DPKG_ARCH}" + export INSTALL_ARCHS_DEB="${PACKAGE_ARCHS}" + export INSTALL_PACKAGES_NORMAL_DEB="${PACKAGE_INSTALL}" + export INSTALL_PACKAGES_ATTEMPTONLY_DEB="${PACKAGE_INSTALL_ATTEMPTONLY}" + export INSTALL_PACKAGES_LINGUAS_DEB="${LINGUAS_INSTALL}" + export INSTALL_TASK_DEB="rootfs" - cat "${STAGING_ETCDIR_NATIVE}/apt/apt.conf.sample" \ - | sed -e 's#Architecture ".*";#Architecture "${DPKG_ARCH}";#' \ - > "${STAGING_ETCDIR_NATIVE}/apt/apt-rootfs.conf" + package_install_internal_deb + ${DEB_POSTPROCESS_COMMANDS} - export APT_CONFIG="${STAGING_ETCDIR_NATIVE}/apt/apt-rootfs.conf" export D=${IMAGE_ROOTFS} export OFFLINE_ROOT=${IMAGE_ROOTFS} export IPKG_OFFLINE_ROOT=${IMAGE_ROOTFS} export OPKG_OFFLINE_ROOT=${IMAGE_ROOTFS} - apt-get update - - _flag () { - sed -i -e "/^Package: $2\$/{n; s/Status: install ok .*/Status: install ok $1/;}" ${IMAGE_ROOTFS}/var/dpkg/status - } - _getflag () { - cat ${IMAGE_ROOTFS}/var/dpkg/status | sed -n -e "/^Package: $2\$/{n; s/Status: install ok .*/$1/; p}" - } - - if [ x${TARGET_OS} = "xlinux" ] || [ x${TARGET_OS} = "xlinux-gnueabi" ] ; then - if [ ! -z "${LINGUAS_INSTALL}" ]; then - apt-get install glibc-localedata-i18n --force-yes --allow-unauthenticated - if [ $? -ne 0 ]; then - exit 1 - fi - for i in ${LINGUAS_INSTALL}; do - apt-get install $i --force-yes --allow-unauthenticated - if [ $? -ne 0 ]; then - exit 1 - fi - done - fi - fi - - if [ ! -z "${PACKAGE_INSTALL}" ]; then - for i in ${PACKAGE_INSTALL}; do - apt-get install $i --force-yes --allow-unauthenticated - if [ $? -ne 0 ]; then - exit 1 - fi - done - fi - - rm ${WORKDIR}/temp/log.do_$target-attemptonly.${PID} - if [ ! -z "${PACKAGE_INSTALL_ATTEMPTONLY}" ]; then - for i in ${PACKAGE_INSTALL_ATTEMPTONLY}; do - apt-get install $i --force-yes --allow-unauthenticated >> ${WORKDIR}/temp/log.do_rootfs-attemptonly.${PID} || true - done - fi - - find ${IMAGE_ROOTFS} -name \*.dpkg-new | for i in `cat`; do - mv $i `echo $i | sed -e's,\.dpkg-new$,,'` - done - - install -d ${IMAGE_ROOTFS}/${sysconfdir} - echo ${BUILDNAME} > ${IMAGE_ROOTFS}/${sysconfdir}/version - - # Mark all packages installed - sed -i -e "s/Status: install ok unpacked/Status: install ok installed/;" ${IMAGE_ROOTFS}/var/dpkg/status - # Attempt to run preinsts # Mark packages with preinst failures as unpacked - for i in ${IMAGE_ROOTFS}/var/dpkg/info/*.preinst; do + for i in ${IMAGE_ROOTFS}/var/lib/dpkg/info/*.preinst; do if [ -f $i ] && ! sh $i; then - _flag unpacked `basename $i .preinst` + deb_package_setflag unpacked `basename $i .preinst` fi done # Attempt to run postinsts # Mark packages with postinst failures as unpacked - for i in ${IMAGE_ROOTFS}/var/dpkg/info/*.postinst; do + for i in ${IMAGE_ROOTFS}/var/lib/dpkg/info/*.postinst; do if [ -f $i ] && ! sh $i configure; then - _flag unpacked `basename $i .postinst` + deb_package_setflag unpacked `basename $i .postinst` fi done set -e + install -d ${IMAGE_ROOTFS}/${sysconfdir} + echo ${BUILDNAME} > ${IMAGE_ROOTFS}/${sysconfdir}/version + # Hacks to allow opkg's update-alternatives and opkg to coexist for now - mkdir -p ${IMAGE_ROOTFS}/usr/lib/opkg - if [ -e ${IMAGE_ROOTFS}/var/dpkg/alternatives ]; then - rmdir ${IMAGE_ROOTFS}/var/dpkg/alternatives + mkdir -p ${IMAGE_ROOTFS}${opkglibdir} + if [ -e ${IMAGE_ROOTFS}/var/lib/dpkg/alternatives ]; then + rmdir ${IMAGE_ROOTFS}/var/lib/dpkg/alternatives fi - ln -s /usr/lib/opkg/alternatives ${IMAGE_ROOTFS}/var/dpkg/alternatives - ln -s /var/dpkg/info ${IMAGE_ROOTFS}/usr/lib/opkg/info - ln -s /var/dpkg/status ${IMAGE_ROOTFS}/usr/lib/opkg/status + ln -s ${opkglibdir}/alternatives ${IMAGE_ROOTFS}/var/lib/dpkg/alternatives + ln -s /var/lib/dpkg/info ${IMAGE_ROOTFS}${opkglibdir}/info + ln -s /var/lib/dpkg/status ${IMAGE_ROOTFS}${opkglibdir}/status ${ROOTFS_POSTPROCESS_COMMAND} - log_check rootfs + log_check rootfs +} + +remove_packaging_data_files() { + rm -rf ${IMAGE_ROOTFS}${opkglibdir} + rm -rf ${IMAGE_ROOTFS}/usr/dpkg/ } -rootfs_deb_log_check() { - target="$1" - lf_path="$2" +DPKG_QUERY_COMMAND = "${STAGING_BINDIR_NATIVE}/dpkg --admindir=${IMAGE_ROOTFS}/var/lib/dpkg" - lf_txt="`cat $lf_path`" - for keyword_die in "E:" - do - if (echo "$lf_txt" | grep -v log_check | grep "$keyword_die") >/dev/null 2>&1 - then - echo "log_check: There were error messages in the logfile" - echo -e "log_check: Matched keyword: [$keyword_die]\n" - echo "$lf_txt" | grep -v log_check | grep -C 5 -i "$keyword_die" - echo "" - do_exit=1 - fi - done - test "$do_exit" = 1 && exit 1 - true +list_installed_packages() { + ${DPKG_QUERY_COMMAND} -l | grep ^ii | awk '{ print $2 }' } -remove_packaging_data_files() { - rm -rf ${IMAGE_ROOTFS}/usr/lib/opkg/ - rm -rf ${IMAGE_ROOTFS}/usr/dpkg/ +get_package_filename() { + fullname=`find ${DEPLOY_DIR_DEB} -name "$1_*.deb" || true` + if [ "$fullname" = "" ] ; then + echo $name + else + echo $fullname + fi +} + +list_package_depends() { + ${DPKG_QUERY_COMMAND} -s $1 | grep ^Depends | sed -e 's/^Depends: //' -e 's/,//g' -e 's:([=<>]* [^ )]*)::g' +} + +list_package_recommends() { + ${DPKG_QUERY_COMMAND} -s $1 | grep ^Recommends | sed -e 's/^Recommends: //' -e 's/,//g' -e 's:([=<>]* [^ )]*)::g' +} + +rootfs_check_package_exists() { + if [ `apt-cache showpkg $1 | wc -l` -gt 2 ]; then + echo $1 + fi +} + +rootfs_install_packages() { + ${STAGING_BINDIR_NATIVE}/apt-get install $@ --force-yes --allow-unauthenticated + + for pkg in $@ ; do + deb_package_setflag installed $pkg + done } |
