From ac65566caa529a422b76365419caf0419edf0c38 Mon Sep 17 00:00:00 2001 From: Alan Somers Date: Mon, 14 Oct 2024 13:51:24 -0600 Subject: [PATCH] During upgrade, use freebsd-update from an already-fetched release (#38) This eliminates the dependency on github during upgrade. It also makes it possible to upgrade to a release that does not have -RELEASE in the name. Fixes #36 --- iocage_lib/ioc_upgrade.py | 24 +++++++++++++++--------- 1 file changed, 15 insertions(+), 9 deletions(-) diff --git a/iocage_lib/ioc_upgrade.py b/iocage_lib/ioc_upgrade.py index 06e825ab..3c2272cf 100644 --- a/iocage_lib/ioc_upgrade.py +++ b/iocage_lib/ioc_upgrade.py @@ -104,19 +104,25 @@ def upgrade_jail(self): self.__upgrade_check_conf__() f_rel = f'{self.new_release.rsplit("-RELEASE")[0]}' - f = 'https://raw.githubusercontent.com/freebsd/freebsd-src' \ - f'/releng/{f_rel}/usr.sbin/freebsd-update/freebsd-update.sh' tmp = None try: - tmp = tempfile.NamedTemporaryFile(delete=False) - with urllib.request.urlopen(f) as fbsd_update: - tmp.write(fbsd_update.read()) - tmp.close() - os.chmod(tmp.name, 0o755) + fetched_update = f"{self.iocroot}/releases/{self.new_release}" \ + f"/root/usr/sbin/freebsd-update" + if os.path.isfile(fetched_update): + fbsd_update = fetched_update + else: + f = 'https://raw.githubusercontent.com/freebsd/freebsd-src' \ + f'/releng/{f_rel}/usr.sbin/freebsd-update/freebsd-update.sh' + tmp = tempfile.NamedTemporaryFile(delete=False) + with urllib.request.urlopen(f) as http: + tmp.write(http.read()) + tmp.close() + os.chmod(tmp.name, 0o755) + fbsd_update = tmp.name fetch_cmd = [ - tmp.name, "-b", self.path, "-d", + fbsd_update, "-b", self.path, "-d", f"{self.path}/var/db/freebsd-update/", "-f", f"{self.path}/etc/freebsd-update.conf", "--not-running-from-cron", "--currently-running", @@ -159,7 +165,7 @@ def upgrade_jail(self): for _ in range(50): # up to 50 invocations to prevent runaway if os.path.islink(self.freebsd_install_link): - self.__upgrade_install__(tmp.name) + self.__upgrade_install__(fbsd_update) else: break