# SPDX-License-Identifier: LGPL-2.1+
from mkosi.distributions import centos, join_mirror
-from mkosi.installer.dnf import RpmRepository, find_rpm_gpgkey
+from mkosi.installer.rpm import RpmRepository, find_rpm_gpgkey
from mkosi.state import MkosiState
PackageType,
join_mirror,
)
-from mkosi.installer.dnf import RpmRepository, find_rpm_gpgkey, invoke_dnf, setup_dnf
+from mkosi.installer.dnf import invoke_dnf, setup_dnf
+from mkosi.installer.rpm import RpmRepository, find_rpm_gpgkey
from mkosi.log import complete_step, die
from mkosi.state import MkosiState
from mkosi.tree import rmtree
PackageType,
join_mirror,
)
-from mkosi.installer.dnf import RpmRepository, find_rpm_gpgkey, invoke_dnf, setup_dnf
+from mkosi.installer.dnf import invoke_dnf, setup_dnf
+from mkosi.installer.rpm import RpmRepository, find_rpm_gpgkey
from mkosi.log import die
from mkosi.state import MkosiState
PackageType,
join_mirror,
)
-from mkosi.installer.dnf import RpmRepository, find_rpm_gpgkey, invoke_dnf, setup_dnf
+from mkosi.installer.dnf import invoke_dnf, setup_dnf
+from mkosi.installer.rpm import RpmRepository, find_rpm_gpgkey
from mkosi.log import die
from mkosi.state import MkosiState
PackageType,
join_mirror,
)
-from mkosi.installer.dnf import RpmRepository, find_rpm_gpgkey, invoke_dnf, setup_dnf
+from mkosi.installer.dnf import invoke_dnf, setup_dnf
+from mkosi.installer.rpm import RpmRepository, find_rpm_gpgkey
from mkosi.log import die
from mkosi.state import MkosiState
from mkosi.config import Architecture
from mkosi.distributions import Distribution, DistributionInstaller, PackageType
-from mkosi.installer.dnf import RpmRepository, invoke_dnf, setup_dnf
+from mkosi.installer.dnf import invoke_dnf, setup_dnf
+from mkosi.installer.rpm import RpmRepository
from mkosi.installer.zypper import invoke_zypper, setup_zypper
from mkosi.log import die
from mkosi.state import MkosiState
from typing import Any, Optional
from mkosi.distributions import centos, join_mirror
-from mkosi.installer.dnf import RpmRepository, find_rpm_gpgkey
+from mkosi.installer.rpm import RpmRepository, find_rpm_gpgkey
from mkosi.log import die
from mkosi.state import MkosiState
from collections.abc import Iterable
from mkosi.distributions import centos, join_mirror
-from mkosi.installer.dnf import RpmRepository, find_rpm_gpgkey
+from mkosi.installer.rpm import RpmRepository, find_rpm_gpgkey
from mkosi.state import MkosiState
# SPDX-License-Identifier: LGPL-2.1+
from mkosi.distributions import centos, join_mirror
-from mkosi.installer.dnf import RpmRepository, find_rpm_gpgkey
+from mkosi.installer.rpm import RpmRepository, find_rpm_gpgkey
from mkosi.state import MkosiState
from mkosi.config import ConfigFeature
from mkosi.installer.apt import apt_cmd
-from mkosi.installer.dnf import dnf_cmd, rpm_cmd
+from mkosi.installer.dnf import dnf_cmd
from mkosi.installer.pacman import pacman_cmd
+from mkosi.installer.rpm import rpm_cmd
from mkosi.installer.zypper import zypper_cmd
from mkosi.run import apivfs_cmd
from mkosi.state import MkosiState
# SPDX-License-Identifier: LGPL-2.1+
-import os
import shutil
-import subprocess
import textwrap
from collections.abc import Iterable
-from pathlib import Path
-from typing import NamedTuple, Optional
-from mkosi.run import apivfs_cmd, bwrap, run
+from mkosi.installer.rpm import RpmRepository, fixup_rpmdb_location, setup_rpm
+from mkosi.run import apivfs_cmd, bwrap
from mkosi.state import MkosiState
-from mkosi.tree import copy_tree, rmtree
from mkosi.types import PathString
from mkosi.util import sort_packages
-class RpmRepository(NamedTuple):
- id: str
- url: str
- gpgurls: tuple[str, ...]
- enabled: bool = True
- sslcacert: Optional[Path] = None
- sslclientkey: Optional[Path] = None
- sslclientcert: Optional[Path] = None
-
-
-def find_rpm_gpgkey(state: MkosiState, key: str, url: str) -> str:
- for gpgdir in ("usr/share/distribution-gpg-keys", "etc/pki/rpm-gpg"):
- for root in (state.pkgmngr, state.root, Path("/")):
- gpgpath = next((root / Path(gpgdir)).rglob(key), None)
- if gpgpath:
- return f"file://{gpgpath}"
-
- return url
-
-
def dnf_executable(state: MkosiState) -> str:
# Allow the user to override autodetection with an environment variable
dnf = state.config.environment.get("MKOSI_DNF")
f.write("\n")
- macros = state.pkgmngr / "usr/lib/rpm/macros.d"
- macros.mkdir(parents=True, exist_ok=True)
- if not (macros / "macros.lang").exists() and state.config.locale:
- (macros / "macros.lang").write_text(f"%_install_langs {state.config.locale}")
-
- rpmconfigdir = Path(run(["rpm", "--eval", "%{_rpmconfigdir}"], stdout=subprocess.PIPE).stdout.strip())
- copy_tree(rpmconfigdir, state.pkgmngr / "usr/lib/rpm", clobber=False, use_subvolumes=state.config.use_subvolumes)
+ setup_rpm(state)
def dnf_cmd(state: MkosiState) -> list[PathString]:
for p in (state.root / "var/log").iterdir():
if any(p.name.startswith(prefix) for prefix in ("dnf", "hawkey", "yum")):
p.unlink()
-
-
-def fixup_rpmdb_location(root: Path) -> None:
- # On Debian, rpm/dnf ship with a patch to store the rpmdb under ~/ so it needs to be copied back in the
- # right location, otherwise the rpmdb will be broken. See: https://bugs.debian.org/1004863. We also
- # replace it with a symlink so that any further rpm operations immediately use the correct location.
- rpmdb_home = root / "root/.rpmdb"
- if not rpmdb_home.exists() or rpmdb_home.is_symlink():
- return
-
- # Take into account the new location in F36
- rpmdb = root / "usr/lib/sysimage/rpm"
- if not rpmdb.exists():
- rpmdb = root / "var/lib/rpm"
- rmtree(rpmdb)
- shutil.move(rpmdb_home, rpmdb)
- rpmdb_home.symlink_to(os.path.relpath(rpmdb, start=rpmdb_home.parent))
-
-
-def rpm_cmd(state: MkosiState) -> list[PathString]:
- return ["env", "HOME=/", f"RPM_CONFIGDIR={state.pkgmngr / 'usr/lib/rpm'}", "rpm", "--root", state.root]
--- /dev/null
+# SPDX-License-Identifier: LGPL-2.1+
+
+import os
+import shutil
+import subprocess
+from pathlib import Path
+from typing import NamedTuple, Optional
+
+from mkosi.run import run
+from mkosi.state import MkosiState
+from mkosi.tree import copy_tree, rmtree
+from mkosi.types import PathString
+
+
+class RpmRepository(NamedTuple):
+ id: str
+ url: str
+ gpgurls: tuple[str, ...]
+ enabled: bool = True
+ sslcacert: Optional[Path] = None
+ sslclientkey: Optional[Path] = None
+ sslclientcert: Optional[Path] = None
+
+
+def find_rpm_gpgkey(state: MkosiState, key: str, url: str) -> str:
+ for gpgdir in ("usr/share/distribution-gpg-keys", "etc/pki/rpm-gpg"):
+ for root in (state.pkgmngr, state.root, Path("/")):
+ gpgpath = next((root / Path(gpgdir)).rglob(key), None)
+ if gpgpath:
+ return f"file://{gpgpath}"
+
+ return url
+
+
+def setup_rpm(state: MkosiState) -> None:
+ macros = state.pkgmngr / "usr/lib/rpm/macros.d"
+ macros.mkdir(parents=True, exist_ok=True)
+ if not (macros / "macros.lang").exists() and state.config.locale:
+ (macros / "macros.lang").write_text(f"%_install_langs {state.config.locale}")
+
+ rpmconfigdir = Path(run(["rpm", "--eval", "%{_rpmconfigdir}"], stdout=subprocess.PIPE).stdout.strip())
+ copy_tree(rpmconfigdir, state.pkgmngr / "usr/lib/rpm", clobber=False, use_subvolumes=state.config.use_subvolumes)
+
+
+def fixup_rpmdb_location(root: Path) -> None:
+ # On Debian, rpm/dnf ship with a patch to store the rpmdb under ~/ so it needs to be copied back in the
+ # right location, otherwise the rpmdb will be broken. See: https://bugs.debian.org/1004863. We also
+ # replace it with a symlink so that any further rpm operations immediately use the correct location.
+ rpmdb_home = root / "root/.rpmdb"
+ if not rpmdb_home.exists() or rpmdb_home.is_symlink():
+ return
+
+ # Take into account the new location in F36
+ rpmdb = root / "usr/lib/sysimage/rpm"
+ if not rpmdb.exists():
+ rpmdb = root / "var/lib/rpm"
+ rmtree(rpmdb)
+ shutil.move(rpmdb_home, rpmdb)
+ rpmdb_home.symlink_to(os.path.relpath(rpmdb, start=rpmdb_home.parent))
+
+
+def rpm_cmd(state: MkosiState) -> list[PathString]:
+ return ["env", "HOME=/", f"RPM_CONFIGDIR={state.pkgmngr / 'usr/lib/rpm'}", "rpm", "--root", state.root]
from collections.abc import Sequence
from mkosi.config import yes_no
-from mkosi.installer.dnf import RpmRepository, fixup_rpmdb_location
+from mkosi.installer.rpm import RpmRepository, fixup_rpmdb_location, setup_rpm
from mkosi.run import apivfs_cmd, bwrap
from mkosi.state import MkosiState
from mkosi.types import PathString
f.write("gpgkey=" if i == 0 else len("gpgkey=") * " ")
f.write(f"{url}\n")
+ setup_rpm(state)
+
def zypper_cmd(state: MkosiState) -> list[PathString]:
return [
"env",
f"ZYPP_CONF={state.pkgmngr / 'etc/zypp/zypp.conf'}",
+ f"RPM_CONFIGDIR={state.pkgmngr / 'usr/lib/rpm'}",
"zypper",
f"--root={state.root}",
f"--cache-dir={state.cache_dir / 'zypp'}",