Antworten:
Sie können repotrack
stattdessen wie folgt verwenden:
repotrack -a x86_64 -p /repos/Packages [packages]
Leider gibt es einen Fehler mit der -a
Flagge (Bogen). Es wird i686 und x86_64 herunterladen.
So beheben Sie das Problem:
if opts.arch:
#archlist = []
#archlist.extend(rpmUtils.arch.getArchList(opts.arch))
archlist = opts.arch.split(',') # Change to this
else:
archlist = rpmUtils.arch.getArchList()
Mit können repoquery
Sie eine Liste der Gruppenpakete abrufen:
repoquery --qf=%{name} -g --list --grouppkgs=all [groups]
Was Sie in repotrack einspeisen können:
repoquery --qf=%{name} -g --list --grouppkgs=all [groups] | xargs repotrack -a x86_64 -p /repos/Packages
--recursive
Fügen Sie dem Befehl repoquery die Option hinzu, damit er rekursiv funktioniert.
yum-utils
Projekt eingefügt werden . Der Grund, warum mehr Pakete als erwartet heruntergeladen werden, ist, dass die Funktion rpmUtils.arch.getArchList()
alle kompatiblen Architekturen für die angegebene zurückgibt. Es enthält zum Beispiel die noarch
Architektur, die von x86_64
Paketen benötigt werden kann. Sie können die Quelle überprüfen: yum.baseurl.org/gitweb?p=yum.git;a=blob;f=rpmUtils/…
Zu jedermanns Information, yumdownloader
macht den Job nicht. Für alle, die Erfahrung in der Paketverwaltung mit `yum haben, ist es natürlich zu erwarten, dass die folgende Befehlszeile ein Paket-RPM und alle seine Abhängigkeiten rekursiv herunterlädt:
yumdownloader --resolve <package>
Aber das tut es nicht. Möglicherweise werden Abhängigkeiten der ersten Ebene oder solche gedruckt, die noch nicht installiert sind. Ich bin mir nicht sicher.
Hier ist eine Methode, die unter CentOS 6.5 funktioniert. Befolgen Sie die Schritte, um das yum
von Red Hat bereitgestellte Downloadonly-Plugin zu installieren . Grundsätzlich tun Sie unter CentOS 6.x Folgendes:
$ sudo yum install yum-plugin-downloadonly.noarch
Dann nutzen Sie das Plugin in Kombination mit dem --installroot
Schalter von yum
. Dadurch wird verhindert yum
, dass bereits auf dem System installierte Abhängigkeiten aufgelöst und übersprungen werden.
sudo yum install \
--installroot=</path/to/tmp_dir> \
--downloadonly --downloaddir <rpm_dir> <package>
Sie haben die RPMs des Pakets <package>
und alle Abhängigkeiten im Verzeichnis heruntergeladen <rpm_dir>
. Beispiel mit Git:
$ mkdir root rpms
$ sudo yum install --installroot=/home/roy/root \
--downloadonly --downloaddir rpms/ git
sudo yum install yum-plugin-downloadonly.noarch
sagt No package yum-plugin-downloadonly.noarch available.
was zu tun ist?
yum search yumdownloader
kehrt zurückyum-utils.noarch
Cannot find a valid baseurl for repo: base/$releasever/x86_64
wenn ich das --installroot
Flag hinzufüge .
Cannot find a valid baseurl...
Problem auf Centos 7 wurde mit der Lösung auf diesem Link--releasever=/
Mir ist klar, dass der Thread alt ist, aber falls jemand darüber stolpert, können Sie yum verwenden, um das gewünschte Verhalten zu erreichen.
Zuerst das Downloadonly Plugin installieren (Anleitung für RHEL): (RHEL5)
$ yum install yum-downloadonly
(RHEL6)
$ yum install yum-plugin-downloadonly
Führen Sie anschließend den Befehl wie folgt aus:
$ yum install --downloadonly --downloaddir=/some/arbitrary/path [package]
Wenn Sie ignorieren, wird das --downloaddir
YUM automatisch heruntergeladen/var/cache/yum
Wenn Sie yumdownloader nicht speziell verwenden müssen, ist dies meiner Meinung nach der einfachste Weg, um das Ziel zu erreichen.
Wenn Sie aus der Zukunft (Fedora 23+) kommen, in der yum durch dnf ersetzt wird, ist dieses Bash-Skript möglicherweise hilfreich.
rpmDownloader:
#!/bin/sh
set -xev
rm -fr packages
#dnf download $1 --destdir packages
export PATH=.:$PATH
echo $PWD
DEPS=$(rpmResolver $1)
dnf download $DEPS --destdir packages
rm -fr ${1}-dependencies
mv packages ${1}-dependencies
rpmResolver:
#!/bin/sh
goal=$1
deps=$(rpm -q --qf '[%{REQUIRENAME}\n]' $goal | egrep -v '^(rpmlib|rtld|config|/)')
goals=
while true; do
subs=$(rpm -q --qf '%{NAME}\n' --whatprovides $deps | sort -u | tr '\n' ' ')
if [ ."$subs" = ."$goals" ]; then
echo -n "$goals "
exit 0
fi
goals=$(echo $goals $subs | tr ' ' '\n' | sort -u | tr '\n' ' ')
for sub in $subs; do
subdeps=$(rpm -q --qf '[%{REQUIRENAME}\n]' $sub | egrep -v '^(rpmlib|rtld|config|/)')
deps=$(echo $deps $subdeps | sort -u)
done
done
Ich fand es in der Praxis schwierig, ein solches Repo zu bauen. Wir haben dieses Repo gebaut, weil:
Die Probleme, die wir behandeln können, waren:
Am Ende bestand die bessere Lösung für unser Problem darin, die offiziellen Repos zu vertreten und die von uns verwendeten Pakete zwischenzuspeichern. Das funktioniert gut, weil:
Wir haben Nginx und die integrierte Proxy-Unterstützung verwendet.
Aufbauend auf Lukes Antwort und den Kommentaren ...
Zum Zeitpunkt des Schreibens repotrack
werden alle folgenden Architekturen übereinstimmen , wenn x86_64
angegeben wird: x86_64
, athlon
, i686
, i586
, i486
, i386
, und noarch
.
Für meine Zwecke interessiere ich mich nur für x86_64
und noarch
Pakete, und ich weiß, dass meine Distribution keine athlon
Pakete enthält.
Der folgende Befehl ruft eine Liste der Paket-URLs ab, filtert i?86
Architekturen heraus und druckt die Namen der Pakete beim Herunterladen aus:
repotrack --arch=x86_64 --urls gs1000-server \
| sed '/\.i[3-6]86\.rpm$/d' \
| xargs -I {} sh -c 'curl -s -O {}; echo {} | rev | cut -d '/' -f 1 | rev'
Beachten Sie, dass Sie repotrack
nicht gewarnt werden, wenn in Ihren aktivierten Repos kein Paket gefunden wird, das eine Abhängigkeit erfüllt. Es überspringt es leise.
Probiere auch
repoquery -R --resolve --recursive <name> | xargs -r yumdownloader
z.B:
repoquery -R --resolve --recursive firefox | xargs -r yumdownloader
--requires
--resolve
Option von repoquery funktioniert nicht rekursiv für deps.