From 64b52244915f7a73403d54f5316bb2c3bd33239b Mon Sep 17 00:00:00 2001 From: Jonathan Bauer Date: Mon, 25 Feb 2013 17:39:16 +0100 Subject: ? --- remote/setup_tools | 116 ++++++++++++++++++++--------------------------------- 1 file changed, 43 insertions(+), 73 deletions(-) (limited to 'remote/setup_tools') diff --git a/remote/setup_tools b/remote/setup_tools index 76f163f5..116dc4b1 100755 --- a/remote/setup_tools +++ b/remote/setup_tools @@ -47,59 +47,24 @@ copyfileswithdependencies () [ ! -z "${REQUIRED_BINARIES}" ] && pinfo "Gathering required binaries from config file..." for FILENAME in ${REQUIRED_BINARIES} do - FILE=$(find . -name ${FILENAME} -type f -executable | xargs grep -l '^.ELF') # FIXME: What happens on multiple matches? Maybe add " | head -1" - if [ -z "$FILE" ]; then - pwarning "\tNo Binary found for ${FILENAME}. Skipping." - continue - fi - pdebug "\tFound ${FILENAME} at ${FILE}" - echo "${FILE}" >> "${COPYFILES_LIST}" - # fetch dependencies - # quick fix to exclude libc*, else it copies unneeded libs... - # workaround for - ldd ${FILE} &>/dev/null - ldd_exit_code=$? - if [ "x$ldd_exit_code" != "x0" ]; - then - pdebug "\tldd $FILE failed." - continue - fi - for i in $(ldd "${FILE}" | awk '{print $1 $2 $3}' | grep -v ld-linux | grep -v libc.so | grep -v linux-gate | grep -v linux-vdso) - do - arrIN=(${i//=>/ }) - pdebug "* ${arrIN[0]}" - LOCAL_MATCHES=$(find . -name "$(echo ${arrIN[0]} | awk -F '.' '{print $1}')".so\*) - if [ "x${LOCAL_MATCHES}" != "x" ]; - then - for llib in ${LOCAL_MATCHES}; - do - pdebug " at ${llib}" - echo ${llib} >> "${COPYFILES_LIST}" - done - else - if [ -e ${arrIN[1]} ]; - then - echo ${arrIN[1]} >> "${COPYFILES_LIST}" - - if [ ! -L ${arrIN[1]} ]; - then - pdebug " at ${arrIN[1]}" - else - pdebug " at ${arrIN[1]} -> $(readlink -f ${arrIN[1]})" - echo $(readlink -f ${arrIN[1]}) >> ${COPYFILES_LIST} - fi - fi + FILE=$(find . -name ${FILENAME} -type f -executable | xargs grep -l '^.ELF'|head -1) # FIXME: What happens on multiple matches? Maybe add " | head -1" + if [ -z "$FILE" ]; then + pwarning "\tNo Binary found for ${FILENAME}. Skipping." + continue fi - done + pdebug "\tFound ${FILENAME} at ${FILE}" + echo "${FILE}" >> "${COPYFILES_LIST}" + get_dynamic_dependencies -l "${TOOL_DIR}/${TOOL}/build" "$FILE" >> "${COPYFILES_LIST}" done [ ! -z "${REQUIRED_LIBRARIES}" ] && pinfo "Gathering required libraries from config file..." for LIB in ${REQUIRED_LIBRARIES} do - for LOCATION in $(find . -name ${LIB}*) + for LOCATION in $(find . -name ${LIB}) do pdebug "* $LOCATION" - echo ${LOCATION} >> ${COPYFILES_LIST} + echo "${LOCATION}" >> ${COPYFILES_LIST} + get_dynamic_dependencies -l "${TOOL_DIR}/${TOOL}/build" ${LOCATION} >> ${COPYFILES_LIST} done done @@ -109,34 +74,39 @@ copyfileswithdependencies () do pdebug "* ./$ENTRY" echo "./${ENTRY}" >> "${COPYFILES_LIST}" - for BIN in $(find "./${ENTRY}" -type f -not -name '*.a' | xargs grep -l '^.ELF') - do - pdebug " Searching libs for ${BIN}..." - for i in $(ldd ${BIN} | awk '{print $1 $2 $3}' | grep -v ld-linux | grep -v libc.so | grep -v linux-gate | grep -v linux-vdso) - do - arrIN=(${i//=>/ }) - pdebug " Searching for ${arrIN[0]}...($i)" - local LOCAL_MATCHES=$(find . -name "$(echo ${arrIN[0]} | awk -F '.' '{print $1}')".so\*) - if [ "x${LOCAL_MATCHES}" != "x" ]; - then - for llib in ${LOCAL_MATCHES}; - do - pdebug " Found locally, copying ${llib}" - echo ${llib} >> "${COPYFILES_LIST}" - done - else - if [ ! -z ${arrIN[1]} ] && [ "x${arrIN[1]}" != "xnot" ]; - then - pdebug " Not found locally but in system, copying ${arrIN[1]}" - echo ${arrIN[1]} >> "${COPYFILES_LIST}" - [ -L ${arrIN[1]} ] && echo $(readlink -f "${arrIN[1]}") >> "${COPYFILES_LIST}" - else - pwarning "Lib '${arrIN[0]}' from required dir '$ENTRY' neither found in build directory nor on this system." - pwarning "If this lib is not supplied by another module, this module will probably fail in your final system" - fi - fi - done - done + get_dynamic_dependencies -l "${TOOL_DIR}/${TOOL}/build" ${ENTRY} >> ${COPYFILES_LIST} + + + #as as \n + #echo "./${ENTRY}" >> "${COPYFILES_LIST}" + #for BIN in $(find "./${ENTRY}" -type f -not -name '*.a' | xargs grep -l '^.ELF') + #do + # pdebug " Searching libs for ${BIN}..." +# for i in $(ldd ${BIN} | awk '{print $1 $2 $3}' | grep -v ld-linux | grep -v libc.so | grep -v linux-gate | grep -v linux-vdso) +# do +# arrIN=(${i//=>/ }) +# pdebug " Searching for ${arrIN[0]}...($i)" +# local LOCAL_MATCHES=$(find . -name "$(echo ${arrIN[0]} | awk -F '.' '{print $1}')".so\*) +# if [ "x${LOCAL_MATCHES}" != "x" ]; +# then +# for llib in ${LOCAL_MATCHES}; +# do +# pdebug " Found locally, copying ${llib}" +# echo ${llib} >> "${COPYFILES_LIST}" +# done +# else +# if [ ! -z ${arrIN[1]} ] && [ "x${arrIN[1]}" != "xnot" ]; +# then +# pdebug " Not found locally but in system, copying ${arrIN[1]}" +# echo ${arrIN[1]} >> "${COPYFILES_LIST}" +# [ -L ${arrIN[1]} ] && echo $(readlink -f "${arrIN[1]}") >> "${COPYFILES_LIST}" +# else +# pwarning "Lib '${arrIN[0]}' from required dir '$ENTRY' neither found in build directory nor on this system." +# pwarning "If this lib is not supplied by another module, this module will probably fail in your final system" +# fi +# fi +# done +# done done [ ! -z "${REQUIRED_FILES}" ] && pinfo "Gathering required files from config file..." -- cgit v1.2.3-55-g7522 From 8989b603a3b3478f93980bee008612374ddc0322 Mon Sep 17 00:00:00 2001 From: Simon Rettberg Date: Mon, 25 Feb 2013 17:39:59 +0100 Subject: fix build_core --- helper/fileutil.inc | 16 +++++++++------- helper/logging.inc | 7 ++++--- mltk | 2 +- remote/setup_tools | 11 +++++------ server/build_core | 27 ++++++++++++++++----------- 5 files changed, 35 insertions(+), 28 deletions(-) (limited to 'remote/setup_tools') diff --git a/helper/fileutil.inc b/helper/fileutil.inc index 3c165d99..3e1ea56a 100644 --- a/helper/fileutil.inc +++ b/helper/fileutil.inc @@ -1,16 +1,18 @@ # copy list of files using tar tarcopy () { [ $# -ne 2 ] && perror "Sanity check failed: tarcopy needs exactly two params, but $# were given." - if [ -z $1 ]; then - pwarning "tarcopy called with empty input list (dest was '$2')" + local FROM=$(trim "$1") + local TO=$(trim "$2") + if [ -z "$FROM" ]; then + pwarning "tarcopy called with empty input list (dest was '$TO')" return fi - local SHORT=$1 + local SHORT=$FROM [ ${#SHORT} -gt 23 ] && SHORT=$(echo "$SHORT" | cut -c-18)...$(echo "$SHORT" | cut -c$[${#SHORT} - 4]-) - [ -z $2 ] && perror "tarcopy called with empty destination." - tar -cp "$1" | tar -xp -C "$2" + [ -z "$TO" ] && perror "tarcopy called with empty destination." + tar -cp $FROM | tar -xp -C "$TO" local PS=(${PIPESTATUS[*]}) - [ "x${PS[0]}" != "x0" ] && perror "packing-part of tar-copy from '$SHORT' to '$2' failed. (${PS[0]})" - [ "x${PS[1]}" != "x0" ] && perror "unpacking-part of tar-copy from '$SHORT' to '$2' failed. (${PS[1]})" + [ "x${PS[0]}" != "x0" ] && perror "packing-part of tar-copy from '$SHORT' to '$TO' failed. (${PS[0]})" + [ "x${PS[1]}" != "x0" ] && perror "unpacking-part of tar-copy from '$SHORT' to '$TO' failed. (${PS[1]})" } diff --git a/helper/logging.inc b/helper/logging.inc index 4daf1e12..2d79c67c 100644 --- a/helper/logging.inc +++ b/helper/logging.inc @@ -20,9 +20,10 @@ set_quiet () { unset_quiet () { if [ "x$MLTK_QUIET" = "x1" ]; then - exec 1>&6 6>&- - exec 2>&7 7>&- - MLTK_QUIET="0" + exec 1>&6 6>&- + exec 2>&7 7>&- + exec 6>&2 + MLTK_QUIET="0" fi } diff --git a/mltk b/mltk index 6f775cd5..bd609b32 100755 --- a/mltk +++ b/mltk @@ -131,7 +131,7 @@ run() { [ $BUILD ] && generate_stage32 $TOOLS fi if [ $TARGET_CORE ]; then - unset_quiet # TODO: Make build_core logging.inc aware + local TOOL_STR="[CORE]" . ${BUILD_CORE} [ $CLEAN ] && clean_core [ $BUILD ] && generate_stage31 diff --git a/remote/setup_tools b/remote/setup_tools index 76f163f5..72664b27 100755 --- a/remote/setup_tools +++ b/remote/setup_tools @@ -197,11 +197,10 @@ generate_stage32 () { cd ${TOOL_DIR} while (( "$#" )); do TOOL=$1 - if [ -d ${TOOL} ]; - then - TOOL_STR="[${TOOL}]" - pinfo "## ## Processing module ## ##" - + TOOL_STR="" + pinfo ">>>>>>>>>>>>>>>> Processing module [ $TOOL ]" + TOOL_STR="[${TOOL}]" + if [ -d ${TOOL} ]; then #[ "x$DEBUG" != "x1" ] \ # && echo "Logging to ${TOOL_DIR}/${TOOL}/stage32.log" \ # && exec 6>&1 > ${TOOL_DIR}/${TOOL}/stage32.log @@ -229,13 +228,13 @@ generate_stage32 () { #[ "x$DEBUG" != "x1" ] && exec 1>&6 6>&- # TODO pinfo "## ## Module completed ## ##" - TOOL_STR="" else perror "Tool directory for '$TOOL' not found." # maybe make this a warning instead of error? fi shift done + TOOL_STR="" } clean_tools() { diff --git a/server/build_core b/server/build_core index 6d975984..411036df 100755 --- a/server/build_core +++ b/server/build_core @@ -26,16 +26,17 @@ STAGE32_DIR=${ROOT_DIR}/remote/stage3.2 # initial checks initial_checks() { - [ -d ${STAGE32_DIR} ] || perror "No stage3.2 directory found. Please run './mltk tools build' first." + local TOOL_STR="$TOOL_STR initial_checks:" + [ -d "${STAGE32_DIR}" ] || perror "No stage3.2 directory found. Please run './mltk tools build' first." - [ -e ${STAGE32_DIR}/openslx/bin/busybox ] || perror "Busybox not found, run './mltk tools build busybox' first." + [ -e "${STAGE32_DIR}/openslx/bin/busybox" ] || perror "Busybox not found, run './mltk tools build busybox' first." # shouldn't squashfs-tools be automatically installed as we need them nevertheless!? # what if it is already on the machine? faster to check with which than the apt-get check? - if [ -z $(which mksquashfs) ] && perror "mksquashfs not found, please install squashfs-tools first." + [ -z $(which mksquashfs) ] && perror "mksquashfs not found, please install squashfs-tools first." #check for kernel modules, if not present copy from system - if [ ! -d ${STAGE32_DIR}/lib/modules ]; + if [ ! -d "${STAGE32_DIR}/lib/modules" ]; then pinfo "Couldn't find kernel modules in stage3.2." pinfo "Copying modules for kernel $(uname -r)..." @@ -49,6 +50,7 @@ initial_checks() { } generate_rootfs() { + local TOOL_STR="$TOOL_STR generate_rootfs:" # produce stage3.1 mkdir -p "${STAGE31_DIR}" || perror "Cannot create stage3.1 dir '${STAGE31_DIR}'" @@ -61,7 +63,7 @@ generate_rootfs() { "${STAGE31_DIR}"/dev || perror "Cannot copy devices from running system" # copy busybox, its libs and static data to stage3.1 - cp -r "${STAGE32_DIR}/openslx/*" "${STAGE31_STATIC_DIR}/*" "${STAGE31_DIR}" || perror "Copying busybox, its libs and static data failed." + cp -r "${STAGE32_DIR}"/openslx/* "${STAGE31_STATIC_DIR}"/* "${STAGE31_DIR}" || perror "Copying busybox, its libs and static data failed." # fix for aufs & squashfs modules needed for stage 3.1 mkdir -p "${STAGE31_DIR}/lib/modules.0/" || perror "Creating modules.0 dir for aufs & squashfs in stage 3.1 failed." @@ -82,18 +84,20 @@ generate_rootfs() { } generate_squashfs() { + local TOOL_STR="$TOOL_STR generate_squashfs:" # finalize the initramfs target [ -e "${STAGE31_DIR}/mnt/openslx.sqfs" ] && rm "${STAGE31_DIR}/mnt/openslx.sqfs" - mksquashfs "${STAGE32_DIR}" "${STAGE31_DIR}/mnt/openslx.sqfs" -comp xz -b 1M -no-recovery || perror "mksquashfs failed ($?)." + mksquashfs "${STAGE32_DIR}" "${STAGE31_DIR}/mnt/openslx.sqfs" -comp xz -b 1M -no-recovery >&6 || perror "mksquashfs failed ($?)." } generate_initramfs() { + local TOOL_STR="$TOOL_STR generate_initramfs:" cd "${STAGE31_DIR}" || perror "Cannot cd to '${STAGE31_DIR}'" find . | cpio --format="newc" --create | gzip -9 > "${MODULE_DIR}/initramfs" - local PS=($PIPESTATUS[*]) - [ "x${PS[0]}" != "x0" ] && perror "'find .' failed." + local PS=(${PIPESTATUS[*]}) + [ "x${PS[0]}" != "x0" ] && perror "'find .' in '$(pwd)' failed." [ "x${PS[1]}" != "x0" ] && perror "cpio create failed." [ "x${PS[2]}" != "x0" ] && perror "gzip to '${MODULE_DIR}/initramfs' failed." cd - @@ -108,13 +112,14 @@ generate_stage31() { # TODO better kernel copy cp "/boot/vmlinuz-$(uname -r)" "${MODULE_DIR}/kernel" || perror "Cannot copy kernel from '/boot/vmlinuz-$(uname -r)' to '${MODULE_DIR}/kernel'" - pinfo "[core] kernel $(uname -r) copied to ${MODULE_DIR}/kernel" + pinfo "kernel $(uname -r) copied to ${MODULE_DIR}/kernel" } clean_core() { + local TOOL_STR="$TOOL_STR clean_core:" pinfo "Cleaning '${STAGE31_DIR}'..." - [ -d ${STAGE31_DIR} ] && { rm -rf ${STAGE31_DIR} || perror "rm -rf failed." } + [ -d ${STAGE31_DIR} ] && { rm -rf ${STAGE31_DIR} || perror "rm -rf failed."; } pinfo "Cleaning '${MODULE_DIR}/initramfs'..." - [ -e ${MODULE_DIR}/initramfs ] && { rm ${MODULE_DIR}/initramfs || perror "rm failed." } + [ -e ${MODULE_DIR}/initramfs ] && { rm ${MODULE_DIR}/initramfs || perror "rm failed."; } } -- cgit v1.2.3-55-g7522 From 919186998eb8cb98ad138f438ece00aec832b810 Mon Sep 17 00:00:00 2001 From: Jonathan Bauer Date: Mon, 25 Feb 2013 17:57:05 +0100 Subject: binutil external binary functions --- helper/binutil.inc | 122 ++++++++++++++++++++++++++++++++++++++++++++++++++ remote/setup_tools | 127 +++++++++++++++++++++++++++++++++-------------------- 2 files changed, 201 insertions(+), 48 deletions(-) create mode 100644 helper/binutil.inc (limited to 'remote/setup_tools') diff --git a/helper/binutil.inc b/helper/binutil.inc new file mode 100644 index 00000000..b97ab0f8 --- /dev/null +++ b/helper/binutil.inc @@ -0,0 +1,122 @@ +#!/bin/bash +# +# Common functions to copy binaries and their dependancies. +# +############################################################ +# +# Usage: get_dynamic_dependencies +# (the list must be seperated by spaces) +# +# Ouput: +# Will simply echo list of required libraries + +# List of libraries to exclude from +BLACKLIST="ld-linux linux-gate linux-vdso libc.so" +LOCALSEARCH=0 +LOCALSEARCHDIR="" + +get_dynamic_dependencies() { + + if [ "x$1" == "x-l" ]; then + LOCALSEARCH=1 + pdebug "Local search activated." + shift + [ ! -d $1 ] && perror "Directory given does not exist, exiting." + LOCALSEARCHDIR=$1 + shift + pdebug "Looking in: $LOCALSEARCHDIR" + fi + + while [ $# != 0 ]; do + local BINARY=$1 + shift + + pdebug "Processing ${BINARY} ..." + + local LDD_OUT="ldd_output" + if ldd $BINARY > $LDD_OUT; then + # Case 1: dynamic + for LIB in $(cat $LDD_OUT | grep -v $(echo $BLACKLIST|sed 's/ /\\|/g') | awk '{print $1 $2 $3}'); do + # split the entry into an array, ex: + # libm.so.6 => /lib/libm.so.6 would be split into: + # liblink[0] liblink[1] + local liblink=(${LIB//=>/ }) + pdebug " Searching for ${liblink[0]}..." + lib_search + done + else + # Case 2: not a dynamic + pdebug "$BINARY not a dynamic, skipping." + continue + fi + rm $LDD_OUT + done +} + +lib_search(){ + + # if activated, start by searching the lib locally + if [ "x$LOCALSEARCH" == "x1" ]; then + cd $LOCALSEARCHDIR + local LOCAL_MATCHES=$(find . -name "${liblink[0]}") # | awk -F '.' '{print $1}')".so\*) + cd - &>/dev/null + if [ "x${LOCAL_MATCHES}" != "x" ]; then + for llib in ${LOCAL_MATCHES}; do + pdebug "\tFound locally, copying ${LOCALSEARCHDIR}/${llib}" + get_link_chain "${LOCALSEARCHDIR}"/"${llib}" + + done + # found the libs, we are done + return + fi + # mark local search as done + LOCALSEARCH=0 + fi + + # search the lib on the system since it was not found earlier + if [ ! -z ${liblink[1]} ] && [ "x${liblink[1]}" != "xnot" ]; then + pdebug "\tNot found locally but in system, copying ${liblink[1]}" + # get chain of symlink for that lib + get_link_chain ${liblink[1]} + else + pwarning "Lib '${liblink[0]}' from required dir '$ENTRY' neither found in build directory nor on this system." + pwarning "If this lib is not supplied by another module, this module will probably fail in your final system" + fi +} +############################################################ +# +# Usage: get_link_chain +# +# must be in absolute form +# +# Output: +# Lists the symlink chain until a hardlink is found. +get_link_chain() { + + # the first parameter must be absolute + [[ "$1" == /* ]] || perror "get_link_chain() requires absolute paths." + + # canonalize + local LINK=$(canonicalize $1) + + # write the first link in the chain + # we strip the LOCALSEARCHDIR if it was found locally + [ "x$LOCALSEARCH" == "x1" ] && echo "./${LINK#$LOCALSEARCHDIR}" || echo ${LINK} + + # now we check for symlinks + local TRY=0 + while [ -L $LINK ] && [ $TRY -lt 10 ]; do + let TRY=TRY+1 + + # save the directory prefix + CURRENTDIR=$(dirname ${LINK}) + # first follow the link + LINK=$(readlink $LINK) + + pdebug "Processing $LINK" + # $LINK can be absolute or relative, check cases + [[ "$LINK" == /* ]] || LINK=$(canonicalize "$CURRENTDIR"/"${LINK}") + [ "x$LOCALSEARCH" == "x1" ] && echo "./${LINK#$LOCALSEARCHDIR}" || echo ${LINK} + done + +} diff --git a/remote/setup_tools b/remote/setup_tools index 67099197..76f163f5 100755 --- a/remote/setup_tools +++ b/remote/setup_tools @@ -47,24 +47,59 @@ copyfileswithdependencies () [ ! -z "${REQUIRED_BINARIES}" ] && pinfo "Gathering required binaries from config file..." for FILENAME in ${REQUIRED_BINARIES} do - FILE=$(find . -name ${FILENAME} -type f -executable | xargs grep -l '^.ELF'|head -1) # FIXME: What happens on multiple matches? Maybe add " | head -1" - if [ -z "$FILE" ]; then - pwarning "\tNo Binary found for ${FILENAME}. Skipping." - continue + FILE=$(find . -name ${FILENAME} -type f -executable | xargs grep -l '^.ELF') # FIXME: What happens on multiple matches? Maybe add " | head -1" + if [ -z "$FILE" ]; then + pwarning "\tNo Binary found for ${FILENAME}. Skipping." + continue + fi + pdebug "\tFound ${FILENAME} at ${FILE}" + echo "${FILE}" >> "${COPYFILES_LIST}" + # fetch dependencies + # quick fix to exclude libc*, else it copies unneeded libs... + # workaround for + ldd ${FILE} &>/dev/null + ldd_exit_code=$? + if [ "x$ldd_exit_code" != "x0" ]; + then + pdebug "\tldd $FILE failed." + continue + fi + for i in $(ldd "${FILE}" | awk '{print $1 $2 $3}' | grep -v ld-linux | grep -v libc.so | grep -v linux-gate | grep -v linux-vdso) + do + arrIN=(${i//=>/ }) + pdebug "* ${arrIN[0]}" + LOCAL_MATCHES=$(find . -name "$(echo ${arrIN[0]} | awk -F '.' '{print $1}')".so\*) + if [ "x${LOCAL_MATCHES}" != "x" ]; + then + for llib in ${LOCAL_MATCHES}; + do + pdebug " at ${llib}" + echo ${llib} >> "${COPYFILES_LIST}" + done + else + if [ -e ${arrIN[1]} ]; + then + echo ${arrIN[1]} >> "${COPYFILES_LIST}" + + if [ ! -L ${arrIN[1]} ]; + then + pdebug " at ${arrIN[1]}" + else + pdebug " at ${arrIN[1]} -> $(readlink -f ${arrIN[1]})" + echo $(readlink -f ${arrIN[1]}) >> ${COPYFILES_LIST} + fi + fi fi - pdebug "\tFound ${FILENAME} at ${FILE}" - echo "${FILE}" >> "${COPYFILES_LIST}" - get_dynamic_dependencies -l "${TOOL_DIR}/${TOOL}/build" "$FILE" >> "${COPYFILES_LIST}" + done done [ ! -z "${REQUIRED_LIBRARIES}" ] && pinfo "Gathering required libraries from config file..." for LIB in ${REQUIRED_LIBRARIES} do - for LOCATION in $(find . -name ${LIB}) + for LOCATION in $(find . -name ${LIB}*) do pdebug "* $LOCATION" - echo "${LOCATION}" >> ${COPYFILES_LIST} - get_dynamic_dependencies -l "${TOOL_DIR}/${TOOL}/build" ${LOCATION} >> ${COPYFILES_LIST} + echo ${LOCATION} >> ${COPYFILES_LIST} done done @@ -74,39 +109,34 @@ copyfileswithdependencies () do pdebug "* ./$ENTRY" echo "./${ENTRY}" >> "${COPYFILES_LIST}" - get_dynamic_dependencies -l "${TOOL_DIR}/${TOOL}/build" ${ENTRY} >> ${COPYFILES_LIST} - - - #as as \n - #echo "./${ENTRY}" >> "${COPYFILES_LIST}" - #for BIN in $(find "./${ENTRY}" -type f -not -name '*.a' | xargs grep -l '^.ELF') - #do - # pdebug " Searching libs for ${BIN}..." -# for i in $(ldd ${BIN} | awk '{print $1 $2 $3}' | grep -v ld-linux | grep -v libc.so | grep -v linux-gate | grep -v linux-vdso) -# do -# arrIN=(${i//=>/ }) -# pdebug " Searching for ${arrIN[0]}...($i)" -# local LOCAL_MATCHES=$(find . -name "$(echo ${arrIN[0]} | awk -F '.' '{print $1}')".so\*) -# if [ "x${LOCAL_MATCHES}" != "x" ]; -# then -# for llib in ${LOCAL_MATCHES}; -# do -# pdebug " Found locally, copying ${llib}" -# echo ${llib} >> "${COPYFILES_LIST}" -# done -# else -# if [ ! -z ${arrIN[1]} ] && [ "x${arrIN[1]}" != "xnot" ]; -# then -# pdebug " Not found locally but in system, copying ${arrIN[1]}" -# echo ${arrIN[1]} >> "${COPYFILES_LIST}" -# [ -L ${arrIN[1]} ] && echo $(readlink -f "${arrIN[1]}") >> "${COPYFILES_LIST}" -# else -# pwarning "Lib '${arrIN[0]}' from required dir '$ENTRY' neither found in build directory nor on this system." -# pwarning "If this lib is not supplied by another module, this module will probably fail in your final system" -# fi -# fi -# done -# done + for BIN in $(find "./${ENTRY}" -type f -not -name '*.a' | xargs grep -l '^.ELF') + do + pdebug " Searching libs for ${BIN}..." + for i in $(ldd ${BIN} | awk '{print $1 $2 $3}' | grep -v ld-linux | grep -v libc.so | grep -v linux-gate | grep -v linux-vdso) + do + arrIN=(${i//=>/ }) + pdebug " Searching for ${arrIN[0]}...($i)" + local LOCAL_MATCHES=$(find . -name "$(echo ${arrIN[0]} | awk -F '.' '{print $1}')".so\*) + if [ "x${LOCAL_MATCHES}" != "x" ]; + then + for llib in ${LOCAL_MATCHES}; + do + pdebug " Found locally, copying ${llib}" + echo ${llib} >> "${COPYFILES_LIST}" + done + else + if [ ! -z ${arrIN[1]} ] && [ "x${arrIN[1]}" != "xnot" ]; + then + pdebug " Not found locally but in system, copying ${arrIN[1]}" + echo ${arrIN[1]} >> "${COPYFILES_LIST}" + [ -L ${arrIN[1]} ] && echo $(readlink -f "${arrIN[1]}") >> "${COPYFILES_LIST}" + else + pwarning "Lib '${arrIN[0]}' from required dir '$ENTRY' neither found in build directory nor on this system." + pwarning "If this lib is not supplied by another module, this module will probably fail in your final system" + fi + fi + done + done done [ ! -z "${REQUIRED_FILES}" ] && pinfo "Gathering required files from config file..." @@ -167,10 +197,11 @@ generate_stage32 () { cd ${TOOL_DIR} while (( "$#" )); do TOOL=$1 - TOOL_STR="" - pinfo ">>>>>>>>>>>>>>>> Processing module [ $TOOL ]" - TOOL_STR="[${TOOL}]" - if [ -d ${TOOL} ]; then + if [ -d ${TOOL} ]; + then + TOOL_STR="[${TOOL}]" + pinfo "## ## Processing module ## ##" + #[ "x$DEBUG" != "x1" ] \ # && echo "Logging to ${TOOL_DIR}/${TOOL}/stage32.log" \ # && exec 6>&1 > ${TOOL_DIR}/${TOOL}/stage32.log @@ -198,13 +229,13 @@ generate_stage32 () { #[ "x$DEBUG" != "x1" ] && exec 1>&6 6>&- # TODO pinfo "## ## Module completed ## ##" + TOOL_STR="" else perror "Tool directory for '$TOOL' not found." # maybe make this a warning instead of error? fi shift done - TOOL_STR="" } clean_tools() { -- cgit v1.2.3-55-g7522 From 6115aa3769390404c3f03f29b4006fa2be212b66 Mon Sep 17 00:00:00 2001 From: Simon Rettberg Date: Mon, 25 Feb 2013 18:07:40 +0100 Subject: [tools] replace locate by find in base.build as it is faster, [setup_tools] treat scripts as binaries too but skip ldd part --- remote/setup_tools | 8 ++++---- remote/tools/base/base.build | 18 ++++++++---------- 2 files changed, 12 insertions(+), 14 deletions(-) (limited to 'remote/setup_tools') diff --git a/remote/setup_tools b/remote/setup_tools index 76f163f5..2df84a5d 100755 --- a/remote/setup_tools +++ b/remote/setup_tools @@ -47,7 +47,7 @@ copyfileswithdependencies () [ ! -z "${REQUIRED_BINARIES}" ] && pinfo "Gathering required binaries from config file..." for FILENAME in ${REQUIRED_BINARIES} do - FILE=$(find . -name ${FILENAME} -type f -executable | xargs grep -l '^.ELF') # FIXME: What happens on multiple matches? Maybe add " | head -1" + FILE=$(find . -name "${FILENAME}" -type f -executable | xargs grep -l -E '^(.ELF|#!)' | head -1) if [ -z "$FILE" ]; then pwarning "\tNo Binary found for ${FILENAME}. Skipping." continue @@ -57,8 +57,8 @@ copyfileswithdependencies () # fetch dependencies # quick fix to exclude libc*, else it copies unneeded libs... # workaround for - ldd ${FILE} &>/dev/null - ldd_exit_code=$? + ldd "${FILE}" &>/dev/null + local ldd_exit_code=$? if [ "x$ldd_exit_code" != "x0" ]; then pdebug "\tldd $FILE failed." @@ -67,7 +67,7 @@ copyfileswithdependencies () for i in $(ldd "${FILE}" | awk '{print $1 $2 $3}' | grep -v ld-linux | grep -v libc.so | grep -v linux-gate | grep -v linux-vdso) do arrIN=(${i//=>/ }) - pdebug "* ${arrIN[0]}" + pdebug "Processing lib ${arrIN[0]}" LOCAL_MATCHES=$(find . -name "$(echo ${arrIN[0]} | awk -F '.' '{print $1}')".so\*) if [ "x${LOCAL_MATCHES}" != "x" ]; then diff --git a/remote/tools/base/base.build b/remote/tools/base/base.build index b9d96fd5..98f24047 100644 --- a/remote/tools/base/base.build +++ b/remote/tools/base/base.build @@ -8,11 +8,11 @@ fetch_source() { build() { - BUILDDIR=${TOOL_DIR}/${TOOL}/build - mkdir -p ${BUILDDIR} + BUILDDIR="${TOOL_DIR}/${TOOL}/build" + mkdir -p "${BUILDDIR}" FILELIST="list_binaries_and_files" - [ -e ${FILELIST} ] && rm ${FILELIST} + [ -e "${FILELIST}" ] && rm "${FILELIST}" for BIN in ${REQUIRED_BINARIES} do @@ -31,7 +31,7 @@ build() { for LIB in ${REQUIRED_LIBRARIES} do - for LIB_LOCATION in $(locate ${LIB} | grep ^/lib/) + for LIB_LOCATION in $(find /lib/ -name "${LIB}.so\*") do echo ${LIB_LOCATION} >> "${FILELIST}" done @@ -51,9 +51,7 @@ build() { local NUMFILES=$(cat "${FILELIST}" | wc -l) if [ "x$NUMFILES" != "x" -a "x$NUMFILES" != "x0" ]; then pinfo "File list generated at ${BUILDDIR}/${FILELIST} ($NUMFILES entries)" - tar -cp $(cat "${FILELIST}") | tar -xp -C "${BUILDDIR}" - local RET=$? - [ $RET -ne 0 ] && perror "tar-copy from '$FILELIST' to '$BUILDDIR' failed." + tarcopy "${FILELIST}" "${BUILDDIR}" fi } @@ -64,14 +62,14 @@ post_copy() { # copy devices from running system cp -a /dev/{console,kmsg,mem,null,shm,tty,tty0,tty1,tty9,fb0,urandom,zero} \ - "${INIT_DIR}"/dev + "${INIT_DIR}"/dev || perror "Copying devices from running system failed." # set /etc/environment to include /openslx/bin and /openslx/sbin echo "PATH=\"/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/openslx/sbin:/openslx/bin\"" \ > "${INIT_DIR}/etc/environment" # copy static files - cp -r "${TOOL_DIR}/${TOOL}"/data/* "${INIT_DIR}" + cp -r "${TOOL_DIR}/${TOOL}"/data/* "${INIT_DIR}" || perror "Copying static files from data/* failed." # better: dirname $(ldd $SHELL|grep libc | awk -F " " '{print $3}') # copy pam modules, TODO: better way to find arch-dependant interfix... @@ -92,7 +90,7 @@ post_copy() { # setup root accoun USER=root PASSWORD='!r00t' add_user - [ ! -d ${INIT_DIR}/root ] && mkdir ${INIT_DIR}/root + mkdir -p ${INIT_DIR}/root echo "minilinux-$(hostname)" > "${INIT_DIR}/etc/hostname" -- cgit v1.2.3-55-g7522 From ac695437b5a672f9eb0d0e63655cb48286e3b2c0 Mon Sep 17 00:00:00 2001 From: Simon Rettberg Date: Mon, 25 Feb 2013 19:08:09 +0100 Subject: fix tarcopy call for base --- remote/setup_tools | 10 +++------- remote/tools/base/base.build | 2 +- 2 files changed, 4 insertions(+), 8 deletions(-) (limited to 'remote/setup_tools') diff --git a/remote/setup_tools b/remote/setup_tools index 2df84a5d..bf3f5157 100755 --- a/remote/setup_tools +++ b/remote/setup_tools @@ -40,7 +40,7 @@ copyfileswithdependencies () cd build - COPYFILES_LIST="list_wanted_stage3.2" + local COPYFILES_LIST="list_wanted_stage3.2" [ -e ${COPYFILES_LIST} ] && rm ${COPYFILES_LIST} @@ -151,9 +151,7 @@ copyfileswithdependencies () if [ -s "$COPYFILES_LIST" ]; then local CLISTCOUNT=$(cat "$COPYFILES_LIST" | wc -l) pinfo "Copying $CLISTCOUNT files to stage 3.2 target directory." - tar -cp $(cat ${COPYFILES_LIST}|sort -u) | tar -xp -C "${INIT_DIR}" - local RET=$? - [ "x$RET" != "x0" ] && perror "Could not tar-copy to $INIT_DIR" + tarcopy "$(cat ${COPYFILES_LIST}|sort -u)" "${INIT_DIR}" fi unset REQUIRED_BINARIES unset REQUIRED_LIBRARIES @@ -176,9 +174,7 @@ get_basic_libs () { BASICLIBS="${BASICLIBS} $i $(readlink -f "$i")" fi done - tar -cp ${BASICLIBS} | tar -xp -C ${INIT_DIR} - local RET=$? - [ "x$RET" != "x0" ] && perror "Could not tar-copy to $INIT_DIR" + tarcopy "${BASICLIBS}" "${INIT_DIR}" } generate_stage32 () { diff --git a/remote/tools/base/base.build b/remote/tools/base/base.build index 98f24047..06ff22b7 100644 --- a/remote/tools/base/base.build +++ b/remote/tools/base/base.build @@ -51,7 +51,7 @@ build() { local NUMFILES=$(cat "${FILELIST}" | wc -l) if [ "x$NUMFILES" != "x" -a "x$NUMFILES" != "x0" ]; then pinfo "File list generated at ${BUILDDIR}/${FILELIST} ($NUMFILES entries)" - tarcopy "${FILELIST}" "${BUILDDIR}" + tarcopy "$(cat "${FILELIST}")" "${BUILDDIR}" fi } -- cgit v1.2.3-55-g7522 From 8d34cf49ad72e556b88033202f7dde130d80fa74 Mon Sep 17 00:00:00 2001 From: Simon Rettberg Date: Mon, 25 Feb 2013 20:13:48 +0100 Subject: Several fixes and improvements: - return uid and gid again for add_user and add_group - abort execution if sourcing the .build or .conf file of a module fails - make sure lightdm user and group exists when building the ldm module - use tarcopy in all modules if appropriate --- helper/useradd.inc | 4 +- remote/setup_tools | 21 +++++----- remote/tools/dbus/dbus.build | 16 +++---- remote/tools/ldm-gtk-greeter/ldm-gtk-greeter.build | 49 +++++++++++----------- remote/tools/ldm/ldm.build | 44 +++++++++---------- remote/tools/policykit/policykit.build | 4 +- remote/tools/xorg/xorg.build | 21 +++++----- 7 files changed, 80 insertions(+), 79 deletions(-) (limited to 'remote/setup_tools') diff --git a/helper/useradd.inc b/helper/useradd.inc index 798e997c..bcbb25b2 100644 --- a/helper/useradd.inc +++ b/helper/useradd.inc @@ -149,6 +149,7 @@ add_user() { pinfo "Updated password of $USER" fi [ -z "${_GID}" ] && pinfo "Created group $GROUP" && echo "${GROUP}:x:${GROUPID}:" >> "${_GROUP}" + echo "${USERID}" } add_group () { @@ -166,7 +167,7 @@ add_group () { fi [ $# -ge 2 ] && [ ! -z "$2" ] && GROUPID=$2 local _GID=$(grep -E "^${GROUP}:[^:]*:[0-9]+:" "${_GROUP}" | head -1 | awk -F ':' '{print $3}') - [ "x${_GID}" != "x" ] && [ "x$GROUPID" = "x-" -o "x$GROUPID" = "x${_GID}" ] && return # nothing to do, already exists + [ "x${_GID}" != "x" ] && [ "x$GROUPID" = "x-" -o "x$GROUPID" = "x${_GID}" ] && echo "${_GID}" && return # nothing to do, already exists [ "x${_GID}" != "x" ] && perror "Group $GROUP already exists with GID ${_GID}, but creation was requested with GID $GROUPID" if [ "x$GROUPID" = "x-" ]; then local _UID=$(grep -E "^${GROUP}:[^:]*:[0-9]+:" "${_PASSWD}" | head -1 | awk -F ':' '{print $3}') @@ -178,6 +179,7 @@ add_group () { fi echo "${GROUP}:x:${GROUPID}:" >> "${_GROUP}" pinfo "Created group $GROUP" + echo "${GROUPID}" } init_users_and_groups() { diff --git a/remote/setup_tools b/remote/setup_tools index bf3f5157..74cc1c78 100755 --- a/remote/setup_tools +++ b/remote/setup_tools @@ -18,20 +18,20 @@ initial_checks () read_config () { - local TOOL_CONFIG=${TOOL_DIR}/${TOOL}/${TOOL}.conf + local TOOL_CONFIG="${TOOL_DIR}/${TOOL}/${TOOL}.conf" - [ ! -e ${TOOL_CONFIG} ] && perror "Config for '$TOOL' not found." + [ ! -e "${TOOL_CONFIG}" ] && perror "Config for '$TOOL' not found." - . ${TOOL_CONFIG} + . "${TOOL_CONFIG}" || perror "Sourcing '${TOOL_CONFIG}' failed." } read_build () { - local BUILD_SCRIPT=${TOOL_DIR}/${TOOL}/${TOOL}.build + local BUILD_SCRIPT="${TOOL_DIR}/${TOOL}/${TOOL}.build" - [ ! -e ${BUILD_SCRIPT} ] && perror "Build script for specified tool not found." + [ ! -e "${BUILD_SCRIPT}" ] && perror "Build script for specified tool not found." - . ${BUILD_SCRIPT} + . "${BUILD_SCRIPT}" || perror "Sourcing '${BUILD_SCRIPT}' failed." } copyfileswithdependencies () @@ -190,13 +190,14 @@ generate_stage32 () { fi # now iterate over given tools and copy them - cd ${TOOL_DIR} + cd "${TOOL_DIR}" while (( "$#" )); do TOOL=$1 + TOOL_STR="" + pinfo ">>>>>>>>>>>>>>>>> Processing module [ $TOOL ]" + TOOL_STR="[${TOOL}]" if [ -d ${TOOL} ]; then - TOOL_STR="[${TOOL}]" - pinfo "## ## Processing module ## ##" #[ "x$DEBUG" != "x1" ] \ # && echo "Logging to ${TOOL_DIR}/${TOOL}/stage32.log" \ @@ -225,13 +226,13 @@ generate_stage32 () { #[ "x$DEBUG" != "x1" ] && exec 1>&6 6>&- # TODO pinfo "## ## Module completed ## ##" - TOOL_STR="" else perror "Tool directory for '$TOOL' not found." # maybe make this a warning instead of error? fi shift done + TOOL_STR="" } clean_tools() { diff --git a/remote/tools/dbus/dbus.build b/remote/tools/dbus/dbus.build index 5254497f..83cc8efa 100644 --- a/remote/tools/dbus/dbus.build +++ b/remote/tools/dbus/dbus.build @@ -9,25 +9,25 @@ fetch_source() { } build() { - BUILDDIR=${TOOL_DIR}/${TOOL}/build + BUILDDIR="${TOOL_DIR}/${TOOL}/build" COPYLIST="list_dpkg_output" - [ -e ${COPYLIST} ] && rm ${COPYLIST} + [ -e "${COPYLIST}" ] && rm "${COPYLIST}" for FILE in $(dpkg -L dbus | grep -v share/doc | grep -v share/man) do - [ ! -d ${FILE} ] && echo ${FILE} >> ${COPYLIST} + [ ! -d "${FILE}" ] && echo ${FILE} >> "${COPYLIST}" done # prepare target dir & copy there [ ! -d ${BUILDDIR} ] && mkdir -p ${BUILDDIR} - (tar -cpv $(cat ${COPYLIST}|sort -u) | tar -xpv -C ${BUILDDIR}) &> /dev/null + tarcopy "$(cat "${COPYLIST}" | sort -u)" "${BUILDDIR}" } post_copy() { # copy static dbus systemd unit files to stage3.2 - SYSTEMDDIR=${INIT_DIR}/etc/systemd/system - [ ! -d ${SYSTEMDDIR} ] && mkdir -p ${SYSTEMDDIR} - cp -r ${TOOL_DIR}/${TOOL}/data/* ${INIT_DIR} - + SYSTEMDDIR="${INIT_DIR}/etc/systemd/system" + mkdir -p "${SYSTEMDDIR}" + cp -r "${TOOL_DIR}/${TOOL}/data/"* "${INIT_DIR}" || perror "Copying data/* failed." } + diff --git a/remote/tools/ldm-gtk-greeter/ldm-gtk-greeter.build b/remote/tools/ldm-gtk-greeter/ldm-gtk-greeter.build index 734481d7..31ad6181 100644 --- a/remote/tools/ldm-gtk-greeter/ldm-gtk-greeter.build +++ b/remote/tools/ldm-gtk-greeter/ldm-gtk-greeter.build @@ -1,13 +1,8 @@ #tool/distro specific functions for fetching, building and installing dependencies fetch_source () { - if [ ! -e .fetched_source ]; then - [ ! -d src ] && mkdir src - wget $URL - tar xfz $VERSION.tar.gz -C src/ - rm $VERSION.tar.gz - touch .fetched_source - fi + [ ! -e .fetched_source ] && download_untar "$URL" "src/" + touch .fetched_source } install_dependencies() { @@ -15,29 +10,32 @@ install_dependencies() { } build () { - BUILDDIR=$TOOL_DIR/$TOOL/build + BUILDDIR="$TOOL_DIR/$TOOL/build" if [ ! -e .built ]; then - cd src/$VERSION - ./configure --prefix="/" --datarootdir="/usr/share" - make - [ ! -d $BUILDDIR ] && mkdir -p $BUILDDIR - DESTDIR=$BUILDDIR make install + cd "src/$VERSION" + pinfo "Running configure" + ./configure --prefix="/" --datarootdir="/usr/share" || perror "failed." + pinfo "Running make" + make || perror "failed." + mkdir -p "$BUILDDIR" + pinfo "Running make install" + DESTDIR="$BUILDDIR" make install || perror "failed." COPYLIST="list_dpkg_output" - [ -e $COPYLIST ] && rm $COPYLIST + [ -e "$COPYLIST" ] && rm "$COPYLIST" for PACKAGE in ${REQUIRED_PACKAGES} do for FILE in $(dpkg -L ${PACKAGE} | grep -v share/doc | grep -v share/man) do - [ ! -d $FILE ] && echo $FILE >> $COPYLIST + [ ! -d $FILE ] && echo $FILE >> "$COPYLIST" done done # prepare target dir & copy there - [ ! -d $BUILDDIR ] && mkdir -p $BUILDDIR - tar -cpv $(cat $COPYLIST|sort -u) | tar -xpv -C $BUILDDIR + mkdir -p "$BUILDDIR" + tarcopy "$(cat "$COPYLIST" | sort -u)" "$BUILDDIR" cd - touch .built @@ -47,13 +45,14 @@ build () { post_copy() { #copy static data files - cp -r ${TOOL_DIR}/${TOOL}/data/* ${INIT_DIR} + cp -r "${TOOL_DIR}/${TOOL}/data/"* "${INIT_DIR}" || perror "Copying data/* failed." # TODO: FIX PATH TO TRIPLET... - TRIPLET=$(basename $(dirname $(ldd $SHELL|grep libc | awk -F " " '{print $3}'))) - gdk-pixbuf-query-loaders > ${INIT_DIR}/usr/lib/${TRIPLET}/gdk-pixbuf-2.0/2.10.0/loaders.cache - mkdir -p ${INIT_DIR}/etc/pango - pango-querymodules > ${INIT_DIR}/etc/pango/pango.modules - gtk-update-icon-cache-3.0 ${INIT_DIR}/usr/share/icons/hicolor/ - update-mime-database ${INIT_DIR}/usr/share/mime - cp -r /var/lib/polkit-1 ${INIT_DIR}/var/lib + TRIPLET="$(basename "$(dirname "$(ldd "$SHELL" | grep libc | awk -F " " '{print $3}')")")" + gdk-pixbuf-query-loaders > "${INIT_DIR}/usr/lib/${TRIPLET}/gdk-pixbuf-2.0/2.10.0/loaders.cache" || perror "pixbuf-query-loaders failed." + mkdir -p "${INIT_DIR}/etc/pango" || perror "Making etc/pango failed." + pango-querymodules > "${INIT_DIR}/etc/pango/pango.modules" || perror "pango-querymodules failed." + gtk-update-icon-cache-3.0 "${INIT_DIR}/usr/share/icons/hicolor/" || perror "update-icon-cache-3.0 failed." + update-mime-database "${INIT_DIR}/usr/share/mime" || perror "update-mime-database failed." + cp -r "/var/lib/polkit-1" "${INIT_DIR}/var/lib/" || perror "Copying -r /var/lib/polkit-1 to '${INIT_DIR}/var/lib/' failed." } + diff --git a/remote/tools/ldm/ldm.build b/remote/tools/ldm/ldm.build index 76f53410..9f45e058 100644 --- a/remote/tools/ldm/ldm.build +++ b/remote/tools/ldm/ldm.build @@ -1,13 +1,8 @@ #tool/distro specific functions for fetching, building and installing dependencies fetch_source () { - if [ ! -e .fetched_source ]; then - [ ! -d src ] && mkdir src - wget $URL - tar xf $VERSION.tar.gz -C src/ - rm $VERSION.tar.gz - touch .fetched_source - fi + [ ! -e .fetched_source ] && download_untar "$URL" "src/" + touch .fetched_source } install_dependencies() { @@ -15,29 +10,31 @@ install_dependencies() { } build () { - BUILDDIR=$TOOL_DIR/$TOOL/build - + BUILDDIR="$TOOL_DIR/$TOOL/build" if [ ! -e .built ]; then - cd src/$VERSION - ./configure --prefix="/" --datarootdir="/usr/share" - make - [ ! -d $BUILDDIR ] && mkdir -p $BUILDDIR - DESTDIR=$BUILDDIR make install + cd "src/$VERSION" + pinfo "Running configure" + ./configure --prefix="/" --datarootdir="/usr/share" || perror "failed." + pinfo "Running make" + make || perror "failed." + mkdir -p "$BUILDDIR" + pinfo "Running make install" + DESTDIR="$BUILDDIR" make install || perror "failed." COPYLIST="list_dpkg_output" - [ -e $COPYLIST ] && rm $COPYLIST + [ -e "$COPYLIST" ] && rm "$COPYLIST" for PACKAGE in ${REQUIRED_PACKAGES} do for FILE in $(dpkg -L ${PACKAGE} | grep -v share/doc | grep -v share/man) do - [ ! -d $FILE ] && echo $FILE >> $COPYLIST + [ ! -d $FILE ] && echo $FILE >> "$COPYLIST" done done #prepare target dir & copy there - [ ! -d $BUILDDIR ] && mkdir -p $BUILDDIR - tar -cpv $(cat $COPYLIST|sort -u) | tar -xpv -C $BUILDDIR + mkdir -p "$BUILDDIR" + tarcopy "$(cat "$COPYLIST" | sort -u)" "$BUILDDIR" cd - touch .built @@ -46,11 +43,14 @@ build () { } post_copy() { - [ ! -d ${INIT_DIR}/var/lib/lightdm ] && mkdir -p ${INIT_DIR}/var/lib/lightdm - touch ${INIT_DIR}/var/lib/lightdm/.Xauthority - chown -R lightdm:lightdm ${INIT_DIR}/var/lib/lightdm/ + mkdir -p "${INIT_DIR}/var/lib/lightdm" + touch "${INIT_DIR}/var/lib/lightdm/.Xauthority" || perror "Cannot touch '${INIT_DIR}/var/lib/lightdm/.Xauthority'" + local LDMUID=$(add_user "lightdm") + local LDMGID=$(add_group "lightdm") + pinfo "lightdm user and group is $LDMUID $LDMGID" + chown -R "${LDMUID}:${LDMGID}" "${INIT_DIR}/var/lib/lightdm/" || perror "chowning '${INIT_DIR}/var/lib/lightdm/' failed." #copyi static data files - cp -r ${TOOL_DIR}/${TOOL}/data/* ${INIT_DIR} + cp -r "${TOOL_DIR}/${TOOL}/data/"* "${INIT_DIR}" || perror "Copying data/ failed." } diff --git a/remote/tools/policykit/policykit.build b/remote/tools/policykit/policykit.build index 871025a1..a42f48b7 100644 --- a/remote/tools/policykit/policykit.build +++ b/remote/tools/policykit/policykit.build @@ -45,9 +45,7 @@ build () { # prepare target dir & copy there if [ -s "$COPYLIST" ]; then pinfo "using tar to copy all dependencies to $BUILDDIR" - tar -cpv $(cat $COPYLIST|sort -u) | tar -xpv -C $BUILDDIR - local RET=$? - [ $RET -ne 0 ] && perror "copy failed." + tarcopy "$(cat "$COPYLIST" | sort -u)" "$BUILDDIR" else pinfo "no dependencies found!" fi diff --git a/remote/tools/xorg/xorg.build b/remote/tools/xorg/xorg.build index 590d0bb0..6ce5747c 100644 --- a/remote/tools/xorg/xorg.build +++ b/remote/tools/xorg/xorg.build @@ -1,37 +1,38 @@ #!/bin/bash install_dependencies() { - echo "No dependencies." + : } fetch_source() { - echo "Extracting from running system..." + : } build() { - BUILDDIR=$TOOL_DIR/$TOOL/build + BUILDDIR="$TOOL_DIR/$TOOL/build" COPYLIST="list_dpkg_output" - [ -e $COPYLIST ] && rm $COPYLIST + [ -e "$COPYLIST" ] && rm "$COPYLIST" for PACKAGE in ${REQUIRED_PACKAGES} do for FILE in $(dpkg -L ${PACKAGE} | grep -v share/doc | grep -v share/man) do - [ ! -d $FILE ] && echo $FILE >> $COPYLIST + [ ! -d $FILE ] && echo $FILE >> "$COPYLIST" done done # prepare target dir & copy there - [ ! -d $BUILDDIR ] && mkdir -p $BUILDDIR - (tar -cpv $(cat $COPYLIST|sort -u) | tar -xpv -C $BUILDDIR) &>/dev/null + mkdir -p "$BUILDDIR" + tarcopy "$(cat "$COPYLIST" | sort -u)" "$BUILDDIR" } post_copy() { - [ ! -d $INIT_DIR/etc/X11 ] && mkdir -p $INIT_DIR/etc/X11 + mkdir -p "$INIT_DIR/etc/X11" [ ! -e ${INIT_DIR}/etc/X11/X ] && ln -s /usr/bin/Xorg ${INIT_DIR}/etc/X11/X - [ ! -d $INIT_DIR/var/lib/xkb ] && mkdir -p $INIT_DIR/var/lib/xkb - cp /var/lib/xkb/server* $INIT_DIR/var/lib/xkb + mkdir -p "$INIT_DIR/var/lib/xkb" + cp /var/lib/xkb/server* "$INIT_DIR/var/lib/xkb/" || perror "Copying /var/lib/xkb/server* to '$INIT_DIR/var/lib/xkb/' failed." } + -- cgit v1.2.3-55-g7522 From 6192918205e74ce1fde46817447ab6addd77df61 Mon Sep 17 00:00:00 2001 From: Simon Rettberg Date: Tue, 26 Feb 2013 15:50:50 +0100 Subject: Added dependency system for modules (REQUIRED_MODULES var in *.conf of module, for an example, see policykit.conf) --- remote/setup_tools | 116 ++++++++++++--------- remote/tools/ldm-gtk-greeter/ldm-gtk-greeter.build | 1 + remote/tools/ldm-gtk-greeter/ldm-gtk-greeter.conf | 2 + remote/tools/policykit/policykit.conf | 2 + 4 files changed, 73 insertions(+), 48 deletions(-) (limited to 'remote/setup_tools') diff --git a/remote/setup_tools b/remote/setup_tools index 74cc1c78..4c7d65e2 100755 --- a/remote/setup_tools +++ b/remote/setup_tools @@ -1,10 +1,13 @@ #!/bin/bash -MODULE_DIR=${ROOT_DIR}/remote +MODULE_DIR="${ROOT_DIR}/remote" #Create tools directory if not exists -TOOL_DIR=${MODULE_DIR}/tools -INIT_DIR=${MODULE_DIR}/stage3.2 +TOOL_DIR="${MODULE_DIR}/tools" +INIT_DIR="${MODULE_DIR}/stage3.2" + +# Keep track of processed modules +PROCESSED_MODULES="" initial_checks () { @@ -18,6 +21,12 @@ initial_checks () read_config () { + unset REQUIRED_BINARIES + unset REQUIRED_LIBRARIES + unset REQUIRED_DIRECTORIES + unset REQUIRED_FILES + unset REQUIRED_MODULES + local TOOL_CONFIG="${TOOL_DIR}/${TOOL}/${TOOL}.conf" [ ! -e "${TOOL_CONFIG}" ] && perror "Config for '$TOOL' not found." @@ -153,10 +162,6 @@ copyfileswithdependencies () pinfo "Copying $CLISTCOUNT files to stage 3.2 target directory." tarcopy "$(cat ${COPYFILES_LIST}|sort -u)" "${INIT_DIR}" fi - unset REQUIRED_BINARIES - unset REQUIRED_LIBRARIES - unset REQUIRED_DIRECTORIES - unset REQUIRED_FILES } get_basic_libs () { @@ -190,58 +195,74 @@ generate_stage32 () { fi # now iterate over given tools and copy them - cd "${TOOL_DIR}" while (( "$#" )); do - TOOL=$1 - TOOL_STR="" - pinfo ">>>>>>>>>>>>>>>>> Processing module [ $TOOL ]" - TOOL_STR="[${TOOL}]" - if [ -d ${TOOL} ]; - then - - #[ "x$DEBUG" != "x1" ] \ - # && echo "Logging to ${TOOL_DIR}/${TOOL}/stage32.log" \ - # && exec 6>&1 > ${TOOL_DIR}/${TOOL}/stage32.log - # TODO: Make above work with the new logging system (add function to logging.inc to switch logfile) - cd "${TOOL}" - pinfo "## Reading config" - read_config - pinfo "## Reading build" - read_build - pinfo "## Installing dependencies" - install_dependencies - pinfo "## Fetching source" - fetch_source - pinfo "## Building" - build - # remove *.la files as they might confuse libtool/linker of other tool packages - find "${TOOL_DIR}/${TOOL}/build" -name '*.la' -exec rm -f {} \; - pinfo "## Copying files with dependencies" - copyfileswithdependencies - pinfo "## Post copy" - post_copy - cd ${TOOL_DIR} - - # reset pipes - #[ "x$DEBUG" != "x1" ] && exec 1>&6 6>&- - # TODO - pinfo "## ## Module completed ## ##" - else - perror "Tool directory for '$TOOL' not found." - # maybe make this a warning instead of error? - fi + process_module "$1" shift done TOOL_STR="" } +process_module() { + [ "$#" -ne "1" ] && perror "process_module: want 1 param." + local TOOL="$1" + [[ "$PROCESSED_MODULES" == *"!${TOOL}!"* ]] && return # Already processed this module + PROCESSED_MODULES="${PROCESSED_MODULES}!${TOOL}!" + local TOOL_STR="" + pinfo ">>>>>>>>>>>>>>>>> Processing module [ $TOOL ]" + TOOL_STR="[${TOOL}]" + if [ -d "${TOOL_DIR}/${TOOL}" ]; + then + + #[ "x$DEBUG" != "x1" ] \ + # && echo "Logging to ${TOOL_DIR}/${TOOL}/stage32.log" \ + # && exec 6>&1 > ${TOOL_DIR}/${TOOL}/stage32.log + # TODO: Make above work with the new logging system (add function to logging.inc to switch logfile) + cd "${TOOL_DIR}/${TOOL}" || perror "Tool dir '${TOOL_DIR}/${TOOL}' seems to exist, but cd to it failed." + pinfo "## Reading config" + read_config + # Check if this module has a dependency that wasn't built yet: + if [ ! -z "$REQUIRED_MODULES" ]; then + pinfo "$TOOL depends on ${REQUIRED_MODULES}...." + for DEP in $REQUIRED_MODULES; do + #[[ "$DESIRED_MODULES" != *"!${DEP}!"* ]] && perror "$TOOL has dependency $DEP, but $DEP is not in current profile." + process_module "$DEP" + done + # Read old config again, as it got overwritten by the deps + cd "${TOOL_DIR}/${TOOL}" || perror "Tool dir '${TOOL_DIR}/${TOOL}' seems to exist, but cd to it failed (after building deps)." + read_config + pinfo "<<<<<<<<<<<<<<<<< Dependency modules processed, back to module [ $TOOL ]" + fi + pinfo "## Reading build" + read_build + pinfo "## Installing dependencies" + install_dependencies + pinfo "## Fetching source" + fetch_source + pinfo "## Building" + build + # remove *.la files as they might confuse libtool/linker of other tool packages + find "${TOOL_DIR}/${TOOL}/build" -name '*.la' -exec rm -f {} \; + pinfo "## Copying files with dependencies" + copyfileswithdependencies + pinfo "## Post copy" + post_copy + + # reset pipes + #[ "x$DEBUG" != "x1" ] && exec 1>&6 6>&- + # TODO + pinfo "Module completed." + else + perror "Tool directory for '$TOOL' not found." + # maybe make this a warning instead of error? + fi +} + clean_tools() { if [ "x$1" = "x" -o "x$1" = "xall" ]; then #clean all if [ -d ${INIT_DIR} ]; then pinfo "Cleaning ${INIT_DIR}..." rm -rf "${INIT_DIR}" || perror "Error deleting $INIT_DIR" - pinfo "done." fi for TOOL in $(ls ${TOOL_DIR}); do clean_tool $TOOL @@ -276,7 +297,6 @@ clean_tool() { if [ -e ${TOOLDIR}/list_binaries_and_files ]; then rm "${TOOLDIR}/list_binaries_and_files" || perror "Could not delete list_binaries_and_files" fi - pinfo "done." } #generate_stage32 $@ diff --git a/remote/tools/ldm-gtk-greeter/ldm-gtk-greeter.build b/remote/tools/ldm-gtk-greeter/ldm-gtk-greeter.build index 31ad6181..edd3427a 100644 --- a/remote/tools/ldm-gtk-greeter/ldm-gtk-greeter.build +++ b/remote/tools/ldm-gtk-greeter/ldm-gtk-greeter.build @@ -53,6 +53,7 @@ post_copy() { pango-querymodules > "${INIT_DIR}/etc/pango/pango.modules" || perror "pango-querymodules failed." gtk-update-icon-cache-3.0 "${INIT_DIR}/usr/share/icons/hicolor/" || perror "update-icon-cache-3.0 failed." update-mime-database "${INIT_DIR}/usr/share/mime" || perror "update-mime-database failed." + mkdir -p "${INIT_DIR}/var/lib" cp -r "/var/lib/polkit-1" "${INIT_DIR}/var/lib/" || perror "Copying -r /var/lib/polkit-1 to '${INIT_DIR}/var/lib/' failed." } diff --git a/remote/tools/ldm-gtk-greeter/ldm-gtk-greeter.conf b/remote/tools/ldm-gtk-greeter/ldm-gtk-greeter.conf index faf9f32c..f243fc20 100644 --- a/remote/tools/ldm-gtk-greeter/ldm-gtk-greeter.conf +++ b/remote/tools/ldm-gtk-greeter/ldm-gtk-greeter.conf @@ -5,3 +5,5 @@ REQUIRED_PACKAGES="libgdk-pixbuf2.0-0 libpango1.0-0 librsvg2-common shared-mime- REQUIRED_BINARIES="lightdm-gtk-greeter" REQUIRED_DIRECTORIES="/usr/lib /usr/share/lightdm-gtk-greeter /usr/share/mime /usr/share/xgreeters /usr/share/icons /usr/share/themes /etc /usr/bin /usr/share/polkit-1 /usr/share/dbus-1" REQUIRED_FILES="/etc/lightdm/lightdm-gtk-greeter.conf" +REQUIRED_MODULES="ldm" + diff --git a/remote/tools/policykit/policykit.conf b/remote/tools/policykit/policykit.conf index 1ccef0e6..c8c27cf3 100644 --- a/remote/tools/policykit/policykit.conf +++ b/remote/tools/policykit/policykit.conf @@ -5,3 +5,5 @@ REQUIRED_PACKAGES="" REQUIRED_BINARIES="" REQUIRED_DIRECTORIES="/bin /etc /lib /usr/share/dbus-1 /usr/share/polkit-1" REQUIRED_FILES="" +REQUIRED_MODULES="systemd" + -- cgit v1.2.3-55-g7522 From 60c6a93345ed696ce975e36ceca4d3733717666a Mon Sep 17 00:00:00 2001 From: Jonathan Bauer Date: Wed, 27 Feb 2013 17:15:49 +0100 Subject: using binutils EVERYWHERE --- data/stage3.1/init | 1 - remote/setup_tools | 103 ++++++++++--------------------------------- remote/tools/base/base.build | 9 ++-- remote/tools/base/base.conf | 7 ++- remote/tools/dbus/dbus.build | 2 +- 5 files changed, 31 insertions(+), 91 deletions(-) (limited to 'remote/setup_tools') diff --git a/data/stage3.1/init b/data/stage3.1/init index f25ddc7b..d5df6995 100755 --- a/data/stage3.1/init +++ b/data/stage3.1/init @@ -38,7 +38,6 @@ mount -n -t aufs -o br:/dev/shm/uniontmp:/rorootfs=ro none /mnt mkdir -p /mnt/uniontmp /mnt/tmp mount -n --move /dev/shm/uniontmp /mnt/uniontmp -[ ! -d /lib ] && unlink /lib && mkdir /lib mount --bind /mnt/lib /lib #ln -sf /mnt/lib / diff --git a/remote/setup_tools b/remote/setup_tools index bf3f5157..0660e2ef 100755 --- a/remote/setup_tools +++ b/remote/setup_tools @@ -40,66 +40,32 @@ copyfileswithdependencies () cd build - local COPYFILES_LIST="list_wanted_stage3.2" + COPYFILES_LIST="list_wanted_stage3.2" [ -e ${COPYFILES_LIST} ] && rm ${COPYFILES_LIST} [ ! -z "${REQUIRED_BINARIES}" ] && pinfo "Gathering required binaries from config file..." for FILENAME in ${REQUIRED_BINARIES} do - FILE=$(find . -name "${FILENAME}" -type f -executable | xargs grep -l -E '^(.ELF|#!)' | head -1) - if [ -z "$FILE" ]; then - pwarning "\tNo Binary found for ${FILENAME}. Skipping." - continue - fi - pdebug "\tFound ${FILENAME} at ${FILE}" - echo "${FILE}" >> "${COPYFILES_LIST}" - # fetch dependencies - # quick fix to exclude libc*, else it copies unneeded libs... - # workaround for - ldd "${FILE}" &>/dev/null - local ldd_exit_code=$? - if [ "x$ldd_exit_code" != "x0" ]; - then - pdebug "\tldd $FILE failed." - continue - fi - for i in $(ldd "${FILE}" | awk '{print $1 $2 $3}' | grep -v ld-linux | grep -v libc.so | grep -v linux-gate | grep -v linux-vdso) - do - arrIN=(${i//=>/ }) - pdebug "Processing lib ${arrIN[0]}" - LOCAL_MATCHES=$(find . -name "$(echo ${arrIN[0]} | awk -F '.' '{print $1}')".so\*) - if [ "x${LOCAL_MATCHES}" != "x" ]; - then - for llib in ${LOCAL_MATCHES}; - do - pdebug " at ${llib}" - echo ${llib} >> "${COPYFILES_LIST}" - done - else - if [ -e ${arrIN[1]} ]; - then - echo ${arrIN[1]} >> "${COPYFILES_LIST}" - - if [ ! -L ${arrIN[1]} ]; - then - pdebug " at ${arrIN[1]}" - else - pdebug " at ${arrIN[1]} -> $(readlink -f ${arrIN[1]})" - echo $(readlink -f ${arrIN[1]}) >> ${COPYFILES_LIST} - fi - fi + FILE=$(find . -name "${FILENAME}" -type f -executable | xargs grep -l -E '^(.ELF|#!)' | head -1) + if [ -z "$FILE" ]; then + pwarning "\tNo Binary found for ${FILENAME}. Skipping." + continue fi - done - done + + pdebug "\tFound ${FILENAME} at ${FILE}" + get_link_chain "${TOOL_DIR}/${TOOL}/build/${FILE}" "${TOOL_DIR}/${TOOL}/build" >> "${COPYFILES_LIST}" + get_dynamic_dependencies -l "${TOOL_DIR}/${TOOL}/build" "${FILE}" >> "${COPYFILES_LIST}" + done [ ! -z "${REQUIRED_LIBRARIES}" ] && pinfo "Gathering required libraries from config file..." for LIB in ${REQUIRED_LIBRARIES} do - for LOCATION in $(find . -name ${LIB}*) + for LOCATION in $(find . -name ${LIB}.so\*) do pdebug "* $LOCATION" - echo ${LOCATION} >> ${COPYFILES_LIST} + get_link_chain "${TOOL_DIR}/${TOOL}/build/${LOCATION}" "${TOOL_DIR}/${TOOL}/build" >> "${COPYFILES_LIST}" + get_dynamic_dependencies -l "${TOOL_DIR}/${TOOL}/build" "${LOCATION}" >> "${COPYFILES_LIST}" done done @@ -112,37 +78,16 @@ copyfileswithdependencies () for BIN in $(find "./${ENTRY}" -type f -not -name '*.a' | xargs grep -l '^.ELF') do pdebug " Searching libs for ${BIN}..." - for i in $(ldd ${BIN} | awk '{print $1 $2 $3}' | grep -v ld-linux | grep -v libc.so | grep -v linux-gate | grep -v linux-vdso) - do - arrIN=(${i//=>/ }) - pdebug " Searching for ${arrIN[0]}...($i)" - local LOCAL_MATCHES=$(find . -name "$(echo ${arrIN[0]} | awk -F '.' '{print $1}')".so\*) - if [ "x${LOCAL_MATCHES}" != "x" ]; - then - for llib in ${LOCAL_MATCHES}; - do - pdebug " Found locally, copying ${llib}" - echo ${llib} >> "${COPYFILES_LIST}" - done - else - if [ ! -z ${arrIN[1]} ] && [ "x${arrIN[1]}" != "xnot" ]; - then - pdebug " Not found locally but in system, copying ${arrIN[1]}" - echo ${arrIN[1]} >> "${COPYFILES_LIST}" - [ -L ${arrIN[1]} ] && echo $(readlink -f "${arrIN[1]}") >> "${COPYFILES_LIST}" - else - pwarning "Lib '${arrIN[0]}' from required dir '$ENTRY' neither found in build directory nor on this system." - pwarning "If this lib is not supplied by another module, this module will probably fail in your final system" - fi - fi - done + get_link_chain "${TOOL_DIR}/${TOOL}/build/${BIN}" "${TOOL_DIR}/${TOOL}/build" >> "${COPYFILES_LIST}" + get_dynamic_dependencies -l "${TOOL_DIR}/${TOOL}/build" "${BIN}" >> "${COPYFILES_LIST}" done done [ ! -z "${REQUIRED_FILES}" ] && pinfo "Gathering required files from config file..." for ENTRY in ${REQUIRED_FILES} do - echo "./${ENTRY}" >> "${COPYFILES_LIST}" + get_link_chain "${TOOL_DIR}/${TOOL}/build/${ENTRY}" "${TOOL_DIR}/${TOOL}/build" >> "${COPYFILES_LIST}" + get_dynamic_dependencies -l "${TOOL_DIR}/${TOOL}/build" "${TOOL_DIR}/${TOOL}/build/.${ENTRY}" >> "${COPYFILES_LIST}" done @@ -151,7 +96,9 @@ copyfileswithdependencies () if [ -s "$COPYFILES_LIST" ]; then local CLISTCOUNT=$(cat "$COPYFILES_LIST" | wc -l) pinfo "Copying $CLISTCOUNT files to stage 3.2 target directory." - tarcopy "$(cat ${COPYFILES_LIST}|sort -u)" "${INIT_DIR}" + tar -cp $(cat ${COPYFILES_LIST}|sort -u) | tar -xp -C "${INIT_DIR}" + local RET=$? + [ "x$RET" != "x0" ] && perror "Could not tar-copy to $INIT_DIR" fi unset REQUIRED_BINARIES unset REQUIRED_LIBRARIES @@ -174,7 +121,9 @@ get_basic_libs () { BASICLIBS="${BASICLIBS} $i $(readlink -f "$i")" fi done - tarcopy "${BASICLIBS}" "${INIT_DIR}" + tar -cp ${BASICLIBS} | tar -xp -C ${INIT_DIR} + local RET=$? + [ "x$RET" != "x0" ] && perror "Could not tar-copy to $INIT_DIR" } generate_stage32 () { @@ -238,9 +187,8 @@ clean_tools() { if [ "x$1" = "x" -o "x$1" = "xall" ]; then #clean all if [ -d ${INIT_DIR} ]; then - pinfo "Cleaning ${INIT_DIR}..." rm -rf "${INIT_DIR}" || perror "Error deleting $INIT_DIR" - pinfo "done." + pinfo "Cleaned ${INIT_DIR}" fi for TOOL in $(ls ${TOOL_DIR}); do clean_tool $TOOL @@ -275,7 +223,4 @@ clean_tool() { if [ -e ${TOOLDIR}/list_binaries_and_files ]; then rm "${TOOLDIR}/list_binaries_and_files" || perror "Could not delete list_binaries_and_files" fi - pinfo "done." } - -#generate_stage32 $@ diff --git a/remote/tools/base/base.build b/remote/tools/base/base.build index 06ff22b7..efabaedd 100644 --- a/remote/tools/base/base.build +++ b/remote/tools/base/base.build @@ -20,10 +20,7 @@ build() { if [ ! -z ${BIN_LOCATION} -a -e ${BIN_LOCATION} ]; then pdebug "Processing $BIN at $BIN_LOCATION ..." - echo ${BIN_LOCATION} >> "${FILELIST}" - [ -L "${BIN_LOCATION}" ] \ - && pdebug "${BIN_LOCATION} is a symbolic link, copying $(readlink -f "${BIN_LOCATION}")" \ - && echo $(readlink -f "${BIN_LOCATION}") >> "${FILELIST}" + get_link_chain ${BIN_LOCATION} >> "${FILELIST}" else perror "${BIN} not found on the system! Please install it." fi @@ -31,9 +28,9 @@ build() { for LIB in ${REQUIRED_LIBRARIES} do - for LIB_LOCATION in $(find /lib/ -name "${LIB}.so\*") + for LIB_LOCATION in $(find /lib/ -name "${LIB}.so*") do - echo ${LIB_LOCATION} >> "${FILELIST}" + get_link_chain "${LIB_LOCATION}" >> "${FILELIST}" done done diff --git a/remote/tools/base/base.conf b/remote/tools/base/base.conf index 85b638e6..6a95ab2c 100644 --- a/remote/tools/base/base.conf +++ b/remote/tools/base/base.conf @@ -9,7 +9,8 @@ REQUIRED_BINARIES=" bash sulogin mount umount - mount.nfs + mount.nfs4 + umount.nfs4 mount.aufs umount.aufs rm @@ -40,9 +41,7 @@ REQUIRED_LIBRARIES=" libcap libau" REQUIRED_DIRECTORIES=" /etc/pam.d /etc/security" -REQUIRED_FILES=" /sbin/mount.nfs4 - /sbin/umount.nfs4 - /etc/environment +REQUIRED_FILES=" /etc/environment /etc/pam.conf /etc/issue /etc/inputrc diff --git a/remote/tools/dbus/dbus.build b/remote/tools/dbus/dbus.build index 5254497f..331d49e4 100644 --- a/remote/tools/dbus/dbus.build +++ b/remote/tools/dbus/dbus.build @@ -21,7 +21,7 @@ build() { # prepare target dir & copy there [ ! -d ${BUILDDIR} ] && mkdir -p ${BUILDDIR} - (tar -cpv $(cat ${COPYLIST}|sort -u) | tar -xpv -C ${BUILDDIR}) &> /dev/null + tar -cp $(cat ${COPYLIST}|sort -u) | tar -xp -C ${BUILDDIR} } post_copy() { -- cgit v1.2.3-55-g7522 From d4bc9f2ba7a6deda2a23b6a1c15688c604a2658b Mon Sep 17 00:00:00 2001 From: Jonathan Bauer Date: Wed, 27 Feb 2013 18:36:38 +0100 Subject: unset REQUIRED_PACKAGE when reading config --- remote/setup_tools | 1 + 1 file changed, 1 insertion(+) (limited to 'remote/setup_tools') diff --git a/remote/setup_tools b/remote/setup_tools index e0c092a4..cb067864 100755 --- a/remote/setup_tools +++ b/remote/setup_tools @@ -26,6 +26,7 @@ read_config () unset REQUIRED_DIRECTORIES unset REQUIRED_FILES unset REQUIRED_MODULES + unset REQUIRED_PACKAGES local TOOL_CONFIG="${TOOL_DIR}/${TOOL}/${TOOL}.conf" -- cgit v1.2.3-55-g7522 From 9d559dd9c8a92e4f46b29a6e1bd30227b476209b Mon Sep 17 00:00:00 2001 From: Simon Rettberg Date: Wed, 27 Feb 2013 18:41:16 +0100 Subject: Handle required binaries that are symlinks properly --- remote/setup_tools | 26 ++++++++++++++++++++------ 1 file changed, 20 insertions(+), 6 deletions(-) (limited to 'remote/setup_tools') diff --git a/remote/setup_tools b/remote/setup_tools index e0c092a4..24f2a291 100755 --- a/remote/setup_tools +++ b/remote/setup_tools @@ -56,15 +56,29 @@ copyfileswithdependencies () [ ! -z "${REQUIRED_BINARIES}" ] && pinfo "Gathering required binaries from config file..." for FILENAME in ${REQUIRED_BINARIES} do - FILE=$(find . -name "${FILENAME}" -type f -executable | xargs grep -l -E '^(.ELF|#!)' | head -1) - if [ -z "$FILE" ]; then + local FILE_CANDIDATES=$( find . -name "${FILENAME}" -a \( -type f -o -type l \) ) + pdebug "Candidates for $FILENAME are: $FILE_CANDIDATES" + local FINAL_LIST="" + for FILE in $FILE_CANDIDATES; do + local TESTFILE="$(readlink -f "$FILE")" + pdebug " $FILE leads to $TESTFILE" + [ -f "$TESTFILE" -a -x "$TESTFILE" ] && [ "x$(grep -l -E '^(.ELF|#!)' "$TESTFILE")" != "x" ] && FINAL_LIST="$FINAL_LIST $FILE" + done + FINAL_LIST=$(trim "$FINAL_LIST") + pdebug " Final list is $FINAL_LIST" + if [ -z "$FINAL_LIST" ]; then pwarning "\tNo Binary found for ${FILENAME}. Skipping." continue fi - - pdebug "\tFound ${FILENAME} at ${FILE}" - get_link_chain "${TOOL_DIR}/${TOOL}/build/${FILE}" "${TOOL_DIR}/${TOOL}/build" >> "${COPYFILES_LIST}" - get_dynamic_dependencies -l "${TOOL_DIR}/${TOOL}/build" "${FILE}" >> "${COPYFILES_LIST}" + if [[ "$FINAL_LIST" == *" "* ]]; then + pwarning "Found more than one match for required file '$FILENAME': $FINAL_LIST" + else + pdebug "\tFound ${FILENAME} at ${FILE}" + fi + for FILE in $FINAL_LIST; do + get_link_chain "${TOOL_DIR}/${TOOL}/build/${FILE}" "${TOOL_DIR}/${TOOL}/build" >> "${COPYFILES_LIST}" + get_dynamic_dependencies -l "${TOOL_DIR}/${TOOL}/build" "${FILE}" >> "${COPYFILES_LIST}" + done done [ ! -z "${REQUIRED_LIBRARIES}" ] && pinfo "Gathering required libraries from config file..." -- cgit v1.2.3-55-g7522