From 460f1113c339f79997d97b87e408fbb850669846 Mon Sep 17 00:00:00 2001 From: Daan De Meyer Date: Sun, 11 Feb 2024 23:05:36 +0100 Subject: [PATCH] Add mkosi-install, mkosi-upgrade and mkosi-remove scripts These are primarily useful to provide a common way to install packages from scripts for opensuse which might be built with either zypper or dnf. --- mkosi/installer/apt.py | 4 ++++ mkosi/installer/dnf.py | 3 +++ mkosi/installer/pacman.py | 7 ++++++- mkosi/installer/zypper.py | 9 +++++++++ mkosi/resources/mkosi.md | 4 ++++ 5 files changed, 26 insertions(+), 1 deletion(-) diff --git a/mkosi/installer/apt.py b/mkosi/installer/apt.py index 2a532d14f..8990bda66 100644 --- a/mkosi/installer/apt.py +++ b/mkosi/installer/apt.py @@ -60,6 +60,10 @@ class Apt(PackageManager): "apt-mark", "apt-sortpkgs", ) + } | { + "mkosi-install": apivfs_cmd(context.root) + cls.cmd(context, "get") + ["install"], + "mkosi-upgrade": apivfs_cmd(context.root) + cls.cmd(context, "get") + ["upgrade"], + "mkosi-remove" : apivfs_cmd(context.root) + cls.cmd(context, "get") + ["purge"], } @classmethod diff --git a/mkosi/installer/dnf.py b/mkosi/installer/dnf.py index 6d4c6f2d8..910e480a0 100644 --- a/mkosi/installer/dnf.py +++ b/mkosi/installer/dnf.py @@ -41,6 +41,9 @@ class Dnf(PackageManager): return { "dnf": apivfs_cmd(context.root) + cls.cmd(context), "rpm": apivfs_cmd(context.root) + rpm_cmd(context), + "mkosi-install": apivfs_cmd(context.root) + cls.cmd(context) + ["install"], + "mkosi-upgrade": apivfs_cmd(context.root) + cls.cmd(context) + ["upgrade"], + "mkosi-remove" : apivfs_cmd(context.root) + cls.cmd(context) + ["remove"], } @classmethod diff --git a/mkosi/installer/pacman.py b/mkosi/installer/pacman.py index e73fb24df..7df0fbbf9 100644 --- a/mkosi/installer/pacman.py +++ b/mkosi/installer/pacman.py @@ -35,7 +35,12 @@ class Pacman(PackageManager): @classmethod def scripts(cls, context: Context) -> dict[str, list[PathString]]: - return {"pacman": apivfs_cmd(context.root) + cls.cmd(context)} + return { + "pacman": apivfs_cmd(context.root) + cls.cmd(context), + "mkosi-install": apivfs_cmd(context.root) + cls.cmd(context) + ["--sync", "--needed"], + "mkosi-upgrade": apivfs_cmd(context.root) + cls.cmd(context) + ["--sync", "--sysupgrade", "--needed"], + "mkosi-remove" : apivfs_cmd(context.root) + cls.cmd(context) + ["--remove", "--recursive", "--nosave"], + } @classmethod def mounts(cls, context: Context) -> list[PathString]: diff --git a/mkosi/installer/zypper.py b/mkosi/installer/zypper.py index d419147e4..7bd43a022 100644 --- a/mkosi/installer/zypper.py +++ b/mkosi/installer/zypper.py @@ -30,9 +30,18 @@ class Zypper(PackageManager): @classmethod def scripts(cls, context: Context) -> dict[str, list[PathString]]: + install: list[PathString] = [ + "install", + "--download", "in-advance", + "--recommends" if context.config.with_recommends else "--no-recommends", + ] + return { "zypper": apivfs_cmd(context.root) + cls.cmd(context), "rpm" : apivfs_cmd(context.root) + rpm_cmd(context), + "mkosi-install": apivfs_cmd(context.root) + cls.cmd(context) + install, + "mkosi-upgrade": apivfs_cmd(context.root) + cls.cmd(context) + ["update"], + "mkosi-remove" : apivfs_cmd(context.root) + cls.cmd(context) + ["remove", "--clean-deps"], } @classmethod diff --git a/mkosi/resources/mkosi.md b/mkosi/resources/mkosi.md index 301ed45fc..4197ba87c 100644 --- a/mkosi/resources/mkosi.md +++ b/mkosi/resources/mkosi.md @@ -1988,6 +1988,10 @@ available via `$PATH` to simplify common usecases. the host system. This means that from a script, you can do e.g. `dnf install vim` to install vim into the image. + Additionally, `mkosi-install`, `mkosi-upgrade` and `mkosi-remove` will + invoke the corresponding operation of the package manager being used + to built the image. + * `mkosi-as-caller`: This script uses `setpriv` to switch from the user `root` in the user namespace used for various build steps back to the original user that called mkosi. This is useful when -- 2.47.2