以前我曾经使用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
答案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 ...