From 2728d6307de8b013dd834082f033f4509722e8d9 Mon Sep 17 00:00:00 2001 From: Will Andrews Date: Thu, 27 Dec 2018 23:27:48 +0000 Subject: [PATCH] beinstall: try to save progress from pkg updates. This is primarily aimed at failed updates due to package conflicts, and affects treatment of failed updates. Whereas before potentially a large number of packages would need to be synced for each attempt, they can now be persisted. Requires rsync. There may be better ways to implement this, e.g. using secondary cache path that is only used on followup attempts and then wiped on success, which avoids polluting current cache. --- tools/build/beinstall.sh | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/tools/build/beinstall.sh b/tools/build/beinstall.sh index 9c0e93491c0..cd325dafc80 100755 --- a/tools/build/beinstall.sh +++ b/tools/build/beinstall.sh @@ -82,6 +82,14 @@ unmount_be() { mount | grep " on ${BE_MNTPT}" | awk '{print $3}' | sort -r | xargs -t umount -f } +copy_pkgs() { + # Before cleaning up, try to save progress in pkg(8) updates, to + # speed up future updates. This is only called on the error path; + # no need to run on success. + echo "Rsyncing back newly saved packages..." + rsync -av --progress ${BE_MNTPT}/var/cache/pkg/. /var/cache/pkg/. +} + cleanup_be() { # Before destroying, unmount any child filesystems that may have # been mounted under the boot environment. Sort them in reverse @@ -225,6 +233,10 @@ if [ -n "${CONFIG_UPDATER}" ]; then [ $? -ne 0 ] && errx "${CONFIG_UPDATER} (post-world) failed!" fi +if which rsync >/dev/null 2>&1; then + cleanup_commands="copy_pkgs ${cleanup_commands}" +fi + BE_PKG="chroot ${BE_MNTPT} env ASSUME_ALWAYS_YES=true pkg" if [ -z "${NO_PKG_UPGRADE}" ]; then ${BE_PKG} update || errx "Unable to update pkg"