diff --git a/scripts/opkg_offline.sh b/scripts/opkg_offline.sh index b80b024284d6b1d17dd69fcfaa3a5858d04f9211..92697a1c7d86ff4fbd7b68c20ed7ec149faeec70 100755 --- a/scripts/opkg_offline.sh +++ b/scripts/opkg_offline.sh @@ -7,6 +7,7 @@ # OPKG_LIB_PATH="/usr/lib/opkg" +CUR_DEP="" log() { echo "${@}"|logger -t swmodd.template -p debug @@ -16,22 +17,9 @@ check_installed() { local root="${1}" local pkg="${2}" - local info="" - - info=$(opkg --offline-root "${root}" list "${pkg}" |grep "${pkg} ") - if [ "$?" -eq 0 ]; then - pkg=$(echo "${info}"|cut -d " " -f 1) - echo "${pkg}" - # log "package [$pkg] [$root] can be processed without modification" - # Installed - return 0; - fi - info=$(opkg --offline-root "${root}" list "${pkg}*" |grep -oe "${pkg}\d ") - if [ "$?" -eq 0 ]; then - log "## package [$pkg], new package[$info] modified ##" - echo "${info}" - # Installed + if opkg --offline-root "${root}" list "${pkg}" |grep -q "${pkg} "; then + # log "Package [$pkg] already installed [$root]" return 0; fi @@ -42,47 +30,47 @@ check_dependency() { local root="${1}" local pkg="${2}" - local depends="" + local dep_list="" local list="" if [ -z "${pkg}" ]; then return 0; fi - list=$(opkg depends "${pkg}" |tail -n +2) + # log "## Checking dependency for [${pkg}] root[$root]" + list=$(opkg depends "${pkg}" |awk 'NR>1 {printf $1" "}') for f in ${list}; do - local pp; - - pp=$(check_installed "${root}" "${f}") - if [ -z "${pp}" ]; then - if ! echo "${depends}" |grep -q "${f}"; then - depends="${depends} ${f}" + local t="" + + # get which package provides this + t=$(opkg whatprovides "${f}"| awk 'NR>1 {printf $1}') + if ! check_installed "${root}" "${t}"; then + # log "## Adding into dependency[$dep_list] [$t] [$f] ##" + if ! echo "${dep_list}" |grep -q "${t}"; then + dep_list="${dep_list} ${t}" fi fi done - #log "PKG[${pkg}] has dependency[${depends}] list [$list]" - echo "${depends}" + # log "PKG[${pkg}] has dependency[${dep_list}] list [$list]" + CUR_DEP="${dep_list}" } copy_single_opkg() { local root="${1}" local pkg="${2}" - local pp if [ -z "${pkg}" ]; then return 0; fi - pp=$(check_installed / "${pkg}") - if [ -z "${pp}" ]; then + if ! check_installed / "${pkg}"; then log "Package [${pkg}] not available locally"; return 1; fi - pkg="${pp}" if check_installed "${root}" "${pkg}" >/dev/null ; then # log "Package [${pkg}] already installed in target"; return 0; @@ -99,7 +87,7 @@ copy_single_opkg() if [ -f "${line}" ]; then local p - p=$(dirname "${line}") + p=$(dirname "${line}") mkdir -p "${root}"/"${p}" cp "${line}" "${root}"/"${p}"/ fi @@ -123,32 +111,31 @@ install_package() local root="${1}" local pkg="${2}" local dep="" - local pp local ret - pp=$(check_installed "/" "${pkg}") - if [ -z "${pp}" ]; then + if ! check_installed "/" "${pkg}"; then echo "Package [${pkg}] not available locally"; return 1; fi - pkg="${pp}" if check_installed "${root}" "${pkg}" >/dev/null; then # echo "Package [${pkg}] already installed in target"; return 0; fi - # log "Processing [${pkg}]" - dep=$(check_dependency "${root}" "${pkg}") + CUR_DEP="" + check_dependency "${root}" "${pkg}" + dep="${CUR_DEP}" + # log "Processing [${pkg}] with [${dep}] dependencies" if [ -n "${dep}" ]; then resolve_dependency "${dep}" install_package "${root}" "${pkg}" - ret=$? + ret=$? else log "Installing package ${pkg}" copy_single_opkg "${root}" "${pkg}" - ret=$? + ret=$? fi return $ret; } @@ -163,9 +150,10 @@ if [ -z "${2}" ]; then exit 0; fi +echo "# Creating lxc container might take ~1 min #" echo "Installing pkg [${2}] with dependencies" if install_package "${1}" "${2}"; then - echo "Offline install of ${2} successful" + echo " - Offline install of ${2} successful" else - echo "Failed to install ${2} in offline mode" + echo " - Failed to install ${2} in offline mode" fi