Respuestas:
En su repotrack
lugar, puede usar así:
repotrack -a x86_64 -p /repos/Packages [packages]
Desafortunadamente hay un error con la -a
bandera (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 repoquery
para 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
--recursive
opción al comando repoquery para que funcione recursivamente.
yum-utils
proyecto 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 noarch
arquitectura que pueden necesitar los x86_64
paquetes. Puede consultar la fuente: yum.baseurl.org/gitweb?p=yum.git;a=blob;f=rpmUtils/…
Para información de todos, yumdownloader
no 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 yum
dada 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 --installroot
interruptor de yum
. Esto evita que se yum
resuelva 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.noarch
dice No package yum-plugin-downloadonly.noarch available.
qué hacer?
yum search yumdownloader
regresayum-utils.noarch
Cannot find a valid baseurl for repo: base/$releasever/x86_64
cuando agrego la --installroot
bandera.
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 --downloaddir
yum 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 repotrack
coincidirá con todas las siguientes arquitecturas cuando x86_64
se especifica: x86_64
, athlon
, i686
, i586
, i486
, i386
, y noarch
.
Para mis propósitos sólo estoy interesado en x86_64
y noarch
paquetes, y sé que mi distribución no tiene ningún athlon
paquetes.
El siguiente comando obtiene una lista de URL de paquetes, filtra i?86
arquitecturas 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 repotrack
no 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
--resolve
opción de repoquery no funciona de forma recursiva para los deps.