2 # Creates a root filesystem out of IPKs
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.
8 DEPENDS_prepend="ipkg-native ipkg-utils-native fakeroot-native "
9 DEPENDS_append=" ${EXTRA_IMAGEDEPENDS}"
13 do_rootfs[nostamp] = 1
14 do_rootfs[dirs] = ${TOPDIR}
16 IPKG_ARGS = "-f ${T}/ipkg.conf -o ${IMAGE_ROOTFS}"
18 ROOTFS_POSTPROCESS_COMMAND ?= ""
20 # some default locales
21 IMAGE_LINGUAS ?= "de-de fr-fr en-gb"
23 LINGUAS_INSTALL = "${@" ".join(map(lambda s: "locale-base-%s" % s, oe.data.getVar('IMAGE_LINGUAS', d, 1).split()))}"
28 mkdir -p ${IMAGE_ROOTFS}/dev
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}
34 echo "src oe file:${DEPLOY_DIR_IPK}" > ${T}/ipkg.conf
35 cat <<EOF >>${T}/ipkg.conf
39 arch ${TARGET_ARCH} 10
41 if [ "${TARGET_ARCH}" != "${PACKAGE_ARCH}" ]; then
42 echo "arch ${PACKAGE_ARCH} 15" >>${T}/ipkg.conf
44 if [ ! -z ${MACHINE} ]; then
45 echo "arch ${MACHINE} 20" >>${T}/ipkg.conf
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
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
59 if [ ! -z "${IPKG_INSTALL}" ]; then
60 ipkg-cl ${IPKG_ARGS} install ${IPKG_INSTALL}
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
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`
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`
79 install -d ${IMAGE_ROOTFS}/${sysconfdir}
80 echo ${BUILDNAME} > ${IMAGE_ROOTFS}/${sysconfdir}/version
82 ${ROOTFS_POSTPROCESS_COMMAND}
85 fakeroot do_rootfs () {
86 rm -rf ${IMAGE_ROOTFS}
90 # set '*' as the rootpassword so the images
91 # can decide if they want it or not
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
98 # export the zap_root_password
99 EXPORT_FUNCTIONS zap_root_password
101 addtask rootfs before do_build after do_install