Respuestas:
En su repotracklugar, puede usar así:
repotrack -a x86_64 -p /repos/Packages [packages]
Desafortunadamente hay un error con la -abandera (arco). Descargará i686 y x86_64.
Aquí se explica cómo solucionarlo:
if opts.arch:
#archlist = []
#archlist.extend(rpmUtils.arch.getArchList(opts.arch))
archlist = opts.arch.split(',') # Change to this
else:
archlist = rpmUtils.arch.getArchList()
Puede usar repoquerypara obtener una lista de paquetes grupales:
repoquery --qf=%{name} -g --list --grouppkgs=all [groups]
Que puede alimentar en repotrack:
repoquery --qf=%{name} -g --list --grouppkgs=all [groups] | xargs repotrack -a x86_64 -p /repos/Packages
--recursiveopción al comando repoquery para que funcione recursivamente.
yum-utilsproyecto ascendente . La razón por la que descarga más paquetes de lo esperado es porque la función rpmUtils.arch.getArchList()devuelve todas las arquitecturas compatibles para el dado. Incluye, por ejemplo, la noarcharquitectura que pueden necesitar los x86_64paquetes. Puede consultar la fuente: yum.baseurl.org/gitweb?p=yum.git;a=blob;f=rpmUtils/…
Para información de todos, yumdownloaderno hace el trabajo. Para cualquier persona con alguna experiencia en administración de paquetes con `yum, es natural esperar que la siguiente línea de comandos descargue recursivamente un paquete RPM y todas sus dependencias:
yumdownloader --resolve <package>
Pero no lo hace. Puede ser que imprima dependencias de primer nivel o aquellas que aún no están instaladas. No estoy seguro.
Aquí hay un método que funciona en CentOS 6.5. Siga los pasos para instalar el plugin para DownloadOnly yumdada por Red Hat . Básicamente, en CentOS 6.x, haga:
$ sudo yum install yum-plugin-downloadonly.noarch
Luego utilice el complemento en combinación con el --installrootinterruptor de yum. Esto evita que se yumresuelva y luego salte las dependencias que ya están instaladas en el sistema.
sudo yum install \
--installroot=</path/to/tmp_dir> \
--downloadonly --downloaddir <rpm_dir> <package>
Debería descargar los RPM del paquete <package>y todas sus dependencias en el directorio <rpm_dir>,. Ejemplo, con Git:
$ mkdir root rpms
$ sudo yum install --installroot=/home/roy/root \
--downloadonly --downloaddir rpms/ git
sudo yum install yum-plugin-downloadonly.noarchdice No package yum-plugin-downloadonly.noarch available.qué hacer?
yum search yumdownloaderregresayum-utils.noarch
Cannot find a valid baseurl for repo: base/$releasever/x86_64cuando agrego la --installrootbandera.
Cannot find a valid baseurl...problema en Centos 7 con la solución en este enlace : Agregue el --releasever=/parámetro
Me doy cuenta de que el hilo es antiguo, pero en caso de que alguien se encuentre con esto, puede usar yum para lograr el comportamiento deseado.
Primero instale el complemento de descarga solamente (instrucciones para RHEL): (RHEL5)
$ yum install yum-downloadonly
(RHEL6)
$ yum install yum-plugin-downloadonly
Luego ejecute el comando de la siguiente manera:
$ yum install --downloadonly --downloaddir=/some/arbitrary/path [package]
Si ignora el --downloaddiryum se descargará automáticamente a/var/cache/yum
Entonces, a menos que necesite usar yumdownloader específicamente, creo que esta sería la forma más simple de lograr el objetivo.
Si eres del futuro (Fedora 23+), donde yum está siendo reemplazado por dnf, es posible que este script bash sea útil.
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
Encontré que en la práctica construir un repositorio como este es difícil de mantener. Construimos este repositorio porque:
Los problemas que podemos enfrentar fueron:
Al final, la mejor solución a nuestro problema fue proxy de los repositorios oficiales y almacenar en caché los paquetes que utilizamos. Esto funciona bien porque:
Utilizamos Nginx y el soporte de proxy incorporado.
Sobre la base de la respuesta de Luke y los comentarios ...
Al escribir estas líneas repotrackcoincidirá con todas las siguientes arquitecturas cuando x86_64se especifica: x86_64, athlon, i686, i586, i486, i386, y noarch.
Para mis propósitos sólo estoy interesado en x86_64y noarchpaquetes, y sé que mi distribución no tiene ningún athlonpaquetes.
El siguiente comando obtiene una lista de URL de paquetes, filtra i?86arquitecturas e imprime los nombres de los paquetes a medida que se descargan:
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'
Tenga en cuenta que repotrackno le advierte si no puede encontrar un paquete que satisfaga una dependencia en sus repositorios habilitados. Lo omite en silencio.
Intenta también
repoquery -R --resolve --recursive <name> | xargs -r yumdownloader
p.ej:
repoquery -R --resolve --recursive firefox | xargs -r yumdownloader
--requires--resolveopción de repoquery no funciona de forma recursiva para los deps.