100 lines
3.6 KiB
Diff
100 lines
3.6 KiB
Diff
diff --git a/python/mozboot/mozboot/centosfedora.py b/python/mozboot/mozboot/centosfedora.py
|
|
index 37aa0e8eaa..7e7cf84481 100644
|
|
--- a/python/mozboot/mozboot/centosfedora.py
|
|
+++ b/python/mozboot/mozboot/centosfedora.py
|
|
@@ -21,9 +21,8 @@ class CentOSFedoraBootstrapper(LinuxBootstrapper, BaseBootstrapper):
|
|
def install_packages(self, packages):
|
|
if self.version >= 33 and "perl" in packages:
|
|
packages.append("perl-FindBin")
|
|
- # watchman is not available on centos/rocky
|
|
- if self.distro in ("centos", "rocky", "oracle"):
|
|
- packages = [p for p in packages if p != "watchman"]
|
|
+ # watchman is not available on centos/rocky/f42
|
|
+ packages = [p for p in packages if p != "watchman"]
|
|
self.dnf_install(*packages)
|
|
|
|
def upgrade_mercurial(self, current):
|
|
@@ -33,7 +32,41 @@ class CentOSFedoraBootstrapper(LinuxBootstrapper, BaseBootstrapper):
|
|
self.dnf_update("mercurial")
|
|
|
|
def dnf_install(self, *packages):
|
|
- if which("dnf"):
|
|
+ if which("rpm-ostree"):
|
|
+
|
|
+ def not_installed(package):
|
|
+ is_installed = subprocess.run(
|
|
+ ["rpm", "-q", package],
|
|
+ stdout=subprocess.DEVNULL,
|
|
+ stderr=subprocess.DEVNULL,
|
|
+ )
|
|
+ return is_installed.returncode !=0
|
|
+
|
|
+ packages = list(filter(not_installed, packages))
|
|
+ if len(packages) == 0:
|
|
+ return
|
|
+
|
|
+ command = ["rpm-ostree", "install"]
|
|
+ command.extend(packages)
|
|
+ subprocess.run(command, check=True)
|
|
+
|
|
+ reboot_confirmation = (
|
|
+ input(
|
|
+ "Packages installed successfully. "
|
|
+ "A system reboot is required. "
|
|
+ "Do you want to reboot now? (y/n): "
|
|
+ ).strip().lower()
|
|
+ )
|
|
+
|
|
+ if reboot_confirmation == 'y':
|
|
+ print("Rebooting...")
|
|
+ subprocess.run(["systemctl", "reboot"])
|
|
+ else:
|
|
+ raise Exception(
|
|
+ f'Reboot deferred. Please reboot to continue mozboot.'
|
|
+ )
|
|
+
|
|
+ elif which("dnf"):
|
|
|
|
def not_installed(package):
|
|
# We could check for "Error: No matching Packages to list", but
|
|
@@ -68,7 +101,39 @@ class CentOSFedoraBootstrapper(LinuxBootstrapper, BaseBootstrapper):
|
|
self.run_as_root(command)
|
|
|
|
def dnf_update(self, *packages):
|
|
- if which("dnf"):
|
|
+ if which("rpm-ostree"):
|
|
+ command = ["rpm-ostree", "upgrade"]
|
|
+
|
|
+ result = subprocess.run(
|
|
+ command,
|
|
+ stdout=subprocess.PIPE,
|
|
+ stderr=subprocess.PIPE,
|
|
+ text=True,
|
|
+ check=True
|
|
+ )
|
|
+
|
|
+ output = result.stdout + result.stderr
|
|
+
|
|
+ if "No upgrade available" in output:
|
|
+ return
|
|
+ else:
|
|
+ reboot_confirmation = (
|
|
+ input(
|
|
+ "System upgraded successfully. "
|
|
+ "A system reboot is required to continue. "
|
|
+ "Do you want to reboot now? (y/n): "
|
|
+ ).strip().lower()
|
|
+ )
|
|
+
|
|
+ if reboot_confirmation == 'y':
|
|
+ print("Rebooting...")
|
|
+ subprocess.run(["systemctl", "reboot"])
|
|
+ else:
|
|
+ raise Exception(
|
|
+ f'Reboot deferred. Please reboot to continue mozboot.'
|
|
+ )
|
|
+
|
|
+ elif which("dnf"):
|
|
command = ["dnf", "update"]
|
|
else:
|
|
command = ["yum", "update"]
|