From 5d10f3bcfbc44ca38ec66e1766e335c1f7bd393b Mon Sep 17 00:00:00 2001 From: Matthias Freund Date: Mon, 5 Dec 2022 10:25:42 +0000 Subject: [PATCH] download arch-independent packages from proxmox --- .gitignore | 5 +- README.md | 6 +- build.sh | 193 +++++++++++++++++++++++++++-------------------------- 3 files changed, 106 insertions(+), 98 deletions(-) diff --git a/.gitignore b/.gitignore index b418bc1..2569ba9 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,3 @@ -packages -sources +/packages +/packages_build +/sources diff --git a/README.md b/README.md index 4f8ffc3..a48dafc 100644 --- a/README.md +++ b/README.md @@ -3,10 +3,10 @@ Script for building Proxmox Backup Server 2.x for Armbian64 based on Bullseye ## Install build essentials and dependencies ``` - apt-get -y install \ - build-essential curl sudo git lintian \ +apt-get install -y --no-install-recommends \ + build-essential curl ca-certificates sudo git lintian \ pkg-config libudev-dev libssl-dev libapt-pkg-dev libclang-dev \ - libnetaddr-ip-perl libpam0g-dev libcurl4-openssl-dev + libpam0g-dev ``` ## Install ``rustup`` ``` diff --git a/build.sh b/build.sh index b219ec1..dabf004 100755 --- a/build.sh +++ b/build.sh @@ -3,6 +3,36 @@ # build script for proxmox backup server on arm64 # https://github.com/wofferl/proxmox-backup-arm64 +function download_package() { + repo=${1} + package=${2} + if [ -n "${5}" ]; then + version_test=("${3}" "${4}") + dest=${5} + else + version_test=('=' "${3}") + dest=${4} + fi + + url=$(select_package "${repo}" "${package}" "${version_test[@]}") + + if [ -z "${url}" ]; then + echo "Error package ${package} in version " "${version_test[@]}" " not found" + return + fi + + file="${dest}/${url##*/}" + if [ -e "${file}" ]; then + echo "${package} up-to-date" >&2 + echo "${file}" + return + fi + + echo "${package} downloading..." >&2 + curl -sSfL "${url}" -o "${file}" + echo "${file}" +} + function git_clone_or_fetch() { url=${1} # url/name.git name_git=${url##*/} # name.git @@ -28,11 +58,57 @@ function git_clean_and_checkout() { git "${path_args[@]}" checkout "${commit_id}" } +function load_packages() { + url=${1} + curl -sSf "${url}" \ + | gzip -d - \ + | sed '/./{H;$!d} ; x ; s/^.*Package: \([^\n]*\).*Version: \([^\n]*\).*Filename: \([^\n]*\).*$/\1 \2 \3/p' +} + +function select_package() { + repo=${1} + package_name=${2} + version_test=("${3}" "${4}") + url_base=http://download.proxmox.com/debian/${repo} + if [[ "${repo}" == "pbs" ]]; then + packages_target=${PACKAGES_PBS} + elif [[ "${repo}" == "devel" ]]; then + packages_target=${PACKAGES_DEVEL} + else + echo "Unknown repo ${repo}" >&2 + return + fi + + version_target=0.0 + file_target= + + while IFS= read -r line; do + name=${line%% *} + if [[ "${name}" == "${package_name}" ]]; then + version=${line#* } + version=${version% *} + file=${line##* } + if dpkg --compare-versions "${version}" "${version_test[@]}" \ + && dpkg --compare-versions "${version}" '>>' "${version_target}"; then + version_target=${version} + file_target=${file} + fi + fi + done <<<"${packages_target}" + + if [ -z "${file_target}" ]; then + return + fi + url=${url_base}/${file_target} + echo "${url}" +} + SUDO="sudo -E" SCRIPT=$(realpath "${0}") BASE=$(dirname "${SCRIPT}") PACKAGES="${BASE}/packages" +PACKAGES_BUILD="${BASE}/packages_build" PATCHES="${BASE}/patches" SOURCES="${BASE}/sources" @@ -42,41 +118,34 @@ if [ ! -d "${PATCHES}" ]; then fi [ ! -d "${PACKAGES}" ] && mkdir -p "${PACKAGES}" +[ ! -d "${PACKAGES_BUILD}" ] && mkdir -p "${PACKAGES_BUILD}" [ ! -d "${SOURCES}" ] && mkdir -p "${SOURCES}" + +PACKAGES_DEVEL=$(load_packages http://download.proxmox.com/debian/devel/dists/bullseye/main/binary-amd64/Packages.gz) +PACKAGES_PBS=$(load_packages http://download.proxmox.com/debian/pbs/dists/bullseye/pbs-no-subscription/binary-amd64/Packages.gz) + + +EXTJS_VER=(">=" "7~") +PBS_I18N_VER=(">=" "0") +PROXMOX_ACME_VER=(">=" "0") +PROXMOX_WIDGETTOOLKIT_VER=(">=" "3.5.2") +PVE_ESLINT_VER=(">=" "7.18.0-1") +QRCODEJS_VER=(">=" "1.20201119") +download_package pbs pbs-i18n "${PBS_I18N_VER[@]}" "${PACKAGES}" >/dev/null +download_package pbs libjs-extjs "${EXTJS_VER[@]}" "${PACKAGES}" >/dev/null +download_package pbs libjs-qrcodejs "${QRCODEJS_VER[@]}" "${PACKAGES}" >/dev/null +download_package pbs libproxmox-acme-plugins "${PROXMOX_ACME_VER[@]}" "${PACKAGES}" >/dev/null +download_package pbs proxmox-widget-toolkit "${PROXMOX_WIDGETTOOLKIT_VER[@]}" "${PACKAGES}" >/dev/null +packages_install=( + "$(download_package devel proxmox-widget-toolkit-dev "${PROXMOX_WIDGETTOOLKIT_VER[@]}" "${PACKAGES_BUILD}")" + "$(download_package devel pve-eslint "${PVE_ESLINT_VER[@]}" "${PACKAGES_BUILD}")" +) +${SUDO} apt install -y "${packages_install[@]}" + + cd "${SOURCES}" -PVE_ESLINT_VER="8.23.1-1" -PVE_ESLINT_GIT="857347d600e0ba86451a25e350fbeeef27577b92" -if ! dpkg-query -W -f='${Version}' pve-eslint | grep -q ${PVE_ESLINT_VER}; then - git_clone_or_fetch https://git.proxmox.com/git/pve-eslint.git - cd pve-eslint/ - git_clean_and_checkout ${PVE_ESLINT_GIT} - ${SUDO} apt -y build-dep . - make deb || exit 0 - ${SUDO} apt -y install ./pve-eslint_${PVE_ESLINT_VER}_all.deb - cd .. -else - echo "pve-eslint up-to-date" -fi - -PROXMOX_WIDGETTOOLKIT_VER="3.5.3" -PROXMOX_WIDGETTOOLKIT_GIT="0bba4fc63f488d807c2f8410c49a7a051195a3fd" -if ! dpkg-query -W -f='${Version}' proxmox-widget-toolkit-dev | grep -q ${PROXMOX_WIDGETTOOLKIT_VER}; then - git_clone_or_fetch https://git.proxmox.com/git/proxmox-widget-toolkit.git - cd proxmox-widget-toolkit/ - git_clean_and_checkout ${PROXMOX_WIDGETTOOLKIT_GIT} - ${SUDO} apt -y build-dep . - make deb || exit 0 - cp -a proxmox-widget-toolkit_${PROXMOX_WIDGETTOOLKIT_VER}_all.deb \ - proxmox-widget-toolkit-dev_${PROXMOX_WIDGETTOOLKIT_VER}_all.deb \ - "${PACKAGES}" - ${SUDO} apt -y install ./proxmox-widget-toolkit-dev_${PROXMOX_WIDGETTOOLKIT_VER}_all.deb - cd .. -else - echo "proxmox-widget-toolkit up-to-date" -fi - PROXMOX_BACKUP_VER="2.3.1-1" PROXMOX_BACKUP_GIT="2abb984b58aca4169fbf9a22ebf302d186f3e062" PATHPATTERNS_GIT="916e41c50e75a718ab7b1b95dc770eed9cd7a403" @@ -120,25 +189,6 @@ else echo "proxmox-backup up-to-date" fi -PROXMOX_ACME_VER="1.4.2" -PROXMOX_ACME_GIT="831d879ba508c40835827852951be1d469208b13" # Version 7.3-1 -PVE_COMMON_GIT="9d14c9ddcf24a2f20a5ded58d28c3e1657ed3728" -if ! dpkg-query -W -f='${Version}' libproxmox-acme-perl | grep -q ${PROXMOX_ACME_VER}; then - git_clone_or_fetch https://git.proxmox.com/git/proxmox-acme.git - cd proxmox-acme/ - git_clean_and_checkout ${PROXMOX_ACME_GIT} - git_clone_or_fetch https://git.proxmox.com/git/pve-common.git - git_clean_and_checkout ${PVE_COMMON_GIT} pve-common - (cd pve-common; ${SUDO} apt -y build-dep .) - ${SUDO} apt -y build-dep . - export PERL5LIB=$PWD/pve-common/src - make deb || exit 0 - cp -a libproxmox-acme-plugins_${PROXMOX_ACME_VER}_all.deb "${PACKAGES}" - cd .. -else - echo "libproxmox-acme-perl up-to-date" -fi - PVE_XTERMJS_VER="4.16.0-1" PVE_XTERMJS_GIT="8dcff86a32c3ba8754b84e8aabb01369ef3de407" PROXMOX_XTERMJS_GIT="41862eeb95b70201c47dfd27fca37879e23be3ff" @@ -171,46 +221,3 @@ if [ ! -e "${PACKAGES}/proxmox-mini-journalreader_${PROXMOX_JOURNALREADER_VER}_a else echo "proxmox-mini-journalreader up-to-date" fi - - -PBS_I18N_VER="2.8-1" -PBS_I18N_GIT="b7ff45c1f2265708d619bb9ec4a8b9e7c3e1be98" -if [ ! -e "${PACKAGES}/pbs-i18n_${PBS_I18N_VER}_all.deb" ]; then - git_clone_or_fetch https://git.proxmox.com/git/proxmox-i18n.git - git_clean_and_checkout ${PBS_I18N_GIT} proxmox-i18n - cd proxmox-i18n/ - ${SUDO} apt -y build-dep . - make deb || exit 0 - cp -a pbs-i18n_${PBS_I18N_VER}_all.deb "${PACKAGES}" - cd .. -else - echo "pbs-i18n up-to-date" -fi - -EXTJS_VER="7.0.0-1" -EXTJS_GIT="58b59e2e04ae5cc29a12c10350db15cceb556277" -if [ ! -e "${PACKAGES}/libjs-extjs_${EXTJS_VER}_all.deb" ]; then - git_clone_or_fetch https://git.proxmox.com/git/extjs.git - git_clean_and_checkout ${EXTJS_GIT} extjs - cd extjs/ - ${SUDO} apt -y build-dep . - make deb || exit 0 - cp -a libjs-extjs_${EXTJS_VER}_all.deb "${PACKAGES}" - cd .. -else - echo "libjs-extjs up-to-date" -fi - -QRCODEJS_VER="1.20201119-pve1" -QRCODEJS_GIT="1cc4649f55853d7d890aa444a7a58a8466f10493" -if [ ! -e "${PACKAGES}/libjs-qrcodejs_${QRCODEJS_VER}_all.deb" ]; then - git_clone_or_fetch https://git.proxmox.com/git/libjs-qrcodejs.git - git_clean_and_checkout ${QRCODEJS_GIT} libjs-qrcodejs - cd libjs-qrcodejs/ - ${SUDO} apt -y build-dep . - make deb || exit 0 - cp -a libjs-qrcodejs_${QRCODEJS_VER}_all.deb "${PACKAGES}" - cd .. -else - echo "libjs-qrcodejs up-to-date" -fi