From ab15e431b67117ff1c449a4e0cc8acaf1646a061 Mon Sep 17 00:00:00 2001 From: cyril constantin Date: Fri, 29 May 2026 10:52:41 +0200 Subject: [PATCH] Test ok with bookworm 12.14 and trixie 13.5 --- bookworm_i386.txt | 6 + trixie_amd64.txt | 6 + upgrade.sh | 339 ++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 351 insertions(+) create mode 100644 bookworm_i386.txt create mode 100644 trixie_amd64.txt create mode 100644 upgrade.sh diff --git a/bookworm_i386.txt b/bookworm_i386.txt new file mode 100644 index 0000000..8e23d7f --- /dev/null +++ b/bookworm_i386.txt @@ -0,0 +1,6 @@ +http_proxy=http://192.168.0.253:3142/ +ISOFILE=$HOME/debian-12.12.0-i386-netinst.iso +JIGDO=$HOME/jigdo +DESTINATION=$HOME +MIRROR=http://debian.proxad.net +MIRRORNONUS=http://debian.proxad.net \ No newline at end of file diff --git a/trixie_amd64.txt b/trixie_amd64.txt new file mode 100644 index 0000000..d9c4757 --- /dev/null +++ b/trixie_amd64.txt @@ -0,0 +1,6 @@ +http_proxy=http://192.168.0.253:3142/ +ISOFILE=$HOME/debian-13.0.0-amd64-netinst.iso +JIGDOPATH=$HOME/jigdo +DESTINATION=$HOME +MIRROR=http://debian.proxad.net +MIRRORNONUS=http://debian.proxad.net \ No newline at end of file diff --git a/upgrade.sh b/upgrade.sh new file mode 100644 index 0000000..9c90f40 --- /dev/null +++ b/upgrade.sh @@ -0,0 +1,339 @@ +#! /usr/bin/env bash +set -ueEo pipefail + +SCRIPT_DIR="$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" && pwd)" + +check_tools() +{ + if ! udisksctl status >/dev/null + then + echo "udisksctl is required" + exit 1 + fi + if ! wget --version >/dev/null + then + echo "wget is required" + exit 1 + fi + if ! jigdo-lite --version >/dev/null + then + echo "jigdo-lite is required" + exit 1 + fi +} + +check_tools + +usage() { +cat <: +ISOFILE=$HOME/debian-13.0.0-amd64-netinst.iso +JIGDO=$HOME/jigdo +DESTINATION=$HOME +MIRROR=http://deb.debian.org +EOF +} + +main() { + + cd "$SCRIPT_DIR" + + ISOFILE="" + VERBOSITY=0 + + while [[ $# -gt 0 ]]; do + case $1 in + -c|--configfile) + CONFIGFILE=$2 + [[ -z ${CONFIGFILE} ]] && echo "missing argument $1" && exit 1 + if [ -e "${CONFIGFILE}" ] + then + # shellcheck source=/dev/null + source "${CONFIGFILE}" + else + echo "ERROR: specified configfile not found"* + exit 1 + fi + shift + shift + ;; + -d|--destination) + DESTINATION=$2 + [[ -z ${DESTINATION} ]] && echo "missing argument $1" && exit 1 + shift + shift + ;; + -h|--help) + usage + exit 0 + ;; + -i|--isofile) + ISOFILE=$2 + [[ -z ${ISOFILE} ]] && echo "missing argument $1" && exit 1 + shift + shift + ;; + -j|--jigdo) + JIGDOPATH=$2 + [[ -z ${JIGDOPATH} ]] && echo "missing argument $1" && exit 1 + shift + shift + ;; + -m|--mirror) + MIRROR=$2 + [[ -z ${MIRROR} ]] && echo "missing argument $1" && exit 1 + shift + shift + ;; + -p|--proxy) + http_proxy=$2 + [[ -z ${http_proxy} ]] && echo "missing argument $1" && exit 1 + shift + shift + ;; + -v|--verbose) + VERBOSITY=1 + shift + ;; + *) + echo "ERROR: unknown option: $1" + usage + exit 1 + ;; + esac + done + + if [ ! -e "$ISOFILE" ] + then + echo "ERROR: provide the source isofile." + exit 1 + fi + + DESTINATION=${DESTINATION:-$(pwd)} + JIGDOPATH=${JIGDOPATH:-$HOME/jigdo} + http_proxy=${http_proxy:-} + if [ ! -d "${JIGDOPATH}" ] + then + mkdir -p "${JIGDOPATH}" + fi + MIRROR=${MIRROR:-http://deb.debian.org/} + + # debian-13.0.0-amd64-netinst.iso + bnfile=$(basename "${ISOFILE}") + distribution=$( echo "${bnfile}" |cut --delimiter='-' --fields=1 ) + majorversion=$( echo "${bnfile}" |cut --delimiter='-' --fields=2 |cut --delimiter='.' --fields=1 ) + minorversion=$( echo "${bnfile}" |cut --delimiter='-' --fields=2 |cut --delimiter='.' --fields=2 ) + incrementalversion=$( echo "${bnfile}" |cut --delimiter='-' --fields=2 |cut --delimiter='.' --fields=3 ) + architecture=$( echo "${bnfile}" |cut --delimiter='-' --fields=3) + flavor=$( echo "${bnfile}" |cut --delimiter='-' --fields=4 |cut --delimiter='.' --fields=1 ) + extension=$( echo "${bnfile}" |cut --delimiter='-' --fields=4 |cut --delimiter='.' --fields=2 ) + + if [[ ${VERBOSITY} -gt 0 ]] + then + echo "isofile = ${ISOFILE}" + echo "reconstructed = ${distribution}-${majorversion}.${minorversion}.${incrementalversion}-${architecture}-${flavor}.iso" + fi + + if [ "${extension}" != "iso" ] + then + echo "Not implemented for extension : ${extension}" + exit 1 + fi + + if [ "${distribution}" != "debian" ] + then + echo "Not implemented for distribution : ${distribution}" + exit 1 + fi + + case ${flavor} in + netinst) + cdimagejigdodirectory="jigdo-cd" + ;; + *) + echo "Not implemented for flavor : ${flavor}" + exit 1 + ;; + esac + + case ${majorversion} in + 13) + # https://cdimage.debian.org/cdimage/release/current/amd64/jigdo-cd/debian-13.5.0-amd64-netinst.jigdo + jigdorooturl="https://cdimage.debian.org/cdimage/release/current" + cdimagetargeturl="${jigdorooturl}/${architecture}/${cdimagejigdodirectory}" + ;; + 12) + # https://cdimage.debian.org/cdimage/archive/ + # https://cdimage.debian.org/cdimage/archive/12.14.0/i386/jigdo-cd/debian-12.14.0-i386-netinst.jigdo + jigdorooturl=https://cdimage.debian.org/cdimage/archive + # compute the target url is required for archive section + cdimagearchiveindex=/tmp/jigdo-${majorversion}-index.html + if wget ${jigdorooturl} --output-document "${cdimagearchiveindex}" + then + targetversion=$( grep "[DIR]" "${cdimagearchiveindex}" | grep "a href=\"${majorversion}" | cut --delimiter='.' --fields=2 | sort --numeric-sort | tail --lines=1 ) + cdimagetargeturl="${jigdorooturl}/${majorversion}.${targetversion}.${incrementalversion}/${architecture}/${cdimagejigdodirectory}" + else + echo "download error ${cdimagetargeturl}/SHA512SUMS" + echo "check your network connection" + exit 1 + fi + ;; + *) + echo "Not implemented" + exit 1 + esac + + sha512filelist=${JIGDOPATH}/jigdo-${distribution}-${majorversion}-last-${architecture}-${flavor}-sha512sum + + if [[ ${VERBOSITY} -ge 0 ]] + then + echo "isofile = ${ISOFILE}" + echo "reconstructed = ${distribution}-${majorversion}.${minorversion}.${incrementalversion}-${architecture}-${flavor}.iso" + echo "cdimagetargeturl = ${cdimagetargeturl}" + echo "sha512filelist = ${sha512filelist}" + fi + + if wget "${cdimagetargeturl}/SHA512SUMS" --output-document "${sha512filelist}" + then + # retrieve the cdimage "directory checksum" to extract last "current" version + targetjigdoname=$( grep "${distribution}-${majorversion}.*-${architecture}-${flavor}.jigdo" "${sha512filelist}" | cut --delimiter=' ' --fields=3 ) + targettemplatename=$( grep "${distribution}-${majorversion}.*-${architecture}-${flavor}.template" "${sha512filelist}" | cut --delimiter=' ' --fields=3 ) + targetversion=$( echo "${targetjigdoname}" | cut --delimiter='-' --fields=2 | cut --delimiter='.' --fields=2 ) + if [[ ${minorversion} -gt ${targetversion} ]] + then + echo "Rule violated : your version is more advanced than target" + echo "Not implemented" + exit 1 + elif [[ ${minorversion} -lt ${targetversion} ]] + then + # download jigdo if not already done or bad checksum + jigdofilepath=$(find "${JIGDOPATH}" -name "${distribution}-${majorversion}.${targetversion}.${incrementalversion}-${architecture}-${flavor}.jigdo") + if [[ ! -e "${jigdofilepath}" ]] || ! sha512sum --ignore-missing --check "${sha512filelist}" "${jigdofilepath}" + then + if wget "${cdimagetargeturl}/${targetjigdoname}" --output-document "${JIGDOPATH}/${targetjigdoname}" + then + jigdofilepath="${JIGDOPATH}/${targetjigdoname}" + pushd "${JIGDOPATH}" || exit 1 + echo "sha512sum --ignore-missing --check ${sha512filelist}" + if ! sha512sum --ignore-missing --check "${sha512filelist}" + then + echo "download error : bad checksum : ${cdimagetargeturl}/${targetjigdoname}" + echo "check your network connection" + exit 1 + fi + popd + fi + else + echo "jigdo file ${jigdofilepath} is ok" + fi + # download template if not already done or bad checksum + templatefilepath=$(find "${JIGDOPATH}" -name "${distribution}-${majorversion}.${targetversion}.${incrementalversion}-${architecture}-${flavor}.template") + if [[ ! -e "${templatefilepath}" ]] || ! sha512sum --ignore-missing --check "${sha512filelist}" "${templatefilepath}" + then + if wget "${cdimagetargeturl}/${targettemplatename}" --output-document "${JIGDOPATH}/${targettemplatename}" + then + templatefilepath="${JIGDOPATH}/${targettemplatename}" + pushd "${JIGDOPATH}" || exit 1 + echo "sha512sum --ignore-missing --check ${sha512filelist}" + if ! sha512sum --ignore-missing --check "${sha512filelist}" + then + echo "download error : bad checksum : ${cdimagetargeturl}/${targettemplatename}" + echo "check your network connection" + exit 1 + fi + popd + fi + else + echo "template file ${templatefilepath} is ok" + fi + else + echo "Already on the last version" + exit 0 + fi + else + echo "download error ${cdimagetargeturl}/SHA512SUMS" + echo "check your network connection" + exit 1 + fi + + # mount loop image + looplog=/tmp/udisks_loop-setup_$(basename "${ISOFILE}").log + mountlog=/tmp/udisks_mount_$(basename "${ISOFILE}").log + + if ! ( [ ! -d "/media/$(whoami)" ] && ! find "/media/$(whoami)" -maxdepth 1 -type d -name "*${majorversion}.${minorversion}.${incrementalversion}*${architecture}*" ) + then + if udisksctl loop-setup --read-only --file="${ISOFILE}" | tee "${looplog}" + then + blockdevice=$( cut --delimiter=' ' --fields=5 "${looplog}" | cut --delimiter='.' --fields=1 ) + devicename=$( echo "${blockdevice}" | cut --delimiter='/' --fields=3 ) + else + echo "ERROR : loop-setup" + exit 1 + fi + if [[ ! "${blockdevice}" =~ ^/dev/loop*$ ]] && lsblk | grep "^${devicename}" + then + if udisksctl mount --block-device "${blockdevice}p1" | tee "${mountlog}" + then + if ! grep --quiet "^Mounted" "${mountlog}" + then + echo "ERROR : mount" + exit 1 + fi + else + echo "ERROR : mount" + exit 1 + fi + else + echo "ERROR : loop-setup" + echo "It may not work by ssh or systemd-run because of polkit" + echo "See https://github.com/coldfix/udiskie/wiki/Permissions" + exit 1 + fi + fi + + # MOUNTPATH=$( find "/media/$(whoami)" -maxdepth 1 -type d -name "*${majorversion}.${minorversion}.${incrementalversion}*${architecture}*" ) + + if [ -n "${http_proxy}" ] + then + proxyoption="-e http_proxy=${http_proxy}" + else + proxyoption="" + fi + cat > "${HOME}"/.jigdo-lite <