disapproval of revision '5a21074748883be7137fee8d724cd0787c547ae8'
[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 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         test "${DEPLOY_ENABLE_OEFEED}" -gt 0 && rootfs_create_combined_feed || /bin/true
36 }
37
38 rootfs_create_combined_feed() {
39
40         # Create deploy/oe-feed which can be used as a feed in ipkg.conf
41         # Set DEPLOY_ENABLE_OEFEED=2 to rebuild Packages with ipkg-make-index (very slow)
42         # Set DEPLOY_ENABLE_OEFEED=1 to use the Packages files from ipk/ARCH/ (fast)
43
44         mkdir -p "${DEPLOY_DIR}/oe-feed"        
45         cd "${DEPLOY_DIR}/oe-feed" || exit 1
46
47         # To catch deleted / changed packages, we have to completly rebuild
48         # the symlinks every time.              
49         test -d "${DEPLOY_DIR}/oe-feed" && rm -rf "${DEPLOY_DIR}/oe-feed/"
50
51         case "${DEPLOY_ENABLE_OEFEED}" in
52         1)      MAKE_INDEX_TYPE="fast" ;;
53         *)      MAKE_INDEX_TYPE="traditional" ;;
54         esac
55         
56         for arch in $ipkgarchs
57         do
58                 if test -d ${DEPLOY_DIR_IPK}/$arch/
59                 then                    
60                         # Note: *.ipk won't work (too many arguments)
61                         for ipk in `ls -1 "${DEPLOY_DIR_IPK}/$arch/" | grep ".ipk$"`
62                         do
63                                 ln -s "${DEPLOY_DIR_IPK}/$arch/$ipk" .
64                         done
65                 fi
66                         
67                 # Doesn't get faster than that =)       
68                 test "$MAKE_INDEX_TYPE" = "fast" && cat ${DEPLOY_DIR_IPK}/$arch/Packages >> ./Packages
69         done
70
71         if test "$MAKE_INDEX_TYPE" = "traditional"
72         then    
73                 rm -f ${DEPLOY_DIR}/oe-feed/Packages
74                 touch ${DEPLOY_DIR}/oe-feed/Packages
75                 ipkg-make-index -r ${DEPLOY_DIR}/oe-feed/Packages -p ${DEPLOY_DIR}/oe-feed/Packages -l ${DEPLOY_DIR}/oe-feed/Packages.filelist -m ${DEPLOY_DIR}/oe-feed/
76         fi
77 }
78
79 fakeroot rootfs_ipk_do_rootfs () {
80         set -x
81
82         rootfs_ipk_do_indexes
83
84         mkdir -p ${IMAGE_ROOTFS}/dev
85         mkdir -p ${T}
86
87         #Add deploy/ipk as well for backward compat
88         echo "src oe file:${DEPLOY_DIR_IPK}" > ${T}/ipkg.conf
89         ipkgarchs="${PACKAGE_ARCHS}"
90
91         priority=1
92         for arch in $ipkgarchs; do
93                 echo "arch $arch $priority" >> ${T}/ipkg.conf
94                 priority=$(expr $priority + 5)
95                 if [ -e ${DEPLOY_DIR_IPK}/$arch/Packages ] ; then
96                         echo "src oe-$arch file:${DEPLOY_DIR_IPK}/$arch" >> ${T}/ipkg.conf
97             fi
98         done
99         ipkg-cl ${IPKG_ARGS} update
100         if [ ! -z "${LINGUAS_INSTALL}" ]; then
101                 ipkg-cl ${IPKG_ARGS} install glibc-localedata-i18n
102                 for i in ${LINGUAS_INSTALL}; do
103                         ipkg-cl ${IPKG_ARGS} install $i
104                 done
105         fi
106         if [ ! -z "${PACKAGE_INSTALL}" ]; then
107                 ipkg-cl ${IPKG_ARGS} install ${PACKAGE_INSTALL}
108         fi
109
110         export D=${IMAGE_ROOTFS}
111         export OFFLINE_ROOT=${IMAGE_ROOTFS}
112         export IPKG_OFFLINE_ROOT=${IMAGE_ROOTFS}
113         mkdir -p ${IMAGE_ROOTFS}/etc/ipkg/
114         grep "^arch" ${T}/ipkg.conf >${IMAGE_ROOTFS}/etc/ipkg/arch.conf
115
116         for i in ${IMAGE_ROOTFS}${libdir}/ipkg/info/*.preinst; do
117                 if [ -f $i ] && ! sh $i; then
118                         ipkg-cl ${IPKG_ARGS} flag unpacked `basename $i .preinst`
119                 fi
120         done
121         for i in ${IMAGE_ROOTFS}${libdir}/ipkg/info/*.postinst; do
122                 if [ -f $i ] && ! sh $i configure; then
123                         ipkg-cl ${IPKG_ARGS} flag unpacked `basename $i .postinst`
124                 fi
125         done
126
127         install -d ${IMAGE_ROOTFS}/${sysconfdir}
128         echo ${BUILDNAME} > ${IMAGE_ROOTFS}/${sysconfdir}/version
129
130         ${ROOTFS_POSTPROCESS_COMMAND}
131         
132         log_check rootfs        
133 }
134
135 rootfs_ipk_log_check() {
136         target="$1"
137         lf_path="$2"
138
139         lf_txt="`cat $lf_path`"
140         for keyword_die in "Cannot find package" "exit 1" ERR Fail
141         do                              
142                 if (echo "$lf_txt" | grep -v log_check | grep "$keyword_die") >/dev/null 2>&1
143                 then
144                         echo "log_check: There were error messages in the logfile"
145                         echo -e "log_check: Matched keyword: [$keyword_die]\n"
146                         echo "$lf_txt" | grep -v log_check | grep -i "$keyword_die" -C1
147                         echo ""
148                         do_exit=1                               
149                 fi
150         done
151         test "$do_exit" = 1 && exit 1
152         true
153 }