def invoke_dnf(
args: CommandLineArguments,
root: Path,
- default_repositories: List[str],
command: str,
packages: Set[str],
- extra_repos: Sequence[str] = (),
) -> None:
- repositories = (args.repositories or default_repositories) + list(extra_repos)
-
- repos = [f"--enablerepo={repo}" for repo in repositories]
config_file = workspace(root) / "dnf.conf"
cmd = 'dnf' if shutil.which('dnf') else 'yum'
"--allowerasing",
f"--releasever={args.release}",
f"--installroot={root}",
- "--disablerepo=*",
- *repos,
"--setopt=keepcache=1",
"--setopt=install_weak_deps=0",
]
+ if args.repositories:
+ cmdline += ["--disablerepo=*"] + [f"--enablerepo={repo}" for repo in args.repositories]
+
if args.with_network == "never":
cmdline += ["-C"]
def install_packages_dnf(
args: CommandLineArguments,
root: Path,
- default_repositories: List[str],
packages: Set[str],
do_run_build_script: bool,
- extra_repos: Sequence[str] = (),
) -> None:
packages = make_rpm_list(args, packages, do_run_build_script)
- invoke_dnf(args, root, default_repositories, 'install', packages, extra_repos)
+ invoke_dnf(args, root, 'install', packages)
def invoke_tdnf(
args: CommandLineArguments,
root: Path,
- default_repositories: List[str],
command: str,
packages: Set[str],
gpgcheck: bool,
do_run_build_script: bool,
) -> None:
- repositories = args.repositories or default_repositories
-
- repos = [f"--enablerepo={repo}" for repo in repositories]
config_file = workspace(root) / "dnf.conf"
packages = make_rpm_list(args, packages, do_run_build_script)
f"--config={config_file}",
f"--releasever={args.release}",
f"--installroot={root}",
- "--disablerepo=*",
- *repos,
]
+ if args.repositories:
+ cmdline += ["--disablerepo=*"] + [f"--enablerepo={repo}" for repo in args.repositories]
+
if not gpgcheck:
cmdline += ["--nogpgcheck"]
def install_packages_tdnf(
args: CommandLineArguments,
root: Path,
- default_repositories: List[str],
packages: Set[str],
gpgcheck: bool,
do_run_build_script: bool,
) -> None:
packages = make_rpm_list(args, packages, do_run_build_script)
- invoke_tdnf(args, root, default_repositories, 'install', packages, gpgcheck, do_run_build_script)
+ invoke_tdnf(args, root, 'install', packages, gpgcheck, do_run_build_script)
class Repo(NamedTuple):
def setup_dnf(args: CommandLineArguments, root: Path, repos: Sequence[Repo] = ()) -> None:
gpgcheck = True
- repo_file = workspace(root) / "temp.repo"
+ repo_file = workspace(root) / "mkosi.repo"
with repo_file.open("w") as f:
for repo in repos:
gpgkey: Optional[str] = None
name={repo.name}
{repo.url}
gpgkey={gpgkey or ''}
+ enabled=1
"""
)
)
updates_url = "baseurl=https://packages.vmware.com/photon/$releasever/photon_updates_$releasever_$basearch"
gpgpath = Path("/etc/pki/rpm-gpg/VMWARE-RPM-GPG-KEY")
- setup_dnf(
- args,
- root,
- repos=[
- Repo("photon", f"VMware Photon OS {args.release} Release", release_url, gpgpath),
- Repo("photon-updates", f"VMware Photon OS {args.release} Updates", updates_url, gpgpath),
- ],
- )
+ repos = [Repo("photon", f"VMware Photon OS {args.release} Release", release_url, gpgpath),
+ Repo("photon-updates", f"VMware Photon OS {args.release} Updates", updates_url, gpgpath)]
+
+ setup_dnf(args, root, repos)
packages = {*args.packages}
add_packages(args, packages, "minimal")
if not do_run_build_script and args.bootable:
add_packages(args, packages, "linux", "initramfs")
- install_packages_tdnf(
- args,
- root,
- ["photon", "photon-updates"],
- packages,
- gpgpath.exists(),
- do_run_build_script,
- )
+ install_packages_tdnf(args, root, packages, gpgpath.exists(), do_run_build_script)
@complete_step("Installing Clear Linux…")
gpgpath = Path(f"/etc/pki/rpm-gpg/RPM-GPG-KEY-fedora-{args.releasever}-{arch}")
gpgurl = urllib.parse.urljoin("https://getfedora.org/static/", gpgid)
- setup_dnf(
- args,
- root,
- repos=[
- Repo("fedora", f"Fedora {args.release.capitalize()} - base", release_url, gpgpath, gpgurl),
- Repo("updates", f"Fedora {args.release.capitalize()} - updates", updates_url, gpgpath, gpgurl),
- ],
- )
+ repos = [Repo("fedora", f"Fedora {args.release.capitalize()} - base", release_url, gpgpath, gpgurl),
+ Repo("updates", f"Fedora {args.release.capitalize()} - updates", updates_url, gpgpath, gpgurl)]
+
+ setup_dnf(args, root, repos)
packages = {*args.packages}
add_packages(args, packages, "fedora-release", "systemd")
packages.update(args.build_packages)
if not do_run_build_script and args.network_veth:
add_packages(args, packages, "systemd-networkd", conditional="systemd")
- install_packages_dnf(args, root, ["fedora", "updates"], packages, do_run_build_script)
+ install_packages_dnf(args, root, packages, do_run_build_script)
root.joinpath("etc/locale.conf").write_text("LANG=C.UTF-8\n")
gpgpath = Path("/etc/pki/rpm-gpg/RPM-GPG-KEY-Mageia")
- setup_dnf(
- args,
- root,
- repos=[
- Repo("mageia", f"Mageia {args.release} Core Release", release_url, gpgpath),
- Repo("updates", f"Mageia {args.release} Core Updates", updates_url, gpgpath),
- ],
- )
+ repos = [Repo("mageia", f"Mageia {args.release} Core Release", release_url, gpgpath),
+ Repo("updates", f"Mageia {args.release} Core Updates", updates_url, gpgpath)]
+
+ setup_dnf(args, root, repos)
packages = {*args.packages}
add_packages(args, packages, "basesystem-minimal")
if do_run_build_script:
packages.update(args.build_packages)
- install_packages_dnf(args, root, ["mageia", "updates"], packages, do_run_build_script)
+ install_packages_dnf(args, root, packages, do_run_build_script)
disable_pam_securetty(root)
gpgpath = Path("/etc/pki/rpm-gpg/RPM-GPG-KEY-OpenMandriva")
- setup_dnf(
- args,
- root,
- repos=[
- Repo("openmandriva", f"OpenMandriva {release_model} Main", release_url, gpgpath),
- Repo("updates", f"OpenMandriva {release_model} Main Updates", updates_url, gpgpath),
- ],
- )
+ repos = [Repo("openmandriva", f"OpenMandriva {release_model} Main", release_url, gpgpath),
+ Repo("updates", f"OpenMandriva {release_model} Main Updates", updates_url, gpgpath)]
+
+ setup_dnf(args, root, repos)
packages = {*args.packages}
# well we may use basesystem here, but that pulls lot of stuff
if do_run_build_script:
packages.update(args.build_packages)
- install_packages_dnf(args, root, ["openmandriva", "updates"], packages, do_run_build_script)
+ install_packages_dnf(args, root, packages, do_run_build_script)
disable_pam_securetty(root)
-def install_centos_repos_old(args: CommandLineArguments, root: Path, epel_release: int) -> List[str]:
+def install_centos_repos_old(args: CommandLineArguments, root: Path, epel_release: int) -> None:
# Repos for CentOS 7 and earlier
gpgpath = Path(f"/etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-{args.release}")
centosplus_url = f"mirrorlist=http://mirrorlist.centos.org/?release={args.release}&arch=x86_64&repo=centosplus"
epel_url = f"mirrorlist=https://mirrors.fedoraproject.org/mirrorlist?repo=epel-{epel_release}&arch=x86_64"
- setup_dnf(
- args,
- root,
- repos=[
- Repo("base", f"CentOS-{args.release} - Base", release_url, gpgpath, gpgurl),
- Repo("updates", f"CentOS-{args.release} - Updates", updates_url, gpgpath, gpgurl),
- Repo("extras", f"CentOS-{args.release} - Extras", extras_url, gpgpath, gpgurl),
- Repo("centosplus", f"CentOS-{args.release} - Plus", centosplus_url, gpgpath, gpgurl),
- Repo(
- "epel",
- f"name=Extra Packages for Enterprise Linux {epel_release} - $basearch",
- epel_url,
- epel_gpgpath,
- epel_gpgurl,
- ),
- ],
- )
+ repos = [Repo("base", f"CentOS-{args.release} - Base", release_url, gpgpath, gpgurl),
+ Repo("updates", f"CentOS-{args.release} - Updates", updates_url, gpgpath, gpgurl),
+ Repo("extras", f"CentOS-{args.release} - Extras", extras_url, gpgpath, gpgurl),
+ Repo("centosplus", f"CentOS-{args.release} - Plus", centosplus_url, gpgpath, gpgurl)]
- return ["base", "updates", "extras", "centosplus"]
+ if 'epel' in args.distribution.name:
+ repos += [Repo("epel", f"name=Extra Packages for Enterprise Linux {epel_release} - $basearch",
+ epel_url, epel_gpgpath, epel_gpgurl)]
+ setup_dnf(args, root, repos)
-def install_centos_repos_new(args: CommandLineArguments, root: Path, epel_release: int) -> List[str]:
+
+def install_centos_repos_new(args: CommandLineArguments, root: Path, epel_release: int) -> None:
# Repos for CentOS 8 and later
gpgpath = Path("/etc/pki/rpm-gpg/RPM-GPG-KEY-centosofficial")
centosplus_url = f"mirrorlist=http://mirrorlist.centos.org/?release={args.release}&arch=x86_64&repo=centosplus"
epel_url = f"mirrorlist=https://mirrors.fedoraproject.org/mirrorlist?repo=epel-{epel_release}&arch=x86_64"
- setup_dnf(
- args,
- root,
- repos=[
- Repo("AppStream", f"CentOS-{args.release} - AppStream", appstream_url, gpgpath, gpgurl),
- Repo("BaseOS", f"CentOS-{args.release} - Base", baseos_url, gpgpath, gpgurl),
- Repo("extras", f"CentOS-{args.release} - Extras", extras_url, gpgpath, gpgurl),
- Repo("centosplus", f"CentOS-{args.release} - Plus", centosplus_url, gpgpath, gpgurl),
- Repo(
- "epel",
- f"name=Extra Packages for Enterprise Linux {epel_release} - $basearch",
- epel_url,
- epel_gpgpath,
- epel_gpgurl,
- ),
- ],
- )
+ repos = [Repo("AppStream", f"CentOS-{args.release} - AppStream", appstream_url, gpgpath, gpgurl),
+ Repo("BaseOS", f"CentOS-{args.release} - Base", baseos_url, gpgpath, gpgurl),
+ Repo("extras", f"CentOS-{args.release} - Extras", extras_url, gpgpath, gpgurl),
+ Repo("centosplus", f"CentOS-{args.release} - Plus", centosplus_url, gpgpath, gpgurl)]
- return ["AppStream", "BaseOS", "extras", "centosplus"]
+ if 'epel' in args.distribution.name:
+ repos += [Repo("epel", f"name=Extra Packages for Enterprise Linux {epel_release} - $basearch",
+ epel_url, epel_gpgpath, epel_gpgurl)]
+ setup_dnf(args, root, repos)
-def install_rocky_repos(args: CommandLineArguments, root: Path, epel_release: int) -> List[str]:
+
+def install_rocky_repos(args: CommandLineArguments, root: Path, epel_release: int) -> None:
# Repos for Rocky Linux 8 and later
gpgpath = Path("/etc/pki/rpm-gpg/RPM-GPG-KEY-rockyofficial")
gpgurl = "https://download.rockylinux.org/pub/rocky/RPM-GPG-KEY-rockyofficial"
plus_url = f"mirrorlist=https://mirrors.rockylinux.org/mirrorlist?arch=x86_64&repo=rockyplus-{args.release}"
epel_url = f"mirrorlist=https://mirrors.fedoraproject.org/mirrorlist?repo=epel-{epel_release}&arch=x86_64"
- setup_dnf(
- args,
- root,
- repos=[
- Repo("AppStream", f"Rocky-{args.release} - AppStream", appstream_url, gpgpath, gpgurl),
- Repo("BaseOS", f"Rocky-{args.release} - Base", baseos_url, gpgpath, gpgurl),
- Repo("extras", f"Rocky-{args.release} - Extras", extras_url, gpgpath, gpgurl),
- Repo("plus", f"Rocky-{args.release} - Plus", plus_url, gpgpath, gpgurl),
- Repo(
- "epel",
- f"name=Extra Packages for Enterprise Linux {epel_release} - $basearch",
- epel_url,
- epel_gpgpath,
- epel_gpgurl,
- ),
- ],
- )
+ repos = [Repo("AppStream", f"Rocky-{args.release} - AppStream", appstream_url, gpgpath, gpgurl),
+ Repo("BaseOS", f"Rocky-{args.release} - Base", baseos_url, gpgpath, gpgurl),
+ Repo("extras", f"Rocky-{args.release} - Extras", extras_url, gpgpath, gpgurl),
+ Repo("plus", f"Rocky-{args.release} - Plus", plus_url, gpgpath, gpgurl)]
+ if 'epel' in args.distribution.name:
+ repos += [Repo("epel", f"name=Extra Packages for Enterprise Linux {epel_release} - $basearch",
+ epel_url, epel_gpgpath, epel_gpgurl)]
- return ["AppStream", "BaseOS", "extras", "plus"]
+ setup_dnf(args, root, repos)
-def install_alma_repos(args: CommandLineArguments, root: Path, epel_release: int) -> List[str]:
+def install_alma_repos(args: CommandLineArguments, root: Path, epel_release: int) -> None:
# Repos for Alma Linux 8 and later
gpgpath = Path("/etc/pki/rpm-gpg/RPM-GPG-KEY-AlmaLinux")
gpgurl = "https://repo.almalinux.org/almalinux/RPM-GPG-KEY-AlmaLinux"
ha_url = f"baseurl={args.mirror}/almalinux/{args.release}/HighAvailability/x86_64/os"
epel_url = f"baseurl={args.mirror}/epel/{epel_release}/Everything/x86_64"
else:
- appstream_url = (
- f"mirrorlist=https://mirrors.almalinux.org/mirrorlist/{args.release}/appstream"
- )
+ appstream_url = f"mirrorlist=https://mirrors.almalinux.org/mirrorlist/{args.release}/appstream"
baseos_url = f"mirrorlist=https://mirrors.almalinux.org/mirrorlist/{args.release}/baseos"
extras_url = f"mirrorlist=https://mirrors.almalinux.org/mirrorlist/{args.release}/extras"
powertools_url = f"mirrorlist=https://mirrors.almalinux.org/mirrorlist/{args.release}/powertools"
ha_url = f"mirrorlist=https://mirrors.almalinux.org/mirrorlist/{args.release}/ha"
epel_url = f"mirrorlist=https://mirrors.fedoraproject.org/mirrorlist?repo=epel-{epel_release}&arch=x86_64"
- setup_dnf(
- args,
- root,
- repos=[
- Repo("AppStream", f"AlmaLinux-{args.release} - AppStream", appstream_url, gpgpath, gpgurl),
- Repo("BaseOS", f"AlmaLinux-{args.release} - Base", baseos_url, gpgpath, gpgurl),
- Repo("extras", f"AlmaLinux-{args.release} - Extras", extras_url, gpgpath, gpgurl),
- Repo("Powertools", f"AlmaLinux-{args.release} - Powertools", powertools_url, gpgpath, gpgurl),
- Repo("HighAvailability", f"AlmaLinux-{args.release} - HighAvailability", ha_url, gpgpath, gpgurl),
- Repo(
- "epel",
- f"name=Extra Packages for Enterprise Linux {epel_release} - $basearch",
- epel_url,
- epel_gpgpath,
- epel_gpgurl,
- ),
- ],
- )
+ repos = [Repo("AppStream", f"AlmaLinux-{args.release} - AppStream", appstream_url, gpgpath, gpgurl),
+ Repo("BaseOS", f"AlmaLinux-{args.release} - Base", baseos_url, gpgpath, gpgurl),
+ Repo("extras", f"AlmaLinux-{args.release} - Extras", extras_url, gpgpath, gpgurl),
+ Repo("Powertools", f"AlmaLinux-{args.release} - Powertools", powertools_url, gpgpath, gpgurl),
+ Repo("HighAvailability", f"AlmaLinux-{args.release} - HighAvailability", ha_url, gpgpath, gpgurl)]
+
+ if 'epel' in args.distribution.name:
+ repos += [Repo("epel", f"name=Extra Packages for Enterprise Linux {epel_release} - $basearch",
+ epel_url, epel_gpgpath, epel_gpgurl)]
- return ["AppStream", "BaseOS", "extras", "Powertools", "HighAvailability"]
+ setup_dnf(args, root, repos)
def is_older_than_centos8(release: str) -> bool:
epel_release = int(args.release.split(".")[0])
if old:
- default_repos = install_centos_repos_old(args, root, epel_release)
+ install_centos_repos_old(args, root, epel_release)
else:
- default_repos = install_centos_repos_new(args, root, epel_release)
- extra_repos = []
+ install_centos_repos_new(args, root, epel_release)
packages = {*args.packages}
add_packages(args, packages, "centos-release", "systemd")
packages.update(args.build_packages)
if args.distribution == Distribution.centos_epel:
- extra_repos += ["epel"]
add_packages(args, packages, "epel-release")
if do_run_build_script:
if not do_run_build_script and args.distribution == Distribution.centos_epel and args.network_veth:
add_packages(args, packages, "systemd-networkd", conditional="systemd")
- install_packages_dnf(args, root, default_repos, packages, do_run_build_script, extra_repos)
+ install_packages_dnf(args, root, packages, do_run_build_script)
@complete_step("Installing Rocky Linux…")
def install_rocky(args: CommandLineArguments, root: Path, do_run_build_script: bool) -> None:
epel_release = int(args.release.split(".")[0])
- default_repos = install_rocky_repos(args, root, epel_release)
- extra_repos = []
+ install_rocky_repos(args, root, epel_release)
packages = {*args.packages}
add_packages(args, packages, "rocky-release", "systemd")
packages.update(args.build_packages)
if args.distribution == Distribution.rocky_epel:
- extra_repos += ["epel"]
add_packages(args, packages, "epel-release")
if do_run_build_script:
if not do_run_build_script and args.distribution == Distribution.rocky_epel and args.network_veth:
add_packages(args, packages, "systemd-networkd", conditional="systemd")
- install_packages_dnf(args, root, default_repos, packages, do_run_build_script, extra_repos)
+ install_packages_dnf(args, root, packages, do_run_build_script)
@complete_step("Installing Alma Linux…")
def install_alma(args: CommandLineArguments, root: Path, do_run_build_script: bool) -> None:
epel_release = int(args.release.split(".")[0])
- default_repos = install_alma_repos(args, root, epel_release)
- extra_repos = []
+ install_alma_repos(args, root, epel_release)
packages = {*args.packages}
add_packages(args, packages, "almalinux-release", "systemd")
packages.update(args.build_packages)
if args.distribution == Distribution.alma_epel:
- extra_repos += ["epel"]
add_packages(args, packages, "epel-release")
if do_run_build_script:
if not do_run_build_script and args.distribution == Distribution.alma_epel and args.network_veth:
add_packages(args, packages, "systemd-networkd", conditional="systemd")
- install_packages_dnf(args, root, default_repos, packages, do_run_build_script, extra_repos)
+ install_packages_dnf(args, root, packages, do_run_build_script)
def debootstrap_knows_arg(arg: str) -> bool: