On Fri, Oct 31, 2014 at 1:21 AM, Richard Nelson <unix...@gmail.com> wrote: > Greetings, > > On Thu, Oct 30, 2014 at 8:12 PM, Richard Nelson <unix...@gmail.com> wrote: >> >> Greetings, >> >> On Fri, Oct 3, 2014 at 5:33 AM, Igor Cher <igorfl...@gmail.com> wrote: >>> >>> Hi, >>> >>> Is there any progress on adding snapshot repository support >>> (https://lists.debian.org/debian-live/2012/06/msg00140.html) ? >>> >> >> I as well think the idea has merit. Would you be willing to test && adjust >> patch to work with the latest debian-next branch in git? If it works as it >> should against debian-next branch then I believe it would be of value to >> include in the debian-next branch. >> > > Sorry I intended to include the last patch you had offered in that thread to > assist future readers to see your last submission on the idea, so here is > what I think appears to be the last patch submitted > https://lists.debian.org/debian-live/2012/06/msg00237.html > > Thanks. > >> Thanks. > >
Hi, sorry for this late reply. Appended to this email is an updated patch for live-build 4.0.3-1. Thank you.
From 2523e73a68fd53889433c4e3a8fcefe5778326de Mon Sep 17 00:00:00 2001 From: "Rui Miguel P. Bernardo" <rui.bernardo...@gmail.com> Date: Tue, 11 Nov 2014 09:17:55 +0000 Subject: [PATCH] support snapshots.debian.org in live-build (4.0.3-1) --- functions/debian-snapshots.sh | 138 ++++++++++++++++++++++++++++++ functions/defaults.sh | 24 ++++++ scripts/build/bootstrap_archive-keys | 7 +- scripts/build/chroot_apt | 10 +++ scripts/build/config | 12 ++- scripts/build/installer_debian-installer | 5 ++ 6 files changed, 194 insertions(+), 2 deletions(-) create mode 100644 functions/debian-snapshots.sh diff --git a/functions/debian-snapshots.sh b/functions/debian-snapshots.sh new file mode 100644 index 0000000..4d6ee90 --- /dev/null +++ b/functions/debian-snapshots.sh @@ -0,0 +1,138 @@ +#!/bin/sh + +## live-build(7) - System Build Scripts +## Copyright (C) 2006-2012 Daniel Baumann <dan...@debian.org> +## +## live-build comes with ABSOLUTELY NO WARRANTY; for details see COPYING. +## This is free software, and you are welcome to redistribute it +## under certain conditions; see COPYING for details. + +Short_date () +{ + SHORT_DATE="${1}:-${LB_SNAPSHOT}}" + # returns the date as YYYYMMDD + echo "${SHORT_DATE}" | cut -c 1-8 +} + +Last_archive_entry () +{ + # returns the last date link + LAST_ENTRY="$(cat /tmp/index.html | grep "$(date +%Y%m)" | sed 's|.*<a href="\([^"]*\)".*$|\1|' | tail -n 1 )" + echo "$( echo ${LAST_ENTRY} | sed 's|./||' | sed 's|/||' )" +} + +First_archive_entry () +{ + # returns the 1st date link (1st line is daily-images in daily installer html) + FIRST_ENTRY="$(cat /tmp/index.html | grep DIR | sed 's|.*<a href="\([^"]*\)".*$|\1|' | head -n 2 | tail -n 1 )" + echo "$( echo ${FIRST_ENTRY} | sed 's|./||' | sed 's|/||' )" +} + +Previous_date () +{ + INITIAL_DATE="${1}" + + # convert date to seconds + UNIX_TIME=$(date -d "$INITIAL_DATE" +%s) + # one day is 86400 secs + #ONE_DAY=$(( 24 * 3600 )) + ONE_DAY=86400 + + # subtract one day to date + PREVIOUS_DATE=$(date -d "$INITIAL_DATE -$ONE_DAY sec" "+%Y%m%d") + + # return previous date + echo "${PREVIOUS_DATE}" +} + +Dated_archive_entry () +{ + # returns the link for a specific date + WANTED_DATE="${1}:-${LB_SNAPSHOT}}" + DATED_ENTRY="$(cat /tmp/index.html | grep "$(Short_date ${WANTED_DATE})" | sed 's|.*<a href="\([^"]*\)".*$|\1|' | tail -n 1 )" + echo "$( echo ${DATED_ENTRY} | sed 's|./||' | sed 's|/||' )" +} + +Previous_archive_entry () +{ + # returns the link for the match or the previous entry before specific date + FIRST_DATE="$(Short_date $(First_archive_entry))" + + DATE="$(Short_date ${LB_SNAPSHOT})" + + # if there is no daily installer available for + # a very old date, then use the oldest daily installer + # available, even with kernel mismatch. + if [ ${DATE} -le ${FIRST_DATE} ] + then + DATE=${FIRST_DATE} + fi + + while [ "${DATE}" != "${FIRST_DATE}" ]; do + LINK=$(cat /tmp/index.html | grep "${DATE}" | sed 's|.*<a href="\([^"]*\)".*$|\1|' ) + + if [ -z "${LINK}" ] + then + # date was not found + # try previous date + DATE=$(Previous_date "${DATE}") + else + # a link was found + break + fi + done + + # return link to matched date or previous daily installer date, + # the 1st one if no other younger d-i for that date was found + Dated_archive_entry "${DATE}" +} + +Latest_debian_archive_snapshot_available () +{ + # returns the complete date/time for the link of the latest (last) available debian archive snapshot date + wget 'http://snapshot.debian.org/archive/debian/?year='"$(date +%Y)"';month='"$(date +%m)" -O /tmp/index.html && true + LAST_ARCHIVE_SNAPSHOT="$(Last_archive_entry)" + echo "${LAST_ARCHIVE_SNAPSHOT}" +} + +Dated_debian_archive_snapshot () +{ + # returns the complete date/time for the link of the latest for a specific date in snapshots.debian.org + DATE_YEAR="$(Short_date ${LB_SNAPSHOT} | cut -c 1-4 )" + DATE_MONTH="$(Short_date ${LB_SNAPSHOT} | cut -c 5-6 )" + wget 'http://snapshot.debian.org/archive/debian/?year='"${DATE_YEAR}"';month='"${DATE_MONTH}" -O /tmp/index.html && true + LAST_ARCHIVE_SNAPSHOT="$(Dated_archive_entry)" + echo "${LAST_ARCHIVE_SNAPSHOT}" +} + +Latest_debian_installer_snapshot_available () +{ + # returns the date-hour for the latest date of debian-installer daily build available for an arch + # d-i archive uses different date links + wget 'http://d-i.debian.org/daily-images/'"${LIVE_IMAGE_ARCHITECTURE}" -O /tmp/index.html && true + LAST_INSTALLER_SNAPSHOT="$(Last_archive_entry)" + echo "${LAST_INSTALLER_SNAPSHOT}" +} + +Dated_debian_installer_snapshot () +{ + # returns the date-hour for the specific date of debian-installer daily build available for an arch + # d-i archive uses different date links + wget 'http://d-i.debian.org/daily-images/'"${LIVE_IMAGE_ARCHITECTURE}" -O /tmp/index.html && true + DATED_INSTALLER_SNAPSHOT="$(Dated_archive_entry)" + echo "${DATED_INSTALLER_SNAPSHOT}" +} + +Available_daily_installer () +{ + # returns the desired daily d-i date link or the previous existing daily d-i + DAILY_INSTALLER="$(Dated_debian_installer_snapshot)" + if [ -z "${DAILY_INSTALLER}" ] + then + # no wanted date was found, download available dates and search previous + wget 'http://d-i.debian.org/daily-images/'"${LIVE_IMAGE_ARCHITECTURE}" -O /tmp/index.html && true + DAILY_INSTALLER=$(Previous_archive_entry) + fi + + echo "${DAILY_INSTALLER}" +} diff --git a/functions/defaults.sh b/functions/defaults.sh index feebdee..d0c288a 100755 --- a/functions/defaults.sh +++ b/functions/defaults.sh @@ -370,6 +370,19 @@ Set_defaults () ## config/bootstrap + # Setting snapshots.debian.org + if [ -n "${LB_SNAPSHOT}" ] + then + LB_MIRROR_BOOTSTRAP="${LB_MIRROR_BOOTSTRAP:-http://snapshot.debian.org/archive/debian/${LB_SNAPSHOT}}" + LB_PARENT_MIRROR_BOOTSTRAP="${LB_MIRROR_BOOTSTRAP}" + LB_MIRROR_CHROOT_SECURITY="${LB_MIRROR_CHROOT_SECURITY:-http://snapshot.debian.org/archive/debian-security/${LB_SNAPSHOT}}" + LB_PARENT_MIRROR_CHROOT_SECURITY="${LB_PARENT_MIRROR_CHROOT_SECURITY:-${LB_MIRROR_CHROOT_SECURITY}}" + LB_MIRROR_BINARY="${LB_MIRROR_BINARY:-http://snapshot.debian.org/archive/debian/${LB_SNAPSHOT}}" + LB_PARENT_MIRROR_BINARY="${LB_PARENT_MIRROR_BINARY:-${LB_MIRROR_BINARY}}" + LB_MIRROR_BINARY_SECURITY="${LB_MIRROR_BINARY_SECURITY:-http://snapshot.debian.org/archive/debian-security/${LB_SNAPSHOT}}" + LB_PARENT_MIRROR_BINARY_SECURITY="${LB_PARENT_MIRROR_BINARY_SECURITY:-${LB_MIRROR_BINARY_SECURITY}}" + fi + # Setting mirror to fetch packages from case "${LB_MODE}" in debian) @@ -1059,6 +1072,17 @@ Check_defaults () fi fi + if [ -n "${LB_SNAPSHOT}" ] && [ "${LB_DEBIAN_INSTALLER}" = "live" ] && [ "${LB_DEBIAN_INSTALLER_DISTRIBUTION}" = "daily" ] + then + DAILY_LIVE_INSTALLER="$(Dated_debian_installer_snapshot)" + # if there is no available daily installer + if [ -z "${DAILY_LIVE_INSTALLER}" ] + then + Echo_warning "You have selected debian-snapshots option with daily live-installer, but there is no daily live installer available at that date. The selected date was ${LB_SNAPSHOT}" + Echo_warning "The last available daily installer before ${LB_SNAPSHOT} will be used. Please check http://d-i.debian.org/daily-images/ to see the oldest daily installer available." + fi + fi + if [ "${LB_BOOTLOADER}" = "syslinux" ] then # syslinux + fat or ntfs, or extlinux + ext[234] or btrfs diff --git a/scripts/build/bootstrap_archive-keys b/scripts/build/bootstrap_archive-keys index 4b9324f..2bec20d 100755 --- a/scripts/build/bootstrap_archive-keys +++ b/scripts/build/bootstrap_archive-keys @@ -71,7 +71,12 @@ do rm -f chroot/key.asc chroot/key.asc.sig done -Chroot chroot "apt-get update" +if [ -n "${LB_SNAPSHOT}" ] +then + Chroot chroot "apt-get update -o Acquire::Check-Valid-Until=false" +else + Chroot chroot "apt-get update" +fi # Creating stage file Create_stagefile .build/bootstrap_archive-keys diff --git a/scripts/build/chroot_apt b/scripts/build/chroot_apt index 09ece39..b4e2c70 100755 --- a/scripts/build/chroot_apt +++ b/scripts/build/chroot_apt @@ -54,6 +54,13 @@ case "${1}" in echo "Acquire::http::Proxy \"${LB_APT_HTTP_PROXY}\";" > chroot/etc/apt/apt.conf.d/00http-proxy fi + # Configuring snapshots.debian.org + if [ -n "${LB_SNAPSHOT}" ] + then + echo '// see bug #595801' > chroot/etc/apt/apt.conf.d/00debian-snapshots + echo 'Acquire::Check-Valid-Until "false";' >> chroot/etc/apt/apt.conf.d/00debian-snapshots + fi + # Configuring apt pipeline if [ -n "${LB_APT_PIPELINE}" ] then @@ -227,6 +234,9 @@ EOF # Deconfiguring aptitude http proxy rm -f chroot/etc/apt/apt.conf.d/00http-proxy + # Deconfiguring snapshots.debian.org + rm -f chroot/etc/apt/apt.conf.d/00debian-snapshots + # Deconfiguring aptitude pipeline rm -f chroot/etc/apt/apt.conf.d/00pipeline diff --git a/scripts/build/config b/scripts/build/config index e3b1e51..d455d77 100755 --- a/scripts/build/config +++ b/scripts/build/config @@ -52,6 +52,7 @@ USAGE="${PROGRAM} [--apt apt|aptitude]\n\ \t [--debian-installer-distribution daily|CODENAME]\n\ \t [--debian-installer-preseedfile FILE|URL]\n\ \t [--debian-installer-gui true|false]\n\ +\t [--snapshot yyyymmdd|yyyymmddThhmmssZ\n\ \t [--debug]\n\ \t [-d|--distribution CODENAME]\n\ \t [--parent-distribution CODENAME]\n\ @@ -147,7 +148,7 @@ Local_arguments () net-cow-server:,net-tarball:,firmware-binary:,firmware-chroot:,swap-file-path:,swap-file-size:, loadlin:,win32-loader:,source:,source-images:,breakpoints,conffile:,debug,force, help,ignore-system-defaults,quiet,usage,verbose,version,bootstrap-qemu-static:,bootstrap-qemu-arch:, - bootstrap-qemu-exclude:" + bootstrap-qemu-exclude:,snapshot:" # Remove spaces added by indentation LONG_OPTIONS="$(echo ${LONG_OPTIONS} | tr -d ' ')" ARGUMENTS="$(getopt --longoptions ${LONG_OPTIONS} --name="${PROGRAM}" --options a:f:d:m:l:k:p:b:e:s:c:huv --shell sh -- "${@}")" @@ -300,6 +301,11 @@ Local_arguments () shift 2 ;; + --snapshot) + LB_SNAPSHOT="${2}" + shift 2 + ;; + --initramfs) LB_INITRAMFS="${2}" shift 2 @@ -949,6 +955,10 @@ LB_DEBCONF_FRONTEND="${LB_DEBCONF_FRONTEND}" # (Default: ${LB_DEBCONF_PRIORITY}) LB_DEBCONF_PRIORITY="${LB_DEBCONF_PRIORITY}" +# \$LB_SNAPSHOT: set snapshots.debian.org date to use +# (Default: empty or not set to not use archive snapshot, or a valid date in snapshots.debian.org URL format) +LB_SNAPSHOT="${LB_SNAPSHOT}" + # \$LB_INITRAMFS: set initramfs hook # (Default: ${LB_INITRAMFS}) LB_INITRAMFS="${LB_INITRAMFS}" diff --git a/scripts/build/installer_debian-installer b/scripts/build/installer_debian-installer index 6415fff..63b9091 100755 --- a/scripts/build/installer_debian-installer +++ b/scripts/build/installer_debian-installer @@ -256,6 +256,11 @@ case "${LB_DERIVATIVE}" in # Debian Installer daily builds URL="http://d-i.debian.org/daily-images/${LIVE_IMAGE_ARCHITECTURE}/daily/" + # use snapshot installer too + if [ -n "${LB_SNAPSHOT}" ] + then + URL="http://d-i.debian.org/daily-images/${LIVE_IMAGE_ARCHITECTURE}/$(Available_daily_installer)/" + fi else URL="${LB_MIRROR_DEBIAN_INSTALLER}/dists/${LB_DEBIAN_INSTALLER_DISTRIBUTION}/main/installer-${LIVE_IMAGE_ARCHITECTURE}/current/images/" fi -- 1.7.10.4