diff options
author | Kiel Christofferson <kiel@endpoint.com> | 2013-06-20 11:36:01 -0400 |
---|---|---|
committer | Daniel Baumann <mail@daniel-baumann.ch> | 2014-03-02 06:22:13 +0100 |
commit | 3c69e6b56c381f62790b449d5d7661e712eb920c (patch) | |
tree | f98fb72401aedac076730749c1f2c3f0c0b905f6 | |
parent | 9240aa3d3ef3c23b3dfea1deb066efdc56dc0e38 (diff) | |
download | vyos-live-build-3c69e6b56c381f62790b449d5d7661e712eb920c.tar.gz vyos-live-build-3c69e6b56c381f62790b449d5d7661e712eb920c.zip |
Auto-detect foreign architectures in packagelist.
* Add function to output unique list of foreign architectures from an
expanded package list.
* If foreign architectures are detected, add unique architectures
to dpkg and update apt.
* This requires users to explicitly list at least _one_ package of a
foreign architecture in their package list (e.g. foo:arch) for any other
foreign arch dependencies to be handled appropriately.
-rwxr-xr-x | functions/packagelists.sh | 27 | ||||
-rwxr-xr-x | scripts/build/chroot_install-packages | 32 | ||||
-rwxr-xr-x | scripts/build/chroot_package-lists | 11 |
3 files changed, 70 insertions, 0 deletions
diff --git a/functions/packagelists.sh b/functions/packagelists.sh index 906697264..8470d9af9 100755 --- a/functions/packagelists.sh +++ b/functions/packagelists.sh @@ -118,3 +118,30 @@ Expand_packagelist () done done } + +Discover_package_architectures () +{ + _LB_EXPANDED_PKG_LIST="${1}" + _LB_DISCOVERED_ARCHITECTURES="" + + shift + + if [ -e "${_LB_EXPANDED_PKG_LIST}" ] && [ -s "${_LB_EXPANDED_PKG_LIST}" ] + then + while read _LB_PACKAGE_LINE + do + # Lines from the expanded package list may have multiple, space-separated packages + for _LB_PACKAGE_LINE_PART in ${_LB_PACKAGE_LINE} + do + # Looking for <package>:<architecture> + if [ -n "$(echo ${_LB_PACKAGE_LINE_PART} | awk -F':' '{print $2}')" ] + then + _LB_DISCOVERED_ARCHITECTURES="${_LB_DISCOVERED_ARCHITECTURES} $(echo ${_LB_PACKAGE_LINE_PART} | awk -F':' '{print $2}')" + fi + done + done < "${_LB_EXPANDED_PKG_LIST}" + + # Output unique architectures, alpha-sorted, one per line + echo "${_LB_DISCOVERED_ARCHITECTURES}" | tr -s '[:space:]' '\n' | sort | uniq + fi +} diff --git a/scripts/build/chroot_install-packages b/scripts/build/chroot_install-packages index 930ececf0..a578a659a 100755 --- a/scripts/build/chroot_install-packages +++ b/scripts/build/chroot_install-packages @@ -42,6 +42,38 @@ Check_lockfile .lock # Creating lock file Create_lockfile .lock +# Check for packages specified with foreign architecture +_FOREIGN_ARCHITECTURES_FILE="chroot/root/packages.foreign-architectures" +if [ -e "${_FOREIGN_ARCHITECTURES_FILE}" ] && [ -s "${_FOREIGN_ARCHITECTURES_FILE}" ] +then + _APT_ARCHITECTURES_ADDED="0" + + # Check if version of dpkg in chroot supports multiarch + if Chroot chroot dpkg --print-foreign-architectures > /dev/null 2>&1 + then + # Add foregin architectures + while read _ARCHITECTURES_LINE + do + Echo_message "Adding foreign architecture ${_ARCHITECTURES_LINE} to dpkg" + Chroot chroot dpkg --add-architecture ${_ARCHITECTURES_LINE} + + _APT_ARCHITECTURES_ADDED="1" + done < "${_FOREIGN_ARCHITECTURES_FILE}" + + # Tidy up + rm -f "${_FOREIGN_ARCHITECTURES_FILE}" + else + Echo_error "Version of dpkg in chroot does not support foreign architectures." + fi + + # Update apt if foreign architectures were added + if [ "${_APT_ARCHITECTURES_ADDED}" -ne "0" ] + then + Echo_message "Added foreign architectures, updating apt..." + Apt chroot update + fi +fi + if [ -e chroot/root/packages.chroot ] && [ -s chroot/root/packages.chroot ] then # Restoring cache diff --git a/scripts/build/chroot_package-lists b/scripts/build/chroot_package-lists index 52f972881..ba808bd92 100755 --- a/scripts/build/chroot_package-lists +++ b/scripts/build/chroot_package-lists @@ -89,6 +89,17 @@ do fi done +# Discover unique package architectures in fully-expanded package list +for _PACKAGE_ARCHITECTURE in $(Discover_package_architectures "chroot/root/packages.chroot") +do + # If this is a foreign architecture, append to packages.foreign-architectures + if [ "${_PACKAGE_ARCHITECTURE}" != "${LIVE_IMAGE_ARCHITECTURE}" ] + then + Echo_message "Accepting foreign architecture: ${_PACKAGE_ARCHITECTURE}, live image architecture is: ${LIVE_IMAGE_ARCHITECTURE}" + echo "${_PACKAGE_ARCHITECTURE}" >> chroot/root/packages.foreign-architectures + fi +done + rm -f chroot/bin/Packages case "${LB_BUILD_WITH_CHROOT}" in |