mirror of
https://git.yoctoproject.org/git/poky
synced 2026-01-04 16:10:04 +00:00
This change makes the purpose of the staging directory more obvious and the taskname more true to what it now actually does. The layout version number is increased due to the change in layout but code to convert existing directories and insert a symlink for backwards compatibility is included. Signed-off-by: Richard Purdie <rpurdie@linux.intel.com>
173 lines
4.9 KiB
Plaintext
173 lines
4.9 KiB
Plaintext
#
|
|
# 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.
|
|
# See image.bbclass for a usage of this.
|
|
#
|
|
|
|
EXTRAOPKGCONFIG ?= ""
|
|
ROOTFS_PKGMANAGE = "opkg opkg-collateral ${EXTRAOPKGCONFIG}"
|
|
ROOTFS_PKGMANAGE_BOOTSTRAP = "run-postinsts"
|
|
|
|
do_rootfs[depends] += "opkg-native:do_populate_sysroot opkg-utils-native:do_populate_sysroot"
|
|
do_rootfs[recrdeptask] += "do_package_write_ipk"
|
|
|
|
IPKG_ARGS = "-f ${IPKGCONF_TARGET} -o ${IMAGE_ROOTFS}"
|
|
|
|
OPKG_PREPROCESS_COMMANDS = "package_update_index_ipk; package_generate_ipkg_conf"
|
|
|
|
OPKG_POSTPROCESS_COMMANDS = "ipk_insert_feed_uris"
|
|
|
|
fakeroot rootfs_ipk_do_rootfs () {
|
|
set -x
|
|
|
|
rm -f ${IPKGCONF_TARGET}
|
|
touch ${IPKGCONF_TARGET}
|
|
|
|
${OPKG_PREPROCESS_COMMANDS}
|
|
|
|
mkdir -p ${T}/
|
|
mkdir -p ${IMAGE_ROOTFS}/usr/lib/opkg/
|
|
|
|
opkg-cl ${IPKG_ARGS} update
|
|
|
|
# Uclibc builds don't provide this stuff...
|
|
if [ x${TARGET_OS} = "xlinux" ] || [ x${TARGET_OS} = "xlinux-gnueabi" ] ; then
|
|
if [ ! -z "${LINGUAS_INSTALL}" ]; then
|
|
for i in ${LINGUAS_INSTALL}; do
|
|
opkg-cl ${IPKG_ARGS} install $i
|
|
done
|
|
fi
|
|
fi
|
|
if [ ! -z "${PACKAGE_INSTALL}" ]; then
|
|
opkg-cl ${IPKG_ARGS} install ${PACKAGE_INSTALL}
|
|
fi
|
|
|
|
if [ ! -z "${PACKAGE_INSTALL_ATTEMPTONLY}" ]; then
|
|
opkg-cl ${IPKG_ARGS} install ${PACKAGE_INSTALL_ATTEMPTONLY} > "${WORKDIR}/temp/log.do_rootfs_attemptonly.${PID}" || true
|
|
fi
|
|
|
|
export D=${IMAGE_ROOTFS}
|
|
export OFFLINE_ROOT=${IMAGE_ROOTFS}
|
|
export IPKG_OFFLINE_ROOT=${IMAGE_ROOTFS}
|
|
export OPKG_OFFLINE_ROOT=${IPKG_OFFLINE_ROOT}
|
|
|
|
# Distro specific packages should create this
|
|
#mkdir -p ${IMAGE_ROOTFS}/etc/opkg/
|
|
#grep "^arch" ${IPKGCONF_TARGET} >${IMAGE_ROOTFS}/etc/opkg/arch.conf
|
|
|
|
${OPKG_POSTPROCESS_COMMANDS}
|
|
${ROOTFS_POSTINSTALL_COMMAND}
|
|
|
|
for i in ${IMAGE_ROOTFS}${libdir}/opkg/info/*.preinst; do
|
|
if [ -f $i ] && ! sh $i; then
|
|
opkg-cl ${IPKG_ARGS} flag unpacked `basename $i .preinst`
|
|
fi
|
|
done
|
|
for i in ${IMAGE_ROOTFS}${libdir}/opkg/info/*.postinst; do
|
|
if [ -f $i ] && ! sh $i configure; then
|
|
opkg-cl ${IPKG_ARGS} flag unpacked `basename $i .postinst`
|
|
fi
|
|
done
|
|
|
|
install -d ${IMAGE_ROOTFS}/${sysconfdir}
|
|
echo ${BUILDNAME} > ${IMAGE_ROOTFS}/${sysconfdir}/version
|
|
|
|
${ROOTFS_POSTPROCESS_COMMAND}
|
|
|
|
rm -f ${IMAGE_ROOTFS}${libdir}/opkg/lists/*
|
|
|
|
log_check rootfs
|
|
}
|
|
|
|
rootfs_ipk_log_check() {
|
|
target="$1"
|
|
lf_path="$2"
|
|
|
|
lf_txt="`cat $lf_path`"
|
|
for keyword_die in "Cannot find package" "exit 1" ERR Fail
|
|
do
|
|
if (echo "$lf_txt" | grep -v log_check | grep "$keyword_die") >/dev/null 2>&1
|
|
then
|
|
echo "log_check: There were error messages in the logfile"
|
|
echo -e "log_check: Matched keyword: [$keyword_die]\n"
|
|
echo "$lf_txt" | grep -v log_check | grep -C 5 -i "$keyword_die"
|
|
echo ""
|
|
do_exit=1
|
|
fi
|
|
done
|
|
test "$do_exit" = 1 && exit 1
|
|
true
|
|
}
|
|
|
|
rootfs_ipk_write_manifest() {
|
|
manifest=${DEPLOY_DIR_IMAGE}/${IMAGE_NAME}.rootfs.manifest
|
|
cp ${IMAGE_ROOTFS}/usr/lib/opkg/status $manifest
|
|
|
|
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
|
|
}
|
|
|
|
remove_packaging_data_files() {
|
|
rm -rf ${IMAGE_ROOTFS}/usr/lib/opkg/
|
|
}
|
|
|
|
install_all_locales() {
|
|
|
|
PACKAGES_TO_INSTALL=""
|
|
|
|
INSTALLED_PACKAGES=`grep ^Package: ${IMAGE_ROOTFS}${libdir}/opkg/status |sed "s/^Package: //"|egrep -v -- "(-locale-|-dev$|-doc$|^kernel|^glibc|^ttf|^task|^perl|^python)"`
|
|
|
|
for pkg in $INSTALLED_PACKAGES
|
|
do
|
|
for lang in ${IMAGE_LOCALES}
|
|
do
|
|
if [ `opkg-cl ${IPKG_ARGS} info $pkg-locale-$lang | wc -l` -gt 2 ]
|
|
then
|
|
PACKAGES_TO_INSTALL="$PACKAGES_TO_INSTALL $pkg-locale-$lang"
|
|
fi
|
|
done
|
|
done
|
|
if [ "$PACKAGES_TO_INSTALL" != "" ]
|
|
then
|
|
opkg-cl ${IPKG_ARGS} install $PACKAGES_TO_INSTALL
|
|
fi
|
|
}
|
|
|
|
ipk_insert_feed_uris () {
|
|
|
|
echo "Building from feeds activated!"
|
|
|
|
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'`"
|
|
|
|
echo "Added $feed_name feed with URL $feed_uri"
|
|
|
|
# insert new feed-sources
|
|
echo "src/gz $feed_name $feed_uri" >> ${IPKGCONF_TARGET}
|
|
done
|
|
}
|
|
|
|
python () {
|
|
|
|
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", "")
|
|
flags = flags.replace("do_populate_sysroot", "")
|
|
bb.data.setVarFlag('do_rootfs', 'recrdeptask', flags, d)
|
|
bb.data.setVar('OPKG_PREPROCESS_COMMANDS', "package_generate_archlist\nipk_insert_feed_uris", d)
|
|
bb.data.setVar('OPKG_POSTPROCESS_COMMANDS', '', d)
|
|
}
|
|
|