diff --git a/mender-convert-modify b/mender-convert-modify index 04ea2a4..198ab45 100755 --- a/mender-convert-modify +++ b/mender-convert-modify @@ -103,12 +103,12 @@ log_info "Installing Mender client and related files" deb_arch=$(probe_debian_arch_name) if [ "${MENDER_CLIENT_VERSION}" = "latest" ]; then - deb_name=$(deb_from_repo_get "work/deb-packages" ${MENDER_APT_REPO_URL} ${deb_arch} "stable" "mender-client" "latest") + deb_name=$(deb_from_repo_dist_get "work/deb-packages" ${MENDER_APT_REPO_URL} ${deb_arch} "stable" "mender-client") elif [ "${MENDER_CLIENT_VERSION}" = "master" ]; then - deb_name=$(deb_from_repo_get "work/deb-packages" ${MENDER_APT_REPO_URL} ${deb_arch} "experimental" "mender-client" "latest") + deb_name=$(deb_from_repo_dist_get "work/deb-packages" ${MENDER_APT_REPO_URL} ${deb_arch} "experimental" "mender-client") else DEBIAN_REVISION="-1" - deb_name=$(deb_from_repo_get "work/deb-packages" ${MENDER_APT_REPO_URL} ${deb_arch} "experimental" "mender-client" "${MENDER_CLIENT_VERSION}${DEBIAN_REVISION}") + deb_name=$(deb_from_repo_pool_get "work/deb-packages" ${MENDER_APT_REPO_URL} ${deb_arch} "mender-client" "${MENDER_CLIENT_VERSION}${DEBIAN_REVISION}") fi deb_extract_package "work/deb-packages/${deb_name}" "work/rootfs/" @@ -123,12 +123,12 @@ if [ "${MENDER_ADDON_SHELL_INSTALL}" = "y" ]; then log_info "Installing Mender Shell addon" if [ "${MENDER_ADDON_SHELL_VERSION}" = "latest" ]; then - deb_name=$(deb_from_repo_get "work/deb-packages" ${MENDER_APT_REPO_URL} ${deb_arch} "stable" "mender-shell" "latest") + deb_name=$(deb_from_repo_dist_get "work/deb-packages" ${MENDER_APT_REPO_URL} ${deb_arch} "stable" "mender-shell") elif [ "${MENDER_ADDON_SHELL_VERSION}" = "master" ]; then - deb_name=$(deb_from_repo_get "work/deb-packages" ${MENDER_APT_REPO_URL} ${deb_arch} "experimental" "mender-shell" "latest") + deb_name=$(deb_from_repo_dist_get "work/deb-packages" ${MENDER_APT_REPO_URL} ${deb_arch} "experimental" "mender-shell") else DEBIAN_REVISION="-1" - deb_name=$(deb_from_repo_get "work/deb-packages" ${MENDER_APT_REPO_URL} ${deb_arch} "experimental" "mender-shell" "${MENDER_ADDON_SHELL_VERSION}${DEBIAN_REVISION}") + deb_name=$(deb_from_repo_pool_get "work/deb-packages" ${MENDER_APT_REPO_URL} ${deb_arch} "mender-shell" "${MENDER_ADDON_SHELL_VERSION}${DEBIAN_REVISION}") fi deb_extract_package "work/deb-packages/${deb_name}" "work/rootfs/" diff --git a/modules/deb.sh b/modules/deb.sh index d59b8d5..de87987 100644 --- a/modules/deb.sh +++ b/modules/deb.sh @@ -15,44 +15,35 @@ source modules/log.sh -# Direct download of a deb package from an APT repository +# Download of latest deb package for the given distribution of an APT repository # # $1 - Download directory # $2 - APT repository url # $3 - Debian architecture # $4 - Debian Distribution # $5 - Package name -# $6 - Package version (optional, default "latest") -# $7 - Component (optional, default "main") +# $6 - Component (optional, default "main") # # @return - Filename of the downloaded package # -function deb_from_repo_get () { +function deb_from_repo_dist_get () { if [[ $# -lt 5 || $# -gt 7 ]]; then - log_fatal "deb_from_repo_get() requires 5 or 6 arguments" + log_fatal "deb_from_repo_dist_get() requires 5 arguments" fi local -r download_dir="${1}" local -r repo_url="${2}" local -r architecture="${3}" local -r distribution="${4}" local -r package="${5}" - local -r version="${6:-latest}" - local -r component="${7:-main}" + local -r component="${6:-main}" - local deb_package_path="" - if [ "${version}" = "latest" ]; then - # If latest, fetch and parse the packages list of the given distribution to find the latest version - local -r packages_url="${repo_url}/dists/${distribution}/${component}/binary-${architecture}/Packages" - run_and_log_cmd "wget -Nq ${packages_url} -P /tmp" + # Fetch and parse the packages list of the given distribution to find the latest version + local -r packages_url="${repo_url}/dists/${distribution}/${component}/binary-${architecture}/Packages" + run_and_log_cmd "wget -Nq ${packages_url} -P /tmp" - deb_package_path=$(grep Filename /tmp/Packages | grep ${package}_ | grep ${architecture} | tail -n1 | sed 's/Filename: //') - if [ -z "${deb_package_path}" ]; then - log_fatal "Couldn't fine package ${package} in ${packages_url}" - fi - else - # Else, try to download the specified version (ignoring distribution) - local -l initial="$(echo $package | head -c 1)" - deb_package_path="pool/${component}/${initial}/${package}/${package}_${version}_${architecture}.deb" + local -r deb_package_path=$(grep Filename /tmp/Packages | grep ${package}_ | grep ${architecture} | tail -n1 | sed 's/Filename: //') + if [ -z "${deb_package_path}" ]; then + log_fatal "Couldn't find package ${package} in ${packages_url}" fi local -r filename=$(basename $deb_package_path) @@ -63,6 +54,39 @@ function deb_from_repo_get () { echo ${filename} } +# Download a deb package direcrly from the pool of an APT repository +# +# $1 - Download directory +# $2 - APT repository url +# $3 - Debian architecture +# $4 - Package name +# $5 - Package version +# $6 - Component (optional, default "main") +# +# @return - Filename of the downloaded package +# +function deb_from_repo_pool_get () { + if [[ $# -ne 5 ]]; then + log_fatal "deb_from_repo_pool_get() requires 5 arguments" + fi + local -r download_dir="${1}" + local -r repo_url="${2}" + local -r architecture="${3}" + local -r package="${4}" + local -r version="${5}" + local -r component="${6:-main}" + + local -r initial="$(echo $package | head -c 1)" + local -r deb_package_path="pool/${component}/${initial}/${package}/${package}_${version}_${architecture}.deb" + + local -r filename=$(basename $deb_package_path) + run_and_log_cmd "wget -Nq ${repo_url}/${deb_package_path} -P ${download_dir}" + + rm -f /tmp/Packages + log_info "Successfully downloaded ${filename}" + echo ${filename} +} + # Extract the binary files of a deb package into a directory # # $1 - Deb package