merge of '613d006a5a3c8c6629c2a0b9a905bfc4a80484ca'
[vuplus_openembedded] / classes / rootfs_ipk.bbclass
1 #
2 # Creates a root filesystem out of IPKs
3 #
4 # This rootfs can be mounted via root-nfs or it can be put into an cramfs/jffs etc.
5 # See image.bbclass for a usage of this.
6 #
7
8 do_rootfs[depends] += "opkg-native:do_populate_staging ipkg-utils-native:do_populate_staging"
9 do_rootfs[recrdeptask] += "do_package_write_ipk"
10
11 IPKG_ARGS = "-f ${IPKGCONF_TARGET} -o ${IMAGE_ROOTFS} ${@base_conditional("PACKAGE_INSTALL_NO_DEPS", "1", "-nodeps", "", d)}"
12
13 DISTRO_EXTRA_RDEPENDS += " opkg opkg-collateral "
14 PACKAGE_INSTALL_NO_DEPS ?= "0"
15
16 fakeroot rootfs_ipk_do_rootfs () {
17         set -x
18
19         package_update_index_ipk
20         package_generate_ipkg_conf
21
22         mkdir -p ${T}
23         mkdir -p ${IMAGE_ROOTFS}${libdir}/opkg/
24         opkg-cl ${IPKG_ARGS} update
25
26         # Uclibc builds don't provide this stuff...
27         if [ x${TARGET_OS} = "xlinux" ] || [ x${TARGET_OS} = "xlinux-gnueabi" ] ; then 
28                 if [ ! -z "${LINGUAS_INSTALL}" ]; then
29                         opkg-cl ${IPKG_ARGS} install glibc-localedata-i18n
30                         for i in ${LINGUAS_INSTALL}; do
31                                 opkg-cl ${IPKG_ARGS} install $i 
32                         done
33                 fi
34         fi
35         if [ ! -z "${PACKAGE_INSTALL}" ]; then
36                 opkg-cl ${IPKG_ARGS} install ${PACKAGE_INSTALL}
37         fi
38
39         export D=${IMAGE_ROOTFS}
40         export OFFLINE_ROOT=${IMAGE_ROOTFS}
41         export IPKG_OFFLINE_ROOT=${IMAGE_ROOTFS}
42         export OPKG_OFFLINE_ROOT=${IPKG_OFFLINE_ROOT}
43         
44         mkdir -p ${IMAGE_ROOTFS}${sysconfdir}/opkg/
45         grep "^arch" ${IPKGCONF_TARGET} >${IMAGE_ROOTFS}${sysconfdir}/opkg/arch.conf
46
47         for i in ${IMAGE_ROOTFS}${libdir}/opkg/info/*.preinst; do
48                 if [ -f $i ] && ! sh $i; then
49                         opkg-cl ${IPKG_ARGS} flag unpacked `basename $i .preinst`
50                 fi
51         done
52         for i in ${IMAGE_ROOTFS}${libdir}/opkg/info/*.postinst; do
53                 if [ -f $i ] && ! sh $i configure; then
54                         opkg-cl ${IPKG_ARGS} flag unpacked `basename $i .postinst`
55                 fi
56         done
57
58         install -d ${IMAGE_ROOTFS}/${sysconfdir}
59         echo ${BUILDNAME} > ${IMAGE_ROOTFS}/${sysconfdir}/version
60
61         rm -f ${IMAGE_ROOTFS}${libdir}/opkg/lists/*
62         
63         # Keep these lines until package manager selection is implemented
64         ln -s opkg ${IMAGE_ROOTFS}${sysconfdir}/ipkg
65         ln -s opkg ${IMAGE_ROOTFS}${libdir}/ipkg
66         
67         ${ROOTFS_POSTPROCESS_COMMAND}
68         
69         log_check rootfs        
70 }
71
72 rootfs_ipk_log_check() {
73         target="$1"
74         lf_path="$2"
75
76         lf_txt="`cat $lf_path`"
77         for keyword_die in "Cannot find package" "exit 1" ERR Fail
78         do                              
79                 if (echo "$lf_txt" | grep -v log_check | grep "$keyword_die") >/dev/null 2>&1
80                 then
81                         echo "log_check: There were error messages in the logfile"
82                         printf "log_check: Matched keyword: [$keyword_die]\n"
83                         echo "$lf_txt" | grep -v log_check | grep -i "$keyword_die" -C1
84                         echo ""
85                         do_exit=1                               
86                 fi
87         done
88         test "$do_exit" = 1 && exit 1
89         true
90 }
91
92 remove_packaging_data_files() {
93         rm -rf ${IMAGE_ROOTFS}${libdir}/opkg/
94 }