Wie baut man mit dnf Chroot-Gefängnisse?

7

Früher baute ich Chroot-Gefängnisse mit yum. Es war einfach, leicht und ließ mich Dinge tun, die zu diesem Zeitpunkt nicht wirklich verfügbar waren (Pakete für mehrere Distributionen auf Plattformen wie ia64 und ppc mit derselben Infrastruktur erstellen).

5 Jahre schneller Vorlauf, ich möchte auf Fedora 23 ein einfaches Chroot-Gefängnis bauen. Das dnfmacht dies jedoch nicht einfach. Früher konnte ich einfach eine /etc/yum.repo.d/Datei im Gefängnisverzeichnis erstellen und anrufen yum --installroot. Leider dnfliest immer noch das lokale Repo und nicht das im Chroot-Gefängnis erstellte.

Ist es möglich, dnfConf-Dateien zu verwenden, die nicht /etc/dnf/dnf.confoder nicht vorhanden sind /etc/yum.repos.d/?

Joe
quelle
Es stellt sich also heraus, dass durch das Hinzufügen --releasever=23die Installation mit meinen lokalen Repos funktioniert hat, aber ich kann trotzdem nicht auf ein anderes Repo verweisen, das nicht Teil meiner Installation ist. Dies bringt mir das, was ich gerade will, löst aber nicht das Grundproblem
Joe

Antworten:

3

Wie Sie herausgefunden haben, müssen Sie mit dnf das --releaserverArgument angeben .

Wenn Sie außerdem Repositorys verwenden möchten, die für die Chroot spezifisch sind, benötigen Sie etwas mehr Arbeit.

Ich finde, die einfachste Lösung besteht darin, eine eigene dnf.confDatei in der Chroot zu erstellen , die Repository-Konfigurationen darin abzulegen und sie dann zu verwenden.

$(pwd)/mychrootAngenommen , Sie möchten eine Fedora 24-Chroot im Ordner erstellen , indem Sie nur Pakete aus den Fedora- und rpmfusion-freien Repositorys verwenden.

Sie würden die mychroot/etc/dnf/dnf.confDatei mit folgendem Inhalt erstellen :

[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

(Sehen Sie sich die /etc/yum.repos.d/*.repoDateien auf Ihrem System an und kopieren Sie sie einfach.)

Der wichtige Teil ist diese Zeile in dem mainAbschnitt, in dem dnf angewiesen wird, nicht in einem Verzeichnis nach Repositorys zu suchen, sondern nur in der Hauptkonfigurationsdatei, wodurch Ihre System-Repositorys ignoriert werden:

reposdir=

Schließlich können Sie dnf ausführen:

# dnf -c $(pwd)/mychroot/etc/dnf/dnf.conf install --installroot=$(pwd)/mychroot --releasever=24 gstreamer1-libav
Mathieu Bridon
quelle
Sie können es jetzt zeigen!
Demi
Und ich habe es endlich getan. Entschuldigung, ich habe so lange gebraucht. : - /
Mathieu Bridon
Ich habe das versucht, aber alles was ich bekomme istAttributeError: 'NoneType' object has no attribute 'lstrip'
Panzi
3

Seit etwa 2016-10 hat Dnf seine Standardeinstellungen geändert . Das heißt bei der Ausführung eines Befehls wie

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

Dnf sucht jetzt standardmäßig zuerst nachetc/dnf/dnf.conf und etc/yum.repo.dunter /mnt/new-root.

Diese Standardeinstellung kann geändert werden, indem Folgendes angegeben wird:

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

Mit dnf können Sie eine beliebige Konfigurationsoption in der Befehlszeile festlegen reposdir. Es sollte möglich sein, einen Befehl wie diesen zu verwenden:

ROOT=/path/to/my/chroot
dnf --installroot="$ROOT" \
    -c "$ROOT"/etc/dnf/dnf.conf \
    --setopt=reposdir="$ROOT"/etc/yum.repos.d \
    install ...
sourcejedi
quelle
Dies gibt keine Antwort auf die Frage. Um einen Autor zu kritisieren oder um Klärung zu bitten, hinterlassen Sie einen Kommentar unter seinem Beitrag. - Aus dem Rückblick
Thomas
@ Thomas bevorzugen Sie diese Formulierung?
Sourcejedi