When trying to get the library dependencies from a static program it fails and die. This scapes the error and continue with the execution. Change-Id: Id3463f2dd77a182ce4f9d9d28165d35f17806892
		
			
				
	
	
		
			220 lines
		
	
	
		
			5.8 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			220 lines
		
	
	
		
			5.8 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
# Copyright 2012 Hewlett-Packard Development Company, L.P.
 | 
						|
# Copyright (c) 2012 NTT DOCOMO, INC.
 | 
						|
#
 | 
						|
# All Rights Reserved.
 | 
						|
#
 | 
						|
# Licensed under the Apache License, Version 2.0 (the "License"); you may
 | 
						|
# not use this file except in compliance with the License. You may obtain
 | 
						|
# a copy of the License at
 | 
						|
#
 | 
						|
# http://www.apache.org/licenses/LICENSE-2.0
 | 
						|
#
 | 
						|
# Unless required by applicable law or agreed to in writing, software
 | 
						|
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
 | 
						|
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
 | 
						|
# License for the specific language governing permissions and limitations
 | 
						|
# under the License.
 | 
						|
 | 
						|
function fullpath() {
 | 
						|
  local f=$1
 | 
						|
  if [ "${f#/}" = "$f" ]; then
 | 
						|
    echo `pwd`/"$f"
 | 
						|
  else
 | 
						|
    echo "$f"
 | 
						|
  fi
 | 
						|
}
 | 
						|
 | 
						|
function cleanup () {
 | 
						|
  sudo umount -f $TMP_BUILD_DIR || true
 | 
						|
  rm -rf "$TMP_BUILD_DIR"
 | 
						|
}
 | 
						|
 | 
						|
function ensure_binaries() {
 | 
						|
  BINARY_DEPS="${BUSYBOX}"
 | 
						|
  for _FLVR in ${RAMDISK_ELEMENT} ; do
 | 
						|
    for dir in $(echo $ELEMENTS_PATH | tr ":" " ") ; do
 | 
						|
      [ -d $dir/$_FLVR ] || continue
 | 
						|
      _FILE="${dir}/${_FLVR}/binary-deps"
 | 
						|
      if [ -a $_FILE ]; then
 | 
						|
        for _LINE in $(cat $_FILE) ; do
 | 
						|
          BINARY_DEPS="${BINARY_DEPS} $_LINE"
 | 
						|
        done
 | 
						|
      fi
 | 
						|
      break
 | 
						|
    done
 | 
						|
  done
 | 
						|
 | 
						|
  for _BIN in $BINARY_DEPS ; do
 | 
						|
    _LOCATION=$(which "$_BIN" || echo "")
 | 
						|
    if [ -z "$_LOCATION" ]; then
 | 
						|
      echo "$_BIN is not found in your PATH" 1>&2
 | 
						|
      echo "Please install it on your system"
 | 
						|
      exit 1
 | 
						|
    fi
 | 
						|
  done
 | 
						|
 | 
						|
  export BINARY_DEPS
 | 
						|
}
 | 
						|
 | 
						|
function create_base () {
 | 
						|
  echo "Creating base system"
 | 
						|
 | 
						|
  mkdir -p "$TMP_MOUNT_PATH/bin"
 | 
						|
  ln -s bin "$TMP_MOUNT_PATH/sbin"
 | 
						|
  mkdir -p "$TMP_MOUNT_PATH/lib"
 | 
						|
  mkdir -p "$TMP_MOUNT_PATH/lib/modules"
 | 
						|
  mkdir -p "$TMP_MOUNT_PATH/etc"
 | 
						|
  mkdir -p "$TMP_MOUNT_PATH/etc/udev"
 | 
						|
  # cjk adding for discovery support
 | 
						|
  mkdir -p "$TMP_MOUNT_PATH/var/lib/dhcp"
 | 
						|
  mkdir -p "$TMP_MOUNT_PATH/var/run"
 | 
						|
 | 
						|
  mkdir -p "$TMP_MOUNT_PATH/lib/udev/rules.d"
 | 
						|
  cp -a "$LIB_UDEV/rules.d/50-firmware.rules" "$TMP_MOUNT_PATH/lib/udev/rules.d"
 | 
						|
  cp -a "$LIB_UDEV/rules.d/80-drivers.rules" "$TMP_MOUNT_PATH/lib/udev/rules.d"
 | 
						|
  cp -a "$LIB_UDEV/firmware" "$TMP_MOUNT_PATH/lib/udev"
 | 
						|
  # cjk adding for hwdiscovery support
 | 
						|
  cp "/sbin/dhclient-script" "$TMP_MOUNT_PATH/sbin"
 | 
						|
 | 
						|
  mkdir -p "$TMP_MOUNT_PATH/etc/modprobe.d"
 | 
						|
  echo "blacklist evbug" > "$TMP_MOUNT_PATH/etc/modprobe.d/blacklist.conf"
 | 
						|
 | 
						|
  # cjk adding for hwdiscovery support
 | 
						|
  touch "$TMP_MOUNT_PATH/etc/fstab"
 | 
						|
 | 
						|
  mkdir -p "$TMP_MOUNT_PATH/etc/udev"
 | 
						|
  cat >"$TMP_MOUNT_PATH/etc/udev/udev.conf" <<EOF
 | 
						|
 | 
						|
udev_root="/dev"
 | 
						|
udev_rules="/lib/udev/rules.d"
 | 
						|
udev_log="no"
 | 
						|
EOF
 | 
						|
}
 | 
						|
 | 
						|
function copy_required_libs() {
 | 
						|
  set +e
 | 
						|
  ldd_out=`ldd "$1"`
 | 
						|
  local ret_code=$?
 | 
						|
  set -e
 | 
						|
  if [ $ret_code -ne 0 ]; then
 | 
						|
    return
 | 
						|
  fi
 | 
						|
  local IFS="
 | 
						|
"
 | 
						|
 | 
						|
  # Patterns of output of ldd
 | 
						|
  #
 | 
						|
  # 1. name to real path
 | 
						|
  #     libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f095e784000)
 | 
						|
  # 2. only path
 | 
						|
  #	    /lib64/ld-linux-x86-64.so.2 (0x00007f095ef79000)
 | 
						|
  # 3. path to path
 | 
						|
  #	    /lib64/ld-linux-x86-64.so.2 => /lib/x86_64-linux-gnu/ld-linux-x86-64.so.2 (0x00007facff857000)
 | 
						|
  # 4. name to empty (vdso)
 | 
						|
  #	    linux-vdso.so.1 =>  (0x00007fff0c5ff000)
 | 
						|
 | 
						|
  for i in `echo "$ldd_out" | sed -e 's/^\t*//'`; do
 | 
						|
    local ref=$( echo "$i" | awk -F '[ ]' '{print $1}')
 | 
						|
    local real=$( echo "$i" | awk -F '[ ]' '$2 == "=>" {print $3}
 | 
						|
                                            $2 != "=>" {print $1}')
 | 
						|
    if [ -z "$real" ]; then
 | 
						|
      continue
 | 
						|
    fi
 | 
						|
    if [ "$ref" = "${ref#/}" ]; then
 | 
						|
      ref=/lib/$ref
 | 
						|
    fi
 | 
						|
    dest=/lib/`basename "$real"`
 | 
						|
    cp -Ln "$real" "$TMP_MOUNT_PATH/$dest"
 | 
						|
    # Create a symbolic link if the shared library is referred
 | 
						|
    # by the different name
 | 
						|
    if [ "$ref" != "$dest" ]; then
 | 
						|
      local link_path=$TMP_MOUNT_PATH/$ref
 | 
						|
      if ! [ -e "$link_path" -o -L "$link_path" ]; then
 | 
						|
        mkdir -p `dirname "$link_path"`
 | 
						|
        ln -s "$dest" "$link_path"
 | 
						|
      fi
 | 
						|
    fi
 | 
						|
  done
 | 
						|
}
 | 
						|
 | 
						|
function populate_lib () {
 | 
						|
  echo "Populating /lib"
 | 
						|
 | 
						|
  for i in "$BUSYBOX" "$LIB_UDEV/firmware" bash lsmod modprobe udevd udevadm wget reboot shutdown $BINARY_DEPS ; do
 | 
						|
    if "$BUSYBOX" --list | grep "^$i\$" >/dev/null; then
 | 
						|
      continue
 | 
						|
    fi
 | 
						|
    path=`which $i 2>/dev/null` || path=$i
 | 
						|
    if ! [ -x "$path" ]; then
 | 
						|
      echo "$i is not found in PATH" 2>&1
 | 
						|
      exit 1
 | 
						|
    fi
 | 
						|
    cp -L "$path" "$TMP_MOUNT_PATH/bin/"
 | 
						|
    copy_required_libs "$path"
 | 
						|
  done
 | 
						|
 | 
						|
  cp -a "$MODULE_DIR" "$TMP_MOUNT_PATH/lib/modules/$KERNEL_VERSION"
 | 
						|
  cp -a "$FIRMWARE_DIR" "$TMP_MOUNT_PATH/lib/firmware"
 | 
						|
}
 | 
						|
 | 
						|
function populate_busybox () {
 | 
						|
  echo "Creating symlinks for busybox binaries"
 | 
						|
 | 
						|
  for i in $( "$BUSYBOX" --list ); do
 | 
						|
    if [ -f "$TMP_MOUNT_PATH/bin/$i" ]; then
 | 
						|
      echo "skip $i"
 | 
						|
      continue
 | 
						|
    fi
 | 
						|
    ln -s busybox "$TMP_MOUNT_PATH/bin/$i"
 | 
						|
  done
 | 
						|
}
 | 
						|
 | 
						|
function populate_init () {
 | 
						|
  echo "Installing init"
 | 
						|
  cp "$INIT" "$TMP_MOUNT_PATH/init"
 | 
						|
  chmod +x $TMP_MOUNT_PATH/init
 | 
						|
  for F in "$FUNCTIONS_D"/* ; do
 | 
						|
    cp "$F" "$TMP_MOUNT_PATH"
 | 
						|
  done
 | 
						|
 | 
						|
  # Append /init with any element fragments that are present
 | 
						|
  for _FLVR in ${RAMDISK_ELEMENT} ; do
 | 
						|
    for dir in $(echo $ELEMENTS_PATH | tr ":" " ") ; do
 | 
						|
      [ -d $dir/$_FLVR ] || continue
 | 
						|
      _FILE="${dir}/${_FLVR}/init"
 | 
						|
      if [ -a $_FILE ]; then
 | 
						|
        cat >>$TMP_MOUNT_PATH/init <<EOF
 | 
						|
# init fragment from ${_FLVR}
 | 
						|
EOF
 | 
						|
        cat <$_FILE >>$TMP_MOUNT_PATH/init
 | 
						|
      fi
 | 
						|
      break
 | 
						|
    done
 | 
						|
  done
 | 
						|
 | 
						|
  # Add our final steps to /init
 | 
						|
  cat <${INIT}-end >>$TMP_MOUNT_PATH/init
 | 
						|
}
 | 
						|
 | 
						|
function finalise_image () {
 | 
						|
  echo "Finalising image"
 | 
						|
  (cd "$TMP_MOUNT_PATH"; find . | cpio -o -H newc | gzip > "$TMP_IMAGE_PATH" )
 | 
						|
}
 | 
						|
 | 
						|
function populate_udev () {
 | 
						|
  echo "Installing udev rules"
 | 
						|
 | 
						|
  for _FLVR in ${RAMDISK_ELEMENT} ; do
 | 
						|
    for dir in $(echo $ELEMENTS_PATH | tr ":" " ") ; do
 | 
						|
      [ -d $dir/$_FLVR ] || continue
 | 
						|
      _DIR="${dir}/${_FLVR}/udev"
 | 
						|
      if [ -d $_DIR ]; then
 | 
						|
        find $_DIR -type f -exec cp -v {} $TMP_MOUNT_PATH/lib/udev/rules.d/ \;
 | 
						|
      fi
 | 
						|
      break
 | 
						|
    done
 | 
						|
  done
 | 
						|
}
 | 
						|
 | 
						|
 |