diff options
Diffstat (limited to 'meta/classes/rootfs_rpm.bbclass')
| -rw-r--r-- | meta/classes/rootfs_rpm.bbclass | 148 |
1 files changed, 148 insertions, 0 deletions
diff --git a/meta/classes/rootfs_rpm.bbclass b/meta/classes/rootfs_rpm.bbclass new file mode 100644 index 0000000000..83ceccf4f5 --- /dev/null +++ b/meta/classes/rootfs_rpm.bbclass | |||
| @@ -0,0 +1,148 @@ | |||
| 1 | # | ||
| 2 | # Creates a root filesystem out of rpm packages | ||
| 3 | # | ||
| 4 | |||
| 5 | ROOTFS_PKGMANAGE = "opkg" | ||
| 6 | # "rpm" "yum" | ||
| 7 | ROOTFS_PKGMANAGE_BOOTSTRAP = "run-postinsts" | ||
| 8 | |||
| 9 | do_rootfs[depends] += "rpm-native:do_populate_staging yum-native:do_populate_staging createrepo-native:do_populate_staging fakechroot-native:do_populate_staging" | ||
| 10 | do_rootfs[recrdeptask] += "do_package_write_rpm" | ||
| 11 | |||
| 12 | YUMCONF = "${IMAGE_ROOTFS}/etc/yum.conf" | ||
| 13 | YUMARGS = "-c ${YUMCONF} --installroot ${IMAGE_ROOTFS}" | ||
| 14 | |||
| 15 | fakeroot rootfs_rpm_do_rootfs () { | ||
| 16 | set -x | ||
| 17 | |||
| 18 | # Update the repository index | ||
| 19 | createrepo ${DEPLOY_DIR_RPM} | ||
| 20 | |||
| 21 | mkdir -p ${IMAGE_ROOTFS}/etc/rpm/ | ||
| 22 | #echo "arm" > ${IMAGE_ROOTFS}/etc/rpm/platform | ||
| 23 | |||
| 24 | # Copy the packages into the target image | ||
| 25 | # Ugly ugly ugly but rpm is braindead and can't see outside the chroot | ||
| 26 | # when installing :( | ||
| 27 | mkdir -p ${IMAGE_ROOTFS}${DEPLOY_DIR_RPM} | ||
| 28 | cp -r ${DEPLOY_DIR_RPM}/* ${IMAGE_ROOTFS}${DEPLOY_DIR_RPM}/ | ||
| 29 | |||
| 30 | # Generate an apprpriate yum.conf | ||
| 31 | rm -rf ${YUMCONF} | ||
| 32 | cat > ${YUMCONF} << EOF | ||
| 33 | [main] | ||
| 34 | cachedir=/var/cache2/yum | ||
| 35 | keepcache=1 | ||
| 36 | debuglevel=10 | ||
| 37 | logfile=/var/log2/yum.log | ||
| 38 | exactarch=0 | ||
| 39 | obsoletes=1 | ||
| 40 | tolerant=1 | ||
| 41 | arch=arm | ||
| 42 | basearch=arm | ||
| 43 | |||
| 44 | [poky-feed] | ||
| 45 | name = Poky RPM Feed | ||
| 46 | baseurl=file://${DEPLOY_DIR_RPM} | ||
| 47 | gpgcheck=0 | ||
| 48 | |||
| 49 | EOF | ||
| 50 | #mkdir -p ${IMAGE_ROOTFS}/var/lib/rpm | ||
| 51 | #rpm --root ${IMAGE_ROOTFS} --initdb | ||
| 52 | #rpm --root ${IMAGE_ROOTFS} --dbpath ${IMAGE_ROOTFS}/var/lib/rpm -ihv --nodeps --ignoreos | ||
| 53 | #rpm -ihv --root ${IMAGE_ROOTFS} ${PACKAGE_INSTALL} | ||
| 54 | |||
| 55 | #package_update_index_rpm | ||
| 56 | #package_generate_ipkg_conf | ||
| 57 | |||
| 58 | # Uclibc builds don't provide this stuff... | ||
| 59 | if [ x${TARGET_OS} = "xlinux" ] || [ x${TARGET_OS} = "xlinux-gnueabi" ] ; then | ||
| 60 | if [ ! -z "${LINGUAS_INSTALL}" ]; then | ||
| 61 | for i in ${LINGUAS_INSTALL}; do | ||
| 62 | fakechroot yum ${YUMARGS} -y install $i | ||
| 63 | done | ||
| 64 | fi | ||
| 65 | fi | ||
| 66 | if [ ! -z "${PACKAGE_INSTALL}" ]; then | ||
| 67 | fakechroot yum ${YUMARGS} -y install ${PACKAGE_INSTALL} | ||
| 68 | fi | ||
| 69 | |||
| 70 | #export D=${IMAGE_ROOTFS} | ||
| 71 | #export OFFLINE_ROOT=${IMAGE_ROOTFS} | ||
| 72 | #export IPKG_OFFLINE_ROOT=${IMAGE_ROOTFS} | ||
| 73 | #export OPKG_OFFLINE_ROOT=${IPKG_OFFLINE_ROOT} | ||
| 74 | |||
| 75 | #mkdir -p ${IMAGE_ROOTFS}/etc/opkg/ | ||
| 76 | #grep "^arch" ${IPKGCONF_TARGET} >${IMAGE_ROOTFS}/etc/opkg/arch.conf | ||
| 77 | |||
| 78 | ${ROOTFS_POSTINSTALL_COMMAND} | ||
| 79 | |||
| 80 | #for i in ${IMAGE_ROOTFS}${libdir}/opkg/info/*.preinst; do | ||
| 81 | # if [ -f $i ] && ! sh $i; then | ||
| 82 | # opkg-cl ${IPKG_ARGS} flag unpacked `basename $i .preinst` | ||
| 83 | # fi | ||
| 84 | #done | ||
| 85 | #for i in ${IMAGE_ROOTFS}${libdir}/opkg/info/*.postinst; do | ||
| 86 | # if [ -f $i ] && ! sh $i configure; then | ||
| 87 | # opkg-cl ${IPKG_ARGS} flag unpacked `basename $i .postinst` | ||
| 88 | # fi | ||
| 89 | #done | ||
| 90 | |||
| 91 | install -d ${IMAGE_ROOTFS}/${sysconfdir} | ||
| 92 | echo ${BUILDNAME} > ${IMAGE_ROOTFS}/${sysconfdir}/version | ||
| 93 | |||
| 94 | ${ROOTFS_POSTPROCESS_COMMAND} | ||
| 95 | |||
| 96 | rm -rf ${IMAGE_ROOTFS}/var/cache2/ | ||
| 97 | rm -rf ${IMAGE_ROOTFS}/var/run2/ | ||
| 98 | rm -rf ${IMAGE_ROOTFS}/var/log2/ | ||
| 99 | |||
| 100 | log_check rootfs | ||
| 101 | } | ||
| 102 | |||
| 103 | rootfs_rpm_log_check() { | ||
| 104 | target="$1" | ||
| 105 | lf_path="$2" | ||
| 106 | |||
| 107 | lf_txt="`cat $lf_path`" | ||
| 108 | for keyword_die in "Cannot find package" "exit 1" ERR Fail | ||
| 109 | do | ||
| 110 | if (echo "$lf_txt" | grep -v log_check | grep "$keyword_die") >/dev/null 2>&1 | ||
| 111 | then | ||
| 112 | echo "log_check: There were error messages in the logfile" | ||
| 113 | echo -e "log_check: Matched keyword: [$keyword_die]\n" | ||
| 114 | echo "$lf_txt" | grep -v log_check | grep -C 5 -i "$keyword_die" | ||
| 115 | echo "" | ||
| 116 | do_exit=1 | ||
| 117 | fi | ||
| 118 | done | ||
| 119 | test "$do_exit" = 1 && exit 1 | ||
| 120 | true | ||
| 121 | } | ||
| 122 | |||
| 123 | remove_packaging_data_files() { | ||
| 124 | rm -rf ${IMAGE_ROOTFS}/usr/lib/opkg/ | ||
| 125 | } | ||
| 126 | |||
| 127 | install_all_locales() { | ||
| 128 | |||
| 129 | PACKAGES_TO_INSTALL="" | ||
| 130 | |||
| 131 | INSTALLED_PACKAGES=`grep ^Package: ${IMAGE_ROOTFS}${libdir}/opkg/status |sed "s/^Package: //"|egrep -v -- "(-locale-|-dev$|-doc$|^kernel|^glibc|^ttf|^task|^perl|^python)"` | ||
| 132 | |||
| 133 | for pkg in $INSTALLED_PACKAGES | ||
| 134 | do | ||
| 135 | for lang in ${IMAGE_LOCALES} | ||
| 136 | do | ||
| 137 | if [ `opkg-cl ${IPKG_ARGS} info $pkg-locale-$lang | wc -l` -gt 2 ] | ||
| 138 | then | ||
| 139 | PACKAGES_TO_INSTALL="$PACKAGES_TO_INSTALL $pkg-locale-$lang" | ||
| 140 | fi | ||
| 141 | done | ||
| 142 | done | ||
| 143 | if [ "$PACKAGES_TO_INSTALL" != "" ] | ||
| 144 | then | ||
| 145 | opkg-cl ${IPKG_ARGS} install $PACKAGES_TO_INSTALL | ||
| 146 | fi | ||
| 147 | } | ||
| 148 | |||
