merge of '15eabf62626d7b5980c5f03a6eb67c7cf0c49ccb'
[openembedded.git] / 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 DEPENDS_prepend="ipkg-native ipkg-utils-native fakeroot-native "
9 DEPENDS_append=" ${EXTRA_IMAGEDEPENDS}"
10 RDEPENDS += "ipkg ipkg-collateral"
11
12 IPKG_ARGS = "-f ${T}/ipkg.conf -o ${IMAGE_ROOTFS}"
13
14 PACKAGE_INSTALL += "ipkg ipkg-collateral"
15
16 rootfs_ipk_do_indexes () {
17         set -x
18
19         ipkgarchs="${PACKAGE_ARCHS}"
20
21         if [ -z "${DEPLOY_KEEP_PACKAGES}" ]; then
22                 touch ${DEPLOY_DIR_IPK}/Packages
23                 ipkg-make-index -r ${DEPLOY_DIR_IPK}/Packages -p ${DEPLOY_DIR_IPK}/Packages -l ${DEPLOY_DIR_IPK}/Packages.filelist -m ${DEPLOY_DIR_IPK}
24         fi
25
26         for arch in $ipkgarchs; do
27                 if [ -z "${DEPLOY_KEEP_PACKAGES}" ]; then
28                         if [ -e ${DEPLOY_DIR_IPK}/$arch/ ] ; then 
29                                 touch ${DEPLOY_DIR_IPK}/$arch/Packages
30                                 ipkg-make-index -r ${DEPLOY_DIR_IPK}/$arch/Packages -p ${DEPLOY_DIR_IPK}/$arch/Packages -l ${DEPLOY_DIR_IPK}/$arch/Packages.filelist -m ${DEPLOY_DIR_IPK}/$arch/
31                         fi
32                 fi
33         done
34 }
35
36 fakeroot rootfs_ipk_do_rootfs () {
37         set -x
38
39         rootfs_ipk_do_indexes
40
41         mkdir -p ${IMAGE_ROOTFS}/dev
42         mkdir -p ${T}
43
44         #Add deploy/ipk as well for backward compat
45         echo "src oe file:${DEPLOY_DIR_IPK}" > ${T}/ipkg.conf
46         ipkgarchs="${PACKAGE_ARCHS}"
47
48         priority=1
49         for arch in $ipkgarchs; do
50                 echo "arch $arch $priority" >> ${T}/ipkg.conf
51                 priority=$(expr $priority + 5)
52                 if [ -e ${DEPLOY_DIR_IPK}/$arch/Packages ] ; then
53                         echo "src oe-$arch file:${DEPLOY_DIR_IPK}/$arch" >> ${T}/ipkg.conf
54             fi
55         done
56         ipkg-cl ${IPKG_ARGS} update
57         if [ ! -z "${LINGUAS_INSTALL}" ]; then
58                 ipkg-cl ${IPKG_ARGS} install glibc-localedata-i18n
59                 for i in ${LINGUAS_INSTALL}; do
60                         ipkg-cl ${IPKG_ARGS} install $i
61                 done
62         fi
63         if [ ! -z "${PACKAGE_INSTALL}" ]; then
64                 ipkg-cl ${IPKG_ARGS} install ${PACKAGE_INSTALL}
65         fi
66
67         export D=${IMAGE_ROOTFS}
68         export OFFLINE_ROOT=${IMAGE_ROOTFS}
69         export IPKG_OFFLINE_ROOT=${IMAGE_ROOTFS}
70         mkdir -p ${IMAGE_ROOTFS}/etc/ipkg/
71         grep "^arch" ${T}/ipkg.conf >${IMAGE_ROOTFS}/etc/ipkg/arch.conf
72
73         for i in ${IMAGE_ROOTFS}${libdir}/ipkg/info/*.preinst; do
74                 if [ -f $i ] && ! sh $i; then
75                         ipkg-cl ${IPKG_ARGS} flag unpacked `basename $i .preinst`
76                 fi
77         done
78         for i in ${IMAGE_ROOTFS}${libdir}/ipkg/info/*.postinst; do
79                 if [ -f $i ] && ! sh $i configure; then
80                         ipkg-cl ${IPKG_ARGS} flag unpacked `basename $i .postinst`
81                 fi
82         done
83
84         install -d ${IMAGE_ROOTFS}/${sysconfdir}
85         echo ${BUILDNAME} > ${IMAGE_ROOTFS}/${sysconfdir}/version
86
87         ${ROOTFS_POSTPROCESS_COMMAND}
88         
89         log_check rootfs        
90 }
91
92 rootfs_ipk_log_check() {
93         target="$1"
94         lf_path="$2"
95
96         lf_txt="`cat $lf_path`"
97         for keyword_die in "Cannot find package" "exit 1" ERR Fail
98         do                              
99                 if (echo "$lf_txt" | grep -v log_check | grep "$keyword_die") >/dev/null 2>&1
100                 then
101                         echo "log_check: There were error messages in the logfile"
102                         echo -e "log_check: Matched keyword: [$keyword_die]\n"
103                         echo "$lf_txt" | grep -v log_check | grep -i "$keyword_die" -C1
104                         echo ""
105                         do_exit=1                               
106                 fi
107         done
108         test "$do_exit" = 1 && exit 1
109         true
110 }