Risposte:
Puoi usare repotrack
invece così:
repotrack -a x86_64 -p /repos/Packages [packages]
Sfortunatamente c'è un bug con la -a
bandiera (arco). Scaricherà i686 e x86_64.
Ecco come risolverlo:
if opts.arch:
#archlist = []
#archlist.extend(rpmUtils.arch.getArchList(opts.arch))
archlist = opts.arch.split(',') # Change to this
else:
archlist = rpmUtils.arch.getArchList()
È possibile utilizzare repoquery
per ottenere un elenco di pacchetti di gruppo:
repoquery --qf=%{name} -g --list --grouppkgs=all [groups]
Che puoi alimentare in repotrack:
repoquery --qf=%{name} -g --list --grouppkgs=all [groups] | xargs repotrack -a x86_64 -p /repos/Packages
--recursive
opzione al comando repoquery per farlo funzionare in modo ricorsivo.
yum-utils
progetto a monte . Il motivo per cui scarica più pacchetti del previsto è perché la funzione rpmUtils.arch.getArchList()
restituisce tutte le architetture compatibili per quella data. Include ad esempio l' noarch
architettura che potrebbe essere necessaria per i x86_64
pacchetti. Puoi controllare la fonte: yum.baseurl.org/gitweb?p=yum.git;a=blob;f=rpmUtils/…
Per informazioni di tutti, yumdownloader
non fa il lavoro. Per chiunque abbia esperienza nella gestione dei pacchetti con `yum, è naturale aspettarsi che la seguente riga di comando scarichi ricorsivamente un pacchetto RPM e tutte le sue dipendenze:
yumdownloader --resolve <package>
Ma non lo fa. Può essere che stampa le dipendenze di primo livello o quelle che non sono già installate. Non sono sicuro.
Ecco un metodo che funziona su CentOS 6.5. Seguire i passaggi per installare il plug-in downloadonly yum
come indicato da Red Hat . Fondamentalmente, su CentOS 6.x, fai:
$ sudo yum install yum-plugin-downloadonly.noarch
Quindi utilizzare il plug-in in combinazione con l' --installroot
opzione di yum
. Ciò impedisce yum
di risolvere e quindi saltare le dipendenze che sono già installate sul sistema.
sudo yum install \
--installroot=</path/to/tmp_dir> \
--downloadonly --downloaddir <rpm_dir> <package>
Avresti scaricato RPM del pacchetto <package>
e tutte le sue dipendenze nella directory <rpm_dir>
,. Esempio, 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.
cosa fare?
yum search yumdownloader
restituisceyum-utils.noarch
Cannot find a valid baseurl for repo: base/$releasever/x86_64
quando aggiungo la --installroot
bandiera.
Cannot find a valid baseurl...
problema su Centos 7 con la soluzione su questo link : aggiungi il --releasever=/
parametro
Mi rendo conto che il filo è vecchio, ma nel caso qualcuno si imbattesse in questo, puoi usare yum per realizzare il comportamento desiderato.
Prima installa il plugin downloadonly (istruzioni per RHEL): (RHEL5)
$ yum install yum-downloadonly
(RHEL6)
$ yum install yum-plugin-downloadonly
Quindi eseguire il comando come segue:
$ yum install --downloadonly --downloaddir=/some/arbitrary/path [package]
Se ignori lo --downloaddir
yum verrà scaricato automaticamente su/var/cache/yum
Quindi, a meno che non sia necessario utilizzare yumdownloader specificamente, penso che questo sarebbe il modo più semplice per raggiungere l'obiettivo.
Se vieni dal futuro (Fedora 23+), dove yum viene sostituito con dnf, potresti trovare utile questo script bash .
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
Ho scoperto che in pratica costruire un repository come questo è difficile da mantenere. Abbiamo creato questo repository perché:
I problemi che possiamo affrontare sono stati:
Alla fine la soluzione migliore al nostro problema era quella di delegare i repository ufficiali e memorizzare nella cache i pacchetti che abbiamo usato. Questo funziona bene perché:
Abbiamo usato Nginx e il supporto proxy integrato.
Basandosi sulla risposta di Luke e sui commenti ...
Al momento della stesura repotrack
corrisponderà tutte le seguenti architetture quando x86_64
viene specificato: x86_64
, athlon
, i686
, i586
, i486
, i386
, e noarch
.
Per i miei scopi Sono interessato solo in x86_64
e noarch
pacchetti, e so che la mia distribuzione non ha athlon
pacchetti.
Il seguente comando ottiene un elenco di URL dei pacchetti, filtra le i?86
architetture e stampa i nomi dei pacchetti mentre vengono scaricati:
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'
Nota che repotrack
non ti avvisa se non riesce a trovare un pacchetto che soddisfa una dipendenza nei repository abilitati. Lo salta silenziosamente.
Prova anche
repoquery -R --resolve --recursive <name> | xargs -r yumdownloader
per esempio:
repoquery -R --resolve --recursive firefox | xargs -r yumdownloader
--requires
--resolve
opzione repoquery non funziona in modo ricorsivo per i deps.