Set PACKAGE_ARCH correctly in kernel.oeclass and module-base.oeclass.
[vuplus_openembedded] / classes / rootfs_ipk.oeclass
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_ipk.oeclass for a usage of this.
6 #
7
8 DEPENDS_prepend="ipkg-native ipkg-utils-native fakeroot-native "
9 DEPENDS_append=" ${EXTRA_IMAGEDEPENDS}"
10
11 PACKAGES = ""
12
13 do_rootfs[nostamp] = 1
14 do_rootfs[dirs] = ${TOPDIR}
15
16 IPKG_ARGS = "-f ${T}/ipkg.conf -o ${IMAGE_ROOTFS}"
17
18 ROOTFS_POSTPROCESS_COMMAND ?= ""
19
20 # some default locales
21 IMAGE_LINGUAS ?= "de-de fr-fr en-gb"
22
23 LINGUAS_INSTALL = "${@" ".join(map(lambda s: "locale-base-%s" % s, oe.data.getVar('IMAGE_LINGUAS', d, 1).split()))}"
24
25 real_do_rootfs () {
26         set -x
27
28         mkdir -p ${IMAGE_ROOTFS}/dev
29
30         rm -f ${DEPLOY_DIR_IPK}/Packages
31         touch ${DEPLOY_DIR_IPK}/Packages
32         ipkg-make-index -r ${DEPLOY_DIR_IPK}/Packages -p ${DEPLOY_DIR_IPK}/Packages -l ${DEPLOY_DIR_IPK}/Packages.filelist -m ${DEPLOY_DIR_IPK}
33         mkdir -p ${T}
34         echo "src oe file:${DEPLOY_DIR_IPK}" > ${T}/ipkg.conf
35         cat <<EOF >>${T}/ipkg.conf
36 arch all 1
37 arch any 1
38 arch noarch 1
39 arch ${TARGET_ARCH} 10
40 EOF
41         if [ "${TARGET_ARCH}" != "${PACKAGE_ARCH}" ]; then
42                 echo "arch ${PACKAGE_ARCH} 15" >>${T}/ipkg.conf
43         fi
44         if [ ! -z ${MACHINE} ]; then
45                 echo "arch ${MACHINE} 20" >>${T}/ipkg.conf
46         fi
47         for i in ${IPKG_ARCHS}; do
48                 if [ $i != "all" ] && [ $i != "${TARGET_ARCH}" ] && [ $i != "${MACHINE}" ]; then
49                         echo "arch $i 5" >> ${T}/ipkg.conf
50                 fi
51         done
52         ipkg-cl ${IPKG_ARGS} update
53         if [ ! -z "${LINGUAS_INSTALL}" ]; then
54                 ipkg-cl ${IPKG_ARGS} install glibc-localedata-i18n
55                 for i in ${LINGUAS_INSTALL}; do
56                         ipkg-cl ${IPKG_ARGS} install $i
57                 done
58         fi
59         if [ ! -z "${IPKG_INSTALL}" ]; then
60                 ipkg-cl ${IPKG_ARGS} install ${IPKG_INSTALL}
61         fi
62
63         export D=${IMAGE_ROOTFS}
64         export IPKG_OFFLINE_ROOT=${IMAGE_ROOTFS}
65         mkdir -p ${IMAGE_ROOTFS}/etc/ipkg/
66         grep "^arch" ${T}/ipkg.conf >${IMAGE_ROOTFS}/etc/ipkg/arch.conf
67
68         for i in ${IMAGE_ROOTFS}/usr/lib/ipkg/info/*.preinst; do
69                 if [ -f $i ] && ! sh $i; then
70                         ipkg-cl ${IPKG_ARGS} flag unpacked `basename $i .preinst`
71                 fi
72         done
73         for i in ${IMAGE_ROOTFS}/usr/lib/ipkg/info/*.postinst; do
74                 if [ -f $i ] && ! sh $i configure; then
75                         ipkg-cl ${IPKG_ARGS} flag unpacked `basename $i .postinst`
76                 fi
77         done
78
79         install -d ${IMAGE_ROOTFS}/${sysconfdir}
80         echo ${BUILDNAME} > ${IMAGE_ROOTFS}/${sysconfdir}/version
81
82         ${ROOTFS_POSTPROCESS_COMMAND}
83 }
84
85 fakeroot do_rootfs () {
86         rm -rf ${IMAGE_ROOTFS}
87         real_do_rootfs
88 }
89
90 # set '*' as the rootpassword so the images
91 # can decide if they want it or not
92
93 zap_root_password () {
94         sed 's%^root:[^:]*:%root:*:%' < ${IMAGE_ROOTFS}/etc/passwd >${IMAGE_ROOTFS}/etc/passwd.new
95         mv ${IMAGE_ROOTFS}/etc/passwd.new ${IMAGE_ROOTFS}/etc/passwd    
96
97
98 # export the zap_root_password
99 EXPORT_FUNCTIONS zap_root_password
100
101 addtask rootfs before do_build after do_install