2005-08-31 10:45:47 +00:00
|
|
|
#
|
|
|
|
# Creates a root filesystem out of IPKs
|
|
|
|
#
|
|
|
|
# This rootfs can be mounted via root-nfs or it can be put into an cramfs/jffs etc.
|
2007-01-08 21:06:47 +00:00
|
|
|
# See image.bbclass for a usage of this.
|
2005-08-31 10:45:47 +00:00
|
|
|
#
|
|
|
|
|
2009-07-15 12:43:33 +00:00
|
|
|
EXTRAOPKGCONFIG ?= ""
|
2009-07-15 11:57:10 +00:00
|
|
|
ROOTFS_PKGMANAGE = "opkg opkg-collateral ${EXTRAOPKGCONFIG}"
|
2008-05-20 14:58:34 +00:00
|
|
|
ROOTFS_PKGMANAGE_BOOTSTRAP = "run-postinsts"
|
|
|
|
|
2009-11-10 14:55:23 +00:00
|
|
|
do_rootfs[depends] += "opkg-native:do_populate_sysroot opkg-utils-native:do_populate_sysroot"
|
2007-08-21 09:37:30 +00:00
|
|
|
do_rootfs[recrdeptask] += "do_package_write_ipk"
|
2005-08-31 10:45:47 +00:00
|
|
|
|
2010-12-24 01:12:56 +00:00
|
|
|
IPKG_ARGS = "-f ${IPKGCONF_TARGET} -o ${IMAGE_ROOTFS} --force-overwrite"
|
2007-09-01 15:25:40 +00:00
|
|
|
|
2008-10-02 09:42:27 +00:00
|
|
|
OPKG_PREPROCESS_COMMANDS = "package_update_index_ipk; package_generate_ipkg_conf"
|
|
|
|
|
|
|
|
OPKG_POSTPROCESS_COMMANDS = "ipk_insert_feed_uris"
|
2008-10-01 15:38:55 +00:00
|
|
|
|
2010-08-26 04:39:07 +00:00
|
|
|
opkglibdir = "${localstatedir}/lib/opkg"
|
|
|
|
|
2011-07-11 12:14:15 +00:00
|
|
|
# Which packages to not install on the basis of a recommendation
|
|
|
|
BAD_RECOMMENDATIONS ?= ""
|
2011-07-05 05:18:06 +00:00
|
|
|
MULTILIBRE_ALLOW_REP = "${opkglibdir}"
|
2011-07-11 12:14:15 +00:00
|
|
|
|
2007-09-01 15:25:40 +00:00
|
|
|
fakeroot rootfs_ipk_do_rootfs () {
|
|
|
|
set -x
|
|
|
|
|
2008-10-08 22:20:14 +00:00
|
|
|
rm -f ${IPKGCONF_TARGET}
|
2008-10-08 16:49:57 +00:00
|
|
|
touch ${IPKGCONF_TARGET}
|
|
|
|
|
2008-10-01 15:52:19 +00:00
|
|
|
${OPKG_PREPROCESS_COMMANDS}
|
2007-09-01 15:25:40 +00:00
|
|
|
|
2008-06-05 21:18:11 +00:00
|
|
|
mkdir -p ${T}/
|
2011-07-11 12:14:15 +00:00
|
|
|
|
|
|
|
STATUS=${IMAGE_ROOTFS}${opkglibdir}/status
|
|
|
|
mkdir -p ${IMAGE_ROOTFS}${opkglibdir}
|
|
|
|
|
|
|
|
opkg-cl ${IPKG_ARGS} update
|
|
|
|
|
|
|
|
# prime the status file with bits that we don't want
|
|
|
|
for i in ${BAD_RECOMMENDATIONS}; do
|
|
|
|
pkginfo="`opkg-cl ${IPKG_ARGS} info $i`"
|
|
|
|
if [ ! -z "$pkginfo" ]; then
|
|
|
|
echo "$pkginfo" | grep -e '^Package:' -e '^Architecture:' -e '^Version:' >> $STATUS
|
|
|
|
echo "Status: deinstall ok not-installed" >> $STATUS
|
|
|
|
echo >> $STATUS
|
|
|
|
else
|
|
|
|
echo "Requested ignored recommendation $i is not a package"
|
|
|
|
fi
|
|
|
|
done
|
2008-11-06 16:23:32 +00:00
|
|
|
|
2011-01-30 04:56:40 +00:00
|
|
|
#install
|
|
|
|
export INSTALL_PACKAGES_ATTEMPTONLY_IPK="${PACKAGE_INSTALL_ATTEMPTONLY}"
|
|
|
|
export INSTALL_PACKAGES_LINGUAS_IPK="${LINGUAS_INSTALL}"
|
|
|
|
export INSTALL_TASK_IPK="rootfs"
|
|
|
|
|
|
|
|
export INSTALL_ROOTFS_IPK="${IMAGE_ROOTFS}"
|
|
|
|
export INSTALL_CONF_IPK="${IPKGCONF_TARGET}"
|
|
|
|
export INSTALL_PACKAGES_NORMAL_IPK="${PACKAGE_INSTALL}"
|
2011-07-05 05:18:06 +00:00
|
|
|
export INSTALL_PACKAGES_MULTILIB_IPK="${MULTILIB_PACKAGE_INSTALL}"
|
2011-01-30 04:56:40 +00:00
|
|
|
|
|
|
|
package_install_internal_ipk
|
|
|
|
|
|
|
|
#post install
|
2005-08-31 10:45:47 +00:00
|
|
|
export D=${IMAGE_ROOTFS}
|
2006-09-19 09:04:09 +00:00
|
|
|
export OFFLINE_ROOT=${IMAGE_ROOTFS}
|
2005-08-31 10:45:47 +00:00
|
|
|
export IPKG_OFFLINE_ROOT=${IMAGE_ROOTFS}
|
2008-03-20 17:17:08 +00:00
|
|
|
export OPKG_OFFLINE_ROOT=${IPKG_OFFLINE_ROOT}
|
|
|
|
|
2009-07-15 11:57:10 +00:00
|
|
|
# Distro specific packages should create this
|
|
|
|
#mkdir -p ${IMAGE_ROOTFS}/etc/opkg/
|
|
|
|
#grep "^arch" ${IPKGCONF_TARGET} >${IMAGE_ROOTFS}/etc/opkg/arch.conf
|
2005-08-31 10:45:47 +00:00
|
|
|
|
2008-10-01 15:52:19 +00:00
|
|
|
${OPKG_POSTPROCESS_COMMANDS}
|
2008-06-06 14:13:40 +00:00
|
|
|
${ROOTFS_POSTINSTALL_COMMAND}
|
|
|
|
|
2011-05-24 14:49:10 +00:00
|
|
|
runtime_script_required=0
|
2010-08-26 04:39:07 +00:00
|
|
|
for i in ${IMAGE_ROOTFS}${opkglibdir}/info/*.preinst; do
|
2005-08-31 10:45:47 +00:00
|
|
|
if [ -f $i ] && ! sh $i; then
|
2011-05-24 14:49:10 +00:00
|
|
|
runtime_script_required=1
|
2008-03-17 13:18:21 +00:00
|
|
|
opkg-cl ${IPKG_ARGS} flag unpacked `basename $i .preinst`
|
2005-08-31 10:45:47 +00:00
|
|
|
fi
|
|
|
|
done
|
2010-08-26 04:39:07 +00:00
|
|
|
for i in ${IMAGE_ROOTFS}${opkglibdir}/info/*.postinst; do
|
2005-08-31 10:45:47 +00:00
|
|
|
if [ -f $i ] && ! sh $i configure; then
|
2011-05-24 14:49:10 +00:00
|
|
|
runtime_script_required=1
|
2008-03-17 13:18:21 +00:00
|
|
|
opkg-cl ${IPKG_ARGS} flag unpacked `basename $i .postinst`
|
2005-08-31 10:45:47 +00:00
|
|
|
fi
|
|
|
|
done
|
|
|
|
|
2011-05-24 14:49:10 +00:00
|
|
|
if ${@base_contains("IMAGE_FEATURES", "read-only-rootfs", "true", "false" ,d)}; then
|
|
|
|
if [ $runtime_script_required -eq 1 ]; then
|
|
|
|
echo "Some packages could not be configured offline and rootfs is read-only."
|
|
|
|
exit 1
|
|
|
|
fi
|
|
|
|
fi
|
|
|
|
|
2005-08-31 10:45:47 +00:00
|
|
|
install -d ${IMAGE_ROOTFS}/${sysconfdir}
|
|
|
|
echo ${BUILDNAME} > ${IMAGE_ROOTFS}/${sysconfdir}/version
|
|
|
|
|
|
|
|
${ROOTFS_POSTPROCESS_COMMAND}
|
|
|
|
|
2010-08-26 04:39:07 +00:00
|
|
|
rm -f ${IMAGE_ROOTFS}${opkglibdir}/lists/*
|
2008-06-05 20:52:08 +00:00
|
|
|
|
2011-06-01 10:41:11 +00:00
|
|
|
if ${@base_contains("IMAGE_FEATURES", "package-management", "false", "true", d)}; then
|
|
|
|
if [ $runtime_script_required -eq 0 ]; then
|
|
|
|
# All packages were successfully configured.
|
|
|
|
# update-rc.d, base-passwd are no further use, remove them now
|
|
|
|
opkg-cl ${IPKG_ARGS} --force-depends remove update-rc.d base-passwd || true
|
|
|
|
|
|
|
|
# Also delete the status files
|
|
|
|
rm -rf ${IMAGE_ROOTFS}${opkglibdir}
|
|
|
|
fi
|
|
|
|
fi
|
2011-09-16 12:28:29 +00:00
|
|
|
set +x
|
2005-08-31 10:45:47 +00:00
|
|
|
log_check rootfs
|
|
|
|
}
|
|
|
|
|
2008-11-10 21:39:34 +00:00
|
|
|
rootfs_ipk_write_manifest() {
|
|
|
|
manifest=${DEPLOY_DIR_IMAGE}/${IMAGE_NAME}.rootfs.manifest
|
2010-08-26 04:39:07 +00:00
|
|
|
cp ${IMAGE_ROOTFS}${opkglibdir}/status $manifest
|
2008-11-10 21:39:34 +00:00
|
|
|
|
|
|
|
sed '/Depends/d' -i $manifest
|
|
|
|
sed '/Status/d' -i $manifest
|
|
|
|
sed '/Architecture/d' -i $manifest
|
|
|
|
sed '/Installed-Time/d' -i $manifest
|
|
|
|
sed '/Auto-Installed/d' -i $manifest
|
|
|
|
sed '/Recommends/d' -i $manifest
|
|
|
|
sed '/Provides/d' -i $manifest
|
|
|
|
sed '/Conflicts/d' -i $manifest
|
|
|
|
}
|
|
|
|
|
2007-06-26 11:35:20 +00:00
|
|
|
remove_packaging_data_files() {
|
2010-08-26 04:39:07 +00:00
|
|
|
rm -rf ${IMAGE_ROOTFS}${opkglibdir}
|
2010-06-10 13:49:50 +00:00
|
|
|
# We need the directory for the package manager lock
|
2010-08-26 04:39:07 +00:00
|
|
|
mkdir ${IMAGE_ROOTFS}${opkglibdir}
|
2007-06-26 11:35:20 +00:00
|
|
|
}
|
2008-06-05 20:51:43 +00:00
|
|
|
|
|
|
|
install_all_locales() {
|
|
|
|
|
|
|
|
PACKAGES_TO_INSTALL=""
|
|
|
|
|
2010-08-26 04:39:07 +00:00
|
|
|
INSTALLED_PACKAGES=`grep ^Package: ${IMAGE_ROOTFS}${opkglibdir}/status |sed "s/^Package: //"|egrep -v -- "(-locale-|-dev$|-doc$|^kernel|^glibc|^ttf|^task|^perl|^python)"`
|
2008-06-06 14:14:28 +00:00
|
|
|
|
|
|
|
for pkg in $INSTALLED_PACKAGES
|
2008-06-05 20:51:43 +00:00
|
|
|
do
|
2008-06-06 14:14:10 +00:00
|
|
|
for lang in ${IMAGE_LOCALES}
|
|
|
|
do
|
2008-06-06 14:14:59 +00:00
|
|
|
if [ `opkg-cl ${IPKG_ARGS} info $pkg-locale-$lang | wc -l` -gt 2 ]
|
2008-06-06 14:14:10 +00:00
|
|
|
then
|
|
|
|
PACKAGES_TO_INSTALL="$PACKAGES_TO_INSTALL $pkg-locale-$lang"
|
|
|
|
fi
|
|
|
|
done
|
2008-06-05 20:51:43 +00:00
|
|
|
done
|
|
|
|
if [ "$PACKAGES_TO_INSTALL" != "" ]
|
|
|
|
then
|
2008-06-06 14:14:10 +00:00
|
|
|
opkg-cl ${IPKG_ARGS} install $PACKAGES_TO_INSTALL
|
2008-06-05 20:51:43 +00:00
|
|
|
fi
|
|
|
|
}
|
|
|
|
|
2008-10-01 15:38:55 +00:00
|
|
|
ipk_insert_feed_uris () {
|
|
|
|
|
2008-10-08 16:49:57 +00:00
|
|
|
echo "Building from feeds activated!"
|
2008-10-01 15:38:55 +00:00
|
|
|
|
2008-10-08 16:49:57 +00:00
|
|
|
for line in ${IPK_FEED_URIS}
|
|
|
|
do
|
|
|
|
# strip leading and trailing spaces/tabs, then split into name and uri
|
|
|
|
line_clean="`echo "$line"|sed 's/^[ \t]*//;s/[ \t]*$//'`"
|
|
|
|
feed_name="`echo "$line_clean" | sed -n 's/\(.*\)##\(.*\)/\1/p'`"
|
|
|
|
feed_uri="`echo "$line_clean" | sed -n 's/\(.*\)##\(.*\)/\2/p'`"
|
2008-10-01 15:38:55 +00:00
|
|
|
|
2008-10-08 16:49:57 +00:00
|
|
|
echo "Added $feed_name feed with URL $feed_uri"
|
2008-10-01 15:38:55 +00:00
|
|
|
|
2008-10-08 16:49:57 +00:00
|
|
|
# insert new feed-sources
|
|
|
|
echo "src/gz $feed_name $feed_uri" >> ${IPKGCONF_TARGET}
|
2008-10-01 15:38:55 +00:00
|
|
|
done
|
|
|
|
}
|
|
|
|
|
|
|
|
python () {
|
2009-11-08 22:32:43 +00:00
|
|
|
|
2008-10-01 15:38:55 +00:00
|
|
|
if bb.data.getVar('BUILD_IMAGES_FROM_FEEDS', d, True):
|
|
|
|
flags = bb.data.getVarFlag('do_rootfs', 'recrdeptask', d)
|
|
|
|
flags = flags.replace("do_package_write_ipk", "")
|
|
|
|
flags = flags.replace("do_deploy", "")
|
2009-11-10 14:55:23 +00:00
|
|
|
flags = flags.replace("do_populate_sysroot", "")
|
2008-10-01 15:38:55 +00:00
|
|
|
bb.data.setVarFlag('do_rootfs', 'recrdeptask', flags, d)
|
2008-10-08 16:49:57 +00:00
|
|
|
bb.data.setVar('OPKG_PREPROCESS_COMMANDS', "package_generate_archlist\nipk_insert_feed_uris", d)
|
2008-10-01 15:52:19 +00:00
|
|
|
bb.data.setVar('OPKG_POSTPROCESS_COMMANDS', '', d)
|
2008-10-01 15:38:55 +00:00
|
|
|
}
|
|
|
|
|