如何使用 dnf 构建 chroot 监狱?

如何使用 dnf 构建 chroot 监狱?

以前我曾经使用yum.它简单、容易,让我可以做当时无法真正实现的事情(使用相同的基础设施在 ia64 和 ppc 等平台上为多个发行版构建软件包)。

快进 5 年了,我想在 Fedora 23 上构建一个简单的 chroot 监狱。然而,dnf这并不容易。我过去只能/etc/yum.repo.d/在监狱目录中创建一个文件并调用yum --installroot.不幸的是,dnf仍在阅读本地存储库,而不是在 chroot 监狱中创建的存储库。

是否可以dnf使用非/etc/dnf/dnf.conf或 中的conf 文件/etc/yum.repos.d/

答案1

正如您所发现的,对于 dnf,您需要指定参数--releaserver

此外,如果您想使用特定于 chroot 的存储库,那么您还需要做更多的工作。

我发现最简单的解决方案是在 chroot 中创建您自己的dnf.conf文件,将存储库配置放入其中,然后使用它。

例如,假设您想在$(pwd)/mychroot文件夹中创建 Fedora 24 chroot,仅使用 fedora 和 rpmfusion-free 存储库中的软件包。

您将创建mychroot/etc/dnf/dnf.conf包含以下内容的文件:

[main]
gpgcheck=1
installonly_limit=3
clean_requirements_on_remove=True
reposdir=

[fedora]
name=Fedora $releasever - $basearch
failovermethod=priority
metalink=https://mirrors.fedoraproject.org/metalink?repo=fedora-$releasever&arch=$basearch
enabled=1
metadata_expire=7d
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-fedora-$releasever-$basearch
skip_if_unavailable=False

[updates]
name=Fedora $releasever - $basearch - Updates
failovermethod=priority
metalink=https://mirrors.fedoraproject.org/metalink?repo=updates-released-f$releasever&arch=$basearch
enabled=1
gpgcheck=1
metadata_expire=6h
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-fedora-$releasever-$basearch
skip_if_unavailable=False

[rpmfusion-free]
name=RPM Fusion for Fedora $releasever - Free
metalink=https://mirrors.rpmfusion.org/metalink?repo=free-fedora-$releasever&arch=$basearch
enabled=1
metadata_expire=14d
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-rpmfusion-free-fedora-$releasever

(查看/etc/yum.repos.d/*.repo系统上的文件并复制粘贴)

重要的部分是该main部分中的这一行,它告诉 dnf 不要在任何目录中搜索存储库,而只在主配置文件中搜索存储库,这将使其忽略您的系统存储库:

reposdir=

最后,你可以运行dnf:

# dnf -c $(pwd)/mychroot/etc/dnf/dnf.conf install --installroot=$(pwd)/mychroot --releasever=24 gstreamer1-libav

答案2

自2016-10年左右Dnf已经更改了其默认值。这意味着当执行像这样的命令时

# dnf --installroot=/mnt/new-root --releasever=26 \
    group install custom-environment

地下城现在首先寻找 etc/dnf/dnf.conf默认情况下,在etc/yum.repo.d/mnt/new-root

可以通过指定更改此默认值:

 --setopt=reposdir=/other/path --config /other/location/dnf.conf

答案3

dnf 允许在命令行上设置任何配置选项,其中包括reposdir.应该可以使用这样的命令:

ROOT=/path/to/my/chroot
dnf --installroot="$ROOT" \
    -c "$ROOT"/etc/dnf/dnf.conf \
    --setopt=reposdir="$ROOT"/etc/yum.repos.d \
    install ...

相关内容