summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--meta/classes/image.bbclass38
-rw-r--r--meta/classes/package_ipk.bbclass197
-rw-r--r--meta/classes/rootfs_ipk.bbclass109
3 files changed, 4 insertions, 340 deletions
diff --git a/meta/classes/image.bbclass b/meta/classes/image.bbclass
index 0b35c719fd..ffe05c9040 100644
--- a/meta/classes/image.bbclass
+++ b/meta/classes/image.bbclass
@@ -287,44 +287,6 @@ MULTILIBRE_ALLOW_REP =. "${base_bindir}|${base_sbindir}|${bindir}|${sbindir}|${l
MULTILIB_CHECK_FILE = "${WORKDIR}/multilib_check.py"
MULTILIB_TEMP_ROOTFS = "${WORKDIR}/multilib"
-multilib_generate_python_file() {
- cat >${MULTILIB_CHECK_FILE} <<EOF
-import sys, os, os.path
-import re,filecmp
-
-allow_rep=re.compile(re.sub("\|$","","${MULTILIBRE_ALLOW_REP}"))
-error_prompt="Multilib check error:"
-
-files={}
-dirs=raw_input()
-for dir in dirs.split():
- for root, subfolders, subfiles in os.walk(dir):
- for file in subfiles:
- item=os.path.join(root,file)
- key=str(os.path.join("/",os.path.relpath(item,dir)))
-
- valid=True;
- if key in files:
- #check whether the file is allow to replace
- if allow_rep.match(key):
- valid=True
- else:
- if not filecmp.cmp(files[key],item):
- valid=False
- print("%s duplicate files %s %s is not the same\n" % (error_prompt, item, files[key]))
- sys.exit(1)
-
- #pass the check, add to list
- if valid:
- files[key]=item
-EOF
-}
-
-multilib_sanity_check() {
- multilib_generate_python_file
- echo $@ | python ${MULTILIB_CHECK_FILE}
-}
-
# This function is intended to disallow empty root password if 'debug-tweaks' is not in IMAGE_FEATURES.
zap_empty_root_password () {
if [ -e ${IMAGE_ROOTFS}/etc/shadow ]; then
diff --git a/meta/classes/package_ipk.bbclass b/meta/classes/package_ipk.bbclass
index 73446d6c59..68c8580761 100644
--- a/meta/classes/package_ipk.bbclass
+++ b/meta/classes/package_ipk.bbclass
@@ -10,207 +10,12 @@ PKGWRITEDIRIPK = "${WORKDIR}/deploy-ipks"
# Program to be used to build opkg packages
OPKGBUILDCMD ??= "opkg-build"
-OPKG_ARGS = "-f $INSTALL_CONF_IPK -o $INSTALL_ROOTFS_IPK --force_postinstall --prefer-arch-to-version"
+OPKG_ARGS = "--force_postinstall --prefer-arch-to-version"
OPKG_ARGS += "${@['', '--no-install-recommends'][d.getVar("NO_RECOMMENDATIONS", True) == "1"]}"
OPKG_ARGS += "${@['', '--add-exclude ' + ' --add-exclude '.join((d.getVar('PACKAGE_EXCLUDE', True) or "").split())][(d.getVar("PACKAGE_EXCLUDE", True) or "") != ""]}"
OPKGLIBDIR = "${localstatedir}/lib"
-package_tryout_install_multilib_ipk() {
- #try install multilib
- multilib_tryout_dirs=""
- for item in ${MULTILIB_VARIANTS}; do
- local target_rootfs="${MULTILIB_TEMP_ROOTFS}/${item}"
- local ipkg_args="${OPKG_ARGS}"
- local selected_pkg=""
- local pkgname_prefix="${item}-"
- local pkgname_len=${#pkgname_prefix}
- for pkg in ${INSTALL_PACKAGES_MULTILIB_IPK}; do
- local pkgname=$(echo $pkg | awk -v var=$pkgname_len '{ pkgname=substr($1, 1, var); print pkgname; }' )
- if [ ${pkgname} = ${pkgname_prefix} ]; then
- selected_pkg="${selected_pkg} ${pkg}"
- fi
- done
- if [ ! -z "${selected_pkg}" ]; then
- rm -f ${target_rootfs}
- mkdir -p ${target_rootfs}/${opkglibdir}
- opkg-cl ${ipkg_args} update
- opkg-cl ${ipkg_args} install ${selected_pkg}
- multilib_tryout_dirs="${multilib_tryout_dirs} ${target_rootfs}"
- fi
- done
-}
-
-split_multilib_packages() {
- INSTALL_PACKAGES_NORMAL_IPK=""
- INSTALL_PACKAGES_MULTILIB_IPK=""
- for pkg in ${INSTALL_PACKAGES_IPK}; do
- is_multilib=0
- for item in ${MULTILIB_VARIANTS}; do
- local pkgname_prefix="${item}-"
- local pkgname_len=${#pkgname_prefix}
- local pkgname=$(echo $pkg | awk -v var=$pkgname_len '{ pkgname=substr($1, 1, var); print pkgname; }' )
- if [ ${pkgname} = ${pkgname_prefix} ]; then
- is_multilib=1
- break
- fi
- done
-
- if [ ${is_multilib} = 0 ]; then
- INSTALL_PACKAGES_NORMAL_IPK="${INSTALL_PACKAGES_NORMAL_IPK} ${pkg}"
- else
- INSTALL_PACKAGES_MULTILIB_IPK="${INSTALL_PACKAGES_MULTILIB_IPK} ${pkg}"
- fi
- done
-}
-
-#
-# install a bunch of packages using opkg
-# the following shell variables needs to be set before calling this func:
-# INSTALL_ROOTFS_IPK - install root dir
-# INSTALL_CONF_IPK - configuration file
-# INSTALL_PACKAGES_IPK - packages to be installed
-# INSTALL_PACKAGES_ATTEMPTONLY_IPK - packages attemped to be installed only
-# INSTALL_PACKAGES_LINGUAS_IPK - additional packages for uclibc
-# INSTALL_TASK_IPK - task name
-
-package_install_internal_ipk() {
-
- local target_rootfs="${INSTALL_ROOTFS_IPK}"
- local package_attemptonly="${INSTALL_PACKAGES_ATTEMPTONLY_IPK}"
- local package_linguas="${INSTALL_PACKAGES_LINGUAS_IPK}"
- local task="${INSTALL_TASK_IPK}"
-
- split_multilib_packages
-
- local package_to_install="${INSTALL_PACKAGES_NORMAL_IPK}"
- local package_multilib="${INSTALL_PACKAGES_MULTILIB_IPK}"
-
- mkdir -p ${target_rootfs}${OPKGLIBDIR}/opkg
- touch ${target_rootfs}${OPKGLIBDIR}/opkg/status
-
- local ipkg_args="${OPKG_ARGS}"
-
- opkg-cl ${ipkg_args} update
-
- for i in ${package_linguas}; do
- opkg-cl ${ipkg_args} install $i
- done
-
- if [ ! -z "${package_to_install}" ]; then
- opkg-cl ${ipkg_args} install ${package_to_install}
- fi
-
- if [ ! -z "${package_attemptonly}" ]; then
- opkg-cl ${ipkg_args} install ${package_attemptonly} > "`dirname ${BB_LOGFILE}`/log.do_${task}_attemptonly.${PID}" || true
- fi
-
- package_tryout_install_multilib_ipk
- if [ ! -z "${MULTILIB_CHECK_FILE}" ]; then
- #sanity check
- multilib_sanity_check ${target_rootfs} ${multilib_tryout_dirs} || exit 1
- fi
-
- if [ ! -z "${package_multilib}" ]; then
- opkg-cl ${ipkg_args} install ${package_multilib}
- fi
-}
-
-ipk_log_check() {
- target="$1"
- lf_path="$2"
-
- lf_txt="`cat $lf_path`"
- for keyword_die in "exit 1" "Collected errors" 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"
- printf "log_check: Matched keyword: [$keyword_die]\n\n"
- echo "$lf_txt" | grep -v log_check | grep -C 5 "$keyword_die"
- echo ""
- do_exit=1
- fi
- done
- test "$do_exit" = 1 && exit 1
- true
-}
-
-#
-# Update the Packages index files in ${DEPLOY_DIR_IPK}
-#
-package_update_index_ipk () {
- #set -x
-
- ipkgarchs="${ALL_MULTILIB_PACKAGE_ARCHS} ${SDK_PACKAGE_ARCHS}"
-
- if [ ! -z "${DEPLOY_KEEP_PACKAGES}" ]; then
- return
- fi
-
- packagedirs="${DEPLOY_DIR_IPK}"
- for arch in $ipkgarchs; do
- packagedirs="$packagedirs ${DEPLOY_DIR_IPK}/$arch"
- done
-
- multilib_archs="${MULTILIB_ARCHS}"
- for arch in $multilib_archs; do
- packagedirs="$packagedirs ${DEPLOY_DIR_IPK}/$arch"
- done
-
- found=0
- for pkgdir in $packagedirs; do
- if [ -e $pkgdir/ ]; then
- found=1
- touch $pkgdir/Packages
- flock $pkgdir/Packages.flock -c "opkg-make-index -r $pkgdir/Packages -p $pkgdir/Packages -m $pkgdir/"
- fi
- done
- if [ "$found" != "1" ]; then
- bbfatal "There are no packages in ${DEPLOY_DIR_IPK}!"
- fi
-}
-
-#
-# Generate an ipkg conf file ${IPKGCONF_TARGET} suitable for use against
-# the target system and an ipkg conf file ${IPKGCONF_SDK} suitable for
-# use against the host system in sdk builds
-#
-package_generate_ipkg_conf () {
- package_generate_archlist
- echo "src oe file:${DEPLOY_DIR_IPK}" >> ${IPKGCONF_SDK}
- ipkgarchs="${SDK_PACKAGE_ARCHS}"
- for arch in $ipkgarchs; do
- if [ -e ${DEPLOY_DIR_IPK}/$arch/Packages ] ; then
- echo "src oe-$arch file:${DEPLOY_DIR_IPK}/$arch" >> ${IPKGCONF_SDK}
- fi
- done
-
- echo "src oe file:${DEPLOY_DIR_IPK}" >> ${IPKGCONF_TARGET}
- ipkgarchs="${ALL_MULTILIB_PACKAGE_ARCHS}"
- for arch in $ipkgarchs; do
- if [ -e ${DEPLOY_DIR_IPK}/$arch/Packages ] ; then
- echo "src oe-$arch file:${DEPLOY_DIR_IPK}/$arch" >> ${IPKGCONF_TARGET}
- fi
- done
-}
-
-package_generate_archlist () {
- ipkgarchs="${SDK_PACKAGE_ARCHS}"
- priority=1
- for arch in $ipkgarchs; do
- echo "arch $arch $priority" >> ${IPKGCONF_SDK}
- priority=$(expr $priority + 5)
- done
-
- ipkgarchs="${ALL_MULTILIB_PACKAGE_ARCHS}"
- priority=1
- for arch in $ipkgarchs; do
- echo "arch $arch $priority" >> ${IPKGCONF_TARGET}
- priority=$(expr $priority + 5)
- done
-}
-
python do_package_ipk () {
import re, copy
import textwrap
diff --git a/meta/classes/rootfs_ipk.bbclass b/meta/classes/rootfs_ipk.bbclass
index f97f027804..9d63450dd1 100644
--- a/meta/classes/rootfs_ipk.bbclass
+++ b/meta/classes/rootfs_ipk.bbclass
@@ -15,117 +15,14 @@ rootfs_ipk_do_rootfs[vardepsexclude] += "BUILDNAME"
do_rootfs[lockfiles] += "${WORKDIR}/ipk.lock"
-OPKG_PREPROCESS_COMMANDS = "package_update_index_ipk; package_generate_ipkg_conf"
+OPKG_PREPROCESS_COMMANDS = ""
-OPKG_POSTPROCESS_COMMANDS = "ipk_insert_feed_uris; "
+OPKG_POSTPROCESS_COMMANDS = ""
OPKGLIBDIR = "${localstatedir}/lib"
MULTILIBRE_ALLOW_REP = "${OPKGLIBDIR}/opkg"
-fakeroot rootfs_ipk_do_rootfs () {
- #set -x
-
- rm -f ${IPKGCONF_TARGET}
- touch ${IPKGCONF_TARGET}
-
- ${OPKG_PREPROCESS_COMMANDS}
-
- mkdir -p ${T}/
-
- export INSTALL_CONF_IPK="${IPKGCONF_TARGET}"
- export INSTALL_ROOTFS_IPK="${IMAGE_ROOTFS}"
- STATUS=${IMAGE_ROOTFS}${OPKGLIBDIR}/opkg/status
- mkdir -p ${IMAGE_ROOTFS}${OPKGLIBDIR}/opkg
-
- opkg-cl ${OPKG_ARGS} update
-
- # prime the status file with bits that we don't want
- for i in ${BAD_RECOMMENDATIONS}; do
- pkginfo="`opkg-cl ${OPKG_ARGS} info $i`"
- if [ ! -z "$pkginfo" ]; then
- echo "$pkginfo" | awk "/^Status:/ { print \"Status: deinstall hold not-installed\n\" }" - >> $STATUS
- else
- echo "Requested ignored recommendation $i is not a package"
- fi
- done
-
- #install
- export INSTALL_PACKAGES_ATTEMPTONLY_IPK="${PACKAGE_INSTALL_ATTEMPTONLY}"
- export INSTALL_PACKAGES_LINGUAS_IPK="${LINGUAS_INSTALL}"
- export INSTALL_TASK_IPK="rootfs"
-
-
- export INSTALL_PACKAGES_IPK="${PACKAGE_INSTALL}"
-
- #post install
- export D=${IMAGE_ROOTFS}
- export OFFLINE_ROOT=${IMAGE_ROOTFS}
- export IPKG_OFFLINE_ROOT=${IMAGE_ROOTFS}
- export OPKG_OFFLINE_ROOT=${IPKG_OFFLINE_ROOT}
- export INTERCEPT_DIR=${WORKDIR}/intercept_scripts
- export NATIVE_ROOT=${STAGING_DIR_NATIVE}
-
- package_install_internal_ipk
-
- # Distro specific packages should create this
- #mkdir -p ${IMAGE_ROOTFS}/etc/opkg/
- #grep "^arch" ${IPKGCONF_TARGET} >${IMAGE_ROOTFS}/etc/opkg/arch.conf
-
- rootfs_install_complementary
-
- ${OPKG_POSTPROCESS_COMMANDS}
- ${ROOTFS_POSTINSTALL_COMMAND}
-
- install -d ${IMAGE_ROOTFS}/${sysconfdir}
- echo ${BUILDNAME} > ${IMAGE_ROOTFS}/${sysconfdir}/version
-
- ${ROOTFS_POSTPROCESS_COMMAND}
-
- if ${@base_contains("IMAGE_FEATURES", "read-only-rootfs", "true", "false" ,d)}; then
- delayed_postinsts="$(delayed_postinsts)"
- if [ -n "$delayed_postinsts" ]; then
- bberror "The following packages could not be configured offline and rootfs is read-only: $delayed_postinsts"
- exit 1
- fi
- fi
-
- rm -f ${IMAGE_ROOTFS}${OPKGLIBDIR}/opkg/lists/*
- log_check rootfs
-}
-
-rootfs_ipk_do_rootfs[vardeps] += "delayed_postinsts"
-
-delayed_postinsts () {
- cat ${STATUS}|grep -e "^Package:" -e "^Status:"|sed -ne 'N;s/Package: \(.*\)\nStatus:.*unpacked/\1/p'
-}
-
-save_postinsts () {
- # Scripts need to be ordered when executed, this ensures numeric order
- # If we ever run into needing more the 899 scripts, we'll have to
- # change num to start with 1000.
- num=100
- for p in $(delayed_postinsts); do
- install -d ${IMAGE_ROOTFS}${sysconfdir}/ipk-postinsts
- cp ${IMAGE_ROOTFS}${OPKGLIBDIR}/opkg/info/$p.postinst ${IMAGE_ROOTFS}${sysconfdir}/ipk-postinsts/$num-$p
- num=`echo \$((num+1))`
- done
-}
-
-remove_packaging_data_files() {
- rm -rf ${IMAGE_ROOTFS}${OPKGLIBDIR}/opkg
- # We need the directory for the package manager lock
- mkdir ${IMAGE_ROOTFS}${OPKGLIBDIR}/opkg
-}
-
-rootfs_install_packages() {
- opkg-cl ${OPKG_ARGS} install `cat $1`
-}
-
-rootfs_uninstall_packages() {
- opkg-cl ${OPKG_ARGS} --force-depends remove $@
-}
-
ipk_insert_feed_uris () {
echo "Building from feeds activated!"
@@ -163,7 +60,7 @@ python () {
flags = flags.replace("do_deploy", "")
flags = flags.replace("do_populate_sysroot", "")
d.setVarFlag('do_rootfs', 'recrdeptask', flags)
- d.setVar('OPKG_PREPROCESS_COMMANDS', "package_generate_archlist\nipk_insert_feed_uris")
+ d.setVar('OPKG_PREPROCESS_COMMANDS', "ipk_insert_feed_uris")
d.setVar('OPKG_POSTPROCESS_COMMANDS', '')
}